use crate::agent::AgentBuilder;
use crate::completion::CompletionModel;
use crate::extractor::ExtractorBuilder;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
pub trait CompletionClient {
type CompletionModel: CompletionModel<Client = Self>;
fn completion_model(&self, model: impl Into<String>) -> Self::CompletionModel {
Self::CompletionModel::make(self, model)
}
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<'a> Deserialize<'a> + Serialize + Send + Sync,
{
ExtractorBuilder::new(self.completion_model(model))
}
}