From 4b451b984b930d4ab086e15882510e3358e9e4da Mon Sep 17 00:00:00 2001 From: tth37 Date: Mon, 21 Apr 2025 22:18:05 +0800 Subject: [PATCH] perf: Multi-thread web searching --- backend/open_webui/utils/middleware.py | 36 ++++++++++++++++---------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/backend/open_webui/utils/middleware.py b/backend/open_webui/utils/middleware.py index 4dde09643..4fc4df10d 100644 --- a/backend/open_webui/utils/middleware.py +++ b/backend/open_webui/utils/middleware.py @@ -355,21 +355,20 @@ async def chat_web_search_handler( all_results = [] - for searchQuery in queries: - await event_emitter( - { - "type": "status", - "data": { - "action": "web_search", - "description": 'Searching "{{searchQuery}}"', - "query": searchQuery, - "done": False, - }, - } - ) + await event_emitter( + { + "type": "status", + "data": { + "action": "web_search", + "description": "Searching the web", + "done": False, + }, + } + ) - try: - results = await process_web_search( + web_search_tasks = [ + asyncio.create_task( + process_web_search( request, SearchForm( **{ @@ -378,6 +377,15 @@ async def chat_web_search_handler( ), user=user, ) + ) + for searchQuery in queries + ] + gathered_results = await asyncio.gather(*web_search_tasks, return_exceptions=True) + + for searchQuery, results in zip(queries, gathered_results): + try: + if isinstance(results, Exception): + raise Exception(f"Error searching {searchQuery}: {str(results)}") if results: all_results.append(results)