1use std::sync::Arc;
2
3use agent_client_protocol::ModelId;
4use fs::Fs;
5use language_model::LanguageModel;
6use settings::{LanguageModelSelection, update_settings_file};
7use ui::App;
8
9fn language_model_to_selection(model: &Arc<dyn LanguageModel>) -> LanguageModelSelection {
10 LanguageModelSelection {
11 provider: model.provider_id().to_string().into(),
12 model: model.id().0.to_string(),
13 }
14}
15
16fn model_id_to_selection(model_id: &ModelId) -> LanguageModelSelection {
17 let id = model_id.0.as_ref();
18 let (provider, model) = id.split_once('/').unwrap_or(("", id));
19 LanguageModelSelection {
20 provider: provider.to_owned().into(),
21 model: model.to_owned(),
22 }
23}
24
25pub fn toggle_in_settings(
26 model: Arc<dyn LanguageModel>,
27 should_be_favorite: bool,
28 fs: Arc<dyn Fs>,
29 cx: &App,
30) {
31 let selection = language_model_to_selection(&model);
32 update_settings_file(fs, cx, move |settings, _| {
33 let agent = settings.agent.get_or_insert_default();
34 if should_be_favorite {
35 agent.add_favorite_model(selection.clone());
36 } else {
37 agent.remove_favorite_model(&selection);
38 }
39 });
40}
41
42pub fn toggle_model_id_in_settings(
43 model_id: ModelId,
44 should_be_favorite: bool,
45 fs: Arc<dyn Fs>,
46 cx: &App,
47) {
48 let selection = model_id_to_selection(&model_id);
49 update_settings_file(fs, cx, move |settings, _| {
50 let agent = settings.agent.get_or_insert_default();
51 if should_be_favorite {
52 agent.add_favorite_model(selection.clone());
53 } else {
54 agent.remove_favorite_model(&selection);
55 }
56 });
57}