use crate::swarm::AgentRole;
use super::types::MAX_CONCURRENT_AGENTS;
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub enum MultiAgentFailurePolicy {
BestEffort,
#[default]
FailFast,
}
#[derive(Debug, Clone)]
pub struct MultiAgentConfig {
pub max_concurrency: usize,
pub roles: Vec<AgentRole>,
pub timeout_secs: Option<u64>,
pub temperature: Option<f32>,
pub max_tokens: Option<usize>,
pub failure_policy: MultiAgentFailurePolicy,
}
impl Default for MultiAgentConfig {
fn default() -> Self {
Self {
max_concurrency: 4,
roles: vec![
AgentRole::Architect,
AgentRole::Coder,
AgentRole::Tester,
AgentRole::Reviewer,
],
timeout_secs: None,
temperature: None,
max_tokens: None,
failure_policy: MultiAgentFailurePolicy::BestEffort,
}
}
}
impl MultiAgentConfig {
pub fn with_concurrency(mut self, n: usize) -> Self {
self.max_concurrency = n.clamp(1, MAX_CONCURRENT_AGENTS);
self
}
pub fn with_roles(mut self, roles: Vec<AgentRole>) -> Self {
self.roles = roles;
self
}
}