BUILD / ROUTING CONSOLE · R04

Route Lab

Compare Jev’s selected route with the path your application policy is willing to execute.

Preview readyLive validation pending

Recipe 1.0.0
Sources S07, S08
Checked 20 Sep 2026

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 });

USE WHEN

You have a bounded set of routes and want ambiguous cases to pause for review.

DO NOT USE WHEN

You need the playground to call a downstream model or perform an external action.

ACCEPTANCE INVARIANTS

  • Model choice and application route are separate fields.
  • Policy slider movement sends no new model call.
  • Missing confidence is displayed as missing, never fabricated.
  • No vendor ranking, routing performance or downstream costs are implied.