Overview
Conversation provides:- Ordered message storage
- Automatic message validation and fixing
- Message visibility filtering (user vs agent)
- Tool call/response pairing
- Message deduplication and merging
Conversation Struct
crates/goose/src/conversation/mod.rs:12
Constructor Methods
new()
Create a validated conversation.I: IntoIterator<Item = Message>
required
Iterator of messages
InvalidConversation if messages violate conversation rules
Source: crates/goose/src/conversation/mod.rs:22-27
Example:
new_unvalidated()
Create an unvalidated conversation.I: IntoIterator<Item = Message>
required
Iterator of messages
crates/goose/src/conversation/mod.rs:29-34
empty()
Create an empty conversation.crates/goose/src/conversation/mod.rs:36-38
Message Access
messages()
Get the message list.crates/goose/src/conversation/mod.rs:40-42
Example:
last()
Get the last message.crates/goose/src/conversation/mod.rs:65-67
first()
Get the first message.crates/goose/src/conversation/mod.rs:69-71
len()
Get message count.crates/goose/src/conversation/mod.rs:73-75
is_empty()
Check if conversation is empty.crates/goose/src/conversation/mod.rs:77-79
Message Manipulation
push()
Add a message, merging with the last if IDs match.Message
required
Message to append
- If the last message has the same ID, content is merged
- Otherwise, message is appended
crates/goose/src/conversation/mod.rs:44-63
Example:
extend()
Add multiple messages.I: IntoIterator<Item = Message>
required
Messages to add
crates/goose/src/conversation/mod.rs:81-88
pop()
Remove and return the last message.crates/goose/src/conversation/mod.rs:94-96
truncate()
Keep only the first N messages.usize
required
Number of messages to keep
crates/goose/src/conversation/mod.rs:98-100
clear()
Remove all messages.crates/goose/src/conversation/mod.rs:102-104
Filtering
filtered_messages()
Filter messages by metadata.F: Fn(&MessageMetadata) -> bool
required
Predicate function
crates/goose/src/conversation/mod.rs:106-115
agent_visible_messages()
Get messages visible to the agent.metadata.agent_visible = true
Source: crates/goose/src/conversation/mod.rs:117-119
Example:
user_visible_messages()
Get messages visible to the user.metadata.user_visible = true
Source: crates/goose/src/conversation/mod.rs:121-123
Validation and Fixing
fix_conversation()
Automatically fix conversation issues.Conversation
required
Conversation to fix
- Merge consecutive text content in assistant messages
- Trim trailing whitespace from assistant messages
- Remove empty messages
- Fix orphaned tool calls/responses
- Merge consecutive messages with same role
- Ensure conversation starts with user and ends with user
- Add placeholder “Hello” if empty
crates/goose/src/conversation/mod.rs:164-200
Example:
Message Type
Message Struct
crates/goose/src/conversation/message.rs:663-670
Option<String>
Unique message identifier (auto-generated if not set)
Role
required
Role::User or Role::Assistanti64
required
Unix timestamp (seconds)
Vec<MessageContent>
required
Message content items (text, images, tool calls, etc.)
MessageMetadata
required
Visibility settings
Message Constructors
user()
Create a user message.crates/goose/src/conversation/message.rs:700-708
assistant()
Create an assistant message.crates/goose/src/conversation/message.rs:710-718
Example:
Message Builders
with_text()
Add text content.crates/goose/src/conversation/message.rs:737-748
with_image()
Add image content.crates/goose/src/conversation/message.rs:751-753
with_tool_request()
Add a tool call.crates/goose/src/conversation/message.rs:756-762
with_tool_response()
Add a tool result.crates/goose/src/conversation/message.rs:780-786
with_visibility()
Set visibility flags.crates/goose/src/conversation/message.rs:927-931
Example:
Message Utilities
as_concat_text()
Get all text content concatenated.crates/goose/src/conversation/message.rs:835-841
is_tool_call()
Check if message contains tool requests.crates/goose/src/conversation/message.rs:844-848
is_tool_response()
Check if message contains tool responses.crates/goose/src/conversation/message.rs:851-855
MessageContent Variants
crates/goose/src/conversation/message.rs:185-199
MessageMetadata
Controls message visibility.crates/goose/src/conversation/message.rs:586-591
Constructors
crates/goose/src/conversation/message.rs:603-625
Example: