Bring Your Own LLM

Configure jambonz to use your own credentials with any of 10 supported LLM providers.

The agent verb 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

Vendorllm.vendorAuthTool callingStrengths
OpenAIopenaiAPI keyIndustry standard, broadest model catalog
AnthropicanthropicAPI keyBest-in-class instruction following (Claude)
Google AI StudiogoogleAPI keyGemini family, generous free tier
Vertex AI — Geminivertex-geminiService accountGemini on GCP infrastructure with enterprise data controls
Vertex AI — Partner Modelsvertex-openaiService accountLlama, Mistral, AI21 hosted on Vertex
AWS BedrockbedrockAPI key or IAMClaude, Llama, Mistral, Nova on AWS infra
DeepSeekdeepseekAPI keyStrong reasoning at low cost
Azure OpenAIazure-openaiAPI keyOpenAI models inside Azure (data residency, BAA)
GroqgroqAPI keySub-100ms TTFT — Llama on LPU silicon
HuggingFacehuggingfaceHF tokenMulti-provider broker (Inference Providers) — one token, many backends

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), see the llm verb.

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:

1session.agent({
2 llm: {
3 vendor: 'openai',
4 model: 'gpt-4o-mini',
5 },
6 // ...
7}).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:

1session.agent({
2 llm: {
3 vendor: 'openai',
4 label: 'production',
5 model: 'gpt-4o-mini',
6 },
7 // ...
8}).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:

1session.agent({
2 llm: {
3 vendor: 'openai',
4 model: 'gpt-4o-mini',
5 auth: { apiKey: process.env.OPENAI_API_KEY },
6 },
7 // ...
8}).send();

The shape of auth matches the vendor’s credential form. Per-vendor pages document the exact field names.

Where to next

  • New to voice agents? Start with 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.