Skip to main content

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)

Source distribution for vaad 1.1.0
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)

Table of built distributions (wheels) for vaad 1.1.0
File Interpreter ABI Platform Actions
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.

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files No provenance

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