#1438 (yhong91): GET /v1/models listed grok/grok-4.7 with context_window
256000 (the Grok backend's own) and max_output_tokens 500000 (models.dev's
x-ai entry, which catalog.Decorate fills in when the backend gives no
output). A client that reads both sizes its replies past what the window
holds. The agents' files already kept output within the window (maxTokens,
#338/#347), but the gateway's lists, the GUI and the CLI did not.
What changed:
- provider.OutputWithin(window, output) and Entry.PublishedOutput(): the
output is kept within the window; an unknown window or output (0) is left
as it is.
- Every place that publishes the pair uses it: modelObject (/v1/models),
cursorLocalModel (Cursor Private Inference), Muse Code's list, the
Gateway page's models and groups (providerInfo, providersState), the
agents' maxTokens, and `magpie model output` (which also says
"500k, kept within its 200k window" when it lowers one).
- Entry.Output stays the model's own limit. The request-path cap
(outputLimit/withMaxOutput) and the user's Max output setting are
unchanged, so no request is lowered further than before. This is why the
clamp is not in replyLimit/entryFor as the issue suggests, and why the
commenter's patch (modelObject only) was not taken as is: it was right
but missed Cursor, Muse, the GUI and the CLI.
- docs/subsystems/gateway-routing.md: the rule and its routes.
Tests (each fails without the change):
- gateway TestModelListsKeepOutputWithinTheWindow: models.dev 500000 over a
backend 256000 window, plus output within the window, unknown window and
unknown output, on /v1/models, Cursor's capabilities and Muse's limit; a
group request with max_tokens 300000 still reaches upstream as 300000.
- provider TestOutputWithin, gui TestProviderModelOutputWithinTheWindow,
TestModelOutputCmdWithinTheWindow.
Breaking it by hand: OutputWithin returning output unclamped turns all of
them red, plus agent TestMaxTokensWithinContextWindow; gateway sites back
on e.Output turn the gateway test red on all three lists; moving the clamp
into Entry.Output turns the fixture and the group-request guard red.
Real data: an offline dump of the owner's catalog (copies of
~/.config/magpie and its caches, 203 entries) has 3 models with output
over their window, grok/grok-4.5, 4.6 and 4.7 (256000 vs 500000), now
published as 256000; 0 are not Grok. The live gateway on 3425 was not
running, so /v1/models itself was not read, and no real Grok request was
made.
Run: gofmt -l; go vet -tags nogui ./... on darwin, linux and windows;
go test -tags nogui ./... -count=1: all green except
TestLoopEndsWorkBuddysReply/plugin/anthropic ("let go only after 3207
lines", bound 2000) at load average ~35 with other suites running; it
passes 5 of 5 alone and does not touch the output limit or request path.