Technology & AI
Jev
Jev is TypeSafe AI's System One model. Public launch was around September 2026. It does not chat. It does not write prose.
You send program state plus typed questions. It returns typed answers with calibrated probabilities, usually in 70 to 500ms. That is a different job than Grok or Claude. Those generate text. Jev decides.
This site does not call Jev yet. There is no
@typesafe-ai/sdk in package.json, and no live
production hook. Notes and snippets only.
What it is
Chat LLMs produce words for people. Jev evaluates a state against questions your code already understands. No JSON scraped out of a paragraph. No "return only valid JSON" prompt theater.
- choice picks one of the options you declared
- score places the state on ordered levels
- noul is yes or no as a 0 to 1 probability (AI SDK calls this
boolean)
Mix them in one request. Questions run in parallel against the same state. Adding more barely changes latency.
Package: @typesafe-ai/sdk
(TypeSafeClient, choice, noul, score).
Or Vercel AI Gateway model id typesafe-ai/jev with AI SDK
experimental_evaluate.
Pricing as of public docs: about $0.042 per 1M input tokens. Output is free.
Pin jev-1.13.0 if you have tuned thresholds.
jev-latest moves when they ship. Use it carefully.
Why type-safe matters
The answer can only be an option you listed. TypeScript infers the union
from those keys. You branch on answers.route.choice without
parsing a sentence.
Add a new bucket later and the type breaks until you handle it. That is the point. Constrained answers, not a model that might invent "maybe-sales-ish."
Confidence is separate from the picked option's probability. High confidence: act. Low confidence: send it to me.
How to call it
The TypeSafe client reads TYPESAFE_API_KEY from the environment.
Do not put a key in the repo. This page is docs only. The site does not
call Jev yet, and @typesafe-ai/sdk is not in
package.json.
import { TypeSafeClient, choice, noul, score } from "@typesafe-ai/sdk";
const client = new TypeSafeClient({ defaultModel: "jev-1.13.0" });
const { answers } = await client.systemOne({
state: { subject, body },
questions: {
route: choice("Where should this inbound message go?", {
consulting: "Consulting, Cafe Cursor, or general work with Mason",
takeoff: "Construction Takeoff, Simple Takeoff, or 3D takeoff",
hardhat: "Hardhat for macOS or Hardhat MCP",
spam: "Cold pitch, scrape, or junk",
}),
urgent: noul("Does this need a same-day reply?"),
},
});
// answers.route.choice is "consulting" | "takeoff" | "hardhat" | "spam"
This site already ships on Vercel with
/api serverless functions. Current production routes talk to
Anthropic or OpenAI directly. They do not call Jev.
If you later use AI Gateway (the
couples therapy bot notes already
talk about provider/model strings), Jev is just
typesafe-ai/jev:
import { experimental_evaluate as evaluate } from "ai";
const result = await evaluate({
model: "typesafe-ai/jev",
state: { subject, body },
questions: {
route: {
type: "choice",
instructions: "Where should this inbound message go?",
criteria: {
consulting: "Consulting, Cafe Cursor, or general work with Mason",
takeoff: "Construction Takeoff, Simple Takeoff, or 3D takeoff",
hardhat: "Hardhat for macOS or Hardhat MCP",
spam: "Cold pitch, scrape, or junk",
},
},
},
});
Examples on this site
Generic support-ticket demos are everywhere. These are the actual inboxes and pages I would point Jev at.
Route inbound contact
hi@masonearl.com and the site contact panel mix consulting
asks, Takeoff questions, Hardhat support, and spam. A choice
keeps the buckets closed.
route: choice("Route this masonearl.com inbound message", {
consulting: "Consulting, speaking, Cafe Cursor, or working together",
takeoff: "Construction Takeoff, Simple Takeoff, or 3D takeoffs",
hardhat: "Hardhat macOS estimating app, sandbox, or Hardhat MCP",
spam: "Recruiting blast, SEO pitch, or scrape",
})
Score wiki search intent
Site search already walks wiki pages. A score can rank whether
a hit is the page someone meant, or just a neighbor.
relevance: score("How well does this wiki page answer the query?", [
"Unrelated",
"Same neighborhood, wrong page",
"Useful related note",
"This is the page they want",
])
Query cpu vs gpu against
CPU and GPU should land high. The same query
against M5 Max is related, not the answer.
Publish guardrail for /ff
The Freedom Fund page is public. Before a weekly audit or wiki note goes live there, ask whether it is scrubbed. Public marks only. No account numbers. No live P&L that should stay private.
safeToPublish: noul(
"Is this /ff draft safe to publish scrubbed: public marks only, no account numbers, no private P&L?"
)
Threshold in code. High yes, publish. Middling, I read it. That is a guardrail, not a trader.
Pocket note destination
House and work notes land in Pocket. A choice can sort the
destination before I file it.
destination: choice("Which Pocket folder should this note go in?", {
work: "Edgevanta, Cursor, construction, Hardhat, or site work",
writing: "Wiki, blog, Earl Pod, or public writing",
personal: "House, Emma, or personal life",
})
When not to use it
- Long prose. Blog posts, episode outlines, wiki drafts. Use a chat model.
- Creative writing. Jev has nothing to say in a paragraph.
- Unsupervised trading. Do not let a 0 to 1 number buy or sell. That is still my call. See Financial Freedom.
- A conversation. If you need back and forth, you want Grok or Claude, not Jev.