Spaces:
Sleeping
Sleeping
File size: 2,142 Bytes
3f7b6a8 27d375b 3426e6e 388bac8 0d3c10a 6edcaaa 9c7a5d2 27d375b 9c7a5d2 3426e6e 6edcaaa 3426e6e 388bac8 3426e6e 3f7b6a8 27f4327 6edcaaa 27f4327 3426e6e 0d3c10a 6edcaaa 3426e6e 6edcaaa 0d3c10a 3426e6e 0d3c10a 388bac8 9c7a5d2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
from fastapi import FastAPI, Request
from os import getenv
from langchain_huggingface import HuggingFaceEmbeddings
from fastapi.responses import HTMLResponse, FileResponse
from fastapi.staticfiles import StaticFiles
from modules.langchain_init import get_llm
from modules.soup_extractor import bs4_extractor
from langchain_community.document_loaders import WebBaseLoader, RecursiveUrlLoader
from langchain_core.vectorstores import InMemoryVectorStore
from langchain import hub
app = FastAPI()
MY_KEY = getenv("MY_KEY")
embeddings = HuggingFaceEmbeddings(model_name="jinaai/jina-embeddings-v2-small-en")
llm = get_llm()
def create_loader(url:str):
return RecursiveUrlLoader(
# "https://book.cairo-lang.org/",
url,
extractor=bs4_extractor,
max_depth=2,
)
loader = {}
docs = []
my_vector_store = {}
prompt = hub.pull("rlm/rag-prompt")
def simple_rag(question, prompt):
retrieved_docs = my_vector_store.similarity_search(question)
docs_content = "\n\n".join(doc.page_content for doc in retrieved_docs)
prompt = prompt.invoke({"question": question, "context": docs_content})
return llm.invoke(prompt)
app.mount("/static", StaticFiles(directory="static", html=True), name="static")
@app.post("/receive-embeddings")
async def receive_embeddings(request: Request):
data = await request.json()
embeddings = data.get("embeddings")
# Process the embeddings as needed
return {"status": "OK"}
@app.post("/chat")
async def chat(request: Request):
data = await request.json()
message = data.get("message")
# Process the message and generate a reply
response = simple_rag(message, prompt)
reply = response.content
return {"reply": reply}
@app.get("/embeddings")
def get_embeddings(input: str):
loader = create_loader(input)
docs = loader.load()
my_vector_store = InMemoryVectorStore.from_documents(docs, embeddings)
return {
"embeddings": [],
"test": "testtext"
}
@app.get("/", response_class=HTMLResponse)
def get_index():
return FileResponse(path="/app/static/index.html", media_type="text/html")
|