From 4961aae1737b77ff77102d37bf5f37f31a43824e Mon Sep 17 00:00:00 2001 From: salmonik Date: Mon, 13 Jul 2026 17:21:21 +0200 Subject: fix assistant and senator Signed-off-by: salmonik --- src/config.rs | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 61 insertions(+), 2 deletions(-) (limited to 'src/config.rs') diff --git a/src/config.rs b/src/config.rs index 96a6849..989a060 100644 --- a/src/config.rs +++ b/src/config.rs @@ -10,8 +10,13 @@ pub struct Config { pub copyparty_url: String, pub copyparty_url_upload: String, pub copyparty_password: Option, + /// Deprecated – use llm_api_key instead pub openrouter_api_key: Option, + /// Deprecated – use llm_model instead pub openrouter_model: Option, + pub llm_api_key: Option, + pub llm_model: Option, + pub llm_api_url: String, pub database_path: String, } @@ -71,6 +76,24 @@ const ENV_VARS: &[EnvVar] = &[ default: Some("cognitivecomputations/dolphin-mistral-24b-venice-edition:free"), description: "OpenRouter model", }, + EnvVar { + name: "LLM_API_KEY", + required: false, + default: None, + description: "LLM API key (takes priority over OPENROUTER_API_KEY)", + }, + EnvVar { + name: "LLM_MODEL", + required: false, + default: None, + description: "LLM model name (takes priority over OPENROUTER_MODEL)", + }, + EnvVar { + name: "LLM_API_URL", + required: false, + default: Some("https://openrouter.ai/api/v1/chat/completions"), + description: "LLM API full URL including /chat/completions path", + }, EnvVar { name: "SENATOR_DB_PATH", required: false, @@ -126,6 +149,19 @@ pub fn check_env_vars() { impl Config { pub fn from_env() -> Self { + let openrouter_api_key = env::var("OPENROUTER_API_KEY").ok(); + let openrouter_model = env::var("OPENROUTER_MODEL").ok(); + let llm_api_key = env::var("LLM_API_KEY").ok(); + let llm_model = env::var("LLM_MODEL").ok(); + + // Warn about deprecated env vars (mirrors Python's BACKWARD_COMPAT_MSG) + if openrouter_api_key.is_some() && llm_api_key.is_none() { + tracing::warn!("OPENROUTER_API_KEY is deprecated. Use LLM_API_KEY instead."); + } + if openrouter_model.is_some() && llm_model.is_none() { + tracing::warn!("OPENROUTER_MODEL is deprecated. Use LLM_MODEL instead."); + } + Self { token: env::var("TOKEN").expect("Missing TOKEN"), status_channel_id: env::var("STATUS_CHANNEL_ID") @@ -137,9 +173,32 @@ impl Config { copyparty_url_upload: env::var("COPYPARTY_URL_UPLOAD") .unwrap_or_else(|_| "http://localhost:3939".into()), copyparty_password: env::var("COPYPARTY_PASSWORD").ok(), - openrouter_api_key: env::var("OPENROUTER_API_KEY").ok(), - openrouter_model: env::var("OPENROUTER_MODEL").ok(), + openrouter_api_key, + openrouter_model, + llm_api_key, + llm_model, + llm_api_url: env::var("LLM_API_URL") + .unwrap_or_else(|_| "https://openrouter.ai/api/v1/chat/completions".into()), database_path: env::var("SENATOR_DB_PATH").unwrap_or_else(|_| "data/senator.db".into()), } } + + /// Resolve the effective LLM config: (api_url, api_key, model). + /// LLM_* vars take priority; falls back to OPENROUTER_* for backward compat. + pub fn resolve_llm(&self) -> (String, String, String) { + let api_url = self.llm_api_url.clone(); + let api_key = self + .llm_api_key + .clone() + .or_else(|| self.openrouter_api_key.clone()) + .unwrap_or_default(); + let model = self + .llm_model + .clone() + .or_else(|| self.openrouter_model.clone()) + .unwrap_or_else(|| { + "cognitivecomputations/dolphin-mistral-24b-venice-edition:free".into() + }); + (api_url, api_key, model) + } } -- cgit v1.2.3