Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -203,6 +203,35 @@ async def run_hackrx(req: RunRequest):
|
|
| 203 |
# # Join for context
|
| 204 |
# joined_context = "\n\n".join(top_chunks)
|
| 205 |
# retrieved_chunks_all.append(joined_context)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 206 |
async def async_retrieve_and_rerank(question: str, q_idx: int):
|
| 207 |
docs = await ensemble_retriever.ainvoke(question)
|
| 208 |
doc_texts = [doc.page_content for doc in docs]
|
|
|
|
| 203 |
# # Join for context
|
| 204 |
# joined_context = "\n\n".join(top_chunks)
|
| 205 |
# retrieved_chunks_all.append(joined_context)
|
| 206 |
+
def mmr_select(query_embedding, doc_embeddings, k=6, lambda_mult=0.6):
|
| 207 |
+
selected = []
|
| 208 |
+
candidates = list(range(len(doc_embeddings)))
|
| 209 |
+
doc_embeddings = np.array(doc_embeddings)
|
| 210 |
+
|
| 211 |
+
# Convert query_embedding to 2D
|
| 212 |
+
query_embedding = np.array(query_embedding).reshape(1, -1)
|
| 213 |
+
|
| 214 |
+
# Compute similarity between query and all documents
|
| 215 |
+
query_doc_sims = cosine_similarity(query_embedding, doc_embeddings)[0]
|
| 216 |
+
|
| 217 |
+
for _ in range(k):
|
| 218 |
+
mmr_score = []
|
| 219 |
+
for idx in candidates:
|
| 220 |
+
if not selected:
|
| 221 |
+
diversity = 0
|
| 222 |
+
else:
|
| 223 |
+
selected_embeddings = doc_embeddings[selected]
|
| 224 |
+
diversity = max(cosine_similarity(
|
| 225 |
+
doc_embeddings[idx].reshape(1, -1),
|
| 226 |
+
selected_embeddings
|
| 227 |
+
)[0])
|
| 228 |
+
score = lambda_mult * query_doc_sims[idx] - (1 - lambda_mult) * diversity
|
| 229 |
+
mmr_score.append(score)
|
| 230 |
+
selected_idx = candidates[np.argmax(mmr_score)]
|
| 231 |
+
selected.append(selected_idx)
|
| 232 |
+
candidates.remove(selected_idx)
|
| 233 |
+
|
| 234 |
+
return selected
|
| 235 |
async def async_retrieve_and_rerank(question: str, q_idx: int):
|
| 236 |
docs = await ensemble_retriever.ainvoke(question)
|
| 237 |
doc_texts = [doc.page_content for doc in docs]
|