AG-UI TOOL_CALL_RESULT metadata is dropped in the live stream reducer
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 35/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Ferma
- Stack tecnologico
- typescript
Direzione di ricerca
Read packages/ai/src/activities/chat/stream/processor.ts and packages/ai/src/activities/chat/stream/message-updaters.ts, then compare with the snapshot conversion in packages/ai/src/activities/chat/messages.ts. Check the existing tests for live tool result events and add coverage for metadata preservation on creation and update; done means live results retain metadata consistently with hydrated snapshots. An open linked pull request already covers this issue.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
The live AG-UI TOOL_CALL_RESULT handling path drops the event's metadata when constructing the ToolResultPart.
This makes metadata behave inconsistently between live streaming and message snapshot/history hydration: a ToolMessage.metadata received in a MESSAGES_SNAPSHOT can be preserved, but the same metadata delivered on a live TOOL_CALL_RESULT is not available on the resulting UIMessage.parts entry.
Expected behavior
When a TOOL_CALL_RESULT event contains metadata, the resulting ToolResultPart should retain it:
{
type: 'tool-result',
toolCallId: 'call-123',
content: '...',
state: 'complete',
metadata: {
displayType: 'account-assets',
},
}
Actual behavior
In packages/ai/src/activities/chat/stream/processor.ts, handleToolCallResultEvent() receives the full event, but calls updateToolResultPart() without forwarding chunk.metadata.
In packages/ai/src/activities/chat/stream/message-updaters.ts, updateToolResultPart() constructs a ToolResultPart containing content, state, error, and outcome, but does not set metadata.
The public ToolResultPart type in packages/ai/src/types.ts already declares metadata?: Record<string, unknown>, and the snapshot conversion path in packages/ai/src/activities/chat/messages.ts preserves metadata from tool messages. So the type and snapshot path support this field, but the live event reducer currently drops it.
Reproduction
-
Stream an AG-UI
TOOL_CALL_RESULTevent with ametadataobject:{ "type": "TOOL_CALL_RESULT", "messageId": "assistant-1", "toolCallId": "call-123", "content": "{\"ok\":true}", "metadata": { "displayType": "account-assets" } } -
Observe the resulting
UIMessage.partsentry withtype === 'tool-result'. -
The
contentis present, butmetadatais missing.
Suggested fix
Forward the event metadata into updateToolResultPart() and persist it on the created ToolResultPart. Please also consider how metadata should be merged when an existing tool-result part is updated, so an update does not accidentally discard previously stored metadata.
Add a regression test covering:
- Live
TOOL_CALL_RESULT.metadatais retained inToolResultPart.metadata. - Snapshot/history hydration and live streaming produce consistent metadata.
- Updating an existing tool-result part does not unintentionally lose metadata.
Relevant code
- Live event handling
- Tool result updater
- ToolResultPart type
- Snapshot conversion preserves tool message metadata
Thanks!
- Lingua principale
- TypeScript
- Stelle
- 3.3k
- Fork
- 378
- Merge medio
- 1g 2h
- PR unite (30g)
- 254
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di TanStack/ai
-
openai-base: a Responses max_output_tokens cutoff ends as RUN_ERROR without usage instead of finishReason 'length'Forse già presa @tombeckenham l’ha presa 8 giorni fa. Apertahas-pr waiting-on: maintainer
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
TanStack/ai#1916 · 1 commento · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
ai-sandbox: encrypt snapshot blobs at rest with an encrypting blob store wrapperForse già presa @AlemTuzlak l’ha presa 1 giorno fa. Apertawaiting-on: maintainer
TanStack/ai#2062 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
Sandbox takeover: the saved transcript loses everything the first host delivered before the restartForse già presa @tombeckenham l’ha presa 1 giorno fa. Apertawaiting-on: maintainer
TanStack/ai#2061 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
withSandbox: each run's save drops the harness tool calls of earlier runsForse già presa @tombeckenham l’ha presa 1 giorno fa. Apertahas-pr waiting-on: maintainer
TanStack/ai#2059 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
ai-compaction: checkpoint never reused when the store returns message keys in another orderForse già presa @tombeckenham l’ha presa 1 giorno fa. Apertahas-pr waiting-on: maintainer
TanStack/ai#2050 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
Issue simili
-
The sample email preview's ResizeObserver is never disconnected and keeps raising errors after leaving SettingsForse già presa Una pull request collegata a questa issue è aperta o già unita. Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
area:ui bug effort:S priority:P2
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
Typo in WSL project description on Projects pageForse già presa @akhil9tiet l’ha presa oggi. Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 75/100
microsoft/opensource.microsoft.com#1066 · 1 commento ·
-
ArcGIS Maps SDK for JavaScript c-carousel calcite-design-tokens enhancement impact - p3 - not time sensitive needs triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
Esri/calcite-design-system#15565 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
linkwarden/linkwarden#1891 ·
I maintainer di solito rispondono entro 1 giorno