Run it yourself.
Five commands, three ports and a few keys. The Gnani and language model keys switch on speech and replies; the Vobiz keys switch on the phone line.
Five commands.
- 1
git clone https://github.com/ayushcody/vakya.git && cd vakyaGet the code.
- 2
./vakya setupChecks Python 3.10+ and Node 20+, builds backend/.venv, installs the web packages and creates backend/.env.
- 3
nano backend/.envAdd GNANI_API_KEY and the LLM_ and EMBEDDINGS_ settings, and the Vobiz keys for phone calls (see the table below).
- 4
./vakya startStarts the API on port 8020 and the web app on port 3010 in the background.
- 5
./vakya doctorChecks the machine and the running app and prints a fix for every problem.
The repository is private until the challenge closes, so the clone step needs access: ask the team. Then open http://localhost:3010/desk/try and make a call from the browser.
Three ports.
- 3010
- The web app: this site, the desk at /desk and /verify.
- 8020
- The API. Keep it on your machine; it is never put on the internet.
- 8021
- The phone-only public port. A tunnel points Vobiz at it, and it serves only the call stream, the answer document, the hangup callback, the missed-call link and the web-call page.
Keys, and what you lose without them.
| Setting | Needed | It gives you | Without it |
|---|---|---|---|
| GNANI_API_KEY | Required | Gnani Prisma v3 to listen, Timbre to speak, and vachana-vc-v1 voice cloning. | Vakya cannot hear or speak. There is no second speech model: the desk, schedules and bookings still open, but no call works. |
| LLM_API_KEY, LLM_BASE_URL, LLM_MODEL | Required | A hosted language model, set in .env, writes the front desk's replies and chooses its tools. | No replies: the agent answers every message with a fixed line. |
| EMBEDDINGS_API_KEY, EMBEDDINGS_BASE_URL, EMBEDDINGS_MODEL | Recommended | Hosted embeddings search the business's documents. | Document search falls back to keyword search. |
| VOBIZ_AUTH_ID, VOBIZ_AUTH_TOKEN, VOBIZ_CALLER_ID | For phone calls | Real phone calls through a Vobiz number. ./vakya start opens a tunnel so Vobiz can reach your computer. For missed-call callbacks, make a Vobiz XML Application whose Answer URL is the link from Front desk, Phone number, and attach a number to it; built and tested with fakes, not yet tried on a live number. | Everything else works, including the browser web call. A trial account only calls verified numbers. |
| GOOGLE_CALENDAR_ID, GOOGLE_SERVICE_ACCOUNT_FILE | For the calendar | Bookings sync to a Google Calendar shared with the service account. | Bookings are kept in Vakya's own list. |
Keys live only in backend/.env on your computer. The Gnani paths are integrated but have not run against the live API yet; the first thing to do with a key is the smoke test below.
Check that it works.
backend/.venv/bin/python backend/bench/gnani_smoke.pyFirst contact with Gnani's API with your key: lists voices, runs Prisma on a test clip, renders Timbre in two formats. Prints every reply shape and never prints the key.
./vakya stress --conditions all --provider gnani --keytermsThe acoustic-stress report card on Prisma: the same 24 invented booking calls, clean, 8 kHz, noisy and through a phone codec, with and without keyterms. First run 6 Nov 2026, published on /report-card.
./vakya testThe backend and frontend test suites.
Which machine.
Tried on: Apple M4 with 16 GB, macOS. Linux, Windows (a vakya.ps1 script exists) and Macs with 8 GB are untested.
Every model is reached over the network (Gnani for speech, a hosted language model for replies), so nothing is downloaded and the laptop only has to run Python and Node. A call needs the internet the whole time, and a laptop that stays awake if the phone line is served from it.
Stuck? The FAQ lists what is not ready yet.