- NPX
- Docker
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
fiscalQuarterNotehelper, andQuarterStartSelectis 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 -
stopHeartbeatwaits for the heartbeat goroutine to exit before the upgrade handler returns. A ping already insideWriteMessagewould 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
stopSequencesnow maps to the neutralstopparameter alongside Anthropic’sstop_sequences. 81 catalog rows were silently losingstop, so the provider ran toend_turninstead of stopping. - Reasoning Replay Rejected on Chat-Shaped Requests -
/v1/chat/completionsand/v1/messagescarry replayed reasoning onreasoning_details, but the fail-soft strip only handled Responses-shaped items. A router that switched models mid-conversation returned “messages.N.content.0: Invalidsignatureinthinkingblock” to the client instead of retrying without the signature. - Thinking Signatures on Responses Content Blocks - Signatures are stripped off content blocks, not just
encrypted_contenton the reasoning item. A message could need the strip withencrypted_contentalready 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.contentis 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;summaryandencrypted_contentalready 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.6andgrok-4.20-multi-agentsilently lostreasoning_effortand answered at the wrong reasoning depth, cost and latency. Replaced with an exact-match deny-list that normalizes routing prefixes,-latestand xAI’s 4-digit date suffixes. - xhigh Reasoning Effort Downgraded for Grok - The shared OpenAI-dialect normalizer downgraded
xhightohighbefore the xAI compat pass ran, losing the value even with the deny-list corrected.grok-4.5still downgrades on purpose, matching xAI’s documented upstream coercion. - Empty Structured-Output Streams -
content_part.added,output_text.delta,output_text.doneandcontent_part.doneare emitted when a tool-based structured-output call is reassembled into a message on the Responses streaming path. Onlyoutput_item.addedanddonewere 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_erroris 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.
1.7.10
- fix: retry after an unverifiable reasoning refusal on chat-shaped requests too -
/v1/chat/completionsand/v1/messagescarry replayed reasoning onreasoning_details, but the fail-soft strip only handled Responses-shaped items, so a router that switched models mid-conversation returned “messages.N.content.0: Invalidsignatureinthinkingblock” straight to the client instead of retrying without the signature - fix: strip thinking signatures off Responses content blocks, not just
encrypted_contenton the reasoning item - a message could need the strip withencrypted_contentalready absent, and only reasoning items are dropped when nothing survives so an ordinary message keeps its own content - fix: stop sending
reasoning.contentto 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 intoreasoning_textblocks and were hitting this.summary+encrypted_contentalready carry everything OpenAI accepts - fix: stop clearing
reasoning_effortfor current-generation Grok models - the rule substring-matched “grok-3-mini”, sogrok-4.5,grok-4.6andgrok-4.20-multi-agentall 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,-latestand xAI’s 4-digit date suffixes - fix: keep
reasoning_effort: "xhigh"forgrok-4.6andgrok-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.5still downgrades on purpose, matching xAI’s documented upstream coercion - fix: emit
content_part.added,output_text.delta,output_text.doneandcontent_part.donewhen a tool-based structured-output call is reassembled into a message on the Responses streaming path - onlyoutput_item.added/donewere emitted, so every consumer reading incremental events rather than the item snapshot saw a stream with no text at all. A schema-constrainedstreamGenerateContentto 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
1.5.10
- fix: map Bedrock’s Converse camelCase
stopSequencesonto the neutralstopparameter alongside Anthropic’sstop_sequences- 81 Nova and Titan catalog rows silently loststopto compat’sdropUnsupportedParams, so the provider ran toend_turninstead of stopping - chore: upgraded core to v1.7.10
0.1.36
- chore: upgraded core to v1.7.10 and framework to v1.5.10
1.6.14
- chore: upgraded core to v1.7.10 and framework to v1.5.10
1.5.37
- chore: upgraded core to v1.7.10
1.6.10
- chore: upgraded core to v1.7.10 and framework to v1.5.10
1.6.37
- chore: upgraded core to v1.7.10 and framework to v1.5.10
1.5.37
- chore: upgraded core to v1.7.10
1.0.18
- chore: upgraded core to v1.7.10 and framework to v1.5.10
1.4.9
- chore: upgraded core to v1.7.10 and framework to v1.5.10
1.0.37
- chore: upgraded core to v1.7.10 and framework to v1.5.10
1.5.37
- chore: upgraded core to v1.7.10 and framework to v1.5.10
1.5.37
- chore: upgraded core to v1.7.10 and framework to v1.5.10

