-
-
See the quote: every score opens its source with the exact sentence highlighted.
-
Evidence orbits an illustrative lung across five stations of the patient's path.
-
Gaps: which voices are missing for each drug, so you know who to talk to next.
-
A pasted note classified by the local model, with real stage timings and what changed.
-
Zoom into the tumor hotspot: label facts for each drug, with the anatomy marked illustrative.
-
Amivantamab at EGFR and MET on the cell surface. Illustrative mechanism, not a clinical simulation.
Inspiration
Within3 framed launch intelligence as understand, interrogate, and act, with AI you can trace and privacy by design. A launch lead on an EGFR lung cancer brand has to combine public filings with advisory board notes that should never leave their laptop. They can't paste those notes into ChatGPT, so I built something that runs where the notes already are.
What it does
Vitra reads public evidence on Tagrisso and on Rybrevant with Lazcluze: trial registrations, FDA reports and labels, papers, press releases and news. It also reads private transcripts you paste in. For each item it outputs the signal type, whether a launch team should act on it, and a score from −2 to +2 on efficacy, safety, convenience, access and cost, and evidence quality. Each score comes with who said it and the exact quote behind it.
- Understand: evidence orbits an illustrative 3D lung across five stations of the patient's path, with weekly trends by speaker.
- Interrogate: click any score and See the quote opens the source with that sentence highlighted. Exclude a source you don't trust and every trend recounts.
- Act: the Gaps tab shows which voices are missing, like no payer voice on access and cost, so you know who to talk to next.
- Live notes: paste a note and the local model classifies it in seconds with real stage timings. What changed shows the before and after, and Undo restores the baseline exactly.
How I built it
- Rules from the organizers' labeling guide handle the clear cases: trial registrations, FDA items and speaker attribution.
- Llama 3.2 3B Instruct (Q4_K_M, llama.cpp) labels the rest with a strict JSON schema.
- Every quote has to appear word for word in its source, or it's dropped.
- A local FastAPI app serves the evidence, trends, gaps and intake on 127.0.0.1 only.
- The interface is React, TypeScript and three.js.
- A cross-platform launcher refuses to start while online and checks every socket three times a second.
Challenges
- Keeping every quote an exact substring while still finding enough aspects in long PubMed abstracts.
- Staying fully offline on a 16 GB laptop.
- Making about a thousand real quotes readable. One dot per quote turned into blobs, so dots now group by week and score and grow with the count.
Accomplishments
- 0.891 composite on the organizers' scorer across the 60-item labeled dev set (5-fold). Counting only the caveat phrases the guide lists, it's 0.882. Rules alone scored 0.842.
- Citation validity of 1.0: every quote Vitra emits appears in its source.
- With the Wi-Fi off, the app was ready in 3.2 seconds, and a pasted transcript came back with verified quotes in 3.6 seconds.
- An earlier full run on the 240 test items took 569 seconds on an M5 MacBook Air, about 2.4 seconds per item.
What I learned
Rules and a small model split the work well. Rules are reliable on signal type and speaker. The model's gains come from efficacy and safety in long abstracts and news. Tracing each score to an exact quote also made debugging easier, because I could see why every number moved.
What's next
- Evidence source connectors that run locally.
- Larger local models for teams with stronger machines.
- Team sharing that never leaves the company network.
Built With
- fastapi
- github
- github-actions
- llama-3.2
- llama.cpp
- psutil
- pydantic
- python
- react
- react-three-fiber
- tailwindcss
- three.js
- typescript
- uvicorn
- vite
- zustand