use std::collections::HashMap;
use langhub::types::ModelProvider;
use crate::{
DockerConfig, Hippox, HippoxConfig, IdentityInformation, K8sConfig, MySQLConfig,
PostgreSQLConfig, RedisConfig, WorkflowMode,
};
pub struct HippoxBuilder {
provider: ModelProvider,
api_key: Option<String>,
extra_keys: Option<HashMap<String, String>>,
config: HippoxConfig,
workflow_mode: WorkflowMode,
}
impl HippoxBuilder {
pub fn new(provider: ModelProvider) -> Self {
Self {
provider,
api_key: None,
extra_keys: None,
config: HippoxConfig::default(),
workflow_mode: WorkflowMode::default(),
}
}
pub fn api_key(mut self, key: impl Into<String>) -> Self {
self.api_key = Some(key.into());
self
}
pub fn extra_keys(mut self, keys: HashMap<String, String>) -> Self {
self.extra_keys = Some(keys);
self
}
pub fn lang(mut self, lang: impl Into<String>) -> Self {
self.config.lang = lang.into();
self
}
pub fn workflow_mode(mut self, mode: WorkflowMode) -> Self {
self.workflow_mode = mode;
self
}
pub fn identity(mut self, f: impl FnOnce(&mut IdentityInformation)) -> Self {
f(&mut self.config.identity_information);
self
}
pub fn add_postgresql(mut self, config: PostgreSQLConfig) -> Self {
self.config.add_postgresql_instance(config);
self
}
pub fn add_mysql(mut self, config: MySQLConfig) -> Self {
self.config.add_mysql_instance(config);
self
}
pub fn add_redis(mut self, config: RedisConfig) -> Self {
self.config.add_redis_instance(config);
self
}
pub fn add_docker(mut self, config: DockerConfig) -> Self {
self.config.add_docker_instance(config);
self
}
pub fn add_k8s(mut self, config: K8sConfig) -> Self {
self.config.add_k8s_instance(config);
self
}
pub async fn build(self) -> anyhow::Result<Hippox> {
Hippox::with_workflow_mode(
self.provider,
self.api_key,
self.extra_keys,
Some(self.config),
self.workflow_mode,
)
.await
}
}
impl Hippox {
pub fn builder(provider: ModelProvider) -> HippoxBuilder {
HippoxBuilder::new(provider)
}
}