feat: support for /audio/transcription and /audio/translation - #1
feat: support for /audio/transcription and /audio/translation#1PatilHrushikesh wants to merge 40 commits into
Conversation
e1a60e0 to
ec0f50b
Compare
Signed-off-by: Hrushikesh Patil <hrushi2900@gmail.com>
…e support) Signed-off-by: Hrushikesh Patil <hrushi2900@gmail.com>
…span name) Signed-off-by: Hrushikesh Patil <hrushi2900@gmail.com>
0d13d5b to
6c3be3b
Compare
Signed-off-by: Hrushikesh Patil <hrushi2900@gmail.com>
**Description**
the problem is that MCP backends are wildly inconsistent in how they
format their responses:
Some return plain JSON (application/json Content-Type with a raw
JSON-RPC body).
Some return gzip-compressed JSON without setting the Content-Encoding
header properly (so the proxy can't rely on headers alone).
Some return SSE-framed data (lines like data: {...}) while incorrectly
advertising Content-Type: application/json (e.g. Slack MCP).
decodeJSONRPCMessagesFromBackendBody handles all three cases with a
cascading fallback strategy:
Try raw JSON decode first.
If that fails, sniff for the gzip magic bytes (0x1f 0x8b) and try
decompressing.
If that also fails, check for SSE framing (data: prefix) and parse it as
SSE.
**Related Issues/PRs (if applicable)**
Closes envoyproxy#1996
---
cc: @nacx
---------
Signed-off-by: Hritik003 <hritik.raj@nutanix.com>
Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
Signed-off-by: Hrushikesh Patil <hrushi2900@gmail.com>
…xy#1933) **Description** max_tokens and max_completion_tokens are optional in openAI spec https://developers.openai.com/api/reference/resources/chat/subresources/completions/methods/create However when I try to send the request from the source I get 422 if my AIServiceBackend has AWSAnthropic schema. It's impossible to add this field with bodyMutation due to ordering (I've considered mutating body before the translation but it seems to be a whole redesign rather than small fix with providing default) **Special notes for reviewers (if applicable)** Per gen AI policy I disclose that claude did help me with setting up this PR --------- Signed-off-by: Mikhail Toldov <matoldov@gmail.com> Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
…t coverage ) Signed-off-by: Hrushikesh Patil <hrushi2900@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Signed-off-by: Hrushikesh Patil <54735070+PatilHrushikesh@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Signed-off-by: Hrushikesh Patil <54735070+PatilHrushikesh@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Signed-off-by: Hrushikesh Patil <54735070+PatilHrushikesh@users.noreply.github.com>
Signed-off-by: Hrushikesh Patil <hrushi2900@gmail.com>
…otlpmetrichttp from 1.42.0 to 1.43.0 (envoyproxy#2026) Bumps [go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp](https://github.com/open-telemetry/opentelemetry-go) from 1.42.0 to 1.43.0. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md">go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp's changelog</a>.</em></p> <blockquote> <h2>[1.43.0/0.65.0/0.19.0] 2026-04-02</h2> <h3>Added</h3> <ul> <li>Add <code>IsRandom</code> and <code>WithRandom</code> on <code>TraceFlags</code>, and <code>IsRandom</code> on <code>SpanContext</code> in <code>go.opentelemetry.io/otel/trace</code> for <a href="https://www.w3.org/TR/trace-context-2/#random-trace-id-flag">W3C Trace Context Level 2 Random Trace ID Flag</a> support. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8012">#8012</a>)</li> <li>Add service detection with <code>WithService</code> in <code>go.opentelemetry.io/otel/sdk/resource</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/7642">#7642</a>)</li> <li>Add <code>DefaultWithContext</code> and <code>EnvironmentWithContext</code> in <code>go.opentelemetry.io/otel/sdk/resource</code> to support plumbing <code>context.Context</code> through default and environment detectors. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8051">#8051</a>)</li> <li>Support attributes with empty value (<code>attribute.EMPTY</code>) in <code>go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> <li>Support attributes with empty value (<code>attribute.EMPTY</code>) in <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> <li>Support attributes with empty value (<code>attribute.EMPTY</code>) in <code>go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> <li>Support attributes with empty value (<code>attribute.EMPTY</code>) in <code>go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> <li>Support attributes with empty value (<code>attribute.EMPTY</code>) in <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> <li>Support attributes with empty value (<code>attribute.EMPTY</code>) in <code>go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> <li>Support attributes with empty value (<code>attribute.EMPTY</code>) in <code>go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> <li>Add support for per-series start time tracking for cumulative metrics in <code>go.opentelemetry.io/otel/sdk/metric</code>. Set <code>OTEL_GO_X_PER_SERIES_START_TIMESTAMPS=true</code> to enable. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8060">#8060</a>)</li> <li>Add <code>WithCardinalityLimitSelector</code> for metric reader for configuring cardinality limits specific to the instrument kind. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/7855">#7855</a>)</li> </ul> <h3>Changed</h3> <ul> <li>Introduce the <code>EMPTY</code> Type in <code>go.opentelemetry.io/otel/attribute</code> to reflect that an empty value is now a valid value, with <code>INVALID</code> remaining as a deprecated alias of <code>EMPTY</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> <li>Improve slice handling in <code>go.opentelemetry.io/otel/attribute</code> to optimize short slice values with fixed-size fast paths. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8039">#8039</a>)</li> <li>Improve performance of span metric recording in <code>go.opentelemetry.io/otel/sdk/trace</code> by returning early if self-observability is not enabled. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8067">#8067</a>)</li> <li>Improve formatting of metric data diffs in <code>go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8073">#8073</a>)</li> </ul> <h3>Deprecated</h3> <ul> <li>Deprecate <code>INVALID</code> in <code>go.opentelemetry.io/otel/attribute</code>. Use <code>EMPTY</code> instead. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> </ul> <h3>Fixed</h3> <ul> <li>Return spec-compliant <code>TraceIdRatioBased</code> description. This is a breaking behavioral change, but it is necessary to make the implementation <a href="https://opentelemetry.io/docs/specs/otel/trace/sdk/#traceidratiobased">spec-compliant</a>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8027">#8027</a>)</li> <li>Fix a race condition in <code>go.opentelemetry.io/otel/sdk/metric</code> where the lastvalue aggregation could collect the value 0 even when no zero-value measurements were recorded. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8056">#8056</a>)</li> <li>Limit HTTP response body to 4 MiB in <code>go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp</code> to mitigate excessive memory usage caused by a misconfigured or malicious server. Responses exceeding the limit are treated as non-retryable errors. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8108">#8108</a>)</li> <li>Limit HTTP response body to 4 MiB in <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp</code> to mitigate excessive memory usage caused by a misconfigured or malicious server. Responses exceeding the limit are treated as non-retryable errors. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8108">#8108</a>)</li> <li>Limit HTTP response body to 4 MiB in <code>go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp</code> to mitigate excessive memory usage caused by a misconfigured or malicious server. Responses exceeding the limit are treated as non-retryable errors. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8108">#8108</a>)</li> <li><code>WithHostID</code> detector in <code>go.opentelemetry.io/otel/sdk/resource</code> to use full path for <code>kenv</code> command on BSD. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8113">#8113</a>)</li> <li>Fix missing <code>request.GetBody</code> in <code>go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp</code> to correctly handle HTTP2 GOAWAY frame. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8096">#8096</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/9276201a64b623606e3eaa0d61ae8ee6d62756c0"><code>9276201</code></a> Release v1.43.0 / v0.65.0 / v0.19.0 (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8128">#8128</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/61b8c9466c4e6b17e69b622279fe9b63fb15c89a"><code>61b8c94</code></a> chore(deps): update module github.com/mattn/go-runewidth to v0.0.22 (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8131">#8131</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/97a086e82ffe01502f4c620e9c447efa229e2a23"><code>97a086e</code></a> chore(deps): update github.com/golangci/dupl digest to c99c5cf (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8122">#8122</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/5e363de517dba6db62736b2f5cdef0e0929b4cd0"><code>5e363de</code></a> limit response body size for OTLP HTTP exporters (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8108">#8108</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/35214b60138eac8dec97a2d2b851d8c8471680c7"><code>35214b6</code></a> Use an absolute path when calling bsd kenv (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8113">#8113</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/290024ceaf695f9cdbf29a0c6731a317d92bc361"><code>290024c</code></a> fix(deps): update module google.golang.org/grpc to v1.80.0 (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8121">#8121</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/e70658e098033d6bb5ec1b399de16bbb2642f6dc"><code>e70658e</code></a> fix: support getBody in otelploghttp (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8096">#8096</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/4afe468e3b4859c949a1c1e8d92684d43d86ef8a"><code>4afe468</code></a> fix(deps): update googleapis to 9d38bb4 (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8117">#8117</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/b9ca729776309e3c08fe700c131797a3b4d10634"><code>b9ca729</code></a> chore(deps): update module github.com/go-git/go-git/v5 to v5.17.2 (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8115">#8115</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/69472ec56cb7674d55ca2e2bcb04dea73228ab79"><code>69472ec</code></a> chore(deps): update fossas/fossa-action action to v1.9.0 (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8118">#8118</a>)</li> <li>Additional commits viewable in <a href="https://github.com/open-telemetry/opentelemetry-go/compare/v1.42.0...v1.43.0">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/envoyproxy/ai-gateway/network/alerts). </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
**Description** I think the title describe it well. Adding my employer to the adopters list 🥇 --------- Signed-off-by: Martin Ehrnst <21357174+ehrnst@users.noreply.github.com>
…ploghttp from 0.18.0 to 0.19.0 (envoyproxy#2025) Bumps [go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp](https://github.com/open-telemetry/opentelemetry-go) from 0.18.0 to 0.19.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/open-telemetry/opentelemetry-go/releases">go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp's releases</a>.</em></p> <blockquote> <h2>Release v0.19.0</h2> <h3>Added</h3> <ul> <li>Added <code>Marshaler</code> config option to <code>otlphttp</code> to enable otlp over json or protobufs. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1586">#1586</a>)</li> <li>A <code>ForceFlush</code> method to the <code>"go.opentelemetry.io/otel/sdk/trace".TracerProvider</code> to flush all registered <code>SpanProcessor</code>s. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1608">#1608</a>)</li> <li>Added <code>WithSampler</code> and <code>WithSpanLimits</code> to tracer provider. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1633">#1633</a>, <a href="https://github.com/open-telemetry/opentelemetry-go/issues/1702">#1702</a>)</li> <li><code>"go.opentelemetry.io/otel/trace".SpanContext</code> now has a <code>remote</code> property, and <code>IsRemote()</code> predicate, that is true when the <code>SpanContext</code> has been extracted from remote context data. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1701">#1701</a>)</li> <li>A <code>Valid</code> method to the <code>"go.opentelemetry.io/otel/attribute".KeyValue</code> type. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1703">#1703</a>)</li> </ul> <h3>Changed</h3> <ul> <li><code>trace.SpanContext</code> is now immutable and has no exported fields. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1573">#1573</a>) <ul> <li><code>trace.NewSpanContext()</code> can be used in conjunction with the <code>trace.SpanContextConfig</code> struct to initialize a new <code>SpanContext</code> where all values are known.</li> </ul> </li> <li>Update the <code>ForceFlush</code> method signature to the <code>"go.opentelemetry.io/otel/sdk/trace".SpanProcessor</code> to accept a <code>context.Context</code> and return an error. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1608">#1608</a>)</li> <li>Update the <code>Shutdown</code> method to the <code>"go.opentelemetry.io/otel/sdk/trace".TracerProvider</code> return an error on shutdown failure. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1608">#1608</a>)</li> <li>The SimpleSpanProcessor will now shut down the enclosed <code>SpanExporter</code> and gracefully ignore subsequent calls to <code>OnEnd</code> after <code>Shutdown</code> is called. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1612">#1612</a>)</li> <li><code>"go.opentelemetry.io/sdk/metric/controller.basic".WithPusher</code> is replaced with <code>WithExporter</code> to provide consistent naming across project. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1656">#1656</a>)</li> <li>Added non-empty string check for trace <code>Attribute</code> keys. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1659">#1659</a>)</li> <li>Add <code>description</code> to SpanStatus only when <code>StatusCode</code> is set to error. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1662">#1662</a>)</li> <li>Jaeger exporter falls back to <code>resource.Default</code>'s <code>service.name</code> if the exported Span does not have one. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1673">#1673</a>)</li> <li>Jaeger exporter populates Jaeger's Span Process from Resource. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1673">#1673</a>)</li> <li>Renamed the <code>LabelSet</code> method of <code>"go.opentelemetry.io/otel/sdk/resource".Resource</code> to <code>Set</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1692">#1692</a>)</li> <li>Changed <code>WithSDK</code> to <code>WithSDKOptions</code> to accept variadic arguments of <code>TracerProviderOption</code> type in <code>go.opentelemetry.io/otel/exporters/trace/jaeger</code> package. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1693">#1693</a>)</li> <li>Changed <code>WithSDK</code> to <code>WithSDKOptions</code> to accept variadic arguments of <code>TracerProviderOption</code> type in <code>go.opentelemetry.io/otel/exporters/trace/zipkin</code> package. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1693">#1693</a>)</li> <li><code>"go.opentelemetry.io/otel/sdk/resource".NewWithAttributes</code> will now drop any invalid attributes passed. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1703">#1703</a>)</li> <li><code>"go.opentelemetry.io/otel/sdk/resource".StringDetector</code> will now error if the produced attribute is invalid. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1703">#1703</a>)</li> </ul> <h3>Removed</h3> <ul> <li>Removed <code>serviceName</code> parameter from Zipkin exporter and uses resource instead. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1549">#1549</a>)</li> <li>Removed <code>WithConfig</code> from tracer provider to avoid overriding configuration. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1633">#1633</a>)</li> <li>Removed the exported <code>SimpleSpanProcessor</code> and <code>BatchSpanProcessor</code> structs. These are now returned as a SpanProcessor interface from their respective constructors. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1638">#1638</a>)</li> <li>Removed <code>WithRecord()</code> from <code>trace.SpanOption</code> when creating a span. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1660">#1660</a>)</li> <li>Removed setting status to <code>Error</code> while recording an error as a span event in <code>RecordError</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1663">#1663</a>)</li> <li>Removed <code>jaeger.WithProcess</code> configuration option. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1673">#1673</a>)</li> <li>Removed <code>ApplyConfig</code> method from <code>"go.opentelemetry.io/otel/sdk/trace".TracerProvider</code> and the now unneeded <code>Config</code> struct. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1693">#1693</a>)</li> </ul> <h3>Fixed</h3> <ul> <li>Jaeger Exporter: Ensure mapping between OTEL and Jaeger span data complies with the specification. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1626">#1626</a>)</li> <li><code>SamplingResult.TraceState</code> is correctly propagated to a newly created span's <code>SpanContext</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1655">#1655</a>)</li> <li>The <code>otel-collector</code> example now correctly flushes metric events prior to shutting down the exporter. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1678">#1678</a>)</li> <li>Do not set span status message in <code>SpanStatusFromHTTPStatusCode</code> if it can be inferred from <code>http.status_code</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1681">#1681</a>)</li> <li>Synchronization issues in global trace delegate implementation. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1686">#1686</a>)</li> <li>Reduced excess memory usage by global <code>TracerProvider</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1687">#1687</a>)</li> </ul> <hr /> <h2>Raw changes made between v0.18.0 and v0.19.0</h2> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md">go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp's changelog</a>.</em></p> <blockquote> <h2>[1.43.0/0.65.0/0.19.0] 2026-04-02</h2> <h3>Added</h3> <ul> <li>Add <code>IsRandom</code> and <code>WithRandom</code> on <code>TraceFlags</code>, and <code>IsRandom</code> on <code>SpanContext</code> in <code>go.opentelemetry.io/otel/trace</code> for <a href="https://www.w3.org/TR/trace-context-2/#random-trace-id-flag">W3C Trace Context Level 2 Random Trace ID Flag</a> support. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8012">#8012</a>)</li> <li>Add service detection with <code>WithService</code> in <code>go.opentelemetry.io/otel/sdk/resource</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/7642">#7642</a>)</li> <li>Add <code>DefaultWithContext</code> and <code>EnvironmentWithContext</code> in <code>go.opentelemetry.io/otel/sdk/resource</code> to support plumbing <code>context.Context</code> through default and environment detectors. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8051">#8051</a>)</li> <li>Support attributes with empty value (<code>attribute.EMPTY</code>) in <code>go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> <li>Support attributes with empty value (<code>attribute.EMPTY</code>) in <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> <li>Support attributes with empty value (<code>attribute.EMPTY</code>) in <code>go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> <li>Support attributes with empty value (<code>attribute.EMPTY</code>) in <code>go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> <li>Support attributes with empty value (<code>attribute.EMPTY</code>) in <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> <li>Support attributes with empty value (<code>attribute.EMPTY</code>) in <code>go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> <li>Support attributes with empty value (<code>attribute.EMPTY</code>) in <code>go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> <li>Add support for per-series start time tracking for cumulative metrics in <code>go.opentelemetry.io/otel/sdk/metric</code>. Set <code>OTEL_GO_X_PER_SERIES_START_TIMESTAMPS=true</code> to enable. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8060">#8060</a>)</li> <li>Add <code>WithCardinalityLimitSelector</code> for metric reader for configuring cardinality limits specific to the instrument kind. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/7855">#7855</a>)</li> </ul> <h3>Changed</h3> <ul> <li>Introduce the <code>EMPTY</code> Type in <code>go.opentelemetry.io/otel/attribute</code> to reflect that an empty value is now a valid value, with <code>INVALID</code> remaining as a deprecated alias of <code>EMPTY</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> <li>Improve slice handling in <code>go.opentelemetry.io/otel/attribute</code> to optimize short slice values with fixed-size fast paths. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8039">#8039</a>)</li> <li>Improve performance of span metric recording in <code>go.opentelemetry.io/otel/sdk/trace</code> by returning early if self-observability is not enabled. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8067">#8067</a>)</li> <li>Improve formatting of metric data diffs in <code>go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8073">#8073</a>)</li> </ul> <h3>Deprecated</h3> <ul> <li>Deprecate <code>INVALID</code> in <code>go.opentelemetry.io/otel/attribute</code>. Use <code>EMPTY</code> instead. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> </ul> <h3>Fixed</h3> <ul> <li>Return spec-compliant <code>TraceIdRatioBased</code> description. This is a breaking behavioral change, but it is necessary to make the implementation <a href="https://opentelemetry.io/docs/specs/otel/trace/sdk/#traceidratiobased">spec-compliant</a>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8027">#8027</a>)</li> <li>Fix a race condition in <code>go.opentelemetry.io/otel/sdk/metric</code> where the lastvalue aggregation could collect the value 0 even when no zero-value measurements were recorded. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8056">#8056</a>)</li> <li>Limit HTTP response body to 4 MiB in <code>go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp</code> to mitigate excessive memory usage caused by a misconfigured or malicious server. Responses exceeding the limit are treated as non-retryable errors. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8108">#8108</a>)</li> <li>Limit HTTP response body to 4 MiB in <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp</code> to mitigate excessive memory usage caused by a misconfigured or malicious server. Responses exceeding the limit are treated as non-retryable errors. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8108">#8108</a>)</li> <li>Limit HTTP response body to 4 MiB in <code>go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp</code> to mitigate excessive memory usage caused by a misconfigured or malicious server. Responses exceeding the limit are treated as non-retryable errors. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8108">#8108</a>)</li> <li><code>WithHostID</code> detector in <code>go.opentelemetry.io/otel/sdk/resource</code> to use full path for <code>kenv</code> command on BSD. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8113">#8113</a>)</li> <li>Fix missing <code>request.GetBody</code> in <code>go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp</code> to correctly handle HTTP2 GOAWAY frame. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8096">#8096</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/2b4fa9681bd0c69574aaa879039382002b220204"><code>2b4fa96</code></a> Release v0.19.0 (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1710">#1710</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/4beb70416e1272c578edfe1d5f88a3a2236da178"><code>4beb704</code></a> sdk/trace: removing ApplyConfig and Config (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1693">#1693</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/1d42be1601e2d9bbd1101780759520e3f3960a29"><code>1d42be1</code></a> Rename WithDefaultSampler TracerProvider option to WithSampler and update doc...</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/860d5d86e7ace12bf2b2ca8e437d2d4fc68a6913"><code>860d5d8</code></a> Add flag to determine whether SpanContext is remote (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1701">#1701</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/0fe65e6bd2b3fad00289427e0bac1974086d4326"><code>0fe65e6</code></a> Comply with OpenTelemetry attributes specification (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1703">#1703</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/888843519dae308f165d1d20c095bb6352baeb52"><code>8888435</code></a> Bump google.golang.org/api from 0.40.0 to 0.41.0 in /exporters/trace/jaeger (...</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/345f264a137ed7162c30d14dd4739b5b72f76537"><code>345f264</code></a> breaking(zipkin): removes servicName from zipkin exporter. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1697">#1697</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/62cbf0f240112813105d7056506496b59740e0c2"><code>62cbf0f</code></a> Populate Jaeger's Span.Process from Resource (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1673">#1673</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/28eaaa9a919d03227856d83e2149b85f78d57775"><code>28eaaa9</code></a> Add a test to prove the Tracer is safe for concurrent calls (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1665">#1665</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/8b1be11a549eefb6efeda2f940cbda70b3c3d08d"><code>8b1be11</code></a> Rename resource pkg label vars and methods (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/1692">#1692</a>)</li> <li>Additional commits viewable in <a href="https://github.com/open-telemetry/opentelemetry-go/compare/v0.18.0...v0.19.0">compare view</a></li> </ul> </details> <br /> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
…node group (envoyproxy#2032) Bumps the node group in /site with 1 update: [typescript](https://github.com/microsoft/TypeScript). Updates `typescript` from 5.9.3 to 6.0.2 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/microsoft/TypeScript/releases">typescript's releases</a>.</em></p> <blockquote> <h2>TypeScript 6.0</h2> <p>For release notes, check out the <a href="https://devblogs.microsoft.com/typescript/announcing-typescript-6-0/">release announcement blog post</a>.</p> <ul> <li><a href="https://github.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93&q=milestone%3A%22TypeScript+6.0.0%22">fixed issues query for TypeScript 6.0.0 (Beta)</a>.</li> <li><a href="https://github.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93&q=milestone%3A%22TypeScript+6.0.1%22">fixed issues query for TypeScript 6.0.1 (RC)</a>.</li> <li><a href="https://github.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93&q=milestone%3A%22TypeScript+6.0.2%22">fixed issues query for TypeScript 6.0.2 (Stable)</a>.</li> </ul> <p>Downloads are available on:</p> <ul> <li><a href="https://www.npmjs.com/package/typescript">npm</a></li> </ul> <h2>TypeScript 6.0 Beta</h2> <p>For release notes, check out the <a href="https://devblogs.microsoft.com/typescript/announcing-typescript-6-0-beta/">release announcement</a>.</p> <ul> <li><a href="https://github.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93&q=milestone%3A%22TypeScript+6.0.0%22+is%3Aclosed+">fixed issues query for Typescript 6.0.0 (Beta)</a>.</li> </ul> <p>Downloads are available on:</p> <ul> <li><a href="https://www.npmjs.com/package/typescript">npm</a></li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/microsoft/TypeScript/commit/607a22a90d1a5a1b507ce01bb8cd7ec020f954e7"><code>607a22a</code></a> Bump version to 6.0.2 and LKG</li> <li><a href="https://github.com/microsoft/TypeScript/commit/9e72ab71b575e26795d0d9eac3d2d9957beed17c"><code>9e72ab7</code></a> 🤖 Pick PR <a href="https://github.com/microsoft/TypeScript/issues/63239">#63239</a> (Fix missing lib files in reused pro...) into release-6.0 (#...</li> <li><a href="https://github.com/microsoft/TypeScript/commit/35ff23d4b0cc715691323ebe54f523c16fe6e3a5"><code>35ff23d</code></a> 🤖 Pick PR <a href="https://github.com/microsoft/TypeScript/issues/63163">#63163</a> (Port anyFunctionType subtype fix an...) into release-6.0 (#...</li> <li><a href="https://github.com/microsoft/TypeScript/commit/e175b69138038953d4e85bf6529afe88d56d8fbe"><code>e175b69</code></a> Bump version to 6.0.1-rc and LKG</li> <li><a href="https://github.com/microsoft/TypeScript/commit/af4caac0e91e838c46b3fdc1c9afacad68800f89"><code>af4caac</code></a> Update LKG</li> <li><a href="https://github.com/microsoft/TypeScript/commit/8efd7e8544d8b35c9b33bca44a3124aa2613bf09"><code>8efd7e8</code></a> Merge remote-tracking branch 'origin/main' into release-6.0</li> <li><a href="https://github.com/microsoft/TypeScript/commit/206ed1a00ffde637d821bbb3172d1488e3d949e8"><code>206ed1a</code></a> Deprecate assert in import() (<a href="https://github.com/microsoft/TypeScript/issues/63172">#63172</a>)</li> <li><a href="https://github.com/microsoft/TypeScript/commit/e688ac8bc3cbb698c4341ee06401bd6beeb1c4ba"><code>e688ac8</code></a> Update dependencies (<a href="https://github.com/microsoft/TypeScript/issues/63156">#63156</a>)</li> <li><a href="https://github.com/microsoft/TypeScript/commit/29b300deb56c775f19c2f0528012896e4d1db3e0"><code>29b300d</code></a> Bump the github-actions group across 1 directory with 2 updates (<a href="https://github.com/microsoft/TypeScript/issues/63205">#63205</a>)</li> <li><a href="https://github.com/microsoft/TypeScript/commit/0c2c7a358297d66df690230deaed8c98e7d77c04"><code>0c2c7a3</code></a> DOM update (<a href="https://github.com/microsoft/TypeScript/issues/63183">#63183</a>)</li> <li>Additional commits viewable in <a href="https://github.com/microsoft/TypeScript/compare/v5.9.3...v6.0.2">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…oyproxy#2033) [//]: # (dependabot-start)⚠️ **Dependabot is rebasing this PR**⚠️ Rebasing might not happen immediately, so don't worry if this takes some time. Note: if you make any changes to this PR yourself, they will take precedence over the rebase. --- [//]: # (dependabot-end) Bumps the go group with 4 updates in the / directory: [github.com/andybalholm/brotli](https://github.com/andybalholm/brotli), [github.com/cohere-ai/cohere-go/v2](https://github.com/cohere-ai/cohere-go), [github.com/openai/openai-go/v3](https://github.com/openai/openai-go) and [google.golang.org/api](https://github.com/googleapis/google-api-go-client). Updates `github.com/andybalholm/brotli` from 1.2.0 to 1.2.1 <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/andybalholm/brotli/commit/0675b242cf45dcdd51ed6fb600876b570bea329b"><code>0675b24</code></a> Remove unnecessary nil checks</li> <li><a href="https://github.com/andybalholm/brotli/commit/946c3e4071198a86d6c037ffcd138968dd4fc68e"><code>946c3e4</code></a> matchfinder: verify candidate matches against source data</li> <li><a href="https://github.com/andybalholm/brotli/commit/014fb9c9e8f7e87e7996309844260b1f8d890528"><code>014fb9c</code></a> Add Bargain3 MatchFinder</li> <li><a href="https://github.com/andybalholm/brotli/commit/deb905c53b5bcb9fa2d20ccb66890fa941c883cf"><code>deb905c</code></a> Trio: vary hash table sizes</li> <li><a href="https://github.com/andybalholm/brotli/commit/b84bddd64ee4c9ca21b98009bc212e14fd7b5bd4"><code>b84bddd</code></a> M4: fix updating chain for long history</li> <li><a href="https://github.com/andybalholm/brotli/commit/a7ad41202f4421be4299ea5c911b41396c6170bf"><code>a7ad412</code></a> Bargain1 & Bargain2: check for matches less often</li> <li><a href="https://github.com/andybalholm/brotli/commit/6c6ca8c2a86a6448ef2b7986e6c8ecf5e8a9e29c"><code>6c6ca8c</code></a> Add Bargain1 MatchFinder</li> <li><a href="https://github.com/andybalholm/brotli/commit/01c485509d026342053502adc6c3b692dcbf2003"><code>01c4855</code></a> Add Bargain2 MatchFinder</li> <li><a href="https://github.com/andybalholm/brotli/commit/b70ce549fa67fc350e2051de343a06d00e16a264"><code>b70ce54</code></a> Add HTTPCompressorWithLevel</li> <li><a href="https://github.com/andybalholm/brotli/commit/f8935d5c2aed358527994b3f3c16c3229f228c70"><code>f8935d5</code></a> Add a flate encoder using the matchfinder package.</li> <li>Additional commits viewable in <a href="https://github.com/andybalholm/brotli/compare/v1.2.0...v1.2.1">compare view</a></li> </ul> </details> <br /> Updates `github.com/cohere-ai/cohere-go/v2` from 2.16.2 to 2.18.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/cohere-ai/cohere-go/releases">github.com/cohere-ai/cohere-go/v2's releases</a>.</em></p> <blockquote> <h2>2.18.0</h2> <p>No release notes provided.</p> <h2>v2.17.0</h2> <h2>What's Changed</h2> <ul> <li>:herb: Fern Regeneration -- March 11, 2026 by <a href="https://github.com/fern-api"><code>@fern-api</code></a>[bot] in <a href="https://github.com/cohere-ai/cohere-go/pull/148">cohere-ai/cohere-go#148</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/cohere-ai/cohere-go/compare/v2.16.2...v2.17.0">https://github.com/cohere-ai/cohere-go/compare/v2.16.2...v2.17.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/cohere-ai/cohere-go/commit/ac1341eb2297b787141fe3842e2fab1c8de7ec7b"><code>ac1341e</code></a> :herb: Fern Regeneration -- March 11, 2026 (<a href="https://github.com/cohere-ai/cohere-go/issues/148">#148</a>)</li> <li>See full diff in <a href="https://github.com/cohere-ai/cohere-go/compare/v2.16.2...v2.18.0">compare view</a></li> </ul> </details> <br /> Updates `github.com/openai/openai-go/v3` from 3.29.0 to 3.30.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/openai/openai-go/releases">github.com/openai/openai-go/v3's releases</a>.</em></p> <blockquote> <h2>v3.30.0</h2> <h2>3.30.0 (2026-03-25)</h2> <p>Full Changelog: <a href="https://github.com/openai/openai-go/compare/v3.29.0...v3.30.0">v3.29.0...v3.30.0</a></p> <h3>Features</h3> <ul> <li><strong>api:</strong> add keys field to computer action types (<a href="https://github.com/openai/openai-go/commit/7abb3c4b4d1fb3d2757dd70c5a201de4190f298a">7abb3c4</a>)</li> </ul> <h3>Bug Fixes</h3> <ul> <li><strong>api:</strong> align SDK response types with expanded item schemas (<a href="https://github.com/openai/openai-go/commit/324c584ec31315ec18c169918e524741e74d395a">324c584</a>)</li> <li><strong>types:</strong> generate shared enum types that are not referenced by other schemas (<a href="https://github.com/openai/openai-go/commit/e2f2920f510348ea8b7e26e6b2460f802d34998c">e2f2920</a>)</li> <li><strong>types:</strong> make Type required, correct enum in ResponseInputMessageItem (<a href="https://github.com/openai/openai-go/commit/8c2c7a59329e95da117ffdde7b36f43e1fbdbacb">8c2c7a5</a>)</li> </ul> <h3>Chores</h3> <ul> <li><strong>ci:</strong> skip lint on metadata-only changes (<a href="https://github.com/openai/openai-go/commit/40cf884295e1631dc637f6e3e1316e8665e5e694">40cf884</a>)</li> <li><strong>client:</strong> fix multipart serialisation of Default() fields (<a href="https://github.com/openai/openai-go/commit/06c04aeca47e7348de94573eefbfaf2e110c4573">06c04ae</a>)</li> <li><strong>internal:</strong> support default value struct tag (<a href="https://github.com/openai/openai-go/commit/f1afb2ab20307c50da7ec421ac5cd3e5a9c33fe3">f1afb2a</a>)</li> <li><strong>internal:</strong> update gitignore (<a href="https://github.com/openai/openai-go/commit/bde0a0d3e4a8b63e2ce28fae207f9546abac0722">bde0a0d</a>)</li> <li><strong>tests:</strong> bump steady to v0.19.4 (<a href="https://github.com/openai/openai-go/commit/a0561c3014b5d5fbeee9d7de58dad3f9be9e2d9f">a0561c3</a>)</li> <li><strong>tests:</strong> bump steady to v0.19.5 (<a href="https://github.com/openai/openai-go/commit/56c5c3631cb1dec68b8cb68c1e03d62e69fe3a70">56c5c36</a>)</li> <li><strong>tests:</strong> bump steady to v0.19.6 (<a href="https://github.com/openai/openai-go/commit/44ebe3744e70460f2cacd94ccf21957e30d697a1">44ebe37</a>)</li> <li><strong>tests:</strong> bump steady to v0.19.7 (<a href="https://github.com/openai/openai-go/commit/1b04072ef94542b2a0007e4088ef09d4f5387dcf">1b04072</a>)</li> </ul> <h3>Refactors</h3> <ul> <li><strong>tests:</strong> switch from prism to steady (<a href="https://github.com/openai/openai-go/commit/21853589203e202637f9ebc7f7be5d4c73f2a471">2185358</a>)</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/openai/openai-go/blob/main/CHANGELOG.md">github.com/openai/openai-go/v3's changelog</a>.</em></p> <blockquote> <h2>3.30.0 (2026-03-25)</h2> <p>Full Changelog: <a href="https://github.com/openai/openai-go/compare/v3.29.0...v3.30.0">v3.29.0...v3.30.0</a></p> <h3>Features</h3> <ul> <li><strong>api:</strong> add keys field to computer action types (<a href="https://github.com/openai/openai-go/commit/7abb3c4b4d1fb3d2757dd70c5a201de4190f298a">7abb3c4</a>)</li> </ul> <h3>Bug Fixes</h3> <ul> <li><strong>api:</strong> align SDK response types with expanded item schemas (<a href="https://github.com/openai/openai-go/commit/324c584ec31315ec18c169918e524741e74d395a">324c584</a>)</li> <li><strong>types:</strong> generate shared enum types that are not referenced by other schemas (<a href="https://github.com/openai/openai-go/commit/e2f2920f510348ea8b7e26e6b2460f802d34998c">e2f2920</a>)</li> <li><strong>types:</strong> make Type required, correct enum in ResponseInputMessageItem (<a href="https://github.com/openai/openai-go/commit/8c2c7a59329e95da117ffdde7b36f43e1fbdbacb">8c2c7a5</a>)</li> </ul> <h3>Chores</h3> <ul> <li><strong>ci:</strong> skip lint on metadata-only changes (<a href="https://github.com/openai/openai-go/commit/40cf884295e1631dc637f6e3e1316e8665e5e694">40cf884</a>)</li> <li><strong>client:</strong> fix multipart serialisation of Default() fields (<a href="https://github.com/openai/openai-go/commit/06c04aeca47e7348de94573eefbfaf2e110c4573">06c04ae</a>)</li> <li><strong>internal:</strong> support default value struct tag (<a href="https://github.com/openai/openai-go/commit/f1afb2ab20307c50da7ec421ac5cd3e5a9c33fe3">f1afb2a</a>)</li> <li><strong>internal:</strong> update gitignore (<a href="https://github.com/openai/openai-go/commit/bde0a0d3e4a8b63e2ce28fae207f9546abac0722">bde0a0d</a>)</li> <li><strong>tests:</strong> bump steady to v0.19.4 (<a href="https://github.com/openai/openai-go/commit/a0561c3014b5d5fbeee9d7de58dad3f9be9e2d9f">a0561c3</a>)</li> <li><strong>tests:</strong> bump steady to v0.19.5 (<a href="https://github.com/openai/openai-go/commit/56c5c3631cb1dec68b8cb68c1e03d62e69fe3a70">56c5c36</a>)</li> <li><strong>tests:</strong> bump steady to v0.19.6 (<a href="https://github.com/openai/openai-go/commit/44ebe3744e70460f2cacd94ccf21957e30d697a1">44ebe37</a>)</li> <li><strong>tests:</strong> bump steady to v0.19.7 (<a href="https://github.com/openai/openai-go/commit/1b04072ef94542b2a0007e4088ef09d4f5387dcf">1b04072</a>)</li> </ul> <h3>Refactors</h3> <ul> <li><strong>tests:</strong> switch from prism to steady (<a href="https://github.com/openai/openai-go/commit/21853589203e202637f9ebc7f7be5d4c73f2a471">2185358</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/openai/openai-go/commit/da6db3bace003b42c2465545f47401c1fb40c646"><code>da6db3b</code></a> release: 3.30.0</li> <li><a href="https://github.com/openai/openai-go/commit/94fecdb74c6a0f87502a37319d3660ab7ee77696"><code>94fecdb</code></a> fix(api): align SDK response types with expanded item schemas</li> <li><a href="https://github.com/openai/openai-go/commit/e5e28e61e74c5bc93a75244842957388469aacbe"><code>e5e28e6</code></a> feat(api): add keys field to computer action types</li> <li><a href="https://github.com/openai/openai-go/commit/f4ed7874d9361b529d492565dc82e70a9a57b2a9"><code>f4ed787</code></a> chore(client): fix multipart serialisation of Default() fields</li> <li><a href="https://github.com/openai/openai-go/commit/cacbc36ab6adb30adb6a9813f11450c7ae9dbb1e"><code>cacbc36</code></a> chore(internal): support default value struct tag</li> <li><a href="https://github.com/openai/openai-go/commit/af47346663b397db9030d81ce448e06ca00e6deb"><code>af47346</code></a> chore(tests): bump steady to v0.19.7</li> <li><a href="https://github.com/openai/openai-go/commit/0388a09b6c467e2dbec7b3fb7fdb82b25e4c87c8"><code>0388a09</code></a> chore(ci): skip lint on metadata-only changes</li> <li><a href="https://github.com/openai/openai-go/commit/94bbd24a2e86c5ffc053bb559c34fc0b9e3758b1"><code>94bbd24</code></a> fix(types): generate shared enum types that are not referenced by other schemas</li> <li><a href="https://github.com/openai/openai-go/commit/9c1e485e13bb4a1edeaff95c7fde041405c7bb80"><code>9c1e485</code></a> chore(tests): bump steady to v0.19.6</li> <li><a href="https://github.com/openai/openai-go/commit/b325565da42024efba05d4e35b110f274687a51a"><code>b325565</code></a> fix(types): make Type required, correct enum in ResponseInputMessageItem</li> <li>Additional commits viewable in <a href="https://github.com/openai/openai-go/compare/v3.29.0...v3.30.0">compare view</a></li> </ul> </details> <br /> Updates `google.golang.org/api` from 0.272.0 to 0.273.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/googleapis/google-api-go-client/releases">google.golang.org/api's releases</a>.</em></p> <blockquote> <h2>v0.273.0</h2> <h2><a href="https://github.com/googleapis/google-api-go-client/compare/v0.272.0...v0.273.0">0.273.0</a> (2026-03-23)</h2> <h3>Features</h3> <ul> <li><strong>all:</strong> Auto-regenerate discovery clients (<a href="https://github.com/googleapis/google-api-go-client/issues/3542">#3542</a>) (<a href="https://github.com/googleapis/google-api-go-client/commit/a4b47110f2ba5bf8bdb32174f26f609615e0e8dc">a4b4711</a>)</li> <li><strong>all:</strong> Auto-regenerate discovery clients (<a href="https://github.com/googleapis/google-api-go-client/issues/3546">#3546</a>) (<a href="https://github.com/googleapis/google-api-go-client/commit/0cacfa8557f0f7d21166c4dfef84f60c6d9f1a49">0cacfa8</a>)</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md">google.golang.org/api's changelog</a>.</em></p> <blockquote> <h2><a href="https://github.com/googleapis/google-api-go-client/compare/v0.272.0...v0.273.0">0.273.0</a> (2026-03-23)</h2> <h3>Features</h3> <ul> <li><strong>all:</strong> Auto-regenerate discovery clients (<a href="https://github.com/googleapis/google-api-go-client/issues/3542">#3542</a>) (<a href="https://github.com/googleapis/google-api-go-client/commit/a4b47110f2ba5bf8bdb32174f26f609615e0e8dc">a4b4711</a>)</li> <li><strong>all:</strong> Auto-regenerate discovery clients (<a href="https://github.com/googleapis/google-api-go-client/issues/3546">#3546</a>) (<a href="https://github.com/googleapis/google-api-go-client/commit/0cacfa8557f0f7d21166c4dfef84f60c6d9f1a49">0cacfa8</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/googleapis/google-api-go-client/commit/2e86962ce58da59e39ffacd1cb9930abe979fd3c"><code>2e86962</code></a> chore(main): release 0.273.0 (<a href="https://github.com/googleapis/google-api-go-client/issues/3545">#3545</a>)</li> <li><a href="https://github.com/googleapis/google-api-go-client/commit/50ea74c1b06b4bb59546145272bc51fc205b36ed"><code>50ea74c</code></a> chore(google-api-go-generator): restore aiplatform:v1beta1 (<a href="https://github.com/googleapis/google-api-go-client/issues/3549">#3549</a>)</li> <li><a href="https://github.com/googleapis/google-api-go-client/commit/0cacfa8557f0f7d21166c4dfef84f60c6d9f1a49"><code>0cacfa8</code></a> feat(all): auto-regenerate discovery clients (<a href="https://github.com/googleapis/google-api-go-client/issues/3546">#3546</a>)</li> <li><a href="https://github.com/googleapis/google-api-go-client/commit/d38a12991f9cee22a29ada664c5eef3942116ad9"><code>d38a129</code></a> chore(all): update all (<a href="https://github.com/googleapis/google-api-go-client/issues/3548">#3548</a>)</li> <li><a href="https://github.com/googleapis/google-api-go-client/commit/a4b47110f2ba5bf8bdb32174f26f609615e0e8dc"><code>a4b4711</code></a> feat(all): auto-regenerate discovery clients (<a href="https://github.com/googleapis/google-api-go-client/issues/3542">#3542</a>)</li> <li><a href="https://github.com/googleapis/google-api-go-client/commit/67cf706bd3f9bd26f2a61ada3290190c0c8545ff"><code>67cf706</code></a> chore(all): update module google.golang.org/grpc to v1.79.3 [SECURITY] (<a href="https://github.com/googleapis/google-api-go-client/issues/3544">#3544</a>)</li> <li>See full diff in <a href="https://github.com/googleapis/google-api-go-client/compare/v0.272.0...v0.273.0">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
…tlptracehttp from 1.42.0 to 1.43.0 (envoyproxy#2028) Bumps [go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp](https://github.com/open-telemetry/opentelemetry-go) from 1.42.0 to 1.43.0. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md">go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp's changelog</a>.</em></p> <blockquote> <h2>[1.43.0/0.65.0/0.19.0] 2026-04-02</h2> <h3>Added</h3> <ul> <li>Add <code>IsRandom</code> and <code>WithRandom</code> on <code>TraceFlags</code>, and <code>IsRandom</code> on <code>SpanContext</code> in <code>go.opentelemetry.io/otel/trace</code> for <a href="https://www.w3.org/TR/trace-context-2/#random-trace-id-flag">W3C Trace Context Level 2 Random Trace ID Flag</a> support. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8012">#8012</a>)</li> <li>Add service detection with <code>WithService</code> in <code>go.opentelemetry.io/otel/sdk/resource</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/7642">#7642</a>)</li> <li>Add <code>DefaultWithContext</code> and <code>EnvironmentWithContext</code> in <code>go.opentelemetry.io/otel/sdk/resource</code> to support plumbing <code>context.Context</code> through default and environment detectors. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8051">#8051</a>)</li> <li>Support attributes with empty value (<code>attribute.EMPTY</code>) in <code>go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> <li>Support attributes with empty value (<code>attribute.EMPTY</code>) in <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> <li>Support attributes with empty value (<code>attribute.EMPTY</code>) in <code>go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> <li>Support attributes with empty value (<code>attribute.EMPTY</code>) in <code>go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> <li>Support attributes with empty value (<code>attribute.EMPTY</code>) in <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> <li>Support attributes with empty value (<code>attribute.EMPTY</code>) in <code>go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> <li>Support attributes with empty value (<code>attribute.EMPTY</code>) in <code>go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> <li>Add support for per-series start time tracking for cumulative metrics in <code>go.opentelemetry.io/otel/sdk/metric</code>. Set <code>OTEL_GO_X_PER_SERIES_START_TIMESTAMPS=true</code> to enable. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8060">#8060</a>)</li> <li>Add <code>WithCardinalityLimitSelector</code> for metric reader for configuring cardinality limits specific to the instrument kind. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/7855">#7855</a>)</li> </ul> <h3>Changed</h3> <ul> <li>Introduce the <code>EMPTY</code> Type in <code>go.opentelemetry.io/otel/attribute</code> to reflect that an empty value is now a valid value, with <code>INVALID</code> remaining as a deprecated alias of <code>EMPTY</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> <li>Improve slice handling in <code>go.opentelemetry.io/otel/attribute</code> to optimize short slice values with fixed-size fast paths. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8039">#8039</a>)</li> <li>Improve performance of span metric recording in <code>go.opentelemetry.io/otel/sdk/trace</code> by returning early if self-observability is not enabled. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8067">#8067</a>)</li> <li>Improve formatting of metric data diffs in <code>go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest</code>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8073">#8073</a>)</li> </ul> <h3>Deprecated</h3> <ul> <li>Deprecate <code>INVALID</code> in <code>go.opentelemetry.io/otel/attribute</code>. Use <code>EMPTY</code> instead. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8038">#8038</a>)</li> </ul> <h3>Fixed</h3> <ul> <li>Return spec-compliant <code>TraceIdRatioBased</code> description. This is a breaking behavioral change, but it is necessary to make the implementation <a href="https://opentelemetry.io/docs/specs/otel/trace/sdk/#traceidratiobased">spec-compliant</a>. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8027">#8027</a>)</li> <li>Fix a race condition in <code>go.opentelemetry.io/otel/sdk/metric</code> where the lastvalue aggregation could collect the value 0 even when no zero-value measurements were recorded. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8056">#8056</a>)</li> <li>Limit HTTP response body to 4 MiB in <code>go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp</code> to mitigate excessive memory usage caused by a misconfigured or malicious server. Responses exceeding the limit are treated as non-retryable errors. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8108">#8108</a>)</li> <li>Limit HTTP response body to 4 MiB in <code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp</code> to mitigate excessive memory usage caused by a misconfigured or malicious server. Responses exceeding the limit are treated as non-retryable errors. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8108">#8108</a>)</li> <li>Limit HTTP response body to 4 MiB in <code>go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp</code> to mitigate excessive memory usage caused by a misconfigured or malicious server. Responses exceeding the limit are treated as non-retryable errors. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8108">#8108</a>)</li> <li><code>WithHostID</code> detector in <code>go.opentelemetry.io/otel/sdk/resource</code> to use full path for <code>kenv</code> command on BSD. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8113">#8113</a>)</li> <li>Fix missing <code>request.GetBody</code> in <code>go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp</code> to correctly handle HTTP2 GOAWAY frame. (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8096">#8096</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/9276201a64b623606e3eaa0d61ae8ee6d62756c0"><code>9276201</code></a> Release v1.43.0 / v0.65.0 / v0.19.0 (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8128">#8128</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/61b8c9466c4e6b17e69b622279fe9b63fb15c89a"><code>61b8c94</code></a> chore(deps): update module github.com/mattn/go-runewidth to v0.0.22 (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8131">#8131</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/97a086e82ffe01502f4c620e9c447efa229e2a23"><code>97a086e</code></a> chore(deps): update github.com/golangci/dupl digest to c99c5cf (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8122">#8122</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/5e363de517dba6db62736b2f5cdef0e0929b4cd0"><code>5e363de</code></a> limit response body size for OTLP HTTP exporters (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8108">#8108</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/35214b60138eac8dec97a2d2b851d8c8471680c7"><code>35214b6</code></a> Use an absolute path when calling bsd kenv (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8113">#8113</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/290024ceaf695f9cdbf29a0c6731a317d92bc361"><code>290024c</code></a> fix(deps): update module google.golang.org/grpc to v1.80.0 (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8121">#8121</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/e70658e098033d6bb5ec1b399de16bbb2642f6dc"><code>e70658e</code></a> fix: support getBody in otelploghttp (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8096">#8096</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/4afe468e3b4859c949a1c1e8d92684d43d86ef8a"><code>4afe468</code></a> fix(deps): update googleapis to 9d38bb4 (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8117">#8117</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/b9ca729776309e3c08fe700c131797a3b4d10634"><code>b9ca729</code></a> chore(deps): update module github.com/go-git/go-git/v5 to v5.17.2 (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8115">#8115</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go/commit/69472ec56cb7674d55ca2e2bcb04dea73228ab79"><code>69472ec</code></a> chore(deps): update fossas/fossa-action action to v1.9.0 (<a href="https://github.com/open-telemetry/opentelemetry-go/issues/8118">#8118</a>)</li> <li>Additional commits viewable in <a href="https://github.com/open-telemetry/opentelemetry-go/compare/v1.42.0...v1.43.0">compare view</a></li> </ul> </details> <br /> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
…voyproxy#2041) Bumps [helm.sh/helm/v3](https://github.com/helm/helm) from 3.19.4 to 3.20.2. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/helm/helm/releases">helm.sh/helm/v3's releases</a>.</em></p> <blockquote> <h2>Helm v3.20.2</h2> <h2>v3.20.2</h2> <p>Helm v3.20.2 is a security patch release. Users are encouraged to upgrade for the best experience.</p> <p>The community keeps growing, and we'd love to see you there!</p> <ul> <li>Join the discussion in <a href="https://kubernetes.slack.com">Kubernetes Slack</a>: <ul> <li>for questions and just to hang out</li> <li>for discussing PRs, code, and bugs</li> </ul> </li> <li>Hang out at the Public Developer Call: Thursday, 9:30 Pacific via <a href="https://zoom.us/j/696660622">Zoom</a></li> <li>Test, debug, and contribute charts: <a href="https://artifacthub.io/packages/search?kind=0">ArtifactHub/packages</a></li> </ul> <h2>Security fixes</h2> <ul> <li><a href="https://github.com/helm/helm/security/advisories/GHSA-hr2v-4r36-88hr">GHSA-hr2v-4r36-88hr</a> Helm Chart extraction output directory collapse via <code>Chart.yaml</code> name dot-segment</li> </ul> <h2>Installation and Upgrading</h2> <p>Download Helm v3.20.2. The common platform binaries are here:</p> <ul> <li><a href="https://get.helm.sh/helm-v3.20.2-darwin-amd64.tar.gz">MacOS amd64</a> (<a href="https://get.helm.sh/helm-v3.20.2-darwin-amd64.tar.gz.sha256sum">checksum</a> / 7de04301f28b902a74f6286ed941cadc86ee5e6a9086a18f2ccf1f548e99d618)</li> <li><a href="https://get.helm.sh/helm-v3.20.2-darwin-arm64.tar.gz">MacOS arm64</a> (<a href="https://get.helm.sh/helm-v3.20.2-darwin-arm64.tar.gz.sha256sum">checksum</a> / 139c794c22f16b579d08ddd3008c8038b9bb2814f35b5bcca91f50a1f458978d)</li> <li><a href="https://get.helm.sh/helm-v3.20.2-linux-amd64.tar.gz">Linux amd64</a> (<a href="https://get.helm.sh/helm-v3.20.2-linux-amd64.tar.gz.sha256sum">checksum</a> / 258e830a9e613c8a7a302d6059b4bb3b9758f2f3e1bb8ea0d707ce10a9a72fea)</li> <li><a href="https://get.helm.sh/helm-v3.20.2-linux-arm.tar.gz">Linux arm</a> (<a href="https://get.helm.sh/helm-v3.20.2-linux-arm.tar.gz.sha256sum">checksum</a> / a8a614c740399ff1ef32bcea6be6e4523f17e3376f9cf55c192cc48c8f2d1f19)</li> <li><a href="https://get.helm.sh/helm-v3.20.2-linux-arm64.tar.gz">Linux arm64</a> (<a href="https://get.helm.sh/helm-v3.20.2-linux-arm64.tar.gz.sha256sum">checksum</a> / 5ea2d6bc2cda3f8edf985e028809f5a9278f404fb8ab24044de9b7cb9b79a691)</li> <li><a href="https://get.helm.sh/helm-v3.20.2-linux-386.tar.gz">Linux i386</a> (<a href="https://get.helm.sh/helm-v3.20.2-linux-386.tar.gz.sha256sum">checksum</a> / 88e4c1834307cdbc9f3b80920e1a383e4ba50bb488fb0be1b1fbd4918bb6ae73)</li> <li><a href="https://get.helm.sh/helm-v3.20.2-linux-ppc64le.tar.gz">Linux ppc64le</a> (<a href="https://get.helm.sh/helm-v3.20.2-linux-ppc64le.tar.gz.sha256sum">checksum</a> / 98bb26a2f3c0b0c1a50db3181dff192554e0c204a07427d98d6b01e259f23cbe)</li> <li><a href="https://get.helm.sh/helm-v3.20.2-linux-s390x.tar.gz">Linux s390x</a> (<a href="https://get.helm.sh/helm-v3.20.2-linux-s390x.tar.gz.sha256sum">checksum</a> / 584dd77ef8096d6ef939a1822f72840e749fc8311b2b13ae94df5f786862a56b)</li> <li><a href="https://get.helm.sh/helm-v3.20.2-linux-riscv64.tar.gz">Linux riscv64</a> (<a href="https://get.helm.sh/helm-v3.20.2-linux-riscv64.tar.gz.sha256sum">checksum</a> / 957391d0710d72678acd09959b5dc77888cd007a78a4b99944d3b2fc7e1895ca)</li> <li><a href="https://get.helm.sh/helm-v3.20.2-windows-amd64.zip">Windows amd64</a> (<a href="https://get.helm.sh/helm-v3.20.2-windows-amd64.zip.sha256sum">checksum</a> / 24e8e5b71bab4ee17e6f989931ecf4fb144f9916cbe9990c0b6b2ec7b925c454)</li> <li><a href="https://get.helm.sh/helm-v3.20.2-windows-arm64.zip">Windows arm64</a> (<a href="https://get.helm.sh/helm-v3.20.2-windows-arm64.zip.sha256sum">checksum</a> / 7c940a73a6882f50b69aec3282549da4a49917669db18fc503db930fb74b9789)</li> </ul> <p>The <a href="https://helm.sh/docs/intro/quickstart/">Quickstart Guide</a> will get you going from there. For <strong>upgrade instructions</strong> or detailed installation notes, check the <a href="https://helm.sh/docs/intro/install/">install guide</a>. You can also use a <a href="https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3">script to install</a> on any system with <code>bash</code>.</p> <h2>What's Next</h2> <ul> <li>4.1.5 and 3.20.3 are the next patch (bug fix) releases and will be on April 8, 2026</li> <li>4.2.0 and 3.21.0 are the next minor (feature) releases and will be on May 13, 2026</li> </ul> <h2>Changelog</h2> <ul> <li>fix: Chart dot-name path bug 8fb76d6ab555577e98e23b7500009537a471feee (George Jenkins)</li> <li>fix: pin codeql-action/upload-sarif to commit SHA in scorecards workflow 3a8927e275c50cecde273872dad2a5576bd46375 (Terry Howe)</li> </ul> <p>Helm v3.20.1 is a patch release. Users are encouraged to upgrade for the best experience.</p> <p>The community keeps growing, and we'd love to see you there!</p> <ul> <li>Join the discussion in <a href="https://kubernetes.slack.com">Kubernetes Slack</a>:</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/helm/helm/commit/8fb76d6ab555577e98e23b7500009537a471feee"><code>8fb76d6</code></a> fix: Chart dot-name path bug</li> <li><a href="https://github.com/helm/helm/commit/3a8927e275c50cecde273872dad2a5576bd46375"><code>3a8927e</code></a> fix: pin codeql-action/upload-sarif to commit SHA in scorecards workflow</li> <li><a href="https://github.com/helm/helm/commit/a2369ca71c0ef633bf6e4fccd66d634eb379b371"><code>a2369ca</code></a> chore(deps): bump the k8s-io group with 7 updates</li> <li><a href="https://github.com/helm/helm/commit/90e10564f7ae746a153f3a03006e7061a54ad490"><code>90e1056</code></a> add image index test</li> <li><a href="https://github.com/helm/helm/commit/911f2e908ae40b01ca95b857e94b8894043f64fd"><code>911f2e9</code></a> fix pulling charts from OCI indices</li> <li><a href="https://github.com/helm/helm/commit/76dad33fb1a2b6451920429b4f5f2dd575ea71bb"><code>76dad33</code></a> Remove refactorring changes from coalesce_test.go</li> <li><a href="https://github.com/helm/helm/commit/45c12f71407b6054a37d3e425d5293ee79a1ab37"><code>45c12f7</code></a> Fix import</li> <li><a href="https://github.com/helm/helm/commit/26c6f19f967941dbe53bfb5e52d419b3b3e46075"><code>26c6f19</code></a> Update pkg/chart/common/util/coalesce_test.go</li> <li><a href="https://github.com/helm/helm/commit/09f5129d49a14c9336cea6f33adf5f52889915ef"><code>09f5129</code></a> Fix lint warning</li> <li><a href="https://github.com/helm/helm/commit/417deb2b6b7504357b0f580b76f5eed1bb8a5270"><code>417deb2</code></a> Preserve nil values in chart already</li> <li>Additional commits viewable in <a href="https://github.com/helm/helm/compare/v3.19.4...v3.20.2">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/envoyproxy/ai-gateway/network/alerts). </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…roxy#2043) **Description** The `gateway.envoyproxy.io/envoy-proxy` annotation is ignored in current Envoy Gateway version, causing AWS examples to ignore the custom EnvoyProxy configuration. Changes: - Replace the legacy annotation with `spec.infrastructure.parametersRef` in Gateway resources. - Move `EnvoyProxy` resources from 'envoy-gateway-system' to the 'default' namespace to match the Gateway and simplify example deployment. - Fixes AWS IRSA and Pod Identity examples which were previously non-functional. Signed-off-by: Lukasz Biegaj <lukasz.biegaj@univio.com> Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
**Description** Go 1.25.9 and 1.26.2 fix several low CVEs and one high one. This PR upgrades to Go 1.26.2. **Related Issues/PRs (if applicable)** N/A **Special notes for reviewers (if applicable)** N/A --------- Signed-off-by: Ignasi Barrera <nacx@apache.org>
Signed-off-by: Hrushikesh Patil <hrushi2900@gmail.com>
Signed-off-by: Hrushikesh Patil <hrushi2900@gmail.com>
📝 WalkthroughWalkthroughAdds OpenAI audio endpoints (transcriptions & translations) with multipart parsing, translators, tracing, metrics, and tests; upgrades Go toolchain/dependencies to 1.26; improves MCP proxy JSON-RPC/SSE handling; and updates docs, examples, and CI/workflows. Changes
Sequence Diagram(s)sequenceDiagram
participant Client
participant Router as Request Processor
participant EndpointSpec as Endpoint Spec
participant Translator
participant Backend
Client->>Router: POST /v1/audio/transcriptions\n(multipart/form-data)
Router->>Router: detect content-type == multipart/form-data
Router->>EndpointSpec: ParseMultipartBody(body, contentType)
EndpointSpec->>EndpointSpec: parse boundary\nextract form fields (model, file,...)
EndpointSpec-->>Router: TranscriptionRequest + stream flag
Router->>Translator: RequestBody(req)
Translator->>Translator: optionally rewrite multipart (replace model)\nset headers (path, content-length)
Translator-->>Backend: forward mutated headers + body
Backend-->>Translator: 200 OK + body (JSON or text)
Translator->>Translator: parse response into TranscriptionResponse\nrecord span (if enabled)
Translator-->>Router: ResponseHeaders + ResponseBody
Router-->>Client: 200 OK + response
Estimated code review effort🎯 4 (Complex) | ⏱️ ~50 minutes Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
…slateModify (envoyproxy#2050) **Description** ## Summary This PR ensures proper propagation of `context.Context` through the extension server request flow, allowing downstream Kubernetes API calls to respect cancellation and deadlines. The changes primarily affect `internal/extensionserver/post_translate_modify.go` and related test updates in `extensionserver_test.go`. --- ## Fix ```go // BEFORE func (s *Server) PostTranslateModify(_ context.Context, req *...) (*..., error) { err = s.k8sClient.Get(context.Background(), key, &aigwRoute) } // AFTER func (s *Server) PostTranslateModify(ctx context.Context, req *...) (*..., error) { err = s.k8sClient.Get(ctx, key, &aigwRoute) } ``` --- ## Verification All existing unit tests were updated to pass the correct arguments and executed successfully (`go test ./internal/extensionserver/...`). The change was verified by ensuring context flows correctly through the call chain without altering existing behavior, while enabling proper cancellation and timeout handling. Signed-off-by: ashnaaseth2325-oss <ashnaaseth2325@gmail.com>
**Description** This PR adds the response model from the upstream response to the dynamic metadata. This gives the proxy access to the actual model serving the request, unaffected by mode name overrides or other backend routing changes. **Related Issues/PRs (if applicable)** Close envoyproxy#2044 --------- Signed-off-by: William-Rom <william.rom@intility.no>
**Description** Use strict json marshalling and unmarshalling configuration. **Related Issues/PRs (if applicable)** N/A **Special notes for reviewers (if applicable)** N/A --------- Signed-off-by: Ignasi Barrera <nacx@apache.org>
…on header (envoyproxy#2053) **Description** ## Summary This PR fixes a potential index out of bounds panic in `extractSubject` when the `Authorization` header contains a `bearer` scheme without a token. It adds a defensive length check and a corresponding test case in `handlers_test.go`. --- ## Fix ```go // BEFORE parts := strings.SplitN(authzHeader, " ", 2) if !strings.EqualFold(parts[0], "bearer") { return "" } _, _, _ = jwt.NewParser().ParseUnverified(parts[1], &claims) // AFTER parts := strings.SplitN(authzHeader, " ", 2) if !strings.EqualFold(parts[0], "bearer") { return "" } if len(parts) < 2 { return "" } _, _, _ = jwt.NewParser().ParseUnverified(parts[1], &claims) ``` --- ## Verification All unit tests pass locally with `go test ./internal/mcpproxy/...`, including the newly added case for `Authorization: bearer`. The change was also validated by confirming that malformed headers are handled gracefully without causing a panic. Signed-off-by: ashnaaseth2325-oss <ashnaaseth2325@gmail.com>
) **Description** Adds a new doc page explaining how and why to run the AI Gateway controller with multiple replicas. The controller has two independent components: - Kubernetes controller — requires leader election for mutable operations - Extension server — read-only gRPC server that scales horizontally Since EG's xDS server communicates with all Envoy instances and each EG replica calls the AIGW extension server, running a single AIGW replica can become a bottleneck. This doc explains the architecture, provides Helm and plain-Deployment configuration examples, and includes an HPA example for dynamic scaling. Note: This doc was written with AI assistance (Claude Code). **Related Issues/PRs (if applicable)** Fixes envoyproxy#1215 **Special notes for reviewers (if applicable)** The new page is at `site/docs/capabilities/scaling.md` (sidebar position 3, autogenerated). The Helm values (`controller.replicaCount`, `controller.leaderElection.enabled`) were verified against `manifests/charts/ai-gateway-helm/values.yaml`. --------- Signed-off-by: Varun Nuthalapati <nuthalapativarun@gmail.com> Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
**Description** Allow Lua filters configured via `EnvoyExtensionPolicy` to run after the AI Gateway ext_proc filter, consistent with how Wasm filters are already handled. The `afterExtProcFilterPrefixes` slice controls which filters AIGW's ext_proc is inserted before. Wasm was already in this list, but Lua was missing, so Lua filters would end up running before AIGW's ext_proc rather than after it. This prevented users from using Lua scripts to act on AIGW metadata (e.g. the `x-ai-eg-model` header set by ext_proc). This PR adds `EnvoyFilterLua` to `afterExtProcFilterPrefixes` in the same position as `EnvoyFilterWasm`, and adds a corresponding test case. Note: This code was written with AI assistance (Claude Code). **Related Issues/PRs (if applicable)** Fixes envoyproxy#1469 **Special notes for reviewers (if applicable)** The fix follows the exact same pattern used for `EnvoyFilterWasm` (line 799). `EnvoyFilterLua` is defined in the `egv1a1` package (`envoy.filters.http.lua`) so no new dependencies are introduced. Signed-off-by: Varun Nuthalapati <nuthalapativarun@gmail.com> Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
…#2057) Bumps the github-actions group with 4 updates: [dorny/paths-filter](https://github.com/dorny/paths-filter), [codecov/codecov-action](https://github.com/codecov/codecov-action), [docker/login-action](https://github.com/docker/login-action) and [github/codeql-action](https://github.com/github/codeql-action). Updates `dorny/paths-filter` from 61f87a10cd2c304679af17bb73ef192addf33c1c to f3ceefdc7ef57bc2d8560787d4b6c33e44044cec <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/dorny/paths-filter/blob/master/CHANGELOG.md">dorny/paths-filter's changelog</a>.</em></p> <blockquote> <h1>Changelog</h1> <h2>v4.0.0</h2> <ul> <li><a href="https://github.com/dorny/paths-filter/pull/294">Update action runtime to node24</a></li> </ul> <h2>v3.0.3</h2> <ul> <li><a href="https://github.com/dorny/paths-filter/pull/279">Add missing predicate-quantifier</a></li> </ul> <h2>v3.0.2</h2> <ul> <li><a href="https://github.com/dorny/paths-filter/pull/224">Add config parameter for predicate quantifier</a></li> </ul> <h2>v3.0.1</h2> <ul> <li><a href="https://github.com/dorny/paths-filter/pull/133">Compare base and ref when token is empty</a></li> </ul> <h2>v3.0.0</h2> <ul> <li><a href="https://github.com/dorny/paths-filter/pull/210">Update to Node.js 20</a></li> <li><a href="https://github.com/dorny/paths-filter/pull/215">Update all dependencies</a></li> </ul> <h2>v2.11.1</h2> <ul> <li><a href="https://github.com/dorny/paths-filter/pull/167">Update <code>@actions/core</code> to v1.10.0 - Fixes warning about deprecated set-output</a></li> <li><a href="https://github.com/dorny/paths-filter/pull/168">Document need for pull-requests: read permission</a></li> <li><a href="https://github.com/dorny/paths-filter/pull/164">Updating to actions/checkout@v3</a></li> </ul> <h2>v2.11.0</h2> <ul> <li><a href="https://github.com/dorny/paths-filter/pull/157">Set list-files input parameter as not required</a></li> <li><a href="https://github.com/dorny/paths-filter/pull/161">Update Node.js</a></li> <li><a href="https://github.com/dorny/paths-filter/pull/162">Fix incorrect handling of Unicode characters in exec()</a></li> <li><a href="https://github.com/dorny/paths-filter/pull/163">Use Octokit pagination</a></li> <li><a href="https://github.com/dorny/paths-filter/pull/160">Updates real world links</a></li> </ul> <h2>v2.10.2</h2> <ul> <li><a href="https://github.com/dorny/paths-filter/pull/91">Fix getLocalRef() returns wrong ref</a></li> </ul> <h2>v2.10.1</h2> <ul> <li><a href="https://github.com/dorny/paths-filter/pull/85">Improve robustness of change detection</a></li> </ul> <h2>v2.10.0</h2> <ul> <li><a href="https://github.com/dorny/paths-filter/pull/82">Add ref input parameter</a></li> <li><a href="https://github.com/dorny/paths-filter/pull/83">Fix change detection in PR when pullRequest.changed_files is incorrect</a></li> </ul> <h2>v2.9.3</h2> <ul> <li><a href="https://github.com/dorny/paths-filter/pull/78">Fix change detection when base is a tag</a></li> </ul> <h2>v2.9.2</h2> <ul> <li><a href="https://github.com/dorny/paths-filter/pull/75">Fix fetching git history</a></li> </ul> <h2>v2.9.1</h2> <ul> <li><a href="https://github.com/dorny/paths-filter/pull/74">Fix fetching git history + fallback to unshallow repo</a></li> </ul> <h2>v2.9.0</h2> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/dorny/paths-filter/commit/f3ceefdc7ef57bc2d8560787d4b6c33e44044cec"><code>f3ceefd</code></a> fix: use rev-parse instead of branch --show-current for older git compat (<a href="https://github.com/dorny/paths-filter/issues/303">#303</a>)</li> <li>See full diff in <a href="https://github.com/dorny/paths-filter/compare/61f87a10cd2c304679af17bb73ef192addf33c1c...f3ceefdc7ef57bc2d8560787d4b6c33e44044cec">compare view</a></li> </ul> </details> <br /> Updates `codecov/codecov-action` from 5.5.2 to 6.0.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/codecov/codecov-action/releases">codecov/codecov-action's releases</a>.</em></p> <blockquote> <h2>v6.0.0</h2> <h2>⚠️ This version introduces support for node24 which make cause breaking changes for systems that do not currently support node24.⚠️ </h2> <h2>What's Changed</h2> <ul> <li>Revert "Revert "build(deps): bump actions/github-script from 7.0.1 to 8.0.0"" by <a href="https://github.com/thomasrockhu-codecov"><code>@thomasrockhu-codecov</code></a> in <a href="https://github.com/codecov/codecov-action/pull/1929">codecov/codecov-action#1929</a></li> <li>Th/6.0.0 by <a href="https://github.com/thomasrockhu-codecov"><code>@thomasrockhu-codecov</code></a> in <a href="https://github.com/codecov/codecov-action/pull/1928">codecov/codecov-action#1928</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/codecov/codecov-action/compare/v5.5.4...v6.0.0">https://github.com/codecov/codecov-action/compare/v5.5.4...v6.0.0</a></p> <h2>v5.5.4</h2> <p>This is a mirror of <code>v5.5.2</code>. <code>v6</code> will be released which requires <code>node24</code></p> <h2>What's Changed</h2> <ul> <li>Revert "build(deps): bump actions/github-script from 7.0.1 to 8.0.0" by <a href="https://github.com/thomasrockhu-codecov"><code>@thomasrockhu-codecov</code></a> in <a href="https://github.com/codecov/codecov-action/pull/1926">codecov/codecov-action#1926</a></li> <li>chore(release): 5.5.4 by <a href="https://github.com/thomasrockhu-codecov"><code>@thomasrockhu-codecov</code></a> in <a href="https://github.com/codecov/codecov-action/pull/1927">codecov/codecov-action#1927</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/codecov/codecov-action/compare/v5.5.3...v5.5.4">https://github.com/codecov/codecov-action/compare/v5.5.3...v5.5.4</a></p> <h2>v5.5.3</h2> <h2>What's Changed</h2> <ul> <li>build(deps): bump actions/github-script from 7.0.1 to 8.0.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://github.com/codecov/codecov-action/pull/1874">codecov/codecov-action#1874</a></li> <li>chore(release): bump to 5.5.3 by <a href="https://github.com/thomasrockhu-codecov"><code>@thomasrockhu-codecov</code></a> in <a href="https://github.com/codecov/codecov-action/pull/1922">codecov/codecov-action#1922</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/codecov/codecov-action/compare/v5.5.2...v5.5.3">https://github.com/codecov/codecov-action/compare/v5.5.2...v5.5.3</a></p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md">codecov/codecov-action's changelog</a>.</em></p> <blockquote> <h2>v5.5.2</h2> <h3>What's Changed</h3> <p><strong>Full Changelog</strong>: <a href="https://github.com/codecov/codecov-action/compare/v5.5.1..v5.5.2">https://github.com/codecov/codecov-action/compare/v5.5.1..v5.5.2</a></p> <h2>v5.5.1</h2> <h3>What's Changed</h3> <ul> <li>fix: overwrite pr number on fork by <a href="https://github.com/thomasrockhu-codecov"><code>@thomasrockhu-codecov</code></a> in <a href="https://github.com/codecov/codecov-action/pull/1871">codecov/codecov-action#1871</a></li> <li>build(deps): bump actions/checkout from 4.2.2 to 5.0.0 by <code>@app/dependabot</code> in <a href="https://github.com/codecov/codecov-action/pull/1868">codecov/codecov-action#1868</a></li> <li>build(deps): bump github/codeql-action from 3.29.9 to 3.29.11 by <code>@app/dependabot</code> in <a href="https://github.com/codecov/codecov-action/pull/1867">codecov/codecov-action#1867</a></li> <li>fix: update to use local app/ dir by <a href="https://github.com/thomasrockhu-codecov"><code>@thomasrockhu-codecov</code></a> in <a href="https://github.com/codecov/codecov-action/pull/1872">codecov/codecov-action#1872</a></li> <li>docs: fix typo in README by <a href="https://github.com/datalater"><code>@datalater</code></a> in <a href="https://github.com/codecov/codecov-action/pull/1866">codecov/codecov-action#1866</a></li> <li>Document a <code>codecov-cli</code> version reference example by <a href="https://github.com/webknjaz"><code>@webknjaz</code></a> in <a href="https://github.com/codecov/codecov-action/pull/1774">codecov/codecov-action#1774</a></li> <li>build(deps): bump github/codeql-action from 3.28.18 to 3.29.9 by <code>@app/dependabot</code> in <a href="https://github.com/codecov/codecov-action/pull/1861">codecov/codecov-action#1861</a></li> <li>build(deps): bump ossf/scorecard-action from 2.4.1 to 2.4.2 by <code>@app/dependabot</code> in <a href="https://github.com/codecov/codecov-action/pull/1833">codecov/codecov-action#1833</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/codecov/codecov-action/compare/v5.5.0..v5.5.1">https://github.com/codecov/codecov-action/compare/v5.5.0..v5.5.1</a></p> <h2>v5.5.0</h2> <h3>What's Changed</h3> <ul> <li>feat: upgrade wrapper to 0.2.4 by <a href="https://github.com/jviall"><code>@jviall</code></a> in <a href="https://github.com/codecov/codecov-action/pull/1864">codecov/codecov-action#1864</a></li> <li>Pin actions/github-script by Git SHA by <a href="https://github.com/martincostello"><code>@martincostello</code></a> in <a href="https://github.com/codecov/codecov-action/pull/1859">codecov/codecov-action#1859</a></li> <li>fix: check reqs exist by <a href="https://github.com/joseph-sentry"><code>@joseph-sentry</code></a> in <a href="https://github.com/codecov/codecov-action/pull/1835">codecov/codecov-action#1835</a></li> <li>fix: Typo in README by <a href="https://github.com/spalmurray"><code>@spalmurray</code></a> in <a href="https://github.com/codecov/codecov-action/pull/1838">codecov/codecov-action#1838</a></li> <li>docs: Refine OIDC docs by <a href="https://github.com/spalmurray"><code>@spalmurray</code></a> in <a href="https://github.com/codecov/codecov-action/pull/1837">codecov/codecov-action#1837</a></li> <li>build(deps): bump github/codeql-action from 3.28.17 to 3.28.18 by <code>@app/dependabot</code> in <a href="https://github.com/codecov/codecov-action/pull/1829">codecov/codecov-action#1829</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/codecov/codecov-action/compare/v5.4.3..v5.5.0">https://github.com/codecov/codecov-action/compare/v5.4.3..v5.5.0</a></p> <h2>v5.4.3</h2> <h3>What's Changed</h3> <ul> <li>build(deps): bump github/codeql-action from 3.28.13 to 3.28.17 by <code>@app/dependabot</code> in <a href="https://github.com/codecov/codecov-action/pull/1822">codecov/codecov-action#1822</a></li> <li>fix: OIDC on forks by <a href="https://github.com/joseph-sentry"><code>@joseph-sentry</code></a> in <a href="https://github.com/codecov/codecov-action/pull/1823">codecov/codecov-action#1823</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/codecov/codecov-action/compare/v5.4.2..v5.4.3">https://github.com/codecov/codecov-action/compare/v5.4.2..v5.4.3</a></p> <h2>v5.4.2</h2> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/codecov/codecov-action/commit/57e3a136b779b570ffcdbf80b3bdc90e7fab3de2"><code>57e3a13</code></a> Th/6.0.0 (<a href="https://github.com/codecov/codecov-action/issues/1928">#1928</a>)</li> <li><a href="https://github.com/codecov/codecov-action/commit/f67d33dda8a42b51c42a8318a1f66468119e898b"><code>f67d33d</code></a> Revert "Revert "build(deps): bump actions/github-script from 7.0.1 to 8.0.0""...</li> <li><a href="https://github.com/codecov/codecov-action/commit/75cd11691c0faa626561e295848008c8a7dddffe"><code>75cd116</code></a> chore(release): 5.5.4 (<a href="https://github.com/codecov/codecov-action/issues/1927">#1927</a>)</li> <li><a href="https://github.com/codecov/codecov-action/commit/87d39f4a2cec2673cf9505764fb20a38792ea722"><code>87d39f4</code></a> Revert "build(deps): bump actions/github-script from 7.0.1 to 8.0.0" (<a href="https://github.com/codecov/codecov-action/issues/1926">#1926</a>)</li> <li><a href="https://github.com/codecov/codecov-action/commit/1af58845a975a7985b0beb0cbe6fbbb71a41dbad"><code>1af5884</code></a> chore(release): bump to 5.5.3 (<a href="https://github.com/codecov/codecov-action/issues/1922">#1922</a>)</li> <li><a href="https://github.com/codecov/codecov-action/commit/c143300dea6c9a730986ff862c5bf4d458927ef8"><code>c143300</code></a> build(deps): bump actions/github-script from 7.0.1 to 8.0.0 (<a href="https://github.com/codecov/codecov-action/issues/1874">#1874</a>)</li> <li>See full diff in <a href="https://github.com/codecov/codecov-action/compare/671740ac38dd9b0130fbe1cec585b89eea48d3de...57e3a136b779b570ffcdbf80b3bdc90e7fab3de2">compare view</a></li> </ul> </details> <br /> Updates `docker/login-action` from 3.7.0 to 4.1.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/docker/login-action/releases">docker/login-action's releases</a>.</em></p> <blockquote> <h2>v4.1.0</h2> <ul> <li>Fix scoped Docker Hub cleanup path when registry is omitted by <a href="https://github.com/crazy-max"><code>@crazy-max</code></a> in <a href="https://github.com/docker/login-action/pull/945">docker/login-action#945</a></li> <li>Bump <code>@aws-sdk/client-ecr</code> and <code>@aws-sdk/client-ecr-public</code> to 3.1020.0 in <a href="https://github.com/docker/login-action/pull/930">docker/login-action#930</a></li> <li>Bump <code>@docker/actions-toolkit</code> from 0.77.0 to 0.86.0 in <a href="https://github.com/docker/login-action/pull/932">docker/login-action#932</a> <a href="https://github.com/docker/login-action/pull/936">docker/login-action#936</a></li> <li>Bump brace-expansion from 1.1.12 to 1.1.13 in <a href="https://github.com/docker/login-action/pull/952">docker/login-action#952</a></li> <li>Bump fast-xml-parser from 5.3.4 to 5.3.6 in <a href="https://github.com/docker/login-action/pull/942">docker/login-action#942</a></li> <li>Bump flatted from 3.3.3 to 3.4.2 in <a href="https://github.com/docker/login-action/pull/944">docker/login-action#944</a></li> <li>Bump glob from 10.3.12 to 10.5.0 in <a href="https://github.com/docker/login-action/pull/940">docker/login-action#940</a></li> <li>Bump handlebars from 4.7.8 to 4.7.9 in <a href="https://github.com/docker/login-action/pull/949">docker/login-action#949</a></li> <li>Bump http-proxy-agent and https-proxy-agent to 8.0.0 in <a href="https://github.com/docker/login-action/pull/937">docker/login-action#937</a></li> <li>Bump lodash from 4.17.23 to 4.18.1 in <a href="https://github.com/docker/login-action/pull/958">docker/login-action#958</a></li> <li>Bump minimatch from 3.1.2 to 3.1.5 in <a href="https://github.com/docker/login-action/pull/941">docker/login-action#941</a></li> <li>Bump picomatch from 4.0.3 to 4.0.4 in <a href="https://github.com/docker/login-action/pull/948">docker/login-action#948</a></li> <li>Bump undici from 6.23.0 to 6.24.1 in <a href="https://github.com/docker/login-action/pull/938">docker/login-action#938</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/docker/login-action/compare/v4.0.0...v4.1.0">https://github.com/docker/login-action/compare/v4.0.0...v4.1.0</a></p> <h2>v4.0.0</h2> <ul> <li>Node 24 as default runtime (requires <a href="https://github.com/actions/runner/releases/tag/v2.327.1">Actions Runner v2.327.1</a> or later) by <a href="https://github.com/crazy-max"><code>@crazy-max</code></a> in <a href="https://github.com/docker/login-action/pull/929">docker/login-action#929</a></li> <li>Switch to ESM and update config/test wiring by <a href="https://github.com/crazy-max"><code>@crazy-max</code></a> in <a href="https://github.com/docker/login-action/pull/927">docker/login-action#927</a></li> <li>Bump <code>@actions/core</code> from 1.11.1 to 3.0.0 in <a href="https://github.com/docker/login-action/pull/919">docker/login-action#919</a></li> <li>Bump <code>@aws-sdk/client-ecr</code> from 3.890.0 to 3.1000.0 in <a href="https://github.com/docker/login-action/pull/909">docker/login-action#909</a> <a href="https://github.com/docker/login-action/pull/920">docker/login-action#920</a></li> <li>Bump <code>@aws-sdk/client-ecr-public</code> from 3.890.0 to 3.1000.0 in <a href="https://github.com/docker/login-action/pull/909">docker/login-action#909</a> <a href="https://github.com/docker/login-action/pull/920">docker/login-action#920</a></li> <li>Bump <code>@docker/actions-toolkit</code> from 0.63.0 to 0.77.0 in <a href="https://github.com/docker/login-action/pull/910">docker/login-action#910</a> <a href="https://github.com/docker/login-action/pull/928">docker/login-action#928</a></li> <li>Bump <code>@isaacs/brace-expansion</code> from 5.0.0 to 5.0.1 in <a href="https://github.com/docker/login-action/pull/921">docker/login-action#921</a></li> <li>Bump js-yaml from 4.1.0 to 4.1.1 in <a href="https://github.com/docker/login-action/pull/901">docker/login-action#901</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/docker/login-action/compare/v3.7.0...v4.0.0">https://github.com/docker/login-action/compare/v3.7.0...v4.0.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/docker/login-action/commit/4907a6ddec9925e35a0a9e82d7399ccc52663121"><code>4907a6d</code></a> Merge pull request <a href="https://github.com/docker/login-action/issues/930">#930</a> from docker/dependabot/npm_and_yarn/aws-sdk-dependenc...</li> <li><a href="https://github.com/docker/login-action/commit/1e233e691a8881d7f35ca7c2d5dfaaed80b39636"><code>1e233e6</code></a> chore: update generated content</li> <li><a href="https://github.com/docker/login-action/commit/6c24ead68057f18c30c808a431f0b85dc25663cb"><code>6c24ead</code></a> build(deps): bump the aws-sdk-dependencies group with 2 updates</li> <li><a href="https://github.com/docker/login-action/commit/ee034d70944e3546349cd24295914f139342f1e6"><code>ee034d7</code></a> Merge pull request <a href="https://github.com/docker/login-action/issues/958">#958</a> from docker/dependabot/npm_and_yarn/lodash-4.18.1</li> <li><a href="https://github.com/docker/login-action/commit/1527209db9734bd2352a2dc1a63d79c9aa5358bb"><code>1527209</code></a> Merge pull request <a href="https://github.com/docker/login-action/issues/937">#937</a> from docker/dependabot/npm_and_yarn/proxy-agent-depen...</li> <li><a href="https://github.com/docker/login-action/commit/d39362aba4d72f8d9d93e0962119840690133e1b"><code>d39362a</code></a> build(deps): bump lodash from 4.17.23 to 4.18.1</li> <li><a href="https://github.com/docker/login-action/commit/a6f092b568105cbb6d9deb7e55e0a4c5c1025fce"><code>a6f092b</code></a> chore: update generated content</li> <li><a href="https://github.com/docker/login-action/commit/60953f0bed2120ec69659d271fe18d34bc069779"><code>60953f0</code></a> build(deps): bump the proxy-agent-dependencies group with 2 updates</li> <li><a href="https://github.com/docker/login-action/commit/62c688590fb4ab6c6e89a217ced0a7b2ddcf1340"><code>62c6885</code></a> Merge pull request <a href="https://github.com/docker/login-action/issues/936">#936</a> from docker/dependabot/npm_and_yarn/docker/actions-to...</li> <li><a href="https://github.com/docker/login-action/commit/102c0e672992d2e992c89b6f4808d65a353b5a1a"><code>102c0e6</code></a> chore: update generated content</li> <li>Additional commits viewable in <a href="https://github.com/docker/login-action/compare/c94ce9fb468520275223c153574b00df6fe4bcc9...4907a6ddec9925e35a0a9e82d7399ccc52663121">compare view</a></li> </ul> </details> <br /> Updates `github/codeql-action` from 4.32.4 to 4.35.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/github/codeql-action/releases">github/codeql-action's releases</a>.</em></p> <blockquote> <h2>v4.35.1</h2> <ul> <li>Fix incorrect minimum required Git version for <a href="https://github.com/github/roadmap/issues/1158">improved incremental analysis</a>: it should have been 2.36.0, not 2.11.0. <a href="https://github.com/github/codeql-action/pull/3781">#3781</a></li> </ul> <h2>v4.35.0</h2> <ul> <li>Reduced the minimum Git version required for <a href="https://github.com/github/roadmap/issues/1158">improved incremental analysis</a> from 2.38.0 to 2.11.0. <a href="https://github.com/github/codeql-action/pull/3767">#3767</a></li> <li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.1">2.25.1</a>. <a href="https://github.com/github/codeql-action/pull/3773">#3773</a></li> </ul> <h2>v4.34.1</h2> <ul> <li>Downgrade default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.24.3">2.24.3</a> due to issues with a small percentage of Actions and JavaScript analyses. <a href="https://github.com/github/codeql-action/pull/3762">#3762</a></li> </ul> <h2>v4.34.0</h2> <ul> <li>Added an experimental change which disables TRAP caching when <a href="https://github.com/github/roadmap/issues/1158">improved incremental analysis</a> is enabled, since improved incremental analysis supersedes TRAP caching. This will improve performance and reduce Actions cache usage. We expect to roll this change out to everyone in March. <a href="https://github.com/github/codeql-action/pull/3569">#3569</a></li> <li>We are rolling out improved incremental analysis to C/C++ analyses that use build mode <code>none</code>. We expect this rollout to be complete by the end of April 2026. <a href="https://github.com/github/codeql-action/pull/3584">#3584</a></li> <li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.0">2.25.0</a>. <a href="https://github.com/github/codeql-action/pull/3585">#3585</a></li> </ul> <h2>v4.33.0</h2> <ul> <li> <p>Upcoming change: Starting April 2026, the CodeQL Action will skip collecting file coverage information on pull requests to improve analysis performance. File coverage information will still be computed on non-PR analyses. Pull request analyses will log a warning about this upcoming change. <a href="https://github.com/github/codeql-action/pull/3562">#3562</a></p> <p>To opt out of this change:</p> <ul> <li><strong>Repositories owned by an organization:</strong> Create a custom repository property with the name <code>github-codeql-file-coverage-on-prs</code> and the type "True/false", then set this property to <code>true</code> in the repository's settings. For more information, see <a href="https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization">Managing custom properties for repositories in your organization</a>. Alternatively, if you are using an advanced setup workflow, you can set the <code>CODEQL_ACTION_FILE_COVERAGE_ON_PRS</code> environment variable to <code>true</code> in your workflow.</li> <li><strong>User-owned repositories using default setup:</strong> Switch to an advanced setup workflow and set the <code>CODEQL_ACTION_FILE_COVERAGE_ON_PRS</code> environment variable to <code>true</code> in your workflow.</li> <li><strong>User-owned repositories using advanced setup:</strong> Set the <code>CODEQL_ACTION_FILE_COVERAGE_ON_PRS</code> environment variable to <code>true</code> in your workflow.</li> </ul> </li> <li> <p>Fixed <a href="https://github.com/github/codeql-action/issues/3555">a bug</a> which caused the CodeQL Action to fail loading repository properties if a "Multi select" repository property was configured for the repository. <a href="https://github.com/github/codeql-action/pull/3557">#3557</a></p> </li> <li> <p>The CodeQL Action now loads <a href="https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization">custom repository properties</a> on GitHub Enterprise Server, enabling the customization of features such as <code>github-codeql-disable-overlay</code> that was previously only available on GitHub.com. <a href="https://github.com/github/codeql-action/pull/3559">#3559</a></p> </li> <li> <p>Once <a href="https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries">private package registries</a> can be configured with OIDC-based authentication for organizations, the CodeQL Action will now be able to accept such configurations. <a href="https://github.com/github/codeql-action/pull/3563">#3563</a></p> </li> <li> <p>Fixed the retry mechanism for database uploads. Previously this would fail with the error "Response body object should not be disturbed or locked". <a href="https://github.com/github/codeql-action/pull/3564">#3564</a></p> </li> <li> <p>A warning is now emitted if the CodeQL Action detects a repository property whose name suggests that it relates to the CodeQL Action, but which is not one of the properties recognised by the current version of the CodeQL Action. <a href="https://github.com/github/codeql-action/pull/3570">#3570</a></p> </li> </ul> <h2>v4.32.6</h2> <ul> <li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.24.3">2.24.3</a>. <a href="https://github.com/github/codeql-action/pull/3548">#3548</a></li> </ul> <h2>v4.32.5</h2> <ul> <li>Repositories owned by an organization can now set up the <code>github-codeql-disable-overlay</code> custom repository property to disable <a href="https://github.com/github/roadmap/issues/1158">improved incremental analysis for CodeQL</a>. First, create a custom repository property with the name <code>github-codeql-disable-overlay</code> and the type "True/false" in the organization's settings. Then in the repository's settings, set this property to <code>true</code> to disable improved incremental analysis. For more information, see <a href="https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization">Managing custom properties for repositories in your organization</a>. This feature is not yet available on GitHub Enterprise Server. <a href="https://github.com/github/codeql-action/pull/3507">#3507</a></li> <li>Added an experimental change so that when <a href="https://github.com/github/roadmap/issues/1158">improved incremental analysis</a> fails on a runner — potentially due to insufficient disk space — the failure is recorded in the Actions cache so that subsequent runs will automatically skip improved incremental analysis until something changes (e.g. a larger runner is provisioned or a new CodeQL version is released). We expect to roll this change out to everyone in March. <a href="https://github.com/github/codeql-action/pull/3487">#3487</a></li> <li>The minimum memory check for improved incremental analysis is now skipped for CodeQL 2.24.3 and later, which has reduced peak RAM usage. <a href="https://github.com/github/codeql-action/pull/3515">#3515</a></li> <li>Reduced log levels for best-effort private package registry connection check failures to reduce noise from workflow annotations. <a href="https://github.com/github/codeql-action/pull/3516">#3516</a></li> <li>Added an experimental change which lowers the minimum disk space requirement for <a href="https://github.com/github/roadmap/issues/1158">improved incremental analysis</a>, enabling it to run on standard GitHub Actions runners. We expect to roll this change out to everyone in March. <a href="https://github.com/github/codeql-action/pull/3498">#3498</a></li> <li>Added an experimental change which allows the <code>start-proxy</code> action to resolve the CodeQL CLI version from feature flags instead of using the linked CLI bundle version. We expect to roll this change out to everyone in March. <a href="https://github.com/github/codeql-action/pull/3512">#3512</a></li> <li>The previously experimental changes from versions 4.32.3, 4.32.4, 3.32.3 and 3.32.4 are now enabled by default. <a href="https://github.com/github/codeql-action/pull/3503">#3503</a>, <a href="https://github.com/github/codeql-action/pull/3504">#3504</a></li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/github/codeql-action/blob/main/CHANGELOG.md">github/codeql-action's changelog</a>.</em></p> <blockquote> <h1>CodeQL Action Changelog</h1> <p>See the <a href="https://github.com/github/codeql-action/releases">releases page</a> for the relevant changes to the CodeQL CLI and language packs.</p> <h2>[UNRELEASED]</h2> <p>No user facing changes.</p> <h2>4.35.2 - 15 Apr 2026</h2> <ul> <li>The undocumented TRAP cache cleanup feature that could be enabled using the <code>CODEQL_ACTION_CLEANUP_TRAP_CACHES</code> environment variable is deprecated and will be removed in May 2026. If you are affected by this, we recommend disabling TRAP caching by passing the <code>trap-caching: false</code> input to the <code>init</code> Action. <a href="https://github.com/github/codeql-action/pull/3795">#3795</a></li> <li>The Git version 2.36.0 requirement for improved incremental analysis now only applies to repositories that contain submodules. <a href="https://github.com/github/codeql-action/pull/3789">#3789</a></li> <li>Python analysis on GHES no longer extracts the standard library, relying instead on models of the standard library. This should result in significantly faster extraction and analysis times, while the effect on alerts should be minimal. <a href="https://github.com/github/codeql-action/pull/3794">#3794</a></li> <li>Fixed a bug in the validation of OIDC configurations for private registries that was added in CodeQL Action 4.33.0 / 3.33.0. <a href="https://github.com/github/codeql-action/pull/3807">#3807</a></li> <li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.2">2.25.2</a>. <a href="https://github.com/github/codeql-action/pull/3823">#3823</a></li> </ul> <h2>4.35.1 - 27 Mar 2026</h2> <ul> <li>Fix incorrect minimum required Git version for <a href="https://github.com/github/roadmap/issues/1158">improved incremental analysis</a>: it should have been 2.36.0, not 2.11.0. <a href="https://github.com/github/codeql-action/pull/3781">#3781</a></li> </ul> <h2>4.35.0 - 27 Mar 2026</h2> <ul> <li>Reduced the minimum Git version required for <a href="https://github.com/github/roadmap/issues/1158">improved incremental analysis</a> from 2.38.0 to 2.11.0. <a href="https://github.com/github/codeql-action/pull/3767">#3767</a></li> <li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.1">2.25.1</a>. <a href="https://github.com/github/codeql-action/pull/3773">#3773</a></li> </ul> <h2>4.34.1 - 20 Mar 2026</h2> <ul> <li>Downgrade default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.24.3">2.24.3</a> due to issues with a small percentage of Actions and JavaScript analyses. <a href="https://github.com/github/codeql-action/pull/3762">#3762</a></li> </ul> <h2>4.34.0 - 20 Mar 2026</h2> <ul> <li>Added an experimental change which disables TRAP caching when <a href="https://github.com/github/roadmap/issues/1158">improved incremental analysis</a> is enabled, since improved incremental analysis supersedes TRAP caching. This will improve performance and reduce Actions cache usage. We expect to roll this change out to everyone in March. <a href="https://github.com/github/codeql-action/pull/3569">#3569</a></li> <li>We are rolling out improved incremental analysis to C/C++ analyses that use build mode <code>none</code>. We expect this rollout to be complete by the end of April 2026. <a href="https://github.com/github/codeql-action/pull/3584">#3584</a></li> <li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.0">2.25.0</a>. <a href="https://github.com/github/codeql-action/pull/3585">#3585</a></li> </ul> <h2>4.33.0 - 16 Mar 2026</h2> <ul> <li> <p>Upcoming change: Starting April 2026, the CodeQL Action will skip collecting file coverage information on pull requests to improve analysis performance. File coverage information will still be computed on non-PR analyses. Pull request analyses will log a warning about this upcoming change. <a href="https://github.com/github/codeql-action/pull/3562">#3562</a></p> <p>To opt out of this change:</p> <ul> <li><strong>Repositories owned by an organization:</strong> Create a custom repository property with the name <code>github-codeql-file-coverage-on-prs</code> and the type "True/false", then set this property to <code>true</code> in the repository's settings. For more information, see <a href="https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization">Managing custom properties for repositories in your organization</a>. Alternatively, if you are using an advanced setup workflow, you can set the <code>CODEQL_ACTION_FILE_COVERAGE_ON_PRS</code> environment variable to <code>true</code> in your workflow.</li> <li><strong>User-owned repositories using default setup:</strong> Switch to an advanced setup workflow and set the <code>CODEQL_ACTION_FILE_COVERAGE_ON_PRS</code> environment variable to <code>true</code> in your workflow.</li> <li><strong>User-owned repositories using advanced setup:</strong> Set the <code>CODEQL_ACTION_FILE_COVERAGE_ON_PRS</code> environment variable to <code>true</code> in your workflow.</li> </ul> </li> <li> <p>Fixed <a href="https://github.com/github/codeql-action/issues/3555">a bug</a> which caused the CodeQL Action to fail loading repository properties if a "Multi select" repository property was configured for the repository. <a href="https://github.com/github/codeql-action/pull/3557">#3557</a></p> </li> <li> <p>The CodeQL Action now loads <a href="https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization">custom repository properties</a> on GitHub Enterprise Server, enabling the customization of features such as <code>github-codeql-disable-overlay</code> that was previously only available on GitHub.com. <a href="https://github.com/github/codeql-action/pull/3559">#3559</a></p> </li> <li> <p>Once <a href="https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries">private package registries</a> can be configured with OIDC-based authentication for organizations, the CodeQL Action will now be able to accept such configurations. <a href="https://github.com/github/codeql-action/pull/3563">#3563</a></p> </li> <li> <p>Fixed the retry mechanism for database uploads. Previously this would fail with the error "Response body object should not be disturbed or locked". <a href="https://github.com/github/codeql-action/pull/3564">#3564</a></p> </li> <li> <p>A warning is now emitted if the CodeQL Action detects a repository property whose name suggests that it relates to the CodeQL Action, but which is not one of the properties recognised by the current version of the CodeQL Action. <a href="https://github.com/github/codeql-action/pull/3570">#3570</a></p> </li> </ul> <h2>4.32.6 - 05 Mar 2026</h2> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/github/codeql-action/commit/95e58e9a2cdfd71adc6e0353d5c52f41a045d225"><code>95e58e9</code></a> Merge pull request <a href="https://github.com/github/codeql-action/issues/3824">#3824</a> from github/update-v4.35.2-d2e135a73</li> <li><a href="https://github.com/github/codeql-action/commit/6f31bfe060e817d81e938dbec767969d20031e25"><code>6f31bfe</code></a> Update changelog for v4.35.2</li> <li><a href="https://github.com/github/codeql-action/commit/d2e135a73a39154e3a231aeb49163c4661c5b8b1"><code>d2e135a</code></a> Merge pull request <a href="https://github.com/github/codeql-action/issues/3823">#3823</a> from github/update-bundle/codeql-bundle-v2.25.2</li> <li><a href="https://github.com/github/codeql-action/commit/60abb65df09fcf213c398e064c8a80db1f15cdaf"><code>60abb65</code></a> Add changelog note</li> <li><a href="https://github.com/github/codeql-action/commit/5a0a562209255e956ad8aafcee303294e64eefa2"><code>5a0a562</code></a> Update default bundle to codeql-bundle-v2.25.2</li> <li><a href="https://github.com/github/codeql-action/commit/65216971a11ded447a6b76263d5a144519e5eee1"><code>6521697</code></a> Merge pull request <a href="https://github.com/github/codeql-action/issues/3820">#3820</a> from github/dependabot/github_actions/dot-github/wor...</li> <li><a href="https://github.com/github/codeql-action/commit/3c45af2dd258e1623af1898da5c86545b514e028"><code>3c45af2</code></a> Merge pull request <a href="https://github.com/github/codeql-action/issues/3821">#3821</a> from github/dependabot/npm_and_yarn/npm-minor-345b93...</li> <li><a href="https://github.com/github/codeql-action/commit/f1c339364c12f922998186ed897e45e3b4ae8874"><code>f1c3393</code></a> Rebuild</li> <li><a href="https://github.com/github/codeql-action/commit/1024fc496c87e944a93e98d8cf2c09e2c7602a30"><code>1024fc4</code></a> Rebuild</li> <li><a href="https://github.com/github/codeql-action/commit/9dd4cfed96030ccdfe1af4daf7a7964322704fed"><code>9dd4cfe</code></a> Bump the npm-minor group across 1 directory with 6 updates</li> <li>Additional commits viewable in <a href="https://github.com/github/codeql-action/compare/89a39a4e59826350b863aa6b6252a07ad50cf83e...95e58e9a2cdfd71adc6e0353d5c52f41a045d225">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Signed-off-by: Hrushikesh Patil <hrushi2900@gmail.com>
There was a problem hiding this comment.
Actionable comments posted: 19
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@internal/apischema/openai/openai.go`:
- Around line 8388-8394: Replace the raw string types for response_format and
timestamp_granularities with constrained custom types and constants: define a
ResponseFormat type (e.g., type ResponseFormat string) and a
TimestampGranularity type (e.g., type TimestampGranularity string) with
enumerated constants for allowed values, then update the struct fields
ResponseFormat and TimestampGranularities to use ResponseFormat and
[]TimestampGranularity respectively (preserve json tags). Also update any other
references noted around the same area (the other occurrences at lines
~8401-8404) to use the new types and, if needed, add simple validation helpers
or UnmarshalText/MarshalText methods to enforce/convert allowed values.
- Around line 8409-8446: In the ResponseBody implementations in
internal/translator/openai_transcription.go (ResponseBody) and
internal/translator/openai_translation.go (ResponseBody) guard JSON
unmarshalling by checking the original request's ResponseFormat and Stream flags
and/or the HTTP Content-Type header: only attempt json.Unmarshal into
TranscriptionResponse or TranslationResponse when ResponseFormat indicates JSON
(or Content-Type is application/json) and Stream is false; otherwise skip
unmarshalling and record the raw response as Text (string(body)). Update both
ResponseBody handlers to use these checks so plain-text or streaming responses
are traced as raw text rather than attempting JSON unmarshal.
In `@internal/endpointspec/endpointspec.go`:
- Around line 737-745: The handler that reads the "model" form part incorrectly
marks hasModel true whenever the part exists even if its value is empty or
whitespace; modify the logic in the switch case that calls readFormField (and
the other similar "model" handling sites) to trim whitespace from the returned
val and only set req.Model and hasModel = true when the trimmed value is
non-empty—if trimmed val is empty, treat it as if the part was missing (do not
set hasModel or req.Model).
- Around line 753-784: The multipart parsing currently ignores readFormField and
parse errors, silently dropping malformed optional fields; update the parsing
branches in the handler that call readFormField (for "language", "prompt",
"response_format", "temperature", "stream", "timestamp_granularities[]") so that
if readFormField returns an error you propagate/return a 400 error instead of
ignoring it, and for "temperature" return a 400 when strconv.ParseFloat(val, 64)
fails rather than skipping setting req.Temperature, for "stream" accept only
explicit "true" or "false" (case-insensitive using strings.EqualFold) and return
a 400 for any other value, and for "timestamp_granularities[]" only append to
req.TimestampGranularities on successful read; keep using the existing
readFormField, req.* fields and strconv/strings helpers to locate and fix the
branches accordingly.
- Around line 775-795: The function parsing multipart transcription currently
parses the "stream" form field into req.Stream but the final return always uses
a literal false; update the return so the third return value is req.Stream
(instead of false) so callers receive the parsed streaming flag; locate the
return at the end of the parser (the line returning req.Model, &req, false, nil,
nil) and replace the false with req.Stream.
In `@internal/extproc/processor_impl_test.go`:
- Around line 1433-1436: The test currently assumes the model header is at index
0 which is flaky; instead iterate the slice returned by
re.RequestBody.GetResponse().GetHeaderMutation().SetHeaders (setHeaders) and
locate the entry whose Header.Key equals internalapi.ModelNameHeaderKeyDefault,
assert that such an entry exists, and then assert its Header.RawValue equals
"whisper-1"; keep the existing require.GreaterOrEqual check for len(setHeaders)
but replace the index-based require.Equal on setHeaders[0] with the described
search-and-assert logic.
In `@internal/mcpproxy/mcpproxy.go`:
- Around line 304-313: The code currently ignores errors from io.ReadAll when
reading resp.Body (inside the block handling Content-Type !=
"text/event-stream"), which lets transport/read failures be misclassified as
non-JSON-RPC and fall through to SSE parsing; update the logic in the block
around sseReader, resp.Body, tryDecodeJSONRPCMessage and rawMsg to check the
error returned by io.ReadAll, and if non-nil propagate or handle it immediately
(e.g., return the error up the call stack or set an explicit transport error),
instead of treating the read as successful and attempting SSE parsing with
partial data.
In `@internal/mcpproxy/session.go`:
- Around line 441-465: The Content-Type check and full ReadAll are unsafe for
streaming and miss params; parse the header with mime.ParseMediaType (or
equivalent) and treat types with base "application/json" or suffix "+json" as
JSON candidates, then wrap bodyReader in a buffered reader (bufio.Reader), Peek
or ReadUpTo a small prefix (e.g. 4KB) instead of io.ReadAll, run
tryDecodeJSONRPCMessage on that prefix, and if it decodes push the backendEvent
(same sseEvent/backend/startAt) and return; if it doesn't, reconstruct the
original stream by composing the buffered unread bytes with the remainder (e.g.
io.MultiReader(bufio.NewReader that returns the peeked bytes then the underlying
reader)) so the SSE parser can stream the rest without blocking.
In `@internal/translator/anthropic_helper.go`:
- Around line 627-633: The code currently falls back to max_tokens = 0 by
reading openAIReq.MaxCompletionTokens/openAIReq.MaxTokens into maxTokensVal,
which causes requests with missing token limits to be sent upstream; instead,
validate locally and reject requests that omit both MaxCompletionTokens and
MaxTokens before constructing the Anthropic payload. Update the logic around
maxTokensVal (and the analogous block at the later occurrence) to check if
cmp.Or(openAIReq.MaxCompletionTokens, openAIReq.MaxTokens) is nil and return a
clear validation error (rather than using 0), so the gateway returns a
consistent 4xx to the client without making an upstream call.
In `@internal/translator/openai_transcription_test.go`:
- Line 54: The test currently casts tr to the concrete type
*openAIToOpenAITranslatorV1Transcription to call SetContentType, which is
brittle; change the cast to an interface assertion instead (e.g. tr.(interface{
SetContentType(string) })) and call SetContentType on that interface so the test
relies only on the SetContentType behavior rather than the concrete type,
keeping references to tr and the SetContentType method.
In `@internal/translator/openai_translation.go`:
- Around line 75-93: The ResponseBody implementation for
openAIToOpenAITranslatorV1Translation silently ignores io.ReadAll errors; update
ResponseBody to handle readErr by calling the translation span error recorder
(e.g., call span.RecordError(readErr) when readErr != nil) so read failures are
observable, and likewise record json.Unmarshal errors (e.g.,
span.RecordError(jsonErr)) before falling back to recording raw data via
span.RecordResponse; use the existing tracingapi.TranslationSpan (span) and the
function openAIToOpenAITranslatorV1Translation.ResponseBody to locate where to
add these calls.
In `@site/docs/capabilities/llm-integrations/supported-endpoints.md`:
- Around line 195-253: The provider-endpoint compatibility table is missing
entries for the new "Audio Transcriptions" (POST /v1/audio/transcriptions) and
"Audio Translations" (POST /v1/audio/translations) sections; update the
compatibility table to add rows/columns for these two endpoints and mark support
for each listed provider (e.g., OpenAI and "Any OpenAI-compatible provider that
supports audio transcriptions/translations"), ensuring the table reflects
multipart/form-data upload and model selection via `model` form field /
`x-ai-eg-model` header as noted in the sections so docs remain consistent.
In `@site/package.json`:
- Line 35: The project pins "typescript" to "~6.0.2" in package.json which
triggers TS5101 errors because `@docusaurus/tsconfig`@3.9.2 still uses deprecated
"baseUrl": "."; either add "ignoreDeprecations": "6.0" to your tsconfig.json
(the file that extends "@docusaurus/tsconfig") under compilerOptions, or upgrade
Docusaurus to 3.10+ so `@docusaurus/tsconfig` is fixed — update package.json
dependency and run a fresh install and npm run typecheck to verify the CI issue
is resolved.
In `@tests/internal/testopenai/cassettes/audio-transcription-basic.yaml`:
- Around line 53-55: Redact environment-specific identifiers in the cassette
YAML by replacing the Openai-Project and X-Request-Id header values with stable
placeholders (e.g. "<REDACTED_PROJECT>", "<REDACTED_REQUEST_ID>") or remove
those keys entirely so no real project or request IDs are committed; update
every occurrence (including the other instance around lines 73-74) in the
fixture to use the placeholders and commit the sanitized cassette.
In `@tests/internal/testopenai/cassettes/audio-translation-basic.yaml`:
- Around line 47-50: The cassette contains a leaked project identifier in the
response header "Openai-Project"; update the test fixtures redaction rules to
include "Openai-Project" (add the header name to the response redaction list
used by the cassette/recorder) and then regenerate the audio-translation-basic
cassette so the recorded YAML no longer contains the proj_* value.
In `@tests/internal/testopenai/handler.go`:
- Around line 371-374: The current multipart branch in the request-matching
logic (the isMultipart(...) check that immediately returns true) makes multipart
requests indistinguishable; instead, in that branch parse and normalize the
multipart form for both the incoming http.Request and the stored interaction
headers/body (use getHeaderValue and the same parser used elsewhere), then
compare a whitelist of non-file form fields (e.g., "model", "language",
"response_format") while explicitly ignoring file parts and boundary bytes;
update the code around the isMultipart check to return true only if those
canonical form fields match, otherwise fall through to a non-match.
In `@tests/internal/testopenai/vcr.go`:
- Around line 109-112: The header deep-equal is still failing for multipart
requests because parameters (boundary) on Content-Type and rewritten
Content-Length differ; before the header comparison in
tests/internal/testopenai/vcr.go, detect multipart via isMultipart on
httpReq.Header["Content-Type"] and then normalize or remove those fields: strip
parameters from Content-Type (leave only "multipart/form-data") and remove or
set Content-Length to the placeholder value used in the cassette (the
"[multipart form data omitted]" length) so the header comparison uses normalized
values; update any header-normalization helper (or add one) used prior to the
header deep-equal so recorded cassettes and live multipart requests match.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 4283460f-5539-489c-935b-6df16f3bc0e6
⛔ Files ignored due to path filters (5)
go.sumis excluded by!**/*.sumsite/package-lock.jsonis excluded by!**/package-lock.jsonsite/static/img/adopters/Simplifai.pngis excluded by!**/*.pngtests/internal/testopenai/testdata/sunrise_fact.wavis excluded by!**/*.wavtools/go.sumis excluded by!**/*.sum
📒 Files selected for processing (60)
Dockerfilecmd/aigw/docker-compose.yamlcmd/extproc/mainlib/main.goexamples/basic/aws-irsa.yamlexamples/basic/aws-pod-identity.yamlgo.modinternal/apischema/openai/openai.gointernal/endpointspec/endpointspec.gointernal/endpointspec/endpointspec_test.gointernal/extproc/processor_impl.gointernal/extproc/processor_impl_test.gointernal/mcpproxy/handlers.gointernal/mcpproxy/handlers_test.gointernal/mcpproxy/mcpproxy.gointernal/mcpproxy/session.gointernal/mcpproxy/session_test.gointernal/mcpproxy/sse.gointernal/mcpproxy/sse_test.gointernal/metrics/genai.gointernal/tracing/openinference/openai/transcription.gointernal/tracing/openinference/openai/transcription_test.gointernal/tracing/openinference/openai/translation.gointernal/tracing/openinference/openai/translation_test.gointernal/tracing/openinference/openinference.gointernal/tracing/span.gointernal/tracing/tracer.gointernal/tracing/tracer_test.gointernal/tracing/tracing.gointernal/tracing/tracing_test.gointernal/tracing/tracingapi/api.gointernal/translator/anthropic_helper.gointernal/translator/multipart_helper.gointernal/translator/multipart_helper_test.gointernal/translator/openai_awsanthropic_test.gointernal/translator/openai_gcpanthropic_test.gointernal/translator/openai_transcription.gointernal/translator/openai_transcription_test.gointernal/translator/openai_translation.gointernal/translator/openai_translation_test.gointernal/translator/translator.gosite/docs/capabilities/llm-integrations/supported-endpoints.mdsite/docs/getting-started/connect-providers/aws-bedrock.mdsite/package.jsonsite/src/data/adopters/adopters.jsontests/data-plane/testupstream_test.gotests/data-plane/vcr/docker-compose-otel.yamltests/data-plane/vcr/docker-compose.yamltests/internal/testopenai/audio_requests.gotests/internal/testopenai/audio_requests_test.gotests/internal/testopenai/cassettes.gotests/internal/testopenai/cassettes/audio-transcription-basic.yamltests/internal/testopenai/cassettes/audio-translation-basic.yamltests/internal/testopenai/handler.gotests/internal/testopenai/vcr.gotests/internal/testopeninference/openai_proxy.pytests/internal/testopeninference/requirements.txttests/internal/testopeninference/spans/audio-transcription-basic.jsontests/internal/testopeninference/spans/audio-translation-basic.jsontests/internal/testopeninference/spans_test.gotools/go.mod
| Model string `json:"model"` | ||
| Language string `json:"language,omitempty"` | ||
| Prompt string `json:"prompt,omitempty"` | ||
| ResponseFormat string `json:"response_format,omitempty"` | ||
| Temperature *float64 `json:"temperature,omitempty"` | ||
| TimestampGranularities []string `json:"timestamp_granularities,omitempty"` | ||
| Stream bool `json:"stream,omitempty"` |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
Use typed enums for response_format and timestamp granularities.
Line [8391], Line [8393], and Line [8403] use raw string/[]string, which allows invalid values to flow through unchecked. Prefer constrained custom types/constants to reduce downstream validation errors.
♻️ Suggested refactor
+type AudioResponseFormat string
+
+const (
+ AudioResponseFormatJSON AudioResponseFormat = "json"
+ AudioResponseFormatText AudioResponseFormat = "text"
+ AudioResponseFormatSRT AudioResponseFormat = "srt"
+ AudioResponseFormatVerboseJSON AudioResponseFormat = "verbose_json"
+ AudioResponseFormatVTT AudioResponseFormat = "vtt"
+)
+
+type TimestampGranularity string
+
+const (
+ TimestampGranularityWord TimestampGranularity = "word"
+ TimestampGranularitySegment TimestampGranularity = "segment"
+)
+
type TranscriptionRequest struct {
Model string `json:"model"`
Language string `json:"language,omitempty"`
Prompt string `json:"prompt,omitempty"`
- ResponseFormat string `json:"response_format,omitempty"`
+ ResponseFormat AudioResponseFormat `json:"response_format,omitempty"`
Temperature *float64 `json:"temperature,omitempty"`
- TimestampGranularities []string `json:"timestamp_granularities,omitempty"`
+ TimestampGranularities []TimestampGranularity `json:"timestamp_granularities,omitempty"`
Stream bool `json:"stream,omitempty"`
FileName string `json:"file_name,omitempty"`
FileSize int64 `json:"file_size,omitempty"`
}
type TranslationRequest struct {
Model string `json:"model"`
Prompt string `json:"prompt,omitempty"`
- ResponseFormat string `json:"response_format,omitempty"`
+ ResponseFormat AudioResponseFormat `json:"response_format,omitempty"`
Temperature *float64 `json:"temperature,omitempty"`
FileName string `json:"file_name,omitempty"`
FileSize int64 `json:"file_size,omitempty"`
}Also applies to: 8401-8404
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@internal/apischema/openai/openai.go` around lines 8388 - 8394, Replace the
raw string types for response_format and timestamp_granularities with
constrained custom types and constants: define a ResponseFormat type (e.g., type
ResponseFormat string) and a TimestampGranularity type (e.g., type
TimestampGranularity string) with enumerated constants for allowed values, then
update the struct fields ResponseFormat and TimestampGranularities to use
ResponseFormat and []TimestampGranularity respectively (preserve json tags).
Also update any other references noted around the same area (the other
occurrences at lines ~8401-8404) to use the new types and, if needed, add simple
validation helpers or UnmarshalText/MarshalText methods to enforce/convert
allowed values.
| // TranscriptionResponse represents the JSON response from /v1/audio/transcriptions. | ||
| // Covers both the simple (json) and verbose (verbose_json) response formats. | ||
| type TranscriptionResponse struct { | ||
| Text string `json:"text"` | ||
| Task string `json:"task,omitempty"` | ||
| Language string `json:"language,omitempty"` | ||
| Duration float64 `json:"duration,omitempty"` | ||
| Segments []TranscriptionSegment `json:"segments,omitempty"` | ||
| Words []TranscriptionWord `json:"words,omitempty"` | ||
| } | ||
|
|
||
| // TranscriptionSegment represents a segment in verbose transcription output. | ||
| // Field names/types match openai.TranscriptionSegment from the SDK. | ||
| type TranscriptionSegment struct { | ||
| ID int64 `json:"id"` | ||
| Seek int64 `json:"seek"` | ||
| Start float64 `json:"start"` | ||
| End float64 `json:"end"` | ||
| Text string `json:"text"` | ||
| Tokens []int64 `json:"tokens"` | ||
| Temperature float64 `json:"temperature"` | ||
| AvgLogprob float64 `json:"avg_logprob"` | ||
| CompressionRatio float64 `json:"compression_ratio"` | ||
| NoSpeechProb float64 `json:"no_speech_prob"` | ||
| } | ||
|
|
||
| // TranscriptionWord represents a word with timestamp in transcription output. | ||
| // Field names/types match openai.TranscriptionWord from the SDK. | ||
| type TranscriptionWord struct { | ||
| Word string `json:"word"` | ||
| Start float64 `json:"start"` | ||
| End float64 `json:"end"` | ||
| } | ||
|
|
||
| // TranslationResponse represents the JSON response from /v1/audio/translations. | ||
| type TranslationResponse struct { | ||
| Text string `json:"text"` | ||
| } |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Verify whether audio transcription/translation responses are conditionally decoded
# by Content-Type/response_format before JSON unmarshalling.
echo "== Usages of response structs =="
rg -nP --type=go -C3 '\bTranscriptionResponse\b|\bTranslationResponse\b'
echo "== Audio endpoint handlers / translators and decode logic =="
rg -nP --type=go -C4 'audio/(transcriptions|translations)|response_format|ResponseFormat|Content-Type|application/json|text/plain|text/event-stream|json\.Unmarshal'Repository: PatilHrushikesh/ai-gateway
Length of output: 50383
🏁 Script executed:
#!/bin/bash
# Focus on finding where audio responses are actually decoded
# Look for audio transcription/translation request/response handlers
echo "=== Audio translator response handling ==="
rg -nA20 'func.*ResponseBody.*TranscriptionRequest|func.*ResponseBody.*TranslationRequest' --type=go
echo "=== Response format / content-type checks in audio handlers ==="
rg -nB3 -A3 'ResponseFormat|response_format|text/plain|streaming' internal/translator/ --type=goRepository: PatilHrushikesh/ai-gateway
Length of output: 50383
🏁 Script executed:
#!/bin/bash
# Look for all json.Unmarshal calls involving TranscriptionResponse or TranslationResponse
echo "=== All json.Unmarshal with audio response types ==="
rg -nB2 -A2 'json\.Unmarshal.*resp|json\.Unmarshal.*[Tt]ranscription|json\.Unmarshal.*[Tt]ranslation' --type=go | head -80Repository: PatilHrushikesh/ai-gateway
Length of output: 6305
🏁 Script executed:
#!/bin/bash
# Check the full translator implementation for response body decoding
echo "=== openai_transcription.go full ResponseBody method ==="
sed -n '50,120p' internal/translator/openai_transcription.go
echo ""
echo "=== openai_translation.go full ResponseBody method ==="
sed -n '50,120p' internal/translator/openai_translation.goRepository: PatilHrushikesh/ai-gateway
Length of output: 4262
🏁 Script executed:
#!/bin/bash
# Find where ResponseBody is called and how results are used
echo "=== Where ResponseBody result is used ==="
rg -nB5 -A10 'ResponseBody\(' --type=go internal/ | grep -A10 'newBody\|body\|result' | head -100
echo ""
echo "=== Check if audio responses pass through unchanged ==="
rg -nC5 'audio.*transcription|audio.*translation' internal/handler --type=go | head -80Repository: PatilHrushikesh/ai-gateway
Length of output: 8661
🏁 Script executed:
#!/bin/bash
# Check OpenAI structs for response_format, streaming options
echo "=== Audio request structs with format/streaming options ==="
rg -nA15 'type TranscriptionRequest struct|type TranslationRequest struct' internal/apischema --type=go
echo ""
echo "=== Check if there are other response decode implementations ==="
fd -e go -path '*/internal/*' -type f | xargs rg -l 'TranscriptionResponse|TranslationResponse' | head -20Repository: PatilHrushikesh/ai-gateway
Length of output: 3680
🏁 Script executed:
#!/bin/bash
# Search for ResponseFormat usage in audio/transcription/translation handling
echo "=== ResponseFormat handling in audio code ==="
rg -nC5 'ResponseFormat|response_format' internal/translator/openai_transcription.go internal/translator/openai_translation.go
echo ""
echo "=== Check if response is passed through without modification ==="
rg -nB10 'ResponseBody.*Transcription|ResponseBody.*Translation' internal/handler --type go 2>/dev/null || rg -nB10 'ResponseBody.*Transcription|ResponseBody.*Translation' internal/ --type go | head -100Repository: PatilHrushikesh/ai-gateway
Length of output: 2442
🏁 Script executed:
#!/bin/bash
# Look for where audio ResponseBody result is actually used
echo "=== Audio response handling in request processors ==="
rg -nC10 'transcription.*ResponseBody|translation.*ResponseBody' --type go | head -150
echo ""
echo "=== Search for response streaming or plain-text handling ==="
rg -nC3 'text/plain|application/octet|streaming.*audio|Stream.*true' internal/translator/openai_transcription.go internal/translator/openai_translation.goRepository: PatilHrushikesh/ai-gateway
Length of output: 185
🏁 Script executed:
#!/bin/bash
# Check if newBody is expected to be empty and response passes through elsewhere
echo "=== Audio endpoint handlers ==="
rg -n 'transcription|translation' internal/handler --type go 2>/dev/null | head -30
echo ""
echo "=== Check how translator results are used in proxying/response ==="
rg -nB3 -A8 'translator\.ResponseBody' internal/ --type go | grep -A8 'transcription\|translation' | head -80Repository: PatilHrushikesh/ai-gateway
Length of output: 169
🏁 Script executed:
#!/bin/bash
# Find the main request handlers and proxying logic
echo "=== Find handler packages ==="
fd -type d -name handler internal/
echo ""
echo "=== Search for audio transcription/translation endpoint setup ==="
rg -rn 'audio/transcriptions|audio/translations' internal/ --type go | head -40
echo ""
echo "=== Find where body is proxied/written to client after translation ==="
rg -nC8 'newBody.*audio|body.*Transcription|body.*Translation|Transcription.*body|Translation.*body' internal/ --type go | head -120Repository: PatilHrushikesh/ai-gateway
Length of output: 11812
🏁 Script executed:
#!/bin/bash
# Find proxy/routing logic that would use translator results
echo "=== Looking for translator instantiation and usage patterns ==="
rg -nC6 'NewTranscription.*Translator|NewTranslation.*Translator' internal/ --type go | head -100
echo ""
echo "=== Check if there's response modification or pass-through logic ==="
rg -n 'copyResponse|io\.Copy|writeResponse' internal/ --type go | grep -i 'audio\|transcription\|translation'
echo ""
echo "=== Find where responses are written after translation ==="
rg -nB5 -A5 'w\.Write.*newBody|w\.Write.*body' internal/ --type go | head -80Repository: PatilHrushikesh/ai-gateway
Length of output: 10180
🏁 Script executed:
#!/bin/bash
# Critical finding: body is read but not returned in newBody
# Need to find where the original response body goes
echo "=== Check if response body handling is elsewhere ==="
rg -n 'io\.ReadAll.*body|body.*io\.ReadAll' internal/extproc internal/proxy --type go 2>/dev/null | head -40
echo ""
echo "=== Search for where audio responses bypass translation ==="
rg -n 'endpointspec.*Audio|TranscriptionEndpointSpec|TranslationEndpointSpec' internal/ --type go | head -30Repository: PatilHrushikesh/ai-gateway
Length of output: 3549
🏁 Script executed:
#!/bin/bash
# The body is consumed in ResponseBody but not returned
# Check if there's a separate response pass-through mechanism
echo "=== Check endpointspec for audio handling ==="
sed -n '1,100p' internal/endpointspec/endpointspec.go | grep -A50 'TranscriptionEndpointSpec\|TranslationEndpointSpec'
echo ""
echo "=== Look for proxy/passthrough logic that doesn't use newBody ==="
rg -n 'upstream.*body|body.*client|client.*response' internal/extproc/processor.go --type go 2>/dev/null | head -50Repository: PatilHrushikesh/ai-gateway
Length of output: 182
🏁 Script executed:
#!/bin/bash
# Verify the critical bug: body consumed in span recording but not returned
echo "=== Confirm: body is consumed in span recording section ==="
cat -n internal/translator/openai_transcription.go | sed -n '76,95p'
echo ""
echo "=== Confirm: body is also not used elsewhere in ResponseBody ==="
cat -n internal/translator/openai_translation.go | sed -n '74,93p'Repository: PatilHrushikesh/ai-gateway
Length of output: 1913
🏁 Script executed:
#!/bin/bash
# Find how ResponseBody is used in actual proxying
echo "=== Search for ResponseBody call sites in processor/proxy ==="
rg -n 'translator\.ResponseBody' internal/ --type go | head -40
echo ""
echo "=== Check if body is expected to pass through when newBody is empty ==="
rg -nB5 -A10 '\.ResponseBody\(' internal/ --type go | grep -A10 'newBody' | head -80Repository: PatilHrushikesh/ai-gateway
Length of output: 13171
🏁 Script executed:
#!/bin/bash
# Look at the actual processor that uses translator results
echo "=== Processor using translator ResponseBody ==="
fd -name 'processor*.go' internal/extproc/ --type f | xargs cat | head -300Repository: PatilHrushikesh/ai-gateway
Length of output: 365
🏁 Script executed:
#!/bin/bash
# Find the actual proxy/processing logic that calls translator.ResponseBody
echo "=== Find where translator is instantiated and results used ==="
rg -n 'GetTranslator\|NewTranscription\|NewTranslation' internal/ --type go | head -20
echo ""
echo "=== Check if there's a default pass-through when newBody is empty/nil ==="
rg -nB3 -A8 'if.*newBody\|len(newBody)' internal/ --type go | grep -B3 -A8 'audio\|transcription\|translation' | head -60Repository: PatilHrushikesh/ai-gateway
Length of output: 207
🏁 Script executed:
#!/bin/bash
# Critical: Find where audio responses are actually written to client
echo "=== Find response writing logic in extproc/processor ==="
ls -la internal/extproc/
cat internal/extproc/processor.go 2>/dev/null | head -200Repository: PatilHrushikesh/ai-gateway
Length of output: 4627
🏁 Script executed:
#!/bin/bash
# Check the extproc processor implementation
echo "=== Looking for where newBody is used after ResponseBody call ==="
rg -n 'newBody' internal/extproc/processor.go --type go 2>/dev/null | head -40Repository: PatilHrushikesh/ai-gateway
Length of output: 135
🏁 Script executed:
#!/bin/bash
# Check processor_impl.go for ResponseBody usage
echo "=== Search for ResponseBody calls in processor_impl.go ==="
rg -n 'ResponseBody' internal/extproc/processor_impl.go --type go
echo ""
echo "=== Get full context around ResponseBody calls ==="
rg -nB5 -A15 '\.ResponseBody\(' internal/extproc/processor_impl.go --type go | head -150Repository: PatilHrushikesh/ai-gateway
Length of output: 2206
🏁 Script executed:
#!/bin/bash
# Check if there's a pass-through mechanism for empty newBody
echo "=== Check how newBody is handled after ResponseBody ==="
cat internal/extproc/processor_impl.go | grep -A30 'ResponseBody' | head -100Repository: PatilHrushikesh/ai-gateway
Length of output: 4496
🏁 Script executed:
#!/bin/bash
# Critical: check what mutationsFromTranslationResult does with empty newBody
echo "=== Check mutationsFromTranslationResult implementation ==="
rg -n 'mutationsFromTranslationResult' internal/extproc/ --type go
echo ""
echo "=== Get the full implementation ==="
rg -nB3 -A20 'func mutationsFromTranslationResult' internal/extproc/ --type goRepository: PatilHrushikesh/ai-gateway
Length of output: 2517
🏁 Script executed:
#!/bin/bash
# This is critical - if newBody is empty, what happens?
echo "=== Looking at what happens when newBody is nil/empty ==="
cat internal/extproc/processor_impl.go | sed -n '1,100p' | tail -50
grep -n 'mutationsFromTranslationResult\|BodyMutation' internal/extproc/processor_impl.go | head -20Repository: PatilHrushikesh/ai-gateway
Length of output: 3987
🏁 Script executed:
#!/bin/bash
# Verify: when newBody is nil, the original body passes through
echo "=== Confirm the behavior: nil newBody means pass-through ==="
cat internal/extproc/util.go | sed -n '81,103p'
echo ""
echo "=== Verify audio transcription/translation returns nil newBody ==="
cat internal/translator/openai_transcription.go | sed -n '76,95p'
cat internal/translator/openai_translation.go | sed -n '74,93p'Repository: PatilHrushikesh/ai-gateway
Length of output: 2582
Guard non-JSON formats before unmarshalling in audio response tracing.
The ResponseBody implementations in internal/translator/openai_transcription.go (lines 76–94) and internal/translator/openai_translation.go (lines 74–92) attempt JSON unmarshalling without checking response format or content-type before recording to the tracing span. While a fallback exists (wrapping raw data as Text), this approach produces inaccurate tracing data:
- If the response is in plain-text format (when
response_formatis "text"), the unmarshal will fail and the entire response will be recorded as a singleTextfield rather than being properly recognized as already-text content. - If the response is streaming, the same issue applies.
- The request structs support
ResponseFormatandStreamparameters, but the response handler ignores them.
Although the original response body passes through unchanged to clients (since newBody is nil), tracing observability is compromised for any non-JSON format responses.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@internal/apischema/openai/openai.go` around lines 8409 - 8446, In the
ResponseBody implementations in internal/translator/openai_transcription.go
(ResponseBody) and internal/translator/openai_translation.go (ResponseBody)
guard JSON unmarshalling by checking the original request's ResponseFormat and
Stream flags and/or the HTTP Content-Type header: only attempt json.Unmarshal
into TranscriptionResponse or TranslationResponse when ResponseFormat indicates
JSON (or Content-Type is application/json) and Stream is false; otherwise skip
unmarshalling and record the raw response as Text (string(body)). Update both
ResponseBody handlers to use these checks so plain-text or streaming responses
are traced as raw text rather than attempting JSON unmarshal.
| switch part.FormName() { | ||
| case "model": | ||
| val, err := readFormField(part) | ||
| if err != nil { | ||
| return "", nil, false, nil, fmt.Errorf("%w: failed to read model field: %w", internalapi.ErrMalformedRequest, err) | ||
| } | ||
| req.Model = val | ||
| hasModel = true | ||
| case "file": |
There was a problem hiding this comment.
Treat an empty model value as missing.
hasModel flips to true as soon as the model part exists, so model= or whitespace-only values pass validation. The parser then returns an empty original model, which pushes a malformed request downstream instead of failing fast.
Suggested fix
case "model":
val, err := readFormField(part)
if err != nil {
return "", nil, false, nil, fmt.Errorf("%w: failed to read model field: %w", internalapi.ErrMalformedRequest, err)
}
- req.Model = val
- hasModel = true
+ req.Model = strings.TrimSpace(val)
+ hasModel = req.Model != ""Also applies to: 788-790, 853-859, 888-890
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@internal/endpointspec/endpointspec.go` around lines 737 - 745, The handler
that reads the "model" form part incorrectly marks hasModel true whenever the
part exists even if its value is empty or whitespace; modify the logic in the
switch case that calls readFormField (and the other similar "model" handling
sites) to trim whitespace from the returned val and only set req.Model and
hasModel = true when the trimmed value is non-empty—if trimmed val is empty,
treat it as if the part was missing (do not set hasModel or req.Model).
| case "language": | ||
| val, err := readFormField(part) | ||
| if err == nil { | ||
| req.Language = val | ||
| } | ||
| case "prompt": | ||
| val, err := readFormField(part) | ||
| if err == nil { | ||
| req.Prompt = val | ||
| } | ||
| case "response_format": | ||
| val, err := readFormField(part) | ||
| if err == nil { | ||
| req.ResponseFormat = val | ||
| } | ||
| case "temperature": | ||
| val, err := readFormField(part) | ||
| if err == nil { | ||
| if t, parseErr := strconv.ParseFloat(val, 64); parseErr == nil { | ||
| req.Temperature = &t | ||
| } | ||
| } | ||
| case "stream": | ||
| val, err := readFormField(part) | ||
| if err == nil { | ||
| req.Stream = strings.EqualFold(val, "true") | ||
| } | ||
| case "timestamp_granularities[]": | ||
| val, err := readFormField(part) | ||
| if err == nil { | ||
| req.TimestampGranularities = append(req.TimestampGranularities, val) | ||
| } |
There was a problem hiding this comment.
Reject malformed optional multipart fields instead of silently dropping them.
These branches ignore readFormField failures, ignore strconv.ParseFloat failures, and coerce any non-"true" stream value to false. That turns malformed requests into subtly different valid ones, e.g. temperature=abc or a truncated prompt part no longer yields a 400.
Also applies to: 868-884
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@internal/endpointspec/endpointspec.go` around lines 753 - 784, The multipart
parsing currently ignores readFormField and parse errors, silently dropping
malformed optional fields; update the parsing branches in the handler that call
readFormField (for "language", "prompt", "response_format", "temperature",
"stream", "timestamp_granularities[]") so that if readFormField returns an error
you propagate/return a 400 error instead of ignoring it, and for "temperature"
return a 400 when strconv.ParseFloat(val, 64) fails rather than skipping setting
req.Temperature, for "stream" accept only explicit "true" or "false"
(case-insensitive using strings.EqualFold) and return a 400 for any other value,
and for "timestamp_granularities[]" only append to req.TimestampGranularities on
successful read; keep using the existing readFormField, req.* fields and
strconv/strings helpers to locate and fix the branches accordingly.
| case "stream": | ||
| val, err := readFormField(part) | ||
| if err == nil { | ||
| req.Stream = strings.EqualFold(val, "true") | ||
| } | ||
| case "timestamp_granularities[]": | ||
| val, err := readFormField(part) | ||
| if err == nil { | ||
| req.TimestampGranularities = append(req.TimestampGranularities, val) | ||
| } | ||
| } | ||
| } | ||
|
|
||
| if !hasModel { | ||
| return "", nil, false, nil, fmt.Errorf("%w: missing required field 'model'", internalapi.ErrMalformedRequest) | ||
| } | ||
| if !hasFile { | ||
| return "", nil, false, nil, fmt.Errorf("%w: missing required field 'file'", internalapi.ErrMalformedRequest) | ||
| } | ||
|
|
||
| return req.Model, &req, false, nil, nil |
There was a problem hiding this comment.
Return req.Stream from the transcription parser.
Line 795 always returns false, even though Lines 775-779 already parse the multipart stream field into req.Stream. That means stream=true requests will still be handled as unary by the rest of the pipeline.
Suggested fix
- return req.Model, &req, false, nil, nil
+ return req.Model, &req, req.Stream, nil, nil📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| case "stream": | |
| val, err := readFormField(part) | |
| if err == nil { | |
| req.Stream = strings.EqualFold(val, "true") | |
| } | |
| case "timestamp_granularities[]": | |
| val, err := readFormField(part) | |
| if err == nil { | |
| req.TimestampGranularities = append(req.TimestampGranularities, val) | |
| } | |
| } | |
| } | |
| if !hasModel { | |
| return "", nil, false, nil, fmt.Errorf("%w: missing required field 'model'", internalapi.ErrMalformedRequest) | |
| } | |
| if !hasFile { | |
| return "", nil, false, nil, fmt.Errorf("%w: missing required field 'file'", internalapi.ErrMalformedRequest) | |
| } | |
| return req.Model, &req, false, nil, nil | |
| case "stream": | |
| val, err := readFormField(part) | |
| if err == nil { | |
| req.Stream = strings.EqualFold(val, "true") | |
| } | |
| case "timestamp_granularities[]": | |
| val, err := readFormField(part) | |
| if err == nil { | |
| req.TimestampGranularities = append(req.TimestampGranularities, val) | |
| } | |
| } | |
| } | |
| if !hasModel { | |
| return "", nil, false, nil, fmt.Errorf("%w: missing required field 'model'", internalapi.ErrMalformedRequest) | |
| } | |
| if !hasFile { | |
| return "", nil, false, nil, fmt.Errorf("%w: missing required field 'file'", internalapi.ErrMalformedRequest) | |
| } | |
| return req.Model, &req, req.Stream, nil, nil |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@internal/endpointspec/endpointspec.go` around lines 775 - 795, The function
parsing multipart transcription currently parses the "stream" form field into
req.Stream but the final return always uses a literal false; update the return
so the third return value is req.Stream (instead of false) so callers receive
the parsed streaming flag; locate the return at the end of the parser (the line
returning req.Model, &req, false, nil, nil) and replace the false with
req.Stream.
| "@docusaurus/types": "^3.9.1", | ||
| "@types/glob": "^9.0.0", | ||
| "typescript": "~5.9.3" | ||
| "typescript": "~6.0.2" |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "Current pinned versions:"
jq -r '.devDependencies.typescript, .dependencies["@docusaurus/core"], .devDependencies["@docusaurus/types"], .devDependencies["@docusaurus/tsconfig"]' site/package.json
echo
echo "Check availability of typescript@6.0.2:"
npm view typescript@6.0.2 version
echo
echo "Check Docusaurus peerDependencies:"
npm view `@docusaurus/core`@3.9.2 peerDependencies --json
npm view `@docusaurus/types`@3.9.1 peerDependencies --json
npm view `@docusaurus/tsconfig`@3.9.2 peerDependencies --jsonRepository: PatilHrushikesh/ai-gateway
Length of output: 380
🏁 Script executed:
npm view `@docusaurus/tsconfig`@3.9.2 peerDependencies --jsonRepository: PatilHrushikesh/ai-gateway
Length of output: 52
🌐 Web query:
TypeScript 6.0 Docusaurus 3.9 compatibility issues
💡 Result:
Yes, there is a known compatibility issue between TypeScript 6.0 and Docusaurus 3.9. The @docusaurus/tsconfig package includes "baseUrl": "." which is deprecated in TypeScript 6.0, causing error TS5101 when running tsc --noEmit. This affects any Docusaurus 3.9 project using TS 6.0. Docusaurus docs for 3.9.2 still recommend extending @docusaurus/tsconfig and setting "baseUrl": ".". Workaround: Add "ignoreDeprecations": "6.0" to your tsconfig.json: { "extends": "@docusaurus/tsconfig", "compilerOptions": { "ignoreDeprecations": "6.0" } } New sites created with create-docusaurus in Docusaurus 3.10+ include this by default and use TS 6.0. Full removal of baseUrl is planned for Docusaurus v4 to avoid breaking changes.
Citations:
- 1: @docusaurus/tsconfig:
baseUrlis deprecated in TypeScript 6.0 (TS5101) facebook/docusaurus#11893 - 2: fix(create-docusaurus): fix support for TypeScript 6.0 + fix our CI facebook/docusaurus#11843
- 3: https://docusaurus.io/docs/next/typescript-support
- 4: facebook/docusaurus@4a0273f
- 5: https://www.docusaurus.io/blog/releases/3.10
Verify TypeScript 6 compatibility with Docusaurus 3.9.x before merge.
TypeScript 6.0 deprecated the "baseUrl": "." syntax that @docusaurus/tsconfig@3.9.2 still includes, causing TS5101 errors during npm run typecheck. This issue is documented in facebook/docusaurus#11893.
Workaround: Add "ignoreDeprecations": "6.0" to tsconfig.json:
{
"extends": "@docusaurus/tsconfig",
"compilerOptions": {
"ignoreDeprecations": "6.0"
}
}Alternatively, upgrade to Docusaurus 3.10+ which includes this fix by default. Without one of these steps, docs CI will fail.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@site/package.json` at line 35, The project pins "typescript" to "~6.0.2" in
package.json which triggers TS5101 errors because `@docusaurus/tsconfig`@3.9.2
still uses deprecated "baseUrl": "."; either add "ignoreDeprecations": "6.0" to
your tsconfig.json (the file that extends "@docusaurus/tsconfig") under
compilerOptions, or upgrade Docusaurus to 3.10+ so `@docusaurus/tsconfig` is fixed
— update package.json dependency and run a fresh install and npm run typecheck
to verify the CI issue is resolved.
| Openai-Project: | ||
| - proj_iDVN2qKUWgjCn5caMdHLmSHH | ||
| Openai-Version: |
There was a problem hiding this comment.
Redact provider/project identifiers from committed cassette fixtures.
Openai-Project and X-Request-Id values should not be committed as-is; they are environment-specific identifiers and increase metadata leakage risk.
🔐 Suggested fixture redaction
Openai-Project:
- - proj_iDVN2qKUWgjCn5caMdHLmSHH
+ - "[REDACTED]"
...
X-Request-Id:
- - req_32e2312be05c406c8f0d5ee4f2ce9353
+ - "[REDACTED]"Also applies to: 73-74
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@tests/internal/testopenai/cassettes/audio-transcription-basic.yaml` around
lines 53 - 55, Redact environment-specific identifiers in the cassette YAML by
replacing the Openai-Project and X-Request-Id header values with stable
placeholders (e.g. "<REDACTED_PROJECT>", "<REDACTED_REQUEST_ID>") or remove
those keys entirely so no real project or request IDs are committed; update
every occurrence (including the other instance around lines 73-74) in the
fixture to use the placeholders and commit the sanitized cassette.
| Openai-Processing-Ms: | ||
| - "453" | ||
| Openai-Project: | ||
| - proj_iDVN2qKUWgjCn5caMdHLmSHH |
There was a problem hiding this comment.
Redact the OpenAI project identifier from the cassette.
Openai-Project is not needed for replay and should not be checked into fixtures. This leaks project-scoped metadata into the repo; add it to the response redaction list and regenerate the cassette.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@tests/internal/testopenai/cassettes/audio-translation-basic.yaml` around
lines 47 - 50, The cassette contains a leaked project identifier in the response
header "Openai-Project"; update the test fixtures redaction rules to include
"Openai-Project" (add the header name to the response redaction list used by the
cassette/recorder) and then regenerate the audio-translation-basic cassette so
the recorded YAML no longer contains the proj_* value.
| // For multipart requests, skip body comparison since boundaries differ between runs. | ||
| if isMultipart(r.Header.Get("Content-Type")) || isMultipart(getHeaderValue(i.Headers, "Content-Type")) { | ||
| return true | ||
| } |
There was a problem hiding this comment.
Multipart return true can replay the wrong interaction.
Line 371–374 skips all body/form matching, so multipart requests to the same endpoint become indistinguishable and can match stale/incorrect interactions.
A safer approach is to compare a normalized subset of form fields (e.g., model, language, response_format) while still ignoring file bytes/boundary.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@tests/internal/testopenai/handler.go` around lines 371 - 374, The current
multipart branch in the request-matching logic (the isMultipart(...) check that
immediately returns true) makes multipart requests indistinguishable; instead,
in that branch parse and normalize the multipart form for both the incoming
http.Request and the stored interaction headers/body (use getHeaderValue and the
same parser used elsewhere), then compare a whitelist of non-file form fields
(e.g., "model", "language", "response_format") while explicitly ignoring file
parts and boundary bytes; update the code around the isMultipart check to return
true only if those canonical form fields match, otherwise fall through to a
non-match.
| // For multipart content, skip body comparison since boundaries differ between runs. | ||
| if slices.ContainsFunc(httpReq.Header["Content-Type"], isMultipart) { | ||
| return true | ||
| } |
There was a problem hiding this comment.
Multipart replay still won't match recorded cassettes.
Skipping body comparison here is not enough because the header deep-equal has already happened. With the current capture hook, recorded multipart requests keep a boundary-bearing Content-Type and a rewritten Content-Length for the "[multipart form data omitted]" placeholder, so a live multipart request will miss the existing cassette and keep recording new episodes. Normalize or ignore multipart Content-Type parameters and Content-Length before header comparison.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@tests/internal/testopenai/vcr.go` around lines 109 - 112, The header
deep-equal is still failing for multipart requests because parameters (boundary)
on Content-Type and rewritten Content-Length differ; before the header
comparison in tests/internal/testopenai/vcr.go, detect multipart via isMultipart
on httpReq.Header["Content-Type"] and then normalize or remove those fields:
strip parameters from Content-Type (leave only "multipart/form-data") and remove
or set Content-Length to the placeholder value used in the cassette (the
"[multipart form data omitted]" length) so the header comparison uses normalized
values; update any header-normalization helper (or add one) used prior to the
header deep-equal so recorded cassettes and live multipart requests match.
…oyproxy#2068) Bumps [github.com/moby/spdystream](https://github.com/moby/spdystream) from 0.5.0 to 0.5.1. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/moby/spdystream/releases">github.com/moby/spdystream's releases</a>.</em></p> <blockquote> <h2>v0.5.1</h2> <h2>What's Changed</h2> <ul> <li>spdy: fix duplicate license headers, add LICENSE, PATENTS, and update NOTICE <a href="https://github.com/moby/spdystream/pull/106">moby/spdystream#106</a></li> <li>ci: update actions and test against latest Go versions <a href="https://github.com/moby/spdystream/pull/107">moby/spdystream#107</a></li> <li>use ioutil.Discard for go1.13 compatibility <a href="https://github.com/moby/spdystream/pull/109">moby/spdystream#109</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/moby/spdystream/compare/v0.5.0...v0.5.1">https://github.com/moby/spdystream/compare/v0.5.0...v0.5.1</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/moby/spdystream/commit/c59e5d73daa301bde452ea77545bdf51e32554a2"><code>c59e5d7</code></a> Merge pull request <a href="https://github.com/moby/spdystream/issues/109">#109</a> from thaJeztah/use_ioutil</li> <li><a href="https://github.com/moby/spdystream/commit/2fd0155e904f1f9b834b8460e8fdb8522bb59f84"><code>2fd0155</code></a> use ioutil.Discard for go1.13 compatibility</li> <li><a href="https://github.com/moby/spdystream/commit/ef6121f62c730110bf5ae604a865a8613bfb787f"><code>ef6121f</code></a> Merge commit from fork</li> <li><a href="https://github.com/moby/spdystream/commit/241cec95b8f02919845dc4758f1f5310fc886739"><code>241cec9</code></a> compare with signed Int for 32-bit Arm</li> <li><a href="https://github.com/moby/spdystream/commit/21c38640c8c8f43173b17e5bc6690a5fa25d6935"><code>21c3864</code></a> Add options to customize limits</li> <li><a href="https://github.com/moby/spdystream/commit/acf9b456d06816c5cf23bf3892e13441f947d5fd"><code>acf9b45</code></a> spdy: update godoc for MaxDataLength</li> <li><a href="https://github.com/moby/spdystream/commit/eb6360582bf1343f485ca87b76efc9e72b49d690"><code>eb63605</code></a> spdy: limit header-size and header-count</li> <li><a href="https://github.com/moby/spdystream/commit/2f21da42eaab90f03a82fb03d0de8e91eb1d0fc6"><code>2f21da4</code></a> spdy: fix header block byte accounting</li> <li><a href="https://github.com/moby/spdystream/commit/5976b6612f07a27f2e9a4de875485defb43b5d50"><code>5976b66</code></a> spdy: enforce 24-bit frame length limits</li> <li><a href="https://github.com/moby/spdystream/commit/cf0ec5d0fe4dbb2f3525f733946e0d0ddbfd5b13"><code>cf0ec5d</code></a> Guard against oversized SPDY frames</li> <li>Additional commits viewable in <a href="https://github.com/moby/spdystream/compare/v0.5.0...v0.5.1">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/envoyproxy/ai-gateway/network/alerts). </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
There was a problem hiding this comment.
Actionable comments posted: 3
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
internal/extproc/processor_impl.go (1)
503-545:⚠️ Potential issue | 🟠 MajorDon't derive
response_modelonly from the terminalResponseBodycall.Line 544 emits dynamic metadata only at end-of-stream, but it passes the
responseModelfrom the currentResponseBodyinvocation. Lines 777-780 then omitresponse_modelentirely when that value is empty. That means streamed translators that report the model on an earlier chunk—or backends that never expose a response-side model—will now produce an emptygen_ai.response.modeleven though the effective upstream model is known. Cache the last non-empty response model onupstreamProcessorand fall back toactualModelwhen none was observed.🔧 Suggested fix
type upstreamProcessor[ReqT, RespT, RespChunkT any, EndpointSpecT endpointspec.Spec[ReqT, RespT, RespChunkT]] struct { parent *routerProcessor[ReqT, RespT, RespChunkT, EndpointSpecT] logger *slog.Logger requestHeaders map[string]string responseHeaders map[string]string responseEncoding string compressedBuf []byte // accumulates raw compressed bytes across streaming chunks decompressedOffset int // tracks decompressed bytes already returned translator translator.Translator[ReqT, tracingapi.Span[RespT, RespChunkT]] modelNameOverride internalapi.ModelNameOverride + responseModel internalapi.ResponseModel headerMutator *headermutator.HeaderMutator bodyMutator *bodymutator.BodyMutator backendName string handler filterapi.BackendAuthHandlernewHeaders, newBody, tokenUsage, responseModel, err := u.translator.ResponseBody(u.responseHeaders, decodingResult.reader, body.EndOfStream, u.parent.span) if err != nil { return nil, fmt.Errorf("failed to transform response: %w", err) } + if responseModel != "" { + u.responseModel = responseModel + u.metrics.SetResponseModel(responseModel) + } headerMutation, bodyMutation := mutationsFromTranslationResult(newHeaders, newBody) ... - metadata, err := buildDynamicMetadata(u.parent.config, &u.costs, u.requestHeaders, u.backendName, responseModel) + metadata, err := buildDynamicMetadata(u.parent.config, &u.costs, u.requestHeaders, u.backendName, string(u.responseModel))// Add the actual request model that was used (after any backend overrides were applied). // At this point, the header contains the final model that was sent to the upstream. actualModel := requestHeaders[internalapi.ModelNameHeaderKeyDefault] metadata["model_name_override"] = &structpb.Value{Kind: &structpb.Value_StringValue{StringValue: actualModel}} if backendName != "" { metadata["backend_name"] = &structpb.Value{Kind: &structpb.Value_StringValue{StringValue: backendName}} } - // responseModel is the actual model that served the request. - if responseModel != "" { - metadata["response_model"] = &structpb.Value{Kind: &structpb.Value_StringValue{StringValue: responseModel}} - } + effectiveResponseModel := actualModel + if responseModel != "" { + effectiveResponseModel = responseModel + } + metadata["response_model"] = &structpb.Value{Kind: &structpb.Value_StringValue{StringValue: effectiveResponseModel}}Also applies to: 777-780
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@internal/extproc/processor_impl.go` around lines 503 - 545, The code only uses the immediate responseModel returned by translator.ResponseBody and can miss models reported earlier in a stream; add a cached field on upstreamProcessor (e.g., lastResponseModel string) and whenever translator.ResponseBody returns a non-empty responseModel (in the block handling newHeaders,newBody,tokenUsage,responseModel,err), set u.lastResponseModel = responseModel; then change the metadata-building site (where buildDynamicMetadata is called and in the later 777-780 branch) to derive the model with fallback: use the current responseModel if non-empty, else u.lastResponseModel, and if still empty fall back to u.actualModel before passing into buildDynamicMetadata so gen_ai.response.model is populated from earlier chunks or actualModel when appropriate.
♻️ Duplicate comments (2)
internal/mcpproxy/handlers.go (1)
772-825:⚠️ Potential issue | 🟠 MajorRewrite the downstream headers when the JSON path falls back to SSE.
Line 777 still reads the full body before the fallback decision, so a backend that streams SSE under a JSON content type will not flush anything until EOF. Then Lines 823-825 only swap the reader; they do not fix the headers that were already copied from the upstream JSON response, so clients can still see stale
Content-Type/Content-Lengthvalues while receiving SSE payloads. That breaks streaming and can make the response unparsable on the client side.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@internal/mcpproxy/handlers.go` around lines 772 - 825, The issue: after detecting a fallback from JSON-RPC to SSE (in the block that calls tryDecodeJSONRPCMessage and sets sseReader = bytes.NewReader(body)), the code has already copied upstream headers (Content-Type/Content-Length) and drained resp.Body, so clients see stale headers and streaming is broken; fix by rewriting downstream headers when falling back to SSE: in the fallback branch update w.Header() to set Content-Type to "text/event-stream" (or the SSE MIME the backend uses), remove any Content-Length header (or set Transfer-Encoding: chunked) and copy any other relevant upsteam headers, then call w.WriteHeader(resp.StatusCode) before streaming from sseReader. Make changes in the JSON path fallback where tryDecodeJSONRPCMessage returned false (the block that sets sseReader = bytes.NewReader(body)), and ensure the SSE branch uses the updated headers and sseReader for streaming instead of relying on the original resp.Body.internal/extproc/processor_impl_test.go (1)
1435-1438:⚠️ Potential issue | 🟡 MinorAvoid order-dependent header assertion in this test.
Line 1437 assumes the model header is always at index
0; header mutation order is not guaranteed and this can make the test flaky.Proposed fix
setHeaders := re.RequestBody.GetResponse().GetHeaderMutation().SetHeaders require.GreaterOrEqual(t, len(setHeaders), 1) - require.Equal(t, internalapi.ModelNameHeaderKeyDefault, setHeaders[0].Header.Key) - require.Equal(t, "whisper-1", string(setHeaders[0].Header.RawValue)) + foundModel := false + for _, h := range setHeaders { + if h.Header.Key == internalapi.ModelNameHeaderKeyDefault { + require.Equal(t, "whisper-1", string(h.Header.RawValue)) + foundModel = true + break + } + } + require.True(t, foundModel, "model header mutation should be present")🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@internal/extproc/processor_impl_test.go` around lines 1435 - 1438, The test currently assumes the model header is at index 0 (setHeaders[0]) which is order-dependent; instead, iterate/search the slice returned by re.RequestBody.GetResponse().GetHeaderMutation().SetHeaders (variable setHeaders) for an entry whose Header.Key equals internalapi.ModelNameHeaderKeyDefault and whose Header.RawValue equals "whisper-1", and assert that such an entry exists (fail the test if not found) so the assertion is order-independent.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@go.mod`:
- Line 4: Update all Docker image tags that currently use the unpinned patch tag
"golang:1.26" to the pinned patch version "golang:1.26.2" so they match go.mod;
specifically edit the Dockerfile (the FROM line that currently says golang:1.26)
and every docker-compose YAML entry that references golang:1.26 and replace it
with golang:1.26.2 to ensure the runtime image patch version is consistent with
go.mod.
In `@internal/extproc/processor_impl_test.go`:
- Around line 1441-1460: The test
Test_transcriptionProcessorUpstreamFilter_SetBackend_ContentTypeSetter should be
extended to actually drive the ContentTypeSetter path: create a
multipart/form-data content-type with a boundary and include it in headers, call
p.SetBackend(...) as before, then simulate a request flow that triggers the
setter by setting a ModelNameOverride on the backend/router and invoking
r.ProcessRequestHeaders (or the equivalent method that applies request header
transformations); assert that the request header "content-type" has been mutated
to the expected multipart value and that the original boundary string is
preserved, and keep the existing checks that p.translator and r.upstreamFilter
are non-nil to ensure the setter ran. Ensure you reference and call
transcriptionProcessorUpstreamFilter.SetBackend,
transcriptionProcessorRouterFilter.ProcessRequestHeaders (or the actual method
used to apply header transforms), and any ModelNameOverride field so the test
fails if SetContentType(...) is skipped.
In `@internal/json/json.go`:
- Around line 15-26: The wrapper currently sets sonicjson.Config{CaseSensitive:
true}.Froze(), which enforces strict case-sensitive decoding and breaks
equivalence with encoding/json used by Unmarshal, Marshal, NewEncoder,
NewDecoder; change the config to use the default (remove the explicit
CaseSensitive:true or set CaseSensitive:false) so sonic's fallback
case-insensitive matching is preserved, then keep Unmarshal = config.Unmarshal,
Marshal = config.Marshal, NewEncoder = config.NewEncoder, NewDecoder =
config.NewDecoder and ensure the inline comments remain accurate about
equivalence to encoding/json.
---
Outside diff comments:
In `@internal/extproc/processor_impl.go`:
- Around line 503-545: The code only uses the immediate responseModel returned
by translator.ResponseBody and can miss models reported earlier in a stream; add
a cached field on upstreamProcessor (e.g., lastResponseModel string) and
whenever translator.ResponseBody returns a non-empty responseModel (in the block
handling newHeaders,newBody,tokenUsage,responseModel,err), set
u.lastResponseModel = responseModel; then change the metadata-building site
(where buildDynamicMetadata is called and in the later 777-780 branch) to derive
the model with fallback: use the current responseModel if non-empty, else
u.lastResponseModel, and if still empty fall back to u.actualModel before
passing into buildDynamicMetadata so gen_ai.response.model is populated from
earlier chunks or actualModel when appropriate.
---
Duplicate comments:
In `@internal/extproc/processor_impl_test.go`:
- Around line 1435-1438: The test currently assumes the model header is at index
0 (setHeaders[0]) which is order-dependent; instead, iterate/search the slice
returned by re.RequestBody.GetResponse().GetHeaderMutation().SetHeaders
(variable setHeaders) for an entry whose Header.Key equals
internalapi.ModelNameHeaderKeyDefault and whose Header.RawValue equals
"whisper-1", and assert that such an entry exists (fail the test if not found)
so the assertion is order-independent.
In `@internal/mcpproxy/handlers.go`:
- Around line 772-825: The issue: after detecting a fallback from JSON-RPC to
SSE (in the block that calls tryDecodeJSONRPCMessage and sets sseReader =
bytes.NewReader(body)), the code has already copied upstream headers
(Content-Type/Content-Length) and drained resp.Body, so clients see stale
headers and streaming is broken; fix by rewriting downstream headers when
falling back to SSE: in the fallback branch update w.Header() to set
Content-Type to "text/event-stream" (or the SSE MIME the backend uses), remove
any Content-Length header (or set Transfer-Encoding: chunked) and copy any other
relevant upsteam headers, then call w.WriteHeader(resp.StatusCode) before
streaming from sseReader. Make changes in the JSON path fallback where
tryDecodeJSONRPCMessage returned false (the block that sets sseReader =
bytes.NewReader(body)), and ensure the SSE branch uses the updated headers and
sseReader for streaming instead of relying on the original resp.Body.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: f1f49dbc-c8a6-49a9-830b-d0a63cdd2b0e
⛔ Files ignored due to path filters (1)
go.sumis excluded by!**/*.sum
📒 Files selected for processing (37)
.github/workflows/build_and_test.yaml.github/workflows/codeql.yaml.github/workflows/docker_build_job.yaml.github/workflows/release.yamlexamples/access-log/basic.yamlexamples/aigw/ollama.yamlexamples/mcp/openai-github.yamlgo.modinternal/autoconfig/config.yaml.tmplinternal/autoconfig/testdata/anthropic.yamlinternal/autoconfig/testdata/azure-openai-with-org-and-project.yamlinternal/autoconfig/testdata/azure-openai.yamlinternal/autoconfig/testdata/debug.yamlinternal/autoconfig/testdata/kiwi.yamlinternal/autoconfig/testdata/llamastack.yamlinternal/autoconfig/testdata/openai-github.yamlinternal/autoconfig/testdata/openai-ip.yamlinternal/autoconfig/testdata/openai-otel-ip.yamlinternal/autoconfig/testdata/openai-otel.yamlinternal/autoconfig/testdata/openai-with-org-and-project.yamlinternal/autoconfig/testdata/openai-with-org.yamlinternal/autoconfig/testdata/openai-with-project.yamlinternal/autoconfig/testdata/openai.yamlinternal/autoconfig/testdata/openrouter.yamlinternal/autoconfig/testdata/tars.yamlinternal/extensionserver/extensionserver_test.gointernal/extensionserver/post_translate_modify.gointernal/extensionserver/post_translate_modify_test.gointernal/extproc/processor_impl.gointernal/extproc/processor_impl_test.gointernal/json/json.gointernal/mcpproxy/handlers.gointernal/mcpproxy/handlers_test.gosite/docs/capabilities/index.mdsite/docs/capabilities/observability/accesslogs.mdsite/docs/capabilities/scaling.mdtests/e2e/token_ratelimit_test.go
|
|
||
| // Explicitly specify the Go patch version to be able to purge the CI cache correctly. | ||
| go 1.25.8 | ||
| go 1.26.2 |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "go.mod toolchain declaration:"
rg -n '^go\s+[0-9]+\.[0-9]+(\.[0-9]+)?$' go.mod
echo
echo "CI workflow Go version references:"
if [ -d .github/workflows ]; then
rg -n --iglob '*.yml' --iglob '*.yaml' 'setup-go|go-version|golang:' .github/workflows
else
echo "No .github/workflows directory found."
fi
echo
echo "Docker/base-image Go version references:"
rg -n --iglob 'Dockerfile*' --iglob '*.yml' --iglob '*.yaml' 'golang:[0-9]+\.[0-9]+|GO_VERSION|go[[:space:]]+[0-9]+\.[0-9]+' .Repository: PatilHrushikesh/ai-gateway
Length of output: 3142
🏁 Script executed:
cat -n Dockerfile | head -20Repository: PatilHrushikesh/ai-gateway
Length of output: 977
🏁 Script executed:
rg -A 2 'GOLANG_BASE_IMAGE' DockerfileRepository: PatilHrushikesh/ai-gateway
Length of output: 239
🏁 Script executed:
rg -B 2 -A 2 'golang:1.26' . --iglob 'docker-compose*' --iglob 'Dockerfile*'Repository: PatilHrushikesh/ai-gateway
Length of output: 2291
Pin Go version to 1.26.2 in Docker images.
CI workflows dynamically read 1.26.2 from go.mod via go-version-file, but Docker images reference golang:1.26 (unversioned patch tag), which may resolve to a different 1.26.x patch. Update the Dockerfile default and docker-compose files to use golang:1.26.2 to ensure consistency:
- Dockerfile line 12:
golang:1.26→golang:1.26.2 - docker-compose files:
golang:1.26→golang:1.26.2
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@go.mod` at line 4, Update all Docker image tags that currently use the
unpinned patch tag "golang:1.26" to the pinned patch version "golang:1.26.2" so
they match go.mod; specifically edit the Dockerfile (the FROM line that
currently says golang:1.26) and every docker-compose YAML entry that references
golang:1.26 and replace it with golang:1.26.2 to ensure the runtime image patch
version is consistent with go.mod.
| func Test_transcriptionProcessorUpstreamFilter_SetBackend_ContentTypeSetter(t *testing.T) { | ||
| contentType := "multipart/form-data; boundary=testboundary" | ||
| headers := map[string]string{":path": "/v1/audio/transcriptions", "content-type": contentType} | ||
| mm := &mockMetrics{} | ||
| p := &transcriptionProcessorUpstreamFilter{ | ||
| requestHeaders: headers, | ||
| metrics: mm, | ||
| } | ||
| r := &transcriptionProcessorRouterFilter{ | ||
| requestHeaders: headers, | ||
| } | ||
|
|
||
| err := p.SetBackend(t.Context(), &filterapi.Backend{ | ||
| Name: "transcription-backend", | ||
| Schema: filterapi.VersionedAPISchema{Name: filterapi.APISchemaOpenAI}, | ||
| }, nil, r) | ||
| require.NoError(t, err) | ||
| require.NotNil(t, p.translator) | ||
| require.NotNil(t, r.upstreamFilter) | ||
| } |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
ContentTypeSetter test currently doesn’t verify setter effect.
This test only asserts non-nil translator/upstream filter. A regression where SetContentType(...) is skipped could still pass. Please drive an observable path (e.g., multipart request + ModelNameOverride + ProcessRequestHeaders) and assert multipart mutation succeeds with boundary-sensitive behavior.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@internal/extproc/processor_impl_test.go` around lines 1441 - 1460, The test
Test_transcriptionProcessorUpstreamFilter_SetBackend_ContentTypeSetter should be
extended to actually drive the ContentTypeSetter path: create a
multipart/form-data content-type with a boundary and include it in headers, call
p.SetBackend(...) as before, then simulate a request flow that triggers the
setter by setting a ModelNameOverride on the backend/router and invoking
r.ProcessRequestHeaders (or the equivalent method that applies request header
transformations); assert that the request header "content-type" has been mutated
to the expected multipart value and that the original boundary string is
preserved, and keep the existing checks that p.translator and r.upstreamFilter
are non-nil to ensure the setter ran. Ensure you reference and call
transcriptionProcessorUpstreamFilter.SetBackend,
transcriptionProcessorRouterFilter.ProcessRequestHeaders (or the actual method
used to apply header transforms), and any ModelNameOverride field so the test
fails if SetContentType(...) is skipped.
| config = sonicjson.Config{ | ||
| CaseSensitive: true, | ||
| }.Froze() | ||
|
|
||
| // Unmarshal is equivalent to encoding/json.Unmarshal. | ||
| Unmarshal = sonicjson.ConfigDefault.Unmarshal | ||
| Unmarshal = config.Unmarshal | ||
| // Marshal is equivalent to encoding/json.Marshal. | ||
| Marshal = sonicjson.ConfigDefault.Marshal | ||
| Marshal = config.Marshal | ||
| // NewEncoder is equivalent to encoding/json.NewEncoder. | ||
| NewEncoder = sonicjson.ConfigDefault.NewEncoder | ||
| NewEncoder = config.NewEncoder | ||
| // NewDecoder is equivalent to encoding/json.NewDecoder. | ||
| NewDecoder = sonicjson.ConfigDefault.NewDecoder | ||
| NewDecoder = config.NewDecoder |
There was a problem hiding this comment.
🧩 Analysis chain
🌐 Web query:
In github.com/bytedance/sonic, what exactly does Config.CaseSensitive change during Unmarshal (struct field names and json tags)? Also confirm how encoding/json matches keys by default (exact vs case-insensitive fallback).
💡 Result:
In github.com/bytedance/sonic, Config.CaseSensitive, when set to true, enables decoder.OptionCaseSensitive during Unmarshal operations. This changes key matching for struct fields from case-insensitive (default behavior, matching both struct field names and json tags with case-insensitive fallback) to strictly case-sensitive matching for both struct field names and json tags. By default (CaseSensitive=false), sonic behaves like encoding/json: it matches JSON object keys to struct fields/tags preferring exact case match but falling back to case-insensitive match if no exact match is found. When CaseSensitive=true, only exact case matches are used—no case-insensitive fallback—for both un-tagged struct field names and tagged field names. This feature was added via PR #709 (referenced in issue #690) and merged around Jan 2025, available in recent versions (e.g., v1.12.5+ commits, current main branch as of 2026). encoding/json by default matches keys preferring exact case but accepting case-insensitive fallback, as per official docs: "Unmarshal matches incoming object keys to the keys used by Marshal (either the struct field name or its tag), preferring an exact match but also accepting a case-insensitive match."
Citations:
- 1: [Feature Request] case sensitive unmarshal bytedance/sonic#690
- 2: https://github.com/bytedance/sonic/blob/main/sonic.go
- 3: https://github.com/bytedance/sonic/blob/main/api.go
- 4: https://stackoverflow.com/questions/49006073/json-unmarshal-struct-case-sensitively
- 5: https://github.com/bytedance/sonic/blob/5b4862b0/sonic.go
- 6: https://github.com/bytedance/sonic/blob/5b4862b0/api.go
🏁 Script executed:
#!/bin/bash
# Read-only scan: locate external JSON ingest paths that may be affected by stricter key matching.
rg -n -C2 'Claims\(|WellKnown|well-known|Unmarshal\(|NewDecoder\(' --type=goRepository: PatilHrushikesh/ai-gateway
Length of output: 50383
Revert strict case-sensitive decoding in the shared JSON wrapper.
Setting CaseSensitive: true breaks compatibility with encoding/json. The sonic library with this flag removes case-insensitive fallback matching, but encoding/json (and sonic's default) accept case-insensitive matches when exact matches fail. The inline comments claiming equivalence to encoding/json become inaccurate. This will cause unmarshal failures on third-party payloads with mismatched key casing (OAuth/OIDC metadata, API responses, SSE events, etc.) across all downstream consumers of this wrapper.
Proposed fix
var (
- config = sonicjson.Config{
- CaseSensitive: true,
- }.Froze()
+ config = sonicjson.ConfigDefault.Froze()🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@internal/json/json.go` around lines 15 - 26, The wrapper currently sets
sonicjson.Config{CaseSensitive: true}.Froze(), which enforces strict
case-sensitive decoding and breaks equivalence with encoding/json used by
Unmarshal, Marshal, NewEncoder, NewDecoder; change the config to use the default
(remove the explicit CaseSensitive:true or set CaseSensitive:false) so sonic's
fallback case-insensitive matching is preserved, then keep Unmarshal =
config.Unmarshal, Marshal = config.Marshal, NewEncoder = config.NewEncoder,
NewDecoder = config.NewDecoder and ensure the inline comments remain accurate
about equivalence to encoding/json.
Description
support for /audio/transcription and /audio/translation
Related Issues/PRs (if applicable)
Special notes for reviewers (if applicable)
Summary by CodeRabbit
New Features
Bug Fixes
Documentation
Chores