A field test, September 2026

A model that decides instead of writes. Does it earn its place?

Six real bioinformatics and research-tooling tasks, one new kind of AI model, one cheap open-weight LLM tuned for each task, and about $4 of API spend. Plain language, real numbers.

A chat model writes. Jev picks.

The AI models most people use (ChatGPT, Claude, DeepSeek) generate text one word at a time. Ask them to sort 10,000 records into categories and you get 10,000 little essays, which your code then has to parse, check and occasionally repair.

Jev, from TypeSafe AI, does something narrower. You give it a block of text and a set of typed questions: pick one of these options, rate this on a scale, or is this statement true. It returns a probability for each answer in about a quarter of a second. It cannot answer with anything outside the options you gave it, so there is nothing to parse. Its makers call this a "System One" model, after Kahneman's fast, intuitive mode of thinking.

The usual way: an LLM

prompt "Which tissue is this sample from? Reply as JSON." state cell line: HepG2, H3K27ac ChIP-seq rep1 reply ```json {"tissue": "Liver", "reasoning": "HepG2 is a hepatocellular carcinoma line, so..."} ``` then strip the fence, parse the JSON, check that "Liver" is an allowed value, retry if not time 1.5 to 10 seconds

Jev

state cell line: HepG2, H3K27ac ChIP-seq rep1 ask tissue: Choice {Liver, Blood, Lung, ...} is_control: Noul "this is an input control" answer tissue = Liver p: Liver 1.00, Blood 0.00 is_control = 0.13 then nothing. The value is already valid. time 0.28 seconds

Three question types, and that is the whole API

TypeYou askYou get back
Choicepick one of a defined set (up to 255 options)the pick, a probability for every option, and a separate confidence
Scorerate against ordered levels (low, medium, high)the level and a probability per level
Noulis this statement true?a probability that it is

Every question in a request is answered at once, so asking twenty questions costs about the same time as asking one. Price is $0.042 per million words of input; the answers themselves are free.

Two more real examples from the tests

state CLAIM: "KIT D816V ... does inherently activate mast cells to release mediators" EVIDENCE: "...ROSA(KIT D816V) did not show mediator-related symptoms..." ask verdict: Choice {supported, partial, unsupported} opposite: Noul "the claim asserts the opposite of the evidence" answer verdict = unsupported (0.84) opposite = 0.76
state Name: cuffdiff. Description: Find significant changes in transcript expression, splicing and promoter use. ask in_scope: Noul "this tool can realistically be used in regulatory genomics" cat_motif-discovery: Noul ... (and 19 more categories) answer in_scope = 0.10 every category ≤ 0.19

How the tests were run

  • Each task had a small "dev" set for tuning the wording, and a separate held-out set scored exactly once. Jev and the LLM got the same questions and the same records.
  • The LLM was DeepSeek V4 Flash, a cheap open-weight model, tuned on each task too: output as bare labels or as probabilities, with and without "thinking" mode. The best setting on the dev set went forward.
  • Every task also has a no-model baseline: a rulebook, a majority vote, or a regex. If a model cannot beat that, it is not earning its keep.
  • Two models were compared on identical items with a paired test, so "tie" below means the difference is inside the noise.

Cleaning up the labels on public datasets

Tie on accuracy, Jev cheaper and faster
What

Public genomics repositories hold hundreds of thousands of experiments, each described by whoever uploaded it, in their own words: "HepG2 H3K27ac rep1", "iPSC-derived neurons at DIV16", "WAT MSC". The task is to read that free text and pick the tissue class (20 options) and the assay type (7 options).

Why

Reusing public data means harmonising it first, and curators have been assigning these categories by hand for years. It is the highest-volume, lowest-glamour job in the field, and it is exactly the shape Jev is priced for: short text in, one of a fixed set out, at scale.

How

5,000 records sampled from ChIP-Atlas, stratified by class, with the curators' choices as truth. 500 for tuning the wording, the rest scored once. Every model got the same records and the same questions. The no-model baseline is always guessing the commonest class. A second, untouched 2,999-row sample scored the tuned pipeline.

Result

* best on this metric. (tie): the accuracy difference is within noise on a paired test.

Speed per record
0.28 s
Jev; DeepSeek 1.5 s; Laya 0.11 s
Cost per 1,000
$0.066
Jev; DeepSeek $0.099; Laya $0
Whole archive (846k rows)
~$8
with the cheaper pipeline; 2 to 5 hours
Example: the same record sent to both models

Jev

Request
state title: GSM1517569: FLI1 ChIP-seq in A673 48hrs shGFP source_name: A673 after 48 hrs shGFP cell line: Ewing sarcoma cell line A673 treatment: shGFP · time: 48hrs chip antibody: FLI1 (Santa Cruz, sc-356) questions cell_class: Choice, 20 options {Blood: "blood, immune cells, leukaemia...", Bone: "bone, cartilage, osteosarcoma, Ewing sarcoma...", ...} antigen_class: Choice, 7 options {ATAC-Seq, Histone, ...} is_control: Noul "this experiment is a control (input DNA, IgG, mock IP or whole-cell extract)"
Response
cell_class choice: Bone confidence 1.00 probabilities: Bone 1.00, every other class 0.00 antigen_class choice: TFs and others confidence 1.00 is_control 0.13 curator: Bone / TFs and others
0.70 s · 1,592 input tokens · $0.00007 · nothing to parse

DeepSeek V4 Flash

Request
system You are a decision function. You receive STATE and a set of named QUESTIONS. Answer every question. Return ONLY a JSON object {"answers": {<name>: <answer>}} where a "noul" question gets true or false, a "choice" question gets exactly one option key ... Use only the option keys given. No explanations. user STATE: (the same six lines) QUESTIONS: (the same three, options rendered as text)
Response
{"answers": {"cell_class": "Bone", "antigen_class": "TFs and others", "is_control": false}} curator: Bone / TFs and others
1.7 s · 1,056 in + 30 out tokens · $0.00010 · then parse the JSON, check "Bone" is a valid key

Both right. The difference on this record is only the shape of the answer: Jev returns a probability for every option and a confidence, so code can decide what to auto-accept; the LLM returns the label it picked.

What it means

Jev and the LLM agreed with the curators about 92% of the time, a statistical tie. When I read the records where Jev disagreed most confidently, nine of the first thirty were the curators' mistakes: a pancreatic cancer cell line filed under fat tissue, a kidney line filed under breast, a paediatric brain tumour filed under muscle. The confident disagreements are a cheap way to audit a database.

state GSM2288575: CAPAN-1 AZA c; source: epithelial cells derived from pancreatic adenocarcinoma answer tissue = Pancreas (1.00) curator said: Adipocyte

What made it cheaper was not the prompt. A lookup table of cell-line names answered 39% of records with no model call and no errors, and a second look at only the low-confidence rows fixed most of the rest. Together: accuracy up from 93% to 96% on the fresh sample, cost down by more than half.

Wording variant (500 dev rows)CorrectWords per record$ per 1,000
Full option descriptions4701,5780.066
Short descriptions4681,0210.043
Option names only4246000.025
Short, 10 samples per request4617960.033

A few words per option is enough; long descriptions cost money and buy nothing. Bare names lose nine points because some options carry conventions a name cannot (a cell line files under its tissue of origin).

Fact-checking an AI's citations

Tie on accuracy, 30x faster
What

A research assistant that writes answers with citations can still misquote its sources. The task: for each cited sentence, read the source passage and decide whether it supports the sentence, is only partly supported, or is not supported.

Why

My current fact-checker asks an LLM this question and takes about ten seconds per answer, which is too slow to run before the answer is shown to the reader. A checker that runs in under a second changes what the product can do.

How

Truth by construction: take answers that were checked clean, then plant one known error in a copy of each (a flipped negation, a changed number, a swapped citation, an overstatement). 35 planted errors and 147 clean sentences. A good checker catches the planted errors without flagging the clean ones, so both numbers are reported at a matched false-alarm budget. The no-model baseline is a regex that compares numbers.

Result

* best on this metric. (tie): the accuracy difference is within noise on a paired test.

Speed per answer
0.32 s
Jev, one request; the LLM judge 9.9 s
Cost per 1,000 claims
$0.023
Jev; the LLM judge $0.022
Self-consistency
94%
same verdict when asked three times
Example: the same record sent to both models

Jev

Request
state CLAIM: "...KIT D816V ... promotes neoplastic growth but does inherently activate MCs to release proinflammatory mediators..." (PMID:24677542) EVIDENCE: [PMID:24677542] "...ROSA(KIT D816V) did not exhibit an increased, but did exhibit a decreased responsiveness to IgE-dependent stimuli ... did not show mediator-related symptoms..." questions verdict: Choice {supported, partial, unsupported} opposite: Noul "the claim asserts the opposite of what the evidence states" number_differs: Noul "a number in the claim differs"
Response
verdict choice: unsupported probabilities: unsupported 0.84, supported 0.13, partial 0.03 opposite 0.76 number_differs 0.04 truth: a planted negation; unsupported
0.28 s · about 1,000 input tokens · $0.00004

DeepSeek V4 Flash

Request
system You are a decision function. You receive STATE and a set of named QUESTIONS. Answer every question. Return ONLY a JSON object {"answers": {<name>: <answer>}} where a "noul" question gets {"p": <probability 0-1>}, a "choice" question gets {"choice": <option>, "probs": {...}} ... Use only the option keys given. No explanations. user STATE: (the same claim and evidence) QUESTIONS: (the same three)
Response
{"answers": {"verdict": {"choice": "partial", "probs": {"supported": 0.1, "partial": 0.85, "unsupported": 0.05}}, "opposite": {"p": 0.0}, "number_differs": {"p": 0.0}}} truth: a planted negation; unsupported
3 s · 721 in + 68 out tokens · $0.00008

The one place the two disagree. Jev caught the flipped "does / did not" and said so on both questions; the LLM called it "partial" and gave the negation question 0.0. On the full set Jev caught 4 of 4 negations and the LLM judge 2 of 4.

What it means

The vendor's own documentation warns that Jev is weak on negation and numbers. On negation it caught 4 of 4 (the LLM caught 2 of 4). On numbers, a ten-line regex catches all 7 of 7 with one false alarm, so nobody should ask a model to compare numbers anyway. Used exactly as shipped, Jev flags twice as many clean sentences as the LLM; the fix is to set the threshold on its probability instead of taking its top answer, and that is a real integration cost someone has to pay.

A benchmark lesson on the way: the test set described its clean sentences as "verified clean". There was no verification step in the code. The controls were written by the same model that judges them.

Tagging software tools with categories

Tie, and neither is good enough
What

A catalog of 3,000 regulatory-genomics tools needs each one tagged with the kinds of work it does: motif discovery, peak calling, 3D chromatin, and so on, up to 20 categories, often several per tool. From the tool's name, description and registry annotations, answer twenty yes/no questions, one per category.

Why

The catalog already uses an LLM for this, with the usual JSON parsing and a documented habit of blank or invented category names. A model that structurally cannot invent a category is the obvious replacement, if it reads as well.

How

788 tools were tagged by hand; 150 of them tuned the wording and threshold, 638 were scored once. The baseline is the catalog's own keyword rulebook. Both models saw the same record text; Jev was also tried with the paper's abstract added.

Result

* best on this metric. (tie): the accuracy difference is within noise on a paired test.

Speed per tool
0.28 s
Jev; DeepSeek 4.6 s
Cost per 1,000
$0.037
Jev, tuned; DeepSeek $0.176
Invalid answers
0
from either model, in 3,277 calls
Example: the same record sent to both models

Jev

Request
state Name: TOBIAS Description: Performs ATAC-seq footprinting to investigate transcription factor binding dynamics genome-wide EDAM operations: Peak calling, Transcription factor binding site prediction, Visualisation EDAM topics: Transcription factors and regulatory sites, ... questions 20 × Noul, one per category, e.g. footprinting: "The tool does this kind of work, or is a database serving it: DNase/ATAC digital footprinting..." peak-annotation: "... Annotating peaks to genes/features and testing differential occupancy." + _in_scope (Noul) + _primary (Choice over the 20)
Response
footprinting 0.90 peak-calling 0.86 tfbs-prediction 0.80 nucleosome-chromatin 0.80 motif-scanning 0.61 peak-annotation 0.41 (15 more, all below 0.56) _primary footprinting (1.00) _in_scope 0.92 hand labels: footprinting, peak-annotation
0.49 s · 1,986 input tokens · $0.00008 · cut-off for "yes" tuned to 0.85

DeepSeek V4 Flash

Request
system You are a decision function. You receive STATE and a set of named QUESTIONS. Answer every question. Return ONLY a JSON object {"answers": {<name>: <answer>}} where a "noul" question gets true or false, a "choice" question gets exactly one option key ... Use only the option keys given. No explanations. user STATE: (the same record) QUESTIONS: (the same 22, rendered as text)
Response
{"answers": {"footprinting": true, "peak-calling": true, "tfbs-prediction": true, "peak-annotation": false, ... 16 more false ..., "_in_scope": true, "_primary": "footprinting"}} hand labels: footprinting, peak-annotation
4.6 s · about 1,400 in + 150 out tokens · $0.00018

Same reading, same miss: both follow the registry's "Peak calling" tag and neither sees the peak-annotation role a curator knows about. Jev also hands back the near-misses (0.41) that a threshold or a reviewer can use.

What it means

Both models beat the rulebook clearly, and both plateau around F1 0.72. Ten rounds of tuning (wording, thresholds, adding the paper's abstract) moved Jev from 0.712 to 0.742 and no further. The categories both miss are the secondary ones: a tool that also annotates peaks as a side function. That is knowledge about the tool, not something written on the page, and a model that reads what is on the page cannot supply it.

Jev's yes/no probabilities never reach 0 or 1 (they span 0.02 to 0.96), and the best cut-off for "yes" was 0.85, not 0.5. Thresholds have to be tuned per task.

Classifying genetic variants the way expert panels do

Tie; the rulebook is the limit
What

When a clinical lab finds a variant in a patient's DNA, it classifies it as pathogenic, uncertain or benign by working through a checklist of evidence types (functional studies, family data, population frequency, computational predictions) and combining them by a published rule. The task: from a written evidence summary, answer one yes/no question per checklist item; code then applies the standard combination rule.

Why

This is the shape Jev's makers built their own benchmarks around: several records per case, code owns the decision rule, the model only answers narrow reading questions. If the approach works anywhere in biology, it should work here, and there is public truth at both levels.

How

1,000 variants classified by expert panels, 200 per class. The panel's own evidence text was used with its verdict and checklist codes stripped out (sentences naming another variant's classification were kept, since some criteria cannot be read without them). 150 variants tuned the wording, 850 were scored once. Baseline: a majority vote of what other labs had already said about each variant. Ceiling: the generic rule applied to the panel's own codes.

Result

* best on this metric. (tie): the accuracy difference is within noise on a paired test.

Speed per variant
0.28 s
Jev; DeepSeek 4.0 s
Cost per 1,000
$0.067
Jev; DeepSeek $0.149
Wrong side of the line
2 of 850
pathogenic called benign or vice versa; the rest are one step off
Example: the same record sent to both models

Jev

Request
state Gene: ACADVL · Variant: NC_000017.11:g.7221598G>A Condition: very long chain acyl-CoA dehydrogenase deficiency Annotation: missense · highest population AF 2.0e-05 EVIDENCE SUMMARY: "The c.538G>A variant in ACADVL is a missense variant ... reported in patients affected with VLCAD deficiency, and elevated C14:1 and reduced VLCAD activity measured in patient lymphocytes (PMID: ...). At least one individual was compound heterozygote with a second ACADVL variant ... confirmed in trans ... The highest population minor allele frequency in gnomAD is 0.00003 ... lower than the ... threshold (<0.001) ... REVEL gives a score of 0.92 ..." questions 21 × Noul, one per ACMG criterion, e.g. PS3: "a functional study showed the variant damages..." PM3: "found in trans with a second pathogenic variant..." freq: Choice {absent_or_below, above_expected, standalone_benign, not_stated}
Response
freq choice: absent_or_below (1.00) PVS1 0.95 (this text was one of the rare cases the reader over-called a null variant; the annotation says missense, so code drops it) PS3 0.18 PM3 0.11 PP4 0.14 PP3 0.09 (others lower) code PM2 +1 → 1 point → Uncertain significance panel: Likely pathogenic (PP4_M, PM3_M, PM2_P, PP3_P)
0.28 s · about 1,600 input tokens · $0.00007

DeepSeek V4 Flash

Request
system You are a decision function. You receive STATE and a set of named QUESTIONS. Answer every question. Return ONLY a JSON object {"answers": {<name>: <answer>}} where a "noul" question gets true or false, a "choice" question gets exactly one option key ... Use only the option keys given. No explanations. user STATE: (the same summary) QUESTIONS: (the same 22)
Response
{"answers": {"PVS1": true, "PS3": false, "PM3": false, "PP4": false, "PP3": false, ... , "freq": "absent_or_below"}} code PM2 +1 → Uncertain significance panel: Likely pathogenic
4.4 s · about 1,300 in + 120 out tokens · $0.00015

A miss for both, and an instructive one: the summary describes reduced enzyme activity in patient cells (PS3), a second variant in trans (PM3) and a matching biochemical phenotype (PP4), but the panel's own phrasing did not use the words the questions were written with, and after the panel's verdict sentences were redacted neither model connected them. Wording tuned on 150 such texts moved Jev from 73% to 85% on this task; this record stayed a miss.

What it means

Both models beat the no-reading baseline by only a couple of points, and the reason is not the reading. Feed the panel's own checklist codes into the generic combination rule and it reproduces the panel's verdict only 87% of the time, because panels apply gene-specific exceptions. One variant was called pathogenic by its panel despite a "stand-alone benign" frequency; Jev read the frequency correctly and the rule overrode it. The fix is to put each gene's rules in code, which is what the expert panels publish.

DeepSeek output format (150 dev variants)CorrectSeconds each$ per 1,000
Probabilities, no thinking1268.80.186
Bare labels, no thinking1294.40.150
Probabilities, thinking on12856.90.439
Bare labels, thinking on12727.60.311

"Thinking" mode bought nothing here at 6 to 13 times the latency. Bare true/false answers were the LLM's best format for this task.

Does this tool belong in the catalog at all?

Jev wins clearly
What

Before tagging a tool, the catalog has to decide whether it belongs. The task: from a tool's record, decide admit or exclude. About 5,000 candidates: 3,069 admitted, and 430 looked at and kept out because they were really about protein structure, RNA modification, general read alignment, or were duplicates.

Why

The kept-out tools are hard cases: they were only considered because they share the catalog's vocabulary. And the vendor recommends breaking a judgement like this into many small literal questions and letting code combine them. This task tests that advice directly.

How

Two ways of deciding, from the same request: one judgement question ("could this tool realistically be used in regulatory genomics?"), and 35 small ones ("is this about protein structure?", "is it a database rather than a tool?", one per category, and so on) combined by a hand-written rulebook and, separately, by weights learned from 300 tuning records. Duplicates were checked by code. The LLM was run in both of its output formats on a 1,000-record subset.

Result

* best on this metric. (tie): the accuracy difference is within noise on a paired test.

Speed per tool
0.28 s
Jev; DeepSeek 7 to 10 s
Cost per 1,000
$0.052
Jev; DeepSeek $0.169 to $0.213
Catalog entries flagged
60
confidently out of scope; most look like real mistakes
Example: the same record sent to both models

Jev

Request
state Name: cuffdiff Description: Find significant changes in transcript expression, splicing, and promoter use. EDAM operations: Transcriptional regulatory element prediction EDAM topics: Transcriptomics, Sequencing · Tool type: Web application questions _in_scope: Noul "The tool can realistically be used in regulatory genomics ... Sharing words like motif, peak or binding is not enough. These subjects do not count: ... generic differential expression ..." + 35 literal Nouls (out_diffexp: "describes generic differential expression analysis", cat_regulatory-elements, usable, ...)
Response
_in_scope 0.11 out_diffexp 0.72 cat_regulatory-elements 0.19 (all other categories lower) usable 0.21 adjudicated: excluded (differential transcript expression; the EDAM tag was wrong)
0.28 s · 1,239 input tokens · $0.00005

DeepSeek V4 Flash

Request
system You are a decision function. You receive STATE and a set of named QUESTIONS. Answer every question. Return ONLY a JSON object {"answers": {<name>: <answer>}} where a "noul" question gets {"p": <probability 0-1>}, a "choice" question gets {"choice": <option>, "probs": {...}} ... Use only the option keys given. No explanations. user STATE: (the same record) QUESTIONS: (the same 36)
Response
{"answers": {"_in_scope": {"p": 0.9}, "cat_regulatory-elements": {"p": 0.9}, "usable": {"p": 0.9}, "out_diffexp": {"p": 0.3}, ...}} (in the bare-label format: "_in_scope": true) adjudicated: excluded
10 s · about 1,500 in + 300 out tokens · $0.00021

The typical case behind the 85% vs 65 to 77% gap. The registry tag says "regulatory element prediction", the description says differential expression. Jev weighed the description; the LLM followed the tag and said "in scope" at 0.9.

What it means

Two results. First, the 35 small questions with learned weights scored exactly as well as the one judgement question (paired test: 159 records each way). My own hand-written rulebook over the same questions was much worse. Decomposition paid off only where code could decide outright: a name check caught 9 of 11 duplicate entries; the model caught 1.

Second, this was the one task where the LLM fell clearly behind. With bare yes/no answers it said "in scope" to almost everything (65% correct); with probabilities it ranked poorly (77%). Jev's probability on the single question ranked all 3,349 labelled tools well. The format that was the LLM's best on the variant task was its worst here, because most of these cases are borderline and true/false cannot say so.

flagged E-CRISP (CRISPR guide design), ELM (protein motifs), snoscan and snoGPS (snoRNA), exomePeak (m6A, which the catalog's own rules exclude), PSI-BLAST API ... answer in_scope < 0.2 for all of them; they are in the catalog today

What evidence actually backs each variant?

A product run: same reading, half the price
What

ClinVar, the public database of clinical variant interpretations, shows a star rating per variant but not what the evidence is. The task: read each lab's written submission and record which kinds of evidence it reports (a functional experiment, family data, patients observed, population frequency, computational prediction), then summarise per variant.

Why

A "pathogenic, one star" entry might rest on an experiment and twelve patients, or on a frequency lookup and a computer prediction. For a genome-explorer app I wanted that distinction on the variant page. This one is not a benchmark; it is the first thing built with Jev because the earlier tests said it would work.

How

Scope chosen to fit a small budget: 8,116 variants in 79 carrier-screening genes, restricted to the ones a genome is likely to actually carry, with up to two lab submissions each. 14,375 submissions, $0.41, zero failures. The six reads were validated first on 850 expert-panel texts where the panel's own checklist codes say which evidence types are present. The LLM ran the same validation and 1,000 of the lab submissions.

Result

* best on this metric. (tie): within noise.

Cost of the table
$0.41
Jev; DeepSeek would have been $0.90
Speed per submission
0.28 s
Jev; DeepSeek 1.8 s
Models agree on the tier
92%
of 1,000 submissions; 99% within one tier
Evidence typePresent inJev precision / recallDeepSeek precision / recall
Functional study1510.71 / 0.870.70 / 0.87
Segregation in a family1040.92 / 0.930.94 / 0.89
De novo340.91 / 0.910.91 / 0.91
Patients observed3960.87 / 0.930.77 / 0.97
Population frequency7500.92 / 0.980.92 / 0.98
Computational prediction5590.94 / 0.930.92 / 0.93
Example: the same record sent to both models

Jev

Request
state "For these reasons, this variant has been classified as Pathogenic. Experimental studies have shown that this missense change affects ASPA function (PMID: 12638939, ...). An algorithm ... (PolyPhen-2) suggests that this variant is likely to be disruptive. ... This missense change has been observed in individual(s) with Canavan disease (PMID: 12205125, ...). This variant is present in population databases (rs104894552, gnomAD 0.01%). ..." questions functional: Noul "The text reports a functional study, experimental assay, or in vitro or in vivo evidence..." segregation, de_novo, cases, frequency, insilico, internal_only: six more Nouls of the same shape
Response
functional 0.97 cases 0.97 frequency 0.98 insilico 0.93 segregation 0.05 de_novo 0.03 internal_only 0.02 (PMID present: yes, from a regex) code tier 1: direct evidence (a functional study)
0.28 s · about 700 input tokens · $0.00003

DeepSeek V4 Flash

Request
system You are a decision function. You receive STATE and a set of named QUESTIONS. Answer every question. Return ONLY a JSON object {"answers": {<name>: <answer>}} where a "noul" question gets true or false, a "choice" question gets exactly one option key ... Use only the option keys given. No explanations. user STATE: (the same submission text) QUESTIONS: (the same seven)
Response
{"answers": {"functional": true, "segregation": false, "de_novo": false, "cases": true, "frequency": true, "insilico": true, "internal_only": false}} code tier 1: direct evidence
1.8 s · about 600 in + 60 out tokens · $0.00006

Identical reading. Over 1,000 such submissions the two agreed on the evidence tier 92% of the time; the LLM's disagreements were mostly "patients observed" called on text that only implied it.

What it means

Half of these likely-to-be-carried pathogenic or conflicting variants rest on indirect evidence or none, in the text ClinVar holds. Among variants with conflicting classifications it is 61%. And of 418 variants whose submitters disagree, 236 disagreements are substantive and 182 are arguments over indirect evidence only, a distinction the star rating does not make.

state "This variant was observed as part of a predisposition screen in an ostensibly healthy population. It had not been previously curated..." answer functional 0.03 segregation 0.02 patients 0.08 frequency 0.10 prediction 0.04 → nothing stated

A local model with the same idea

Fast, free, and not yet usable
What

Laya is an open-weight model (Apache licence) with the same three question types and almost the same request format as Jev. It runs on a laptop GPU with no API and no cost.

Why

For private data, a hosted model is not an option at all; a local one with the same interface would be the only acceptable path. And a viral post claimed it was 50 times faster than Jev.

How

Same harness, same questions, same records as the other tabs. It finished the label-cleaning task (1,732 records) and part of fact-checking before the laptop's temperature stopped the run.

Result
Speed per request
24 to 108 ms
on an RTX 3060, depending on option count
Cost
$0
after the download
Label-cleaning accuracy
51%
vs Jev's 93% on the same 1,732 records
What it means

On the label-cleaning task it answered "Pluripotent stem cell" for 37% of records and was right half the time; on fact-checking it flagged three quarters of the clean sentences. Its documentation says the base checkpoints need fine-tuning for a task, and that matches. It also ran my laptop to 92 °C even single-threaded at a 20% duty cycle, so the other tasks stayed unrun.

The right use is as a fine-tuning target: let Jev label a few thousand records for a few cents, review the confident disagreements, and train the local model on the result. That is a separate project.

Scorecard

TaskNo-model baselineJevDeepSeek V4 Flash, tunedVerdict
Cleaning labels (accuracy)22.8%92.1% (95.9% tuned)91.5%tie
Fact-checking (errors caught of 35)723 (26 tuned)25tie
Tagging tools (F1)0.6460.722 (0.736 tuned)0.711tie
Genetic variants (accuracy)80.6%82.6%81.5%tie
Catalog gate (accuracy)85.4%65.3% to 76.7%Jev
Evidence table (precision, 6 types)0.71 to 0.940.70 to 0.94tie
Speed per item0.28 s, every task1.5 to 10 s
Cost, Jev as a share of the LLM's30% to 65%100%
Invalid answers0 in ~35,000 calls2 in ~7,000

What I took from it

  • "Hundreds of times cheaper" did not survive contact with a cheap open-weight LLM. The vendor's headline compares against frontier models made to talk a lot. Against DeepSeek, tuned, Jev cost 30% to 65% per item. Cheaper, never hundreds of times.
  • The biggest gains came from code around the model, not from prompts. A lookup table, a regex, a duplicate check, the shape of the request. Prompt wording tuned on one sample did not hold on a fresh one.
  • Break a decision into small questions only for what code can check outright. For a judgement call, asking the judgement directly was as good as 35 small questions with fitted weights, and far better than my hand-written rules.
  • Output format matters as much as model choice. Bare true/false was the LLM's best setting on one task and its worst on another, where most cases are borderline and true/false cannot say so.
  • Probabilities are the product. On every task, the useful thing was routing on Jev's probability: auto-accept the confident 80%, review the rest, read the confident disagreements to find errors in the "truth".
  • Audit your benchmark. Mine called its controls "verified clean" with no verification step in the code.

Small, fast, constrained models are a good fit for one job: reading short text and making a bounded decision, at volume, with a probability you can act on. For anything that needs judgement across many records, put the judgement in one question and the bookkeeping in code.