How it works
From a label photo to a grounded answer.
Five steps, all on the phone. The model never decides whether an interaction exists — it only explains a fact that was retrieved from a real dataset and cited.
Capture
The camera takes a photo of a pill bottle or medication label. The image never leaves the device.
OCR on-device
QVAC's OCR reads the label text locally (no cloud OCR). The recognizer is fetched once (~15 MB) and cached, then runs offline.
Normalize to a generic name
A model-free n-gram match against the DDInter vocabulary resolves brand/printed text to a generic ingredient — e.g. "ASPIRIN 81 mg" → acetylsalicylic acid. If nothing resolves, it abstains.
Look up the interaction
The resolved drug is checked against your saved shelf in a bundled offline copy of DDInter 2.0 (~160k drug-drug pairs with severity). The hit — pair, severity, and source IDs — is the cited fact.
Explain in plain language
The on-device MedPsy model explains only the retrieved fact in 2–3 patient-friendly sentences, ending by advising confirmation with a pharmacist. Internal reasoning is stripped from the output.
The safety contract
Three rules that keep it honest
Grounded
Severity comes from DDInter, not the model. The explanation asserts and cites only the hard fact ("A + B = severity X").
Abstains
If a drug doesn't resolve to the dataset, Pharos refuses to guess and says it can't verify that one. Unknown is never treated as safe.
No fabrication
If two resolved drugs have no documented interaction, it reports zero — it never invents one to seem helpful.
Every scan leaves a trail
Auditable by design
Each scan writes a structured audit log (JSONL) of the grounded chain and a resource log (CSV) of on-device cost. Together with a packet capture during an offline scan, they're the evidence that the answer was retrieved, local, and reproducible.