Close local release-quality gaps and reconcile workplan status
All checks were successful
CI Smoke / host-smoke (push) Successful in 1s
CI Smoke / container-smoke (push) Successful in 2s

Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a0e332-3365-77c0-8491-084e9ea33ac1
This commit is contained in:
tegwick 2026-09-27 17:36:27 +02:00
parent 37436bb562
commit 7cd633986e
56 changed files with 462 additions and 237 deletions

View file

@ -4,9 +4,9 @@ RoutingPolicy — task-type-aware adapter selection (FR-2).
Maps task types to preferred adapters with optional cost-cap fallback.
"""
from collections.abc import Mapping
from dataclasses import dataclass, field
from datetime import datetime, timedelta, timezone
from typing import List, Mapping, Optional
from llm_connect.adapter import LLMAdapter
from llm_connect.quality import QualityLedger, QualityObservation
@ -27,8 +27,8 @@ class RoutingRule:
task_type: str
prefer: LLMAdapter
max_cost_per_1k: Optional[float] = None
fallback: Optional[LLMAdapter] = None
max_cost_per_1k: float | None = None
fallback: LLMAdapter | None = None
@dataclass
@ -50,13 +50,13 @@ class RoutingPolicy:
adapter = policy.resolve("triage")
"""
rules: List[RoutingRule] = field(default_factory=list)
default: Optional[LLMAdapter] = None
rules: list[RoutingRule] = field(default_factory=list)
default: LLMAdapter | None = None
def resolve(
self,
task_type: str,
estimated_cost_per_1k: Optional[float] = None,
estimated_cost_per_1k: float | None = None,
) -> LLMAdapter:
"""Return the adapter for *task_type*.
@ -111,11 +111,11 @@ class AdaptiveRoutingPolicy(RoutingPolicy):
caller can use the same policy on day zero and after observations accrue.
"""
ledger: Optional[QualityLedger] = None
ledger: QualityLedger | None = None
adapters_by_id: Mapping[str, LLMAdapter] = field(default_factory=dict)
window_size: int = 20
min_observations: int = 1
max_age: Optional[timedelta] = None
max_age: timedelta | None = None
def __post_init__(self) -> None:
if self.window_size <= 0:
@ -128,9 +128,9 @@ class AdaptiveRoutingPolicy(RoutingPolicy):
def resolve(
self,
task_type: str,
estimated_cost_per_1k: Optional[float] = None,
estimated_cost_per_1k: float | None = None,
*,
quality_floor: Optional[float] = None,
quality_floor: float | None = None,
) -> LLMAdapter:
"""Return the adaptive adapter for *task_type*.