Spaces:
Runtime error
Runtime error
| # Demo runbook | |
| One page. Everything measured, nothing assumed. | |
| ## Before you leave | |
| ```bash | |
| cd scribe/frontend && npm run build | |
| ``` | |
| **Always rebuild after `npm run e2e`.** The e2e build points the bundle at | |
| `https://carepath-e2e.example` and the served app silently breaks. This has cost | |
| an hour once already. | |
| Confirm the Vietnamese voice is staged at a **short** path: | |
| ```bash | |
| ls models/vi-tts/espeak-ng-data | |
| ``` | |
| espeak-ng reads that directory with a native call that fails past the Windows | |
| `MAX_PATH` limit, so the model cannot live in the HuggingFace cache. | |
| ## Run it | |
| ```bash | |
| uvicorn carepath.main:app --app-dir scribe --port 8000 | |
| ``` | |
| `.env` is already set to `PROVIDER_MODE=demo`. Open **Chrome** at | |
| `http://127.0.0.1:8000/kham-song-ngu/`. | |
| Demo mode is scripted and makes **zero outbound network calls** — verified by | |
| running the whole flow with the socket connect path poisoned. The venue wifi | |
| cannot break the demo. | |
| ## The four minutes | |
| | Beat | What you do | What the judge sees | | |
| |---|---|---| | |
| | **Problem** | Open `/` first and **wait two seconds before speaking** | A Vietnamese prescription at full size, then the English resolving under each line. Scroll once: 29,5% against 49,1%, the three highest-risk moments, the two priced incumbents | | |
| | **Start** | Age 34, nam, "nổi mẩn da" | One screen, no login, no settings | | |
| | **Conversation** | Type or speak the scripted lines | English in, Vietnamese out, entity chips appearing | | |
| | **Safety** | *"I take 15 milligrams"* | Red gate, 42% confidence, back-translation. **The patient pane shows nothing.** Click **Sửa**, correct to 500 mg, confirm | | |
| | **Paper** | Photograph the prescription | Four lines read, each with drug / dose / frequency chips, all gated | | |
| | **Finish** | Kết thúc và tạo hồ sơ | Vietnamese record, English patient packet, medication list | | |
| Scripted lines are in `interpreter/app/providers/demo_scenario.json`. Anything | |
| off-script falls back to a visible `[en->vi] …` placeholder rather than failing. | |
| The landing page's opening animation is the whole pitch in two seconds — let it | |
| finish before you talk over it. It also sets up the **Paper** beat: the judge | |
| has already seen the object you are about to photograph. | |
| ## What to say when asked | |
| **"Isn't this just Google Translate?"** | |
| The confirm endpoint returns 409 from any state but `awaiting_confirm`. 91 risk | |
| fixtures across 30 named failure modes, including cross-lingual number and | |
| negation mismatch. A translator has no state machine and no clinician. | |
| **"Did the AI decide that was dangerous?"** | |
| No. The vision model only transcribes. Every line goes through the same rule | |
| engine that guards spoken turns, so a look-alike drug name is caught by tested | |
| code, not a model's judgement. | |
| **"What are your numbers?"** | |
| A 50-case set through the live gateway: drug name, numbers, dose units and | |
| laterality all **100%**. Negation polarity **98%**. | |
| If asked about the missing 2%: one case, `Ngưng thuốc` → `Discontinue the | |
| medication`. The negation is preserved; `discontinue` simply is not in our cue | |
| list. We did not add it, because tuning the lexicon until the eval reads 100% | |
| would make the eval measure nothing. That turn was gated for clinician | |
| confirmation regardless — which is the actual point. | |
| Report at `interpreter/eval/reports/ckey/`. Numbers move slightly run to run; | |
| re-run before the pitch if you want the page to match exactly. | |
| ## If something breaks | |
| | Symptom | Do this | | |
| |---|---| | |
| | Microphone denied or mis-hears | Type instead. Every turn has a typed input beside the mic | | |
| | A turn errors | Say it again. Turns are independent; nothing is lost | | |
| | Page reloads mid-visit | It resumes. The visit id is in `sessionStorage` and the server replays the transcript | | |
| | Document read fails | It adds nothing and says so. Move on to finishing the visit | | |
| | Everything is slow | You are on `ckey`. Set `PROVIDER_MODE=demo` and restart | | |
| ## Showing the real AI path | |
| Set `PROVIDER_MODE=ckey` and restart. Measured across 50 turns: **median 15s, | |
| p90 54s, max 206s**. Do one turn, not a whole visit, and say the number out | |
| loud — it is a gateway limit, not an architectural one. | |