Skip to article

Product-minded engineering executive for ambitious software organizations.
Apple, Electronic Arts, SaaS scaleups, analytics, and applied AI.

Applied AI experiment · October 2026

Small Models, Hard Decisions

I wanted to see how easily I could use existing models to create a Jev-like decision model that runs locally on an iPhone or another small device.

3 decision typesYes or no, a choice from supplied options, or a score from a rubric.
87.0%The best model on the small first test: 47 correct answers out of 54.
70.2%Accuracy when two models agreed on the broader semantic validation set.

The question behind JNJIsNotJev was practical: how easily could I adapt existing models into a Jev-like model for small devices?

Here, Jev-like means a focused component that reads supplied evidence and returns a yes/no answer, a choice from supplied options, or a score from a rubric. It should attach probabilities, say unknown when the evidence is insufficient, and run locally on devices such as an iPhone.

I tested two existing decision models, trained smaller student models from their outputs, and tried an 82-million-parameter MiniLM model as a more compact alternative. The first result looked encouraging. Accuracy declined on the larger, more varied datasets.

Result

I completed the evaluation, student training, Core ML conversion, and Swift integration. None of the model candidates passed the broader quality checks, so the experiment ended before real-device evaluation.

Laya led the first test

I started with 72 authored cases. Fifty-four had a definite answer, 12 were missing evidence or outside the requested domain, and six described futures that could not yet be known. Neither model had trained on these cases.

Laya answered 47 of the 54 definite cases correctly, or 87.0%. Verdict answered 35, or 64.8%. Laya was especially stronger on yes/no and scoring questions, while Verdict had a slight edge when choosing from a list.

Verdict: yes/no 10 of 18, choice 16 of 18, score 9 of 18. Laya: yes/no 17 of 18, choice 15 of 18, score 15 of 18. Each task has 18 answerable cases.
Laya led on yes/no and score decisions; Verdict narrowly led on choice. I treated this as an early signal. Eighteen cases per group is too small for a product benchmark.

The tradeoff was size. Verdict's complete download was about 309 MB; Laya's was about 847 MB. Verdict could also decline four of the 12 missing-evidence or out-of-domain requests, while Laya had no native abstention outcome and answered all 12. Accuracy and restraint turned out to be separate problems.

Then I ran the converted models through Core ML on a Mac. Laya kept all 72 decisions from the original model. Verdict changed two. A conversion that loads successfully can still alter the product's behavior, so I made decision parity a separate gate.

Did Core ML preserve the original decisions?
ModelDecisions checkedChanged after conversionResult
Verdict722Failed
Laya720Passed

These were Mac measurements. The compute-unit request left actual execution placement uncertain. iPhone latency, memory use, and energy consumption still require device tests.

Agreement exposed shared mistakes

The next idea was simple: use Laya and Verdict as teachers, keep the decisions where they agreed, and train one smaller student to reproduce that combined signal. If disagreement filtered mistakes, perhaps one model could learn the safer subset.

The first student experiment used synthetic rule-based numeric questions. Four students started from the same Verdict weights: one learned from independently generated labels, one from Laya, and two from hard or soft agreement between Laya and Verdict. At the default acceptance threshold, all three teacher-supervised students declined every validation case. The independently labelled student answered the definite cases, but was only 64.7% correct. The training code ran successfully and gave me no evidence that teacher supervision helped.

Four student controls on the same 500 validation cases
What the student learned fromAccuracy on definite casesAnswers returned at the default acceptance threshold
Independent synthetic labels64.7%374 of 500
Laya65.8%0 of 500
Hard agreement65.2%0 of 500
Soft agreement61.5%0 of 500

I then removed most of the arithmetic and built a broader semantic set around support requests, workflow states, deliveries, document status, and entry policies. Before spending time on another student, I required the two teachers to pass a set of quality gates together.

Agreement between the two teachers on 500 semantic cases
QuestionObservedRequiredResult
When they answered a definite case, were they right?80.9%At least 90%Failed
How many definite cases did they answer?54.5%At least 40%Passed
Were all returned answers valid, including on unknowable cases?70.2%At least 85%Failed
Did they reject unresolved cases?75.4%At least 75%Passed

The two models agreed 235 times. Only 165 of those agreements were correct. Thirty-nine were shared wrong answers, and 31 answered questions that should have remained unresolved. On 14 accepted false yes/no propositions, the pair was wrong all 14 times. They also made the same mistake of following an archived status note instead of a newer, authoritative report.

The denominator mattered, too. On the first diagnostic, the agreement rule got 30 of 31 accepted definite answers right: 96.8%. But it also answered six cases with missing evidence or unknowable futures. Counting every answer the user would actually receive changed the result to 30 of 37, or 81.1%.

Separate datasets. Original diagnostic: 30 correct of 37 accepted; Numeric rules: 25 correct of 70 accepted; Semantic validation: 165 correct of 235 accepted

Definite cases only

Separate datasets. Original diagnostic: 30 correct of 31 accepted; Numeric rules: 25 correct of 49 accepted; Semantic validation: 165 correct of 204 accepted
The three workloads are different. I used the comparison to show how a flattering percentage changes once unresolved cases count as user-visible mistakes.

Agreement can filter disagreements. It cannot certify a shared mistake.

MiniLM was smaller and less accurate

I also tested an unchanged 82-million-parameter MiniLM model. It was less than a fifth of Laya's parameter count and seemed like a more realistic starting point for an on-device feature.

On 90 short relation probes, MiniLM scored 83.3%. When I added repeated but explicitly unrelated administrative text, accuracy fell to 33.3%. Every padded example became neutral, and 54 of the 90 decisions changed. The result captures sensitivity to this type of synthetic padding; short, tidy sentences had hidden it.

Each matrix has 90 probes, 30 per true relation. Short probes scored 75 of 90. All 90 padded probes were predicted neutral, scoring 30 of 90. Padding changed 54 relation decisions.
The same 90 claims were tested in short form and with unrelated padding. The padded versions exposed a strong sensitivity that the short probes had hidden.

I then mapped MiniLM's entailment, contradiction, and neutral outputs into the same yes/no, choice, and score interface. Two reasonable prompt formats both missed the quality, coverage, and unknown-rejection targets.

Performance on the same 500 semantic requests
ApproachCorrect among all returned answersDefinite cases answered
MiniLM published template39.5%16.3%
MiniLM question/answer template37.1%12.3%
Laya + Verdict agreement70.2%54.5%

Core ML introduced one more tradeoff. The roughly 165 MB FP16 packages produced invalid values or changed decisions. The roughly 330 MB FP32 packages preserved the original decisions and probabilities on the Mac. The larger conversion faithfully preserved the model's weak behavior.

Building the Swift interface

Alongside the model experiments, I built a Swift interface for yes/no, choice, and score questions. It supports batch evaluation, editable rubrics, visible probability distributions, and an explicit unknown state.

  • Unknown has its own value. It stays separate from false, a score of zero, and a low-confidence guess.
  • Swift handles deterministic rules. Dates, arithmetic, missing required fields, and workflow transitions stay in code.
  • Core ML output is checked against the source model. The app can reject a converted package when its decisions change.
  • Accuracy is reported with coverage. The results show how often a model answers as well as how often it is correct.

Twenty-three Swift tests passed, and the unsigned iOS release build compiled. Laya remained the default development backend because it led the first test and preserved its decisions after Core ML conversion.

I ended the experiment there. The models had missed the broader quality thresholds, so I did not proceed to signed installation, offline relaunch, or phone performance testing. Using existing models shortened the implementation work. None of the evaluated candidates met the quality bar for deployment.

Methods, definitions, and limitations

The first diagnostic contained 72 authored cases: 54 with definite answers, 12 with missing evidence or out-of-domain requests, and six ambiguous future outcomes. The numeric and semantic pilots each used a separate 500-case validation set drawn from larger synthetic datasets. The larger sets used synthetic labels without independent human review. Their sealed tests remained unscored.

Accuracy on definite casesCorrect outcomes divided by all cases with a known answer, including cases the model declined.
Accuracy on returned answersCorrect answers divided by every answer returned after applying the acceptance threshold. Answering an unresolved case counts as an error.
CoverageThe share of definite cases that receive an answer. It must be reported with accuracy because high precision can come from answering very little.
Conversion parityThe Core ML package must keep the original decisions and stay within the probability tolerance. Passing this check confirms preservation of source behavior; model quality requires separate evaluation.

The 5,000-case numeric and semantic datasets consisted of templated feasibility scenarios. Related scenarios stayed together across data splits. The MiniLM comparison reused semantic development validation and remains a development result. Differences in wording, length, domains, candidate counts, and rubrics make each chart a separate workload.

The native measurements came from an Apple M4 Mac with 16 GiB of unified memory. iPhone speed, memory use, and energy use remain unmeasured, along with actual Neural Engine placement. The open model checkpoints used in this experiment declare Apache-2.0 licensing.

Experiment conducted 12–13 October 2026.

Back to top ↑