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

# Speech To Speech (STS)

Speech-to-Speech (STS), also known as **Realtime** in the SDK, is a single provider that handles listening, reasoning, and speaking over one connection. Realtime models include built-in [STT](/ai-technologies/speech-to-text), [TTS](/ai-technologies/text-to-speech), and [turn detection](/ai-technologies/turn-detection) — you configure `llm=<provider>.Realtime()` without separate speech plugins.

```mermaid theme={null}
flowchart TB
    Participants[Call participants] --> Edge[Edge transport]
    Edge --> Agent[Agent RealtimeInferenceFlow]
    Agent --> Realtime[Realtime API]
    Realtime --> Agent
    Agent --> Edge
    Edge --> Participants
```

You still need `edge`, `agent_user`, `instructions`, API keys, and call lifecycle setup. See [Voice Agents](/introduction/voice-agents) for the full guide.

## How It Works

When the LLM is a Realtime model, the Agent selects `RealtimeInferenceFlow`:

* Call audio is sent to the Realtime API
* Model audio and transcripts are published back to the call
* STT, TTS, and turn detection plugins are automatically disabled

## Quick Start

```python theme={null}
from vision_agents.core import Agent, User
from vision_agents.plugins import gemini, getstream

agent = Agent(
    edge=getstream.Edge(),
    agent_user=User(name="Assistant", id="agent"),
    instructions="You are a helpful voice assistant.",
    llm=gemini.Realtime(),  # no stt/tts/turn_detection needed
)
```

## Realtime vs Custom Pipeline

| Mode                | Best for                     | You choose                         |
| ------------------- | ---------------------------- | ---------------------------------- |
| **Realtime**        | Fastest path, lowest latency | One provider for speech in and out |
| **Custom Pipeline** | Full control over each stage | STT, LLM, and TTS independently    |

Use a [custom pipeline](/introduction/voice-agents#custom-pipeline-mode) when you want to mix providers — for example Deepgram STT, Gemini LLM, and Inworld TTS.

## Providers

| Provider    | Integration page                                  |
| ----------- | ------------------------------------------------- |
| OpenAI      | [OpenAI Realtime](/integrations/realtime/openai)  |
| Gemini      | [Gemini Live](/integrations/realtime/gemini)      |
| Qwen        | [Qwen OMNI](/integrations/realtime/qwen)          |
| AWS Bedrock | [AWS Bedrock](/integrations/realtime/aws-bedrock) |
| xAI         | [xAI](/integrations/realtime/xai)                 |
| Inworld     | [Inworld](/integrations/realtime/inworld)         |

## Next Steps

<CardGroup cols={2}>
  <Card title="Voice Agents" icon="microphone" href="/introduction/voice-agents">
    Realtime setup and provider swapping
  </Card>

  <Card title="Interruption Handling" icon="hand" href="/guides/interruption-handling">
    Barge-in and turn timing
  </Card>

  <Card title="Function Calling" icon="wrench" href="/guides/mcp-tool-calling">
    Tools with realtime models
  </Card>

  <Card title="Custom Pipeline" icon="sliders" href="/introduction/voice-agents#custom-pipeline-mode">
    Mix STT, LLM, and TTS providers
  </Card>
</CardGroup>
