Skip to main content

ovos-routing-judge

Who took an utterance, and was it the skill that should have?

One judge for every tool that replays golden utterances (test/end2end/golden_utterances_<lang>.jsonl) against OpenVoiceOS and asks whether each sentence reached the right skill. It is pure Python over the bus messages of one session: no messagebus connection, no UI, no store knowledge, no dependencies. So the same row gets the same verdict wherever it runs:

A failure in CI can then be reproduced on a device and judged the same way (andlo/ovos-klondike-mercantile#48).

Use

from ovos_routing_judge import Claim, in_session, judge

claim = Claim.from_messages(recorded, known_ids=loaded_skill_ids,   # Message objects or dicts
                            session_id=row_session_id)
v = judge(claim, own_ids={"ovos-skill-date-time.openvoiceos"},
          expected="ovos-skill-date-time.openvoiceos:what_time_is_it",
          hung=timed_out, known_ids=loaded_skill_ids)
v.kind     # hit | wrong_intent | captured | other | unhandled | hang
v.taker    # who took it
v.via      # its best signal: intent | provider | ocp | skill | speak
v.detail   # one line on what happened

Claim.observe(message, known_ids) folds messages in one at a time, for a live run that wants to know as soon as something matched.

known_ids is a filter by default: only loaded skills can take a row, so a pipeline plugin's own intent with nothing behind it is unhandled. A caller whose skill list may be incomplete (a live device with skills in other containers) passes strict_known=False: known skills still win, anyone else is the fallback.

Verdicts

kind meaning
hit the row's skill took it (with the expected intent, when the row names one)
wrong_intent the row's skill took it, and another of its intents is what fired (no visible intent at all is a hit)
captured the row's skill was waiting for an answer (get_response / converse) and took the sentence as that answer
other another skill took it (taker); a store can split this further
unhandled nobody took it, or only a pipeline stage with no skill behind it
hang nobody took it and the caller timed out

What counts as taking a sentence

Signals come in tiers; the taker is the first known skill in the best tier:

  1. intent: <skill_id>:<intent> dispatched, ovos.intent.matched, or a pending <skill_id>.converse.* capturing it
  2. provider: a pipeline plugin asked it for content (ovos.common_reading.fetch_content.<skill_id>)
  3. ocp: OCP picked its result (ovos.common_play.play media, or the first track of play / search.populate without a player)
  4. skill: handler start, a fallback that answered (fired as <skill_id>:fallback), common query's question:action (fired as <skill_id>:common_query)
  5. speak: it spoke in this session (speak or core 3's ovos.utterance.speak)

ovos.intent.unmatched means nobody, whatever else was seen.

With session_id, other sessions' messages are ignored, and a message without a session can show an intent, a provider or an OCP pick but never a tier 4 or 5 claim: unrelated skills' background activity (a scheduled event's handler, a fallback probe's reply) arrives without a session and is not theft (learned in ovos-test-harness's fleet suite).

Intent names are compared in one spelling: Name.intent (ovos-workshop 1.x) vs Name, CamelCase in older releases vs snake_case, padatious what.time.is.it vs padacioso what_time_is_it. A row with "intent_type": "ocp" must go through OCP.

The contract

tests/fixtures/cases.json holds recorded message sequences and the verdict each must get. When a core changes its signals, a case goes in there and every tool using the package gets the fix.

License

Apache-2.0

Metadata

Release files for ovos-routing-judge 0.0.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ovos-routing-judge 0.0.4
File Size Uploaded
ovos_routing_judge-0.0.4.tar.gz 15.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ovos-routing-judge 0.0.4
File Interpreter ABI Platform
ovos_routing_judge-0.0.4-py3-none-any.whl Python 3 none any Details

Total release size: 31.1 kB

Release files / ovos_routing_judge-0.0.4.tar.gz

Download URL ovos_routing_judge-0.0.4.tar.gz
Size 15.9 kB
Tags Source
SHA-256 checksum
How to use checksums
68cc093a50183732e7ad2463267587a5be1988e64a63b9296724e1e8f3766bef
BLAKE2b-256 checksum
How to use checksums
7aa682376d0d610fb8a7e0cd10a901bffbcb7c585927c142139bf2e43a60add9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / ovos_routing_judge-0.0.4-py3-none-any.whl

Download URL ovos_routing_judge-0.0.4-py3-none-any.whl
Size 15.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9eb9c476671977ccbafe7dc57a58b7550cca15262594900695f0bd87aaac74fd
BLAKE2b-256 checksum
How to use checksums
8b3f1652a4d9619703346aa737b8270ac954b311dde6f7d658674e387da9a31f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release history Release notifications | RSS feed

0.0.5

2 release files

This release

0.0.4 This release

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page