- NPX
- Docker
1.5.9
Private Network Access — To connect to a provider on a private network (e.g. a local vLLM or Ollama instance), set
allow_private_network: true in the provider’s network_config. This allows connections to RFC 1918 ranges (192.168.x.x, 10.x.x.x, 172.16.x.x). Link-local addresses (169.254.x.x) remain blocked regardless of this setting. See Provider Configuration for details.✨ Features
- OpenAI Compaction — Added OpenAI conversation compaction support across core, framework, logging, and the API surface (#4053)
- Multi-Customer & Org Hierarchy — Logs and usage tracking now support multiple customers, teams, and business units, including business unit CRUD, team assignment, and governance endpoints in the OpenAPI spec (#4066, #4041, #4082)
- Provider-Level Governance — Budgets & limits are now scope-aware and can be applied at the virtual-key top level and per provider, wired from the model configs table, with UI filters for scope and providers (#3938, #3937, #3939, #3981, #3962)
- Customer Budgets — Customers support multiple budgets and
calendar_alignedbudget windows (#3998, #3997) - Virtual Key Attribution & Controls — Added a
created_byuser attribution column and ablacklisted_modelscolumn for virtual key provider configs (#3672, #3653) - Request Header Capture — OTel and Maxim observability plugins capture
request_headersby pattern, with wildcard support (e.g.x-custom-*); logging gained the same wildcard header capture (#4012, #3958) - OTel Content Controls & Collectors — New
disable_content_loggingoption drops message/tool content from exported spans, plus support for multiple OTel collectors (#4064, #3894) - xAI x_search — Added xAI
x_searchtool support (#3976) - URL Validation — Added fetch URL validation with private-network configuration and link-local blocking (#3947, #3991)
- File Scheme Pricing URLs — Pricing source URLs now accept the
file://scheme for air-gapped and self-hosted deployments (#4045) - Paginated Virtual Keys — Virtual key fetching is paginated to handle deployments with very large numbers of keys (#3957)
- Client IP Resolution — Resolve client IP from
X-Forwarded-For/X-Real-IPheaders - SCIM Provisioning — Added
attributeType/attributeValueSCIM provisioning fields - Helm/Config Schema — Added
rolesRBAC governance config andper_user_oauthMCP auth to the Helm chart and config schema (#4004, #4009) - Log Navigation UI — Added a “View logs” menu item to customer, team, and virtual key tables, clickable links in log detail views, a customer detail sheet, and a reusable
BudgetDisplaycomponent (#4073, #4054, #4026, #4055) - Faster First Paint — Added an inline loading shell to
#rootbefore React mounts (#4063) - Materialized View Alias — Added an
aliascolumn to the materialized view with filter support (#4078)
🐞 Fixed
- Fetch URL IP Checks — Hardened fetch URL IP checks against SSRF (#4092)
- Mantle Model Matching — Broadened Mantle model matching to all
gptvariants (#4091) - Empty Thinking Blocks — Strip thinking blocks when the signature is empty (#4079)
- OpenAI Stream Usage — Removed usage from the
responses.createdevent in the OpenAI stream (#4080) - Prompt Cache Key — Set the prompt cache key from the Anthropic integration (#4086)
- Upstream Failure Status — Map upstream connection failures to 502 instead of 400 (#3929) (thanks @chris-colinsky!)
- Gemini Schema Constraints — Accept numeric schema integer constraints for Gemini (#3994) (thanks @yanhao98!)
- Files Provider Param — Accept the
?provider=query param onGET /v1/files(#3971) (thanks @alexef!) - Optional Batch Model — Made the
modelfield optional onPOST /v1/batches(#3973) (thanks @alexef!) - Helm Azure Config — Added missing
azure_key_configfields to the Helm schema (#3996) (thanks @axelray-dev!) - Text Completion Chunk Model — Added the missing
Modelfield toTextCompletionChunkResponse(#3970) (thanks @kuishou68!) - MCP Inline stdio Env — MCP stdio server configs accept inline environment variable assignments (#3861) (thanks @Shushmitaaaa!)
- Orphaned Tool Results — Orphaned tool results in the OpenAI to Anthropic conversion flow are no longer rejected by the Anthropic API (#3919)
- Node Usage Reconciliation — Added a monotonic
inc_numberlog cursor so node usage reconciliation does not skip late async log writes (#3664) - Bedrock Output Assessments — Corrected the type of
outputAssessmentsin Bedrock responses (#4028) - Model Pool Pricing Reloads — Preserve non-pricing model pool entries across pricing reloads (#3999)
- Ghost Node Reconciliation — Replicate the VK hierarchy flow for ghost node reconciliation (#4088)
- VK Double Usage Counting — Fixed double usage counting when creating a virtual key (#4070)
- Model Config Lifecycle — Cascade deletes for model configs and removal of stale in-memory model configs (#4051, #4043)
- FTS Index Cap — Reduced the FTS index
left()cap from 800k to 250k chars to stay within the tsvector limit (#4057) - Sync Worker Drift — Reduced the sync worker ticker period to 5m to prevent threshold drift (#4023)
- Passthrough — Fixed passthrough budgets, gated passthrough models per VK, model extraction for Azure passthrough, and restricted fallbacks/provider selection to the VK boundary (#3941, #3988, #3983, #3924)
- Provider Response Headers — Strip provider response headers and add a content-type filter (#3955, #4024)
- Stream Handling — Drain non-SSE stream readers and retry stale connections (#3956, #3967)
- Azure Claude — Strip Azure diagnostic property for Claude models (#3925)
- Compat max_tokens — Preserve chat
max_tokensduring param filtering (#3992) - Raw Request Flag — Removed the raw request flag from providers that don’t support it (#4058)
- UI Fixes — Standardized page container layout, virtual key model configs UI, and dashboard chart tooltips (#4046, #4052, #4044)
🔧 Maintenance
- Dependency Upgrades — Bumped transitive
golang.org/xdependencies (crypto, net, sys, text) for Docker Scout CVE remediation andrechartsto 3.8.1; cascaded version bumps across all modules (#3900, #4003)
⏲️ Rolling back (to 1.5.8)
These are the DB queries you would need to fire if you need to rollback to v1.5.8.Single node setup
Single node setup
Multiple nodes
Multiple nodes
1.5.17
- feat: OpenAI compaction support (#4053)
- feat: multiple customers logs and usage tracking (#4066)
- feat: multiple team and business unit support in logstore (#4041)
- feat:
request_headerspattern capture for OTel and Maxim plugins with wildcard support (#4012) - feat: xAI
x_searchtool support (#3976) - feat: fetch URL validation with private-network config and link-local blocking (#3947, #3991)
- feat:
file://scheme support for pricing URLs (#4045) - feat: filter
ListAllModelsprovider fan-out by virtual key’s allowed providers (#3796) - fix: harden fetch URL IP checks against SSRF (#4092)
- fix: broaden Mantle model matching to all
gptvariants (#4091) - fix: strip thinking block if signature is empty (#4079)
- fix: remove usage from
responses.createdevent in OpenAI stream (#4080) - fix: set prompt cache key from Anthropic integration (#4086)
- fix: map upstream connection failures to 502 instead of 400 (#3929) (thanks @chris-colinsky!)
- fix(gemini): accept numeric schema integer constraints (#3994) (thanks @yanhao98!)
- fix: handle compaction message type (#3966)
- fix: OpenAI integration content string handling (#3949)
- fix: capture resolved provider from the load balancer for logging (#3930)
- fix: add content type to provider response header filter (#4024)
- fix: strip provider response headers (#3955)
- fix: drain non-SSE stream reader (#3956)
- fix: stale connection retries (#3967)
- fix: Azure diagnostic property strip for Claude models (#3925)
- fix: passthrough budgets (#3941)
- fix: bedrock outputAssessments type correction (#4028)
- fix: add Model field to TextCompletionChunkResponse (#3970) (thanks @kuishou68!)
- fix: accept orphaned tool results in OpenAI to Anthropic conversion flow (#3919)
- fix(mcp): allow inline stdio env assignments (#3861) (thanks @Shushmitaaaa!)
- chore: bumped transitive golang.org/x dependencies (crypto, net, sys, text) for Docker Scout CVE remediation (#3900)
1.3.17
- feat: multiple customers logs and usage tracking (#4066)
- feat: multiple team and business unit support in logstore (#4041)
- feat: OpenAI compaction support (#4053)
- feat: multiple budget support for customers (#3998)
- feat:
calendar_alignedbudget support for customers (#3997) - feat: provider-level governance for budgets & limits (#3938)
- feat: scope-aware budgets & limits wired from model configs (#3937, #3939, #3981)
- feat:
created_byuser attribution column for virtual keys (#3672) - feat:
blacklisted_modelscolumn for virtual key provider configs (#3653) - feat:
aliascolumn in materialized view with filter support (#4078) - feat:
request_headerspattern capture for OTel and Maxim plugins (#4012) - feat: paginated virtual key fetch for large key counts (#3957)
- feat: optional
txparam onUpdateBudgetUsagefor transaction support (#4039) - feat: config.json source-of-truth flow (#3968)
- fix: reduce FTS index
left()cap from 800k to 250k chars to stay within tsvector limit (#4057) - fix: cascade deletes for model configs (#4051)
- fix: remove stale in-memory model configs (#4043)
- fix: add monotonic
inc_numberlog cursor so node usage reconciliation does not skip late async log writes (#3664) - fix: reduce sync worker ticker period to 5m to prevent threshold drift (#4023)
- fix: high-scale virtual key flow improvements (#4007)
- fix: preserve non-pricing model pool entries across pricing reloads (#3999)
- fix: passthrough budgets (#3941)
- refactor: make scope-level check methods extensible (#3940)
- revert:
access_profile_iddirect access profile assignment on virtual keys (#3669) - chore: drop the
access_profile_idcolumn fromgovernance_virtual_keys(#3670)
0.1.16
- fix: preserve chat
max_tokensduring param filtering (#3992) - chore: upgraded core to v1.5.17 and framework to v1.3.17
1.5.17
- feat: provider-level governance for budgets & limits (#3938)
- feat: scope-aware budgets & limits wired from model configs (#3937, #3939, #3981)
- feat: team budget and rate-limit collection exporters (#4040)
- feat: multiple budget support for customers (#3998)
- feat:
calendar_alignedbudget support for customers (#3997) - fix: replicate VK hierarchy flow for ghost node reconciliation (#4088)
- fix: cascade deletes for model configs (#4051)
- fix: create virtual key double usage counting (#4070)
- fix: high-scale virtual key flow improvements (#4007)
- fix: remove stale in-memory model configs (#4043)
- fix: gate models for passthrough in VK if present (#3988)
- fix: restrict fallbacks and provider selection to VK boundary (#3924)
- fix: passthrough budgets (#3941)
- refactor: make scope-level check methods extensible (#3940)
1.5.17
- chore: upgraded core to v1.5.17 and framework to v1.3.17
1.5.17
- feat: multiple customers logs and usage tracking (#4066)
- feat: multiple team and business unit support in logstore (#4041)
- feat: OpenAI compaction support (#4053)
- feat:
request_headerspattern capture with wildcard support (#4012) - feat: wildcard pattern support for logging header capture, e.g.
x-custom-*(#3958) - feat: render file attachments in logs (#3931)
- fix: passthrough budgets (#3941)
1.6.17
- feat:
request_headerspattern capture with wildcard support (#4012)
1.5.17
- chore: upgraded core to v1.5.17 and framework to v1.3.17
1.2.17
- feat:
disable_content_loggingoption to drop message/tool content from exported spans (#4064) - feat:
request_headerspattern capture with wildcard support (#4012) - feat: multiple OTel collectors support (#3894)
1.0.17
- chore: upgraded core to v1.5.17 and framework to v1.3.17
1.5.17
- chore: upgraded core to v1.5.17 and framework to v1.3.17
1.5.17
- chore: upgraded core to v1.5.17 and framework to v1.3.17

