WORKSPACE / NOINDEX

Playground

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

DECISION CONSOLERECIPE R02 · V1.0.0
01

STATE INPUT

Edit the supplied state

02

TYPED RESULT

Signal monitor

Illustrative fixture
Clarityscore
3.10Rubric position · zero-indexed

Provider confidence: 43%

Warmthscore
2.40Rubric position · zero-indexed

Provider confidence: 36%

Aggressionscore
0.80Rubric position · zero-indexed

Provider confidence: 59%

Jargonscore
1.60Rubric position · zero-indexed

Provider confidence: 41%

Intentchoice
inform
Inform68%
Request14%
Pitch8%
Joke3%
Mixed7%

Provider confidence: 52%

APPLICATION PATHPasses the current checkscurrent-rubric-cleared

Text rubric judgments are not reach, virality, personality or audience-outcome predictions.

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": {
    "clarity": {
      "type": "score",
      "score": 3.1,
      "probabilities": {
        "0": 0,
        "1": 0,
        "2": 0,
        "3": 0.8999999999999999,
        "4": 0.10000000000000009
      }
    },
    "warmth": {
      "type": "score",
      "score": 2.4,
      "probabilities": {
        "0": 0,
        "1": 0,
        "2": 0.6000000000000001,
        "3": 0.3999999999999999,
        "4": 0
      }
    },
    "aggression": {
      "type": "score",
      "score": 0.8,
      "probabilities": {
        "0": 0.19999999999999996,
        "1": 0.8,
        "2": 0,
        "3": 0,
        "4": 0
      }
    },
    "jargon": {
      "type": "score",
      "score": 1.6,
      "probabilities": {
        "0": 0,
        "1": 0.3999999999999999,
        "2": 0.6000000000000001,
        "3": 0,
        "4": 0
      }
    },
    "intent": {
      "type": "choice",
      "choice": "inform",
      "probabilities": {
        "inform": 0.68,
        "request": 0.14,
        "pitch": 0.08,
        "joke": 0.03,
        "mixed": 0.07
      }
    }
  },
  "providerConfidence": {
    "clarity": 0.43,
    "warmth": 0.36,
    "aggression": 0.59,
    "jargon": 0.41,
    "intent": 0.52
  },
  "policyDecision": {
    "action": "passes-current-checks",
    "label": "Passes the current checks",
    "reasonCodes": [
      "current-rubric-cleared"
    ]
  },
  "run": null
}
TypeScript export +
import { experimental_evaluate as evaluate } from 'ai';

const state = {
  "draft": "We added CSV export today. Open your dashboard, choose Export, and select a date range. Please tell us if a field is missing.",
  "audience": "Existing customers",
  "context": "A product update"
};
const questions = {
  "clarity": {
    "type": "score",
    "instructions": "How clearly does the draft convey its main message to the stated audience?",
    "criteria": [
      "No interpretable main point",
      "The main point is hard to identify",
      "The main point is identifiable but important details are unclear",
      "Mostly clear with a minor ambiguity",
      "Clear main point and relevant next step or context"
    ]
  },
  "warmth": {
    "type": "score",
    "instructions": "How warm or welcoming is the wording? Rate textual tone, not the writer.",
    "criteria": [
      "Explicitly dismissive",
      "Cold or abrupt",
      "Neutral",
      "Considerate",
      "Explicitly welcoming and considerate"
    ]
  },
  "aggression": {
    "type": "score",
    "instructions": "How aggressive is the wording toward its reader or another person?",
    "criteria": [
      "No aggressive wording",
      "Slightly sharp wording",
      "Repeated sharp or dismissive wording",
      "Direct belittling or hostility",
      "Sustained personal hostility"
    ]
  },
  "jargon": {
    "type": "score",
    "instructions": "How dense is unexplained specialist language for this audience?",
    "criteria": [
      "No unexplained specialist terms",
      "A small number with enough context",
      "Several may need explanation",
      "Many obstruct comprehension",
      "The message is dominated by unexplained jargon"
    ]
  },
  "intent": {
    "type": "choice",
    "instructions": "What is the main communicative purpose of this draft?",
    "criteria": {
      "inform": "Provide information",
      "request": "Ask for an action or answer",
      "pitch": "Promote an offer or product",
      "joke": "Primarily entertain",
      "mixed": "Mixed or insufficiently clear"
    }
  }
};
const policy = {
  "aggressionReviewAt": 3,
  "clarityReviewAtOrBelow": 1
};

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