docs/providers.md

# LLM Provider Configuration

Beamlens supports the vast majority of LLM providers. You can configure them in the `client_registry` section of your configuration.

```elixir
{Beamlens,
  client_registry: %{
    primary: "Ollama",
    clients: [
      %{
        name: "Ollama",
        provider: "openai-generic",
        options: %{base_url: "http://localhost:11434/v1", model: "llama3.2"}
      }
    ]
  }}
```

Beamlens utilizes BAML to provide LLM Client support. See the [ClientRegistry](https://docs.boundaryml.com/ref/baml_client/client-registry) documentation if you have questions beyond what this documentation provides.

## Default: Anthropic

By default Anthropic is configured with the `claude-haiku-4-5-20251001` model. No configuration needed. Set your API key and you're ready:

```bash
export ANTHROPIC_API_KEY="sk-ant-..."
```

## Anthropic

```bash
export ANTHROPIC_API_KEY="sk-ant-..."
```

```elixir
client_registry: %{
  primary: "Anthropic",
  clients: [
    %{
      name: "Anthropic",
      provider: "anthropic",
      options: %{model: "claude-haiku-4-5-20251001"}
    }
  ]
}
```

Refer to the [BAML Anthropic documentation](https://docs.boundaryml.com/ref/llm-client-providers/anthropic) for more details.


## AWS Bedrock

AWS Bedrock uses standard AWS authentication methods.


```elixir
client_registry: %{
  primary: "Bedrock",
  clients: [
    %{
      name: "Bedrock",
      provider: "aws-bedrock",
      options: %{
        model: "anthropic.claude-3-5-haiku-20241022-v1:0",
        region: "us-east-1"
      }
    }
  ]
}
```

Refer to the [BAML AWS Bedrock documentation](https://docs.boundaryml.com/ref/llm-client-providers/aws-bedrock) for more details.

## Google AI Gemini

```bash
export GOOGLE_API_KEY="..."
```

```elixir
client_registry: %{
  primary: "GoogleAI",
  clients: [
    %{
      name: "GoogleAI",
      provider: "google-ai",
      options: %{model: "gemini-2.0-flash"}
    }
  ]
}
```

Refer to the [BAML Google AI Gemini documentation](https://docs.boundaryml.com/ref/llm-client-providers/google-ai-gemini) for more details.

## Google Vertex AI

Uses Google Cloud Application Default Credentials.

```elixir
client_registry: %{
  primary: "GoogleVertexAI",
  clients: [
    %{
      name: "GoogleVertexAI",
      provider: "vertex-ai",
      options: %{
        model: "gemini-2.5-pro",
        location: "us-central1",
        project_id: "my-project-id",
        query_params: %{
          key: "Your VERTEX_API_KEY" # Or set the API KEY
        }
      }
    }
  ]
}
```

Refer to the [BAML Vertex AI documentation](https://docs.boundaryml.com/ref/llm-client-providers/google-vertex) for more details.

## Ollama (Local)

No API key. Your data stays on your machine.

```bash
# Install and run Ollama
ollama serve
ollama pull llama3.2
```

```elixir
client_registry: %{
  primary: "Ollama",
  clients: [
    %{
      name: "Ollama",
      provider: "openai-generic",
      options: %{
        base_url: "http://localhost:11434/v1",
        model: "llama3.2"
      }
    }
  ]
}
```

Refer to the [BAML Ollama documentation](https://docs.boundaryml.com/ref/llm-client-providers/ollama) for more details.

## OpenAI

```bash
export OPENAI_API_KEY="sk-..."
```

```elixir
client_registry: %{
  primary: "OpenAI",
  clients: [
    %{
      name: "OpenAI",
      provider: "openai",
      options: %{model: "gpt-4o-mini"}
    }
  ]
}
```

Refer to the [BAML OpenAI documentation](https://docs.boundaryml.com/ref/llm-client-providers/open-ai) for more details.

## OpenAI Azure

```bash
export AZURE_OPENAI_API_KEY="..."
```

```elixir
client_registry: %{
  primary: "AzureOpenAI",
  clients: [
    %{
      name: "AzureOpenAI",
      provider: "azure-openai",
      options: %{
        resource_name: "your-resource-name",
        deployment_id: "your-deployment-id",
        api_version: "2024-02-15-preview"
      }
    }
  ]
}
```

Refer to the [BAML OpenAI Azure documentation](https://docs.boundaryml.com/ref/llm-client-providers/open-ai-from-azure) for more details.

## OpenAI Generic

```elixir
client_registry: %{
  primary: "OpenAIGeneric",
  clients: [
    %{
      name: "OpenAIGeneric",
      provider: "openai-generic",
      options: %{
        base_url: "https://api.provider.com",
        model: "o<provider-specified-format>"
      }
    }
  ]
}
```

Refer to the [BAML OpenAI Generic documentation](https://docs.boundaryml.com/ref/llm-client-providers/openai-generic) for more details.

## OpenRouter

```bash
export OPENROUTER_API_KEY="..."
```

```elixir
client_registry: %{
  primary: "OpenRouter",
  clients: [
    %{
      name: "OpenRouter",
      provider: "openrouter",
      options: %{
        model: "openai/gpt-4o-mini"
      }
    }
  ]
}
```

Refer to the [BAML OpenRouter documentation](https://docs.boundaryml.com/ref/llm-client-providers/openrouter) for more details.

## Advanced Patterns

### Retry Policy

Handle transient failures with exponential backoff. Beamlens includes a `DefaultRetry` policy (3 retries, exponential backoff starting at 200ms):

```elixir
client_registry: %{
  primary: "Anthropic",
  clients: [
    %{
      name: "Anthropic",
      provider: "anthropic",
      options: %{model: "claude-haiku-4-5-20251001"},
      retry_policy: "DefaultRetry"
    }
  ]
}
```

The `DefaultRetry` policy uses:
- 3 retries after initial failure
- Exponential backoff starting at 200ms
- 1.5x multiplier per retry
- Maximum delay of 10 seconds

### Fallback Chains

Switch providers when your primary fails:

```elixir
client_registry: %{
  primary: "PrimaryWithFallback",
  clients: [
    %{
      name: "Primary",
      provider: "anthropic",
      options: %{model: "claude-haiku-4-5-20251001"}
    },
    %{
      name: "Backup",
      provider: "openai",
      options: %{model: "gpt-4o-mini"}
    },
    %{
      name: "PrimaryWithFallback",
      provider: "fallback",
      options: %{strategy: ["Primary", "Backup"]}
    }
  ]
}
```

### Round-Robin

Distribute load across multiple providers or API keys:

```elixir
client_registry: %{
  primary: "RoundRobinClient",
  clients: [
    %{
      name: "Client1",
      provider: "anthropic",
      options: %{model: "claude-haiku-4-5-20251001"}
    },
    %{
      name: "Client2",
      provider: "anthropic",
      options: %{model: "claude-haiku-4-5-20251001"}
    },
    %{
      name: "RoundRobinClient",
      provider: "round-robin",
      options: %{strategy: ["Client1", "Client2"]}
    }
  ]
}
```

Each request cycles through the clients in order. Useful for spreading rate limits across multiple API keys.

## More Providers

Beamlens uses [BAML](https://docs.boundaryml.com/docs/snippets/clients/overview) for LLM integration. Any provider BAML supports works with Beamlens:

- Together AI
- Groq
- Vercel AI Gateway
- And more

See the [BAML provider documentation](https://docs.boundaryml.com/docs/snippets/clients/overview) for the full list and configuration options.