"""档位路由:tier -> (provider, model)(ARCH §4.3)。 M1 只读全局默认(config.tier_defaults,形如 "deepseek:deepseek-chat"); 作品级 / Skill 级覆盖留待后续(§4.3 三级解析)。 """ from __future__ import annotations from dataclasses import dataclass from ww_config import get_settings from .types import Tier @dataclass(frozen=True) class Route: provider: str model: str def resolve_route(tier: Tier) -> Route: spec = get_settings().tier_defaults.get(tier) if not spec: raise ValueError(f"no tier_defaults entry for tier={tier!r}") provider, sep, model = spec.partition(":") if not sep or not provider or not model: raise ValueError(f"invalid tier route {spec!r}; expected 'provider:model'") return Route(provider=provider, model=model)