> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getbifrost.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# v1.6.11

> v1.6.11 changelog - 2026-08-14

<Tabs>
  <Tab title="NPX">
    ```bash theme={null}
    npx -y @maximhq/bifrost --transport-version v1.6.11
    ```
  </Tab>

  <Tab title="Docker">
    ```bash theme={null}
    docker pull maximhq/bifrost:v1.6.11
    docker run -p 8080:8080 maximhq/bifrost:v1.6.11
    ```
  </Tab>
</Tabs>

<Update label="Bifrost(HTTP)" description="1.6.11">
  ## ✨ Features

  * **URL Sources Inlined for AWS-Hosted Claude** - URL-sourced images and documents are fetched and inlined on the native-Anthropic path, since Bedrock Mantle rejects `{"source":{"type":"url"}}`. Fetches go through the SSRF-safe dialer with a size cap, and a failed fetch aborts the request rather than silently dropping an attachment.
  * **Quarterly Budgets for Customers** - Quarterly budgets are now supported by the customer entity, and by virtual key provider configs.
  * **Fiscal Year Start in Budget Labels** - Budget UI labels surface the configured fiscal year start through a new `fiscalQuarterNote` helper, and `QuarterStartSelect` is relaid out to a horizontal label and preview row with a right-aligned select.
  * **Flexible Entity Selector Width** - The entity selector accepts `contentClassName`, so callers can widen or constrain its dropdown instead of being pinned to the default width.

  ## 🐞 Fixed

  * **WebSocket Writes After Disconnect** - A broadcast racing a client disconnect could panic on a nil connection or deliver to an unrelated client's socket, because fasthttp recycles the hijacked connection as soon as the upgrade handler returns. Clients now carry an explicit closed flag and a close that blocks until in-flight writes finish.
  * **Realtime Heartbeat Panic on Disconnect** - `stopHeartbeat` waits for the heartbeat goroutine to exit before the upgrade handler returns. A ping already inside `WriteMessage` would dereference a recycled connection, and unlike the broadcast path there is no recover, so the panic took down the whole process.
  * **Stop Sequences Dropped for Nova and Titan** - Bedrock's Converse camelCase `stopSequences` now maps to the neutral `stop` parameter alongside Anthropic's `stop_sequences`. 81 catalog rows were silently losing `stop`, so the provider ran to `end_turn` instead of stopping.
  * **Reasoning Replay Rejected on Chat-Shaped Requests** - `/v1/chat/completions` and `/v1/messages` carry replayed reasoning on `reasoning_details`, but the fail-soft strip only handled Responses-shaped items. A router that switched models mid-conversation returned "messages.N.content.0: Invalid `signature` in `thinking` block" to the client instead of retrying without the signature.
  * **Thinking Signatures on Responses Content Blocks** - Signatures are stripped off content blocks, not just `encrypted_content` on the reasoning item. A message could need the strip with `encrypted_content` already absent, and only reasoning items are dropped when nothing survives, so an ordinary message keeps its own content.
  * **Reasoning Content Rejected by OpenAI and Azure Models** - `reasoning.content` is no longer sent to non-gpt-oss reasoning models, which cap the array at zero entries and reject a populated one with "Invalid 'input\[N].content': array too long". Replayed Anthropic thinking blocks were hitting this; `summary` and `encrypted_content` already carry everything those models accept.
  * **Reasoning Effort Cleared for Current Grok Models** - The rule substring-matched "grok-3-mini", so `grok-4.5`, `grok-4.6` and `grok-4.20-multi-agent` silently lost `reasoning_effort` and answered at the wrong reasoning depth, cost and latency. Replaced with an exact-match deny-list that normalizes routing prefixes, `-latest` and xAI's 4-digit date suffixes.
  * **xhigh Reasoning Effort Downgraded for Grok** - The shared OpenAI-dialect normalizer downgraded `xhigh` to `high` before the xAI compat pass ran, losing the value even with the deny-list corrected. `grok-4.5` still downgrades on purpose, matching xAI's documented upstream coercion.
  * **Empty Structured-Output Streams** - `content_part.added`, `output_text.delta`, `output_text.done` and `content_part.done` are emitted when a tool-based structured-output call is reassembled into a message on the Responses streaming path. Only `output_item.added` and `done` were emitted, so consumers reading incremental events saw a stream with no text while tokens were billed. Affects Vertex, Bedrock Mantle and Azure Claude.
  * **HTTP 529 Rotating Credentials** - Anthropic's `overloaded_error` is treated as a transient server error. It reflects capacity across all callers rather than anything about the credential, so the same key is retried with backoff instead of being rotated away.

  ## 🗄️ Database Migrations

  * No new database migrations in this release.
</Update>

<Update label="Core" description="1.7.10">
  * fix: retry after an unverifiable reasoning refusal on chat-shaped requests too - `/v1/chat/completions` and `/v1/messages` carry replayed reasoning on `reasoning_details`, but the fail-soft strip only handled Responses-shaped items, so a router that switched models mid-conversation returned "messages.N.content.0: Invalid `signature` in `thinking` block" straight to the client instead of retrying without the signature
  * fix: strip thinking signatures off Responses content blocks, not just `encrypted_content` on the reasoning item - a message could need the strip with `encrypted_content` already absent, and only reasoning items are dropped when nothing survives so an ordinary message keeps its own content
  * fix: stop sending `reasoning.content` to non-gpt-oss OpenAI/Azure reasoning models, which cap the array at zero entries and reject a populated one with "Invalid 'input\[N].content': array too long. Expected an array with maximum length 0"; replayed Anthropic thinking blocks translate into `reasoning_text` blocks and were hitting this. `summary` + `encrypted_content` already carry everything OpenAI accepts
  * fix: stop clearing `reasoning_effort` for current-generation Grok models - the rule substring-matched "grok-3-mini", so `grok-4.5`, `grok-4.6` and `grok-4.20-multi-agent` all silently lost the field and answered at the wrong reasoning depth, cost and latency. Replaced with an exact-match deny-list (`SupportsGrokReasoningEffort`) that normalizes routing prefixes, `-latest` and xAI's 4-digit date suffixes
  * fix: keep `reasoning_effort: "xhigh"` for `grok-4.6` and `grok-4.20-multi-agent` - the shared OpenAI-dialect normalizer downgraded it to "high" before the xAI compat pass ran, so the value was lost even with the deny-list corrected. `grok-4.5` still downgrades on purpose, matching xAI's documented upstream coercion
  * fix: emit `content_part.added`, `output_text.delta`, `output_text.done` and `content_part.done` when a tool-based structured-output call is reassembled into a message on the Responses streaming path - only `output_item.added`/`done` were emitted, so every consumer reading incremental events rather than the item snapshot saw a stream with no text at all. A schema-constrained `streamGenerateContent` to Bedrock Mantle returned `{"candidates":[{"content":{"role":"model"},"finishReason":"STOP"}]}` with tokens billed. Affects Vertex, Bedrock Mantle and Azure Claude, the three providers that emulate structured output with a forced tool call
  * feat: inline URL-sourced images and documents for AWS-hosted Claude on the native-Anthropic path - Bedrock Mantle rejects `{"source":{"type":"url"}}` with "URL content sources are not yet supported for this model". Fetches go through the SSRF-safe dialer with a size cap, and a failed fetch aborts the request rather than silently dropping an attachment. Brings the native-Anthropic surface to parity with Bedrock's Converse path
  * fix: treat HTTP 529 (Anthropic's `overloaded_error`) as a transient server error - it reflects capacity across all callers rather than anything about the credential, so the same key is retried with backoff instead of being rotated away
</Update>

<Update label="Framework" description="1.5.10">
  * fix: map Bedrock's Converse camelCase `stopSequences` onto the neutral `stop` parameter alongside Anthropic's `stop_sequences` - 81 Nova and Titan catalog rows silently lost `stop` to compat's `dropUnsupportedParams`, so the provider ran to `end_turn` instead of stopping
  * chore: upgraded core to v1.7.10
</Update>

<Update label="compat" description="0.1.36">
  * chore: upgraded core to v1.7.10 and framework to v1.5.10
</Update>

<Update label="governance" description="1.6.14">
  * chore: upgraded core to v1.7.10 and framework to v1.5.10
</Update>

<Update label="jsonparser" description="1.5.37">
  * chore: upgraded core to v1.7.10
</Update>

<Update label="logging" description="1.6.10">
  * chore: upgraded core to v1.7.10 and framework to v1.5.10
</Update>

<Update label="maxim" description="1.6.37">
  * chore: upgraded core to v1.7.10 and framework to v1.5.10
</Update>

<Update label="mocker" description="1.5.37">
  * chore: upgraded core to v1.7.10
</Update>

<Update label="modelcatalogresolver" description="1.0.18">
  * chore: upgraded core to v1.7.10 and framework to v1.5.10
</Update>

<Update label="otel" description="1.4.9">
  * chore: upgraded core to v1.7.10 and framework to v1.5.10
</Update>

<Update label="prompts" description="1.0.37">
  * chore: upgraded core to v1.7.10 and framework to v1.5.10
</Update>

<Update label="semanticcache" description="1.5.37">
  * chore: upgraded core to v1.7.10 and framework to v1.5.10
</Update>

<Update label="telemetry" description="1.5.37">
  * chore: upgraded core to v1.7.10 and framework to v1.5.10
</Update>
