Skip to content

How we test our AI

We wrote 16 realistic therapy sessions and marked what a correct note must say. Then we ran them through Margent. Here are the results, misses included.

Sample sessions we wrote ourselves, October 2026. Not a clinical study.

of sentences had no source in the session
1.3%of sentences had no source in the session

4 of 298 sentences · 1.0–3.2% across runs

false sentences we planted were flagged before signing
32 of 32false sentences we planted were flagged before signing

100% of planted sentences

of the facts a full note needs were in the draft
94.5%of the facts a full note needs were in the draft

129.5 of 137 facts (partly there counts as ½)

This is a small test: 16 sessions, 18 notes, 298 sentences. Read each number as a direction, not a promise.

Every result, with what we counted

A green dot means it's where we want it. Amber means we're still working on it.

Sentences linked to the session

87.2%

260 of 298 sentences

Most of the rest (36) come from the chart and are labelled that way.

Sentences with no source (on target)

1.3%

4 of 298 sentences · 95% CI 1–3% · 1.0–3.2% across runs

A separate AI reviewer graded every sentence: 264 supported, 30 partly supported, 3 unsupported, 1 contradicted.

Notes that said something that never happened (still working on it)

5.6%

1 of 18 notes · 1 of 68 traps · 95% CI 1–26%

We hid traps in each session, like a goal that wasn't met or a risk question the client said no to.

Facts a full note needs

94.5%

129.5 of 137 facts

Scores, plans, homework and safety steps the session called for.

Risk written up correctly (on target)

94.4%

17 of 18 notes · 95% CI 74–99%

Every risk question that was asked is in the note with the right answer, and none is made up.

Billing code right (on target)

16 of 16

code right on 16 of 16 sessions; with add-ons, units and modifiers on 16 of 16

Compared with a human coder's answer.

Note-check issues found (on target)

12 of 12

12 found, 0 missed, 0 flagged by mistake

Rules like session length against the code, start and stop times, telehealth place of service and a safety plan.

Planted false sentences flagged (on target)

32 of 32

32 of 32 marked unsupported or contradicted

Two per draft: made up (16/16 flagged) and contradicting the session (16/16 flagged).

Time to write a note

11 s

typical (median) · slowest 1 in 20: 15.2 s

From asking for the note to a checked draft.

AI cost per note

$0.002

one-client note, average · group note up to $0.005

Writing plus checking, at the AI vendor's list prices.

Where it got things wrong

Sentences Margent wrote that our reviewer caught. In the product, each one is flagged before you can sign.

  • Never happenedSUD group counseling, cravings and high-risk situations (3 members)

    “a naloxone safety review”

    Group notes must contain only that member's contributions (Part 2 + group privacy)

  • No sourceSUD group counseling, cravings and high-risk situations (3 members)

    “Ray will continue the written payday plan and his weekend card arrangement, and will attend the Saturday morning meeting this week.”

    Ray never mentioned a written payday plan in the session. That item comes from the chart goal, so stating he will continue it is an invented plan. The card arrangement and Saturday meeting are supported.

Show 3 more
  • No sourceSUD group counseling, cravings and high-risk situations (3 members)

    “Relapse prevention and motivational interviewing elements were used, consistent with the treatment plan interventions.”

    Motivational interviewing is not used or named anywhere in the transcript. Only relapse-prevention content appears. MI is listed in the chart plan for this client, but that does not show it was delivered in session.

  • No sourceSUD group counseling, cravings and high-risk situations (3 members)

    “Luis will continue to use the urge-surfing card when cravings reach 6 out of 10 or higher, working toward his objective of using urge surfing for every craving.”

    Luis never stated a plan to use the card at 6/10 or higher; the 6/10 threshold comes from the chart, and his stated week plan was the no-doubles request.

  • Contradicts the sessionIDD community living supports shift note (4 hours)

    “Tommy completed the full checkout with one verbal reminda during the outing, which supports his objective to complete checkout with 2 or fewer prompts; the 4 of 5 outings target is not yet reached on this single session.”

    The transcript shows more than one prompt at checkout: the question about how much to give at t-17, the instruction at t-19, and the wait-for-change reminder at t-21. The note's count of one verbal reminder is wrong.

No billing-code or note-check misses in this run (16 of 16 codes right, 0 false flags). Every planted sentence was marked red, not just amber.

The intake assistant's crisis check, tested on 194 messages

Before any AI replies, the intake text assistant checks each message for risk words in English and Spanish. If it finds any, it stops and hands the person to staff. It's a fixed word list, not AI. Phone lines are planned.

Risk messages caught
100%
practice set, 112 of 120 messages scored
Caught in a separate set
100%
36 risk messages never used for tuning
Flags that were real risk
100%
practice set; separate set 100%
Look-alikes flagged by mistake
0/34
“saving up for a car”
Everyday phrases flagged
0/20
“this wait is killing me”
Exaggerations met with a safety question
7/8
by design

In this run it missed none and flagged none by mistake. The same team wrote both sets, so this is not a blind test. A word list can’t read intent. Someone who describes risk in a way we didn’t think of will get through. That’s why a person stays on the line.

What this test is not

  • Not a clinical study. No real clients and no real clinicians.
  • The AI reviewer comes from the same model family as the AI that writes the notes.
  • The sample is small, and numbers move a little between runs.
  • It shows whether Margent is honest about its sources. Only real use shows whether it saves you time.

What pilots will measure

  • Time to sign: minutes from session end to a signed note, before and after.
  • Edits: how much of each draft clinicians change, and which parts.
  • Denials: claims denied for documentation, against the practice’s own baseline.
How we protect client records

Full results and method

For researchers and reviewers: how each number is made, every session, and the run before this one.

Technical details

How each number is made

  • Notes and checks come from the running app's own routes (/api/ai/note and /api/ai/audit), with each session sent as a signed-in practice would. The crisis guard and CPT engine are imported from the product code.
  • Models: Claude Haiku 5.5 drafts, verifies and audits. Claude Haiku 5.5 is the judge: it reads the whole transcript and chart, never our citations or verifier grades, and grades every sentence with a strict rubric.
  • Deterministic checks sit on top: an invented risk statement in a session where risk was never asked counts as unsupported whatever the judge says.
  • Required facts, traps, risk expectations, CPT and compliance issues were written by hand for each session before any model output was seen. Partly present facts count as ½.
  • "Sentences with no source" counts sentences the judge graded unsupported or contradicted. The 1.0–3.2% range spans runs, as docs/EVALS.md reports.
  • Latency: note p50 11.0 s, p95 15.2 s; audit p50 3.1 s, p95 4.8 s. Wall clock, including streaming and per-sentence verification.
  • Cost, from the app's own usage meter at list API prices: single-client note $0.0020, all requests $0.0021, max $0.0047 (group session), audit $0.0010.
  • Verifier: 32/32 planted sentences flagged, 32 (100%) as unsupported or contradicted. Each draft got two fabricated sentences with plausible citations.

Crisis guard

  • A deterministic English and Spanish lexicon runs on every caller message before any model, and stops for a warm transfer or a safety question. Development set: 120 messages (112 scored), recall 100%, precision 100%, emergent-level recall 94.4%.
  • Held-out set: 74 messages (71 scored, 36 risk), recall 100%, precision 100%, emergent-level recall 76.5%, hard negatives flagged 0/34, hyperbole checked 2/3.
  • Run 1 missed third-person reports and indirect warning signs (stockpiling pills, giving things away, goodbyes). We added those patterns using the development messages, and wrote the held-out set first, with hard negatives built to collide with the new patterns ("rope for our camping trip").

Run 1 against run 2

Run 1 found real failures in the coding engine, the audit, the verifier, the note prompt and the crisis guard. We fixed each at its cause and ran the whole set again. Exact rows come from deterministic code and don’t move between runs; sampled rows are resampled each run, so a few points either way is noise.

Run 2026-10-31T01-07-31 compared with run 2026-10-31T02-00-09
MeasureRun 1Run 2Kind
CPT engine, full line right13/1616/16exact
Crisis guard recall / precision79.7% / 98.1%100% / 100%exact
Crisis guard, held-out set—100% / 100%exact
Compliance precision / recall81.8% / 75%100% / 100%sampled
Planted sentences graded red29/3232/32sampled
Unsupported sentences1% (3/296)1.3% (4/298)sampled
Notes with a trap0/181/18sampled
Required-fact recall91.6%94.5%sampled
Risk handling18/1817/18sampled
Cost per note$0.0019$0.0020sampled

Run 1: 2026-10-31T01-07-31. Run 2: 2026-10-31T02-00-09. Same 16 sessions, gold labels, judge and models.

The small model against a large one

The same prompts on 6 single-client sessions, drafted by a model with 20 times the per-token list price. Six notes can’t settle a model choice; this tells us whether the gap is large enough to pay for.

Model comparison on 6 sessions
MeasureHaiku 5.5 (what we ship)Sonnet 5.5 (same prompts)
Unsupported sentences0%0.7%
Required-fact recall95.5%99.1%
Trap hits00
Risk handled correctly5/66/6
Grounding88.2%92.9%
Sentences110141
Cost per note$0.0021$0.032
Time per note12.3 s12.8 s

Haiku numbers come from the live app route; Sonnet drafts use the app’s exported prompts sent directly to the API, then the same verifier and judge. Sessions: 01-cbt-depression, 04-crisis, 08-med-management, 10-spanish-ba, 13-dbt-chain, 16-grief-older-adult.

Every session

Synthetic and de-identified: every person, date and number is invented. Each session has a hand-written gold file with required facts, traps, the expected risk handling, the CPT a coder would assign, and the compliance issues the payer rules should produce.

Per-session results
SessionSentencesUnsupportedFactsTraps hitRiskTimeCost
Individual CBT, depression, billed 90837 for 52 minutesAdult outpatient, Michigan Medicaid1407.5/80Correct13.4 s$0.0023
Intake / biopsychosocial assessment, panicAdult outpatient, commercial PPO28010.5/110Correct15.2 s$0.0025
SUD group counseling, cravings and high-risk situations (3 members)Part 2 SUD program, Michigan Medicaid · 3 member notes4139/91Correct11.0 s$0.0047
Mobile crisis, in-home, C-SSRS positive, safety planMobile crisis team, Ohio Medicaid MCO24012/120Wrong13.5 s$0.0024
IDD community living supports shift note (4 hours)IDD supports, Michigan Medicaid, adult under guardianship1016/70Correct9.5 s$0.0015
School-based session, test anxiety, 14-year-oldSchool-based services (FERPA), Medicaid MCO, pre-licensed clinician1606.5/70Correct10.3 s$0.0018
Family therapy with client present: curfew and phone conflictAdult/family outpatient, commercial PPO1606/70Correct12.0 s$0.0019
Psychiatric follow-up with psychotherapy add-on (E/M + 90833)Outpatient psychiatry, Medicare2109/90Correct12.4 s$0.0022
Telehealth CPT for PTSD, 56 minutes, client at home billed POS 02Adult outpatient, Medicaid MCO1507.5/90Correct10.3 s$0.0017
Spanish-language session, behavioural activation, PHQ-9 item 9 positiveAdult outpatient, Michigan Medicaid1908.5/90Correct14.1 s$0.0023
Motivational interviewing, alcohol use, pre-licensed clinicianPart 2 SUD program, Medicaid MCO19010/100Correct13.0 s$0.0023
Peer recovery support, housing and party plan, billed H0004SUD recovery services, Michigan Medicaid, certified peer1706/60Correct11.3 s$0.0018
DBT individual, chain analysis of a self-harm urgeAdult outpatient, commercial HMO1909.5/100Correct10.8 s$0.0019
Discharge / termination session, goals metAdult outpatient, commercial PPO1309/90Correct9.3 s$0.0016
Targeted case management by phone, benefits and transportBehavioral health home, Michigan Medicaid1306.5/70Correct10.3 s$0.0016
Grief, older adult, 38 minutes billed 90832Adult outpatient, Medicare1306/70Correct9.5 s$0.0015

Every other miss

  • None in this run: no CPT, compliance, verifier-partial or crisis-guard misses on either set.

Run it yourself

The dataset, gold labels and runner live in the repository. With the app running and an API key set, one command reproduces this page (run 2026-10-31T02-00-09):

node evals/run.ts