GeezerVison is showing github.com — chore: sync fantasy with upstream v0.45.5 by mafredri · Pull Request #31288 · coder/coder
Conversation
mafredri
commented
Oct 26, 2026
•
edited
Loading
Uh oh!
There was an error while loading. Please reload this page.
Moves the fantasy pin to the tip of coder_2_33 (85ffbbe). That commit is coder/fantasy#72, which merges 87 upstream charmbracelet/fantasy commits, v0.40.0 to v0.45.5. Between the two pins 117 files change. Upstream's own v0.40.0 to v0.45.5 change, without tests, testdata, examples, go.sum and the kronk provider, is 43 files, +2271/−928.
What reaches chatd
chatd builds only the anthropic, openai and openaicompat fantasy clients (chatprovider.ModelFromConfig); other vendors reach it through the AI Gateway on one of those. So the upstream changes to the Google, Vercel, OpenRouter, Bedrock, Azure and kronk providers, and to the fantasy.Agent loop and its retries, do not run in chatd. These do:
- Chat Completions and openaicompat streams keep reasoning on batched and DeepSeek-shaped chunks, keep
finish_reason: length when tool calls are truncated, and stop sending empty reasoning fields. openaicompat drops assistant turns that hold only reasoning.
- Token usage. When an OpenAI-shaped backend reports reasoning tokens apart from completion tokens (reasoning larger than output), output tokens now include them, so that backend's reported output tokens and cost rise. OpenAI's own shape, where reasoning is a subset, is unchanged.
- Responses. A content-filtered turn no longer reads as a tool-call turn.
- Context overflow. Baseten, Fireworks and Parasail prompt-length errors set
ContextTooLargeErr, which compaction acts on.
- Anthropic. Tool calls whose content block never closes are reported. For Claude 5 models, thinking defaults to
display: "summarized" when the chat config sets none; a configured display still wins. TestThinkingDropBlockModel_RetriesWithEffort now expects the field in the retry body.
- Anthropic keepalives. Fantasy forwards
message_start, message_delta and unknown events as content-free keepalive parts. The first one arrives before any model output, so this PR makes ttft_seconds and the time_to_first_token stage skip them, as they skip warnings. They still reset the stream silence guard. processStepStream ignores them, and the debug recorder counts them in its part count but records no content.
- Tool-result media now goes through upstream's shared
ToolRunBuffer, which replaces fix(providers): keep tool batches ahead of media messages fantasy#64 and does the same thing.
#72 keeps coder's anthropic-sdk-go and openai-go forks, Go 1.26 and kronk v1.31.5, so upstream's SDK and Go moves do not come along.
go mod tidy raises the modules fantasy v0.45.5 requires, among them otel exporters v1.47, the AWS SDK, google.golang.org/api v0.307 and go-openapi v1. All are upgrades.
The go.mod comment now names #72 as the upstream sync.
#29861 stacks on this PR to pin coder/fantasy#62.
Verification
go build ./....
go test passes on every package that imports fantasy (coderd/x/chatd/...), and go test ./coderd -run 'TestChat|TestExpChat|TestMCP|TestAIBridge' passes.
TestGuardedStreamTTFTStage/WarningsAndKeepalivesThenContentObservesOnce fails without the TTFT change (TTFT observed 0s instead of 1s) and passes with it.
make pre-commit passes. The generated Prometheus docs pick up the metric help change.
Not verified against live backends in this PR: the stream fixes, the token usage change and the context-overflow patterns have no coder test against a real provider. coder/fantasy#72 reports a local chatd run against the AI Gateway on Anthropic, Responses, OpenAI Chat and openaicompat.
🤖 This PR was created with the help of Coder Agents, and will be reviewed by a human. 🏂🏻
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Pin coder/fantasy coder_2_33 at 85ffbbe (coder/fantasy#72), which
merges charmbracelet/fantasy v0.45.5. go mod tidy raises the modules
fantasy now requires.
Claude 5 thinking now defaults to display summarized when the chat
config sets none, so the drop_block retry body carries it.
Fantasy now forwards Anthropic message_start, message_delta and unknown
events as content-free keepalive parts. The first one arrives before
any model output, so counting it closed the TTFT window early.
Docs preview
Check off each page once it's been reviewed. If a page changes in a later push, its checkbox clears automatically so it gets a fresh look. Pages not yet wired into the docs navigation aren't listed here.
|
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Milestone
No milestone
Development
Successfully merging this pull request may close these issues.
Uh oh!
There was an error while loading. Please reload this page.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
|