stem_splitter_core/model/
registry.rs

1use crate::error::{Result, StemError};
2use serde::Deserialize;
3
4#[derive(Debug, Deserialize)]
5pub struct RegistryEntry {
6    pub name: String,
7    pub manifest: String,
8}
9
10#[derive(Debug, Deserialize)]
11pub struct Registry {
12    pub default: String,
13    pub models: Vec<RegistryEntry>,
14}
15
16const REGISTRY_JSON: &str = include_str!("../../models/registry.json");
17
18pub fn resolve_manifest_url(model_name: &str) -> Result<String> {
19    let reg: Registry = serde_json::from_str(REGISTRY_JSON)?;
20    let target = if model_name.is_empty() {
21        reg.default
22    } else {
23        model_name.to_string()
24    };
25
26    reg.models
27        .into_iter()
28        .find(|m| m.name == target)
29        .map(|m| m.manifest)
30        .ok_or_else(|| StemError::Registry(format!("Model `{target}` not found in registry")))
31}