Acuity Polypharma
Inspiration
135 million Americans take two or more prescription drugs every day. A third of adults 65 and older take five or more — and a 10-drug regimen produces 45 unique drug pairs that can interact. Physicians have roughly five seconds to review a medication list before discharge. No single data source has complete coverage.
Drug-drug interactions are a leading cause of preventable hospitalizations, yet the tools available to patients and clinicians are either too shallow (simple pairwise lookups), too slow (waiting for a pharmacist consult), or too opaque (no citations, no reasoning). We built Acuity because polypharmacy is one of the fastest-growing challenges in personal medicine — and the gap between what existing tools offer and what patients actually need is costing lives.
What it does
Acuity is a multi-agent drug interaction checker built for polypharmacy patients. You enter a medication list; Acuity fans out across three independent data sources in parallel, uses Nemotron to reconcile conflicting findings, and returns a severity-ranked interaction report with citations — in seconds.
Web app — enter a medication list, get a ranked report with severity levels and sourced reasoning. No account required. NemoClaw agent — the same backend, accessible to a Nemotron agent running under NemoClaw policy with full audit logging and PHI containment.
Acuity surfaces NO_DATA honestly when a pair falls outside a source's scope rather than fabricating signal.
How we built it
The core is a LangGraph pipeline hosted on Render that handles intake → fan-out → synthesis → report:
RxNorm normalization — brand names are resolved to active ingredients via rxnav.nlm.nih.gov before any lookups run. Parallel fan-out — three independent sources are queried simultaneously: OpenFDA Label (api.fda.gov/drug/label.json) for regulatory warnings and boxed warnings OpenFDA FAERS (api.fda.gov/drug/event.json) for adverse-event co-reports TWOSIDES / SNAP Decagon for 4.65M observed polypharmacy side effects across 645 drugs (Zitnik et al., Bioinformatics 2018), served from a local SQLite database built at deploy time Synthesis — Nemotron nemotron-super-120b reads all three source outputs, resolves conflicts, and produces a severity-ranked report with citations. Session memory — a follow-up query on an extended drug list only evaluates new pairs; cached findings are reused.
The frontend is a React app deployed on Vercel. Both the web app and the NemoClaw agent query the same centralized API, keeping analysis results, session memory, and citations in sync across every interface.
For the NemoClaw bonus track, we wrapped the agent in a runtime policy that enforces an API allowlist (exactly four hosts reachable from inside the sandbox), filesystem containment, and OCSF-format audit logging.
This is the best use of Brev because both our LangGraph pipeline and our Nemoclaw agent run on Brev, an H200 out of ireland an a CPU environment running out of Oregon. We deserve to win the Best Use of Brev track because of our dedication to build Nvidia-native and Brev first. Biomedical applications are the single most important contribution of Nemoclaw to the fate of humanity.
Challenges we ran into
Coverage gaps between sources. OpenFDA Label, FAERS, and TWOSIDES have very different scopes and naming conventions. Getting Nemotron to reason correctly about a pair where one source has strong signal and another has none — without hallucinating agreement — required careful prompt engineering and a strict schema contract. Prompt injection on medical data. Drug labels and FAERS adverse-event narratives are realistic attack surfaces: a malicious label could instruct the synthesis agent to exfiltrate a patient's regimen to an attacker-controlled host. This was the core motivation for the NemoClaw integration. Synthesis iteration under time pressure. Getting the severity calibration right (major vs. moderate vs. minor, not everything is major) across a diverse set of drug pairs required running the synthesis harness against real cases repeatedly. The demo cases each exercise a different part of the calibration.
Accomplishments that we're proud of
A working end-to-end pipeline that correctly identifies serotonin syndrome risk (fluoxetine + tramadol) as a major interaction with citations from multiple independent sources. The NemoClaw policy that closes prompt-injection risk at the runtime layer rather than the application layer, making the containment verifiable and portable across environments. Honest NO_DATA handling: Acuity doesn't fabricate signal when a pair falls outside a source's scope, which matters for medical tools. A shared API contract (backend/schemas.py) that kept the web app and agent interfaces in sync across a two-person team working in parallel.
What we learned
Severity calibration is harder than retrieval. Getting three sources to agree on how bad an interaction is — not just that one exists — is the real challenge, and it requires both good prompt design and a deterministic fallback when Nemotron is uncertain. Runtime policy enforcement is more robust than application-layer guardrails for PHI containment. NemoClaw's L4 network allowlist blocks exfiltration before TLS is even negotiated; an application-layer check can be bypassed by the very prompt injection it's trying to stop. NO_DATA is a valid and important output. Medical tools that fill silence with noise are dangerous; being explicit about the limits of coverage builds trust.
What's next for Acuity Polypharma
Broader source coverage — adding DrugBank and the NIH DailyMed structured product labels to fill gaps in FAERS and TWOSIDES coverage. EHR integration — a FHIR-compatible intake endpoint so Acuity can pull a medication list directly from an electronic health record rather than requiring manual entry. Incremental updates — alert a user when a new FAERS adverse-event report is filed for a drug pair they've already checked. Expanded NemoClaw policy presets — generalize the PHI-containment policy for other medical AI use cases beyond drug interaction checking.
Log in or sign up for Devpost to join the conversation.