1"""Provider adapters. Each exposes `complete(system, user, model, **opts) -> ProviderResult`."""2from __future__ import annotations34from dataclasses import dataclass, field567@dataclass(slots=True)8class ProviderResult:9 text: str10 input_tokens: int = 011 cached_input_tokens: int = 012 output_tokens: int = 013 reasoning_tokens: int = 014 latency_s: float = 0.015 model: str = ""16 request_id: str = ""17 error: str = ""18 raw: dict = field(default_factory=dict)192021def get_provider(name: str, **kwargs):22 if name == "mock":23 from .mock import MockProvider24 return MockProvider(**kwargs)25 if name in ("openai", "openai_mini", "openai_large"):26 from .openai_provider import OpenAIProvider27 return OpenAIProvider(**kwargs)28 if name == "anthropic":29 from .anthropic_provider import AnthropicProvider30 return AnthropicProvider(**kwargs)31 raise ValueError(f"unknown provider {name!r}")32