Your First Hour With TypeSafe Jev: From API Key to Typed Answers
A practical on-ramp to Jev: playground, one HTTP call, Python SDK, and the three primitives you’ll use on every project.
If you learn best by shipping a working call before reading a manifesto, this is the path.
TypeSafe’s Jev is a System One model: you send state + typed questions, you get structured answers. No completion to parse. Official quickstart: docs.typesafe.ai/introduction/quickstart.
0–10 minutes: feel it in the Playground
- Open the TypeSafe Playground and sign in.
- Paste a short support ticket as state — something like: “I’ve been trying to connect Stripe for three days and I’m losing sales. Help ASAP.”
- Add a Noul: instructions =
Does this message express urgency? - Add a Choice for department (
billing/technical/sales) and a Score for frustration levels. - Run once. Notice you get probabilities (and confidence on Choice/Score) without asking the model to “respond as JSON.”
That mental model is the whole product.
10–25 minutes: one HTTP request
Endpoint:
POST https://api.typesafe.ai/v1/systemone
Authorization: Bearer $TYPESAFE_API_KEY
Content-Type: application/json
Minimal body:
{
"model": "jev-latest",
"state": "Hi, I've been trying to connect my Stripe account for 3 days and it keeps failing. I'm losing sales. Please help ASAP.",
"questions": {
"is_urgent": {
"type": "noul",
"instructions": "The message conveys urgency or time-sensitivity"
}
}
}
Useful model IDs (as of mid-September 2026 docs/community writeups):
jev-latest— alias; moves when new versions shipjev-1.13.0— pin this in production when you need repeatabilityjev-preview— preview track
The response includes the resolved versioned model id, answers, and usage. Log the resolved model.
List aliases with GET https://api.typesafe.ai/v1/models.
25–45 minutes: Python SDK
pip install typesafe-sdk
export TYPESAFE_API_KEY=...
from typesafe_sdk import Choice, Noul, Score, TypeSafeClient
client = TypeSafeClient() # defaults to jev-latest
ticket = (
"Hi, I've been trying to connect my Stripe account for 3 days "
"and the integration keeps failing. I'm losing sales. Please help ASAP."
)
response = client.system_one(
state=ticket,
questions={
"department": Choice(
instructions="Which team should handle this",
criteria={
"billing": "Payment or subscription issues",
"technical": "Bugs or integration problems",
"sales": "Pricing or account questions",
},
),
"frustration": Score(
instructions="How frustrated the customer appears",
criteria=[
"Calm, just stating facts",
"Frustrated but civil",
"Very angry, strong language",
],
),
"is_urgent": Noul(
instructions="The message conveys urgency or time-sensitivity",
),
},
)
print(response.answers["department"].choice)
print(response.answers["frustration"].score)
print(response.answers["is_urgent"].noul)
JavaScript teams: @typesafe-ai/sdk (Node 20+). Agent-heavy workflows can install TypeSafe’s agent skill via npx skills add typesafe-ai/skills --skill typesafe-ai.
45–60 minutes: design habits that actually stick
Before you invent a taxonomy of twenty departments, internalize TypeSafe’s guidance:
- One judgment per question. Decompose “rate this pitch” into market, feasibility, differentiation — then weight in code.
- Filter state first. Large blobs full of irrelevant detail hurt accuracy (jaggedness notes).
- Keep arithmetic in code. Jev is not your calculator.
- Gate on confidence for Choice/Score before you auto-act (confidence-gated routing).
Career tip
Learning Jev is less about memorizing another prompt template and more about practicing product judgment as software design: closed option sets, explicit rubrics, and escalation rules. Those skills transfer whether your next employer uses TypeSafe or rolls its own classifiers.
When you’re ready for a worked example that wires thresholds into routing, build a confidence-gated support router next — same primitives, production-shaped control flow.
Comments
Loading comments…