#[derive(Debug, Clone)]
pub struct OllamaConfig {
pub base_url: String,
pub model: String,
pub timeout_secs: Option<u64>,
pub keep_alive: Option<String>,
}
impl OllamaConfig {
pub const DEFAULT_BASE_URL: &'static str = "http://localhost:11434";
pub const DEFAULT_MODEL: &'static str = "qwen3";
#[must_use]
pub fn new() -> Self {
Self::default()
}
#[must_use]
pub fn for_model(model: impl Into<String>) -> Self {
Self {
model: model.into(),
..Default::default()
}
}
#[must_use]
pub fn from_env() -> Self {
let base_url =
std::env::var("OLLAMA_BASE_URL").unwrap_or_else(|_| Self::DEFAULT_BASE_URL.to_owned());
let model =
std::env::var("OLLAMA_MODEL").unwrap_or_else(|_| Self::DEFAULT_MODEL.to_owned());
let keep_alive = std::env::var("OLLAMA_KEEP_ALIVE").ok();
Self {
base_url,
model,
timeout_secs: Some(300),
keep_alive,
}
}
#[must_use]
pub fn base_url(mut self, url: impl Into<String>) -> Self {
self.base_url = url.into();
self
}
#[must_use]
pub fn model(mut self, model: impl Into<String>) -> Self {
self.model = model.into();
self
}
#[must_use]
pub const fn timeout(mut self, secs: u64) -> Self {
self.timeout_secs = Some(secs);
self
}
#[must_use]
pub fn keep_alive(mut self, duration: impl Into<String>) -> Self {
self.keep_alive = Some(duration.into());
self
}
}
impl Default for OllamaConfig {
fn default() -> Self {
Self {
base_url: Self::DEFAULT_BASE_URL.to_owned(),
model: Self::DEFAULT_MODEL.to_owned(),
timeout_secs: Some(300),
keep_alive: None,
}
}
}