Skip to content

docs: the output budget is used as sent; document the reason-empty signal - #202

Merged
sre-helmcode merged 1 commit into
mainfrom
docs/reasoning-budget-truth
Oct 19, 2026
Merged

sre-helmcode merged 1 commit into
mainfrom
docs/reasoning-budget-truth

Conversation

@sre-helmcode

Copy link
Copy Markdown
Contributor

What

nan-devops#898 removed the output-budget floor (owner decision 2026-10-19). Three public surfaces still documented the floor it removed, and none of them is reachable from that repo:

  • the model card, both locales, which promised "a budget below 16384 is raised to 16384";
  • the OpenAPI spec max_tokens description, which promised the same and drew a consequence from it;
  • the two suites that pin that text.

They now say what the platform does: the budget is used exactly as sent, reasoning is billed against that same budget, and a small budget on a prompt that needs deliberation can come back as 200 with finish_reason: "length" and empty content.

The signal

That case is documented with its three-field rule plus the new x-nan-truncated-in-reasoning: true response header (non-streamed calls), added in nan-devops#901. Without it, a client reading only content sees an empty string and one reading only the status sees success.

Tests

Both suites updated and now also assert the absence of the old promise, so a half-updated card fails. npm test: 2502 tests / 87 files green. npm run build green.

…gnal

nan-devops#898 removed the output-budget floor (owner decision
2026-10-19): the client's budget is now passed through as sent on every
model. Three public surfaces still documented the floor it removed, none
of them reachable from that repo:

  * the model card, both locales, which promised "a budget below 16384 is
    raised to 16384";
  * the OpenAPI spec's max_tokens description, which promised the same
    and drew a consequence from it (an overflow near the window);
  * the two suites that pin that text, which would have gone red the
    moment the card changed.

They now say what the platform does: the budget is used exactly as sent,
reasoning is billed against that same budget, and a small budget on a
prompt that needs deliberation can come back as 200 with finish_reason
"length" and empty content. That case is documented with its three-field
rule and the new `x-nan-truncated-in-reasoning: true` response header
(non-streamed calls), which is what tells a client who reads only
`content` that the answer is not legitimately empty.

Both locales, spec and suites moved together; the suites now also assert
the absence of the old promise, so a half-updated card fails.
@sre-helmcode
sre-helmcode merged commit 12a3ca5 into main Oct 19, 2026
2 checks passed
barckcode added a commit that referenced this pull request Oct 19, 2026
Resolved into one text per surface:
- deepseek-v4-flash card (en + es): #200's wording (both ceilings,
  per-route signals, remedies) plus #202's non-streamed
  x-nan-truncated-in-reasoning header on the /chat/completions signal.
  #202's voseo phrasing and "raise the budget, or stream" are superseded.
- Controlling reasoning: #200's paragraph keeps #202's three-field rule
  and header (scoped to non-streamed Chat Completions, per nan-devops#901,
  which reads `choices`); #201's token-budget subsection is linked from
  the "effort is a hint" sentence.
- OpenAPI max_tokens: #200's text plus the header. max_output_tokens:
  #202 claimed finish_reason and the header on Responses; replaced by the
  Responses signal (status incomplete, incomplete_details) and the
  ceilings.
- Tests: union of both suites, adjusted to the final text.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@barckcode
barckcode deleted the docs/reasoning-budget-truth branch October 20, 2026 12:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants