(State(state): State<Arc<ServerState>>)
| 2270 | } |
| 2271 | |
| 2272 | async fn list_providers(State(state): State<Arc<ServerState>>) -> Json<ProviderListResponse> { |
| 2273 | let variant_lookup = get_model_variant_lookup().await; |
| 2274 | let models = state.providers.list_models(); |
| 2275 | let mut provider_map: HashMap<String, Vec<ModelInfo>> = HashMap::new(); |
| 2276 | for m in models { |
| 2277 | let provider_id = m.provider.clone(); |
| 2278 | let model_id = m.id.clone(); |
| 2279 | let variants = variants_for_model(variant_lookup, &provider_id, &model_id); |
| 2280 | provider_map |
| 2281 | .entry(provider_id.clone()) |
| 2282 | .or_default() |
| 2283 | .push(ModelInfo { |
| 2284 | id: model_id, |
| 2285 | name: m.name, |
| 2286 | provider: provider_id, |
| 2287 | variants, |
| 2288 | }); |
| 2289 | } |
| 2290 | let all: Vec<ProviderInfo> = provider_map |
| 2291 | .into_iter() |
| 2292 | .map(|(id, models)| ProviderInfo { |
| 2293 | id: id.clone(), |
| 2294 | name: id, |
| 2295 | models, |
| 2296 | }) |
| 2297 | .collect(); |
| 2298 | let connected: Vec<String> = all.iter().map(|p| p.id.clone()).collect(); |
| 2299 | let default_model: HashMap<String, String> = all |
| 2300 | .iter() |
| 2301 | .filter_map(|p| p.models.first().map(|m| (p.id.clone(), m.id.clone()))) |
| 2302 | .collect(); |
| 2303 | Json(ProviderListResponse { |
| 2304 | all, |
| 2305 | default_model, |
| 2306 | connected, |
| 2307 | }) |
| 2308 | } |
| 2309 | |
| 2310 | #[derive(Debug, Serialize)] |
| 2311 | pub struct AuthMethodInfo { |
nothing calls this directly
no test coverage detected