VARTA
Design time · the workflow author

DAKSH Architecture

DAKSH (दक्ष) (Skilled / Expert)

DAKSH is the LLM that writes a workflow before any call happens. It turns an author's rough description, pasted brief or one-line edit into structured data: steps, branches, NITI rules, condition branches, FAQ, language tables, aliases and clips. VARTA reads all of it during calls without making any LLM calls of its own for it. That split keeps the runtime cheap and language-neutral: adding a language only takes DAKSH work.

DAKSH · design time

GPT-4o and GPT-4o mini, structured JSON only. Can be slow and thorough, because no caller is waiting. Cost is logged per workflow.

VARTA · call time

Reads what DAKSH wrote. Regex and rules first, LLM last. Cost is stamped on every call.

Last reviewed 15 September 2026. The companion page covers the runtime: VARTA Engine Architecture.

System map

Five entry points, one workflow document

Every DAKSH feature follows the same path: a screen in the designer or Build tab, a request, a generator that calls the LLM, and a result that lands on the workflow. What changes is the kind of result, and so how much it has to be checked before it's allowed in.

AUTHOR SURFACE REQUEST GENERATOR · LLM RESULT LANDS ON Designer drawer Step · Draft · Audit AI broadcast bar Proposal request step, draft broadcast, audit Ghost proposers GPT-4o Step mode ≤ 3 ops Ghost ops previewed on canvas browser applies on accept Rebuild as copy paste spec or brief input type detected Rebuild request rebuild from a spec author from a brief Rebuild generator GPT-4o · temperature 0 batches of 6 if truncated Full workflow JSON missing steps repaired imported as a copy DAKSH chat Build tab drawer thread per workflow Chat request converse apply · discard Chat orchestrator + patch applier typed ops · schemas Validated patch all-or-nothing gotos checked after patch Build tab Analyse → Build optional step fillers Workflow request analyse build Stage pipeline named stages TTS synthesis Fields + audio written directly fingerprinted samples Field editors NITI · Conditions · FAQ PRASANG · Locale · Policy on-demand routes rules, FAQ conditions, translate Per-field generators GPT-4o or GPT-4o mini empty result on failure Drafts author reviews then saves Workflow JSON steps branches NITI rules condition branches FAQ reflex phrases interjection cues system lines off-topic keywords slot aliases phonetic variants number words date words PRASANG groups system prompt audio clips step graph VARTA runtime L1 reflex phrases · L2 number words · L3 branches · L5 NITI rules · L6 clips read every call
The purple generators are where the LLM runs. The five rows are checked very differently: row 3 is validated on the server before commit, rows 1 and 5 wait for the author to accept, row 2 comes in as a separate copy, and row 4 writes fields directly as part of a build.
How a change gets in

Four ways DAKSH edits a workflow, and what makes each one safe

DAKSH chat

Typed patch

The chat returns typed operations: add, edit or delete a step, a branch or a NITI rule, or change workflow settings. The server applies them to a copy.

Safe because: typed schemas, per-field edit allowlists, goto checks after the patch, a health audit, all-or-nothing apply.

Designer suggestions

Ghost ops

Proposals appear as "ghost" changes on the canvas: a new step, a retargeted branch, a VIRAM scenario, new side-question keywords. The browser applies them when the author accepts.

Safe because: a person reviews every ghost. Step mode caps at 3 ops; broadcast can only edit.

Rebuild as copy

Full rebuild

A whole workflow from a spec or brief, at temperature 0. When the output would be truncated, it builds in batches of 6 steps and repairs any step that didn't come back.

Safe because: it imports as a copy with new ids, validates the whole step graph, and a guard blocks specs pasted into the wrong mode.

Build tab

Pipeline stages

Named stages write fields straight onto the workflow: extraction, NITI, VIRAM, reflexes, aliases, language data, clips.

Safe because: each stage falls back to empty or heuristic output, so a failed LLM call doesn't break the build. Reflex phrases are the exception: if they fail, the build stops rather than ship an agent that can't recognise "yes".

Author message saved to thread first one thread per workflow Converse last 40 turns + snapshot structured JSON · 3 retries Parse ops schema check invalid → dropped Pending patch shown to author waits for Apply Apply ops deep copy, all-or-nothing gotos vs post-patch steps Commit patch workflow health audit failure counter → 0 Recompile + persist reflex cache · branch kw step graph · save Frozen 3 failures in a row pending patch cleared Apply valid invalid → re-converse with the errors 3rd consecutive failure
Only a patch's own new gotos are checked; broken gotos already in the workflow don't block it. A failed apply is sent back to the LLM with the errors so it can fix its own patch. After 3 failures in a row the thread freezes instead of looping.
Analyse → Build

The build pipeline, in order

Analyse turns the author's prose into a step graph. Build does everything that makes it callable: clips, rules, language data and the compiled graph. Conditions, FAQ, NITI-from-text, VIRAM parsing and locale tokens are not part of this pipeline; the author runs them from the designer.

Analyse

  1. Extract sentences into stepsheuristics after 3 failed retriesLLM
  2. Split compound collection stepsLLM
  3. NITI rules from prose"if X go to step Y" becomes gotosLLM
  4. VIRAM empathy configLLM
  5. Fuzzy-matching configno LLM
  6. Upgrade slot templatesno LLM
  7. UI help textheuristic fallbackLLM
  8. Universal responsesstage
  9. Step fillers + emotionsoff by default since 2026-07-04; when off, LLM-invented fillers are removedopt-in
  10. Neutral fillersstage
  11. Preview step graphauthor reviews before Buildno LLM

Build

  1. Synthesise all clipsreuses audio when the fingerprint matchesTTS
  2. Sync PRASANG groupsno LLM
  3. Carry over FAQ, system promptLLM
  4. Number normalisation mapLLM
  5. Reflex, interjection, drift phrasesif reflex phrases fail, the build stops; interjection cues fall back to built-in defaultsfatal if fails
  6. Runtime text + OOS keywordsonly for languages beyond Hindi and English; cachedLLM
  7. Slot aliases"job" = salaried · only when an API key is setLLM
  8. Phonetic variantsletter rules: aspiration, vowel glide, sibilant, retroflexno LLM
  9. Direction + tone profilestage
  10. Language datafillers · number/letter map · datetime tokens · currencyLLM
  11. Compilereflex cache · branch keywords · step graphno LLM
  12. Pre-cache rule and PRASANG clips, persistrename the draft thread to the workflowTTS
Generator catalog

Every place DAKSH calls the LLM

Every generator asks the model for structured JSON, never free text, so each result can be validated before it touches a workflow. Most use GPT-4o; the narrower field drafts use GPT-4o mini.

GeneratorWhat it writes
Structure
Chat editsConversation turns and a pending patch; drafted prose gets one self-audit revision
Step suggestionsUp to 3 ghost changes for one step
Flow draftGhost changes for the whole flow
BroadcastEdit-only ghost changes across many steps
Rebuild and authorA full workflow imported as a copy; authoring from a brief also returns clarifying questions
Graph auditUp to 8 findings, each with a ghost fix; cached by the workflow structure
Rules and branching
NITI from textRules for a step, from a plain-English sentence
Condition draftsDraft condition branches, schema-checked and audited before the author sees them
FAQ draftsFAQ entries, checked for valid patterns and duplicates
PRASANG groupsSide-question scenario groups used across the whole workflow
VIRAM parsingAn empathy scenario prompt
Language
Language dataFiller words, number and letter maps, email cues, date words and currency multipliers
Slot aliasesWords a customer might use for a slot value
Phonetic variantsLikely mishearings, from letter rules rather than the LLM
TranslationA sibling workflow in another language; any invented step ids are dropped
Locale tokensDate and time words the author reviews and saves
Reflex and runtime catalogsReflex phrases, interjection cues, system lines and off-topic keywords
Helpers
Policy phrasesAbuse and please-wait phrase lists
Test values and L4 dry runInputs for the tool tester, and a dry run of the real L4 prompt
Hand-off to runtime

What VARTA does with each field

Workflow field (written by DAKSH)Read at call time by
Reflex phrasesL1 DHADKAN (धड़कन) (Heartbeat), compiled into a regex cache
Interjection cuesL1 INTERJECT
Off-topic keywordsL1.7 OOS
Filler words · number and letter maps · email cuesL2 PEHCHAAN (पहचान) (Recognition), which cleans the transcript; number words are also used by L1 and L5
Date words · currency multipliersThe date parser and the transcript clean-up
Authored branchesL3 MAARG (मार्ग) (Path)
System promptL4 BUDDHI (बुद्धि) (Intellect)
NITI rules · slot aliases · phonetic variantsL5 NITI (नीति) (Policy), including global rules
Condition branchesThe navigator, L5 NITI and L4
FAQ · PRASANG groupsThe FAQ resolver, and L5 NITI → PRASANG (प्रसंग) (Context)
System linesEvery system line the engine speaks
Audio clipsL6 VANI (वाणी) (Speech), which plays the matching clip
Step graphThe navigator, which walks the graph
Guardrails

How DAKSH is kept from breaking a workflow

Schemas and validation

Typed operation schemas with per-field allowlists, goto checks after every patch, workflow health audits, and full graph validation on rebuild. If a drafted condition has any error or warning, all drafts for that step are dropped.

Truncation is detected

A reply cut off at the token limit is detected in spec checks, rebuild, authoring and language data. A truncated reply is rejected or split into batches; it's never accepted half-finished.

Failures return empty

Conditions, FAQ, aliases, locale tokens and language data return empty defaults on failure, and analyse falls back to heuristics, so the build keeps going. A missing API key gives a clear message in the chat, and 401/429 errors are explained.

Authors keep control

Nothing is auto-applied: patches wait for Apply, and ghosts wait for accept. Rejected conditions go into a ledger so they aren't proposed again, and steps with an approved rule are locked.

Caches

Chat threads and shared phrase catalogs are cached, audits are cached by the workflow's structure, and audio is reused by a SHA-256 fingerprint over text, SSML, voice, model, language, provider and speech rate.

Language stays out of the engine

Everything the engine says, recognises or parses is DAKSH-written data. Supporting a new language means running DAKSH again, not changing the engine.