🚗 duplex-simmt-en-de

Full-duplex (driving-style) streaming English → German translation LM on a shared 10 Hz clock (100 ms ticks). At every tick the model reads arriving English pieces (s_t) and its own previous output (y_{t-1}), and emits either one German piece or NOP (wait).
EN — Arriving Source Stream (s_t)
DE — Live Model Output Stream (y_t)10 Hz Clock
Tick: 0 (0.0s) in s_t: NOP feedback y_{t-1}: NOP out y_t: NOP
tick (100ms) in: s_t (source pieces) in: y_{t-1} (fed back) out: y_t (emitted)

Run Live Keyboard Translation on Your Machine

duplex.live downloads the 448 MB checkpoint and SentencePiece tokenizer automatically from Hugging Face on first run:

git clone https://github.com/sumit-1/duplex-simmt-en-de.git
cd duplex-simmt-en-de
pip install -e .

# Split-screen terminal UI (type English in top pane, German streams live at 10 Hz in bottom pane)
python -m duplex.live --ckpt sumitk/duplex-simmt-en-de --nop-bias 0.0

Streaming Evaluation Results (111.9M params, OpenSubtitles + MuST-C)

Benchmarknop_biassacreBLEUchrFAL (words)LAAL (words)Length ratio
OpenSubtitles test (24 unseen movies)-0.7525.1559.931.552.471.085
OpenSubtitles test (24 unseen movies)0.0026.6959.922.112.851.034
MuST-C (TED) test-0.7524.5767.592.163.381.075
MuST-C (TED) test0.0025.6366.004.655.451.007