Our Inspiration
When a tornado or hurricane hits, State Farm sends a local response team to the area. Within minutes, hundreds of customers are trying to reach them at once: someone's roof is gone, someone needs a hotel tonight, someone's mom is on oxygen and the power is out. The agents on the ground have no fast way to tell which of those messages truly needs them first. We built FirstLight to help those agents, not replace them, by reading every message the moment it arrives and getting them to the right people faster.
What It Does
A customer texts State Farm what happened, in their own words. FirstLight:
- Puts safety first. If someone is in danger (injured, trapped, medical equipment without power), the agent tells them to call 911 and escalates the case to a person immediately, before any insurance research.
- Triages the inbox. Every case gets a severity score, and the dashboard sorts itself so the most urgent households rise to the top.
- Reads the customer's real policy. The agent searches the customer's own State Farm policy forms, checks exclusions and conditions, and quotes the exact clause behind every coverage decision, linked to the page in the PDF.
- Double-checks itself. A second Nemotron agent, acting as a claims quality reviewer, checks every decision against the quoted policy text and sends it back if something doesn't hold up.
- Drafts the claim. When a loss is proven covered, FirstLight drafts a property loss notice (a PDF with the customer's words and the policy evidence). The agent on site reads it and confirms with one click. A person makes every final call.
- Leaves no one behind. Households that never reply to the check-in are flagged for a welfare call from their local agent.
How We Built It
- NVIDIA Nemotron 3.5 Lightning (served with vLLM on Brev) runs a tool-calling agent loop: it plans, decides when to retrieve, searches, reads surrounding clauses, records findings, and finishes with a structured decision.
- Agentic RAG: the policy PDFs are chunked by section into SQLite with full-text search and Nemotron embeddings. Search combines keyword and semantic results, then the Nemotron reranker orders them. The agent can search again when results miss.
- Grounding in code: every quote is checked word for word against the retrieved policy text before a decision is accepted.
- Nemotron Safety Guard screens incoming messages and outgoing replies
- Scalable runtime: messages are queued and processed by workers, with one active run per case, saved progress after every step, and concurrency that adapts to live GPU load.
- Full audit trail: every tool call, retrieved clause, reviewer verdict and delivery is stored and streamed live to a timeline in the dashboard.
- Next.js (TypeScript) for the dashboard and API, plus a tornado simulator and evaluation suite to test the agent on realistic households.
Challenges We Ran Into
- Setting up Brev: the newest vLLM was built for a newer CUDA than our Brev machine supported, so we reinstalled a compatible build. SSH also gave us trouble, so we worked through a Jupyter web terminal.
- Citations: early on, the model would reach the right conclusion but quote an unrelated clause. We now verify every quote in code and require it to come from the right coverage section of the customer's own policy.
- Messy tool calls: the model sometimes sent nested data as broken JSON. Forcing the output format made generation about 3x slower, so instead we split findings into small, separate tool calls and repair what we can.
- Running many agents at once: with dozens of cases arriving together, requests timed out. We switched to streaming with stall detection and made concurrency follow the GPU's real load instead of a fixed number.
What We Learned
AI agents are great at understanding messy messages from real people and at finding the exact policy language that applies. But they shouldn't be the final word on someone's claim. FirstLight does the reading, sorting and drafting, while code checks the evidence and a State Farm agent makes the final call.
Built With
- huggingface
- nemotron
- next.js
- typescript