This PR adds the ability to favorite models for external agents—writing to the settings in the `agent_servers` key—as well as a handful of other improvements: - Make the cycling keybinding `alt-enter` work for the inline assistant as well as previous user messages - Better organized the keybinding files removing some outdated agent-related keybinding definitions - Renamed the inline assistant key context to "InlineAssistant" as "PromptEditor" is old and confusing - Made the keybindings to rate an inline assistant response visible in the thumbs up/down button's tooltip - Created a unified component for the model selector tooltip given we had 3 different places creating the same element - Make the "Cycle Favorited Models" row in the tooltip visible only if there is more than one favorite models Release Notes: - agent: External agents also now support the favoriting model feature, which comes with a handy keybinding to cycle through the favorite list.
31 lines
857 B
Rust
31 lines
857 B
Rust
use std::sync::Arc;
|
|
|
|
use fs::Fs;
|
|
use language_model::LanguageModel;
|
|
use settings::{LanguageModelSelection, update_settings_file};
|
|
use ui::App;
|
|
|
|
fn language_model_to_selection(model: &Arc<dyn LanguageModel>) -> LanguageModelSelection {
|
|
LanguageModelSelection {
|
|
provider: model.provider_id().to_string().into(),
|
|
model: model.id().0.to_string(),
|
|
}
|
|
}
|
|
|
|
pub fn toggle_in_settings(
|
|
model: Arc<dyn LanguageModel>,
|
|
should_be_favorite: bool,
|
|
fs: Arc<dyn Fs>,
|
|
cx: &mut App,
|
|
) {
|
|
let selection = language_model_to_selection(&model);
|
|
update_settings_file(fs, cx, move |settings, _| {
|
|
let agent = settings.agent.get_or_insert_default();
|
|
if should_be_favorite {
|
|
agent.add_favorite_model(selection.clone());
|
|
} else {
|
|
agent.remove_favorite_model(&selection);
|
|
}
|
|
});
|
|
}
|