Shreyas094 commited on
Commit
e482991
·
verified ·
1 Parent(s): c0570dd

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +30 -7
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
- database, temp_dir, search_results = duckduckgo_search(query)
452
- context = retrieve_web_search_results(database, query)
453
-
454
- prompt = f"""Using the following context from web search results:
 
 
 
 
 
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)