Qwen has released Qwen3.8-LiveTranslate, its next-generation real-time simultaneous interpretation model. It listens to live speech, with optional video frames, and returns translated text and speech while the speaker is still talking. The core change is a new Interleave architecture. Qwen reports gains in faithfulness, fluency, and conciseness, with average lagging (LAAL) dropping from 2.8 seconds to 2.3 seconds. The release also adds real-time speaker diarization, synchronized bilingual display, and long-context disambiguation.
Deployable? Yes, as a hosted API. It is live on Alibaba Cloud Model Studio and QwenCloud as qwen3.8-livetranslate-flash-realtime over WebSocket.
What Changed Under the Hood
Simultaneous interpretation is a tradeoff. Waiting longer gives the model more context. Speaking sooner cuts delay for the listener. Qwen3.8-LiveTranslate rebuilds this loop with an Interleave architecture.
The latency metric here is LAAL, or Length-Adaptive Average Lagging. It measures how far the translation trails the source speech on average. It also avoids rewarding systems that over-generate output. A drop from 2.8 seconds to 2.3 seconds is roughly an 18% cut in average lag.
QwenCloud team describes the model as the real-time version of Qwen3.8-LiveTranslate-Flash. It builds on the Qwen-Omni stack, large-scale multimodal data, cross-language and cross-modal alignment, and visual enhancement. The Flash model also supports offline audio and video translation.
Three New Capabilities
- Real-time speaker diarization: The model distinguishes speakers in multi-party speech. It also preserves each speaker’s voice through more stable voice cloning. The API exposes cloning modes, including an
alwaysmode that re-clones before each response for multi-speaker sessions. - Synchronized bilingual display: Source text and translation appear on screen together. In the API, source transcription streams as its own events next to the translation stream.
- Long-context disambiguation: The model uses conversation history to resolve names and terminology. A name introduced early in a meeting stays consistent later in the translation.
Try the explainer below. It walks through the interleaved stream, speaker tagging, context disambiguation, language coverage, and session cost.
‘;
$(‘#feed’).appendChild(r);resize();requestAnimationFrame(function(){r.classList.add(‘show’)});
typeInto(r.querySelector(‘.src’),m[3],70);
later(function(){typeInto(r.querySelector(‘.dst’),m[4],22,resize)},500);
},t);t+=m[3].length*70+900});
});
/* context */
function setCtx(on){var s=$(‘#ctxSw’);s.setAttribute(‘aria-checked’,on?’true’:’false’);
$(‘#ctxLbl’).textContent=”Conversation history: “+(on?’on’:’off’);$(‘#hist’).classList.toggle(‘dim’,!on);
$(‘#esOut’).innerHTML=on?'”Jordan presentará el presupuesto mañana.”‘:'”Jordania presentará el presupuesto mañana.”‘;
$(‘#verdict’).textContent=on?’With history, “Jordan” is kept as the CFO\’s name.’:’Without history, the name can be translated as the country.’;}
function toggleSw(el,fn){el.addEventListener(‘click’,function(){fn(el.getAttribute(‘aria-checked’)!==’true’)});el.addEventListener(‘keydown’,function(e){if(e.key===’ ‘||e.key===’Enter’){e.preventDefault();fn(el.getAttribute(‘aria-checked’)!==’true’)}})}
toggleSw($(‘#ctxSw’),setCtx);setCtx(false);
/* languages */
var sp=’Chinese,English,Arabic,German,French,Spanish,Portuguese,Indonesian,Italian,Korean,Russian,Thai,Vietnamese,Japanese,Turkish,Hindi,Malay,Dutch,Urdu,Norwegian Bokm\u00e5l,Swedish,Danish,Hebrew,Finnish,Polish,Icelandic,Czech,Filipino,Persian’.split(‘,’);
var tx=’Cantonese,Greek,Afrikaans,Asturian,Belarusian,Bulgarian,Bengali,Bosnian,Catalan,Cebuano,Estonian,Galician,Gujarati,Croatian,Hungarian,Javanese,Kazakh,Kannada,Kyrgyz,Latvian,Macedonian,Malayalam,Marathi,Punjabi,Romanian,Slovak,Slovenian,Swahili,Tajik,Azerbaijani,Ukrainian’.split(‘,’);
var box=$(‘#chips’);
sp.forEach(function(n){var c=document.createElement(‘span’);c.className=”chip sp”;c.textContent=n;box.appendChild(c)});
tx.forEach(function(n){var c=document.createElement(‘span’);c.className=”chip tx”;c.textContent=n;box.appendChild(c)});
function countTo(n){var el=$(‘#lcount’),cur=parseInt(el.firstChild.textContent,10),st=cur;var k=0;(function f(){k++;var v=Math.round(st+(n-st)*k/12);el.firstChild.textContent=v;if(k
Credit: Source link




























