66 lines
2.2 KiB
Python
66 lines
2.2 KiB
Python
from __future__ import annotations
|
|
|
|
import ast
|
|
import importlib.util
|
|
import sys
|
|
import tomllib
|
|
from pathlib import Path
|
|
|
|
from opensquilla.tools.registry import ToolProfile
|
|
|
|
EXPECTED_ROUTER_MODELS = {
|
|
"c0": "deepseek/deepseek-v4-flash",
|
|
"c1": "deepseek/deepseek-v4-pro",
|
|
"c2": "z-ai/glm-5.2",
|
|
"c3": "anthropic/claude-opus-4.8",
|
|
}
|
|
|
|
|
|
def _load_smoke_module():
|
|
script_path = Path(__file__).resolve().parents[2] / "scripts" / "smoke_v4_phase3_router.py"
|
|
spec = importlib.util.spec_from_file_location("smoke_v4_phase3_router", script_path)
|
|
assert spec is not None
|
|
assert spec.loader is not None
|
|
module = importlib.util.module_from_spec(spec)
|
|
sys.modules[spec.name] = module
|
|
spec.loader.exec_module(module)
|
|
return module
|
|
|
|
|
|
def test_smoke_script_tier_defaults_match_router_defaults(tmp_path: Path) -> None:
|
|
smoke = _load_smoke_module()
|
|
assert {tier: cfg["model"] for tier, cfg in smoke.TIERS.items()} == EXPECTED_ROUTER_MODELS
|
|
|
|
config_path = tmp_path / "gateway.toml"
|
|
smoke._write_live_gateway_config(config_path, "")
|
|
|
|
data = tomllib.loads(config_path.read_text(encoding="utf-8"))
|
|
assert data["llm"]["model"] == EXPECTED_ROUTER_MODELS["c1"]
|
|
assert {
|
|
tier: cfg["model"]
|
|
for tier, cfg in data["squilla_router"]["tiers"].items()
|
|
} == EXPECTED_ROUTER_MODELS
|
|
|
|
|
|
def test_live_scripts_use_valid_registry_tool_profile_values() -> None:
|
|
valid_profiles = {profile.value for profile in ToolProfile}
|
|
script_paths = [
|
|
Path("scripts/live_provider_profile_gateway_e2e.py"),
|
|
Path("scripts/live_v4_router_evidence.py"),
|
|
]
|
|
|
|
for script_path in script_paths:
|
|
tree = ast.parse(script_path.read_text(encoding="utf-8"))
|
|
for node in ast.walk(tree):
|
|
if not isinstance(node, ast.Assign):
|
|
continue
|
|
for target in node.targets:
|
|
if not (
|
|
isinstance(target, ast.Subscript)
|
|
and isinstance(target.slice, ast.Constant)
|
|
and target.slice.value == "OPENSQUILLA_TOOL_PROFILE"
|
|
):
|
|
continue
|
|
assert isinstance(node.value, ast.Constant), script_path
|
|
assert node.value.value in valid_profiles, script_path
|