"""Provider adapters. Each exposes `complete(system, user, model, **opts) -> ProviderResult`.""" from __future__ import annotations from dataclasses import dataclass, field @dataclass(slots=True) class ProviderResult: text: str input_tokens: int = 0 cached_input_tokens: int = 0 output_tokens: int = 0 reasoning_tokens: int = 0 latency_s: float = 0.0 model: str = "" request_id: str = "" error: str = "" raw: dict = field(default_factory=dict) def get_provider(name: str, **kwargs): if name == "mock": from .mock import MockProvider return MockProvider(**kwargs) if name in ("openai", "openai_mini", "openai_large"): from .openai_provider import OpenAIProvider return OpenAIProvider(**kwargs) if name == "anthropic": from .anthropic_provider import AnthropicProvider return AnthropicProvider(**kwargs) raise ValueError(f"unknown provider {name!r}")