v0.2.x · Native local ASR + realtime voice policy

Ship voice AI that can change its mind.

Vona is the Rust runtime layer for voice-native products: fast, provider-neutral speech infrastructure with native Moonshine ASR, wake admission, local Ollama text routing, realtime TTS policy, deterministic interruption tests, and transport-ready session orchestration.

vona session trace
transport Moonshine Ollama Kokoro
01 audio.frame.in 20ms
02 moonshine.native.transcribe local
03 interruption.detected barge-in
04 ollama.generate.stream loopback
05 tts.policy.stream first audio
22 Workspace crates
6 Provider surfaces
5 Local engines
MIT Open source
Runtime substrate

The layer between a demo and a real voice product.

Vona owns the reusable runtime boundary: sessions, frames, tools, generation, fallback decisions, and backend-neutral contracts. Your product owns the experience, policy, and deployment.

Speech-to-speech contracts

Step-oriented and event-stream voice interfaces give hosted realtime APIs, local STS models, native ASR/TTS engines, and sidecar transports one coherent Rust boundary.

AudioInputFrame TextGenerator BackendStep RealtimeVoiceOutput

Interruption-aware sessions

Measure time-to-first-audio, tool calls, interruption behavior, output frames after barge-in, and fallback decisions in tests before users discover the edge cases.

Native local speech

Run Moonshine ASR through a native binding or protected worker, keep MLX speech experiments isolated, and route realtime TTS through configurable Kokoro, Piper, Qwen3, or custom adapters.

Tool context without glue sprawl

Skill registries, schema validation, audit events, and external context injection let voice systems coordinate with application tools while keeping runtime policy explicit.

SkillRegistry ExternalContextEvent PolicyTextGenerator TtsPolicySynthesizer
Local ASR quality ladder

Speech recognition that can stay local without pretending clouds do not exist.

Vona’s current local-first path uses native Moonshine ASR for the hot turn-taking loop, configurable transcript hotwords for domain vocabulary, and clean provider boundaries so applications can add cloud fallback only where policy allows it.

vona-moonshine

Direct libmoonshine loading for low-latency Apple Silicon recognition, with a protected persistent worker when isolation matters more than single-process speed.

Hotword normalization

Runtime-configured transcript variants help local models keep product names, user vocabulary, and technical terms stable.

Hybrid policy ready

Local ASR remains the default path while hosted providers stay behind explicit routing, consent, cost, and quality decisions.

Benchmark evidence

Manifest-driven corpus scoring reports WER, real-time factor, p95 latency, category rollups, and whether the evidence is generated or human-recorded.

Vona Wake

Wakeword, rebuilt as an admission engine.

Vona Wake is a Rust hot-path gate that keeps microphone audio local and withheld until phrase evidence, speaker identity, privacy state, barge-in policy, and timing all agree that a session should open.

Speaker-gated by design

App-owned profiles can make “authorized speaker said it” the release condition, not merely “the phrase appeared.”

Fast enough to disappear

A tiny always-on state machine with pre-roll release keeps the assistant responsive without streaming everything downstream.

Evidence-first release

Generated regression, human corpus audits, threshold selection, and packaged evidence keep reliability claims honest.

Vona Wake architecture showing microphone audio gated by signal, phrase, speaker, and policy stages before transport release
Signal forge Phrase lattice Speaker lock Policy gate Transport release
Backend portability

Local when you need control. Cloud when you need reach.

Vona is designed for mixed reality: one app can explore local Moshi and Seamless-style paths, native Moonshine ASR, local Ollama text reasoning, cloud realtime protocols, STT/TTS cascades, and sidecar deployments without hard-coding its future to a single provider.

OpenAI Realtimeevent-stream mapping
Gemini Liverealtime protocol surface
Azure Voice Livevoice and speech helpers
ElevenLabsstreaming TTS surface
DeepgramFlux, listen, Aura helpers
Moshi / Seamlesslocal STS families
vona-moonshinenative local ASR
vona-kokoro-onnxrealtime local TTS
vona-mlxMLX speech experiments
vona-ollamalocal HTTP text generation
Release confidence

Test the voice moments that normally feel impossible to pin down.

Vona’s deterministic harnesses make the slippery parts of speech runtime behavior observable: event order, first audio, tool calls, interruption cleanup, local ASR accuracy, generated versus human-recorded corpus evidence, fallback paths, and transport latency.

release gate
$ cargo run -p vona-test-harness --example mock_session --locked
session_id=mock-session-1
close_reason=BackendFinished
metrics time_to_first_audio_ms=Some(0) tool_calls=1 interruptions=1 fallback_count=0
output_frames_after_interruption=0
injected_events=1

$ bash scripts/release_gate.sh
[release-gate] Release gate PASSED
Start with the facade

One dependency. Opt-in surfaces.

Use the umbrella crate for applications, then enable only the adapters you actually ship. Drop lower when you need direct crate boundaries for Moonshine ASR, Ollama text, Kokoro realtime TTS, wake admission, or MLX speech experiments.

Cargo.toml
[dependencies]
vona = { version = "0.2.0", features = [
  "ollama",
  "moonshine",
  "kokoro-onnx",
  "wake",
  "openai-realtime",
] }