Strixa AI
TopicsSearchPricing
Sign inStart tracking

Signal Detail

Loading signal detail

Reading this signal card's judgment, risks, and evidence.

Strixa AI
TopicsSearchPricing
Sign inStart tracking
Back to Signal Feed
CodeTracked since May 21, 2026

Preserve uploaded-file metadata in gateway message normalization

The PR fixes a backend regression where `normalize_input` rebuilt every inbound dict as a plain `HumanMessage` and dropped `additional_kwargs`, `id`, and `name`, which caused uploaded files to vanish from the active turn and appear as `(empty)` to the model. It now delegates conversion to `convert_to_messages`, preserving message roles and metadata (including `additional_kwargs.files`) at the gateway boundary so uploads and message identity survive into runtime processing.

normalize_inputconvert_to_messagesadditional_kwargs.filesBaseMessage

Signal Intelligence

Confidence Level98%
Worth Continued TrackingFinal score 82% with 1 evidence item.
Primary Impact Areas
normalize_inputconvert_to_messagesadditional_kwargs.files

What Happened

  • The PR fixes a backend regression where `normalize_input` rebuilt every inbound dict as a plain `HumanMessage` and dropped `additional_kwargs`, `id`, and `name`, which caused uploaded files to vanish from the active turn and appear as `(empty)` to the model. It now delegates conversion to `convert_to_messages`, preserving message roles and metadata (including `additional_kwargs.files`) at the gateway boundary so uploads and message identity survive into runtime processing.
  • The PR fixes a backend regression where `normalize_input` rebuilt every inbound dict as a plain `HumanMessage` and dropped `additional_kwargs`, `id`, and `name`, which caused uploaded files to vanish from the active turn and appear as `(empty)` to the model. It now delegates conversion to `convert_to_messages`, preserving message roles and metadata (including `additional_kwargs.files`) at the gateway boundary so uploads and message identity survive into runtime processing.
  • 1 evidence item attached for review.

What is Different

Before

Scattered source updates, isolated context, and manual follow-up across multiple feeds.

Now

Replaced the custom dict-to-message conversion in `backend/app/gateway/services.py` with LangChain’s `convert_to_messages`, which preserves `additional_kwargs` (including uploaded files), `id`, `name`, response metadata, and full role handling for human/AI/system/tool messages while leaving existing `BaseMessage` objects untouched.

Why Track This

Why It Matters

Chat users and operators who upload files in a turn will now see those files remain attached and rendered for the current message instead of disappearing after submission, so file-dependent interactions keep using the intended context and avoid silent fallback behavior. This is achieved by routing inbound message normalization through the same conversion path LangGraph uses, and the next watch items are client-side payload compatibility with supported roles, schema drift in `additional_kwargs`, and stability of message-ID deduplication when optimistic and persisted messages are reconciled.

Impact

Chat users and operators who upload files in a turn will now see those files remain attached and rendered for the current message instead of disappearing after submission, so file-dependent interactions keep using the intended context and avoid silent fallback behavior. This is achieved by routing inbound message normalization through the same conversion path LangGraph uses, and the next watch items are client-side payload compatibility with supported roles, schema drift in `additional_kwargs`, and stability of message-ID deduplication when optimistic and persisted messages are reconciled.

What To Watch Next

  • Watch whether normalize_input becomes a repeated pattern.
  • Track follow-up changes around AI Agents.
  • Compare future signals against this evidence trail.
  • Re-check risk flags: watch_client_payload_schema_for_message_additional_kwargs, watch_role_handling_for_human_ai_system_tool_messages.
Open Topic TimelineOpen Technical EventOpen Original Sourcewatch_client_payload_schema_for_message_additional_kwargs / watch_role_handling_for_human_ai_system_tool_messages / watch_message_id_deduplication_when_optimistic_updates_reconcile / watch_downstream_services_if_large_files_metadata_is_passed_unexpectedly

Supporting Evidence

GITHUB PULL REQUESTHigh Trust

bytedance/deer-flow PR #3136: fix(gateway): preserve message additional_kwargs in normalize_input (#3132)

A hand-rolled dict→message coercion in `gateway.services.normalize_input` stripped upload metadata before graph execution; replacing it with `langchain_core.messages.utils.convert_to_messages` restores the file list and identifiers.