Reference implementation of the OVOS formal specifications — the low-level, dependency-light primitives those specifications describe.
OVOS components reimplement template expansion, resource loading, and language matching in several places, and the copies drift. This package is the single conformant implementation those components — and any third-party tool — can depend on.
| Tool | Spec | Code |
|---|---|---|
| Sentence template expander | OVOS-INTENT-1 v2 | expansion.py |
| Locale resource loader | OVOS-INTENT-2 | resources.py |
| Dialog renderer | OVOS-INTENT-2 §4.2 | dialog.py |
| Prompt renderer | OVOS-INTENT-2 §4.4 | prompt.py |
| Language-tag matching | OVOS-INTENT-2 §2.2 | language.py |
| Bus message envelope | OVOS-MSG-1 | message.py |
ovos-spec-lint locale linter |
OVOS-INTENT-1 / -2 | lint.py |
pip install ovos-spec-tools # core — no dependencies
pip install ovos-spec-tools[langcodes] # adds the smart language fallbackRequires Python 3.10+.
from ovos_spec_tools import (expand, LocaleResources, render, render_prompt,
closest_lang, Message)
expand("(turn|switch) [the] light") # all 4 sentences it denotes
res = LocaleResources("my-skill/locale")
res.load_intent("play", "en-US") # a skill's intent samples
render(res.load_dialog("weather", "en-US"), # a spoken response
slots={"temperature": 21})
render_prompt(res.load_prompt("system", "en-US"), # a language-model prompt
slots={"query": "what time is it"})
closest_lang("en-AU", ["pt-BR", "en-US"]) # 'en-US'
# OVOS-MSG-1 envelope: a bus message and its 'send back to the asker' reply
m = Message("ovos.intent.list", {}, {"source": "skill.id"})
res = m.response({"intents": ["..."]}) # 'ovos.intent.list.response'
res.serialize() # single UTF-8 JSON objectovos-spec-lint my-skill/locale # validate a locale folderA zero-to-hero guide lives in docs/:
- Getting started — install, and a first taste of every tool.
- Sentence templates — the grammar: alternatives, optionals, slots, vocabulary references, malformed forms.
- Locale resources — the
locale/folder, the six file roles, loading across languages, override precedence. - Dialog — choosing and filling a spoken response, and rendering language-model prompts.
- Language matching — tag standardization, distance, and closest-match resolution.
- Bus messages — the on-the-wire envelope, the
forward/reply/responsederivations, and the session carrier. - Linting — validating a locale folder, on the CLI or in CI.
- API reference — every public name, in brief.
Runnable example scripts are in examples/.
Developed by TigreGótico for OpenVoiceOS.
This project was funded through the NGI0 Commons Fund, a fund established by NLnet with financial support from the European Commission's Next Generation Internet programme, under the aegis of DG Communications Networks, Content and Technology under grant agreement No 101135429.
Apache 2.0
