70 lines
2.4 KiB
Python
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))
|