|
Download README.md from suryatmodulus/tyger: direct link, hf CLI and curl.
- Browser
- Download file 11.6 kB
-
https://huggingface.co/suryatmodulus/tyger/resolve/main/README.md
- Command line
-
hf download hf://suryatmodulus/tyger/README.md
-
curl -L -o README.md https://huggingface.co/suryatmodulus/tyger/resolve/main/README.md
11.6 kB
| language: | |
| - en | |
| license: openmdw-1.1 | |
| license_link: LICENSE.md | |
| pipeline_tag: automatic-speech-recognition | |
| base_model: | |
| - nvidia/nemotron-3.5-asr-streaming-0.6b | |
| tags: | |
| - decision-model | |
| - automatic-speech-recognition | |
| - asr | |
| - feature-extraction | |
| - speech-to-speech | |
| - duplex | |
| - full-duplex | |
| - turn-taking | |
| - endpoint-detection | |
| - barge-in | |
| - backchannel | |
| - streaming | |
| - audio | |
| - gru | |
| - pytorch | |
| - safetensors | |
| <div align="center"> | |
| <img src="assets/logo.jpeg" alt="NineNineSix" width="460" /> | |
| <h1>TYGER</h1> | |
| <p> | |
| <a href="https://discord.gg/NzP3rjB4SB"><img src="https://img.shields.io/badge/Discord-Join_the_community-5865F2" alt="Discord" /></a> | |
| <a href="https://www.nineninesix.ai/"><img src="https://img.shields.io/badge/Website-NineNineSix-111827" alt="Website" /></a> | |
| <a href="https://github.com/nineninesix-ai/tyger-s2s"><img src="https://img.shields.io/badge/Voice_agent-tyger--s2s-181717" alt="Voice agent: tyger-s2s" /></a> | |
| <a href="LICENSE.md"><img src="https://img.shields.io/badge/License-OpenMDW_1.1-blue" alt="License: OpenMDW-1.1" /></a> | |
| </p> | |
| </div> | |
| **TYGER** - An open-weight speech decision model for real-time, full-duplex voice agents. It knows when to respond, keep listening, yield, and backchannel. | |
| ## Example | |
| <audio controls src="https://cdn-uploads.huggingface.co/production/uploads/64fab67bd268b2f1ad8a826b/MG5P0_PpMeOp8OKydH2TC.wav"></audio> | |
| ## Use it | |
| [**tyger-s2s**](https://github.com/nineninesix-ai/tyger-s2s) is our open-source | |
| voice agent built on this model (Apache-2.0). You talk to it in the browser, as | |
| on a phone call: | |
| - this model is its ears: it transcribes you, and knows when you've finished, | |
| when you cut in, and when to say "mm-hm"; | |
| - LLM writes the replies, TTS speaks them in a cloned voice; | |
| - it comes as a [Docker image](https://github.com/nineninesix-ai/tyger-s2s#docker), | |
| and can be the voice backend of | |
| [your own web app](https://github.com/nineninesix-ai/tyger-s2s#api-mode-tyger-behind-your-own-app). | |
| To run the model in your own code, start from tyger-s2s's runtime | |
| ([`app/plugins/ears/tyger/`](https://github.com/nineninesix-ai/tyger-s2s/tree/main/app/plugins/ears/tyger)). | |
| ## The model | |
| | | | | |
| | --- | --- | | |
| | Speech recognition | [NVIDIA Nemotron 3.5 ASR Streaming 0.6B](https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b), unchanged, with its decoder and tokenizer | | |
| | Turn-taker | a causal GRU: 3 layers, width 768 | | |
| | Parameters | 652M: 638M Nemotron + 14M GRU, in FP32 (2.61 GB) | | |
| | Input | two aligned mono 16 kHz streams: the user's mic and the agent's playback | | |
| | Features | Nemotron's layer 15 (1,024 dims), one frame per 80 ms, no lookahead | | |
| | Streaming | 320 ms hops; Nemotron re-encodes 8s window per stream at each hop | | |
| | Output, per frame | the turn state (listen, hold, speak, backchannel) and hazard, barge-in, backchannel and endpoint scores | | |
| | State per conversation | 9 KiB of GRU state, besides the audio windows | | |
| | Language | English | | |
| This repo holds weights and configs, no inference code. | |
| ## Events | |
| | Event | When | The app | Default threshold | | |
| | --- | --- | --- | ---: | | |
| | Endpoint | the user has finished | answers | 0.91 | | |
| | Barge-in | the user cuts in while the agent talks | stops the reply at once | 0.50 | | |
| | Backchannel | a "mm-hm" fits while the user talks | plays one; the user keeps the turn | 0.40 | | |
| Guards: 6 warm-up frames, at least 350 ms of speech above -50 dB, 1.2 s between | |
| backchannels, and an endpoint after 1.2 s of silence even if the score stays | |
| low. The state input is LISTEN while the agent listens and SPEAK while it | |
| talks, never the model's own guess. The barge-in and backchannel defaults are | |
| looser than the evaluation's (0.93 and 0.80) and have no measurements of their | |
| own: tune them in your app (tyger-s2s's page has sliders for that). | |
| ## Training | |
| The GRU, its input layers and its heads were trained from scratch on | |
| [Open Yap 1K v1.0](https://theagenticdatacompany.com/open-yap-1k) (1,395 | |
| training, 107 development and 100 test conversations), with Nemotron frozen. | |
| The labels come automatically from when each side speaks, not from human | |
| annotators: the turn state, an upcoming speaking onset (hazard), when to yield | |
| to an interruption, when a backchannel fits, and whether a pause ends the turn. | |
| One training seed. | |
| ## Evaluation | |
| Offline scores for the released weights, at endpoint 0.91, barge-in 0.93 and | |
| backchannel 0.80, set on development data and frozen before test scoring. | |
| [evaluation/README.md](evaluation/README.md) has the definitions and caveats, | |
| and [metrics.json](evaluation/metrics.json) every number. | |
|  | |
| **Endpoints,**: | |
| | Set | Turns | Latency, median / mean | Early cut-ins | No endpoint within 1.2 s | Pauses with a false endpoint | | |
| | --- | ---: | ---: | ---: | ---: | ---: | | |
| | Open Yap 1K test | 1,000 | 252.5 / 465.0 ms | 29.90% | 7.40% | 415 of 1,000 | | |
| | Full-Duplex-Bench v1.0, CANDOR | 119 | 307.5 / 383.0 ms | 25.21% | 5.04% | 123 of 277 | | |
| | Internal, not public | 242 | 252.5 / 286.5 ms | 12.40% | 0.00% | 186 of 539 | | |
| - Latency runs from the end of the user's turn, and counts only endpoints that | |
| fired: read it with the early cut-ins (an endpoint before the turn really | |
| ended) and the misses. | |
| - With the fallback off, Open Yap's mean latency is 436.5 ms, and 16.0% of turns | |
| get no endpoint within 1.2 s. | |
| **Turn state, barge-in and backchannel** (Open Yap 1K test): | |
| | Metric | Value | | |
| | --- | ---: | | |
| | Turn-state macro-F1 | 0.9436 | | |
| | Endpoint ROC-AUC / AP | 0.9839 / 0.8149 | | |
| | Barge-in ROC-AUC / AP | 0.9797 / 0.6657 | | |
| | Backchannel ROC-AUC / AP | 0.8976 / 0.3004 | | |
| | Barge-ins caught within 640 ms / median delay | 25.32% / 400 ms | | |
| | False barge-ins per hour of clean speech | 0.00 (none in 4.72 h; not a guarantee) | | |
| | Backchannels caught / median delay | 14.86% / -160 ms (before the labeled moment) | | |
| | Backchannels fired per hour of listening | 135.08 | | |
| **Speed:** the GRU takes 0.805 ms per frame (median; p90 0.823 ms) on an RTX | |
| 4090 at batch 1, with 108.76 MiB of peak GPU memory. That leaves out Nemotron | |
| and waiting for audio. In tyger-s2s, the whole model takes ~4 GB of GPU memory | |
| for 4 conversations. | |
| **Limits:** | |
| - Offline diagnostics only: no live voice-agent benchmark, and no new ASR | |
| error rates ([NVIDIA's card](upstream/NVIDIA_MODEL_CARD.md) has its own). | |
| - One training seed, and the evaluation sets also guided development. The | |
| internal set can't be reproduced. | |
| - The Full-Duplex-Bench rows are adapted v1.0 CANDOR replays with a silent | |
| agent channel, not official full-agent scores. FDB-v3 isn't evaluated. | |
| ## License | |
| TYGER's weights and files are OpenMDW-1.1. NVIDIA's original | |
| card, figures and license are unchanged in `upstream/` and `licenses/`, and | |
| `manifest.json` lists every file's size and SHA-256. See | |
| [LICENSE.md](LICENSE.md) and [NOTICE.md](NOTICE.md). | |
| ## Links | |
| - **Voice agent:** [nineninesix-ai/tyger-s2s](https://github.com/nineninesix-ai/tyger-s2s) | |
| - **Website:** [nineninesix.ai](https://www.nineninesix.ai/) | |
| - **Discord:** [NineNineSix community](https://discord.gg/NzP3rjB4SB) | |
| - **Training data:** [Open Yap 1K](https://theagenticdatacompany.com/open-yap-1k) | |
| - **ASR:** [NVIDIA Nemotron](https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b) | |
| ## Acknowledgments | |
| We thank NVIDIA for Nemotron, The Agentic Data Company for Open Yap 1K, and the | |
| authors of [Full-Duplex-Bench](https://arxiv.org/abs/2503.04721) for its | |
| evaluation probes. Related work, not bundled or reproduced here: | |
| [Full-Duplex-Bench-v3](https://arxiv.org/abs/2604.04847), | |
| [Moshi](https://arxiv.org/abs/2410.00037), | |
| [SALM-Duplex](https://arxiv.org/abs/2505.15670), | |
| [Freeze-Omni](https://arxiv.org/abs/2411.00774), | |
| [PersonaPlex](https://arxiv.org/abs/2602.06053) and | |
| [Audio Flamingo 3](https://arxiv.org/abs/2507.08128). | |
| ## Citation | |
| If you use TYGER, please cite the model and its training data: | |
| ```bibtex | |
| @misc{tyger_2026, | |
| author = {{NineNineSix}}, | |
| title = {{TYGER}: Speech Recognition and Duplex Turn Control}, | |
| year = {2026}, | |
| publisher = {NineNineSix}, | |
| url = {https://huggingface.co/nineninesix/tyger} | |
| } | |
| @misc{openyap1k, | |
| title = {Open Yap 1K: Channel-Separated English Natural Two-Speaker Conversations}, | |
| author = {{The Agentic Data Company}}, | |
| year = {2026}, | |
| version = {1.0}, | |
| publisher = {The Agentic Data Company}, | |
| url = {https://theagenticdatacompany.com/open-yap-1k} | |
| } | |
| ``` | |
| ## References | |
| <details> | |
| <summary>BibTeX for the ASR component and related work</summary> | |
| ```bibtex | |
| @misc{nvidia_nemotron_3_5_asr, | |
| author = {{NVIDIA}}, | |
| title = {Nemotron 3.5 ASR Streaming 0.6B}, | |
| url = {https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b}, | |
| note = {Bundled revision ea30d66debe3740a08b573244286791d423d6b3e} | |
| } | |
| @misc{lin2025fullduplexbench, | |
| title = {Full-Duplex-Bench: A Benchmark to Evaluate Full-duplex Spoken Dialogue Models on Turn-taking Capabilities}, | |
| author = {Lin, Guan-Ting and Lian, Jiachen and Li, Tingle and Wang, Qirui and Anumanchipalli, Gopala and Liu, Alexander H. and Lee, Hung-yi}, | |
| year = {2025}, eprint = {2503.04721}, archivePrefix = {arXiv}, | |
| url = {https://arxiv.org/abs/2503.04721} | |
| } | |
| @misc{lin2026fullduplexbenchv3, | |
| title = {Full-Duplex-Bench-v3: Benchmarking Tool Use for Full-Duplex Voice Agents Under Real-World Disfluency}, | |
| author = {Lin, Guan-Ting and Chen, Chen and Chen, Zhehuai and Lee, Hung-yi}, | |
| year = {2026}, eprint = {2604.04847}, archivePrefix = {arXiv}, | |
| url = {https://arxiv.org/abs/2604.04847} | |
| } | |
| @misc{defossez2024moshi, | |
| title = {Moshi: a speech-text foundation model for real-time dialogue}, | |
| author = {D\'{e}fossez, Alexandre and Mazar\'{e}, Laurent and Orsini, Manu and Royer, Am\'{e}lie and P\'{e}rez, Patrick and J\'{e}gou, Herv\'{e} and Grave, Edouard and Zeghidour, Neil}, | |
| year = {2024}, eprint = {2410.00037}, archivePrefix = {arXiv}, | |
| url = {https://arxiv.org/abs/2410.00037} | |
| } | |
| @misc{hu2025salmduplex, | |
| title = {SALM-Duplex: Efficient and Direct Duplex Modeling for Speech-to-Speech Language Model}, | |
| author = {Hu, Ke and Hosseini-Asl, Ehsan and Chen, Chen and Casanova, Edresson and Ghosh, Subhankar and {\.{Z}}elasko, Piotr and Chen, Zhehuai and Li, Jason and Balam, Jagadeesh and Ginsburg, Boris}, | |
| year = {2025}, eprint = {2505.15670}, archivePrefix = {arXiv}, | |
| url = {https://arxiv.org/abs/2505.15670} | |
| } | |
| @misc{wang2024freezeomni, | |
| title = {Freeze-Omni: A Smart and Low Latency Speech-to-speech Dialogue Model with Frozen LLM}, | |
| author = {Wang, Xiong and Li, Yangze and Fu, Chaoyou and Shen, Yunhang and Xie, Lei and Li, Ke and Sun, Xing and Ma, Long}, | |
| year = {2024}, eprint = {2411.00774}, archivePrefix = {arXiv}, | |
| url = {https://arxiv.org/abs/2411.00774} | |
| } | |
| @misc{roy2026personaplex, | |
| title = {PersonaPlex: Voice and Role Control for Full Duplex Conversational Speech Models}, | |
| author = {Roy, Rajarshi and Raiman, Jonathan and Lee, Sang-gil and Ene, Teodor-Dumitru and Kirby, Robert and Kim, Sungwon and Kim, Jaehyeon and Catanzaro, Bryan}, | |
| year = {2026}, eprint = {2602.06053}, archivePrefix = {arXiv}, | |
| url = {https://arxiv.org/abs/2602.06053} | |
| } | |
| @misc{goel2025audioflamingo3, | |
| title = {Audio Flamingo 3: Advancing Audio Intelligence with Fully Open Large Audio Language Models}, | |
| author = {Goel, Arushi and Ghosh, Sreyan and Kim, Jaehyeon and Kumar, Sonal and Kong, Zhifeng and Lee, Sang-gil and Yang, Chao-Han Huck and Duraiswami, Ramani and Manocha, Dinesh and Valle, Rafael and Catanzaro, Bryan}, | |
| year = {2025}, eprint = {2507.08128}, archivePrefix = {arXiv}, | |
| url = {https://arxiv.org/abs/2507.08128} | |
| } | |
| ``` | |
| </details> |