mod types;
pub use types::*;
use std::sync::Arc;
use crate::harness::middleware::{Middleware, MiddlewareStack};
use crate::harness::model::{ChatModel, ModelRegistry};
use crate::harness::tool::{Tool, ToolRegistry};
impl<State: Send + Sync, Ctx: Send + Sync> AgentHarness<State, Ctx> {
pub fn new() -> Self {
Self {
models: ModelRegistry::new(),
tools: ToolRegistry::new(),
middleware: MiddlewareStack::new(),
policy: RunPolicy::default(),
}
}
pub fn register_model(
&mut self,
name: impl Into<String>,
model: Arc<dyn ChatModel<State>>,
) -> &mut Self {
self.models.register(name, model);
self
}
pub fn set_default_model(&mut self, name: impl Into<String>) -> &mut Self {
self.models.set_default(name);
self
}
pub fn register_tool(&mut self, tool: Arc<dyn Tool<State>>) -> &mut Self {
self.tools.register(tool);
self
}
pub fn push_middleware(&mut self, middleware: Arc<dyn Middleware<State, Ctx>>) -> &mut Self {
self.middleware.push(middleware);
self
}
pub fn with_policy(&mut self, policy: RunPolicy) -> &mut Self {
self.policy = policy;
self
}
pub fn models(&self) -> &ModelRegistry<State> {
&self.models
}
pub fn tools(&self) -> &ToolRegistry<State> {
&self.tools
}
pub fn middleware(&self) -> &MiddlewareStack<State, Ctx> {
&self.middleware
}
pub fn policy(&self) -> &RunPolicy {
&self.policy
}
}
impl<State: Send + Sync, Ctx: Send + Sync> Default for AgentHarness<State, Ctx> {
fn default() -> Self {
Self::new()
}
}
#[cfg(test)]
mod test;