How Mila did it: case studies and news
A guest writes to your bot, gets three questions in a row and leaves. Mila is built against that: she answers in the guest’s language, asks one question about the business and one more, and by her third reply at the latest gives one line of value for that business and a trial button. The invoice comes as a card, and a scenario exam checks all of it after every edit. Every line below links to the code.
For an owner whose bot gets guests from the site, ads, live streams and tracking links.
The guest’s goal is to see in 3–4 turns how Mila helps their business, and to get a trial. Mila’s goal is to bring the guest honestly to a decision: to buy or “not now”. The rules come from Mila Tashkent: after them the “Customer path” exam passed 15 of 15. guest-path:10 guest-path:9 CHANGELOG.md:84-85
Russian, Uzbek or English — judged by all of the guest’s texts in the conversation, not by one word, the @name or the account language. A photo without a caption gets the language of their last text.
guest-path:12-15By her third reply at the latest: one line of value for the guest’s business and a trial button. A third reply without an offer is a mistake.
guest-path:17-20A picture and payment methods as buttons. Payment details are not repeated in the text if a button already has them.
guest-path:22-23“Find the owners in that chat” gets a soft no, a legal way with the guest’s own contacts and a trial. A bare no is a mistake.
guest-path:28-29A one-line example for the guest’s business: “a photo of the menu or three questions guests often ask”.
guest-path:31-32A guest who came by a tracking tag — partner, profession, live stream, gift — continues that topic; the main product is not pushed first.
guest-path:34-35Getting to know the guest is one question about the business and one follow-up. If the guest says “it depends” or “I don’t know”, Mila stops asking and proposes. guest-path:17-20
Already offered twice? She does not repeat it a third time and takes another way: a call with people, or an example. guest-path:17-20
The greeting, buttons and tag texts are in the guest’s language too: tags have _uz and _en fields. Nobody is moved to Russian. guest-path:12-15
The guest chose the trial — Mila sends the invoice card: a picture and payment methods as buttons. She says one phrase: “Choose a method on the card; if it is a transfer, send the screenshot here”. guest-path:22-23
A guest from abroad gets methods without the local currency, Telegram Stars or USDT; local methods are for those who pay locally. guest-path:24
“We will invoice you tomorrow”, or “pay with the button” when there is no button, she does not say. A transfer screenshot is checked for the amount, the recipient, the date and the status; when in doubt it is “I will check and come back”, not “received”. guest-path:25 guest-path:26
The owner’s word on 17.10.2026: run the fast check often, the live simulation now and then. Scenarios live in one yaml file: id, title, say — the guest’s lines in order, must, must_not, required. The fast run and the live run read the same file, otherwise the scores do not compare. exam:9 exam:11-13 exam.example.yaml:1-2
The fast run takes minutes, after every edit: the same prompt as in the real bot, a fresh session for each scenario, the guest’s lines one by one. A separate model turn judges the replies against must and must_not: pass or fail, with a word-for-word quote. exam:15-16 express_exam.mjs:62-73 exam:17 express_exam.mjs:41-50
The report header carries the prompt’s sha256 — compare it with the prompt your bot really uses. exam:16 express_exam.mjs:100 README.md:10
$ bun tools/express_exam.mjs \
--yaml docs/exam-example/exam.example.yaml \
--prompt docs/exam-example/guest-prompt.example.md \
--repeat 3
With --repeat 3 each scenario runs three times and the result is “k of 3”: the model’s spread is shown, not hidden. A scenario passes by majority.
Mila’s last reply is swapped for a known bad one — a price list, “we will invoice you tomorrow”, a service mark. The judge must say “fail”. If it does not, the judge is not trusted.
exam:19 express_exam.mjs:92-97 exam.example.yaml:26-27The bridge’s service marks are cut out and buttons are shown as words: the judge reads the conversation the way the guest does.
express_exam.mjs:37-39A user account writes to the bot as a guest. Before each scenario the guest is fully reset: session, pictures, greeting, language, tag, turn counter, cards, invoices — everything for that id, and only for test ids. exam:22-24
The fast and live results are compared point by point; where they differ, Mila works out which of the two is wrong. exam:22-24
The cycle: a failure, a one-line lesson, an edit to the prompt or the bridge, the fast run in minutes, the live run at night. The third identical remark goes into the rules. exam:26-27
skills/guest-path/SKILL.md that Mila follows in every talk with a guest, together with client-chat and lead-qualify. Whether she keeps them, the exam shows. guest-path:3 client-chat:9 lead-qualify:10tools/express_exam.mjs; the live run is described in the skill. exam:22-24 express_exam.mjs:1-4put-gostya and ekzamen are now guest-path and exam; the old folders keep script paths working until v1.6.0. put-gostya/MOVED.md:1-6 ekzamen/MOVED.md:1-6 CHANGELOG.md:79-80exam.yaml with 6 patient scenarios: booking, price, urgent pain, medical advice, Uzbek, an illegal request. packs/clinic/README.md:22 packs/clinic/exam.yaml:4-37| File | What it does |
|---|---|
| skills/guest-path/SKILL.md | the guest path: language, third reply, invoice, soft no, example, tag |
| skills/exam/SKILL.md | the exam: one yaml, fast and live runs, planted failures |
| tools/express_exam.mjs | the fast run: scenarios, judge, --repeat, planted failures, report |
| docs/exam-example/README.md | how to run the fast exam |
| exam.example.yaml | example scenarios and a planted failure |
| packs/clinic/exam.yaml | the clinic pack’s exam |
The kit is open: skills, hooks, tools and templates. Put your guest prompt next to exam.example.yaml and run the fast exam: the report shows which scenarios pass.
Facts on this page: github.com/shakhruz/mila (main, 570db38), checked 28 Oct 2026. The guest’s lines in the phone are scenario s02 from docs/exam-example; Mila’s replies there are an illustration. “Mila”, “MILAGPT” and the logo are trademarks of MILAGPT.