WORKSPACE / NOINDEX

Playground

Choose a bounded recipe, edit its state, inspect typed results, and export the configuration. Nothing runs on page load.

DECISION CONSOLERECIPE R04 · V1.0.0
01

STATE INPUT

Edit the supplied state

02

TYPED RESULT

Signal monitor

Illustrative fixture
TASK
Fast text
Deep text
Image tool
Human review

Model choice: Fast textApp path: Fast text

Routechoice
fast-text
Fast text82%
Deep text13%
Image tool1%
Human review4%

Provider confidence: 71%

Complexityscore
1.20Rubric position · zero-indexed

Provider confidence: 53%

External Side Effectboolean
Probability of true4%
APPLICATION PATHfast textroute-thresholds-cleared

The model evaluates. Deterministic policy code decides the displayed application path.

03

QUESTIONS / MODEL

Edit the bounded questions

Question edits require a new model run. Types and candidate/rubric boundaries stay locked to the recipe.

04

POLICY / LOCAL

Change the rules, not the result

Policy changes are computed in this browser. Network calls added: 0.

Inspect result +
{
  "origin": "fixture",
  "answers": {
    "route": {
      "type": "choice",
      "choice": "fast-text",
      "probabilities": {
        "fast-text": 0.82,
        "deep-text": 0.13,
        "image-tool": 0.01,
        "human-review": 0.04
      }
    },
    "complexity": {
      "type": "score",
      "score": 1.2,
      "probabilities": {
        "0": 0.03,
        "1": 0.76,
        "2": 0.15,
        "3": 0.05,
        "4": 0.01
      }
    },
    "externalSideEffect": {
      "type": "boolean",
      "probability": 0.04
    }
  },
  "providerConfidence": {
    "route": 0.71,
    "complexity": 0.53
  },
  "policyDecision": {
    "action": "fast-text",
    "label": "fast text",
    "reasonCodes": [
      "route-thresholds-cleared"
    ]
  },
  "run": null
}
TypeScript export +
import { experimental_evaluate as evaluate } from 'ai';

const state = {
  "task": "Write a two-sentence release announcement from these supplied facts.",
  "routingContext": "Choose a text route for a low-risk task using the facts already supplied. Do not execute anything."
};
const questions = {
  "route": {
    "type": "choice",
    "instructions": "Which allowed route matches this task and the routing context?",
    "criteria": {
      "fast-text": "A small bounded text task needing little reasoning",
      "deep-text": "A text task requiring substantial analysis or multi-step reasoning",
      "image-tool": "The primary request is to create or edit an image",
      "human-review": "The task requires authority, consequential side effects, or clarification"
    }
  },
  "complexity": {
    "type": "score",
    "instructions": "How much reasoning complexity is explicit in this task?",
    "criteria": [
      "A direct lookup or tiny transformation",
      "A simple bounded text operation",
      "Several related steps",
      "Substantial analysis with interacting constraints",
      "A complex plan with many uncertain or dependent steps"
    ]
  },
  "externalSideEffect": {
    "type": "boolean",
    "instructions": "Does the task request a consequential change outside this playground, such as sending, paying, deleting or changing permissions?",
    "criteria": {
      "true": "The task explicitly requests such an external side effect.",
      "false": "It only requests analysis, drafting or a sandbox demonstration without an external change."
    }
  }
};
const policy = {
  "minSelectedProbability": 0.75,
  "minProviderConfidence": 0.4,
  "sideEffectReviewThreshold": 0.65
};

const result = await evaluate({
  model: 'typesafe-ai/jev',
  state,
  questions,
  maxRetries: 0,
  providerOptions: { gateway: { zeroDataRetention: true } },
});

// Validate result.answers before applying your deterministic policy.
console.log({ answers: result.answers, policy });