singhankur01 commited on
Commit
62da1fe
·
verified ·
1 Parent(s): ecae344

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -27
app.py CHANGED
@@ -14,8 +14,8 @@ from fastapi.responses import JSONResponse
14
  # Make sure you have these files in a 'utils' folder
15
  from utils.DocsLoader import load_and_chunk
16
  from utils.Schemas import RunRequest, RunResponse
17
- from concurrent.futures import ThreadPoolExecutor
18
- from langchain.vectorstores import FAISS
19
  from langchain.schema import Document
20
  from langchain_google_genai import ChatGoogleGenerativeAI
21
  from langchain_huggingface import HuggingFaceEmbeddings # Correct new import
@@ -143,39 +143,31 @@ def parse_llm_response(content: str) -> str:
143
  # --- 5. Main API Endpoint ---
144
  @app.post("/api/v1/hackrx/run", response_model=RunResponse, dependencies=[Depends(verify_api_key)])
145
  async def run_hackrx(req: RunRequest):
146
- chunks = load_and_chunk(str(req.documents))
147
- if not chunks:
148
- return JSONResponse({"error": "No documents could be processed."}, status_code=400)
149
 
150
 
151
  ####code for parallel####################################################################################
 
 
 
 
 
 
 
 
 
 
 
 
152
 
153
-
154
- docs = [Document(page_content=d.page_content) for d in chunks]
155
-
156
- # Parallel embedding
157
- def embed_batch(batch):
158
- texts = [d.page_content for d in batch]
159
- embs = ml_models['embedder'].embed_documents(texts)
160
- for doc, emb in zip(batch, embs):
161
- doc.embedding = emb
162
- return batch
163
-
164
- # Batch and run
165
- batch_size = 64
166
- batches = [docs[i:i+batch_size] for i in range(0, len(docs), batch_size)]
167
- embedded_docs = []
168
- with ThreadPoolExecutor() as executor:
169
- for batch in executor.map(embed_batch, batches):
170
- embedded_docs.extend(batch)
171
-
172
- vectorstore = FAISS.from_documents(embedded_docs, embedding=None)
173
  dense_retriever = vectorstore.as_retriever(search_kwargs={"k": 4})
174
 
175
 
176
  # Create retrievers using the pre-loaded models from our ml_models dictionary
177
- keyword_retriever = BM25Retriever.from_documents(chunks)
178
- keyword_retriever.k = 4
179
  # dense_retriever = Chroma.from_documents(documents=chunks, embedding=ml_models["embedder"]).as_retriever()
180
  ensemble_retriever = EnsembleRetriever(retrievers=[keyword_retriever, dense_retriever], weights=[0.4, 0.65])
181
 
 
14
  # Make sure you have these files in a 'utils' folder
15
  from utils.DocsLoader import load_and_chunk
16
  from utils.Schemas import RunRequest, RunResponse
17
+ # from concurrent.futures import ThreadPoolExecutor
18
+ from langchain_community.vectorstores import FAISS
19
  from langchain.schema import Document
20
  from langchain_google_genai import ChatGoogleGenerativeAI
21
  from langchain_huggingface import HuggingFaceEmbeddings # Correct new import
 
143
  # --- 5. Main API Endpoint ---
144
  @app.post("/api/v1/hackrx/run", response_model=RunResponse, dependencies=[Depends(verify_api_key)])
145
  async def run_hackrx(req: RunRequest):
146
+ # chunks = load_and_chunk(str(req.documents))
147
+ # if not chunks:
148
+ # return JSONResponse({"error": "No documents could be processed."}, status_code=400)
149
 
150
 
151
  ####code for parallel####################################################################################
152
+ all_chunks = []
153
+ for doc_url in req.documents:
154
+ chunks = load_and_chunk(doc_url)
155
+ all_chunks.extend(chunks)
156
+
157
+ if not all_chunks:
158
+ return JSONResponse({"error": "No documents could be processed."}, status_code=400)
159
+
160
+ vectorstore = await FAISS.afrom_documents(
161
+ documents=all_chunks,
162
+ embedding=ml_models["embedder"]
163
+ )
164
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
165
  dense_retriever = vectorstore.as_retriever(search_kwargs={"k": 4})
166
 
167
 
168
  # Create retrievers using the pre-loaded models from our ml_models dictionary
169
+ keyword_retriever = BM25Retriever.from_documents(all_chunks)
170
+ keyword_retriever.k = 3
171
  # dense_retriever = Chroma.from_documents(documents=chunks, embedding=ml_models["embedder"]).as_retriever()
172
  ensemble_retriever = EnsembleRetriever(retrievers=[keyword_retriever, dense_retriever], weights=[0.4, 0.65])
173