#[derive(Clone)]
pub struct AgentLoopConfig {
pub model_id: String,
pub system_prompt: Option<String>,
pub temperature: f32,
pub max_tokens: u32,
pub max_iterations: usize,
pub tool_execution: ToolExecutionMode,
pub compaction_strategy: oxi_ai::CompactionStrategy,
pub context_window: usize,
pub compaction_instruction: Option<String>,
pub session_id: Option<String>,
pub transport: Option<String>,
pub compact_on_start: bool,
pub max_retry_delay_ms: Option<u64>,
pub auto_retry_enabled: bool,
pub auto_retry_max_attempts: usize,
pub auto_retry_base_delay_ms: u64,
pub api_key: Option<String>,
pub workspace_dir: Option<std::path::PathBuf>,
pub provider_options: Option<oxi_ai::ProviderOptions>,
pub on_compaction: Option<CompactionHook>,
}
impl Default for AgentLoopConfig {
fn default() -> Self {
Self {
model_id: String::new(),
system_prompt: None,
temperature: 0.7,
max_tokens: 4096,
max_iterations: 20,
tool_execution: ToolExecutionMode::Parallel,
compaction_strategy: oxi_ai::CompactionStrategy::default(),
context_window: 128_000,
compaction_instruction: None,
session_id: None,
transport: None,
compact_on_start: false,
max_retry_delay_ms: None,
auto_retry_enabled: false,
auto_retry_max_attempts: 3,
auto_retry_base_delay_ms: 2000,
api_key: None,
workspace_dir: None,
provider_options: None,
on_compaction: None,
}
}
}
pub use crate::config::ToolExecutionMode;
use crate::compaction::CompactedContext;
use crate::AgentToolResult;
use anyhow::{Error, Result};
use serde_json::Value;
use std::future::Future;
use std::pin::Pin;
use std::sync::Arc;
pub type CompactionHook =
Arc<dyn Fn(CompactedContext) -> Pin<Box<dyn Future<Output = Result<()>> + Send>> + Send + Sync>;
pub type BeforeToolCallHook = Arc<
dyn Fn(
&str,
&Value,
) -> Pin<Box<dyn Future<Output = Result<Option<AgentToolResult>, Error>> + Send>>
+ Send
+ Sync,
>;
pub type AfterToolCallHook = Arc<
dyn Fn(
&str,
&AgentToolResult,
) -> Pin<Box<dyn Future<Output = Result<Option<AgentToolResult>, Error>> + Send>>
+ Send
+ Sync,
>;
pub use crate::stream_retry::{BACKOFF_BASE_SECS, MAX_RETRIES};