Add configuration flow for inline assist button (#16369)
This adds a configuration prompt when using the inline assist button in the editor. Release Notes: - N/A
This commit is contained in:
parent
a9441879c3
commit
23d56a1a84
4 changed files with 34 additions and 14 deletions
|
@ -59,7 +59,6 @@ actions!(
|
||||||
InsertIntoEditor,
|
InsertIntoEditor,
|
||||||
ToggleFocus,
|
ToggleFocus,
|
||||||
InsertActivePrompt,
|
InsertActivePrompt,
|
||||||
ShowConfiguration,
|
|
||||||
DeployHistory,
|
DeployHistory,
|
||||||
DeployPromptLibrary,
|
DeployPromptLibrary,
|
||||||
ConfirmCommand,
|
ConfirmCommand,
|
||||||
|
|
|
@ -16,7 +16,7 @@ use crate::{
|
||||||
QuoteSelection, RemoteContextMetadata, SavedContextMetadata, Split, ToggleFocus,
|
QuoteSelection, RemoteContextMetadata, SavedContextMetadata, Split, ToggleFocus,
|
||||||
ToggleModelSelector, WorkflowStepResolution, WorkflowStepView,
|
ToggleModelSelector, WorkflowStepResolution, WorkflowStepView,
|
||||||
};
|
};
|
||||||
use crate::{ContextStoreEvent, ModelPickerDelegate, ShowConfiguration};
|
use crate::{ContextStoreEvent, ModelPickerDelegate};
|
||||||
use anyhow::{anyhow, Result};
|
use anyhow::{anyhow, Result};
|
||||||
use assistant_slash_command::{SlashCommand, SlashCommandOutputSection};
|
use assistant_slash_command::{SlashCommand, SlashCommandOutputSection};
|
||||||
use client::{proto, Client, Status};
|
use client::{proto, Client, Status};
|
||||||
|
@ -77,7 +77,8 @@ use workspace::{
|
||||||
item::{self, FollowableItem, Item, ItemHandle},
|
item::{self, FollowableItem, Item, ItemHandle},
|
||||||
pane::{self, SaveIntent},
|
pane::{self, SaveIntent},
|
||||||
searchable::{SearchEvent, SearchableItem},
|
searchable::{SearchEvent, SearchableItem},
|
||||||
Pane, Save, ToggleZoom, ToolbarItemEvent, ToolbarItemLocation, ToolbarItemView, Workspace,
|
Pane, Save, ShowConfiguration, ToggleZoom, ToolbarItemEvent, ToolbarItemLocation,
|
||||||
|
ToolbarItemView, Workspace,
|
||||||
};
|
};
|
||||||
use workspace::{searchable::SearchableItemHandle, NewFile};
|
use workspace::{searchable::SearchableItemHandle, NewFile};
|
||||||
|
|
||||||
|
@ -704,7 +705,9 @@ impl AssistantPanel {
|
||||||
self.authenticate_provider_task = Some((
|
self.authenticate_provider_task = Some((
|
||||||
provider.id(),
|
provider.id(),
|
||||||
cx.spawn(|this, mut cx| async move {
|
cx.spawn(|this, mut cx| async move {
|
||||||
let _ = load_credentials.await;
|
if let Some(future) = load_credentials {
|
||||||
|
let _ = future.await;
|
||||||
|
}
|
||||||
this.update(&mut cx, |this, _cx| {
|
this.update(&mut cx, |this, _cx| {
|
||||||
this.authenticate_provider_task = None;
|
this.authenticate_provider_task = None;
|
||||||
})
|
})
|
||||||
|
@ -735,6 +738,7 @@ impl AssistantPanel {
|
||||||
};
|
};
|
||||||
|
|
||||||
let initial_prompt = action.prompt.clone();
|
let initial_prompt = action.prompt.clone();
|
||||||
|
|
||||||
if assistant_panel.update(cx, |assistant, cx| assistant.is_authenticated(cx)) {
|
if assistant_panel.update(cx, |assistant, cx| assistant.is_authenticated(cx)) {
|
||||||
match inline_assist_target {
|
match inline_assist_target {
|
||||||
InlineAssistTarget::Editor(active_editor, include_context) => {
|
InlineAssistTarget::Editor(active_editor, include_context) => {
|
||||||
|
@ -763,9 +767,27 @@ impl AssistantPanel {
|
||||||
} else {
|
} else {
|
||||||
let assistant_panel = assistant_panel.downgrade();
|
let assistant_panel = assistant_panel.downgrade();
|
||||||
cx.spawn(|workspace, mut cx| async move {
|
cx.spawn(|workspace, mut cx| async move {
|
||||||
assistant_panel
|
let Some(task) =
|
||||||
.update(&mut cx, |assistant, cx| assistant.authenticate(cx))?
|
assistant_panel.update(&mut cx, |assistant, cx| assistant.authenticate(cx))?
|
||||||
.await?;
|
else {
|
||||||
|
let answer = cx
|
||||||
|
.prompt(
|
||||||
|
gpui::PromptLevel::Warning,
|
||||||
|
"No language model provider configured",
|
||||||
|
None,
|
||||||
|
&["Configure", "Cancel"],
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.ok();
|
||||||
|
if let Some(answer) = answer {
|
||||||
|
if answer == 0 {
|
||||||
|
cx.update(|cx| cx.dispatch_action(Box::new(ShowConfiguration)))
|
||||||
|
.ok();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Ok(());
|
||||||
|
};
|
||||||
|
task.await?;
|
||||||
if assistant_panel.update(&mut cx, |panel, cx| panel.is_authenticated(cx))? {
|
if assistant_panel.update(&mut cx, |panel, cx| panel.is_authenticated(cx))? {
|
||||||
cx.update(|cx| match inline_assist_target {
|
cx.update(|cx| match inline_assist_target {
|
||||||
InlineAssistTarget::Editor(active_editor, include_context) => {
|
InlineAssistTarget::Editor(active_editor, include_context) => {
|
||||||
|
@ -1173,13 +1195,10 @@ impl AssistantPanel {
|
||||||
.map_or(false, |provider| provider.is_authenticated(cx))
|
.map_or(false, |provider| provider.is_authenticated(cx))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn authenticate(&mut self, cx: &mut ViewContext<Self>) -> Task<Result<()>> {
|
fn authenticate(&mut self, cx: &mut ViewContext<Self>) -> Option<Task<Result<()>>> {
|
||||||
LanguageModelRegistry::read_global(cx)
|
LanguageModelRegistry::read_global(cx)
|
||||||
.active_provider()
|
.active_provider()
|
||||||
.map_or(
|
.map_or(None, |provider| Some(provider.authenticate(cx)))
|
||||||
Task::ready(Err(anyhow!("no active language model provider"))),
|
|
||||||
|provider| provider.authenticate(cx),
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
use feature_flags::ZedPro;
|
use feature_flags::ZedPro;
|
||||||
|
use gpui::Action;
|
||||||
use gpui::DismissEvent;
|
use gpui::DismissEvent;
|
||||||
use language_model::{LanguageModel, LanguageModelAvailability, LanguageModelRegistry};
|
use language_model::{LanguageModel, LanguageModelAvailability, LanguageModelRegistry};
|
||||||
use proto::Plan;
|
use proto::Plan;
|
||||||
|
use workspace::ShowConfiguration;
|
||||||
|
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use ui::ListItemSpacing;
|
use ui::ListItemSpacing;
|
||||||
|
|
||||||
use crate::assistant_settings::AssistantSettings;
|
use crate::assistant_settings::AssistantSettings;
|
||||||
use crate::ShowConfiguration;
|
|
||||||
use fs::Fs;
|
use fs::Fs;
|
||||||
use gpui::Action;
|
|
||||||
use gpui::SharedString;
|
use gpui::SharedString;
|
||||||
use gpui::Task;
|
use gpui::Task;
|
||||||
use picker::{Picker, PickerDelegate};
|
use picker::{Picker, PickerDelegate};
|
||||||
|
|
|
@ -115,6 +115,8 @@ lazy_static! {
|
||||||
#[derive(Clone, PartialEq)]
|
#[derive(Clone, PartialEq)]
|
||||||
pub struct RemoveWorktreeFromProject(pub WorktreeId);
|
pub struct RemoveWorktreeFromProject(pub WorktreeId);
|
||||||
|
|
||||||
|
actions!(assistant, [ShowConfiguration]);
|
||||||
|
|
||||||
actions!(
|
actions!(
|
||||||
workspace,
|
workspace,
|
||||||
[
|
[
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue