> ## 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.5.4

> v1.5.4 changelog - 2026-05-22

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

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

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

  * **Virtual Key Blocked Models** — Block specific models at the virtual key provider-config level; blocked models take priority over allowed models and are enforced by governance (#3653)
  * **Virtual Key Ownership** — Virtual keys now capture and display a `created_by` user attribution (#3672)
  * **MCP Log Attribution** — MCP tool logs are stamped with user, team, customer, and business unit IDs so MCP usage can be traced like LLM usage
  * **Team & Business Unit Filters** — Added team and business unit filters across the dashboard and logs views (#3650)
  * **Sticky Time Filters** — Time filter selections are preserved when navigating between sidebar items (#3647)

  ## 🐞 Fixed

  * **Idle Timeout Panic** — Fixed a panic in the streaming idle-timeout reader and added a guard to skip reads once the connection is closed (#3672)
  * **Anthropic Streaming** — Preserve the tool-call stop reason in the Anthropic streaming fallback (#3640) (thanks [@dicnunz](https://github.com/dicnunz)!)
  * **TTFT Metric** — Fixed the request start-time setting so the time-to-first-token metric is accurate (#3668)
  * **Vertex Service Tier** — Map the Vertex traffic type to the correct Bifrost service tier (#3662)
  * **Keyless Providers** — Fixed `ListModels` for providers configured without an API key (#3655)
  * **Anthropic Tools** — Stopped forcing `type: custom` on Anthropic tool definitions (#3652)
  * **Node Usage Reconciliation** — Added a monotonic log cursor so reconciliation no longer skips late async log writes (#3664)
  * **Fallback Budget Tracking** — Clear the stale governance rejection flag on allow so successful fallback retries count toward budgets and rate limits (#3645)
  * **Virtual Keys Table** — Table now fills available height with a sticky header and scrollable body (#3676)
  * **Sheet Layout** — Removed save/cancel icons and fixed sheet layout growth in routing rule and virtual key sheets (#3675)
  * **Toast Click-Through** — Toasts remain clickable above modal overlays (#3674)
  * **Direct Access Control** — Reverted the virtual key `access_profile_id` direct access profile assignment shipped in v1.5.3; the `access_profile_id` column has been dropped (#3669, #3670)
</Update>

<Update label="Core" description="1.5.12">
  * fix: idle timeout panic in the streaming idle-timeout reader
  * fix: short-circuit `IdleTimeoutReader` reads when the connection is already closed (#3672)
  * fix: preserve tool call stop reason in Anthropic streaming fallback (#3640) (thanks [@dicnunz](https://github.com/dicnunz)!)
  * fix: correct start-time setting for accurate TTFT metric value (#3668)
  * fix: map Vertex traffic type to Bifrost service tier (#3662)
  * fix: ListModels for keyless providers (#3655)
  * fix: remove manual `type: custom` for Anthropic tools (#3652)
</Update>

<Update label="Framework" description="1.3.12">
  * feat: `created_by` user attribution column for virtual keys (#3672)
  * feat: `blacklisted_models` column for virtual key provider configs (#3653)
  * fix: add monotonic `inc_number` log cursor so node usage reconciliation does not skip late async log writes (#3664)
  * revert: `access_profile_id` direct access profile assignment on virtual keys (#3669)
  * chore: drop the `access_profile_id` column from `governance_virtual_keys` (#3670)
</Update>

<Update label="compat" description="0.1.11">
  * chore: upgraded core to v1.5.12 and framework to v1.3.12
</Update>

<Update label="governance" description="1.5.12">
  * feat: virtual key blocked-models enforcement — reject requests when the requested model is blocked at the VK provider-config level (#3653)
  * fix: clear stale `governanceRejectedContextKey` on an allow decision so successful fallback retries count toward budgets and rate limits (#3645)
</Update>

<Update label="jsonparser" description="1.5.12">
  * chore: upgraded core to v1.5.12 and framework to v1.3.12
</Update>

<Update label="logging" description="1.5.12">
  * feat: stamp MCP tool logs with governance ownership (user, team, customer, and business unit IDs) from the request context
</Update>

<Update label="maxim" description="1.6.12">
  * chore: upgraded core to v1.5.12 and framework to v1.3.12
</Update>

<Update label="mocker" description="1.5.12">
  * chore: upgraded core to v1.5.12 and framework to v1.3.12
</Update>

<Update label="otel" description="1.2.12">
  * chore: upgraded core to v1.5.12 and framework to v1.3.12
</Update>

<Update label="prompts" description="1.0.12">
  * chore: upgraded core to v1.5.12 and framework to v1.3.12
</Update>

<Update label="semanticcache" description="1.5.12">
  * chore: upgraded core to v1.5.12 and framework to v1.3.12
</Update>

<Update label="telemetry" description="1.5.12">
  * chore: upgraded core to v1.5.12 and framework to v1.3.12
</Update>
