Skip to main content

Switchboard

Status: Active

Switchboard decides which OVOS skill should handle what someone says, and stays silent when the speech wasn't meant for the assistant. It replaces OVOS's intent matchers (Padatious, Adapt, Model2Vec) with a few steps that each had to prove themselves on real household traffic before they were kept.

Why

Measured on held-out traffic from a Neon smart speaker and an OVOS desktop (details):

  • Real requests handled correctly: 84% on the speaker and 89% on the desktop, against 42% and 71% for stock OVOS.
  • When it's wrong, it usually does nothing instead of the wrong thing. Stock OVOS ran the wrong skill for 56% of the speaker's requests; Switchboard, for 2%.
  • Overheard speech: of 71 real utterances not meant for the assistant, it acted on 7. Neon acted on all 71.

All of it can be checked: the data, code and results are in switchboard-eval.

How it works

Each step is a separate OVOS pipeline plugin, tried in this order:

  1. Echo: ignore the assistant hearing its own voice.
  2. Exact: if the words match a phrase a skill declares, send it there. No guessing.
  3. Classifier: a small, fast model trained on the installed skills' phrases picks the skill, or decides the speech is "not for me".
  4. LLM (optional, needs a GPU host): for what's left, a language model chooses among the most likely skills, and a second check asks whether the speech was meant for the assistant at all.

Speech that isn't for the assistant goes to Hangup, a skill that quietly records it and says nothing. High-risk requests (unlock, open the garage, shut down, clear data) never run directly: they're held, or with Doublecheck installed, the assistant asks first.

Install

pip install ovos-switchboard-pipeline-plugin ovos-skill-hangup

Then put the steps in mycroft.conf. Switchboard starts in shadow mode: it logs what it would do and changes nothing, so you can compare it with your current setup first. Set "mode": "active" when you're ready.

"intents": {
  "switchboard": {"mode": "shadow"},
  "pipeline": [
    "ovos-switchboard-echo-pipeline-plugin",
    "ovos-stop-pipeline-plugin-high",
    "ovos-converse-pipeline-plugin",
    "ovos-switchboard-exact-pipeline-plugin",
    "ovos-switchboard-classifier-pipeline-plugin",
    "ovos-ocp-pipeline-plugin-high",
    "ovos-switchboard-llm-pipeline-plugin",
    "ovos-common-query-pipeline-plugin",
    "ovos-fallback-pipeline-plugin-low"
  ],
  "ovos-switchboard-llm-pipeline-plugin": {
    "url": "https://your-llm-server/v1/chat/completions", "model": "Qwen/Qwen3-14B-AWQ"
  }
}

The LLM step works with any OpenAI-compatible chat completions endpoint (vLLM, LM Studio, Ollama, a hosted service); add "api_key" if yours needs one. Restart ovos-core and the listener afterwards. No LLM? Leave out the LLM step and its settings; Switchboard still outperforms Adapt, Padatious and Model2Vec without one. docs/configuration.md explains the order, every setting, and which stock matchers to switch off.

Optional: ask before risky requests. By default, high-risk requests (unlock, open the garage, shut down, clear data) are held silently. To have the assistant ask first, install Doublecheck and turn it on:

pip install ovos-skill-doublecheck
"intents": {"switchboard": {"high_risk": "confirm"}}

Limitations

  • Phrases like play {anything} or open {anything} can claim speech meant for another skill.
  • When two skills could fit, it picks one; it never asks "did you mean X or Y?" (Doublecheck only confirms risky requests).
  • Questions between people ("do you think it'll rain?") can be answered if the assistant spoke in the last two minutes.
  • Only English has been measured on real speech. The LLM prompts are English.
  • Measured in one home, on a laptop and a mini PC. Not yet on a Raspberry Pi.

More, with numbers: docs/evaluation.md.

More

Development

uv venv && uv pip install -e ".[test,dev]"
.venv/bin/pytest && .venv/bin/ruff check . && .venv/bin/pylint ovos_switchboard scripts

scripts/check_harness.py <switchboard-eval checkout> checks that this package still makes exactly the decisions that were measured. Python 3.11-3.14, ovos-core 3.7+ (OVOS-PIPELINE-1, INTENT-4).

License

Apache-2.0

Metadata

Release files for ovos-switchboard-pipeline-plugin 1.0.0

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-switchboard-pipeline-plugin 1.0.0
File Size Uploaded Provenance
ovos_switchboard_pipeline_plugin-1.0.0.tar.gz 199.4 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for ovos-switchboard-pipeline-plugin 1.0.0
File Interpreter ABI Platform
ovos_switchboard_pipeline_plugin-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 280.3 kB

Release files / ovos_switchboard_pipeline_plugin-1.0.0.tar.gz

Download URL ovos_switchboard_pipeline_plugin-1.0.0.tar.gz
Size 199.4 kB
Tags Source
SHA-256 checksum
How to use checksums
2acb6d4091dbd336b0a742966b67c4492a7e294179924e931b8d9596e4973680
BLAKE2b-256 checksum
How to use checksums
b749f36d747cc7ed200521a0c69576f91e92221f99cb66f344c1c4603279bf32
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / ovos_switchboard_pipeline_plugin-1.0.0-py3-none-any.whl

Download URL ovos_switchboard_pipeline_plugin-1.0.0-py3-none-any.whl
Size 80.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
da6d5f05f1022c7a74a3ba7da4f365ba2f96e57f9467e7667c5518beee509c8c
BLAKE2b-256 checksum
How to use checksums
d136fc2ac7c026a0c48767546feb4c3d505b7156527832e0568374b9d0238a8c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Security for ovos-switchboard-pipeline-plugin 1.0.0

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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