Join the conversation

Join the community of Machine Learners and AI enthusiasts.

Sign Up
BitKnight 
posted an update 2 days ago
Post
105
DuplexJev: a System One model for speech 🎧

Jev made "System One" decision models the hot idea of the season: state in, typed probabilistic decisions out, many questions in one pass. Text has Kev, Openjev and Jeva; video has VideoJev. Voice agents need it most, yet a text decision model only sees a transcript, and the transcript is where tone disappears.

DuplexJev takes raw audio as its state. A frozen ASR encoder feeds a frozen LLM through a small connector; every question is a choice question read as one token, nothing decoded.

⚡ Fast: 10 decisions in 92 ms on one H200 (transcribe + LLM: 1,978 ms), ~170 decisions/s per GPU, under $0.50 per million decisions (4B). A new decision is one line of text.

🏆 Hears what the transcript drops: #1 in paralinguistic understanding. LISTEN (EACL 2026) + StressTest + MSPB, 1,035 questions, none from our training corpora, same for every model:
DuplexJev-32B-Para v1.3: 50.2
Gemini 3.8 Flash: 47.8
Qwen3-Omni-30B: 45.0
Gemini 3.1 Pro: 41.0
GPT-audio-1.5: 40.9
Gemini 3.8 Live: 40.0
GPT-realtime-2.1: 35.6
Prosody (MSPB): 77.3 vs 71.9 next best. (Split suggested by @dipankarsarkar , thank you!)

How it learned to listen: speech LLMs trained by transcript distillation imitate a teacher that never heard a voice (gender ~55%, emotion ~28%). Training the answer token on the correct answer instead takes both to ~90%.

Paper: Batched Speech Decisions Without Decoding: Single-Token Supervision Lets a Frozen LLM Hear Beyond the Transcript (2610.02638)
Models: adventists-ai/duplexjev-6acc69e95e4fc69acd09adaf
Demo: BitKnight/DuplexJev
Code + every model's raw answers: https://github.com/adventists-ai/duplexjev

(Independent project by Adventists AI, Zhejiang University and University of Virginia; not affiliated with TypeSafe.)

Have you tested whether the decision and confidence stay stable when you shuffle the answer options? I would reuse the same audio clips and map the option letters back to their labels, then report label flips and confidence shifts. That would help check how much the readout depends on option position.

·

Good idea, so we just ran it: the answers don't depend on option position. Same clips, options shuffled, letters mapped back to labels (DuplexJev-32B-Para v1.3, one order per request, no averaging):

  • 29 clips; 4-way emotion and 4-way turn state with 15 distinct option orders each, gender with both orders.
  • 98.5% of answers are identical across all orders (emotion 686/696, turn 685/696, gender 58/58).
  • When the model is confident (≥ 0.8), zero flips, and the winning label's probability barely moves (median change 0.01 for emotion, 0.04 for turn).
  • The few flips all come from 2 genuinely ambiguous clips per question, where the model was only 0.55–0.67 sure to begin with.

For benchmarks we still average over a few orders, which settles even those borderline clips (29/29 match) at almost no cost, since the orders share the audio prefix. We'll run the same check on the full benchmark set and add it to the repo. Thanks for the suggestion!

Your score.py reproduces the 1,128-item row exactly: 50.9, 46.9, 44.6.

The lead over Gemini 3.8 Flash is the thin one, and your own caveat explains most of it.
93 of those items are LISTEN-NT clips from ESD and CREMA-D, which the README says are in DuplexJev's training data.
On those 93: 54 right vs Flash's 34.
On the other 1,035: 50.2 vs 47.8. A 2.4 pp lead, paired bootstrap 95% interval -0.6 to 5.4.

Over Qwen3-Omni it holds without them: 5.2 pp, 2.2 to 8.2.

One corpus pulls the other way. MELD, 52 items: 38.5 vs 57.7 for Flash and 59.6 for Qwen3-Omni.

Clips from a corpus the model trained on still test something. Is it the thing you want 50.9 to stand on, or would you headline the 1,035?

·

This is a fantastic review, thank you! You reproduced the whole pipeline from our scripts and then went further than we did. That's exactly why we published every model's raw answers, and it's great to see someone put them to work.

You're right that the headline should stand on clips we never trained on, so we're adopting your split as the main number. On those 1,035 items, DuplexJev still comes out on top:

  • DuplexJev-32B-Para v1.3: 50.2
  • Gemini 3.8 Flash: 47.8
  • Qwen3-Omni-30B: 45.0

Your split also shows how broad the lead is. Of the 11 corpora in the 1,035, DuplexJev is first (or tied first) on 8, with big margins where only the voice carries the answer:

  • TESS (emotion with neutral words): 38.3 vs 17.0 Flash / 25.5 Qwen
  • MSPB (prosody): 77.3 vs 67.2 / 71.9
  • IEMOCAP non-verbal (laughs, sighs, breaths): 27.1 vs 21.1 / 21.1

And as your bootstrap shows, the 5.2-point lead over Qwen3-Omni holds firmly (95% CI 2.2 to 8.2).

MELD is a great catch. It's TV dialogue where the words themselves carry most of the emotion, the one setting where models that read the words have the edge. We're adding conversational dialogue emotion data in our next training round and will report MELD separately so everyone can follow the progress.

We'll update the README and scripts to report the 1,035 split as the headline, with the trained-corpus items listed separately. Thanks again, reviews like this make the work better!

Your corpus numbers reproduce from the answer files, and they hide a pattern in the labels.

Across all 200 LISTEN neutral-text clips, 84 have a gold label outside anger, happiness, neutral, sadness (fear, disgust, surprise, calm).
DuplexJev gets 3 of those 84. Flash gets 23, Qwen3-Omni 21, GPT-audio 20, Live 13.
On the other 116 it gets 83, against 39 for Flash and 46 for Qwen3-Omni.

Same split on the unseen three (TESS, RAVDESS, SAVEE): 29/54 on those four labels, 3/53 on the rest.
Fear is 1 of 35 across the four corpora that have it, including 0 of 11 on CREMA-D, which is in training.
On ESD, also in training, none of the 14 surprise clips comes back surprise (9 happy, 5 angry).
Yet on RAVDESS it answers surprise 14 times, and none of those 46 clips is surprise.

So the neutral-text lead looks like a four-label model that is very good at those four.
It is also why TESS flatters it: Flash answers "neutral" on 41 of 47.

Small one for the README: the IEMOCAP 27.1 pools 51 LISTEN-EM clips with the 200 PARA ones.
PARA alone is 26.0 vs 19.5 / 18.0, with GPT-audio-1.5 close at 25.0.
On the 51 EM clips, Qwen3-Omni (33.3) and GPT-audio (41.2) both lead.

Does the emotion data in your training mix stop at those four labels, or are fear and disgust in there and getting lost at readout?

·

You're right again, and thank you! Two reviews in, you've made our benchmark reporting better than when we posted it.

To your question: v1.3's emotion supervision stops at those four labels (angry, happy, neutral, sad). Fear, disgust, surprise and calm were never answer targets, so nothing is lost at readout; the model was simply never taught them. Your split shows it cleanly:

  • On the four labels it was trained on: 83/116 (72%), vs 46 for Qwen3-Omni and 39 for Gemini 3.8 Flash.
  • Same four labels, unseen corpora only (TESS, RAVDESS, SAVEE): 29/54, vs 22 and 16.
  • On labels it never saw: 3/84. That's the gap to close.

Expanding to 10 emotion classes is scheduled for next week. When it ships, we'll report LISTEN neutral-text your way: trained labels vs. the rest.

And good catch on IEMOCAP. PARA alone is 26.0 vs 25.0 for GPT-audio-1.5, and on the 51 EM clips Qwen3-Omni and GPT-audio lead. The README reports per-condition numbers, so no pooled figure there.

One more thing to watch for this week: we're preparing to open-source sophon-realtime, our full-duplex conversational model, with DuplexJev as its ears. Would love your eyes on it too.

One wrinkle in "never answer targets". The untrained labels are reachable, and the model goes there on unfamiliar corpora.

On CREMA-D and ESD, your two training corpora, it answers outside the four 0 times in 93.
On TESS, RAVDESS and SAVEE it does it 24 times in 107, and 3 of those are right.
RAVDESS alone is 18 of 46, 14 of them "surprise" (gold: 5 happy, 4 sad, 3 disgust, 1 fear, 1 angry).

So an off-four answer already works as a cheap out-of-distribution flag, before any 10-class retrain.

When the 10-class version lands, I would report that count too: off-vocabulary answers on seen vs unseen corpora. If unseen-corpus guessing just moves onto the new labels, the gain is vocabulary, not hearing.

Happy to look at sophon-realtime. What will you publish for the duplex side: turn-taking latency, barge-in, or both?