#![allow(dead_code)]
use sombrax_agentic_core::providers::LlmConfigLike;
#[derive(Clone, Debug)]
pub struct ExampleConfig {
pub provider: String,
pub url: String,
pub model: String,
pub api_key: Option<String>,
pub temperature: Option<f64>,
}
impl LlmConfigLike for ExampleConfig {
fn provider(&self) -> &str {
&self.provider
}
fn url(&self) -> &str {
&self.url
}
fn model(&self) -> &str {
&self.model
}
fn api_key(&self) -> Option<&str> {
self.api_key.as_deref()
}
fn temperature(&self) -> Option<f64> {
self.temperature
}
}
fn env_opt(name: &str) -> Option<String> {
std::env::var(name).ok().filter(|s| !s.trim().is_empty())
}
pub fn config_from_env() -> ExampleConfig {
ExampleConfig {
provider: env_opt("SAC_PROVIDER").unwrap_or_else(|| "ollama".to_string()),
url: env_opt("SAC_URL").unwrap_or_else(|| "http://localhost:11434".to_string()),
model: env_opt("SAC_MODEL").unwrap_or_else(|| "llama3.2".to_string()),
api_key: env_opt("SAC_API_KEY"),
temperature: env_opt("SAC_TEMPERATURE").and_then(|s| s.parse().ok()),
}
}
pub fn judge_config_from_env() -> ExampleConfig {
let base = config_from_env();
ExampleConfig {
provider: env_opt("SAC_JUDGE_PROVIDER").unwrap_or(base.provider),
url: env_opt("SAC_JUDGE_URL").unwrap_or(base.url),
model: env_opt("SAC_JUDGE_MODEL").unwrap_or(base.model),
api_key: env_opt("SAC_JUDGE_API_KEY").or(base.api_key),
temperature: env_opt("SAC_JUDGE_TEMPERATURE")
.and_then(|s| s.parse().ok())
.or(base.temperature),
}
}
pub fn banner(title: &str, cfg: &ExampleConfig) {
println!("\n{:=<70}", "");
println!(" {title}");
println!(
" primary model: provider={} model={} url={}",
cfg.provider, cfg.model, cfg.url
);
println!("{:=<70}\n", "");
}
pub fn init_tracing() {
let _ = tracing_subscriber::fmt()
.with_env_filter(
tracing_subscriber::EnvFilter::try_from_default_env()
.unwrap_or_else(|_| tracing_subscriber::EnvFilter::new("warn")),
)
.try_init();
}