Allow unauthenticated commit models to show (#37857)

Closes #37462
Closes #37814

Release Notes:

- Fixed a bug where the commit generation message would not always show
This commit is contained in:
Conrad Irwin 2025-09-09 11:05:49 -06:00 committed by GitHub
parent f397294640
commit cdbddc2170
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -40,8 +40,7 @@ use gpui::{
use itertools::Itertools;
use language::{Buffer, File};
use language_model::{
ConfiguredModel, LanguageModel, LanguageModelRegistry, LanguageModelRequest,
LanguageModelRequestMessage, Role,
ConfiguredModel, LanguageModelRegistry, LanguageModelRequest, LanguageModelRequestMessage, Role,
};
use menu::{Confirm, SecondaryConfirm, SelectFirst, SelectLast, SelectNext, SelectPrevious};
use multi_buffer::ExcerptInfo;
@ -1860,13 +1859,17 @@ impl GitPanel {
/// Generates a commit message using an LLM.
pub fn generate_commit_message(&mut self, cx: &mut Context<Self>) {
if !self.can_commit() || DisableAiSettings::get_global(cx).disable_ai {
if !self.can_commit()
|| DisableAiSettings::get_global(cx).disable_ai
|| !agent_settings::AgentSettings::get_global(cx).enabled
{
return;
}
let model = match current_language_model(cx) {
Some(value) => value,
None => return,
let Some(ConfiguredModel { provider, model }) =
LanguageModelRegistry::read_global(cx).commit_message_model()
else {
return;
};
let Some(repo) = self.active_repository.as_ref() else {
@ -1891,6 +1894,16 @@ impl GitPanel {
this.generate_commit_message_task.take();
});
if let Some(task) = cx.update(|cx| {
if !provider.is_authenticated(cx) {
Some(provider.authenticate(cx))
} else {
None
}
})? {
task.await.log_err();
};
let mut diff_text = match diff.await {
Ok(result) => match result {
Ok(text) => text,
@ -3080,9 +3093,18 @@ impl GitPanel {
&self,
cx: &Context<Self>,
) -> Option<AnyElement> {
current_language_model(cx).is_some().then(|| {
if self.generate_commit_message_task.is_some() {
return h_flex()
if !agent_settings::AgentSettings::get_global(cx).enabled
|| DisableAiSettings::get_global(cx).disable_ai
|| LanguageModelRegistry::read_global(cx)
.commit_message_model()
.is_none()
{
return None;
}
if self.generate_commit_message_task.is_some() {
return Some(
h_flex()
.gap_1()
.child(
Icon::new(IconName::ArrowCircle)
@ -3095,11 +3117,13 @@ impl GitPanel {
.size(LabelSize::Small)
.color(Color::Muted),
)
.into_any_element();
}
.into_any_element(),
);
}
let can_commit = self.can_commit();
let editor_focus_handle = self.commit_editor.focus_handle(cx);
let can_commit = self.can_commit();
let editor_focus_handle = self.commit_editor.focus_handle(cx);
Some(
IconButton::new("generate-commit-message", IconName::AiEdit)
.shape(ui::IconButtonShape::Square)
.icon_color(Color::Muted)
@ -3120,8 +3144,8 @@ impl GitPanel {
.on_click(cx.listener(move |this, _event, _window, cx| {
this.generate_commit_message(cx);
}))
.into_any_element()
})
.into_any_element(),
)
}
pub(crate) fn render_co_authors(&self, cx: &Context<Self>) -> Option<AnyElement> {
@ -4469,20 +4493,6 @@ impl GitPanel {
}
}
fn current_language_model(cx: &Context<'_, GitPanel>) -> Option<Arc<dyn LanguageModel>> {
let is_enabled = agent_settings::AgentSettings::get_global(cx).enabled
&& !DisableAiSettings::get_global(cx).disable_ai;
is_enabled
.then(|| {
let ConfiguredModel { provider, model } =
LanguageModelRegistry::read_global(cx).commit_message_model()?;
provider.is_authenticated(cx).then(|| model)
})
.flatten()
}
impl Render for GitPanel {
fn render(&mut self, window: &mut Window, cx: &mut Context<Self>) -> impl IntoElement {
let project = self.project.read(cx);