Tracking issue for PR #20 — OVOS-TRANSFORM-1: Transformer Plugins
The OVOS transformer ecosystem runs six plugin types as ordered chains at fixed points around the utterance lifecycle: audio (pre-STT), utterance (post-STT), metadata (post-utterance), intent (post-match, pre-dispatch), dialog (post-skill, pre-TTS), and TTS (post-TTS, pre-playback). All six share the same shape but have no normative contract.
Proposal
OVOS-TRANSFORM-1 unifies the six types under one spec:
- One abstraction — a transformer is a black-box component identified by an opaque
transformer_id that always runs at its hook (unlike a pipeline plugin, which decides whether to claim).
- Six lifecycle hooks at the fixed points above.
- Per-type IO contracts — permitted mutations, canonical use cases, and a Where LLMs fit note per stage.
- Intent transformer = canonical home for system-entity injection (dates, numbers, durations, ordinals) into match captures. The agreed pathway for applying typed normalisation globally.
- Ascending priority (lower number = earlier; default 50). Deployer-configured explicit order wins over priority.
- Per-session chain overrides via six optional
session.*_transformers list fields.
- Passive registration index per type —
ovos.transformer.<type>.list / .response.
- Robust error handling — exceptions and shape violations become no-op transforms; the orchestrator logs and proceeds.
Out of scope
- Typed-value schemas for injected entities (future text-normalisation spec).
- Per-plugin behavioural contracts.
- Cross-transformer coordination protocols.
- Hot reload, timeout policy, plugin loading and discovery.
Tracking issue for PR #20 — OVOS-TRANSFORM-1: Transformer Plugins
The OVOS transformer ecosystem runs six plugin types as ordered chains at fixed points around the utterance lifecycle: audio (pre-STT), utterance (post-STT), metadata (post-utterance), intent (post-match, pre-dispatch), dialog (post-skill, pre-TTS), and TTS (post-TTS, pre-playback). All six share the same shape but have no normative contract.
Proposal
OVOS-TRANSFORM-1 unifies the six types under one spec:
transformer_idthat always runs at its hook (unlike a pipeline plugin, which decides whether to claim).session.*_transformerslist fields.ovos.transformer.<type>.list/.response.Out of scope