Files
microsoft--webwright/tests/unit/test_tool_model_routing.py
T
2026-07-13 12:28:42 +08:00

70 lines
2.4 KiB
Python

import pytest
import yaml
from webwright.config import get_config_from_spec
from webwright.tools._model_config import (
DEFAULT_MERGED_CONFIG_RELPATH,
_extract_model_block,
resolve_model_config_path,
)
from webwright.utils.serialize import recursive_merge
def test_model_claude_sets_top_level_anthropic_model() -> None:
config = recursive_merge(
get_config_from_spec("base.yaml"),
get_config_from_spec("model_claude.yaml"),
)
assert config["model"]["model_class"] == "anthropic"
def test_model_claude_does_not_declare_per_tool_overrides() -> None:
config = get_config_from_spec("model_claude.yaml")
assert "tools" not in config, "model_claude.yaml should rely on the top-level `model:` block"
def test_extract_model_block_reads_top_level_model(tmp_path) -> None:
config = {"model": {"model_class": "anthropic", "model_name": "claude-opus-4-7"}}
assert _extract_model_block(config) == config["model"]
def test_extract_model_block_rejects_missing_block() -> None:
with pytest.raises(ValueError, match="missing a top-level"):
_extract_model_block({})
def test_resolve_model_config_path_prefers_explicit_arg(tmp_path) -> None:
explicit = tmp_path / "explicit.yaml"
explicit.write_text("model: {model_class: anthropic, model_name: claude-opus-4-7}\n")
snapshot_dir = tmp_path / "ws" / DEFAULT_MERGED_CONFIG_RELPATH.parent
snapshot_dir.mkdir(parents=True)
(snapshot_dir / DEFAULT_MERGED_CONFIG_RELPATH.name).write_text(
yaml.safe_dump({"model": {"model_class": "openai"}})
)
resolved = resolve_model_config_path(str(explicit), workspace_dir=str(tmp_path / "ws"))
assert resolved == explicit.resolve()
def test_resolve_model_config_path_falls_back_to_workspace_snapshot(tmp_path) -> None:
workspace = tmp_path / "ws"
snapshot_path = workspace / DEFAULT_MERGED_CONFIG_RELPATH
snapshot_path.parent.mkdir(parents=True)
snapshot_path.write_text(
yaml.safe_dump({"model": {"model_class": "anthropic", "model_name": "claude-opus-4-7"}})
)
resolved = resolve_model_config_path("", workspace_dir=str(workspace))
assert resolved == snapshot_path.resolve()
def test_resolve_model_config_path_raises_when_nothing_found(tmp_path) -> None:
with pytest.raises(FileNotFoundError, match="No tool model config found"):
resolve_model_config_path("", workspace_dir=str(tmp_path))