← ClaudeAtlas

decision-model-batchlisted

Run massive closed questions (classify, filter, tag, route, score, yes/no, link or not) over hundreds or thousands of items at near-zero cost with a typed decision model instead of a text LLM - Jev by TypeSafe through OpenRouter (`typesafe/jev-1.13`, endpoint POST https://openrouter.ai/api/alpha/decisions, not chat/completions). Covers the exact call format, the three question types (noul, choice, score), how to write questions, stacking dozens of questions per call, calibrating on a sample then deciding in code with explicit thresholds, caching raw probabilities, cost and throughput, and the pitfalls. Use it whenever a task is "the same closed question N times", when the user mentions Jev, TypeSafe or a decision model, or complains about what an LLM costs on a bulk job, even if they just say "classify all these" or "filter this list".
josephbedminster/indie-marketing-skills · ★ 1 · AI & Automation · score 74
Install: claude install-skill josephbedminster/indie-marketing-skills
# Decision model batches A decision model generates nothing. You send a `state` (text) and typed questions; it returns typed answers with calibrated probabilities. On OpenRouter, Jev costs $0.042 per million input tokens, output is free, and an answer takes about 0.4 s: 40 to 200 times cheaper than a text LLM. It is excellent at repeated closed judgments and useless for anything that needs a sentence written. The split that works: **code finds candidates, the model judges, code decides.** Never ask it "find", ask it "is it true that". ## Before you start If `.claude/seo-config.md` exists, read its **Decision model** section: the project may already have a client with retries and caching. Reuse it. If the file is missing and you write a new client, create the file from `../pseo-internal-linking/references/config-template.md` and fill at least that section, so the next job finds the client. Read the **Project conventions** of `.claude/posthog-funnel-map.md` if present. ## The call A dedicated endpoint, **not** `/chat/completions` (which returns 400 for a decisions model): ```text POST https://openrouter.ai/api/alpha/decisions Authorization: Bearer $OPENROUTER_API_KEY Content-Type: application/json { "model": "typesafe/jev-1.13", "state": "…the text to judge, up to ~30,000 tokens…", "questions": { "is_urgent": { "type": "noul", "instructions": "The message expresses urgency." }, "team": { "type": "choice", "instructions": "Which team should handle it