diff --git a/crates/assistant/src/completion_provider/ollama.rs b/crates/assistant/src/completion_provider/ollama.rs index d972c49e70..a2d7f82554 100644 --- a/crates/assistant/src/completion_provider/ollama.rs +++ b/crates/assistant/src/completion_provider/ollama.rs @@ -40,7 +40,12 @@ impl OllamaCompletionProvider { let client = http_client.clone(); let model = model.name.clone(); - |_| async move { preload_model(client.as_ref(), &api_url, &model).await } + |_| async move { + if model.is_empty() { + return Ok(()); + } + preload_model(client.as_ref(), &api_url, &model).await + } }) .detach_and_log_err(cx); @@ -71,7 +76,12 @@ impl OllamaCompletionProvider { }) .detach_and_log_err(cx); - self.model = model; + if model.name.is_empty() { + self.select_first_available_model() + } else { + self.model = model; + } + self.api_url = api_url; self.low_speed_timeout = low_speed_timeout; self.settings_version = settings_version; @@ -81,6 +91,12 @@ impl OllamaCompletionProvider { self.available_models.iter() } + pub fn select_first_available_model(&mut self) { + if let Some(model) = self.available_models.first() { + self.model = model.clone(); + } + } + pub fn settings_version(&self) -> usize { self.settings_version } @@ -123,6 +139,10 @@ impl OllamaCompletionProvider { cx.update_global::(|provider, _cx| { if let CompletionProvider::Ollama(provider) = provider { provider.available_models = models; + + if !provider.available_models.is_empty() && provider.model.name.is_empty() { + provider.select_first_available_model() + } } }) })