Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -68,7 +68,7 @@ async def lifespan(app: FastAPI):
|
|
| 68 |
print("🚀 Initializing models and prompt template...")
|
| 69 |
|
| 70 |
try:
|
| 71 |
-
GOOGLE_API_KEY = os.getenv("
|
| 72 |
print("🔑 gemini_api_key:", "FOUND" if GOOGLE_API_KEY else "NOT FOUND")
|
| 73 |
|
| 74 |
if not GOOGLE_API_KEY:
|
|
@@ -100,10 +100,10 @@ async def lifespan(app: FastAPI):
|
|
| 100 |
model="gemini-2.0-flash",
|
| 101 |
api_key=GOOGLE_API_KEY,
|
| 102 |
temperature=0.1,
|
| 103 |
-
max_output_tokens=
|
| 104 |
)
|
| 105 |
ml_models["prompt_template"] = ChatPromptTemplate.from_template("""
|
| 106 |
-
**Role**: You are an expert assistant in insurance, legal compliance, human resources,
|
| 107 |
**Instructions**:
|
| 108 |
- If the query contains multiple questions, split them into perfect sub-questions.
|
| 109 |
- Use ONLY the provided context to answer.
|
|
@@ -113,10 +113,7 @@ async def lifespan(app: FastAPI):
|
|
| 113 |
- Avoid phrases like “the provided document states” or “according to the context.”
|
| 114 |
- Summarize relevant parts of the context without losing meaning.
|
| 115 |
- If the answer is not in the context for some subqueries, respond exactly with: " I do not know the answer of "subquery",Please ask query related to the Document only." for that subquery.
|
| 116 |
-
- Keep answers professional, clear, and direct
|
| 117 |
-
**Tone & Style**:
|
| 118 |
-
- Professional yet approachable.
|
| 119 |
-
- Clear and direct.
|
| 120 |
---
|
| 121 |
**Context**:
|
| 122 |
{context}
|
|
@@ -228,7 +225,7 @@ async def run_hackrx(req: RunRequest):
|
|
| 228 |
# end_time2 = time.time() - start_time2
|
| 229 |
# print(f"vector done: {end_time2}")
|
| 230 |
# dense_retriever = vectorstore.as_retriever(search_type="mmr",search_kwargs={"k": 8})
|
| 231 |
-
dense_retriever = vectorstore.as_retriever(search_type="mmr",search_kwargs={"k":
|
| 232 |
# dense_retriever = vectorstore.as_retriever(search_type="similarity" ,search_kwargs={"k": 11} )
|
| 233 |
|
| 234 |
|
|
@@ -236,7 +233,7 @@ async def run_hackrx(req: RunRequest):
|
|
| 236 |
keyword_retriever = BM25Retriever.from_documents(chunks)
|
| 237 |
keyword_retriever.k = 9
|
| 238 |
# dense_retriever = Chroma.from_documents(documents=chunks, embedding=ml_models["embedder"]).as_retriever()
|
| 239 |
-
ensemble_retriever = EnsembleRetriever(retrievers=[keyword_retriever, dense_retriever], weights=[0.
|
| 240 |
### to make it faster we are now using our built reranker thats why commenting the code below
|
| 241 |
# compression_retriever = ContextualCompressionRetriever(
|
| 242 |
# base_retriever=ensemble_retriever, base_compressor=ml_models["reranker_compressor"]
|
|
|
|
| 68 |
print("🚀 Initializing models and prompt template...")
|
| 69 |
|
| 70 |
try:
|
| 71 |
+
GOOGLE_API_KEY = os.getenv("gemini_api_key")
|
| 72 |
print("🔑 gemini_api_key:", "FOUND" if GOOGLE_API_KEY else "NOT FOUND")
|
| 73 |
|
| 74 |
if not GOOGLE_API_KEY:
|
|
|
|
| 100 |
model="gemini-2.0-flash",
|
| 101 |
api_key=GOOGLE_API_KEY,
|
| 102 |
temperature=0.1,
|
| 103 |
+
max_output_tokens=350
|
| 104 |
)
|
| 105 |
ml_models["prompt_template"] = ChatPromptTemplate.from_template("""
|
| 106 |
+
**Role**: You are an expert assistant in insurance, legal compliance, human resources, contract management and Question Answering.
|
| 107 |
**Instructions**:
|
| 108 |
- If the query contains multiple questions, split them into perfect sub-questions.
|
| 109 |
- Use ONLY the provided context to answer.
|
|
|
|
| 113 |
- Avoid phrases like “the provided document states” or “according to the context.”
|
| 114 |
- Summarize relevant parts of the context without losing meaning.
|
| 115 |
- If the answer is not in the context for some subqueries, respond exactly with: " I do not know the answer of "subquery",Please ask query related to the Document only." for that subquery.
|
| 116 |
+
- Keep answers professional, clear, and direct.
|
|
|
|
|
|
|
|
|
|
| 117 |
---
|
| 118 |
**Context**:
|
| 119 |
{context}
|
|
|
|
| 225 |
# end_time2 = time.time() - start_time2
|
| 226 |
# print(f"vector done: {end_time2}")
|
| 227 |
# dense_retriever = vectorstore.as_retriever(search_type="mmr",search_kwargs={"k": 8})
|
| 228 |
+
dense_retriever = vectorstore.as_retriever(search_type="mmr",search_kwargs={"k": 12 ,"lambda_mult": 0.7} )
|
| 229 |
# dense_retriever = vectorstore.as_retriever(search_type="similarity" ,search_kwargs={"k": 11} )
|
| 230 |
|
| 231 |
|
|
|
|
| 233 |
keyword_retriever = BM25Retriever.from_documents(chunks)
|
| 234 |
keyword_retriever.k = 9
|
| 235 |
# dense_retriever = Chroma.from_documents(documents=chunks, embedding=ml_models["embedder"]).as_retriever()
|
| 236 |
+
ensemble_retriever = EnsembleRetriever(retrievers=[keyword_retriever, dense_retriever], weights=[0.35, 0.65],search_kwargs={"k": 10})
|
| 237 |
### to make it faster we are now using our built reranker thats why commenting the code below
|
| 238 |
# compression_retriever = ContextualCompressionRetriever(
|
| 239 |
# base_retriever=ensemble_retriever, base_compressor=ml_models["reranker_compressor"]
|