项目文件夹

文件
2026-07-13 13:12:33 +08:00

329 行
11 KiB
Python

"""Preset registry: packaged data parity, synthesized coverage, and API shape.
The golden fixture (``golden/router_tier_profiles.json``) was captured from
``git show staging/provider-overhaul:src/opensquilla/gateway/config.py``
(``_router_tier_profile_defaults`` at f884d4c9) and pins the packaged preset
data byte-identically to the historical hardcoded dict literals.
"""
from __future__ import annotations
import json
from pathlib import Path
from opensquilla.provider.preset_registry import (
CURATED_INLINE_PRESET_IDS,
LEGACY_PROVIDER_PRESET_IDS,
ProviderPreset,
get_preset,
legacy_profile_ids,
list_presets,
)
from opensquilla.provider.registry import list_provider_specs
GOLDEN_PATH = Path(__file__).parent / "golden" / "router_tier_profiles.json"
LEGACY_NINE = frozenset(
{
"openrouter",
"dashscope",
"deepseek",
"gemini",
"volcengine",
"byteplus",
"openai",
"zhipu",
"moonshot",
}
)
TEXT_TIERS = ("c0", "c1", "c2", "c3")
CURATED_SYNTHETIC_PRESET_IDS = frozenset(
{
"qianfan",
"minimax",
"minimax_cn",
"minimax_global",
"minimax_openai",
"minimax_coding_openai",
"minimax_coding_anthropic",
"kimi_coding_openai",
"kimi_coding_anthropic",
"mimo_openai",
"mimo_anthropic",
"volcengine_coding_plan",
}
)
def _golden() -> dict[str, dict]:
return json.loads(GOLDEN_PATH.read_text(encoding="utf-8"))
# --- packaged presets -------------------------------------------------------
def test_legacy_profile_ids_equal_the_literal_nine() -> None:
assert legacy_profile_ids() == LEGACY_NINE
assert LEGACY_PROVIDER_PRESET_IDS == LEGACY_NINE
def test_non_synthesized_registry_ids_equal_legacy_plus_curated() -> None:
packaged = list_presets(include_synthesized=False)
assert frozenset(p.preset_id for p in packaged) == LEGACY_NINE | CURATED_INLINE_PRESET_IDS
assert all(not p.synthesized for p in packaged)
def test_only_legacy_ids_are_persistable() -> None:
for preset in list_presets():
assert preset.persistable is (preset.preset_id in LEGACY_NINE)
for preset_id in sorted(CURATED_INLINE_PRESET_IDS):
preset = get_preset(preset_id)
assert preset is not None
assert preset.synthesized is False
assert preset.persistable is False
def test_packaged_presets_match_golden_tier_data_exactly() -> None:
golden = _golden()
assert frozenset(golden) == LEGACY_NINE
for preset_id, tiers in golden.items():
preset = get_preset(preset_id)
assert preset is not None, preset_id
assert preset.synthesized is False
assert preset.tier_defaults() == tiers, preset_id
def test_packaged_preset_id_equals_provider_id() -> None:
# Recorded decision: preset_id == provider_id this cycle.
for preset in list_presets():
assert preset.preset_id == preset.provider_id
def test_packaged_preset_metadata_is_populated() -> None:
for preset_id in sorted(LEGACY_NINE):
preset = get_preset(preset_id)
assert preset is not None
assert preset.label
assert preset.description
assert preset.default_model
def test_packaged_default_model_follows_onboarding_direct_default() -> None:
# default_model mirrors onboarding's default-direct-model semantics:
# the c1 tier model (c0 fallback) for curated profiles.
golden = _golden()
for preset_id in sorted(LEGACY_NINE):
preset = get_preset(preset_id)
assert preset is not None
tiers = golden[preset_id]
expected = str((tiers.get("c1") or tiers.get("c0") or {}).get("model") or "")
assert preset.default_model == expected, preset_id
def test_only_openrouter_packages_an_image_tier() -> None:
for preset_id in sorted(LEGACY_NINE):
preset = get_preset(preset_id)
assert preset is not None
if preset_id == "openrouter":
assert "image_model" in preset.tiers
else:
assert "image_model" not in preset.tiers
def test_tier_defaults_returns_fresh_copies() -> None:
preset = get_preset("openai")
assert preset is not None
first = preset.tier_defaults()
first["c0"]["model"] = "mutated"
first["extra"] = {}
assert preset.tier_defaults()["c0"]["model"] != "mutated"
assert "extra" not in preset.tier_defaults()
# --- curated inline presets --------------------------------------------------
def test_tokenrhythm_curated_ladder() -> None:
preset = get_preset("tokenrhythm")
assert preset is not None
assert preset.synthesized is False
assert preset.persistable is False
assert preset.default_model == "deepseek-v4-pro"
expected_models = {
"c0": "deepseek-v4-flash",
"c1": "deepseek-v4-pro",
"c2": "kimi-k2.7-code",
"c3": "glm-5.2",
"image_model": "kimi-k2.6",
}
tiers = preset.tier_defaults()
assert set(tiers) == set(expected_models)
for name, model in expected_models.items():
assert tiers[name]["provider"] == "tokenrhythm", name
assert tiers[name]["model"] == model, name
# The endpoint rejects thinking-toggle request fields, so the curated
# ladder must not carry a thinking_level for the request builder.
assert "thinking_level" not in tiers[name], name
assert tiers["image_model"]["supports_image"] is True
assert tiers["image_model"]["image_only"] is True
def test_curated_inline_ids_are_never_legacy_profile_ids() -> None:
assert not (CURATED_INLINE_PRESET_IDS & legacy_profile_ids())
# --- synthesized presets ----------------------------------------------------
def test_every_runtime_provider_has_a_preset() -> None:
runtime_ids = {s.provider_id for s in list_provider_specs() if s.runtime_supported}
registry_ids = {p.preset_id for p in list_presets()}
assert runtime_ids <= registry_ids
def test_non_runtime_providers_have_no_synthesized_preset() -> None:
non_runtime = {s.provider_id for s in list_provider_specs() if not s.runtime_supported}
synthesized_ids = {p.preset_id for p in list_presets() if p.synthesized}
assert not (non_runtime & synthesized_ids)
def test_synthesized_presets_bind_all_text_tiers_to_provider_default() -> None:
synthesized = [p for p in list_presets() if p.synthesized]
assert synthesized, "expected at least one synthesized preset"
for preset in synthesized:
assert preset.preset_id not in LEGACY_NINE
if preset.preset_id in CURATED_SYNTHETIC_PRESET_IDS:
assert preset.default_model
assert set(TEXT_TIERS).issubset(preset.tiers)
else:
# Onboarding's direct default model is empty for non-curated providers.
assert preset.default_model == ""
assert set(preset.tiers) == set(TEXT_TIERS)
assert "image_model" not in preset.tiers
for tier in TEXT_TIERS:
entry = preset.tiers[tier]
assert entry["provider"] == preset.provider_id
if preset.preset_id not in CURATED_SYNTHETIC_PRESET_IDS:
assert entry["model"] == preset.default_model
else:
assert entry["model"]
assert entry["description"]
assert entry["supports_image"] is False
def test_curated_synthesized_presets_pin_live_verified_ladders() -> None:
expected = {
"qianfan": {
"default": "ernie-4.5-turbo-128k",
"tiers": {
"c0": "ernie-4.5-turbo-128k",
"c1": "ernie-4.5-turbo-128k",
"c2": "ernie-4.5-turbo-128k",
"c3": "ernie-4.5-turbo-128k",
"image_model": "ernie-4.5-turbo-vl-32k",
},
},
"minimax_openai": {
"default": "MiniMax-M2.7",
"tiers": {
"c0": "MiniMax-M2.7",
"c1": "MiniMax-M2.7",
"c2": "MiniMax-M3",
"c3": "MiniMax-M3",
},
},
"minimax_coding_openai": {
"default": "MiniMax-M2.7",
"tiers": {
"c0": "MiniMax-M2.7",
"c1": "MiniMax-M2.7",
"c2": "MiniMax-M3",
"c3": "MiniMax-M3",
},
},
"minimax_coding_anthropic": {
"default": "MiniMax-M2.7",
"tiers": {
"c0": "MiniMax-M2.7",
"c1": "MiniMax-M2.7",
"c2": "MiniMax-M3",
"c3": "MiniMax-M3",
},
},
"kimi_coding_openai": {
"default": "kimi-for-coding",
"tiers": {
"c0": "kimi-for-coding",
"c1": "kimi-for-coding",
"c2": "kimi-for-coding",
"c3": "kimi-for-coding",
},
},
"mimo_openai": {
"default": "mimo-v2.5",
"tiers": {
"c0": "mimo-v2.5",
"c1": "mimo-v2.5",
"c2": "mimo-v2.5-pro",
"c3": "mimo-v2.5-pro",
},
},
"volcengine_coding_plan": {
"default": "doubao-seed-2.0-pro",
"tiers": {
"c0": "doubao-seed-2.0-lite",
"c1": "doubao-seed-2.0-pro",
"c2": "doubao-seed-2.0-code",
"c3": "doubao-seed-2.0-code",
},
},
}
for preset_id, spec in expected.items():
preset = get_preset(preset_id)
assert preset is not None
assert preset.synthesized is True
assert preset.default_model == spec["default"]
assert {
tier: preset.tiers[tier]["model"]
for tier in spec["tiers"]
} == spec["tiers"]
def test_synthesized_ids_are_never_legacy_profile_ids() -> None:
# Registry-only objects: a synthesized id must never become a valid
# persisted tier_profile (rc1 bricks on unknown ids).
for preset in list_presets():
if preset.synthesized:
assert preset.preset_id not in legacy_profile_ids()
# --- lookup API -------------------------------------------------------------
def test_get_preset_normalizes_case_and_whitespace() -> None:
preset = get_preset(" OpenAI ")
assert preset is not None
assert preset.preset_id == "openai"
def test_get_preset_unknown_returns_none() -> None:
assert get_preset("does-not-exist") is None
assert get_preset("") is None
def test_list_presets_orders_packaged_before_synthesized() -> None:
presets = list_presets()
flags = [p.synthesized for p in presets]
assert flags == sorted(flags)
def test_provider_preset_is_frozen() -> None:
preset = get_preset("openai")
assert isinstance(preset, ProviderPreset)
try:
preset.label = "nope" # type: ignore[misc]
except Exception:
pass
else:
raise AssertionError("ProviderPreset must be frozen")