from scripts.lib.zenmux_client import ZenMuxClient, normalize_zenmux_model def test_normalize_zenmux_adapter_models() -> None: assert normalize_zenmux_model("zenmux/openai/gpt-5.4-mini") == "openai/gpt-5.4-mini" assert ( normalize_zenmux_model("zenmux/google/gemini-3.1-pro-preview") == "google/gemini-3.1-pro-preview" ) assert ( normalize_zenmux_model("zenmux-anthropic/claude-sonnet-4-6") == "anthropic/claude-sonnet-4.6" ) assert ( normalize_zenmux_model("anthropic/claude-opus-4.7") == "anthropic/claude-opus-4.7" ) class _FakeResponse: status_code = 200 text = '{"choices":[{"message":{"content":"OK"}}]}' def json(self) -> dict: return {"choices": [{"message": {"content": "OK"}}], "usage": {}} class _RecordingClient: def __init__(self) -> None: self.bodies: list[dict] = [] def post(self, _url: str, *, json: dict, headers: dict) -> _FakeResponse: self.bodies.append(json) return _FakeResponse() def test_opus_47_probe_omits_deprecated_temperature_param() -> None: client = ZenMuxClient(api_key="test") recorder = _RecordingClient() client._client = recorder # type: ignore[assignment] client.chat_complete( model="zenmux-anthropic/claude-opus-4-7", system="Health check.", user="Reply OK.", temperature=0, max_tokens=16, ) assert recorder.bodies[0]["model"] == "anthropic/claude-opus-4.7" assert "temperature" not in recorder.bodies[0] def test_sonnet_keeps_temperature_param() -> None: client = ZenMuxClient(api_key="test") recorder = _RecordingClient() client._client = recorder # type: ignore[assignment] client.chat_complete( model="zenmux-anthropic/claude-sonnet-4-6", system="Health check.", user="Reply OK.", temperature=0.2, max_tokens=16, ) assert recorder.bodies[0]["model"] == "anthropic/claude-sonnet-4.6" assert recorder.bodies[0]["temperature"] == 0.2