Skip to content

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. 1
    git clone https://github.com/ayushcody/vakya.git && cd vakya

    Get the code.

  2. 2
    ./vakya setup

    Checks Python 3.10+ and Node 20+, builds backend/.venv, installs the web packages and creates backend/.env.

  3. 3
    nano backend/.env

    Add GNANI_API_KEY and the LLM_ and EMBEDDINGS_ settings, and the Vobiz keys for phone calls (see the table below).

  4. 4
    ./vakya start

    Starts the API on port 8020 and the web app on port 3010 in the background.

  5. 5
    ./vakya doctor

    Checks 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.

Environment settings in backend/.env, what each gives and what happens without it
SettingNeededIt gives youWithout it
GNANI_API_KEYRequiredGnani 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_MODELRequiredA 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_MODELRecommendedHosted embeddings search the business's documents.Document search falls back to keyword search.
VOBIZ_AUTH_ID, VOBIZ_AUTH_TOKEN, VOBIZ_CALLER_IDFor phone callsReal 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_FILEFor the calendarBookings 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.py

    First 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 --keyterms

    The 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 test

    The 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.