assistant2: Persist model selector changes (#22116)

This PR makes the language model selector in the Assistant2 panel
persist the model changes to the settings.

Release Notes:

- N/A
This commit is contained in:
Marshall Bowers 2024-12-16 18:00:40 -05:00 committed by GitHub
parent db2aa0bca5
commit ccf2a60039
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 23 additions and 5 deletions

View file

@ -90,7 +90,7 @@ impl AssistantPanel {
Self { Self {
active_view: ActiveView::Thread, active_view: ActiveView::Thread,
workspace: workspace.clone(), workspace: workspace.clone(),
fs, fs: fs.clone(),
language_registry: language_registry.clone(), language_registry: language_registry.clone(),
thread_store: thread_store.clone(), thread_store: thread_store.clone(),
thread: cx.new_view(|cx| { thread: cx.new_view(|cx| {
@ -103,7 +103,13 @@ impl AssistantPanel {
) )
}), }),
message_editor: cx.new_view(|cx| { message_editor: cx.new_view(|cx| {
MessageEditor::new(workspace, thread_store.downgrade(), thread.clone(), cx) MessageEditor::new(
fs.clone(),
workspace,
thread_store.downgrade(),
thread.clone(),
cx,
)
}), }),
tools, tools,
local_timezone: UtcOffset::from_whole_seconds( local_timezone: UtcOffset::from_whole_seconds(
@ -141,6 +147,7 @@ impl AssistantPanel {
}); });
self.message_editor = cx.new_view(|cx| { self.message_editor = cx.new_view(|cx| {
MessageEditor::new( MessageEditor::new(
self.fs.clone(),
self.workspace.clone(), self.workspace.clone(),
self.thread_store.downgrade(), self.thread_store.downgrade(),
thread, thread,
@ -170,6 +177,7 @@ impl AssistantPanel {
}); });
self.message_editor = cx.new_view(|cx| { self.message_editor = cx.new_view(|cx| {
MessageEditor::new( MessageEditor::new(
self.fs.clone(),
self.workspace.clone(), self.workspace.clone(),
self.thread_store.downgrade(), self.thread_store.downgrade(),
thread, thread,

View file

@ -1,12 +1,16 @@
use std::sync::Arc;
use editor::{Editor, EditorElement, EditorStyle}; use editor::{Editor, EditorElement, EditorStyle};
use fs::Fs;
use gpui::{AppContext, FocusableView, Model, TextStyle, View, WeakModel, WeakView}; use gpui::{AppContext, FocusableView, Model, TextStyle, View, WeakModel, WeakView};
use language_model::{LanguageModelRegistry, LanguageModelRequestTool}; use language_model::{LanguageModelRegistry, LanguageModelRequestTool};
use language_model_selector::{LanguageModelSelector, LanguageModelSelectorPopoverMenu}; use language_model_selector::{LanguageModelSelector, LanguageModelSelectorPopoverMenu};
use settings::Settings; use settings::{update_settings_file, Settings};
use theme::ThemeSettings; use theme::ThemeSettings;
use ui::{prelude::*, ButtonLike, CheckboxWithLabel, ElevationIndex, KeyBinding, Tooltip}; use ui::{prelude::*, ButtonLike, CheckboxWithLabel, ElevationIndex, KeyBinding, Tooltip};
use workspace::Workspace; use workspace::Workspace;
use crate::assistant_settings::AssistantSettings;
use crate::context_store::ContextStore; use crate::context_store::ContextStore;
use crate::context_strip::ContextStrip; use crate::context_strip::ContextStrip;
use crate::thread::{RequestKind, Thread}; use crate::thread::{RequestKind, Thread};
@ -24,6 +28,7 @@ pub struct MessageEditor {
impl MessageEditor { impl MessageEditor {
pub fn new( pub fn new(
fs: Arc<dyn Fs>,
workspace: WeakView<Workspace>, workspace: WeakView<Workspace>,
thread_store: WeakModel<ThreadStore>, thread_store: WeakModel<ThreadStore>,
thread: Model<Thread>, thread: Model<Thread>,
@ -50,9 +55,14 @@ impl MessageEditor {
) )
}), }),
language_model_selector: cx.new_view(|cx| { language_model_selector: cx.new_view(|cx| {
let fs = fs.clone();
LanguageModelSelector::new( LanguageModelSelector::new(
|model, _cx| { move |model, cx| {
println!("Selected {:?}", model.name()); update_settings_file::<AssistantSettings>(
fs.clone(),
cx,
move |settings, _cx| settings.set_model(model.clone()),
);
}, },
cx, cx,
) )