use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use crate::{agent::AgentBuilder, extractor::ExtractorBuilder};
use rig_core::wasm_compat::{WasmCompatSend, WasmCompatSync};
pub trait AgentClientExt: rig_core::client::completion::CompletionClient {
fn agent(&self, model: impl Into<String>) -> AgentBuilder<Self::CompletionModel> {
AgentBuilder::new(self.completion_model(model))
}
fn extractor<T>(&self, model: impl Into<String>) -> ExtractorBuilder<Self::CompletionModel, T>
where
T: JsonSchema
+ for<'de> Deserialize<'de>
+ Serialize
+ WasmCompatSend
+ WasmCompatSync
+ 'static,
{
ExtractorBuilder::new(self.completion_model(model))
}
}
impl<C: rig_core::client::completion::CompletionClient> AgentClientExt for C {}
pub trait AgentModelExt: rig_core::completion::CompletionModel + Sized {
fn into_agent_builder(self) -> AgentBuilder<Self> {
AgentBuilder::new(self)
}
}
impl<M> AgentModelExt for M where M: rig_core::completion::CompletionModel {}