Jev Decisions

Jev Decisions on CompanyFabric. POST /v1/decisions, the endpoint for System One models such as TypeSafe's Jev: send a state and typed questions (noul, choice, score), get calibrated probabilities back in about 100 ms. Same key and balance as chat.

What a decision model is

A chat model writes text you then parse. A decision model never writes: you hand it the situation (a ticket, a brief, a transcript, a JSON record) and a set of typed questions, and it returns one typed answer per question with a probability attached, all in one parallel pass. There is no JSON to validate, no free text to misread, and nothing it can invent outside the options you gave it.

Today the catalog has one decision model, typesafe/jev-latest (Jev, by TypeSafe). It costs $0.042 per million input tokens and output is free, so a typical call is a few thousandths of a cent. Try the starter examples in the Jev Decisions playground at /jev-decisions before writing code.

Make a call

Not OpenAI-compatible, on purpose: no chat shape means "answer these questions about this state". Ask several questions in one request; that is the intended use.

curl https://api.companyfabric.com/v1/decisions \
  -H "Authorization: Bearer $COMPANYFABRIC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "typesafe/jev-latest",
    "state": "Second time this month my card was charged twice. Refund me or I cancel.",
    "questions": {
      "category": {
        "type": "choice",
        "instructions": "What is this ticket about?",
        "criteria": { "billing": "Charges, refunds", "technical": "Bugs, errors", "other": null }
      },
      "urgent":     { "type": "noul", "instructions": "Does this need a reply within the hour?" },
      "churn_risk": {
        "type": "score",
        "instructions": "How likely is this customer to leave?",
        "criteria": ["No signal", "Frustrated", "Threatens to cancel"]
      }
    }
  }'

The three question types

  • noul: a yes/no probability from 0 to 1. Optional criteria { true, false } describe what each side means. No separate confidence field; the probability is the answer.
  • choice: one label from criteria, a map of label to description (a description may be null). Returns the chosen label, a confidence, and the full distribution. Up to 255 labels.
  • score: a position on an ordered rubric, criteria is a list of 2 to 10 level descriptions indexed from zero. Returns an expected score (which may fall between levels), a confidence, the distribution, and the legend.

Thresholds, and failing closed

The output is a number, so the policy is yours: act above a threshold, hand to a human below it. A noul near 0.5 means the model is unsure, and the safe default is to treat unsure as no. Ship thresholds as configuration, log every decision with its probability, and tune from the log.

Cost, keys and BYOK

Billed to the same prepaid balance as chat, metered on input tokens, and the exact figure comes back in usage.cost_usd. The welcome credit covers decisions, so a new account can try them without topping up.

Have your own TypeSafe account? Add the key under TypeSafe in the BYOK vault and /v1/decisions routes on it at 0% fee. Keys come from console.typesafe.ai; early access is waitlisted.

Where it fits

  • Support triage: category, urgency and escalate-to-human before a chat model drafts the reply.
  • Agent gates: should this step call a tool, escalate to a frontier model, or stop and ask.
  • Moderation and claim checks: is this a health or income claim, is this content a threat.
  • Routing: which queue, which model tier, which template.
  • The MCP server exposes the same call as the decide tool, so an agent on companyfabric.com/api/mcp can gate its own expensive steps.