Version:v0.1.0 — step-15000 checkpoint (first public release; superseded by v0.3).
Versions are git tags in this repo; load a specific one with
revision="v0.1.0". See Version history at the bottom.
🔜 A newer version exists:tr-hi-s2st-v0.2
fixes the text stream (the Phase-0 padding-loss fix) so the inner-monologue
actually learns. If you want the later recipe, use v0.2.
📒 Data clarification
This checkpoint was trained on the project's synthetic corpus —
tiny-aya-translate/tr-hi-mimi-encoded
(FLORES + OPUS-100 + machine-translated conversational text, rendered with
multi-voice TTS; 1,178,302 train / 62,036 val pairs, verified from the
training log). Earlier wording in this card called the data "FLEURS" — that
was a mislabel: FLORES (parallel text) is not FLEURS (read-speech
audio), and no FLEURS audio is in this set. (Note: the later v0.2 run
accidentally trained on a FLEURS sibling dataset; v0.1 here used the intended
synthetic data.)
TinyAya Stage 2 — Turkish ↔ Hindi Speech-to-Speech Translation (LoRA)
Stage-2 simultaneous-translation adapter for Turkish↔Hindi speech-to-speech
translation, trained on TPU v6e-8. This repo ships the authors' trained
deltas only — a LoRA adapter over CohereLabs/tiny-aya-base plus the
custom projection / Moshi depth-decoder / audio-head / embedding tensors.
The weights in this repo (LoRA adapter + custom heads) are CC-BY-NC-4.0:
they are derivatives of CohereLabs/tiny-aya-base, which is CC-BY-NC-4.0, so
the non-commercial term is inherited and cannot be relicensed away. The
authors' separate training/eval code is Apache-2.0. Component terms
(mirrored from THIRD_PARTY_NOTICES.md):
CohereLabs/tiny-aya-base base weights → CC-BY-NC-4.0. Not included
here; obtain it from Cohere and comply with its terms.
Source data (FLORES, OPUS-100, conversational MT) and the TTS-generated
audio → see the dataset card
for per-source terms (e.g. FLORES is CC BY-SA 4.0; OPUS-100 sub-corpora and
the TTS-model outputs carry their own licenses). Verify before redistribution.
Convergence note (honest): the audio loss plateaued by ~step 8,000
(≈1.7 epochs) and did not improve over the final 7k steps. The text /
inner-monologue stream did not learn in this run (loss ≈ random), pending
a data-pipeline fix. So this checkpoint reflects the audio-translation
capability of the recipe at convergence, not an under-trained model.
This is fixed in v0.2
(the text-padding-weighted loss), where the text stream learns.
Evaluation
Speech-translation quality is measured with ASR-BLEU (Whisper transcribes
the generated target audio, BLEU vs. reference target text) and DNSMOS
(naturalness). ASR-BLEU is implemented in scripts/eval_checkpoint.py; DNSMOS
is not yet wired up. Pending for this release (v0.1.0); will be filled in
the YAML model-index + below.
Metric
tr→hi
hi→tr
overall
ASR-BLEU
TBD
TBD
TBD
DNSMOS (ovrl)
TBD
TBD
TBD
Intended use & limitations
Intended: research on low-resource speech-to-speech translation and
simultaneous translation; a Stage-2 checkpoint, not a production system.
Limitations: trained on synthetic multi-voice TTS audio (FLORES /
OPUS-100 / conversational text) — expect degradation on real, spontaneous, or
noisy audio and on voices outside the TTS set; two language directions only;
the text stream did
not learn in this version (root cause found 2026-07-08: a loader path bug —
the corpus's word-level alignments ship under {stem}.{src,tgt}.alignments.json
at the dataset root, which the v0.1 loader never resolved, so text supervision
was silently all-padding; fixed in v0.3); generation is autoregressive
and not optimized for latency here.
Bias & risks: a fixed set of TTS voices — fairness across real speakers,
dialects, accents, code-switching, and spontaneous speech is untested. Speech
translation can mistranslate, omit, or fabricate content; not for high-stakes use.
Inference quickstart
python
1import torch
2from transformers import AutoModelForCausalLM, AutoTokenizer
3from peft import PeftModel
45BASE ="CohereLabs/tiny-aya-base"# obtain per Cohere license6ADAPTER ="tiny-aya-translate/tr-hi-s2st-v0.1"# this repo78tok = AutoTokenizer.from_pretrained(BASE, trust_remote_code=True)9base = AutoModelForCausalLM.from_pretrained(BASE, torch_dtype=torch.bfloat16, trust_remote_code=True)10model = PeftModel.from_pretrained(base, ADAPTER)# loads adapter_model.safetensors1112# Then attach the custom heads (projection / depth_decoder / audio_heads /13# text_embed / model_audio_embed *.pt) and the Mimi codec; see the training14# repo for the full composite + generation loop.
The full speech→speech pipeline (Mimi encode → backbone+depth-decoder →
Mimi decode) lives in the training repo (src/model/composite.py).
First release. Audio converged ~step 8k; text stream not yet learning; eval pending.
When a materially different model is trained (new data / architecture), it
goes in a new repo — here, tr-hi-s2st-v0.2
(the new_version: field shows a forward banner on the Hub).
Acknowledgements
This model was trained on Cloud TPU v6e-8 hardware generously provided by
Google's TPU Research Cloud (TRC) program. We thank the TRC team for
supporting this research. See NOTICE and THIRD_PARTY_NOTICES.md for
component licenses.
Citation
bibtex
1@misc{tinyaya_tr_hi_s2st_v0_1,
2 title = {TinyAya: Turkish-Hindi Speech-to-Speech Translation (v0.1)},
3 author = {tiny-aya-translate},
4 year = {2026},
5 note = {Cohere2 + frozen Moshi depth decoder, LoRA, trained on Google TRC TPU v6e-8},
6 url = {https://huggingface.co/tiny-aya-translate/tr-hi-s2st-v0.1}
7}
Where this sits
The v0.3 speech-to-speech pipeline, end to end:
tr-hi-parallel-text text triples (en pivot -> tr / hi)
| TTS
tr-hi-parallel-speech-v2 synthetic speech + QC signals
| Mimi encode
tr-hi-mimi-encoded 8-codebook tokens + word alignments
| Stage-2 training
tr-hi-s2st-v0.3 the released model
proof-of-concept that validated Tiny Aya as a Moshi backbone
Project
TinyAya Stage 2 — Turkish⇄Hindi speech-to-speech translation with a text
inner-monologue: a LoRA-adapted Cohere2 backbone driving a frozen Moshi depth
decoder over Mimi codes.
The v0.3 run covered 76,250 steps / 2.07 epochs on a Cloud TPU v6e-16
(best val composite 2.8199 @ step 76,000). Read honestly: the text
inner-monologue learns to translate (free-run chrF++ ~25.7 / 25.1), while
intelligible audio synthesis remains the frontier (ASR-chrF++ 3.7 / 9.6
against a 92.1 / 86.6 ground-truth-audio ceiling) — bounded by the frozen depth
decoder, not by translation understanding.