Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -284,9 +284,12 @@ def cleanup_web_search_database(temp_dir):
|
|
284 |
shutil.rmtree(temp_dir)
|
285 |
|
286 |
def duckduckgo_search(query):
|
|
|
287 |
with DDGS() as ddgs:
|
288 |
results = list(ddgs.text(query, max_results=5))
|
289 |
|
|
|
|
|
290 |
database, temp_dir = get_web_search_database()
|
291 |
documents = []
|
292 |
for result in results:
|
@@ -294,13 +297,21 @@ def duckduckgo_search(query):
|
|
294 |
doc = WebSearchDocument(page_content=content, metadata={"source": result['href']})
|
295 |
documents.append(doc)
|
296 |
|
|
|
297 |
database.add_documents(documents)
|
298 |
return database, temp_dir, results
|
299 |
|
300 |
def retrieve_web_search_results(database, query):
|
|
|
301 |
retriever = database.as_retriever(search_kwargs={"k": 5})
|
302 |
relevant_docs = retriever.get_relevant_documents(query)
|
303 |
|
|
|
|
|
|
|
|
|
|
|
|
|
304 |
context = "\n".join([f"{doc.page_content}\nSource: {doc.metadata['source']}" for doc in relevant_docs])
|
305 |
return context
|
306 |
|
@@ -339,15 +350,17 @@ def respond(message, history, model, temperature, num_calls, use_web_search, sel
|
|
339 |
logging.info(f"User Query: {message}")
|
340 |
logging.info(f"Model Used: {model}")
|
341 |
logging.info(f"Search Type: {'Web Search' if use_web_search else 'PDF Search'}")
|
342 |
-
|
343 |
logging.info(f"Selected Documents: {selected_docs}")
|
344 |
|
345 |
try:
|
346 |
if use_web_search:
|
|
|
|
|
|
|
|
|
|
|
347 |
for main_content, sources in get_response_with_search(message, model, num_calls=num_calls, temperature=temperature):
|
348 |
response = f"{main_content}\n\n{sources}"
|
349 |
-
first_line = response.split('\n')[0] if response else ''
|
350 |
-
# logging.info(f"Generated Response (first line): {first_line}")
|
351 |
yield response
|
352 |
else:
|
353 |
embed = get_embeddings()
|
@@ -448,10 +461,15 @@ After writing the document, please provide a list of sources used in your respon
|
|
448 |
yield "I apologize, but I couldn't generate a response at this time. Please try again later."
|
449 |
|
450 |
def get_response_with_search(query, model, num_calls=3, temperature=0.2):
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
|
|
|
|
|
|
|
|
|
|
455 |
{context}
|
456 |
Write a detailed and complete research document that fulfills the following user request: '{query}'
|
457 |
After writing the document, please provide a list of sources used in your response."""
|
@@ -477,6 +495,11 @@ After writing the document, please provide a list of sources used in your respon
|
|
477 |
chunk = message.choices[0].delta.content
|
478 |
main_content += chunk
|
479 |
yield main_content, "" # Yield partial main content without sources
|
|
|
|
|
|
|
|
|
|
|
480 |
finally:
|
481 |
# Clean up the temporary database
|
482 |
cleanup_web_search_database(temp_dir)
|
|
|
284 |
shutil.rmtree(temp_dir)
|
285 |
|
286 |
def duckduckgo_search(query):
|
287 |
+
logging.info(f"Performing DuckDuckGo search for query: {query}")
|
288 |
with DDGS() as ddgs:
|
289 |
results = list(ddgs.text(query, max_results=5))
|
290 |
|
291 |
+
logging.info(f"Number of search results: {len(results)}")
|
292 |
+
|
293 |
database, temp_dir = get_web_search_database()
|
294 |
documents = []
|
295 |
for result in results:
|
|
|
297 |
doc = WebSearchDocument(page_content=content, metadata={"source": result['href']})
|
298 |
documents.append(doc)
|
299 |
|
300 |
+
logging.info(f"Number of documents created: {len(documents)}")
|
301 |
database.add_documents(documents)
|
302 |
return database, temp_dir, results
|
303 |
|
304 |
def retrieve_web_search_results(database, query):
|
305 |
+
logging.info(f"Retrieving web search results for query: {query}")
|
306 |
retriever = database.as_retriever(search_kwargs={"k": 5})
|
307 |
relevant_docs = retriever.get_relevant_documents(query)
|
308 |
|
309 |
+
logging.info(f"Number of relevant documents retrieved: {len(relevant_docs)}")
|
310 |
+
|
311 |
+
if not relevant_docs:
|
312 |
+
logging.warning("No relevant documents found in the database")
|
313 |
+
return "No relevant information found."
|
314 |
+
|
315 |
context = "\n".join([f"{doc.page_content}\nSource: {doc.metadata['source']}" for doc in relevant_docs])
|
316 |
return context
|
317 |
|
|
|
350 |
logging.info(f"User Query: {message}")
|
351 |
logging.info(f"Model Used: {model}")
|
352 |
logging.info(f"Search Type: {'Web Search' if use_web_search else 'PDF Search'}")
|
|
|
353 |
logging.info(f"Selected Documents: {selected_docs}")
|
354 |
|
355 |
try:
|
356 |
if use_web_search:
|
357 |
+
database, temp_dir, search_results = duckduckgo_search(message)
|
358 |
+
if not search_results:
|
359 |
+
yield "I'm sorry, but I couldn't find any search results for your query. Could you please rephrase or ask a different question?"
|
360 |
+
return
|
361 |
+
|
362 |
for main_content, sources in get_response_with_search(message, model, num_calls=num_calls, temperature=temperature):
|
363 |
response = f"{main_content}\n\n{sources}"
|
|
|
|
|
364 |
yield response
|
365 |
else:
|
366 |
embed = get_embeddings()
|
|
|
461 |
yield "I apologize, but I couldn't generate a response at this time. Please try again later."
|
462 |
|
463 |
def get_response_with_search(query, model, num_calls=3, temperature=0.2):
|
464 |
+
try:
|
465 |
+
database, temp_dir, search_results = duckduckgo_search(query)
|
466 |
+
context = retrieve_web_search_results(database, query)
|
467 |
+
|
468 |
+
if context == "No relevant information found.":
|
469 |
+
yield "I'm sorry, but I couldn't find any relevant information for your query. Could you please rephrase or ask a different question?", ""
|
470 |
+
return
|
471 |
+
|
472 |
+
prompt = f"""Using the following context from web search results:
|
473 |
{context}
|
474 |
Write a detailed and complete research document that fulfills the following user request: '{query}'
|
475 |
After writing the document, please provide a list of sources used in your response."""
|
|
|
495 |
chunk = message.choices[0].delta.content
|
496 |
main_content += chunk
|
497 |
yield main_content, "" # Yield partial main content without sources
|
498 |
+
except Exception as e:
|
499 |
+
logging.error(f"Error in get_response_with_search: {str(e)}")
|
500 |
+
logging.error(traceback.format_exc())
|
501 |
+
yield "I'm sorry, but I encountered an error while processing your request. Please try again later.", ""
|
502 |
+
|
503 |
finally:
|
504 |
# Clean up the temporary database
|
505 |
cleanup_web_search_database(temp_dir)
|