diff --git a/references/free-models.md b/references/free-models.md index be7fd46..333be7a 100644 --- a/references/free-models.md +++ b/references/free-models.md @@ -26,6 +26,3 @@ curl -sS -X POST https://api.beatapi.io/v1/capabilities/search \ (its id is not always the free id minus `-free`). - Free models are a limited-time offer: callable right after signup, with no top-up and no card required. -- A decision model is among them: `model:jev-1.13-free`. It takes `state` and - `questions` instead of a prompt: - . diff --git a/references/recipes/decide-with-jev.md b/references/recipes/decide-with-jev.md index e23e3fc..e6f8768 100644 --- a/references/recipes/decide-with-jev.md +++ b/references/recipes/decide-with-jev.md @@ -4,15 +4,15 @@ JEV is a decision model: give it the current state and typed questions, get back typed answers with probabilities. It writes no prose, so there is nothing to parse. Use it to pick one option, score something on a scale, or answer yes/no. -References: `model:jev-1.13-free` (free, rate limited until the account's first -top-up) and `model:jev-1.13` (paid, billed per input token; output is free). -Inspect either for the full schema. +References: `model:jev-1.13` and `model:jev-1.14` (paid, billed per input token; +output is free). Both follow the latest JEV release. Inspect either for the full +schema. There is no free JEV model. ## Run ```json { - "reference": "model:jev-1.13-free", + "reference": "model:jev-1.13", "input": { "state": "We sell a $29/month writing tool. Three landing-page headlines are drafted below. Audience: freelance marketers.\n1) Write faster\n2) Your drafts, done by lunch\n3) AI writing for marketers", "questions": { diff --git a/references/run.md b/references/run.md index c39e281..4a0d3f1 100644 --- a/references/run.md +++ b/references/run.md @@ -50,7 +50,7 @@ Over MCP, pass the same JSON to `capabilities_run`. - **Text models** run the same way: `{"reference":"model:","input":{"input":""}}` returns `output_text`; `usage` token counts may include upstream system prompts and are not comparable across models. **Decision model** JEV: - `{"reference":"model:jev-1.13-free","input":{"state":"…","questions":{…}}}` returns + `{"reference":"model:jev-1.13","input":{"state":"…","questions":{…}}}` returns typed answers with probabilities (question types `noul`, `choice`, `score`; a `noul` needs `instructions`, the yes/no question; `score` takes at most 10 criteria). To rank many candidates use **one** call: diff --git a/skills/beatapi-video/references/free-models.md b/skills/beatapi-video/references/free-models.md index be7fd46..333be7a 100644 --- a/skills/beatapi-video/references/free-models.md +++ b/skills/beatapi-video/references/free-models.md @@ -26,6 +26,3 @@ curl -sS -X POST https://api.beatapi.io/v1/capabilities/search \ (its id is not always the free id minus `-free`). - Free models are a limited-time offer: callable right after signup, with no top-up and no card required. -- A decision model is among them: `model:jev-1.13-free`. It takes `state` and - `questions` instead of a prompt: - . diff --git a/skills/beatapi-video/references/recipes/decide-with-jev.md b/skills/beatapi-video/references/recipes/decide-with-jev.md index e23e3fc..e6f8768 100644 --- a/skills/beatapi-video/references/recipes/decide-with-jev.md +++ b/skills/beatapi-video/references/recipes/decide-with-jev.md @@ -4,15 +4,15 @@ JEV is a decision model: give it the current state and typed questions, get back typed answers with probabilities. It writes no prose, so there is nothing to parse. Use it to pick one option, score something on a scale, or answer yes/no. -References: `model:jev-1.13-free` (free, rate limited until the account's first -top-up) and `model:jev-1.13` (paid, billed per input token; output is free). -Inspect either for the full schema. +References: `model:jev-1.13` and `model:jev-1.14` (paid, billed per input token; +output is free). Both follow the latest JEV release. Inspect either for the full +schema. There is no free JEV model. ## Run ```json { - "reference": "model:jev-1.13-free", + "reference": "model:jev-1.13", "input": { "state": "We sell a $29/month writing tool. Three landing-page headlines are drafted below. Audience: freelance marketers.\n1) Write faster\n2) Your drafts, done by lunch\n3) AI writing for marketers", "questions": { diff --git a/skills/beatapi-video/references/run.md b/skills/beatapi-video/references/run.md index c39e281..4a0d3f1 100644 --- a/skills/beatapi-video/references/run.md +++ b/skills/beatapi-video/references/run.md @@ -50,7 +50,7 @@ Over MCP, pass the same JSON to `capabilities_run`. - **Text models** run the same way: `{"reference":"model:","input":{"input":""}}` returns `output_text`; `usage` token counts may include upstream system prompts and are not comparable across models. **Decision model** JEV: - `{"reference":"model:jev-1.13-free","input":{"state":"…","questions":{…}}}` returns + `{"reference":"model:jev-1.13","input":{"state":"…","questions":{…}}}` returns typed answers with probabilities (question types `noul`, `choice`, `score`; a `noul` needs `instructions`, the yes/no question; `score` takes at most 10 criteria). To rank many candidates use **one** call: diff --git a/test/setup-walkthrough.test.mjs b/test/setup-walkthrough.test.mjs index 805bed2..675a649 100644 --- a/test/setup-walkthrough.test.mjs +++ b/test/setup-walkthrough.test.mjs @@ -82,7 +82,8 @@ test('one loop for every capability, driven by the next field', () => { // Text and decision models run through the same Run call. assert.match(run, /"reference":"model:","input":\{"input":""\}/); assert.match(run, /output_text/); - assert.match(run, /model:jev-1\.13-free/); + assert.match(run, /model:jev-1\.13"/); + assert.doesNotMatch(run, /jev-1\.1[34]-free/); assert.match(run, /at most 10 criteria/); for (const [path, text] of everything) { assert.doesNotMatch(text, /\/v1\/capabilities\/run\/status/, path); @@ -144,7 +145,7 @@ test('free models are discovered at run time, never hardcoded', () => { assert.match(free, /Read the numbers from Inspect/); assert.match(free, /rate_limit_exceeded/); assert.match(free, /limited-time offer/); - // The one id the page may name is the decision model its recipe covers. + // Free ids change; the page names none of them. const ids = new Set([...free.matchAll(/model:([a-z0-9.-]+-free)/g)].map((match) => match[1])); - assert.deepEqual([...ids], ['jev-1.13-free']); + assert.deepEqual([...ids], []); });