use std::sync::Arc;
use agent_base::{AgentBuilder, ConsecutiveFailureRecovery, Language, ReasoningConfig, ReasoningEffort};
use crate::agent::compression::SummarizingMiddleware;
pub fn base_agent_builder(llm_client: Arc<dyn agent_base::LlmClient>) -> AgentBuilder {
let max_tool_output_chars = match std::env::var("PHI_MAX_TOOL_OUTPUT_CHARS") {
Ok(value) => match value.trim().parse::<usize>() {
Ok(n) => n,
Err(_) => {
tracing::warn!(
value = %value,
"PHI_MAX_TOOL_OUTPUT_CHARS is not a valid integer; falling back to default 4000"
);
4000
}
},
Err(_) => 4000,
};
AgentBuilder::new(llm_client.clone())
.language(Language::En)
.reasoning(ReasoningConfig { effort: Some(ReasoningEffort::Medium), ..Default::default() })
.enable_thought(true)
.enable_thinking(true)
.max_sessions(50)
.max_turns_per_session(100)
.execution_max_turns(200)
.max_message_tokens(50_000)
.max_tool_output_chars(max_tool_output_chars)
.error_recovery(Arc::new(ConsecutiveFailureRecovery::new(3)))
.middleware(SummarizingMiddleware::new(llm_client))
}