> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://developers.deepgram.com/docs/flux/configuration/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developers.deepgram.com/_mcp/server. # End-of-Turn Detection Parameters Flux provides configurable parameters that control end-of-turn detection and language biasing, allowing you to optimize your voice agent's conversational flow for your specific use case. ## Overview Flux's behavior is controlled by the following key parameters: | Parameter | Range | Default | Required | Description | | --------------------- | ------------------------ | ------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `eot_threshold` | `0.5` - `1.0` | `0.7` | No | Confidence threshold for triggering `EndOfTurn` events. Set to `1.0` to suppress natural end-of-turn and drive turns with [`ForceEndTurn`](/docs/flux/force-end-turn). | | `eager_eot_threshold` | `0.3` - `0.9` | *None* | For eager mode | Confidence threshold for triggering `EagerEndOfTurn` events | | `eot_timeout_ms` | `500` - `60000` | `5000` | No | Maximum silence duration (ms) before forcing `EndOfTurn` | | `language_hint` | Supported language codes | *None* | No | Bias `flux-general-multi` toward specific languages. See [Language Prompting](/docs/flux/language-prompting). | ## Parameter Details ### `eot_threshold` Confidence threshold required to trigger an `EndOfTurn` event, signaling that the user has finished speaking. **Valid Values:** `0.5` to `1.0` **Default:** `0.7` **Type:** Float (passed as string in URL or SDK) **Behavior:** * **Higher values** (e.g., `0.8` - `0.9`) = Higher certainty required before ending a turn, fewer false positives, slightly increased latency * **Lower values** (e.g., `0.5` - `0.7`) = Lower certainty required before ending a turn, faster responses, more false positives * **`1.0`** = Fully suppresses natural `EndOfTurn` detection. You take ownership of turn endings with [`ForceEndTurn`](/docs/flux/force-end-turn); the `eot_timeout_ms` backstop still applies. See [Bring Your Own Turn Detection](/docs/flux/own-turn-detection). **Example:** ```bash wss://api.deepgram.com/v2/listen?model=flux-general-en&eot_threshold=0.8 ``` --- ### `eager_eot_threshold` Confidence threshold for triggering `EagerEndOfTurn` events, enabling early LLM response generation. **Valid Values:** `0.3` to `0.9` **Default:** *Not set* (eager mode disabled) **Type:** Float (passed as string in URL or SDK) **Behavior:** * **When set**: Enables `EagerEndOfTurn` and `TurnResumed` events * **Lower values** (e.g., `0.3` - `0.5`) = Earlier triggers, lower latency, more false starts * **Higher values** (e.g., `0.6` - `0.8`) = More conservative, fewer cancellations, less latency benefit **Trade-offs:** * ✅ Reduces E2E agent latency * ❌ Increases LLM calls * ❌ Requires handling `EagerEndOfTurn` speculative generation and `TurnResumed` cancellations **Example:** ```bash wss://api.deepgram.com/v2/listen?model=flux-general-en&eager_eot_threshold=0.6&eot_threshold=0.8 ``` > **Info** > > **Important**: The transcript in `EagerEndOfTurn` will **exactly match** the transcript in the subsequent `EndOfTurn` event (if no `TurnResumed` occurs). This guarantees consistency for caching strategies. --- ### `eot_timeout_ms` Maximum silence duration before forcing an `EndOfTurn`, regardless of confidence. **Valid Values:** `500` to `60000` (milliseconds) **Default:** `5000` (5 seconds) **Type:** Integer (passed as string in URL or SDK) **Behavior:** * Forces `EndOfTurn` after specified silence duration, even if confidence is below `eot_threshold` * Timer resets when new speech is detected * **Increase** (e.g., `7000` - `10000`) for users with frequent pauses * **Decrease** (e.g., `3000` - `4000`) for rapid-response environments **Example:** ```bash wss://api.deepgram.com/v2/listen?model=flux-general-en&encoding=linear16&sample_rate=16000&eot_timeout_ms=7000 ``` ## Parameter Interactions ### Validation Rules * `eager_eot_threshold` must be **less than or equal to** `eot_threshold` (if both are set) * Setting `eager_eot_threshold > eot_threshold` will result in an error * All parameters are optional, but their values must be within valid ranges if specified ## Common Configurations ### Simple Mode (Default) **`Python`** ```python Python async with client.listen.v2.connect( model="flux-general-en", eot_threshold="0.7" # Default value ) as connection: pass ``` **`Java`** ```java Java import com.deepgram.api.DeepgramClient; import com.deepgram.api.resources.listen.resources.v2.resources.v2websocket.V2WebSocketClient; DeepgramClient client = DeepgramClient.builder().build(); V2WebSocketClient wsClient = client.listen().v2().v2WebSocket(); wsClient.connect(V2WebSocketOptions.builder() .model("flux-general-en") .eotThreshold("0.7") // Default value .build()) .get(10, TimeUnit.SECONDS); ``` **Best for:** Basic conversational agents, demos, getting started --- ### Low-Latency Mode **`Python`** ```python Python async with client.listen.v2.connect( model="flux-general-en", eager_eot_threshold="0.4", eot_threshold="0.7", eot_timeout_ms="6000" ) as connection: pass ``` **`Java`** ```java Java V2WebSocketClient wsClient = client.listen().v2().v2WebSocket(); wsClient.connect(V2WebSocketOptions.builder() .model("flux-general-en") .eagerEotThreshold("0.4") .eotThreshold("0.7") .eotTimeoutMs("6000") .build()) .get(10, TimeUnit.SECONDS); ``` **Best for:** High-volume customer service, fast-paced Q\&A, responsiveness over accuracy --- ### High-Reliability Mode **`Python`** ```python Python async with client.listen.v2.connect( model="flux-general-en", eot_threshold="0.85", eot_timeout_ms="8000" ) as connection: pass ``` **`Java`** ```java Java V2WebSocketClient wsClient = client.listen().v2().v2WebSocket(); wsClient.connect(V2WebSocketOptions.builder() .model("flux-general-en") .eotThreshold("0.85") .eotTimeoutMs("8000") .build()) .get(10, TimeUnit.SECONDS); ``` **Best for:** Medical/legal transcription, critical documentation, formal settings --- ### Complex Pipeline Mode **`Python`** ```python Python async with client.listen.v2.connect( model="flux-general-en", eager_eot_threshold="0.4", eot_threshold="0.85", eot_timeout_ms="7000" ) as connection: pass ``` **`Java`** ```java Java V2WebSocketClient wsClient = client.listen().v2().v2WebSocket(); wsClient.connect(V2WebSocketOptions.builder() .model("flux-general-en") .eagerEotThreshold("0.4") .eotThreshold("0.85") .eotTimeoutMs("7000") .build()) .get(10, TimeUnit.SECONDS); ``` **Best for:** RAG systems, tool-calling agents, multi-step reasoning workflows --- ### Multilingual Mode **`Python`** ```python Python async with client.listen.v2.connect( model="flux-general-multi", encoding="linear16", sample_rate=16000, eot_threshold="0.7", request_options={ "additional_query_parameters": { "language_hint": ["en", "es"], } }, ) as connection: pass ``` **`JavaScript`** ```typescript JavaScript const connection = await client.listen.v2.connect({ model: "flux-general-multi", encoding: "linear16", sample_rate: 16000, eot_threshold: "0.7", Authorization: `Token ${process.env.DEEPGRAM_API_KEY}`, queryParams: { language_hint: ["en", "es"] }, }); connection.connect(); await connection.waitForOpen(); ``` **`Java`** ```java Java import com.deepgram.DeepgramClient; import com.deepgram.resources.listen.v2.types.ListenV2Configure; import com.deepgram.resources.listen.v2.websocket.V2ConnectOptions; import com.deepgram.resources.listen.v2.websocket.V2WebSocketClient; import com.deepgram.types.ListenV2Encoding; import com.deepgram.types.ListenV2EotThreshold; import com.deepgram.types.ListenV2Model; import com.deepgram.types.ListenV2SampleRate; import java.util.List; import java.util.concurrent.TimeUnit; DeepgramClient client = DeepgramClient.builder().build(); V2ConnectOptions options = V2ConnectOptions.builder() .model(ListenV2Model.FLUX_GENERAL_MULTI) .encoding(ListenV2Encoding.LINEAR16) .sampleRate(ListenV2SampleRate.of(16000)) .eotThreshold(ListenV2EotThreshold.of("0.7")) .build(); V2WebSocketClient wsClient = client.listen().v2().v2WebSocket(); wsClient.connect(options).get(10, TimeUnit.SECONDS); // Set language hints for the session. wsClient.sendConfigure( ListenV2Configure.builder() .languageHints(List.of("en", "es")) .build() ).get(5, TimeUnit.SECONDS); ``` **`Direct WebSocket`** ```text Direct WebSocket wss://api.deepgram.com/v2/listen?model=flux-general-multi&language_hint=en&language_hint=es&eot_threshold=0.7&encoding=linear16&sample_rate=16000 ``` **Best for:** Multilingual call centers, global voice agents, code-switching scenarios See the [Language Prompting guide](/docs/flux/language-prompting) for full details on language hint usage. ## Related Resources * [Getting Started with Flux](/docs/flux/quickstart) - Quickstart guide with basic configuration * [Configure Control Message](/docs/flux/configure) - Update configuration mid-stream without reconnecting * [Flux State Machine](/docs/flux/state) - Understanding turn events and state transitions * [Eager End-of-Turn Optimization](/docs/flux/voice-agent-eager-eot) - Deep dive on eager mode implementation * [Build a Voice Agent](/docs/flux/agent) - Complete voice agent implementation guide * [Migrating from Nova-3](/docs/flux/nova-3-migration) - Migration guide with configuration examples > Configure Flux's end-of-turn detection behavior with eot_threshold, eager_eot_threshold, and eot_timeout_ms.