stem_splitter_core/model/
registry.rs1use 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}