Skip to main content

Provider Interface

The fundamental abstraction that decouples agents from LLMs.

class Provider(Protocol):
async def complete(
self,
messages: list[Message],
tools: list[Tool] | None = None,
system: str | None = None,
max_tokens: int = 4096,
) -> Completion: ...

async def stream(
self,
messages: list[Message],
tools: list[Tool] | None = None,
system: str | None = None,
) -> AsyncIterator[StreamChunk]: ...

@property
def model_id(self) -> str: ...

@property
def capabilities(self) -> ModelCapabilities: ...

The interface uses a simple message-based protocol. Tool use is normalized to a common schema.

Available Providers

ProviderClassModels
AnthropicAnthropicProviderclaude-opus-4-6, claude-sonnet-4-6, claude-haiku-4-5
OpenAIOpenAIProvidergpt-4o, gpt-4o-mini, o3
GoogleGoogleProvidergemini-2.0-flash, gemini-2.5-pro
OpenRouterOpenRouterProviderAny OpenRouter model (qwen, deepseek, etc.)
Local/OllamaLocalProviderAny Ollama model

Routing Strategies

Configuration

providers:
claude-sonnet:
type: anthropic
model: claude-sonnet-4-6
gpt-4o:
type: openai
model: gpt-4o
gemini-flash:
type: google
model: gemini-2.0-flash
local-llama:
type: ollama
model: llama3.3:70b
base_url: http://gpu-server:11434