Kairos is a second set of eyes in ER triage
In Canada's overcrowded emergency rooms, some patients initially triaged as "non-urgent" are made to wait excessively long while their conditions are deteriorating. With ~16 million ER visits a year and hundreds of thousands of patients leaving before a doctor sees them, the most dangerous risk in ER triage is overlooking the patients who seemed fine at the initial triage but in reality wasn't. Kairos catches them.
What inspired it
I grew up with chronic illnesses, so I know ER waiting rooms and the dreadful hours that feel endless while you wait to be seen. My frustration is shared by millions of Canadians from coast to coast to coast. Lately, the headlines have gotten even darker: people, often the most vulnerable, are dying in waiting rooms before a doctor ever sees them. For a country that prides itself on accessible public healthcare, I find this grim reality indefensible.
What it does
You sit in the triage nurse's seat. For a patient initially triaged as non-urgent (levels 4 and 5), you decide: keep them in the waiting room, or pull them back for reassessment? Then Kairos reveals its own call alongside what actually happened to that patient. The model does so by flagging potentially under-triaged cases with a feature-level explanation and a risk percentile of its decision. A live leaderboard tracks both humans' and the model's performance!
How I built it and why it's rigorous
Kairos is trained on 425,000 real emergency-department visits (MIMIC-IV-ED).
- it's validated against real patient outcomes (hospital admission and death) and not against the nurse's own initial triage.
- by running a logistic regression on standardized vitals + TF-IDF of the chief complaint, the model takes into account the actual patient complaints that are overlooked when only vitals are considered such as during reassessments. (AUC 0.786 (text + vitals) vs 0.633 (vitals alone) )
- by flagging the top 20% of patients considered "low risk", the model can catch ~59% of the cases that end up admitted or dead.
- every decision made by the model is shown with its real feature contributions (vitals vs. text, positive vs. protective). Kairos (and any public health clinical tool using GenAI) shouldn't be a black box.
- Tiger Data (hypertable + continuous aggregate) hosts the live human-vs-model leaderboard, while Gemini turns the model's output features into a plain-language text (while never inventing data).
Data governance
MIMIC-IV-ED is credentialed data under a PhysioNet DUA. No patient record ever leaves the model in this project... not to an API, a cloud database, or the repo. The model is trained locally and only aggregate statistics and fully synthetic (distribution-matched) cases are used in the live demo.
Challenges
Handling credentialed clinical data correctly under a strict DUA including deriving everything from aggregates and synthetic cases without exposing patient records was a project architecture challenging, and validating the model's results without the ability to weight against a proper ground truth (since the human triage label is itself often biased) forced me to think outside the box!
Limitations
MIMIC uses ESI, not Canada's CTAS; it's a single US hospital, so external validity is unproven. Kairos is a research prototype and decision-support tool that doesn't provide medical advice and will never replace the triage nurse.**
What's next
- gather and use nurse feedback info to retrain the model and improve its performace
- integration into eCTAS (Canadian model)
- automated reassessment alerts of existing patients based on evaluated risks.
Built With
- fastapi
- google-gemini
- html
- javascript
- mimic-iv
- pandas
- postgresql
- python
- scikit-learn
- sentry
- tiger-data
- timescaledb
Log in or sign up for Devpost to join the conversation.