v1.1.2
[1.1.2] — 2026-06-06
Release hardening patch for the external model catalog cutover, catalog pricing correctness, and response-body lifecycle fixes. No public API breaks. Fixes every issue labelled release-1.1.2: #132, #133, #134, and #185.
Fixed
- Azure OpenAI, Azure Foundry, and Vertex AI catalog pricing aliases (issue #132): gateway provider IDs such as
azure-openai,azure-foundry, andvertex-ainow resolve against the catalog's canonical provider prefixes (azure_openai,azure_foundry,azure, andvertex_ai). Cost calculation walks the provider-specific fallback chain, skips unpriced preferred chat entries when a priced fallback exists, and includes explicit regression coverage for Azure and Vertex pricing. - OpenAI response-body lifecycle (issue #185): non-streaming OpenAI-compatible responses now drain the HTTP body after decoding so transports can reuse connections, and streaming responses close the OpenAI stream when the gateway stream goroutine exits.
- Provider and circuit-breaker lookup race (PR #170): routing strategy provider lookup now snapshots the provider and circuit-breaker maps under the gateway lock before dispatch, avoiding concurrent map access during runtime discovery or config reload.
- Admin API key mutation leak (PR #190): key-management APIs now return copied in-memory key records so callers cannot mutate the store's internal state through returned pointers.
- Shutdown hook regression coverage (PR #171): added unit-level tests around hook shutdown behavior so future edits keep close/drain semantics intact.
Changed
- Model catalog loading now consumes the external release artifact (issue #133): the default catalog source is the latest
ferro-labs/model-catalogrelease artifact. Gateway startup and refresh use remote-first loading with the embeddedcatalog_backup.jsonas fallback, preserving offline startup while allowing catalog updates without an ai-gateway release. - Catalog lookup uses a reverse model-ID index (issue #134): bare model-ID lookups avoid scanning the full catalog, while preserving the previous behavior for arbitrary caller-constructed
Catalogvalues through validation and fallback scanning. - Streaming content matching precompiles regular expressions (PR #189): repeated streaming content checks no longer compile regexes on the hot path, and config validation fails fast on invalid patterns.
- CI and release workflows use Go
1.25.11: vulnerability scanning now runs against the patched Go 1.25 toolchain so standard-librarygovulncheckfindings match the release environment rather than a stale host toolchain.
Added
- Catalog coverage guardrail: added a provider/catalog coverage test that verifies registered providers either have priced catalog entries for representative models or are explicitly documented as dynamic/no-prefix exclusions.
- Catalog backup refresh guardrails: added the
scripts/refresh_catalog_backup.shhelper and release workflow checks to keep the embedded fallback catalog aligned with the external catalog artifact. - Catalog load observability: added
gateway_catalog_loads_total{source,result}metrics and structured remote/fallback logging with catalog URLs sanitized for credentials and query strings.
Notes
models/catalog.jsonwas removed from the repository. Runtime catalog loading now uses the remote release artifact plus the embeddedmodels/catalog_backup.jsonfallback.- The release notes generator reads this
1.1.2section directly when publishing thev1.1.2GitHub release.
Contributors
Thanks to everyone who shipped this release:
- Release/v1.1.2 (#188) — @Rachit-Gandhi @toller892 @ibobgunardi @MitulShah1
Full changelog: https://github.com/ferro-labs/ai-gateway/blob/v1.1.2/CHANGELOG.md