> ## Documentation Index
> Fetch the complete documentation index at: https://docs.zeroruntime.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Turn Detector

> Use the unified Turn Detector plugin with the server-hosted Echo model to decide when the caller has finished speaking, in Python and JavaScript.

export const InferenceModels = ({data, page}) => {
  const g = data.find(x => x.href === `/runtime-sdk/plugins/${page}#inference-models`);
  if (!g) return <p>No models from this provider are available through inference yet.</p>;
  return <table>
      <thead>
        <tr><th>Model</th><th>Name</th></tr>
      </thead>
      <tbody>
        {g.models.map(m => <tr key={m.id}><td><code>{m.id}</code></td><td>{m.name}</td></tr>)}
      </tbody>
    </table>;
};

export const INFERENCE = [{
  "type": "stt",
  "provider": "AssemblyAI",
  "href": "/runtime-sdk/plugins/stt/assemblyai#inference-models",
  "models": [{
    "id": "universal-streaming-english",
    "name": "Universal Streaming English"
  }, {
    "id": "universal-streaming-multilingual",
    "name": "Universal Streaming Multilingual"
  }]
}, {
  "type": "stt",
  "provider": "Deepgram",
  "href": "/runtime-sdk/plugins/stt/deepgram#inference-models",
  "models": [{
    "id": "flux-general-en",
    "name": "Flux General En"
  }, {
    "id": "nova-2",
    "name": "Nova 2"
  }, {
    "id": "nova-3",
    "name": "Nova 3"
  }, {
    "id": "nova-3-general",
    "name": "Nova 3 General"
  }]
}, {
  "type": "stt",
  "provider": "Google",
  "href": "/runtime-sdk/plugins/stt/google#inference-models",
  "models": [{
    "id": "chirp_2",
    "name": "Google Stt Chirp 2"
  }, {
    "id": "chirp_3",
    "name": "Chirp 3"
  }, {
    "id": "latest_long",
    "name": "Google Stt Latest Long"
  }]
}, {
  "type": "stt",
  "provider": "OpenAI",
  "href": "/runtime-sdk/plugins/stt/openai#inference-models",
  "models": [{
    "id": "gpt-4o-mini-transcribe",
    "name": "Gpt 4o Mini Transcribe"
  }, {
    "id": "gpt-4o-transcribe",
    "name": "Gpt 4o Transcribe"
  }, {
    "id": "gpt-live-transcribe",
    "name": "GPT Live Transcribe"
  }, {
    "id": "gpt-realtime-whisper",
    "name": "GPT Realtime Whisper"
  }, {
    "id": "gpt-transcribe",
    "name": "GPT Transcribe"
  }]
}, {
  "type": "stt",
  "provider": "SarvamAI",
  "href": "/runtime-sdk/plugins/stt/sarvamai#inference-models",
  "models": [{
    "id": "saaras:v3",
    "name": "Saaras V3"
  }, {
    "id": "saaras:v4",
    "name": "Saaras V4"
  }, {
    "id": "saarika:v2.5",
    "name": "Saarika v2.5"
  }]
}, {
  "type": "llm",
  "provider": "Anthropic",
  "href": "/runtime-sdk/plugins/llm/anthropic#inference-models",
  "models": [{
    "id": "claude-haiku-4-5",
    "name": "Claude Haiku 4 5"
  }, {
    "id": "claude-haiku-5-5",
    "name": "Claude Haiku 5.5"
  }, {
    "id": "claude-sonnet-5-5",
    "name": "Claude Sonnet 5.5"
  }]
}, {
  "type": "llm",
  "provider": "Google",
  "href": "/runtime-sdk/plugins/llm/google#inference-models",
  "models": [{
    "id": "gemini-2.5-flash",
    "name": "Gemini 2.5 Flash"
  }, {
    "id": "gemini-2.5-flash-lite",
    "name": "Gemini 2.5 Flash Lite"
  }, {
    "id": "gemini-3-flash-preview",
    "name": "Gemini 3 Flash Preview"
  }, {
    "id": "gemini-3.1-flash-lite",
    "name": "Gemini 3.1 Flash Lite"
  }, {
    "id": "gemini-3.1-flash-lite-preview",
    "name": "Gemini 3.1 Flash Lite (Preview — recommended Flash Lite tier)"
  }, {
    "id": "gemini-3.1-pro-preview",
    "name": "Gemini 3.1 Pro Preview"
  }, {
    "id": "gemini-3.5-flash",
    "name": "Gemini 3.5 Flash"
  }, {
    "id": "gemini-3.5-flash-lite",
    "name": "Gemini 3.5 Flash Lite"
  }, {
    "id": "gemini-3.6-flash",
    "name": "Gemini 3.6 Flash"
  }, {
    "id": "gemini-3.7-flash",
    "name": "Gemini 3.7 Flash"
  }, {
    "id": "gemini-3.8-flash",
    "name": "Gemini 3.8 Flash"
  }]
}, {
  "type": "llm",
  "provider": "OpenAI",
  "href": "/runtime-sdk/plugins/llm/openai#inference-models",
  "models": [{
    "id": "gpt-4o",
    "name": "GPT-4o"
  }, {
    "id": "gpt-5-mini",
    "name": "Gpt 5 Mini"
  }, {
    "id": "gpt-5-mini-2025-08-07",
    "name": "Gpt 5 Mini 2025 08 07"
  }, {
    "id": "gpt-5-nano",
    "name": "Gpt 5 Nano"
  }, {
    "id": "gpt-5.1-2025-11-13",
    "name": "Gpt 5.1 2025 11 13"
  }, {
    "id": "gpt-5.4",
    "name": "GPT-5.4"
  }, {
    "id": "gpt-5.4-mini",
    "name": "GPT-5.4 Mini"
  }, {
    "id": "gpt-5.4-nano",
    "name": "GPT-5.4 Nano"
  }, {
    "id": "gpt-5.5",
    "name": "GPT-5.5"
  }, {
    "id": "gpt-5.6-luna",
    "name": "GPT-5.6 Luna"
  }, {
    "id": "gpt-5.6-terra",
    "name": "GPT-5.6 Terra"
  }, {
    "id": "gpt-6-luna",
    "name": "GPT-6 Luna"
  }]
}, {
  "type": "llm",
  "provider": "SarvamAI",
  "href": "/runtime-sdk/plugins/llm/sarvamai#inference-models",
  "models": [{
    "id": "sarvam-105b",
    "name": "Sarvam 105b"
  }, {
    "id": "sarvam-30b",
    "name": "Sarvam 30B"
  }]
}, {
  "type": "tts",
  "provider": "Cartesia",
  "href": "/runtime-sdk/plugins/tts/cartesia#inference-models",
  "models": [{
    "id": "sonic-2",
    "name": "Sonic V2"
  }, {
    "id": "sonic-3",
    "name": "Sonic 3"
  }, {
    "id": "sonic-3.5",
    "name": "Sonic 3.5"
  }, {
    "id": "sonic-3.6",
    "name": "Sonic 3.6"
  }]
}, {
  "type": "tts",
  "provider": "Deepgram",
  "href": "/runtime-sdk/plugins/tts/deepgram#inference-models",
  "models": [{
    "id": "aura-2",
    "name": "Aura 2"
  }]
}, {
  "type": "tts",
  "provider": "Google",
  "href": "/runtime-sdk/plugins/tts/google#inference-models",
  "models": [{
    "id": "Chirp3-HD",
    "name": "Google Tts Chirp 3"
  }, {
    "id": "gemini-2.5-flash-preview-tts",
    "name": "Gemini 2.5 Flash Preview TTS"
  }, {
    "id": "gemini-2.5-pro-preview-tts",
    "name": "Gemini 2.5 Pro Preview TTS"
  }, {
    "id": "gemini-3.1-flash-tts-preview",
    "name": "Gemini 3.1 Flash TTS Preview"
  }]
}, {
  "type": "tts",
  "provider": "OpenAI",
  "href": "/runtime-sdk/plugins/tts/openai#inference-models",
  "models": [{
    "id": "gpt-4o-mini-tts",
    "name": "GPT-4o Mini TTS"
  }, {
    "id": "tts-1",
    "name": "TTS 1"
  }]
}, {
  "type": "tts",
  "provider": "SarvamAI",
  "href": "/runtime-sdk/plugins/tts/sarvamai#inference-models",
  "models": [{
    "id": "bulbul:v2",
    "name": "Bulbul V2"
  }, {
    "id": "bulbul:v3",
    "name": "Bulbul V3"
  }]
}, {
  "type": "realtime",
  "provider": "Google",
  "href": "/runtime-sdk/plugins/realtime/gemini#inference-models",
  "models": [{
    "id": "gemini-2.5-flash-native-audio-preview-12-2025",
    "name": "Gemini Live 2.5 Flash Native Audio"
  }, {
    "id": "gemini-3.1-flash-live-preview",
    "name": "Gemini 3.1 Flash Live Preview"
  }, {
    "id": "gemini-3.8-live",
    "name": "Gemini 3.8 Live"
  }]
}, {
  "type": "realtime",
  "provider": "OpenAI",
  "href": "/runtime-sdk/plugins/realtime/openai#inference-models",
  "models": [{
    "id": "gpt-realtime",
    "name": "Gpt Realtime"
  }, {
    "id": "gpt-realtime-1.5",
    "name": "GPT Realtime 1.5"
  }, {
    "id": "gpt-realtime-2",
    "name": "GPT Realtime 2"
  }, {
    "id": "gpt-realtime-2.1",
    "name": "GPT Realtime 2.1"
  }, {
    "id": "gpt-realtime-2.1-mini",
    "name": "GPT Realtime 2.1 Mini"
  }, {
    "id": "gpt-realtime-mini",
    "name": "GPT Realtime Mini"
  }]
}, {
  "type": "duplex",
  "provider": "OpenAI",
  "href": "/runtime-sdk/plugins/duplex/gpt-live#inference-models",
  "models": [{
    "id": "gpt-live-1",
    "name": "GPT Live 1"
  }]
}, {
  "type": "denoise",
  "provider": "AiCoustics",
  "href": "/runtime-sdk/plugins/denoise/aicoustics#inference-models",
  "models": [{
    "id": "quail-l-16khz",
    "name": "Quail-L"
  }, {
    "id": "quail-l-8khz",
    "name": "QuailL-8Khz"
  }, {
    "id": "quail-s-16khz",
    "name": "Quail-S"
  }, {
    "id": "quail-s-8khz",
    "name": "QuailS-8Khz"
  }, {
    "id": "quail-vf-2.1-l-16khz",
    "name": "QuailVF-L"
  }, {
    "id": "quail-vf-2.1-s-16khz",
    "name": "QuailS-VF-16Khz"
  }, {
    "id": "quail-vf-2.2-l-16khz",
    "name": "Quail VF 2.2 Large"
  }, {
    "id": "quail-vf-2.2-s-16khz",
    "name": "Quail VF 2.2 Small"
  }, {
    "id": "rook-l-48khz",
    "name": "Rook Large"
  }, {
    "id": "rook-l-8khz",
    "name": "RookL-8Khz"
  }, {
    "id": "rook-s-48khz",
    "name": "Rook Small"
  }, {
    "id": "rook-s-8khz",
    "name": "RookS-8Khz"
  }]
}, {
  "type": "denoise",
  "provider": "Sanas",
  "href": "/runtime-sdk/plugins/denoise/sanas#inference-models",
  "models": [{
    "id": "SE2.1",
    "name": "SE2.1"
  }, {
    "id": "VI_G_NC3.0",
    "name": "VI_G_NC3.0"
  }]
}, {
  "type": "turn",
  "provider": "Zero Runtime",
  "href": "/runtime-sdk/plugins/turn-detection#inference-models",
  "models": [{
    "id": "echo-large",
    "name": "Echo Large"
  }, {
    "id": "echo-omni",
    "name": "Echo Omni"
  }, {
    "id": "echo-small",
    "name": "Echo Small"
  }]
}];

The **Turn Detector** decides when the caller has finished their turn, so the agent replies
at the right moment rather than interrupting or pausing too long. It uses **Echo**, a
server-hosted model exposed through the Zero Runtime Inference Gateway via the unified
`TurnDetector` class. Nothing is downloaded or loaded on your machine; authentication requires
`ZERORUNTIME_AUTH_TOKEN`. Choose `echo-small` for the lowest latency or `echo-large` for higher
accuracy.

## Usage

Set your auth token, then construct `TurnDetector` with the `echo-small` or `echo-large`
model and pass it to the pipeline's `turn_detector` slot.

<CodeGroup>
  ```python Python theme={null}
  # Set ZERORUNTIME_AUTH_TOKEN in your environment.

  from zeroruntime.inference import TurnDetector

  turn_detector = TurnDetector(model="echo-small")

  # Pipeline(turn_detector=turn_detector, ...)
  ```

  ```typescript Node JS theme={null}
  // Set ZERORUNTIME_AUTH_TOKEN in your environment.

  import { TurnDetector } from '@zeroruntime/js-sdk/inference';

  const turn_detector = TurnDetector({ model: 'echo-small' });

  // Pipeline({ turn_detector, ... })
  ```
</CodeGroup>

The turn detector pairs with [voice activity detection](/runtime-sdk/plugins/vad/silero): VAD finds that
the caller is speaking, the turn detector decides when they have stopped.

## Inference models

These are the Echo models available through the [Inference Gateway](/runtime-sdk/plugins/inference/zero-runtime). Pass the id as `model` to `TurnDetector`.

<InferenceModels data={INFERENCE} page="turn-detection" />

## What's next

For the four-state classification, model comparison, supported languages, and
end-of-utterance handling, see the full
[Turn Detection guide](/runtime-sdk/build/turn-detection-and-interruptions/turn-detection).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.