cera 0.2.3

Rust-native LLM inference engine
Documentation
#[test]
fn sample_audio_frame_smoke() {
    let path = std::path::PathBuf::from(std::env::var("HOME").expect("HOME not set"))
        .join(".leap/models/LFM2.5-Audio-1.5B-Q4_0/vocoder-LFM2.5-Audio-1.5B-Q4_0.gguf");
    if !path.exists() {
        eprintln!("skipping — vocoder not found");
        return;
    }

    let gguf = cera::gguf::GgufFile::open_arc(&path).unwrap();
    let weights = cera::model::audio_decoder::AudioDecoderWeights::from_gguf(&gguf).unwrap();
    let mut state = cera::model::audio_decoder::DepthformerState::new(&weights.depthformer_config);

    // Fake LLM embedding (2048-dim).
    let embedding: Vec<f32> = (0..2048).map(|i| (i as f32 * 0.001).sin()).collect();

    let t0 = std::time::Instant::now();
    let codes =
        cera::model::audio_decoder::sample_audio_frame(&weights, &mut state, &embedding, 0.0, 1);
    let ms = t0.elapsed().as_millis();
    eprintln!("audio frame sampled in {ms} ms: {:?}", codes);

    // Verify: 8 codes, each in [0, 2049).
    assert_eq!(codes.len(), 8);
    for (j, &c) in codes.iter().enumerate() {
        assert!((0..2049).contains(&c), "code {j} = {c} out of range");
    }

    // Embed codes back.
    let emb = cera::model::audio_decoder::embed_audio_token(&weights, &codes);
    assert_eq!(emb.len(), 2048);
    assert!(emb.iter().all(|x| x.is_finite()));
    eprintln!("embed_audio_token OK: dim={}", emb.len());
}