瀏覽代碼

Merge pull request #13111 from tth37/perf_multi_thread_web_searching

perf: Concurrent processing for web search queries
Tim Jaeryang Baek 5 月之前
父節點
當前提交
11d599c55d
共有 2 個文件被更改,包括 25 次插入19 次删除
  1. 23 19
      backend/open_webui/utils/middleware.py
  2. 2 0
      src/lib/components/chat/Messages/ResponseMessage.svelte

+ 23 - 19
backend/open_webui/utils/middleware.py

@@ -355,29 +355,33 @@ 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(
+    gathered_results = await asyncio.gather(
+        *(
+            process_web_search(
                 request,
-                SearchForm(
-                    **{
-                        "query": searchQuery,
-                    }
-                ),
+                SearchForm(**{"query": searchQuery}),
                 user=user,
             )
+            for searchQuery in queries
+        ),
+        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)

+ 2 - 0
src/lib/components/chat/Messages/ResponseMessage.svelte

@@ -683,6 +683,8 @@
 													{$i18n.t('No search query generated')}
 												{:else if status?.description === 'Generating search query'}
 													{$i18n.t('Generating search query')}
+												{:else if status?.description === 'Searching the web'}
+													{$i18n.t('Searching the web')}
 												{:else}
 													{status?.description}
 												{/if}