# Deployment Models

> Compare managed cloud, self-hosted, and hybrid models. See where the voice engine, control plane, and inference run, and how to choose.

Voice runs the same code everywhere. The only question is **whose
infrastructure it runs on**. Pick a deployment model based on three factors:

- Where your call audio and customer data are permitted to live.
- Whether you want to operate GPUs.
- How much of the stack you want to manage yourself.

There are three models. Most teams start on **managed cloud**. A regulated few
move media or inference into their own environment later. Your agent config,
SDK code, and dialplan do not change when you switch. Those are portable across
all three models.

## The three pieces

Before you choose, know what actually runs. Every FirstByte Voice
deployment is three planes:

  - **Control plane** — The control plane is the console at `agent.firstbyte.fast`, the
    tenant-scoped control-plane API at `engine.firstbyte.fast`, the Postgres-backed
    config database, and the columnar analytics store behind your reports. It
    holds agent configs, trunk definitions, call records, and recordings
    metadata.
  - **Voice engine** — The engine is the QUIC/HTTP-3 endpoint on `:443`, the SIP gateway/B2BUA,
    the RTP media plane, and the embedded agent runtime. **Call audio flows
    here.** PSTN trunks, browser MoQT tracks, and the WebRTC fallback leg all
    terminate here.
  - **Inference** — Inference is the speech models. This is either a self-hosted
    speech-to-speech model on your GPUs, or a hosted provider endpoint (OpenAI
    Realtime, Gemini Live, Deepgram, ElevenLabs, and others) that the runtime
    dials out to. Transcripts and generated audio are produced here.

The models below differ only in **which of these three you host** and **which
we host**.

## Choose a model

  
    We run all three planes. You bring an API key and an agent config. You
    operate no infrastructure.

    - **You host:** nothing. **We host:** the control plane, the engine, and
      (for the default runtime) inference.
    - **Media path:** call audio lands on our engine. PSTN trunks point at
      your per-tenant SIP host `<workspace-id>.sip.firstbyte.fast`. Browsers
      connect to the QUIC endpoint on `:443`.
    - **Best for:** fast shipping, variable call volume, and teams that do not
      want to operate real-time media or GPUs.

    > **NOTE:**
> There is intentionally **no sandbox environment**. Managed cloud is a
>       single production plane. Use a separate workspace for staging. Do not
>       expect a sandbox toggle. See
>       [Managed Cloud quickstart](/modalities/voice/quickstart/managed-cloud).
  

  
    You run the engine **and** the control plane inside your own network or
    cloud account. Nothing leaves your perimeter unless you point a provider
    at an external endpoint.

    - **You host:** the control plane, the engine, and (optionally) inference.
      **We provide:** the software, deploy tooling, and support.
    - **Runs as:** native systemd units on your hosts. **No Docker is
      required.** The engine takes full ownership of a NIC for its
      kernel-bypass fast path. The control-plane database and object storage
      run next to it (a self-hosted Postgres plus S3-compatible object
      storage). Your own domain serves the console.
    - **Data at rest:** tenant credentials (SIP digests, provider keys) are
      **sealed at rest** under a key that you hold. The same
      key-encryption-key protects both the control-plane fields and the
      engine's copy. A database dump therefore never exposes plaintext
      secrets. Teams take this path for HIPAA / SOC 2 obligations.
    - **Best for:** data-residency mandates, air-gapped or VPC-only networks,
      and carriers that must keep RTP on-net.

    > **WARNING:**
> The engine owns its NIC. Thus a config cutover requires a **host
>       reboot**, not a hot reload. Plan maintenance windows for this.
>       See [On-Prem quickstart](/modalities/voice/quickstart/on-prem) and
>       [Self-Hosted Deployment Issues](/modalities/voice/troubleshooting/self-hosted).
  

  
    Keep the parts that carry sensitive audio, or that you want to control, on
    your own hardware. We run the rest.

    The concrete, supported hybrid today is **managed control plane + your own
    inference**. Your agents, trunks, and reports live in the managed console.
    The runtime dials a speech model **that you serve on your own GPUs**
    through the inference control plane. Transcripts and generated audio are
    produced inside your GPU environment. Only control-plane metadata sits in
    the managed cloud.

    - **You host:** the GPU inference tier. **We host:** the control plane and
      the engine.
    - **Best for:** teams that need model control or GPU economics, but do not
      want to operate telephony and real-time media.

    > **NOTE:**
> A fully split media plane is available as a **bespoke deployment**, not
>       a self-serve toggle. In that model, the managed control plane drives an
>       engine that you host, and audio never touches our cloud. It reuses the
>       on-prem engine and the managed console. Talk to us before you design
>       around it.
  

## Where data lives

The location of the engine decides data residency, because the engine is the
only plane that touches raw call audio.

| Data | Managed cloud | Self-hosted | Hybrid (managed CP + own inference) |
|------|---------------|-------------|-------------------------------------|
| Live RTP / call audio | Our engine | Your engine | Our engine |
| Transcripts & generated audio | Our inference (or your provider) | Your inference | **Your GPUs** |
| Agent config & trunks | Our control plane | Your control plane | Our control plane |
| Call records & recordings | Our stores | Your stores | Our stores |
| Provider / SIP credentials | Sealed, our stores | Sealed, your stores | Sealed, our stores |

Two levers narrow the media footprint further, in any model:

- **Direct media.** Per-trunk `media_mode: direct` terminates RTP on the shard
  where the agent runs. Audio then crosses no extra hop. Use `proxy` only for
  hostile-NAT carriers. See
  [Sessions, Calls, Tracks & Streams](/modalities/voice/concepts/sessions-calls-tracks-streams).
- **Sealed credentials.** Every provider key and SIP secret is encrypted at
  rest under your key-encryption-key, regardless of where the control plane
  lives.

## When to self-host inference

Self-hosting the models is the most common reason to leave pure managed cloud.
Use it when:

  1. **Transcripts cannot leave your boundary**
Your audio is regulated (health, finance, government), and you cannot send
    speech to a third-party API. A self-hosted speech-to-speech model keeps
    every transcript and generated token inside your GPUs.
  2. **You want model control**
You need a specific fine-tune, a pinned model version, or a model that no
    hosted provider offers. You serve it yourself, and the runtime routes to
    it.
  3. **GPU economics beat per-minute pricing**
At sustained concurrency, amortized GPUs can undercut metered realtime API
    minutes. Self-hosting turns a variable per-minute cost into fixed
    capacity.

The runtime reaches your models through an **inference control plane**. That
plane discovers GPU pods, scrapes their load, and routes requests over QUIC.
You supply the GPUs (your own cluster, or a rented GPU host). We supply the
routing and the duplex audio adapter.

> **NOTE:**
> The text-generation routing tier of the inference control plane is shipped.
>   The **single speech-to-speech model path is not yet verified end-to-end in
>   production**. If you plan a self-hosted-inference rollout, validate against
>   your own traffic before cutover. Details are in
>   [Self-Hosted Models](/modalities/voice/runtime/self-hosted-inference).

If you do not need any of the above, **stay on managed inference**. Point the
runtime at a hosted realtime or ASR/LLM/TTS provider, and use no GPUs at all.
See [Runtime overview](/modalities/voice/runtime/overview).

## Next steps

  - **[Managed cloud quickstart](/modalities/voice/quickstart/managed-cloud)** — Ship a voice agent with zero infrastructure.
  - **[On-prem quickstart](/modalities/voice/quickstart/on-prem)** — Run the full stack in your own environment.
  - **[Self-hosted models](/modalities/voice/runtime/self-hosted-inference)** — Serve your own speech models on your GPUs.
  - **[Voice architecture](/modalities/voice/concepts/architecture)** — Follow the end-to-end signalling, media, and runtime path.
