From 3d37e4a42d344051ae715ab59bd7b5718e46c343 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Sun, 7 Sep 2025 05:06:03 +0400 Subject: [PATCH] refac --- backend/open_webui/utils/middleware.py | 35 ++++++++++---- .../chat/Messages/ResponseMessage.svelte | 7 ++- .../ResponseMessage/StatusHistory.svelte | 35 +++++++------- .../StatusHistory/StatusItem.svelte | 48 ++++++++++++++++++- 4 files changed, 92 insertions(+), 33 deletions(-) diff --git a/backend/open_webui/utils/middleware.py b/backend/open_webui/utils/middleware.py index d17b03b882..7320d77816 100644 --- a/backend/open_webui/utils/middleware.py +++ b/backend/open_webui/utils/middleware.py @@ -663,16 +663,16 @@ async def chat_completion_files_handler( if len(queries) == 0: queries = [get_last_user_message(body["messages"])] - # await __event_emitter__( - # { - # "type": "status", - # "data": { - # "action": "queries_generated", - # "queries": queries, - # "done": True, - # }, - # } - # ) + await __event_emitter__( + { + "type": "status", + "data": { + "action": "queries_generated", + "queries": queries, + "done": False, + }, + } + ) try: # Offload get_sources_from_items to a separate thread @@ -710,6 +710,21 @@ async def chat_completion_files_handler( log.debug(f"rag_contexts:sources: {sources}") + sources_count = 0 + for source in sources: + sources_count += len(source.get("document", [])) + + await __event_emitter__( + { + "type": "status", + "data": { + "action": "sources_retrieved", + "count": sources_count, + "done": True, + }, + } + ) + return body, {"sources": sources} diff --git a/src/lib/components/chat/Messages/ResponseMessage.svelte b/src/lib/components/chat/Messages/ResponseMessage.svelte index 271a49e940..35aaf111e2 100644 --- a/src/lib/components/chat/Messages/ResponseMessage.svelte +++ b/src/lib/components/chat/Messages/ResponseMessage.svelte @@ -643,7 +643,10 @@
- + {#if message?.files && message.files?.filter((f) => f.type === 'image').length > 0}
@@ -729,7 +732,7 @@
{:else}
- {#if message.content === '' && !message.error && (message?.statusHistory ?? [...(message?.status ? [message?.status] : [])]).length === 0} + {#if message.content === '' && !message.error && ((message?.statusHistory ?? [...(message?.status ? [message?.status] : [])]).length === 0 || (message?.statusHistory?.at(-1)?.hidden ?? false))} {:else if message.content && message.error !== true} diff --git a/src/lib/components/chat/Messages/ResponseMessage/StatusHistory.svelte b/src/lib/components/chat/Messages/ResponseMessage/StatusHistory.svelte index bfdac3a817..ed32d16fdd 100644 --- a/src/lib/components/chat/Messages/ResponseMessage/StatusHistory.svelte +++ b/src/lib/components/chat/Messages/ResponseMessage/StatusHistory.svelte @@ -2,36 +2,33 @@ import { getContext } from 'svelte'; const i18n = getContext('i18n'); - import Collapsible from '$lib/components/common/Collapsible.svelte'; import StatusItem from './StatusHistory/StatusItem.svelte'; export let statusHistory = []; + export let showHistory = true; - let showHistory = false; + let history = []; + let status = null; + + $: if (history && history.length > 0) { + status = history.at(-1); + } + + $: if (JSON.stringify(statusHistory) !== JSON.stringify(history)) { + history = statusHistory; + } - - -{#if statusHistory && statusHistory.length > 0} - {@const status = statusHistory.at(-1)} - +{#if history && history.length > 0} {#if status?.hidden !== true}
{#if showHistory}
- {#if statusHistory.length > 1} + {#if history.length > 1}
- {#each statusHistory as status, idx} - {#if idx !== statusHistory.length - 1} + {#each history as status, idx} + {#if idx !== history.length - 1}
@@ -55,7 +52,7 @@ showHistory = !showHistory; }} > -
+
{#if status?.done === false} diff --git a/src/lib/components/chat/Messages/ResponseMessage/StatusHistory/StatusItem.svelte b/src/lib/components/chat/Messages/ResponseMessage/StatusHistory/StatusItem.svelte index 7f325f7f6e..f4728a2bf0 100644 --- a/src/lib/components/chat/Messages/ResponseMessage/StatusHistory/StatusItem.svelte +++ b/src/lib/components/chat/Messages/ResponseMessage/StatusHistory/StatusItem.svelte @@ -66,13 +66,57 @@
- + {query}
{/each}
+ {:else if status?.action === 'queries_generated' && status?.queries} +
+
+ {$i18n.t(`Querying`)} +
+ +
+ {#each status.queries as query, idx (query)} +
+
+ +
+ + + {query} + +
+ {/each} +
+
+ {:else if status?.action === 'sources_retrieved' && status?.count !== undefined} +
+
+ {#if status.count === 0} + {$i18n.t('No sources found')} + {:else if status.count === 1} + {$i18n.t('Retrieved 1 source')} + {:else} + {$i18n.t('Retrieved {{count}} sources', { + count: status.count + })} + {/if} +
+
{:else}
- {#if status?.description.includes('{{searchQuery}}')} + {#if status?.description?.includes('{{searchQuery}}')} {$i18n.t(status?.description, { searchQuery: status?.query })}