> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.empiriolabs.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.empiriolabs.ai/_mcp/server.

# Gemini 3.8 Live Extended Thinking

> Voice conversation that keeps talking while it reasons in the background, with 30 voices, live video input, tool calling, and adjustable reasoning effort.

![Gemini 3.8 Live Extended Thinking](https://media.empiriolabs.ai/model-logos/gemini.png)

[Google](/providers/google) · Audio Generation

`WEBSOCKET /v1/realtime`

Voice conversation that keeps talking while it reasons in the background, with 30 voices, live video input, tool calling, and adjustable reasoning effort.

## At a glance

| Field               | Value                                                                                             |
| ------------------- | ------------------------------------------------------------------------------------------------- |
| Model id            | `gemini-3-8-live-extended-thinking`                                                               |
| Model release date  | 2026-09-15                                                                                        |
| Input modalities    | Audio, Text, Video                                                                                |
| Output modalities   | Audio, Text                                                                                       |
| Context window      | 128K                                                                                              |
| Weight precision    | -                                                                                                 |
| Max output tokens   | 65,536                                                                                            |
| Features            | realtime, speech_to_speech, audio_in, audio_out, video, function_calling, reasoning, multilingual |
| Native inference    | No                                                                                                |
| New                 | Yes                                                                                               |
| Supported endpoints | `WEBSOCKET /v1/realtime`                                                                          |
| Alternate model ids | `gemini-3.8-live-extended-thinking`, `google/gemini-3.8-live-extended-thinking`                   |

## Pricing

| Charge        | Spec                          | Rate    |
| ------------- | ----------------------------- | ------- |
| Input: audio  | per 1M audio input tokens     | \$7.80  |
| Input         | per 1M prompt tokens          | \$2.60  |
| Output        | per 1M generated tokens       | \$11.70 |
| Output: audio | per 1M generated audio tokens | \$31.20 |

## Example request

```python
import asyncio, json, os, websockets

URL = "wss://api.empiriolabs.ai/v1/realtime?model=gemini-3-8-live-extended-thinking"

async def main():
    async with websockets.connect(
        URL,
        additional_headers=[("Authorization", f"Bearer {os.environ['EMPIRIOLABS_API_KEY']}")],
        max_size=None,
    ) as ws:
        print(json.loads(await ws.recv())["type"])  # session.created
        await ws.send(json.dumps({
            "type": "conversation.item.create",
            "item": {"type": "message", "role": "user",
                     "content": [{"type": "input_text", "text": "Say hello."}]},
        }))
        await ws.send(json.dumps({"type": "response.create"}))
        async for raw in ws:
            event = json.loads(raw)
            if event["type"] == "response.done":
                break

asyncio.run(main())
```

## Parameters

| Parameter             | Type   | Required | Default                            | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| --------------------- | ------ | -------- | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `voice`               | enum   | no       | `"Puck"`                           | Speaking voice for the session. Set it with session.update before the conversation starts; it cannot change afterwards. · Allowed: `Zephyr`, `Puck`, `Charon`, `Kore`, `Fenrir`, `Leda`, `Orus`, `Aoede`, `Callirrhoe`, `Autonoe`, `Enceladus`, `Iapetus`, `Umbriel`, `Algieba`, `Despina`, `Erinome`, `Algenib`, `Rasalgethi`, `Laomedeia`, `Achernar`, `Alnilam`, `Schedar`, `Gacrux`, `Pulcherrima`, `Achird`, `Zubenelgenubi`, `Vindemiatrix`, `Sadachbia`, `Sadaltager`, `Sulafat` |
| `instructions`        | string | no       | -                                  | System guidance for how the model behaves and speaks. Set it with session.update before the conversation starts.                                                                                                                                                                                                                                                                                                                                                                        |
| `reasoning_effort`    | enum   | no       | `"medium"`                         | How much the model reasons in the background while it talks. Higher effort uses more output tokens. Set it before the conversation starts. · Allowed: `low`, `medium`, `high`                                                                                                                                                                                                                                                                                                           |
| `temperature`         | number | no       | -                                  | Sampling temperature from 0 to 2. Lower values make replies more consistent. Set it before the conversation starts. · Range: 0 – 2                                                                                                                                                                                                                                                                                                                                                      |
| `input_audio_format`  | enum   | no       | `"pcm16"`                          | Encoding of the audio you append to the input buffer: pcm16 is base64 16-bit PCM at 16 kHz, and pcm24 is the same at 24 kHz. · Allowed: `pcm16`, `pcm24`                                                                                                                                                                                                                                                                                                                                |
| `output_audio_format` | enum   | no       | `"pcm24"`                          | Encoding of the audio the model streams back: 16-bit PCM at 24 kHz. · Allowed: `pcm24`                                                                                                                                                                                                                                                                                                                                                                                                  |
| `turn_detection`      | string | no       | `&#123;"type": "server_vad"&#125;` | Server-side voice activity detection. Decides when you have stopped speaking and the model should reply. It is on by default; set it to null to end each turn yourself with input_audio_buffer.commit.                                                                                                                                                                                                                                                                                  |

## Notes

**Connecting**

Full-duplex voice over a WebSocket at `wss://api.empiriolabs.ai/v1/realtime?model=gemini-3-8-live-extended-thinking`, authenticated with the ordinary Authorization Bearer header. Configure the session with `session.update` before you send the first audio: voice, instructions, turn detection and tools. These settings are fixed once the conversation starts.

**Sending audio and video**

* Append microphone audio as `input_audio_buffer.append` events: 16-bit PCM at 16 kHz, or at 24 kHz with `input_audio_format` set to `pcm24`.
* Append live video frames as `input_image_buffer.append` events, as base64 JPEG or PNG images.
* Voice activity detection is on by default, so keep streaming for about a second after the speech ends. Set `turn_detection` to null to end each turn yourself with `input_audio_buffer.commit`.

**Voices and language**

* Use one of the 30 voices in the `voice` list, for example Puck, Kore or Charon. Any other value is refused.
* The model replies in the language you speak.

**Replies**

* Speech streams as `response.audio.delta` events, 16-bit PCM at 24 kHz, with the words as `response.audio_transcript.delta` events. Your own speech is transcribed as well.
* Speaking while the model replies interrupts it.

**Reasoning**

* `reasoning_effort` sets how much the model reasons in the background while it talks: low, medium (the default) or high. Set it before the conversation starts.
* The model often acknowledges a question first and answers in a second turn. Each turn is billed on its own.

**Tools**

* Function calling with JSON Schema parameters. Return each result as a `function_call_output` item with its `call_id`.

**Billing**

Audio and text tokens are priced separately in both directions, video frames bill as input tokens, and reasoning tokens bill as output tokens. Each completed turn is billed on its own from the usage the model reports, including a reply you interrupt.

---

*Machine-readable schema:* `GET https://api.empiriolabs.ai/v1/models/gemini-3-8-live-extended-thinking`.