Core Release v1.11.2
- [fix]: Claude tool-call arguments stream incrementally on Bedrock and Vertex. Without fine-grained tool streaming Claude emits tool input one complete JSON value at a time, so a long argument (a Write call's content) arrived as one burst after minutes of silence and Claude Code aborted with "Stream idle timeout - no chunks received". Claude Code only opts in (eager_input_streaming) when it talks to Bedrock or Vertex directly, and sends nothing to a gateway, so Bifrost now defaults eager_input_streaming on custom tools that leave it unset for every Claude model on Vertex and for Sonnet 4.6, Sonnet 5+, Opus 4.7+ and Fable on Bedrock, keeping an explicit false. Bedrock Converse, which has no per-tool slot and whose edge drops the outer anthropic-beta header, now carries fine-grained-tool-streaming-2025-05-14 in additionalModelRequestFields.anthropic_beta; the Bedrock invoke ingress keeps eager_input_streaming and the legacy anthropic_beta opt-in instead of dropping them @akshaydeo
- fix: translate Anthropic cache_control markers on tool results into prompt_cache_breakpoint for gpt-5.6+ on OpenAI, Azure, Bedrock and Bedrock Mantle, on both Chat Completions and Responses; Responses also marks input_image and input_file parts, and at most four breakpoints are kept (the latest ones) (#8012)
- fix: cap the zstd decoder window at 100 MiB so an oversized frame header is rejected before any allocation (#7859)
zstd-compressed bodies whose frame header asks for a window above 100 MiB are now rejected.
- fix: mask env/vault-resolved values in provider alias configs and Bedrock endpoint overrides when they are redacted for API responses (#7858)
- [fix]: Anthropic per-message effort is carried end to end. An effort-only
role:"system"message (content: []withoutput_config.effort) was dropped on ingress, so a per-turn effort override never reached Anthropic. AnthropicMessage and the neutral ResponsesMessage now carry the per-messageoutput_config, Anthropic direct re-emits it on Fable 5.1, Opus 5+ and Sonnet 5.5 with themid-conversation-output-config-2026-07-01beta injected, and other models and the OpenAI-shaped egress drop it fail-soft (#7714) @akshaydeo - [fix]: Per-message
output_configis stripped wherever per-message effort is unsupported. Claude Code 2.1.285 sendsoutput_configon a text-bearingrole:"system"message, and the raw passthrough forwarded it to Vertex, which rejected it withmessages.1.output_config: Extra inputs are not permitted. The raw-body strip now removesmessages[].output_configoff Anthropic direct and on models without per-turn effort (Vertex, Bedrock invoke, Bedrock Mantle, Azure, DeepSeek, Fireworks, vLLM, SGL), keep the message text and the top-leveloutput_config.effort, and drop effort-only system messages whole @akshaydeo - [feat]: Per-message effort support is datasheet-overridable via
supports_mid_conversation_output_config(ModelCapabilities.SupportsMidConvOutputConfig). A record set for a (provider, model) pair decides the raw-body strip, the conversion and the beta injection. Without a record the hardcoded gate applies (Anthropic direct on the documented models) @akshaydeo - [fix]: The Anthropic raw-body strip no longer copies every message on each request to providers without server-side fallback or prompt-caching scope (Vertex, Bedrock, Azure and others). Byte prefilters skip the fallback-block,
cache_control.scopeand per-messageoutput_configwalks when no message can need them, and the walks use gjson ForEach instead of materialising arrays. A 400-message, 800 KB conversation to Vertex dropped from 4.6 MB allocated and 4.4 ms to 32 B and 2.4 ms per strip @akshaydeo - [fix]: A system item that carries both text and a per-message
output_config.effortkeeps its effort on the hoist and inline fallbacks. The text goes to the top-level system block or an inlined<system-reminder>turn as before, and the override is emitted as a separate effort-only system message, which Anthropic exempts from placement rules @akshaydeo
Installation
go get github.com/maximhq/bifrost/core@v1.11.2This release was automatically created from version file: core/version