codetether_agent/tui/app/state/
model_picker.rs1use std::sync::Arc;
4
5use crate::provider::ProviderRegistry;
6
7impl super::AppState {
8 pub async fn refresh_available_models(
14 &mut self,
15 registry: Option<&Arc<ProviderRegistry>>,
16 ) -> anyhow::Result<()> {
17 let mut models = Vec::new();
18 let Some(registry) = registry else {
19 self.available_models.clear();
20 return Ok(());
21 };
22
23 for provider_name in registry.list() {
24 if let Some(provider) = registry.get(provider_name)
25 && let Ok(provider_models) = provider.list_models().await
26 {
27 models.extend(provider_models.into_iter().map(|model| {
28 if model.id.contains('/') {
29 model.id
30 } else {
31 format!("{provider_name}/{}", model.id)
32 }
33 }));
34 }
35 }
36
37 models.sort();
38 models.dedup();
39 self.set_available_models(models);
40 Ok(())
41 }
42}