Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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
|
| 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 |
-
|
| 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(
|
| 178 |
-
keyword_retriever.k =
|
| 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 |
|