Model Providers
The provider system provides a unified interface for interacting with different LLM backends. All providers implement the ModelProvider abstract class.
Provider Registry
graph TD
R[ProviderRegistry] --> |resolves model → provider| LMS[LM Studio]
R --> ANT[Anthropic]
R --> OAI[OpenAI]
R --> |loads| MY[models.yaml]
LMS --> |OpenAI-compatible API| LOCAL[Local Models]
ANT --> |Anthropic API| CLAUDE[Claude Models]
OAI --> |OpenAI API| GPT[GPT Models]
ProviderRegistry is a lazy singleton that:
- Loads model definitions from
providers/models.yaml - Resolves model names to their provider (e.g.,
"claude-3-5-sonnet-latest"→ Anthropic) - Creates provider instances on demand with config from env vars or
data/config.json
registry = get_registry()
provider, model_id = registry.get_provider_for_model("claude-3-5-sonnet-latest")
result = await provider.complete(messages, model_id)
Implementations
| Provider | Class | API | Config |
|---|---|---|---|
| LM Studio | LMStudioProvider | OpenAI-compatible (local) | LMSTUDIO_BASE_URL (default: http://localhost:1234/v1) |
| Anthropic | AnthropicProvider | Anthropic API | ANTHROPIC_API_KEY |
| OpenAI | OpenAIProvider | OpenAI API | OPENAI_API_KEY |
All providers support the same interface:
| Method | Description |
|---|---|
complete(messages, model, **kwargs) | Full completion (async) |
stream(messages, model, **kwargs) | Streaming completion → AsyncIterator[StreamChunk] |
get_capabilities(model) | Returns ModelCapabilities for a model |
list_models() | Returns available model names |
health_check() | Tests connectivity |
Common Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
temperature | float | 0.7 | Sampling temperature |
max_tokens | int | null | Maximum output tokens |
tools | list[dict] | null | Function calling tools |
tool_choice | string/dict | null | Tool selection ("auto", "none", or specific) |
stop | list[string] | null | Stop sequences |
Model Configuration
Models are defined in providers/models.yaml:
models:
claude-3-5-sonnet-latest:
provider: anthropic
context_window: 200000
supports_tools: true
supports_vision: true
cost_per_1k_input: 0.003
cost_per_1k_output: 0.015
llama3.2:
provider: lmstudio
context_window: 8192
supports_tools: true
supports_streaming: true
defaults:
chat: null # Uses DEFAULT_MODEL env var
reasoning: null # Falls back to chat default
extraction: null # Falls back to chat default
The registry also discovers models dynamically from LM Studio’s /v1/models endpoint.
Environment Variables
| Variable | Description |
|---|---|
DEFAULT_MODEL | Default model for chat (default: "llama3.2") |
LMSTUDIO_BASE_URL | LM Studio API URL |
ANTHROPIC_API_KEY | Anthropic API key |
OPENAI_API_KEY | OpenAI API key |
DEBUG_LOG_LLM_REQUESTS | Log full request payloads when set to 1/true |
Provider settings can also be set at runtime via POST /api/config/update.
API Endpoints
| Endpoint | Method | Description |
|---|---|---|
/api/providers | GET | List configured providers |
/api/providers/models | GET | List models with capabilities |
/api/providers/health | GET | Health check all providers |
See API Endpoints for full details.
Related
- API Models: Provider — Message, CompletionResult, ModelCapabilities schemas
- Config file:
api/agentx_ai/providers/models.yaml