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")