diff --git a/crates/language_models/src/provider/open_router.rs b/crates/language_models/src/provider/open_router.rs index ef434eed85..c414ccacee 100644 --- a/crates/language_models/src/provider/open_router.rs +++ b/crates/language_models/src/provider/open_router.rs @@ -59,13 +59,20 @@ impl State { fn set_api_key(&mut self, api_key: Option, cx: &mut Context) -> Task> { let credentials_provider = self.credentials_provider.clone(); let api_url = OpenRouterLanguageModelProvider::api_url(cx); - self.api_key_state.store( + let task = self.api_key_state.store( api_url, api_key, |this| &mut this.api_key_state, credentials_provider, cx, - ) + ); + + cx.spawn(async move |this, cx| { + let result = task.await?; + this.update(cx, |this, cx| this.restart_fetch_models_task(cx)) + .ok(); + Ok(result) + }) } fn authenticate(&mut self, cx: &mut Context) -> Task> { @@ -103,12 +110,7 @@ impl State { cx.spawn(async move |this, cx| { let models = list_models(http_client.as_ref(), &api_url, &api_key, &extra_headers) .await - .map_err(|e| { - LanguageModelCompletionError::Other(anyhow::anyhow!( - "OpenRouter error: {:?}", - e - )) - })?; + .map_err(LanguageModelCompletionError::from)?; this.update(cx, |this, cx| { this.available_models = models; @@ -125,7 +127,7 @@ impl State { let task = self.fetch_models(cx); self.fetch_models_task.replace(task); } else { - self.available_models = Vec::new(); + self.available_models.clear(); } } }