(&mut self)
| 2405 | } |
| 2406 | |
| 2407 | fn refresh_model_dialog(&mut self) { |
| 2408 | let Some(client) = self.context.get_api_client() else { |
| 2409 | self.context.set_has_connected_provider(false); |
| 2410 | return; |
| 2411 | }; |
| 2412 | |
| 2413 | let Ok(providers) = client.get_config_providers() else { |
| 2414 | self.context.set_has_connected_provider(false); |
| 2415 | return; |
| 2416 | }; |
| 2417 | let has_connected_provider = providers.providers.iter().any(|p| !p.models.is_empty()); |
| 2418 | self.context |
| 2419 | .set_has_connected_provider(has_connected_provider); |
| 2420 | |
| 2421 | let mut available_models = HashSet::new(); |
| 2422 | let mut variant_map: HashMap<String, Vec<String>> = HashMap::new(); |
| 2423 | let mut models = Vec::new(); |
| 2424 | let mut context_providers = Vec::new(); |
| 2425 | for provider in providers.providers { |
| 2426 | let provider_id = provider.id.clone(); |
| 2427 | let provider_name = provider.name.clone(); |
| 2428 | let mut provider_models = Vec::new(); |
| 2429 | for model in provider.models { |
| 2430 | let model_id = model.id; |
| 2431 | let model_name = model.name; |
| 2432 | let model_context_window = model.context_window.unwrap_or(0); |
| 2433 | let model_ref = format!("{}/{}", provider_id, model_id); |
| 2434 | available_models.insert(model_ref.clone()); |
| 2435 | let entry = variant_map.entry(model_ref).or_default(); |
| 2436 | for variant in model.variants { |
| 2437 | if !entry.iter().any(|value| value == &variant) { |
| 2438 | entry.push(variant); |
| 2439 | } |
| 2440 | } |
| 2441 | models.push(Model { |
| 2442 | id: model_id.clone(), |
| 2443 | name: model_name.clone(), |
| 2444 | provider: provider_id.clone(), |
| 2445 | context_window: model_context_window, |
| 2446 | }); |
| 2447 | provider_models.push(crate::context::ModelInfo { |
| 2448 | id: format!("{}/{}", provider_id, model_id), |
| 2449 | name: model_name, |
| 2450 | context_window: model_context_window, |
| 2451 | max_output_tokens: 0, |
| 2452 | supports_vision: false, |
| 2453 | supports_tools: true, |
| 2454 | }); |
| 2455 | } |
| 2456 | context_providers.push(crate::context::ProviderInfo { |
| 2457 | id: provider_id, |
| 2458 | name: provider_name, |
| 2459 | models: provider_models, |
| 2460 | }); |
| 2461 | } |
| 2462 | *self.context.providers.write() = context_providers; |
| 2463 | models.sort_by(|a, b| { |
| 2464 | a.provider |
no test coverage detected