hermes(agent): accept bounded raw Jetson votes
All checks were successful
Tests / Declarative: Post Actions passed: 224

This commit is contained in:
jenkins 2026-08-10 22:11:42 -03:00
parent 5d4cb71b90
commit 2f5780ebf9
2 changed files with 24 additions and 3 deletions

View File

@ -276,6 +276,17 @@ def _classifier_input(text: str) -> str:
return text[:400] + "\n...\n" + text[-595:]
def _parse_scalar_vote(content: Any, codes: tuple[str, ...]) -> str | None:
"""Accept Ollama's raw or JSON-string rendering of one bounded vote."""
raw = str(content or "").strip()
try:
value = json.loads(raw)
except (TypeError, ValueError, json.JSONDecodeError):
value = raw
value = str(value or "").strip().upper()
return value if value in codes else None
def _jetson_scalar(
text: str, prompt: str, codes: tuple[str, ...], timeout: float
) -> tuple[str | None, int]:
@ -300,12 +311,13 @@ def _jetson_scalar(
try:
with urllib.request.urlopen(request, timeout=timeout) as response:
envelope = json.load(response)
value = json.loads(envelope.get("message", {}).get("content", ""))
value = _parse_scalar_vote(
envelope.get("message", {}).get("content", ""), codes
)
except (OSError, TimeoutError, ValueError, TypeError, json.JSONDecodeError):
return None, round((time.monotonic() - started) * 1000)
value = str(value or "").strip().upper()
latency_ms = round((time.monotonic() - started) * 1000)
return (value if value in codes else None), latency_ms
return value, latency_ms
def _validated_local_route(

View File

@ -135,6 +135,15 @@ def test_local_classifier_accepts_only_bounded_route_decisions():
assert (partial.provider, partial.effort) == ("codex", "medium")
def test_scalar_vote_accepts_raw_and_json_strings_but_remains_bounded():
codes = ("C", "A")
assert router._parse_scalar_vote("C", codes) == "C"
assert router._parse_scalar_vote('"A"', codes) == "A"
assert router._parse_scalar_vote(" codex ", codes) is None
assert router._parse_scalar_vote("C\nA", codes) is None
def test_jetson_requests_separate_bounded_provider_and_effort_votes(monkeypatch):
calls = []