
Simultaneous spoken translation over a WebSocket. Set the target language, then speak; the model replies in that language with text and audio.
Simultaneous spoken translation over a WebSocket. Set the target language, then speak; the model replies in that language with text and audio.
Session is configured with session.update events over the socket rather than request parameters. Set the target language before you send audio. glossary sets how specific terms are translated, and voice_clone speaks the translation in the speaker's own voice. Text and audio tokens bill at separate rates.
Also known as Alibaba Cloud Qwen3.8 LiveTranslate Flash Realtime
qwen3-8-livetranslate-flash-realtime/v1/realtimeqwen3.8-livetranslate-flash-realtimealibaba/qwen3-8-livetranslate-flash-realtimeLive pay-as-you-go rates from the EmpirioLabs catalog. You are billed only for what you use, with no monthly minimum.
Qwen3.8 LiveTranslate Flash Realtime is spoken translation over a WebSocket at wss://api.empiriolabs.ai/v1/realtime?model=qwen3-8-livetranslate-flash-realtime, not over the HTTP endpoints. Connect with the model id qwen3-8-livetranslate-flash-realtime and send your EmpirioLabs API key as an Authorization: Bearer header on the handshake. Set the target language with a session.update before you send audio. Audio travels both ways as base64 16-bit PCM. A browser cannot set headers on a WebSocket, so open this connection from your server and relay audio to the browser over your own socket. Get an API key from the EmpirioLabs dashboard.
import asyncio, json, os, websockets
async def main():
async with websockets.connect(
"wss://api.empiriolabs.ai/v1/realtime?model=qwen3-8-livetranslate-flash-realtime",
additional_headers=[
("Authorization", f"Bearer {os.environ['EMPIRIOLABS_API_KEY']}"),
],
max_size=None,
) as ws:
print(json.loads(await ws.recv())["type"]) # session.created
import base64
await ws.send(json.dumps({
"type": "session.update",
"session": {
"voice": "Tina",
"translation": {"language": "en"},
"modalities": ["text", "audio"],
},
}))
# 16-bit PCM microphone audio, base64 encoded, in small chunks.
for chunk in read_microphone_chunks():
await ws.send(json.dumps({
"type": "input_audio_buffer.append",
"audio": base64.b64encode(chunk).decode(),
}))
async for raw in ws:
event = json.loads(raw)
if event["type"] == "response.audio.delta":
... # base64 audio chunk, append to your playback buffer
elif event["type"] in ("response.audio_transcript.text", "response.text.text"):
print(event.get("text") or "")
elif event["type"] == "response.done":
break
asyncio.run(main())Request parameters supported by the Qwen3.8 LiveTranslate Flash Realtime API on EmpirioLabs. Defaults apply when a field is omitted.
| Parameter | Type | Default | Range / values | Description |
|---|---|---|---|---|
| voice | enum | Tina | Tina, Serena, Ethan, Cindy | Speaking voice for the translated audio. Set it with session.update before the model produces any audio. Not used while voice_clone is once or always. |
| target_language | enum | en | zh, en, ar, de, fr, es, pt, id, it, ko, ru, th, vi, ja, tr, h... | Language the model translates into. Defaults to en. These languages translate to speech and text. With text output only (modalities ["text"]), 31 more translate to... |
| modalities | string | ["text","audio"] | - | Which output types the model returns: ["text", "audio"] by default, or ["text"] for a text-only translation, which the text-only target languages need. |
| input_audio_format | enum | pcm | pcm | Encoding of the audio you append to the input buffer: base64 16-bit PCM. |
| output_audio_format | enum | pcm | pcm | Encoding of the audio the model streams back: base64 16-bit PCM. |
| voice_clone | enum | off | off, once, always | Speaks the translation in the speaker's own voice. once keeps the voice heard at the start of the session for every reply; always matches the voice again before each... |
| glossary | object | - | - | Preferred translations for specific terms, as an object of source term to translation, for example {"machine learning": "aprendizaje automático"}. Up to 1,000 terms,... |
Spoken translation over a WebSocket at wss://api.empiriolabs.ai/v1/realtime?model=qwen3-8-livetranslate-flash-realtime, authenticated with the ordinary Authorization Bearer header. Set the target language with session.update before you send audio. With modalities set to ["text"], 31 more target languages translate to text only. Add glossary to set how specific terms are translated. Use a voice this model accepts, or leave the default Tina. To speak the translation in the speaker's own voice, set voice_clone to once (the voice heard at the start of the session) or always (the voice of whoever is speaking, matched before each reply); cloning adds no charge. Audio and text tokens are priced separately, and each completed turn is billed on its own from the usage the model reports.
On EmpirioLabs, Qwen3.8 LiveTranslate Flash Realtime is billed pay as you go: Input: audio $15.00 per 1M audio input tokens; Input $1.10 per 1M prompt tokens; Output $40.00 per 1M generated tokens; Output: audio $60.00 per 1M generated audio tokens. The live rate card on this page always matches what the API charges.
Qwen3.8 LiveTranslate Flash Realtime supports a 48K-token context window with up to 4,096 output tokens per response.
Qwen3.8 LiveTranslate Flash Realtime is served through WEBSOCKET /v1/realtime on api.empiriolabs.ai with standard bearer-token authentication.
Open the EmpirioLabs playground and press Start session to try it in your browser. Qwen3.8 LiveTranslate Flash Realtime runs over a WebSocket rather than a request and response, so to build with it start from the realtime voice quickstart. Connect from your server with your EmpirioLabs API key and the model id qwen3-8-livetranslate-flash-realtime, then stream audio in both directions.
Create an EmpirioLabs account, then generate a key under API Keys in the dashboard. Billing is pay-as-you-go credits, so you only pay for the requests you make.
Check out our pricing or reach out if you want your own model deployed on our stack.