Inspiration
A pediatric respiratory assessment should work locally on a budget laptop without handing clinical escalation to a language model.
As a licensed medical doctor and builder in Nigeria, I have seen how unreliable connectivity, limited hardware, privacy concerns, and staff shortages shape frontline care. A useful health tool cannot assume continuous cloud access. It also cannot let fluent model output replace observations made by a trained or supervised worker.
Triage-0 began with one authority rule: recorded observations and deterministic policy control escalation. A local model may help summarize the recorded context and find supporting references, but it must not invent a respiratory rate, diagnosis, prescription, or emergency decision.
What it does
Triage-0 is a supervised pediatric respiratory assessment prototype for trained or supervised frontline workers. The workflow records the child's age, a cough or difficult-breathing concern, a one-minute respiratory rate, measurement quality, and seven explicit danger and breathing observations.
The application checks recorded emergency observations before any model path, applies age-banded WHO IMCI fast-breathing thresholds in code, and fails closed when required information is missing. Complete supported cases can search a local WHO reference store and run MedPsy through QVAC SDK 0.13.3 for bounded, on-device assistance.
The public result is an assessment finding, not a diagnosis. It does not show disease classifications, medicines, doses, prescriptions, treatments, or management plans.
How we built it
We built two connected runtime and evidence paths around one checksum-locked GGUF:
- Structured assessment: TypeScript and Zod validate age and recorded observations.
- Deterministic policy: Explicit code owns emergency precedence, completeness checks, and WHO age-banded respiratory thresholds.
- Local supporting evidence: An offline store contains 994 indexed WHO passages for bounded reference lookup.
- Product inference: The exact MedPsy model runs locally through QVAC SDK 0.13.3 with an armed no-egress guard.
- Official ADTC evaluation: The identical GGUF runs directly through CPU-only
llama.cppand the official participant profiler. - Local interface: Node.js and Express serve a compact HTML, CSS, and vanilla JavaScript application for desktop and mobile use.
The model is medpsy-1.7b-q4_k_m-imat.gguf, exactly 1,282,439,360 bytes, with SHA-256 41ee947d9cce72ec657577219fd1798fabeabf0d832217fe23c9d6d3d18d5880. download_model.sh downloads that credential-free artifact, supports resumable transfers, and verifies the bytes and checksum. GGUF files and partial downloads remain ignored and untracked.
This makes the ADTC stack integral . The official template defines the repository contract, metadata.json freezes the model and exactly two prompts, the downloader provisions the model, direct llama.cpp provides the official scored path, and the participant profiler produces the submission evidence. QVAC provides the separate local product orchestration over the same model bytes.
Challenges we ran into
The hardest challenge was separating evidence that the pipeline ran from a result that is actually useful. An earlier projection could turn an internal classification rationale into an unsupported patient fact, such as saying there was no fast breathing when no respiratory rate had been recorded.
The local inference engine accepts one generation job at a time, so we implemented queueing, cancellation, timeout, and clean shutdown behavior instead of pretending a small laptop can run unlimited concurrent generations.
Accomplishments that we're proud of
- One verified model identity: Repository, revision, filename, byte count, SHA-256, quantization, and runtime path are frozen across the product and profiler contracts.
- Real local model execution: The verified MedPsy GGUF loaded through QVAC SDK 0.13.3 and completed an on-device assessment run.
- Real local evidence retrieval: The application searched 994 WHO passages while the inference-time egress guard was armed with zero violations.
- Deterministic emergency authority: Recorded emergency observations complete before QVAC, retrieval, or model access.
- Narrow public claims: Internal disease classification cannot recreate public diagnosis, medicine, dose, treatment, or management-plan output.
- Reproducible prior-work disclosure: A 76-entry manifest binds imported files to the exact public Triage-0 baseline commit.
- Accessible interface checks: Desktop and mobile verification covered keyboard controls, 44-pixel touch targets, horizontal overflow, and browser console errors.
- Credential-free provisioning: The exact 1.28 GB model is downloaded and checksum-verified without committing model weights to Git.
What we learned
We learned that process provenance is not a product result. Showing retrieval, model inference, and runtime metrics is useful evidence, but the health worker still needs a clear, case-specific finding based on recorded facts.
We also learned that deterministic control is strongest when the model is genuinely subordinate. MedPsy is valuable for bounded local language and evidence work. Age conversion, observation completeness, emergency precedence, and respiratory thresholds remain explicit code that can be tested at exact boundaries.
The ADTC constraints improved the architecture. Sharing one small GGUF across the product and profiler, treating offline operation as a system property, and making every claim traceable produced a simpler and more honest tool.
What's next for Triage-0
After the challenge, the responsible next step is supervised user testing with trained health workers, followed by independent clinical and usability review before expanding scope.
Built With
- css3
- express.js
- gguf
- html5
- hyperdb
- llama.cpp
- local-rag
- medpsy-1.7b
- node.js
- node:test
- playwright
- qvac-sdk
- typescript
- who-imci
- zod

Log in or sign up for Devpost to join the conversation.