File size: 2,020 Bytes
d0fbfa7
 
 
 
 
 
fe5db94
d0fbfa7
 
 
 
 
 
 
 
 
af077f4
d0fbfa7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from fastapi import FastAPI, File, UploadFile, Form
from file_processing import load_documents, chunk_documents, create_embeddings
from query_processing import load_qa_chain, process_query
from dotenv import load_dotenv
import os

# load_dotenv(r'C:\Users\sksha\Desktop\llm-assignment-master\llm-assignment-master\llm-assignment-master_\backend\.env')

openai_api_key = os.environ.get('OPENAI_API_KEY')
print(openai_api_key)

app = FastAPI()
from fastapi.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["http://localhost:3000","https://chity-chat-front-vercel.vercel.app"],  # Allows only requests from your React app
    allow_credentials=True,
    allow_methods=["*"],  # Allows all methods
    allow_headers=["*"],  # Allows all headers
)

@app.post("/process-file")
async def process_file(collection_name: str = Form(...), file: UploadFile = File(...)):
    print("Received collection_name:", collection_name)
    print("Received file:", file.filename)
    # Load documents
    documents = await load_documents(file)

    # Chunk documents
    chunked_docs = chunk_documents(documents, chunk_size=500, chunk_overlap=100)

    # Create embeddings and store in Chroma
    vector_store = create_embeddings(chunked_docs, collection_name)
    preview_length = 750  # Adjust based on desired preview size
    document_previews = [doc.page_content[:preview_length] for doc in documents]  # or whatever attribute holds the content

    # Return the success message along with the document previews
    return {"message": "File processed successfully", "document_preview": document_previews}
from pydantic import BaseModel

class QueryRequest(BaseModel):
    collection_name: str
    query: str
@app.post("/query")
async def query(request: QueryRequest):
    # Load the RetrievalQA chain
    print(request.dict())
    qa_chain = load_qa_chain(request.collection_name)

    # Process the query
    result = process_query(request.query, qa_chain)

    return {"result": result}