vaad
vaad is the value guard between speech-to-text and your tools for Hindi/Hinglish agents. It never lets a
wrong amount, time or date execute silently: it is sure, or it asks. It parses spoken-form values ("dedh
hazaar" = 1500, "saade aath baje", lakh/crore, quantities, phone numbers, tense-aware "kal"), with a span, a
calibrated confidence and an audit trail, and works as a library, a CLI, a Pipecat processor
(pip install "vaad[pipecat]"), a LiveKit Agents mixin (pip install "vaad[livekit]") or an OpenAI-compatible gateway. See docs/POSITIONING.md.
vaad guard "kal saade aath baje dedh lakh rupaye bhej do" --ref-date 2026-11-09
# use: amount 150000 confirm: "₹1,50,000, sahi hai?" ask: "'saade aath baje': subah ya shaam?"
Live demo against a local model (Qwen3.5-4B, synthetic requests; python examples/demo_payment.py,
transcript):
User: 9876501234 pe paanch sau rupaye bhej do
without vaad: send_money(amount_inr=50000) <- wrong in 4 of 4 runs
with vaad: "₹500, sahi hai?"
User: 98123 45670 ko dedh hazaar transfer kar do
without vaad: send_money(amount_inr=1000) <- wrong in 4 of 4 runs
with vaad: "1,500, sahi hai?"
This compares the bare model with the guard's output; it is not an end-to-end run of the guard in front of the model.
from datetime import date
from vaad.canon import annotate_turn
annotate_turn("mera order kal tak bhej do, dedh hazaar rupaye", date(2026, 10, 24))
# 'mera order kal [=2026-10-25] tak bhej do, dedh hazaar [=1500] rupaye'
What is measured (details and caveats in docs/RESULTS.md, calibration in docs/CALIBRATION.md):
- On 189 held-out human-typed tool-calling tasks, the normalizer raised pass^4 by 16 to 22 points on three
small models (all intervals above 0) and cut wrong values from 23-42% to 7-9% with
canon.mode: both. - Outputs the parser is at least 90% sure of were right 97-100% of the time on held-out data.
- These tasks were written to contain values. In real chat such values are rare, and spoken input through ASR is not tested yet (planned for v2, see docs/AUDIO_SPEC.md).
- Lexicons are AI-written and not yet native-reviewed.
Status: pre-alpha. See docs/ for the plan, results, methods, data, architecture and decisions.
Development
Requires uv.
uv sync
uv run pytest # tests
uv run ruff check . && uv run ruff format --check .
uv run mypy # strict on canon/, router/, grammar/
uv run python -m harness.leakage # gate 10
uv run vaad serve --config config/vaad.yaml # copy from config/vaad.example.yaml
Layout
| Path | What |
|---|---|
src/vaad/server/ |
FastAPI proxy, OpenAI-compatible routes, tracing |
src/vaad/router/ |
language ID, difficulty signals, routing policy |
src/vaad/grammar/ |
schema tightening, post-generation validation |
src/vaad/canon/ |
the canonicalizer: numbers, money, dates, times, phones, units |
harness/ |
task sets, runner, metrics, bootstrap intervals, reports |
quants/ |
Indic-calibrated GGUF quant recipes and reliability cards |
tests/ |
unit, golden, property and integration tests |
License
Apache-2.0.
Metadata
Release files for vaad 1.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| vaad-1.1.0.tar.gz | 5.7 MB | Without provenance | Details for vaad-1.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| vaad-1.1.0-py3-none-any.whl | Python 3 | none | any | Details for vaad-1.1.0-py3-none-any.whl |
Total release size: 5.7 MB
Release files / vaad-1.1.0.tar.gz
| Download URL | vaad-1.1.0.tar.gz |
|---|---|
| Size | 5.7 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f186c2c8bcaa9ea345bd29345d3aeddd7c43d116d2ac35c7df638aa720d2ca60
|
|
BLAKE2b-256 checksum How to use checksums |
be5727e7c475a9fa43330d55e127ceb42868de58ad509bcfad830cdcf9de20e4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.13
|
Release files / vaad-1.1.0-py3-none-any.whl
| Download URL | vaad-1.1.0-py3-none-any.whl |
|---|---|
| Size | 63.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3a2eeb44c60813b96d4768340dcf68d39ee9d79d07ac4fb583679ecaf6231e06
|
|
BLAKE2b-256 checksum How to use checksums |
6e98aefb1153e45b5272262a43dfb76e55e587a97bb40b4617cc5c3abeba20f5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.13
|
Security for vaad 1.1.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.