{"slug": "he-says-he-co-invented-chatgpt-his-new-ai-jev-won-t-write-a-word", "title": "He Says He Co-Invented ChatGPT. His New AI, Jev, Won't Write a Word", "summary": "Former OpenAI researcher Diogo Almeida, who describes himself as a co-inventor of RLHF and ChatGPT, has launched TypeSafe AI and its Jev model, which abandons text generation entirely in favor of returning typed decisions with calibrated probabilities. The company, which has raised $40 million, says Jev is the first public \"System One Model,\" trained via a method it calls RLCD (Reinforcement Learning for Calibrated Decisions) and evaluated through a parallel sampler that generates all outputs in a single query. Jev is available through Vercel's AI Gateway with the AI SDK, while direct API keys remain in early access.", "body_md": "On 15 September, Diogo Almeida opened a launch post on\n\n[X](https://x.com/CompleteSkeptic) with this: \"After co-inventing\n\nChatGPT, I kept asking myself: why have superhuman chat models not\n\nled to AGI?\" [The Register](https://www.theregister.com/ai-and-ml/2026/09/16/typesafe-ai-debuts-model-for-machines-that-plays-doom/5296711)\n\ndescribes him as a former OpenAI researcher and a co-inventor of\n\nRLHF and ChatGPT. His company, TypeSafe AI, has raised $40 million.\n\nHis new model is called Jev, and it cannot write you an email. It\n\ncannot summarise a document or explain a stack trace. TypeSafe gave\n\nup string generation on purpose. One of its launch demos plays\n\nDoom.\n\nThink about the last LLM call you wired into a code path that had\n\nto act on the answer. You asked for one of four ticket categories.\n\nMost calls came back as `Billing`. Some came back as `billing.` with\n\na trailing period, and one returned a polite paragraph saying it was\n\nprobably billing but could be account access. So you wrote a parser,\n\nthen wrapped it in a schema check and a retry. All of that existed\n\nto feed one `if` statement downstream.\n\nJev is a bet that a large share of AI traffic is that `if`\n\nstatement.\n\nTypeSafe's [homepage](https://typesafe.ai/) calls Jev the \"first\n\npublic System One Model, optimized for automation\". The\n\n[launch post](https://typesafe.ai/blog/introducing-system-one-models-and-jev)\n\nexplains the name. It comes from Daniel Kahneman's split between\n\nSystem 1, the fast and intuitive mode of thinking, and System 2,\n\nthe slow and deliberate one.\n\nChat models answer by writing, token after token, and the decision\n\nyou need sits somewhere inside the text. A System One model skips\n\nthe writing. You hand it the state of the world and a set of\n\nquestions, and it hands back decisions.\n\nTwo parts of the design are named in the launch post. The training\n\nmethod is RLCD, \"Reinforcement Learning for Calibrated Decisions\".\n\nTypeSafe places it next to RLHF, which optimises for human\n\npreference, and RLVR, which optimises for verifiable rewards. RLCD\n\ntargets \"calibrated decisions: answers with epistemically honest\n\nprobabilities\". The second part is a \"parallel sampler\" that\n\n\"Generates all outputs in a single query\" instead of going token\n\nby token.\n\nCalibrated has a concrete meaning. When the model says 0.8, it\n\nshould be right about 80% of the time. As of launch, TypeSafe has\n\nnot published the algorithm or the architecture behind either\n\npiece.\n\nPut the two paths side by side. With a chat model, your decision\n\ncode sends a prompt, receives text, parses it, validates it and\n\nretries when validation fails. With Jev, you send state plus typed\n\nquestions and get back what the homepage calls \"typed decisions\n\nwith calibrated probabilities\". There is nothing to parse.\n\nStrict structured-output modes on the major LLM APIs already get\n\nyou a valid enum with no parser. What Jev adds, by TypeSafe's\n\naccount, is a calibrated probability next to the answer, at far\n\nlower latency and cost.\n\nThe [docs](https://docs.typesafe.ai/introduction) state the\n\nphilosophy in one line: break judgments down into \"atomic\n\nquestions, composed in code\". Every question is one of three\n\nprimitives, and you can put several in one request, where they are\n\nevaluated in parallel.\n\n`boolean`.\nThe Register printed an example answer to a routing question:\n\n`{\"billing\": 0.08, \"technical\": 0.85, \"sales\": 0.07}`, with a\n\nconfidence of 0.82. That is a distribution over your options. Your\n\ncode decides what 0.85 is worth.\n\nThe AI SDK has a TypeSafe provider. Vercel's\n\n[changelog](https://vercel.com/changelog/typesafe-ai-jev-now-available-on-ai-gateway)\n\nfrom 16 September says Jev \"is now available on AI Gateway\", with\n\nAI SDK 7 as the client. Direct TypeSafe API keys are still in early\n\naccess, so expect to wait for one.\n\n```\npnpm add ai@latest @ai-sdk/typesafe-ai\nexport TYPESAFE_AI_API_KEY=...\n```\n\nThe scenario: a support ticket arrives. You want to know which team\n\nowns it, how blocked the customer is, and whether they are asking\n\nfor money back. The call below follows the\n\n[provider docs](https://ai-sdk.dev/providers/ai-sdk-providers/typesafe-ai)\n\nfield for field.\n\n``` js\nimport { typeSafeAi } from '@ai-sdk/typesafe-ai';\nimport { experimental_evaluate } from 'ai';\n\nexport async function triage(ticketText: string) {\n  const result = await experimental_evaluate({\n    model: typeSafeAi.evaluationModel('jev-latest'),\n    state: { message: ticketText },\n    questions: {\n      team: {\n        type: 'choice',\n        instructions: 'Which team should handle this?',\n        criteria: {\n          billing: { includes: ['Charges', 'Refunds'] },\n          technical: ['Bugs', 'Error messages'],\n          account: ['Login problems', 'Access'],\n          other: null,\n        },\n      },\n      severity: {\n        type: 'score',\n        instructions: 'How blocked is the customer?',\n        criteria: ['Cosmetic', 'Workaround exists', 'Blocking'],\n      },\n      wantsRefund: {\n        type: 'boolean',\n        instructions: 'Is a refund requested?',\n      },\n    },\n  });\n\n  const a = result.answers;\n  return {\n    team: a.team.choice,\n    teamConfidence:\n      result.providerMetadata.typesafe.confidence.team,\n    severity: a.severity.score,\n    refundP: a.wantsRefund.probability,\n  };\n}\n```\n\nThree shapes come back. `choice` is the selected option.\n\n`score` is a fractional score for the ordered levels you listed.\n\n`probability` is P(true). Confidence lives in\n\n`providerMetadata.typesafe.confidence` and exists for Choice and\n\nScore questions only. Values are rounded to two decimals. A failed\n\ncall throws `APICallError`, and the SDK retries 429 and 529\n\nresponses up to `maxRetries`, which defaults to 2. If you go\n\nthrough AI Gateway, the model id is the string `'typesafe-ai/jev'`\n\ninstead.\n\nThe routing logic is the part your team owns. It is plain\n\nTypeScript with no API dependency, so you can run and test it\n\ntoday.\n\n```\ntype Triage = {\n  team: string;\n  teamConfidence: number;\n  severity: number;\n  refundP: number;\n};\n\ntype Route =\n  | { kind: 'human'; reason: string }\n  | { kind: 'refund-desk'; priority: number }\n  | { kind: 'queue'; team: string; priority: number };\n\nconst MIN_TEAM_CONFIDENCE = 0.7;\nconst REFUND_YES = 0.9;\nconst REFUND_NO = 0.1;\n```\n\nThose three constants are the numbers you tune. Below\n\n`MIN_TEAM_CONFIDENCE`, a person picks the team. `REFUND_YES` and\n\n`REFUND_NO` mark where a refund probability counts as a clear yes\n\nor a clear no.\n\n```\nexport function decide(t: Triage): Route {\n  if (t.teamConfidence < MIN_TEAM_CONFIDENCE) {\n    return { kind: 'human', reason: 'unsure which team' };\n  }\n  if (t.team === 'other') {\n    return { kind: 'human', reason: 'no matching team' };\n  }\n  if (t.team === 'billing') {\n    if (t.refundP >= REFUND_YES) {\n      return { kind: 'refund-desk', priority: t.severity };\n    }\n    if (t.refundP > REFUND_NO) {\n      return { kind: 'human', reason: 'refund unclear' };\n    }\n  }\n  return {\n    kind: 'queue',\n    team: t.team,\n    priority: t.severity,\n  };\n}\n```\n\nThe probability is what makes this different from a boolean flag.\n\nA billing ticket with a refund probability of 0.95 goes straight to\n\nthe refund desk. One at 0.05 stays in the billing queue. Anything in\n\nbetween lands with a person, because that middle band is where an\n\nautomated refund decision costs you most. The thresholds here are starting\n\npoints. Set yours from a few hundred tickets your team has already\n\nlabelled.\n\nThe homepage says \"Zero Hallucinations\". The launch post lists a 0%\n\nhallucination rate and adds its own caveat: \"Our number is not\n\nempirical. Schema matching is guaranteed\".\n\nThat second sentence is the entire guarantee. Ask for one of\n\n`billing`, `technical`, `account` or `other`, and TypeSafe\n\nguarantees one of those four comes back. No `billing.` with a\n\nstray period, and no fifth team invented on the spot.\n\nYou can still get the wrong one. Anthony Maio makes that point in a\n\n[skeptical write-up](https://anthonymaio.substack.com/p/jev-the-language-model-that-wont):\n\na schema guarantee stops malformed output, and it does nothing to\n\nstop the model from \"picking the wrong option\". The Register says the hallucination-free\n\ncomparison \"really isn't a fair comparison as its output is not\n\nnatural language\", and notes that answers can still be wrong. The\n\nschema was always the easy half of the problem. Whether `technical`\n\nwas the right call is the hard half, and no output format settles\n\nit.\n\nMaio raises two more issues worth carrying into production. First,\n\n\"The reward function, architecture, training procedure, and\n\ncalibration methodology are all undisclosed\", and calibration has\n\nto survive distribution shift. Your tickets are not TypeSafe's test\n\nset. Second, and this one hits the `decide` function directly:\n\n\"individually calibrated judgments do not automatically compose\n\ninto a calibrated workflow once you run them through thresholds,\n\nweights, and branches\". Three well-calibrated answers fed through\n\nyour `if` statements can still produce a badly calibrated route.\n\nMeasure the routes, end to end, against labels.\n\nThe homepage runs a side-by-side example. Jev answers in 0.114s for\n\n$0.000081. The LLM takes 8.566s and $0.013880. On those numbers,\n\nJev is about 75x faster and 171x cheaper. All of it is\n\nvendor-reported.\n\nA separate banner on the same page reads \"193.6x Faster, 444.6x\n\nCheaper\", with a footnote: \"based on workflows for System One\n\ntasks\". That banner is a different measurement from the example.\n\nThe launch post puts end-to-end latency at \"70ms-500ms\", against\n\n\"3 to 329 seconds\" for LLMs. Input is priced at $0.042 per million\n\ntokens, which TypeSafe also writes as $42 per billion. Output\n\ntokens are listed as \"FREE (too cheap to meter)\".\n\nTypeSafe deserves credit for printing its own footnotes. The\n\nside-by-side query is \"highly simplified\". Its short input \"paints\n\nour model in an advantageous light\". And the 193.6x and 444.6x\n\nbanner figures sit at \"the higher end of real world gains\".\n\nThe vendor-run [workflow evals](https://evals.typesafe.ai/) add\n\naccuracy to the comparison. Across four workflows, Jev scores 67.8%\n\nat $0.0004 per case and 0.4s. GPT-5.6 Sol scores 74.1% at $0.0836\n\nand 23.3s. GPT-5.6 Luna scores 66.8% at $0.0033 and 12.9s.\n\n\"Accuracy\" there means agreement with reference labels generated\n\nfrom an average of GPT-6 Astra and Claude Fable 5.1 responses, both\n\nat high thinking, and TypeSafe says the evals may carry \"some bias\"\n\nbecause its own team built them. On TypeSafe's own numbers, GPT-5.6\n\nSol and Claude Opus 5 (73.1%) clearly beat Jev, which sits with the\n\npack at a small fraction of the cost and latency.\n\nThe most useful result on that page applies to every model. Each\n\nLLM got more accurate, cheaper and faster when the task was split\n\ninto Choice, Score and Noul questions instead of one big prompt. In\n\naggregate, Luna went from 51.9% to 66.8%, one point behind Jev.\n\nDecomposition carries a big part of the win, and you can have that\n\npart with the model you already call.\n\nVercel CEO Guillermo Rauch [wrote](https://x.com/rauchg) about fx,\n\na Vercel tool whose default auto mode runs a safety reviewer on\n\nevery command. He said that reviewer runs on GPT-5.6 Luna today,\n\nthat \"Jev is up to 18x faster (p95) *and* more accurate\", and that\n\nit is \"likely new default\". The word is likely. Vercel's Pranit\n\n([@fazxes](https://x.com/fazxes)) reported \"~5-18x faster and more\n\naccurate than gpt-5.6-luna\", without a published dataset or further\n\nnumbers as of 17 September.\n\nMost of these come straight from TypeSafe's launch post.\n\nNathan Flurry of Rivet ([@NathanFlurry](https://x.com/NathanFlurry))\n\ngave the framing that fits best: \"jev does not replace gpt /\n\nclaude\", \"jev is just a *really* smart switch statement\", \"like if\n\n2016 ml classifiers got 2026 levels of intelligence\".\n\nThat tells you where Jev goes in your system. TypeSafe pitches it for places\n\nwhere you \"Classify, route, score, extract, or branch where\n\nhand-written logic is too brittle\", and for work that needs you to\n\n\"Score, judge, verify, guardrail, and detect jailbreaks of LLM\n\nprompts\". Vercel's changelog lists agent-shaped jobs: selecting a\n\ntool or subagent, choosing the next action (continue, retry, ask\n\nthe user, halt), rating urgency or risk before an operation, and\n\nvalidating outputs.\n\nIn an agent loop, the chat model writes and Jev picks the branch.\n\nMaio's summary holds up: \"The strongest case for Jev is\n\narchitectural rather than algorithmic\".\n\nWhether Jev's accuracy holds on your data is an open question, and\n\nonly your labelled examples can answer it. The architectural\n\nlesson doesn't need Jev at all. Wherever an LLM's output feeds an\n\n`if`, stop asking for prose and ask for typed answers instead. Do\n\nit this week with the structured output your\n\ncurrent model already supports. If Jev's numbers survive your\n\neval, the calibrated probabilities are what you gain on top, and\n\nthe questions are already written.\n\nJev's pitch rests on an idea you can use with any model today. I\n\nwrote *AI That Answers* to build it with regular LLMs in\n\nTypeScript: structured output your code can branch on, and the\n\ntoken cost of every call. If this post made you look twice at the\n\nparser behind your LLM calls, start there. I also wrote the\n\n[Prompt Engineering Pocket Guide](https://www.amazon.com/dp/B0GX38N645),\n\na short companion for when you start breaking one big prompt into\n\nsmall questions.\n\n**AI in TypeScript** — five books, one path from your first LLM call to agents in production:\n\n**Pocket Guides for Developers** — short references you can finish in an evening:\n\nGoing deeper on tracing and evals: [Observability for LLM Applications](https://www.amazon.de/-/en/dp/B0GXNNMKVF).", "url": "https://wpnews.pro/news/he-says-he-co-invented-chatgpt-his-new-ai-jev-won-t-write-a-word", "canonical_source": "https://dev.to/gabrielanhaia/he-says-he-co-invented-chatgpt-his-new-ai-jev-wont-write-a-word-e3c", "published_at": "2026-09-17 08:41:49+00:00", "updated_at": "2026-09-17 08:53:19.509765+00:00", "lang": "en", "topics": ["artificial-intelligence", "large-language-models", "ai-startups", "ai-products", "developer-tools"], "entities": ["Diogo Almeida", "TypeSafe AI", "Jev", "OpenAI", "ChatGPT", "RLHF", "Vercel", "AI SDK"], "alternates": {"html": "https://wpnews.pro/news/he-says-he-co-invented-chatgpt-his-new-ai-jev-won-t-write-a-word", "markdown": "https://wpnews.pro/news/he-says-he-co-invented-chatgpt-his-new-ai-jev-won-t-write-a-word.md", "text": "https://wpnews.pro/news/he-says-he-co-invented-chatgpt-his-new-ai-jev-won-t-write-a-word.txt", "jsonld": "https://wpnews.pro/news/he-says-he-co-invented-chatgpt-his-new-ai-jev-won-t-write-a-word.jsonld"}}