Skip to main content
The Conversation type manages message history, validation, and transformations for LLM interactions.

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

A validated sequence of messages. Source: crates/goose/src/conversation/mod.rs:12

Constructor Methods

new()

Create a validated conversation.
I: IntoIterator<Item = Message>
required
Iterator of messages
Returns: Validated Conversation or error Errors: Returns 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
Returns: Unvalidated Conversation Note: Used internally before applying fixes Source: crates/goose/src/conversation/mod.rs:29-34

empty()

Create an empty conversation.
Source: crates/goose/src/conversation/mod.rs:36-38

Message Access

messages()

Get the message list.
Returns: Reference to message vector Source: crates/goose/src/conversation/mod.rs:40-42 Example:

last()

Get the last message.
Source: crates/goose/src/conversation/mod.rs:65-67

first()

Get the first message.
Source: crates/goose/src/conversation/mod.rs:69-71

len()

Get message count.
Source: crates/goose/src/conversation/mod.rs:73-75

is_empty()

Check if conversation is empty.
Source: 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
Behavior:
  • If the last message has the same ID, content is merged
  • Otherwise, message is appended
Source: crates/goose/src/conversation/mod.rs:44-63 Example:

extend()

Add multiple messages.
I: IntoIterator<Item = Message>
required
Messages to add
Source: crates/goose/src/conversation/mod.rs:81-88

pop()

Remove and return the last message.
Source: crates/goose/src/conversation/mod.rs:94-96

truncate()

Keep only the first N messages.
usize
required
Number of messages to keep
Source: crates/goose/src/conversation/mod.rs:98-100

clear()

Remove all messages.
Source: crates/goose/src/conversation/mod.rs:102-104

Filtering

filtered_messages()

Filter messages by metadata.
F: Fn(&MessageMetadata) -> bool
required
Predicate function
Returns: Filtered message vector Source: crates/goose/src/conversation/mod.rs:106-115

agent_visible_messages()

Get messages visible to the agent.
Returns: Messages with metadata.agent_visible = true Source: crates/goose/src/conversation/mod.rs:117-119 Example:

user_visible_messages()

Get messages visible to the user.
Returns: Messages with 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
Returns: Tuple of (fixed_conversation, issues_found) Fixes Applied:
  1. Merge consecutive text content in assistant messages
  2. Trim trailing whitespace from assistant messages
  3. Remove empty messages
  4. Fix orphaned tool calls/responses
  5. Merge consecutive messages with same role
  6. Ensure conversation starts with user and ends with user
  7. Add placeholder “Hello” if empty
Source: crates/goose/src/conversation/mod.rs:164-200 Example:

Message Type

Message Struct

Source: crates/goose/src/conversation/message.rs:663-670
Option<String>
Unique message identifier (auto-generated if not set)
Role
required
Role::User or Role::Assistant
i64
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.
Source: crates/goose/src/conversation/message.rs:700-708

assistant()

Create an assistant message.
Source: crates/goose/src/conversation/message.rs:710-718 Example:

Message Builders

with_text()

Add text content.
Source: crates/goose/src/conversation/message.rs:737-748

with_image()

Add image content.
Source: crates/goose/src/conversation/message.rs:751-753

with_tool_request()

Add a tool call.
Source: crates/goose/src/conversation/message.rs:756-762

with_tool_response()

Add a tool result.
Source: crates/goose/src/conversation/message.rs:780-786

with_visibility()

Set visibility flags.
Source: crates/goose/src/conversation/message.rs:927-931 Example:

Message Utilities

as_concat_text()

Get all text content concatenated.
Returns: Newline-joined text from all text content items Source: crates/goose/src/conversation/message.rs:835-841

is_tool_call()

Check if message contains tool requests.
Source: crates/goose/src/conversation/message.rs:844-848

is_tool_response()

Check if message contains tool responses.
Source: crates/goose/src/conversation/message.rs:851-855

MessageContent Variants

Source: crates/goose/src/conversation/message.rs:185-199

MessageMetadata

Controls message visibility.
Source: crates/goose/src/conversation/message.rs:586-591

Constructors

Source: crates/goose/src/conversation/message.rs:603-625 Example:
  • Agent - Uses Conversation for context
  • Session - Persists Conversation
  • Config - Configuration system