Inspiration
In late September 2024, Hurricane Helene flooded western North Carolina. I live in Charlotte, a few hours from the worst damage. Help messages arrived in time order. A family on a roof could wait behind messages about power cuts.
On October 24, 2026, I built Rescue Rater v1 at the IEEE AI Hack for Humanity, and it won first place. It used one small model. The judges asked good questions: what if the model is wrong, where is the address, and where is the official data? Rescue Rater v2 is my answer.
What it does
Paste up to 10 help messages. Rescue Rater ranks them so a responder reads the most urgent first. Each message gets a card with the address, the number of people, the FEMA area risk, the nearest team, a related official report, and a draft reply to the sender.
The key idea: two different models check every message, and if they disagree, a human looks.
How I built it
- SKR Rater: a DistilBERT model I fine-tuned on synthetic Helene-style messages. It gives an urgent probability $p$ for every message, fast, on Hugging Face ZeroGPU.
- NVIDIA Nemotron 3 Nano on Nebius Token Factory: the second opinion. It reads the whole sentence and returns JSON: urgent or not, reason, location, people, vulnerable groups, an explanation, and a draft reply in the sender's language.
- Tavily: finds a related official report. The query depends on the need (flood warning, shelter, road closure), uses official domains only and the Helene date window, and keeps a result only if it names the town or comes from the NWS office for western North Carolina.
- Rules decide, models advise:
$$ \text{band}(p) = \begin{cases} \text{URGENT} & p \ge 0.7 \ \text{NEEDS REVIEW} & 0.1 \le p < 0.7 \ \text{ROUTINE} & p < 0.1 \end{cases} $$
If $(p > 0.5) \ne \text{Nemotron}_{urgent}$, the message goes to NEEDS REVIEW and is marked DISPUTED. The second model can move a message up, never down.
- Gradio app with dashboard tiles, a filter, cards, and a copy-for-dispatch box.
Results
On a held-out test set with wordings the model never saw, the Rater caught all 48 urgent messages in every run, and flagged 0 to 8 of 48 calm messages by mistake (median 4) across 5 training seeds. A keyword baseline flagged 39 of 48.
The best moment: a Spanish message, "Necesito ayuda, el agua sube y mi mamá no puede caminar." My English-only Rater scored it 0.08. Nemotron said urgent. They disagreed, so the app sent it to a human, and the draft reply came back in Spanish.
Challenges
- Speed. Calling Nemotron and Tavily one message at a time took 34 seconds. Running them in parallel brought it to about 6 seconds.
- Wrong sources. One search returned a weather page from the St. Louis office for a North Carolina town. I added a relevance check. Now the app says "no matching official report" instead of showing a wrong link.
- Model output is not always the same shape. Sometimes fields were missing or in a different form. I added fail-safes, and I read addresses and people counts with fixed patterns first, using Nemotron only as a backup.
- A false red card. "Power is out but we are safe" was marked URGENT by the Rater. An emergency responder would stop trusting the tool. That changed my rule: any disagreement now goes to human review.
- Reproducibility. My v1 numbers changed every run. I had forgotten the PyTorch seed. I fixed it and now report a 5-seed range, not one lucky number.
What I learned
- Two models that check each other are more useful than one model that is very confident.
- Live search is for live facts. I tried Tavily for the FEMA county risk score. It found the official page but not the number, so I use fixed FEMA data for that.
- A safety tool must be honest about what it does not know. "No matching report" and "address missing" are features, not failures.
- Design is part of safety. I reviewed my own app as a designer, as an emergency responder, and as a judge, and each review found something real.
What's next
Real labeled disaster messages, voice and photo messages, road-aware routing, carrier location from 911 texts, and a read-only pilot next to a county dispatch system.
Honest limits
The training data is synthetic. The example messages and street names are made up. FEMA risk is loaded for one county, and the rescue teams are demo locations. A human makes every decision.
AI disclosure: Claude (Anthropic) helped me draft code and text. I am responsible for the work and its correctness.
Built With
- distilbert
- fema-national-risk-index
- google-colab
- gradio
- hugging-face
- hugging-face-spaces
- nebius
- nebius-token-factory
- nvidia
- nvidia-nemotron
- openai-api
- pandas
- python
- pytorch
- scikit-learn
- tavily
- transformers
- zerogpu
Log in or sign up for Devpost to join the conversation.