Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -278,7 +278,19 @@ def generate_chunked_response(prompt, model, max_tokens=10000, num_calls=3, temp
|
|
278 |
def get_web_search_database():
|
279 |
embed = get_embeddings()
|
280 |
temp_dir = tempfile.mkdtemp()
|
281 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
282 |
return database, temp_dir
|
283 |
|
284 |
def cleanup_web_search_database(temp_dir):
|
@@ -286,21 +298,26 @@ def cleanup_web_search_database(temp_dir):
|
|
286 |
|
287 |
def duckduckgo_search(query):
|
288 |
logging.info(f"Performing DuckDuckGo search for query: {query}")
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
|
|
|
|
|
|
|
|
|
|
304 |
|
305 |
def retrieve_web_search_results(database, query):
|
306 |
logging.info(f"Retrieving web search results for query: {query}")
|
@@ -356,10 +373,8 @@ def respond(message: str, history: List[Tuple[str, str]], model: str, temperatur
|
|
356 |
try:
|
357 |
if use_web_search:
|
358 |
database, temp_dir, search_results = duckduckgo_search(message)
|
359 |
-
|
360 |
-
|
361 |
-
if not search_results:
|
362 |
-
yield "I'm sorry, but I couldn't find any search results for your query. Could you please rephrase or ask a different question?"
|
363 |
return
|
364 |
|
365 |
context = retrieve_web_search_results(database, message)
|
|
|
278 |
def get_web_search_database():
|
279 |
embed = get_embeddings()
|
280 |
temp_dir = tempfile.mkdtemp()
|
281 |
+
|
282 |
+
# Create a dummy document to initialize the database
|
283 |
+
dummy_doc = WebSearchDocument(page_content="Dummy content", metadata={"source": "dummy"})
|
284 |
+
|
285 |
+
try:
|
286 |
+
database = WebSearchFAISS.from_documents([dummy_doc], embed)
|
287 |
+
# Remove the dummy document after initialization
|
288 |
+
database.delete([dummy_doc.metadata["source"]])
|
289 |
+
except Exception as e:
|
290 |
+
logging.error(f"Error initializing WebSearchFAISS: {str(e)}", exc_info=True)
|
291 |
+
# If initialization fails, create an empty database
|
292 |
+
database = WebSearchFAISS(embed.embed_query, None, {}, {}, None)
|
293 |
+
|
294 |
return database, temp_dir
|
295 |
|
296 |
def cleanup_web_search_database(temp_dir):
|
|
|
298 |
|
299 |
def duckduckgo_search(query):
|
300 |
logging.info(f"Performing DuckDuckGo search for query: {query}")
|
301 |
+
try:
|
302 |
+
with DDGS() as ddgs:
|
303 |
+
results = list(ddgs.text(query, max_results=5))
|
304 |
+
|
305 |
+
logging.info(f"Number of search results: {len(results)}")
|
306 |
+
|
307 |
+
database, temp_dir = get_web_search_database()
|
308 |
+
documents = []
|
309 |
+
for result in results:
|
310 |
+
content = f"{result['title']}\n{result['body']}"
|
311 |
+
doc = WebSearchDocument(page_content=content, metadata={"source": result['href']})
|
312 |
+
documents.append(doc)
|
313 |
+
|
314 |
+
logging.info(f"Number of documents created: {len(documents)}")
|
315 |
+
if documents:
|
316 |
+
database.add_documents(documents)
|
317 |
+
return database, temp_dir, results
|
318 |
+
except Exception as e:
|
319 |
+
logging.error(f"Error in duckduckgo_search: {str(e)}", exc_info=True)
|
320 |
+
return None, None, []
|
321 |
|
322 |
def retrieve_web_search_results(database, query):
|
323 |
logging.info(f"Retrieving web search results for query: {query}")
|
|
|
373 |
try:
|
374 |
if use_web_search:
|
375 |
database, temp_dir, search_results = duckduckgo_search(message)
|
376 |
+
if database is None:
|
377 |
+
yield "I'm sorry, but I encountered an error while searching. Please try again later."
|
|
|
|
|
378 |
return
|
379 |
|
380 |
context = retrieve_web_search_results(database, message)
|