diff --git a/crates/agent/src/agent.rs b/crates/agent/src/agent.rs index 160172c5c49d3af5548ccd76af1e441662fadfbb..6765b45daec799fa7df9608065d165296119f6e6 100644 --- a/crates/agent/src/agent.rs +++ b/crates/agent/src/agent.rs @@ -755,10 +755,9 @@ impl NativeAgent { for session in self.sessions.values_mut() { session.thread.update(cx, |thread, cx| { - let should_update_model = thread.model().is_none() - || (thread.is_empty() - && matches!(event, language_model::Event::DefaultModelChanged)); - if should_update_model && let Some(model) = default_model.clone() { + if thread.model().is_none() + && let Some(model) = default_model.clone() + { thread.set_model(model, cx); cx.notify(); } diff --git a/crates/language_models/src/language_models.rs b/crates/language_models/src/language_models.rs index bd29dbe08dbd16af25be4bd55b44067f47fa2a8a..d604ee432e487cdf2d917b0ae01980ba9fb39f24 100644 --- a/crates/language_models/src/language_models.rs +++ b/crates/language_models/src/language_models.rs @@ -119,19 +119,6 @@ pub fn init(user_store: Entity, client: Arc, cx: &mut App) { ); }); - cx.subscribe( - ®istry, - |_registry, event: &language_model::Event, cx| match event { - language_model::Event::ProviderStateChanged(_) - | language_model::Event::AddedProvider(_) - | language_model::Event::RemovedProvider(_) => { - update_environment_fallback_model(cx); - } - _ => {} - }, - ) - .detach(); - let registry = registry.downgrade(); cx.observe_global::(move |cx| { let Some(registry) = registry.upgrade() else { diff --git a/crates/language_models/src/provider/cloud.rs b/crates/language_models/src/provider/cloud.rs index 9fef05e7555bc55a0ea6a3081280ea85e201dca9..ffa4bcb9863da958ac76c272dcd667649ef4bb6a 100644 --- a/crates/language_models/src/provider/cloud.rs +++ b/crates/language_models/src/provider/cloud.rs @@ -1,5 +1,6 @@ use ai_onboarding::YoungAccountBanner; use anyhow::Result; +use client::Status; use client::{Client, RefreshLlmTokenListener, UserStore, global_llm_token, zed_urls}; use cloud_api_client::LlmApiToken; use cloud_api_types::OrganizationId; @@ -249,11 +250,21 @@ impl LanguageModelProvider for CloudLanguageModelProvider { fn is_authenticated(&self, cx: &App) -> bool { let state = self.state.read(cx); - !state.is_signed_out(cx) + let status = *state.client.status().borrow(); + matches!(status, Status::Authenticated | Status::Connected { .. }) } - fn authenticate(&self, _cx: &mut App) -> Task> { - Task::ready(Ok(())) + fn authenticate(&self, cx: &mut App) -> Task> { + let mut status = self.state.read(cx).client.status(); + if !status.borrow().is_signing_in() { + return Task::ready(Ok(())); + } + cx.background_spawn(async move { + while status.borrow().is_signing_in() { + status.next().await; + } + Ok(()) + }) } fn configuration_view(