Repository Public Research preview
1"""Provider abstraction for rewriting engines (Anthropic Claude live, Message Batches, deterministic mock)."""2from __future__ import annotations34import abc5import time6from dataclasses import dataclass, field789@dataclass10class ProviderResult:11 text: str | None12 status: str # ok | refused | error | empty | truncated13 model: str14 provider_request_id: str | None = None15 usage: dict = field(default_factory=dict)16 cost_usd: float | None = None17 stop_reason: str | None = None18 error: str | None = None19 latency_s: float | None = None20 raw: dict | None = None212223class Provider(abc.ABC):24 name: str = "abstract"25 model: str = "none"2627 @abc.abstractmethod28 def rewrite(self, system: str, messages: list[dict], max_tokens: int, params: dict) -> ProviderResult: ...2930 def supports_batch(self) -> bool:31 return False323334class Timer:35 def __enter__(self):36 self.t0 = time.perf_counter()37 return self3839 def __exit__(self, *a):40 self.elapsed = time.perf_counter() - self.t041