VoiceLayer Docs
Dashboard

Features / Brain connectors

Bring your own LLM

Keep your existing text agent — an OpenAI-compatible endpoint, a LangChain app, a self-hosted model — and answer a phone number on top of it. VoiceLayer runs the voice pipeline (speech-to-text, text-to-speech, turn-taking, telephony); your endpoint is the brain.

Tunnel
private
Run the one-container vl-brain daemon. It dials out to us — no inbound ports — and forwards each turn to your local endpoint. LiteLLM is baked in to normalize any provider.
Direct
public
Point at a public OpenAI-compatible URL stored as a connection. No daemon — we call it directly over HTTPS, with an SSRF guard.

How it works

Four steps, mostly clicks.

  1. 1

    Create a connector

    On the Brain connectors page, add a connector. Tunnel mode returns a vl_conn_ token — shown once.

  2. 2

    Run it (or point at your URL)

    Tunnel: run the one-container vl-brain daemon with your token. Direct: register a connection holding your public URL + key.

  3. 3

    It’s a voice agent

    Your connector shows up in the Agents list. It works like any agent — swap STT/TTS, add tools — but the LLM is your brain.

  4. 4

    Try it

    Talk to the agent in the Playground — no phone number needed. Attach a number later to take real calls.

Run the connector tunnel

One container, one command. If your endpoint already speaks OpenAI, set VL_NORMALIZE=off and skip LiteLLM entirely:

terminal
docker run --rm \
  -e VL_CONNECTOR_TOKEN=vl_conn_… \
  -e VL_BRAIN_URL=https://your-brain.example.com/v1 \
  -e VL_BRAIN_API_KEY=sk-… \
  -e VL_BRAIN_MODEL=your-model \
  -e VL_NORMALIZE=off \
  ghcr.io/paradox1612/vl-brain

Use any provider

Not OpenAI-shaped? Mount a LiteLLM config — Anthropic, Bedrock, Vertex, Ollama, or a LangChain app — and the embedded proxy normalizes it. Point the connector's default model at the model_name:

litellm.config.yaml
# litellm.config.yaml — map the model we ask for to YOUR provider.
model_list:
  - model_name: brain
    litellm_params:
      model: anthropic/claude-sonnet-4
      api_key: os.environ/ANTHROPIC_API_KEY

It’s a voice agent

Your connector appears in the Agents list and behaves like any agent — swap STT/TTS, add tools, set handoff — with one difference: the LLM is your brain, so the model picker is locked. Test it in the Playground; attach a number when you're ready.

🔑

The token is shown once.Copy it on creation — it isn't retrievable later. If it leaks, rotate it from the connector's row; the old token stops working immediately.