Skip to content

fix(anthropic): map refusal and context-window stop reasons - #316

Merged
andreynering merged 1 commit into
charmbracelet:mainfrom
sven2718:fix/anthropic-finish-reasons
Jul 29, 2026
Merged

fix(anthropic): map refusal and context-window stop reasons#316
andreynering merged 1 commit into
charmbracelet:mainfrom
sven2718:fix/anthropic-finish-reasons

Conversation

@sven2718

@sven2718 sven2718 commented Jul 19, 2026

Copy link
Copy Markdown
Contributor

One thing that's been annoying me about working with fable-5 in crush is that if you trip over anthropic's content classifier (so fable is refusing to process the API calls), crush will just end the turn with no indication of what's gone wrong.

This is easy to fix, because FinishReasonContentFilter is a thing that fantasy already supports -- it just doesn't understand Anthropic's flavor of the error.

The core fix is a 2-line diff. While we're here it's probably also worth writing a unit test and extending the coverage of FinishReasonLength.

The Anthropic API can end a response with stop_reason "refusal"
(safety classifier intervention) or "model_context_window_exceeded",
but both fell through to FinishReasonUnknown, leaving clients unable
to distinguish them from a missing stop reason.

Map "refusal" to FinishReasonContentFilter, matching how the OpenAI
and Google providers already surface their native content-filter
stops, and map "model_context_window_exceeded" to
FinishReasonLength alongside "max_tokens".

💘 Generated with Crush

Assisted-by: Kimi K3 (max thinking) via Crush <crush@charm.land>
@sven2718

sven2718 commented Jul 27, 2026

Copy link
Copy Markdown
Contributor Author

@taciturnaxolotl : poke for review?

@andreynering andreynering left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

@andreynering
andreynering enabled auto-merge (squash) July 29, 2026 13:45
@andreynering
andreynering merged commit 070e912 into charmbracelet:main Jul 29, 2026
6 of 7 checks passed
andreynering added a commit to charmbracelet/crush that referenced this pull request Jul 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants