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-indexedProvider confidence: 43%
Warmthscore
2.40Rubric position · zero-indexedProvider confidence: 36%
Aggressionscore
0.80Rubric position · zero-indexedProvider confidence: 59%
Jargonscore
1.60Rubric position · zero-indexedProvider confidence: 41%
Intentchoice
informInform68%
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 });