Skip to main content

synaps_cli/runtime/openai/catalog/
generic.rs

1use super::*;
2use serde::Deserialize;
3
4#[derive(Debug, Deserialize)]
5struct GenericModelsResponse {
6    data: Vec<GenericModelItem>,
7}
8
9#[derive(Debug, Deserialize)]
10struct GenericModelItem {
11    id: String,
12    #[serde(default)]
13    name: Option<String>,
14}
15
16/// Parse a `{data:[{id,name?}]}` response.
17/// Identical filtering behaviour to `registry::parse_provider_models_response`.
18pub fn parse_generic_catalog_models(
19    body: &str,
20    provider_key: &str,
21    provider_name: &str,
22) -> Result<Vec<CatalogModel>, serde_json::Error> {
23    let resp: GenericModelsResponse = serde_json::from_str(body)?;
24    Ok(resp
25        .data
26        .into_iter()
27        .filter_map(|item| {
28            let mut m = CatalogModel::new(provider_key, provider_name, item.id)?;
29            m.label = item.name.filter(|n| !n.trim().is_empty());
30            m.reasoning = ReasoningSupport::GenericOpenAi;
31            Some(m)
32        })
33        .collect())
34}