Skip to main content

codetether_agent/tui/app/smart_switch/
local_model.rs

1//! Local CUDA model reference normalization and resolution.
2
3use crate::tui::constants::AUTOCHAT_LOCAL_DEFAULT_MODEL;
4
5/// Normalize a model ref for local CUDA: if no provider prefix, add one.
6pub fn normalize_local_model_ref(model: &str) -> String {
7    let trimmed = model.trim();
8    if trimmed.is_empty() {
9        return AUTOCHAT_LOCAL_DEFAULT_MODEL.to_string();
10    }
11    let (provider_name, _) = crate::provider::parse_model_string(trimmed);
12    if provider_name.is_some() {
13        trimmed.to_string()
14    } else {
15        format!("local_cuda/{trimmed}")
16    }
17}
18
19/// Resolve the model for the local inference loop.
20pub fn resolve_local_loop_model(current_model: Option<&str>) -> String {
21    if let Ok(explicit) = std::env::var("CODETETHER_TUI_LOCAL_MODEL")
22        .or_else(|_| std::env::var("CODETETHER_LOCAL_CUDA_MODEL"))
23        .or_else(|_| std::env::var("LOCAL_CUDA_MODEL"))
24    {
25        let normalized = normalize_local_model_ref(&explicit);
26        if !normalized.trim().is_empty() {
27            return normalized;
28        }
29    }
30
31    if let Some(model) = current_model {
32        let normalized = normalize_local_model_ref(model);
33        if normalized.starts_with("local_cuda/") {
34            return normalized;
35        }
36    }
37
38    AUTOCHAT_LOCAL_DEFAULT_MODEL.to_string()
39}