Fix conversations before they hit the LLM (#3660)

Co-authored-by: Douwe Osinga <douwe@squareup.com>
This commit is contained in:
Douwe Osinga
2025-07-28 18:23:10 +02:00
committed by GitHub
parent 1d3a91912a
commit 4442ccfe4a
4 changed files with 444 additions and 6 deletions
+11 -3
View File
@@ -56,6 +56,7 @@ use super::platform_tools;
use super::router_tools;
use super::tool_execution::{ToolCallResult, CHAT_MODE_TOOL_SKIPPED_RESPONSE, DECLINED_RESPONSE};
use crate::agents::subagent_task_config::TaskConfig;
use crate::conversation_fixer::{debug_conversation_fix, ConversationFixer};
const DEFAULT_MAX_TURNS: u32 = 1000;
@@ -706,14 +707,21 @@ impl Agent {
}
}
#[instrument(skip(self, messages, session), fields(user_message))]
#[instrument(skip(self, unfixed_messages, session), fields(user_message))]
pub async fn reply(
&self,
messages: &[Message],
unfixed_messages: &[Message],
session: Option<SessionConfig>,
cancel_token: Option<CancellationToken>,
) -> Result<BoxStream<'_, Result<AgentEvent>>> {
let mut messages = messages.to_vec();
let (mut messages, issues) =
ConversationFixer::fix_conversation(Vec::from(unfixed_messages));
if !issues.is_empty() {
tracing::warn!(
"Conversation issue fixed: {}",
debug_conversation_fix(&messages, unfixed_messages, &issues)
);
}
let initial_messages = messages.clone();
let reply_span = tracing::Span::current();
self.reset_retry_attempts().await;