> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.jambonz.org/guides/features/bring-your-own-llm/overview/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.jambonz.org/_mcp/server. # Bring Your Own LLM The [agent verb](/verbs/verbs/agent) wires together STT, LLM, and TTS into a complete voice agent. The `llm` block selects which LLM vendor jambonz talks to. Credentials live in the **LLM Services** section of the jambonz portal — once added there, you reference them from any agent verb by `vendor`. This section walks through configuring each supported vendor, including known issues and gotchas we've hit in production. ## Supported vendors | Vendor | `llm.vendor` | Auth | Tool calling | Strengths | | ------------------------------------------------------------------------------- | --------------- | --------------- | ------------ | --------------------------------------------------------------------------------- | | [Anthropic](/guides/features/bring-your-own-llm/anthropic) | `anthropic` | API key | ✓ | Best-in-class instruction following (Claude) | | [AWS Bedrock](/guides/features/bring-your-own-llm/bedrock) | `bedrock` | API key or IAM | ✓ | Claude, Llama, Mistral, Nova on AWS infra | | [Azure OpenAI](/guides/features/bring-your-own-llm/azure-openai) | `azure-openai` | API key | ✓ | OpenAI models inside Azure (data residency, BAA) | | [Baseten](/guides/features/bring-your-own-llm/baseten) | `baseten` | API key | ✓ | Hosted open-weight catalog (DeepSeek, GLM, Kimi, GPT-OSS) + dedicated deployments | | [DeepSeek](/guides/features/bring-your-own-llm/deepseek) | `deepseek` | API key | ✓ | Strong reasoning at low cost | | [Google AI Studio](/guides/features/bring-your-own-llm/google) | `google` | API key | ✓ | Gemini family, generous free tier | | [Groq](/guides/features/bring-your-own-llm/groq) | `groq` | API key | ✓ | Sub-100ms TTFT — Llama on LPU silicon | | [HuggingFace](/guides/features/bring-your-own-llm/huggingface) | `huggingface` | HF token | ✓ | Multi-provider broker (Inference Providers) — one token, many backends | | [Moonshot (Kimi)](/guides/features/bring-your-own-llm/moonshot) | `moonshot` | API key | ✓ | Kimi K2 MoE family over an OpenAI-compatible API | | [OpenAI](/guides/features/bring-your-own-llm/openai) | `openai` | API key | ✓ | Industry standard, broadest model catalog | | [Vertex AI — Gemini](/guides/features/bring-your-own-llm/vertex-gemini) | `vertex-gemini` | Service account | ✓ | Gemini on GCP infrastructure with enterprise data controls | | [Vertex AI — Partner Models](/guides/features/bring-your-own-llm/vertex-openai) | `vertex-openai` | Service account | ✓ | Llama, Mistral, AI21 hosted on Vertex | | [xAI (Grok)](/guides/features/bring-your-own-llm/xai) | `xai` | API key | ✓ | Grok family (grok-4.3, grok-4.20) — reasoning + vision | | [Z.ai (GLM)](/guides/features/bring-your-own-llm/zai) | `zai` | API key | ✓ | GLM family over an OpenAI-compatible API | > **Note** > > This page covers the **agent verb's** `llm` block (cascaded STT → LLM → TTS pipelines). For speech-to-speech vendors that handle audio in and audio out directly (OpenAI Realtime, Ultravox, Google Gemini Live, ElevenLabs, xAI Voice Agent), see the [llm verb](/verbs/verbs/llm). ## Common patterns ### Adding a credential In the jambonz portal, navigate to **Account → LLM Services → + Add LLM Service**. Pick a vendor from the dropdown, fill in the fields the form requests, and click **Test** to verify before saving. The Test button issues a cheap authenticated probe against the vendor — green means the credential works. ### Picking a credential at call time In the typical case — one LLM credential per vendor on your account — jambonz resolves the credential automatically from the `vendor` field. No `label` is needed: ```js session.agent({ llm: { vendor: 'openai', model: 'gpt-4o-mini', }, // ... }).send(); ``` This is the recommended setup for nearly all customers. **Don't set a label when creating the credential, and don't pass one in the agent verb.** ### Multiple credentials for the same vendor (rare) The only reason to use a label is if you've added two or more credentials for the **same** vendor on the same account — e.g., separate dev and production OpenAI keys you want both available. In that case, give each credential a distinct label in the portal at create time, then reference it from the agent verb: ```js session.agent({ llm: { vendor: 'openai', label: 'production', model: 'gpt-4o-mini', }, // ... }).send(); ``` If you only ever have one credential per vendor (the common case), skip the label entirely. ### Inline `auth` (rare) For one-off testing or when you don't want to store credentials in the portal, you can pass `auth` inline in the verb payload: ```js session.agent({ llm: { vendor: 'openai', model: 'gpt-4o-mini', auth: { apiKey: process.env.OPENAI_API_KEY }, }, // ... }).send(); ``` The fields in `auth` match the vendor's credential form. Per-vendor pages document the exact field names. ## Where to next * New to voice agents? Start with [Voice Agents](/guides/features/voice-agents) for the end-to-end concept. * Already comfortable? Pick your vendor from the table above for setup specifics. * Looking for the verb reference? See [the agent verb](/verbs/verbs/agent). > Configure jambonz to use your own credentials with any of 14 supported LLM providers.