use audio_cpp::{ModelFamily, Registry};
fn main() -> Result<(), audio_cpp::Error> {
let registry = Registry::new()?;
let families = registry.families()?;
println!("=== 模型族 ({}) ===", families.len());
for f in &families {
println!(" {f}");
}
println!("\n=== 计算设备 ===");
for d in Registry::devices()? {
println!(" [{}] #{} {}", d.backend, d.index, d.name);
}
println!("\n=== Loader 明细 ===");
let loaders = registry.loaders()?;
for l in &loaders {
let tasks = l
.capabilities
.supported_tasks
.iter()
.map(|t| format!("{}[{}]", t.task, t.modes.join("/")))
.collect::<Vec<_>>()
.join(", ");
println!("{}", l.family);
println!(" 任务: {tasks}");
if !l.capabilities.languages.is_empty() {
println!(" 语言: {}", l.capabilities.languages.join(", "));
}
if !l.api_endpoints.is_empty() {
println!(" 端点: {}", l.api_endpoints.join(", "));
}
}
println!("\n=== ModelFamily 往返校验 ===");
for f in families.iter().map(std::string::String::as_str) {
let model_family = ModelFamily::from(f);
println!(" {} → {:?} → {}", f, model_family, model_family.as_str());
}
println!("\n=== 支持流式 ASR 的族 ===");
for l in &loaders {
let streaming_asr = l
.capabilities
.supported_tasks
.iter()
.any(|t| t.task == "asr" && t.modes.iter().any(|m| m == "streaming"));
if streaming_asr {
println!(
" {}(用 ModelFamily::from(\"{}\") → {:?})",
l.family,
l.family,
ModelFamily::from(l.family.as_str())
);
}
}
println!("\n提示: registry.families() 反映当前编译的模型集;切换 feature 或");
println!("$env:AUDIOCPP_MODELS 并重新构建后,这里列出的族会随之变化。");
Ok(())
}