haive.core.schema.preserve_messages_reducer¶
Custom message reducer for preserving BaseMessage fields.
This module provides a custom reducer function that preserves BaseMessage objects intact during state updates in multi-agent systems. Unlike LangGraph’s default add_messages reducer, this implementation avoids converting messages to dicts and back, which can cause loss of important fields like tool_call_id.
The preserve_messages_reducer is critical for multi-agent tool coordination, ensuring that ToolMessage objects maintain their tool_call_id field when passed between agents. This prevents KeyError exceptions and enables proper tool result routing.
Example
>>> from haive.core.schema.preserve_messages_reducer import preserve_messages_reducer
>>> from langchain_core.messages import ToolMessage
>>>
>>> # Create a ToolMessage with tool_call_id
>>> tool_msg = ToolMessage(content="Result: 42", tool_call_id="call_123")
>>>
>>> # Using preserve_messages_reducer maintains the field
>>> messages = preserve_messages_reducer([], [tool_msg])
>>> assert messages[0].tool_call_id == "call_123" # Preserved!
Note
This reducer is automatically used by AgentSchemaComposer for message fields to ensure proper multi-agent message handling.
Functions¶
|
Custom reducer that preserves BaseMessage objects to avoid losing fields. |
Module Contents¶
- haive.core.schema.preserve_messages_reducer.preserve_messages_reducer(left, right)[source]¶
Custom reducer that preserves BaseMessage objects to avoid losing fields.
This is a replacement for LangGraph’s add_messages reducer that avoids calling convert_to_messages when the messages are already BaseMessage objects.