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:
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user