core/v1.7.7

maximhq/bifrostcore/v1.7.7Aug 7, 2026by akshaydeo

AI Summary

A major core update fixing numerous issues across AI provider integrations (Anthropic, Bedrock, OpenAI, Gemini), tracing, and observability.

Key Highlights

  • Added `BifrostContextKeyCompatDroppedParams` for per-request parameter handling
  • Rewrote `thinking.type` for adaptive Anthropic models
  • Added OTEL attributes (service instance, team, customer, business unit)
  • Fixed tool execution errors and Bedrock response handling
  • Fixed concurrent request log row loss

New Features

  • Added `BifrostContextKeyCompatDroppedParams`
  • Rewrote `thinking.type` for adaptive-only Anthropic models
  • Added service instance id to OTEL attributes
  • Added team/customer/business-unit ids to OTEL metrics
  • Opt-in HTTP/2 PING keepalives on Bedrock

Full Release Notes

## Core Release v1.7.7

- feat: add `BifrostContextKeyCompatDroppedParams` so the compat plugin can carry its dropped-parameter list per request instead of on the shared plugin struct (#5902)
- feat: rewrite `thinking.type: "enabled"` to the adaptive form for adaptive-only Anthropic models (Opus 4.7+, Opus 4.8, Opus 5, Sonnet 5, Fable 5, Mythos 5) on both the typed request path and the raw passthrough body, and gate `stripUnsupportedAnthropicFields` on `capModel` so custom deployment names resolve correctly (#5934)
- feat: add service instance id to OTEL attributes (#5849)
- feat: add team / customer / business-unit ids and names to OTEL metrics (#5848)
- feat: opt-in HTTP/2 PING keepalives on the Bedrock provider via a configurable interval (0 = off) [@jeremym-tanium](https://github.com/jeremym-tanium)
- fix: always emit a well-formed `message_start` on the Anthropic surface - the frame now carries a `message` object with a `usage` object and an array `content` even when the upstream created event has no payload, and the chat-completions converter no longer panics on a content-less assistant message
- fix: carry tool-result `is_error` across the chat/Responses mux in both directions, and stop the unmarshal reattach gate from dropping a tool message that marks a failure without a `tool_call_id` (#5890)
- fix: mark failed MCP tool executions as errors instead of replaying them to the model as successful results - covers agent-loop execution errors, the MCP protocol's own `isError` flag which was previously discarded, and CodeMode lookup/sandbox failures (#5890)
- fix: carry tool-result `is_error` through the chat completions surface so Anthropic replay and Bedrock Converse status reflect failed tool calls [@AidanAllchin](https://github.com/AidanAllchin)
- fix: preserve encrypted reasoning as a Bedrock replay signature when translating Responses history [@zachgersh](https://github.com/zachgersh)
- fix: `include_server_side_tool_invocations` now reaches the Gemini declaration-drop gate, so mixed server/client tool opt-in propagates from the Anthropic Messages surface (#5935) [@AdityaPainuli](https://github.com/AdityaPainuli)
- fix: inline mid-conversation `role:"system"` messages as a user turn when the native system form is unavailable (unsupported model or wrong provider), tighten the Anthropic placement check to both of its clauses, and stop `convertBifrostSystemReminderToBedrockUserMessage` from dropping `cache_control` (#5931)
- fix: map Bedrock `ConverseStream` `stopReason` to `tool_use` for tool-use turns instead of reporting `end_turn` (#5209) [@axelray-dev](https://github.com/axelray-dev)
- fix: fail soft on `invalid_encrypted_content` by stripping replayed reasoning `encrypted_content` and retrying once, cloning reasoning structs rather than mutating them in place, and reporting the true retry ceiling in retry logs (#5892)
- fix: normalize `tool_search_tool_*` types on the Responses path so server-side tool search actually runs (#5891)
- fix: stop disabling DeepSeek thinking on ordinary multi-turn conversations - the disable gate is narrowed, the thinking shim is now non-mutating, `reasoning_content` is stripped except on tool calls, and inbound reasoning aliases are normalized (#5888)
- fix: emit an all-zero `usage` object on `message_start` for both the native Anthropic and Bedrock invoke streaming paths so `@ai-sdk/anthropic` 4.0.6-4.0.32 no longer rejects the frame as missing a required field (#5886)
- fix: carry `document` tool-result blocks through the Anthropic to Responses converters with a synthesized filename when the block has no title, and propagate `FileURL` and `FileType` across all three chat/responses conversion paths (#5884)
- fix: resolve the base provider for custom providers via the new `BifrostContextKeyBaseProviderType` and `ResolveBaseProvider` helper, so reasoning item-id embedding is decided from the built-in provider rather than the custom provider name (#5897)
- fix: a nil stream delta with a non-nil finish reason no longer bails out of the stream (#5878)
- fix: keep `candidates[0].safetyRatings` and `avgLogprobs` on `generateContent` (Gemini format) responses from Vertex AI (#5877)
- fix: support API-key and context-header auth in the Vertex cached content methods instead of unconditionally overwriting the `Authorization` header with an OAuth token (#5462) [@TransactCharlie](https://github.com/TransactCharlie)
- fix: detect the GPT-5 series with `strings.Contains` instead of `strings.HasPrefix` so prefixed model names still resolve reasoning-effort support (#5867)
- fix: normalize and whitespace-trim attribute values when exporting metrics (#5847)
- fix: carry the client's multipart filename through transcription ingress so non-WAV containers are no longer relabelled `audio.mp3` and rejected (#5823) [@AdityaPainuli](https://github.com/AdityaPainuli)
- fix: concurrent requests sharing a W3C trace id no longer lose LLM log rows (#5356) [@AdityaPainuli](https://github.com/AdityaPainuli)
- fix: clamp http2_ping_interval_in_seconds to avoid int64 overflow on conversion to time.Duration [@jeremym-tanium](https://github.com/jeremym-tanium)
- perf: avoid copying known request fields on the Anthropic path (#5809) [@zachgersh](https://github.com/zachgersh)

### Installation

```bash
go get github.com/maximhq/bifrost/core@v1.7.7
```

---
_This release was automatically created from version file: `core/version`_