OpenMedCheck
An open-source prescription safety checking tool that combines a local large model with a rule engine to review emergency department prescriptions. It can read free-text medical records and produce decision cards.
Timeline (last 90 days)
OpenMedCheck's input is a proposed order and a patient record, and its output is a decision card with a status of NO_ISSUE, WARNING or BLOCKED, along with the reason, the doctor's exact words as evidence, and, where the rule table permits, a re-validated alternative.
OpenMedCheck uses a three-layer architecture: the first layer runs Gemma locally via Ollama to read free text and output strict JSON; the second layer is a non-AI program that verifies the model's answers (checking whether quotes appear in the source text, whether semantics match, whether it is negated, whether it concerns a relative, and whether an old event is treated as new); the third layer is a 25-rule if-then table that makes the final decision, of which 23 rules were reviewed by clinical experts and 2 past-history rules were added later and not reviewed.
OpenMedCheck's design guarantees 'only stricter, never looser': Gemma's opinion can only make the card stricter, never more permissive; a rule-determined BLOCKED is final; dosages come only from the rule table and never from the model; and if the model is down, times out, or answers abnormally twice in a row, the app still answers with rules alone.
On an open set of 76 synthetic emergency cases, adding Gemma's reading of the course notes raised agreement with expected results from 72% with rules alone to 97%, reduced missed judgments from 21 of 42 cases to 1, produced 0 false positives among 34 cases that should have stayed quiet, with a median model-step latency of 1.87 seconds.
The results on the above 76 synthetic cases belong to the development set, and the cases, prompts and checkers were built together; these numbers predate the addition of the past-history step, which has not yet been measured.
OpenMedCheck uses the open-weights model Gemma running on the hospital's own GPUs, the app binds only to 127.0.0.1, the only external call is to the local model, and patient context is not logged, stored or cached.
OpenMedCheck is licensed under Apache-2.0, is built on Python 3.12, FastAPI, Ollama and Pydantic, and has about 1,080 automated tests.
OpenMedCheck is a concept demo, is intended only for synthetic patients, is not a medical device, and must not be used for any real patient.
OpenMedCheck's business model is open core: the engine stays open source, and hospitals pay for a maintained, updated rule table with citations, integration with record systems (HL7 FHIR, CDS Hooks), and support and a regulatory path; this hypothesis has not been validated with buyers.
Early prompts had Gemma judge conflicts itself, which led it to associate 'NSAID and ACS' with any prescribed drug, including acetaminophen; the fix was to have the model only read and quote, with the rules making the decision.
All Facts (10)
OpenMedCheck's input is a proposed order and a patient record, and its output is a decision card with a status of NO_ISSUE, WARNING or BLOCKED, along with the reason, the doctor's exact words as evidence, and, where the rule table permits, a re-validated alternative.
50%UnverifiedOpenMedCheck uses a three-layer architecture: the first layer runs Gemma locally via Ollama to read free text and output strict JSON; the second layer is a non-AI program that verifies the model's answers (checking whether quotes appear in the source text, whether semantics match, whether it is negated, whether it concerns a relative, and whether an old event is treated as new); the third layer is a 25-rule if-then table that makes the final decision, of which 23 rules were reviewed by clinical experts and 2 past-history rules were added later and not reviewed.
50%UnverifiedOpenMedCheck's design guarantees 'only stricter, never looser': Gemma's opinion can only make the card stricter, never more permissive; a rule-determined BLOCKED is final; dosages come only from the rule table and never from the model; and if the model is down, times out, or answers abnormally twice in a row, the app still answers with rules alone.
50%UnverifiedOn an open set of 76 synthetic emergency cases, adding Gemma's reading of the course notes raised agreement with expected results from 72% with rules alone to 97%, reduced missed judgments from 21 of 42 cases to 1, produced 0 false positives among 34 cases that should have stayed quiet, with a median model-step latency of 1.87 seconds.
50%UnverifiedThe results on the above 76 synthetic cases belong to the development set, and the cases, prompts and checkers were built together; these numbers predate the addition of the past-history step, which has not yet been measured.
50%UnverifiedOpenMedCheck uses the open-weights model Gemma running on the hospital's own GPUs, the app binds only to 127.0.0.1, the only external call is to the local model, and patient context is not logged, stored or cached.
50%UnverifiedOpenMedCheck is licensed under Apache-2.0, is built on Python 3.12, FastAPI, Ollama and Pydantic, and has about 1,080 automated tests.
50%UnverifiedOpenMedCheck is a concept demo, is intended only for synthetic patients, is not a medical device, and must not be used for any real patient.
50%UnverifiedOpenMedCheck's business model is open core: the engine stays open source, and hospitals pay for a maintained, updated rule table with citations, integration with record systems (HL7 FHIR, CDS Hooks), and support and a regulatory path; this hypothesis has not been validated with buyers.
50%UnverifiedEarly prompts had Gemma judge conflicts itself, which led it to associate 'NSAID and ACS' with any prescribed drug, including acetaminophen; the fix was to have the model only read and quote, with the rules making the decision.
50%