assistant panel: Fix entering credentials not updating view (#15527)

Co-authored-by: Bennet <bennet@zed.dev>

Release Notes:

- N/A

Co-authored-by: Bennet <bennet@zed.dev>
This commit is contained in:
Thorsten Ball 2024-07-31 12:51:41 +02:00 committed by GitHub
parent c78ea0df7e
commit b571bc800d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 92 additions and 52 deletions

View file

@ -54,9 +54,7 @@ fn register_language_model_providers(
registry.register_provider(CloudLanguageModelProvider::new(client.clone(), cx), cx);
} else {
registry.unregister_provider(
&LanguageModelProviderId::from(
crate::provider::cloud::PROVIDER_NAME.to_string(),
),
&LanguageModelProviderId::from(crate::provider::cloud::PROVIDER_ID.to_string()),
cx,
);
}
@ -80,9 +78,12 @@ pub struct ActiveModel {
model: Option<Arc<dyn LanguageModel>>,
}
pub struct ActiveModelChanged;
pub enum Event {
ActiveModelChanged,
ProviderStateChanged,
}
impl EventEmitter<ActiveModelChanged> for LanguageModelRegistry {}
impl EventEmitter<Event> for LanguageModelRegistry {}
impl LanguageModelRegistry {
pub fn global(cx: &AppContext) -> Model<Self> {
@ -114,7 +115,10 @@ impl LanguageModelRegistry {
) {
let name = provider.id();
if let Some(subscription) = provider.subscribe(cx) {
let subscription = provider.subscribe(cx, |_, cx| {
cx.emit(Event::ProviderStateChanged);
});
if let Some(subscription) = subscription {
subscription.detach();
}
@ -187,7 +191,7 @@ impl LanguageModelRegistry {
provider,
model: None,
});
cx.emit(ActiveModelChanged);
cx.emit(Event::ActiveModelChanged);
}
pub fn set_active_model(
@ -202,13 +206,13 @@ impl LanguageModelRegistry {
provider,
model: Some(model),
});
cx.emit(ActiveModelChanged);
cx.emit(Event::ActiveModelChanged);
} else {
log::warn!("Active model's provider not found in registry");
}
} else {
self.active_model = None;
cx.emit(ActiveModelChanged);
cx.emit(Event::ActiveModelChanged);
}
}