opensquilla--opensquilla
329 行
11 KiB
Python
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")
|