singhankur01 commited on
Commit
da7bc60
·
verified ·
1 Parent(s): 7a995b2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +33 -4
app.py CHANGED
@@ -14,10 +14,12 @@ 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
-
 
 
18
  from langchain_google_genai import ChatGoogleGenerativeAI
19
  from langchain_huggingface import HuggingFaceEmbeddings # Correct new import
20
- from langchain_chroma import Chroma
21
  from langchain_community.retrievers import BM25Retriever
22
  from langchain.retrievers import EnsembleRetriever, ContextualCompressionRetriever
23
  from langchain.retrievers.document_compressors import CrossEncoderReranker
@@ -145,10 +147,37 @@ async def run_hackrx(req: RunRequest):
145
  if not chunks:
146
  return JSONResponse({"error": "No documents could be processed."}, status_code=400)
147
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
148
  # Create retrievers using the pre-loaded models from our ml_models dictionary
149
  keyword_retriever = BM25Retriever.from_documents(chunks)
150
- dense_retriever = Chroma.from_documents(documents=chunks, embedding=ml_models["embedder"]).as_retriever()
151
- ensemble_retriever = EnsembleRetriever(retrievers=[keyword_retriever, dense_retriever], weights=[0.3, 0.7])
 
152
 
153
  compression_retriever = ContextualCompressionRetriever(
154
  base_retriever=ensemble_retriever, base_compressor=ml_models["reranker_compressor"]
 
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
22
+ # from langchain_chroma import Chroma
23
  from langchain_community.retrievers import BM25Retriever
24
  from langchain.retrievers import EnsembleRetriever, ContextualCompressionRetriever
25
  from langchain.retrievers.document_compressors import CrossEncoderReranker
 
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
 
182
  compression_retriever = ContextualCompressionRetriever(
183
  base_retriever=ensemble_retriever, base_compressor=ml_models["reranker_compressor"]