diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index 046d2a576b..34a037fb6a 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -71,7 +71,11 @@ import { AudioQueue } from '$lib/utils/audio'; import { RealtimeCall, getBridgeTurnState, type BridgeSubmission } from '$lib/utils/realtime'; import { createTemporaryChatId, isTemporaryChatId } from '$lib/utils/chatId'; - import { applyResponseStreamEvent, getOutputText } from './Messages/structuredOutput'; + import { + applyResponseStreamEvent, + getOutputText, + setOutputText + } from './Messages/structuredOutput'; import { archiveChatById, @@ -2999,6 +3003,9 @@ ...(history.messages[message.id].content !== message.content ? { originalContent: history.messages[message.id].content } : {}), + ...(typeof message.content === 'string' && history.messages[message.id].output?.length + ? { output: setOutputText(history.messages[message.id].output, message.content) } + : {}), ...message }; } diff --git a/src/lib/components/chat/Messages/structuredOutput.ts b/src/lib/components/chat/Messages/structuredOutput.ts index b59587c374..e8b86964fd 100644 --- a/src/lib/components/chat/Messages/structuredOutput.ts +++ b/src/lib/components/chat/Messages/structuredOutput.ts @@ -710,3 +710,23 @@ export function replaceOutputMessageText( return replaced ? nextOutput : output; } + +export function setOutputText(output: OutputItem[], text: string): OutputItem[] { + if (text === getOutputText(output)) { + return output; + } + + const lastMessage = output.filter((item) => item?.type === 'message').at(-1); + if (!lastMessage) { + return [ + ...output, + { type: 'message', role: 'assistant', content: [{ type: 'output_text', text }] } + ]; + } + + return output.map((item) => + item?.type === 'message' + ? { ...item, content: item === lastMessage ? [{ type: 'output_text', text }] : [] } + : item + ); +}