Close local release-quality gaps and reconcile workplan status
Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a0e332-3365-77c0-8491-084e9ea33ac1
This commit is contained in:
parent
37436bb562
commit
7cd633986e
56 changed files with 462 additions and 237 deletions
|
|
@ -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*.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue