---
title: Voice Reach V1
colorFrom: indigo
colorTo: green
sdk: docker
app_port: 7860
suggested_hardware: t4-medium
tags:
- track:backyard
- sponsor:openai
- sponsor:nvidia
- achievement:offgrid
- achievement:offbrand
- achievement:llama
- achievement:sharing
- achievement:fieldnotes
---
# Voice Reach V1
Voice Reach V1 is a metime.to voice contact widget that lets a site visitor
speak in Hindi or Hinglish, review an editable English contact message, and
send it through a site-owner contact flow.
To use it: add `` to your website
- it was tested on a few business owner's websites but I didn't have enough time to get privacy sorted, so it's pulled down.
NOTE: This is designed to be run 'Off Grid', so needs HF runtime (GPU) but since I'm unable to add credits to this org, it uses Modal.
NOTE: This competes for 'Tiny Titan' prize
## Links
- App: [build-small-hackathon-voice-reach.hf.space](https://build-small-hackathon-voice-reach.hf.space)
- Demo video and social-media post: [X post](https://x.com/curious1n/status/2066666105104642515)
- Source repo: [curious1n/HF-build-small-hackathon](https://github.com/curious1n/HF-build-small-hackathon)
- HF Article: [Voice Reach Running Notes](https://huggingface.co/blog/build-small-hackathon/voice-reach-running-notes)
- Agent traces: [build-small-hackathon/voice-reach-agent-traces](https://huggingface.co/datasets/build-small-hackathon/voice-reach-agent-traces)
## Demo Flow
1. Open the widget and choose `Hindi` or `Hinglish`.
2. Record or submit a spoken visitor request.
3. Review the generated English message.
4. Edit the message if needed and submit it through the demo contact ledger.
5. Inspect recent trace summaries through `/api/traces`.
## Models And Runtime
- ASR: `nvidia/nemotron-3.5-asr-streaming-0.6b` through NeMo/PyTorch. (works like a charm)
- Text: `CohereLabs/tiny-aya-fire-GGUF:Q8_0` through `llama.cpp`. (was best fit for my use-case but the translation needs some evals)
- Official Space runtime: `VCW_MODEL_RUNTIME=hf_space` on `t4-medium`.
- Local default without a selected real runtime: deterministic fallback,
clearly labeled with `fallback_used=true`.
- When a UI-selected runtime is unavailable, `Record message` is disabled and
the line below explains `Why it's disabled`; deterministic output is not
substituted for selected runtime failures.
- Submission path: Space-local model runtime; Modal is testing-only and is not
part of the official submission runtime.
## Evidence
- Recent runtime traces are exposed by the app through `/api/traces`.
- The linked agent-trace dataset is the review surface for packaged trace
evidence.
- Hosted proof requires a trace with `fallback_used=false`.
- The collapsed debug panel and `/gradio` status panel preserve runtime
provenance for reviewers.
Proof claimed by this Space README:
- The Space package loads and validates the metime.to onboarding packet.
- The UI renders a custom visitor-first widget with only Hindi and Hinglish
speech modes.
- The app records trace summaries for processing and send events.
Not claimed by this Space README:
- Broad ASR quality across real traffic.
- Production email delivery.
- Judge-ready status without a fresh public submission check.
## Run Locally
```bash
python3 app.py --check
python3 app.py --port 7860
```
Non-inference hosted smoke:
```bash
python3 tools/smoke_api.py --include-traces
```
This checks `/health`, `/api/packet`, and recent `/api/traces` without sending
new audio through the paid model path. To intentionally test `/api/process`,
pass `--process-audio ` with `--allow-model-request`.
Tiny-aya text-only hosted smoke:
```bash
python3 tools/smoke_api.py \
--text-transcript "Namaste, mujhe pricing details chahiye." \
--speech-mode hinglish \
--allow-model-request \
--include-traces \
--timeout 180
```
This checks `/api/text-smoke` with the Space-local GGUF text model. It is useful
for prompt-quality checks and does not claim ASR proof.
Runtime modes:
- Modal testing: `VCW_MODEL_RUNTIME=modal` calls the `voice-reach-v1-modal`
Modal GPU sidecar from the HF Space CPU shell. The sidecar runs
`nvidia/nemotron-3.5-asr-streaming-0.6b` through NeMo on CUDA and
`CohereLabs/tiny-aya-fire-GGUF:Q8_0` through CUDA llama.cpp.
Runtime is configured with `min_containers=1` and `scaledown_window=600`.
After deploy or rollover, warm it with one text request and one audio request
so both Q8 Tiny Aya and NeMo ASR are loaded in memory. Latest measured hot
full-audio path: `4.5s` HTTP, `2.1s` Modal total, `1.1s` ASR, `0.96s` text,
`fallback_used=false`.
- Local Modal config is auto-loaded from
`product/5-idea-voice-contact-widget/.env.modal.local`.
Already-exported environment variables take precedence.
- Local Modal runtime selection, without starting Modal, is captured in
`../modal/local-modal-runtime.env.example`. It sets `VCW_MODEL_MODE=real`,
`VCW_MODEL_RUNTIME=modal`, and `VCW_ALLOW_RUNTIME_SWITCH=1`; endpoint URL and
bearer auth still come from the ignored `.env.modal.local`.
- HF Space proof: `VCW_MODEL_MODE=real` on `t4-medium`.
- Model Runtime UI switch:
- Always shows `HF hackathon space`, `HF personal space`, and `Modal`.
- `HF personal space` and `Modal` are enabled only when
`VCW_ALLOW_RUNTIME_SWITCH=1`.
- `HF personal space` is a server-side proxy to
`APP_HF_PERSONAL_BASE_URL`; browser clients never receive HF or Modal
tokens.
- A selected runtime must be available before recording starts. Unavailable
selected runtimes block the recorder and `/api/process` or
`/api/text-smoke` returns `424` with `fallback_used=false`.
- Official submission config clears the switch flag and proxy secrets.
Deployment targets are recorded in `../deployment-targets.json`:
- `modal-test`: testing only; HF Space CPU Basic plus Modal model sidecar; UI
switch enabled.
- `hf2-t4-test`: testing only; `${HF_2}/voice-reach` on `t4-medium`; UI switch
enabled.
- `hackathon-t4-submit`: official submission; `${HF_HACKATHON}/voice-reach`
on `t4-medium` with `VCW_MODEL_RUNTIME=hf_space`; UI switch disabled.
Switch the official Space with:
```bash
python3 product/5-idea-voice-contact-widget/v1/deploy_space.py \
--target hackathon-t4-submit \
--configure-target-runtime \
--request-hardware
```
## Known Limits
- Full audio ASR proof still depends on fresh hosted traces.
- The send step uses `demo-ledger.jsonl`; it is not production email delivery.
- Paid hardware or model-path retesting should follow the project approval
gates before being run.