favorite_models.rs

 1use std::sync::Arc;
 2
 3use agent_settings::{AgentSettings, language_model_to_selection};
 4use fs::Fs;
 5use language_model::LanguageModel;
 6use settings::{Settings as _, update_settings_file};
 7use ui::App;
 8
 9pub fn toggle_in_settings(
10    model: Arc<dyn LanguageModel>,
11    should_be_favorite: bool,
12    fs: Arc<dyn Fs>,
13    cx: &mut App,
14) {
15    let current_user_selection = AgentSettings::get_global(cx)
16        .default_model
17        .as_ref()
18        .filter(|selection| {
19            selection.provider.0 == model.provider_id().0.as_ref()
20                && selection.model == model.id().0.as_ref()
21        })
22        .cloned();
23
24    let selection = language_model_to_selection(&model, current_user_selection.as_ref());
25    update_settings_file(fs, cx, move |settings, _| {
26        let agent = settings.agent.get_or_insert_default();
27        if should_be_favorite {
28            agent.add_favorite_model(selection.clone());
29        } else {
30            agent.remove_favorite_model(&selection);
31        }
32    });
33}