Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 18 additions & 13 deletions crates/goose/src/agents/agent.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1178,7 +1178,6 @@ impl Agent {
).await?;

let mut no_tools_called = true;
let mut messages_to_add = Conversation::default();
let mut tools_updated = false;
let mut did_recovery_compact_this_iteration = false;
let mut exit_chat = false;
Expand Down Expand Up @@ -1233,7 +1232,8 @@ impl Agent {
if !text.is_empty() {
last_assistant_text = text;
}
messages_to_add.push(response.clone());
session_manager.add_message(&session_config.id, &response).await?;
conversation.push(response);
Comment thread
codefromthecrypt marked this conversation as resolved.
continue;
}

Expand Down Expand Up @@ -1429,7 +1429,8 @@ impl Agent {
response.created,
thinking_content,
).with_id(format!("msg_{}", Uuid::new_v4()));
messages_to_add.push(thinking_msg);
session_manager.add_message(&session_config.id, &thinking_msg).await?;
conversation.push(thinking_msg);
}

// Collect reasoning content to attach to tool request messages
Expand Down Expand Up @@ -1457,11 +1458,14 @@ impl Agent {
request.metadata.as_ref(),
request.tool_meta.clone(),
);
messages_to_add.push(request_msg);
let final_response = tool_response_messages[idx]
.lock().await.clone();
yield AgentEvent::Message(final_response.clone());
messages_to_add.push(final_response);
// Persist the tool request and response as a pair
session_manager.add_message(&session_config.id, &request_msg).await?;
session_manager.add_message(&session_config.id, &final_response).await?;
conversation.push(request_msg);
conversation.push(final_response.clone());
yield AgentEvent::Message(final_response);
} else {
error!(
"Tool call could not be parsed: {}",
Expand Down Expand Up @@ -1598,11 +1602,13 @@ impl Agent {
if final_output_tool.final_output.is_none() {
warn!("Final output tool has not been called yet. Continuing agent loop.");
let message = Message::user().with_text(FINAL_OUTPUT_CONTINUATION_MESSAGE);
messages_to_add.push(message.clone());
session_manager.add_message(&session_config.id, &message).await?;
conversation.push(message.clone());
yield AgentEvent::Message(message);
} else {
let message = Message::assistant().with_text(final_output_tool.final_output.clone().unwrap());
messages_to_add.push(message.clone());
session_manager.add_message(&session_config.id, &message).await?;
conversation.push(message.clone());
yield AgentEvent::Message(message);
exit_chat = true;
}
Expand All @@ -1613,6 +1619,8 @@ impl Agent {
Ok(should_retry) => {
if should_retry {
info!("Retry logic triggered, restarting agent loop");
session_manager.replace_conversation(&session_config.id, &conversation).await?;
yield AgentEvent::HistoryReplaced(conversation.clone());
} else {
exit_chat = true;
}
Expand Down Expand Up @@ -1653,17 +1661,14 @@ impl Agent {
}).await?;
}
conversation = Conversation::new_unvalidated(updated_messages);
messages_to_add.push(summary_msg);
session_manager.add_message(&session_config.id, &summary_msg).await?;
conversation.push(summary_msg);
} else {
warn!("Expected a tool request/reply pair, but found {} matching messages",
matching.len());
}
}

for msg in &messages_to_add {
session_manager.add_message(&session_config.id, msg).await?;
}
conversation.extend(messages_to_add);
if exit_chat {
break;
}
Expand Down
Loading