<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: John Alexander</title>
    <description>The latest articles on DEV Community by John Alexander (@xander-aj3).</description>
    <link>https://dev.to/xander-aj3</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3825925%2F0fed227c-b1ed-4896-a9cb-8d8ae67f7162.jpg</url>
      <title>DEV Community: John Alexander</title>
      <link>https://dev.to/xander-aj3</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/xander-aj3"/>
    <language>en</language>
    <item>
      <title>Tabibu Update #1: Tabibu can now read your documents</title>
      <dc:creator>John Alexander</dc:creator>
      <pubDate>Fri, 16 Oct 2026 11:03:46 +0000</pubDate>
      <link>https://dev.to/xander-aj3/tabibu-update-1-tabibu-can-now-read-your-documents-3j53</link>
      <guid>https://dev.to/xander-aj3/tabibu-update-1-tabibu-can-now-read-your-documents-3j53</guid>
      <description>&lt;p&gt;This is the newest Tabibu update. &lt;a href="https://tabibu.health/" rel="noopener noreferrer"&gt;Tabibu&lt;/a&gt; can now read your documents.&lt;/p&gt;

&lt;p&gt;Tabibu is a free health-information assistant. It started in Kenya and is built for people in other countries too. Until now you could only type a question. Now, on the website, you can add a lab report, a prescription, a PDF, a Word file or a photo of one. Tabibu reads it, explains it in plain words, and gives you questions to ask your clinician.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it accepts
&lt;/h2&gt;

&lt;p&gt;PDF (text or scanned), Word (.docx), plain text and Markdown, and JPG, PNG or WEBP photos, up to 8 MB. The feature is for Basic and Pro plans. Free accounts cannot upload files.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works, in two steps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;A vision model transcribes the file into text.&lt;/li&gt;
&lt;li&gt;The normal text-only Tabibu pipeline explains that text.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The second step is the same one that answers typed questions, with the same safety rules. The file never goes straight to the part that talks to you.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it will not do
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;It will not diagnose you.&lt;/li&gt;
&lt;li&gt;It will not tell you a result is "normal" or "fine".&lt;/li&gt;
&lt;li&gt;It will not tell you to start, stop or change a medicine. Doses are repeated only as printed on the document.&lt;/li&gt;
&lt;li&gt;It does not read X-ray, CT or MRI images, or photos of skin. If you upload one, it says so. A radiology &lt;em&gt;report&lt;/em&gt; is different: Tabibu explains it by quoting what the radiologist wrote.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I kept image reading out on purpose. Interpreting a scan or a skin photo is a medical-device question, and I would rather say "I can't" than guess.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens to your file
&lt;/h2&gt;

&lt;p&gt;The file and the text read from it are not stored or logged. Photos have their location data (EXIF) removed. Only your question and Tabibu's answer are saved, for about 48 hours, like any chat. There is now an opt-in "Keep 30 days" button if you want to come back to a chat after you have seen a doctor. It is off unless you turn it on, and chats that involved a file cannot be kept. Answers about files never enter the shared answer cache.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I tested it
&lt;/h2&gt;

&lt;p&gt;I used made-up documents only, never real patient files: lab reports, a prescription, a Word note, radiology reports, a DICOM file. What I checked:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A prescription: doses came back exactly as printed.&lt;/li&gt;
&lt;li&gt;An X-ray report: the answer quoted the radiologist and did not say the scan was fine.&lt;/li&gt;
&lt;li&gt;A file with a hidden instruction telling the model to call every result normal: it ignored the instruction and said it had.&lt;/li&gt;
&lt;li&gt;A DICOM file: it refused.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The limits, which matter more than the wins
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;In my testing, about 1 in 8 radiology reports ended on a safe fallback: "here is the text I read, and questions for your clinician" instead of a full explanation. It is never a wrong claim, but it is not the full answer, and I am not counting it as a success.&lt;/li&gt;
&lt;li&gt;These were spot checks on a small set of made-up documents. I have not run a full evaluation, so I am not publishing an accuracy number.&lt;/li&gt;
&lt;li&gt;There is no clinician review of the policy yet. Kiswahili answers are AI-reviewed only.&lt;/li&gt;
&lt;li&gt;WhatsApp document reading is in testing and is not open to everyone.&lt;/li&gt;
&lt;li&gt;I have not measured the cost per file end to end yet.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The limits are listed on &lt;a href="https://tabibu.health/trust" rel="noopener noreferrer"&gt;the trust page&lt;/a&gt;, and I update them when they change.&lt;/p&gt;

&lt;h2&gt;
  
  
  One question
&lt;/h2&gt;

&lt;p&gt;On a public health benchmark, a plain AI model scored higher than Tabibu on my own re-run (0.522 against 0.426, not the official leaderboard). &lt;a href="https://tabibu.hashnode.dev/we-ran-healthbench-on-our-health-ai-s-safety-layer-it-scored-lower-than-the-bare-model" rel="noopener noreferrer"&gt;I wrote about why here&lt;/a&gt;. So the test does not tell me what you want. Do you want a health AI that tells you what you have and what to take, one that explains and sends you to a clinician, or something in between? Tell me in the comments.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Tabibu gives general health information, not a diagnosis or medical advice.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>healthtech</category>
      <category>llm</category>
      <category>safety</category>
    </item>
    <item>
      <title>We ran HealthBench on our health AI's safety layer. It scored lower than the bare model.</title>
      <dc:creator>John Alexander</dc:creator>
      <pubDate>Tue, 06 Oct 2026 05:45:22 +0000</pubDate>
      <link>https://dev.to/xander-aj3/we-ran-healthbench-on-our-health-ais-safety-layer-it-scored-lower-than-the-bare-model-cn0</link>
      <guid>https://dev.to/xander-aj3/we-ran-healthbench-on-our-health-ais-safety-layer-it-scored-lower-than-the-bare-model-cn0</guid>
      <description>&lt;p&gt;I build Tabibu, a health-information assistant. It adds a safety layer on top of a language model: emergency escalation, refusing prescription doses, answering from retrieved sources, and a reviewer that checks the output. I wanted to know what that layer costs on a public benchmark, so I ran HealthBench on it.&lt;/p&gt;

&lt;p&gt;The short version: the full pipeline scored below the bare model it is built on, the gap shrank when I changed one policy, and measuring it surfaced a real safety bug. Here is what I did and what I think it shows.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I ran
&lt;/h2&gt;

&lt;p&gt;HealthBench is OpenAI's public benchmark of 5,000 multi-turn health conversations, each graded against rubric criteria written by physicians. Criteria add or subtract points, and a response's score is the points it earns divided by the available positive points.&lt;/p&gt;

&lt;p&gt;I ran a &lt;strong&gt;150-conversation subset&lt;/strong&gt;, stratified by theme, leaving out the clinical note-writing theme because it is not a consumer use case. The grader is gpt-4.1-mini with a prompt I re-implemented from the paper's description. That means &lt;strong&gt;these numbers are not comparable to the official leaderboard.&lt;/strong&gt; They are only useful for comparing candidates against each other on the same conversations.&lt;/p&gt;

&lt;p&gt;Three candidates:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The full Tabibu pipeline: retrieval, input and output guardrails, the safety layer.&lt;/li&gt;
&lt;li&gt;The bare model it runs on (gpt-6-luna in our config), with a neutral "careful health assistant" system prompt.&lt;/li&gt;
&lt;li&gt;The bare gpt-4o-mini, which we used before.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  First result
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Candidate&lt;/th&gt;
&lt;th&gt;Mean score (n=150)&lt;/th&gt;
&lt;th&gt;95% CI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bare gpt-6-luna&lt;/td&gt;
&lt;td&gt;0.520&lt;/td&gt;
&lt;td&gt;±0.046&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bare gpt-4o-mini&lt;/td&gt;
&lt;td&gt;0.434&lt;/td&gt;
&lt;td&gt;±0.045&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Full Tabibu pipeline&lt;/td&gt;
&lt;td&gt;0.362&lt;/td&gt;
&lt;td&gt;±0.049&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The pipeline was 0.158 below the bare model on the same conversations (paired difference, ±0.039). That is not noise.&lt;/p&gt;

&lt;p&gt;The theme breakdown was more interesting than the headline. On &lt;code&gt;emergency_referrals&lt;/code&gt; (16 conversations) the pipeline scored 0.553 against 0.597 for the bare model and 0.542 for gpt-4o-mini, which is within noise. On &lt;code&gt;global_health&lt;/code&gt; (36 conversations) it scored 0.230 against 0.414.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a safety layer loses on this benchmark
&lt;/h2&gt;

&lt;p&gt;HealthBench rewards completeness: specific doses, differential diagnoses, broad coverage. My pipeline is designed to be safer, not more complete. It declines to give numeric doses for prescription drugs, it does not diagnose, and it prefers to answer from retrieved sources instead of from the model's general knowledge. Each of those choices costs rubric points by construction.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;global_health&lt;/code&gt; gap had a more mundane cause. My retrieval corpus covers one country in depth, and when a question was outside it, the pipeline said it could not find the answer in its sources. At baseline that happened in 48 of 150 conversations, and those were the conversations where the bare model pulled ahead.&lt;/p&gt;

&lt;p&gt;None of this means the bare model is safer. The benchmark does not measure that. It does mean that a team that only watches a completeness benchmark will be tempted to remove the layer that makes the product safer.&lt;/p&gt;

&lt;h2&gt;
  
  
  What moved the score
&lt;/h2&gt;

&lt;p&gt;I changed one policy: let the assistant answer general, low-risk questions from the model's own knowledge, with a clear label saying the answer is not from its curated sources, instead of refusing. I also allowed adult amounts for a short tier of low-risk items (common nutrients, oral rehydration, everyday over-the-counter pain relievers) while keeping prescription, child and high-risk doses deferred.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Run&lt;/th&gt;
&lt;th&gt;Mean (95% CI)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Baseline&lt;/td&gt;
&lt;td&gt;0.383 ± 0.049&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;General answers, tiered doses&lt;/td&gt;
&lt;td&gt;0.470 ± 0.048&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Same, plus a "add a general-information paragraph" instruction&lt;/td&gt;
&lt;td&gt;0.444 ± 0.050 (reverted, no gain)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Final, after a safety fix&lt;/td&gt;
&lt;td&gt;0.426 ± 0.051&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bare model, for reference&lt;/td&gt;
&lt;td&gt;0.522 ± 0.047&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Run-to-run noise from non-deterministic generation was about ±0.03, so I would not read anything into differences smaller than that. The policy change was worth about +0.09 over baseline. The final number is lower than the intermediate one after the safety fix described in the next section.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bug measuring found
&lt;/h2&gt;

&lt;p&gt;Per-criterion results let me read the failures instead of the averages. In doing that I found that, with the original rules, the pipeline could &lt;strong&gt;quote prescription doses straight out of a retrieved national formulary&lt;/strong&gt;: a morphine dosing interval, a once-weekly methotrexate dose, a lithium range, a child's amoxicillin dose. My dose rule needed a known drug name near the number plus an instruction verb, and these passages did not match.&lt;/p&gt;

&lt;p&gt;I replaced it with a rule on amount plus dosing schedule, added regression tests built from the real leaked answers, and re-ran. The score went from 0.470 to 0.426, which fits with some of those answers having earned points, although the difference is close to the run-to-run noise so I would not lean on it. Either way I think it is the right trade, and it is also the main reason I distrust any health-AI score reported without the safety behaviour attached to it.&lt;/p&gt;

&lt;p&gt;Two smaller fixes came out of the same reading. A research question that merely contained the word "stroke" was triggering the emergency card, so I added must-not-escalate cases next to the must-escalate ones (all earlier cases still pass). And my output reviewer could not see earlier turns, so it judged a legitimate follow-up as "assuming a symptom never mentioned" and replied with a canned off-topic message. That scored zero.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this does not show
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;It is one run per candidate on 150 conversations, with ±0.03 generation noise.&lt;/li&gt;
&lt;li&gt;The grader is a smaller model with a prompt I re-wrote. It is not the official one, and there is no human check.&lt;/li&gt;
&lt;li&gt;The final run was measured before one last small fix to the dose rule and was not re-run.&lt;/li&gt;
&lt;li&gt;Most HealthBench conversations are general or US-centred, and my corpus is narrow, so the pipeline is partly being scored on scope.&lt;/li&gt;
&lt;li&gt;A score is not a safety certification. I have no clinician review of the safety rules yet.&lt;/li&gt;
&lt;li&gt;At roughly US$6.60 of API spend, this is a cheap experiment, not a definitive evaluation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I would take from it
&lt;/h2&gt;

&lt;p&gt;If you build on top of a model, run the benchmark with and without your safety layer on the same conversations and publish both numbers. Read the per-criterion failures, not just the mean, because that is where the real bugs were. And be suspicious of a health assistant that reports only a benchmark that rewards saying more.&lt;/p&gt;

&lt;p&gt;I am the builder of &lt;a href="https://tabibu.health" rel="noopener noreferrer"&gt;Tabibu&lt;/a&gt;, and its limits and test results are listed at &lt;a href="https://tabibu.health/trust" rel="noopener noreferrer"&gt;tabibu.health/trust&lt;/a&gt;. I would like to hear how you are measuring safety in your own health-AI work.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>healthtech</category>
      <category>llm</category>
      <category>testing</category>
    </item>
  </channel>
</rss>
