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