Files
hermes-webui/tests/test_732_gateway_routing_metadata.py
T
2026-05-05 02:26:55 +00:00

106 lines
4.2 KiB
Python

"""Regression coverage for #732 LLM Gateway routing metadata display."""
from pathlib import Path
from api.models import Session
from api.streaming import _normalize_gateway_routing_metadata
REPO = Path(__file__).resolve().parents[1]
STREAMING_PY = (REPO / "api" / "streaming.py").read_text(encoding="utf-8")
MESSAGES_JS = (REPO / "static" / "messages.js").read_text(encoding="utf-8")
UI_JS = (REPO / "static" / "ui.js").read_text(encoding="utf-8")
SESSIONS_JS = (REPO / "static" / "sessions.js").read_text(encoding="utf-8")
STYLE_CSS = (REPO / "static" / "style.css").read_text(encoding="utf-8")
def test_gateway_routing_metadata_is_safely_normalized_from_response_metadata():
metadata = {
"used_provider": "Alibaba Cloud",
"used_model": "deepseek-v3.2",
"requested_provider": "CanopyWave",
"requested_model": "deepseek-v3.2",
"api_key": "fake_credential",
"routing": [
{
"provider": "CanopyWave",
"status": "failed",
"reason": "timeout",
"score": 0.12,
"api_key": "fake_credential",
},
{"provider": "Alibaba Cloud", "status": "selected", "score": 0.91},
],
}
normalized = _normalize_gateway_routing_metadata(metadata, requested_model="deepseek-v3.2", requested_provider="CanopyWave")
assert normalized == {
"used_provider": "Alibaba Cloud",
"used_model": "deepseek-v3.2",
"requested_provider": "CanopyWave",
"requested_model": "deepseek-v3.2",
"provider_changed": True,
"model_changed": False,
"has_failover": True,
"routing": [
{"provider": "CanopyWave", "status": "failed", "reason": "timeout", "score": 0.12},
{"provider": "Alibaba Cloud", "status": "selected", "score": 0.91},
],
}
assert "fake_credential" not in repr(normalized)
def test_gateway_routing_metadata_absent_returns_none_without_placeholder_noise():
assert _normalize_gateway_routing_metadata({}, requested_model="gpt-5.5", requested_provider="openai-codex") is None
assert _normalize_gateway_routing_metadata(None, requested_model="gpt-5.5", requested_provider="openai-codex") is None
def test_session_persists_latest_gateway_routing_and_history_across_reload():
routing = _normalize_gateway_routing_metadata(
{
"used_provider": "provider-b",
"used_model": "model-b",
"requested_provider": "provider-a",
"requested_model": "model-a",
"routing": [
{"provider": "provider-a", "status": "failed"},
{"provider": "provider-b", "status": "selected"},
],
},
requested_model="model-a",
requested_provider="provider-a",
)
session = Session(session_id="732gateway", title="Gateway", gateway_routing=routing, gateway_routing_history=[routing])
session.messages = [{"role": "assistant", "content": "done", "_gatewayRouting": routing}]
session.save()
reloaded = Session.load("732gateway")
assert reloaded.gateway_routing == routing
assert reloaded.gateway_routing_history == [routing]
assert reloaded.messages[-1]["_gatewayRouting"] == routing
compact = reloaded.compact()
assert compact["gateway_routing"] == routing
assert compact["gateway_routing_history"] == [routing]
def test_streaming_captures_gateway_metadata_into_usage_payload_and_assistant_turn():
assert "_extract_gateway_routing_metadata" in STREAMING_PY
assert "usage['gateway_routing']" in STREAMING_PY
assert "_dm['_gatewayRouting']" in STREAMING_PY
assert "s.gateway_routing_history" in STREAMING_PY
def test_frontend_copies_and_formats_gateway_metadata_without_absent_noise():
assert "d.usage.gateway_routing" in MESSAGES_JS
assert "lastAsst._gatewayRouting" in MESSAGES_JS
assert "_formatGatewayModelLabel" in UI_JS
assert "_gatewayRoutingLabel" in UI_JS
assert "msg-gateway-inline" in UI_JS
assert "msg-model-warning-inline" in UI_JS
assert "gateway-failover-inline" in UI_JS
assert "if(!routing)return''" in UI_JS.replace(" ", "")
assert "_formatSessionModelWithGateway" in SESSIONS_JS
assert ".msg-model-warning-inline" in STYLE_CSS