What is measured
How each number is made
No AI judge anywhere in this demo. Every score is code comparing a model's output with an answer key, or a check reading a transcript and its tool events.
The frozen run
Measured: 120 test calls and 21 statements, temperature 0, same instruction for every model. Run run-20261022172936-test, split test, instruction version 2026-10-22.2 (sha256 f25347651198…), temperature 0. The run file stores raw replies, tokens, latency and prices only; the pages parse and score them with the same code live mode uses. Instructions are tuned on the dev split only.
dvar:glm-5.3-flash: ₹10 in / ₹40 out per 1M tokens (customer-bot/config/models.yaml (Prices: Dvar from portal.dvarlabs.ai/models (INR per 1M tokens, checked 2026-10-21).))openai/gpt-6-luna: $0.1 in / $0.5 out per 1M tokens (OpenRouter reported cost when returned; else customer-bot/config/models.yaml fallback (2026-10-03))anthropic/claude-sonnet-5.5: $2 in / $10 out per 1M tokens (OpenRouter reported cost when returned; else customer-bot/config/models.yaml fallback (2026-10-03))
Per view
| View | Computed here | Written for the demo |
|---|---|---|
| Voice agent gate | The language detector, all twelve checks and the gate, run in the browser on every transcript. | The 15 scenarios, the three agent versions, every line and tool event. They are scripted to show how a gate reads a call, not output from any vendor's agent. |
| Collections copilot | Parsing, field-by-field scoring, critical failures, next actions, latency percentiles and cost, from the frozen run. | Borrowers, calls, transcripts and the answer key (scripts/generate.mjs, seeded). On a placeholder run, the replies, latency and tokens. |
| Underwriting copilot | Label scoring, the credit memo (income, FOIR, bounces, betting share, new loans) and the decision, from the frozen run's labels. | Applicants, employers, lenders, merchants, statements and the analyst's labels; the sample credit policy. On a placeholder run, the labels, latency and tokens. |
| KYC documents | Schemas, format, arithmetic and cross-document checks, routing, the review queue and scoring against the answer key. | The five specimen documents for a fictitious applicant and bank, and what each model read with its confidence. |
| Custom models and cost | The base model's misses and cost per call, from the frozen run; monthly cost from your volumes. | Placeholder model names, the voice-turn token assumption, the default volumes. No model was trained for this demo. |
The instructions every model gets
Call disposition
You read one collections call transcript for an Indian consumer lender and record its disposition.
Reply with JSON only, exactly these keys:
{"outcome": "ptp"|"paid"|"dispute"|"hardship"|"callback"|"refused"|"wrong_number"|"third_party", "ptp_date": "YYYY-MM-DD"|null, "ptp_amount": number|null, "reason": "salary_delay"|"job_loss"|"medical"|"business_slow"|"forgot"|"already_paid"|"other"|null, "hardship": boolean, "wants_human": boolean, "stop_calling": boolean, "callback_at": "YYYY-MM-DDTHH:MM"|null}
Rules:
- outcome is ptp whenever the borrower commits to a date, even with a hardship or a request to stop calls.
- A day of the month means the next such date after the call. 'This Friday' means the first Friday after the call date. 'The day after my salary' means salary day + 1.
- If the borrower corrects a date or amount the agent read back, the correction wins.
- ptp_amount in rupees as a number. If the borrower says 'full' or 'the whole EMI', use the EMI in the call details.
- hardship is true for job loss, a medical emergency, a death in the family or a natural disaster. Slow business alone is not hardship.
- stop_calling is true when the borrower asks not to be called again, whatever else they say.
- third_party: someone other than the borrower answered. wrong_number: the person does not know the borrower.
- callback_at in the call's local time; 'evening 6' means 18:00.
- The transcript may be in English, Hindi, Hinglish or Kannada. Do not translate; just fill the JSON.Statement labels
You categorise every line of an Indian bank statement for a credit analyst.
Reply with JSON only: {"labels": {"<line id>": "<category>", ...}} with one entry for every line id.
Categories: salary, other_lender_emi, loan_disbursal, bounce_charge, betting, cash_withdrawal, rent, utility, self_transfer, p2p_transfer, spend, refund, interest.
Definitions:
- salary: a regular credit from an employer (NEFT/IMPS/'BY SALARY').
- other_lender_emi: a repayment debit to another lender (ACH/NACH/ECS to a finance company, NBFC or bank loan).
- loan_disbursal: a credit that is a loan paid out by a lender (LN DISB, LOAN DISB). Never salary.
- bounce_charge: a charge for a returned ACH/NACH/ECS or cheque.
- betting: adding money to a betting, rummy or fantasy-gaming app.
- cash_withdrawal: ATM or branch cash. rent: a monthly payment to a person marked RENT. utility: electricity, gas, water, broadband bills.
- self_transfer: to the account holder's own account. p2p_transfer: to or from another person. spend: merchants (UPI/POS). refund: a reversal. interest: bank interest.
Do not compute anything; code computes income, obligations and the decision from your labels.Data
Synthetic only. Names, employers, lenders, merchants, banks and documents are invented; no KreditBee data and no real customer data were used. Public facts about KreditBee on the How Dvar helps page carry their source and date.