(&mut self)
| 1268 | } |
| 1269 | |
| 1270 | fn show_model_selector(&mut self) { |
| 1271 | self.push_current_popup_to_stack(); |
| 1272 | |
| 1273 | let agent_type = self.agent_type.clone(); |
| 1274 | let result = tokio::task::block_in_place(|| { |
| 1275 | tokio::runtime::Handle::current().block_on(async { |
| 1276 | let config_service = GlobalConfigManager::get_service().await.ok()?; |
| 1277 | let models: Vec<bitfun_core::service::config::AIModelConfig> = |
| 1278 | config_service.get_ai_models().await.ok()?; |
| 1279 | let global_config: bitfun_core::service::config::GlobalConfig = |
| 1280 | config_service.get_config(None).await.ok()?; |
| 1281 | |
| 1282 | let current_model_id = global_config |
| 1283 | .ai |
| 1284 | .agent_models |
| 1285 | .get(&agent_type) |
| 1286 | .cloned() |
| 1287 | .or_else(|| global_config.ai.default_models.primary.clone()); |
| 1288 | |
| 1289 | let model_items: Vec<ModelItem> = models |
| 1290 | .into_iter() |
| 1291 | .filter(|m| m.enabled) |
| 1292 | .map(|m| ModelItem { |
| 1293 | id: m.id, |
| 1294 | name: m.name, |
| 1295 | provider: m.provider, |
| 1296 | model_name: m.model_name, |
| 1297 | }) |
| 1298 | .collect(); |
| 1299 | |
| 1300 | Some((model_items, current_model_id)) |
| 1301 | }) |
| 1302 | }); |
| 1303 | |
| 1304 | match result { |
| 1305 | Some((models, current_id)) if !models.is_empty() => { |
| 1306 | self.model_selector.show(models, current_id); |
| 1307 | } |
| 1308 | _ => { |
| 1309 | self.status = Some("No available models found.".to_string()); |
| 1310 | } |
| 1311 | } |
| 1312 | } |
| 1313 | |
| 1314 | fn apply_model_selection(&mut self, selected: &ModelItem) { |
| 1315 | let selected_id = selected.id.clone(); |
no test coverage detected