netget/cli/
model_select.rs1use anyhow::Result;
7use tracing::{error, info, warn};
8
9use crate::settings::Settings;
10
11pub struct StartupModel {
13 pub base_url: String,
15 pub model: String,
18 pub messages: Vec<String>,
20}
21
22pub async fn resolve_startup_model(
26 args: &super::Args,
27 settings: &Settings,
28) -> Result<StartupModel> {
29 let configured_model = args.model.clone().or(settings.model.clone());
30
31 let base_url = args
32 .openai_url
33 .as_deref()
34 .or(args.ollama_url.as_deref())
35 .unwrap_or("http://localhost:11434")
36 .to_string();
37
38 if args.openai_url.is_some() {
39 let model = configured_model.unwrap_or_default();
41 let messages = vec![format!("✓ Using OpenAI-compatible backend: {}", base_url)];
42 return Ok(StartupModel {
43 base_url,
44 model,
45 messages,
46 });
47 }
48
49 match crate::llm::select_or_validate_model(configured_model.clone(), true, &base_url).await {
50 Ok(Some(model)) => {
51 info!("✓ Using model: {}", model);
52 let messages = if let Some(ref config_model) = configured_model {
53 if config_model == &model {
54 info!("✓ Using configured model: {}", model);
55 vec![]
56 } else {
57 info!(
58 "⚠ Configured model '{}' not found, auto-selected: {}",
59 config_model, model
60 );
61 vec![]
62 }
63 } else {
64 vec![
65 format!(
66 "⚠ No model configured, auto-selected: {} (largest/most recent)",
67 model
68 ),
69 " To set a different model, use: /model or edit ~/.netget settings"
70 .to_string(),
71 ]
72 };
73 Ok(StartupModel {
74 base_url,
75 model,
76 messages,
77 })
78 }
79 Ok(None) => {
80 warn!("⚠ No model selected. Use /model command to select one.");
81 let messages = vec![
82 "✗ Ollama is not available or no models found.".to_string(),
83 " Please ensure Ollama is running: https://ollama.ai".to_string(),
84 " Use `/model` to list and select a model once Ollama is running.".to_string(),
85 ];
86 Ok(StartupModel {
87 base_url,
88 model: String::new(),
89 messages,
90 })
91 }
92 Err(e) => {
93 error!("Failed to initialize model: {}", e);
94 eprintln!("✗ Failed to initialize model: {}", e);
95 Err(e)
96 }
97 }
98}