TypeSafe helped popularize decision models with the launch of Jev: give a model application context and a set of possible answers, and get back typed decisions with probabilities that code can use directly. Their post Lies, Damned Lies, and Benchmarks makes a related argument: public scores are no substitute for private evaluations on the work you actually need done. We wanted to see how these models fare inside our own enterprise application, where several decisions have to work together before a user gets an answer.
At Isotopes AI, we build aidnn, a system of intelligence over a company’s existing analytical and operational systems. It provides the infrastructure and execution layer for data agents that plan, execute, and verify work, with NeoCortex retaining business context and knowledge from previous work. People use that work through notebooks, dashboards, and data applications. Our Neutron Apps bring the data, interactive views, and follow-up questions together so people can investigate a finding without rebuilding the analysis elsewhere.
The workflow we test here starts with one of those follow-ups. Someone is looking at a view and asks to change the grouping, narrow the dates, or apply another filter. The app needs to interpret the question using the current context and decide whether it can answer from the data it already carries. This follow-up workflow predates our use of Jev. Here, we compare TypeSafe Jev, OpenAI Decisions and Microsoft Decision 1. We included Jev 1.14, announced on October 14, 2026, which was still in preview when we wrote this post.
How long do decisions take?
Lower is better · all supported attempts
Raw dataShow chart
Every run · milliseconds
| Model | Run | Passed /88 | Mean | Median | p95 | Passing-only mean |
|---|---|---|---|---|---|---|
| TypeSafe Jev 1.13 | 1 | 88 | 842.375 | 791.0 | 1297 | 842.375 |
| TypeSafe Jev 1.13 | 2 | 88 | 853.648 | 828.5 | 1305 | 853.648 |
| TypeSafe Jev 1.13 | 3 | 88 | 844.466 | 829.0 | 1278 | 844.466 |
| TypeSafe Jev 1.14 (preview) | 1 | 81 | 895.5 | 835.5 | 1454 | 873.111 |
| TypeSafe Jev 1.14 (preview) | 2 | 85 | 905.318 | 845.5 | 1456 | 895.435 |
| TypeSafe Jev 1.14 (preview) | 3 | 81 | 882.682 | 839.0 | 1462 | 858.284 |
| OpenAI Decisions | 1 | 60 | 1859.466 | 1873.0 | 3115 | 1842.617 |
| OpenAI Decisions | 2 | 60 | 1678.841 | 1543.0 | 2903 | 1642.467 |
| OpenAI Decisions | 3 | 60 | 1615.841 | 1395.0 | 3034 | 1572.4 |
| Microsoft Decision 1 | 1 | 55 | 2951.625 | 2781.0 | 5028 | 2966.509 |
| Microsoft Decision 1 | 2 | 54 | 2704.182 | 2707.5 | 4560 | 2845.722 |
| Microsoft Decision 1 | 3 | 55 | 2733.455 | 2620.0 | 5252 | 2905.6 |
Pooled and matched successful cases · milliseconds
| Model | All mean | All median | All p95 | Passing mean | Passing n | Matched median | Matched p95 |
|---|---|---|---|---|---|---|---|
| TypeSafe Jev 1.13 | 846.83 | 806.5 | 1290 | 846.83 | 264 | 727.0 | 1236 |
| TypeSafe Jev 1.14 (preview) | 894.5 | 838.0 | 1456 | 875.931 | 247 | 743.0 | 1268 |
| OpenAI Decisions | 1718.049 | 1546.0 | 3034 | 1685.828 | 180 | 1417.5 | 2861 |
| Microsoft Decision 1 | 2796.42 | 2707.5 | 4955 | 2906.311 | 164 | 2517.5 | 4332 |
The matched cohort is the same 38 scenarios passing every run for every provider: 114 observations per route. Passing-only means use different case populations.