pub mod sequential;
pub mod parallel;
pub mod hierarchical;
use async_trait::async_trait;
use std::collections::HashMap;
use crate::traits::Result;
use super::agent::AgentConfig;
use super::memory_bus::CerebroMemoryBus;
use super::trace::ExecutionTracer;
use super::llm::LlmClient;
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct SwarmResult {
pub final_output: String,
pub trace: super::trace::ExecutionTrace,
pub total_tokens: usize,
pub total_duration_ms: u64,
}
#[async_trait]
pub trait SwarmPatternExecutor: Send + Sync {
async fn execute(
&self,
agents: &HashMap<String, AgentConfig>,
memory: &CerebroMemoryBus,
tracer: &ExecutionTracer,
llm: &LlmClient,
input: &str,
) -> Result<SwarmResult>;
}