Skip to content

chore: cherry-pick upstream bug fixes since v1.0.0 - #5

Merged
pokabookinflab merged 60 commits into
mainfrom
feature/upstream-post-v1.0.0-fixes
Jul 28, 2026
Merged

chore: cherry-pick upstream bug fixes since v1.0.0#5
pokabookinflab merged 60 commits into
mainfrom
feature/upstream-post-v1.0.0-fixes

Conversation

@pokabookinflab

@pokabookinflab pokabookinflab commented Jul 28, 2026

Copy link
Copy Markdown

Summary

Cherry-pick 12 upstream bug fixes landed on envoyproxy/ai-gateway:main between v1.0.0 (2026-06-26) and 2026-07-27. Feats, deps bumps, docs, and one large refactor (envoyproxy#1865 ext_proc config split — conflicts with our fork-specific mainlib and needs separate work) are intentionally excluded.

Depends on #4 (v1.0.0 integration).

Included commits (chronological)

Safety / robustness

Controller / namespacing

Anthropic

Gemini

Excluded

  • f91bb5b8 fix: split the ext proc config to avoid k8s size limits (fix: split the ext proc config to avoid k8s size limits envoyproxy/ai-gateway#1865) — conflicts with fork-specific cmd/extproc/mainlib/main.go prefix registrations (cachedContents/region extractors). Needs a dedicated merge session.
  • All feats (/tokenize, stream idle timeout, per-request creds, name field on rules, etc.) and deps bumps — defer to next upstream tag / v1.1 integration.

Verified

  • go build ./... && go vet ./...
  • Full test pass: internal/translator, internal/extproc, internal/extensionserver, internal/controller, internal/controller/{rotators,tokenprovider}.

Test plan

🤖 Generated with Claude Code

Summary by CodeRabbit

  • 새로운 기능

    • Vertex AI 임베딩에서 최신 모델과 멀티모달 메시지 기반 요청을 지원합니다.
    • MCP 프록시의 요청 본문 최대 크기를 설정할 수 있으며, 초과 요청은 413으로 거부됩니다.
    • 교차 네임스페이스 InferencePool 참조와 권한 검증을 지원합니다.
    • Quota Policy 사용 안내와 트래픽 관리 문서가 추가되었습니다.
  • 버그 수정

    • 스트리밍 토큰 사용량, 도구 호출, 빈 응답 및 압축된 빈 본문 처리가 개선되었습니다.
    • 민감한 인증 정보가 로그에 노출되지 않도록 보호됩니다.
  • 보안

    • 보안 취약점 신고 절차를 문서화하고 프로파일링 엔드포인트를 로컬 호스트로 제한했습니다.

hustxiayang and others added 30 commits June 8, 2026 16:02
**Description**
Update codecov/codecov-action from v6.0.0 to v6.0.2 to fix GPG signature
verification failure in CI:
https://github.com/envoyproxy/ai-gateway/actions/runs/27152233348/job/80174344507?pr=2114

Signed-off-by: yxia216 <yxia216@bloomberg.net>
…envoyproxy#2114)

**Description**

### 1. Extend OpenAI embedding API to support multimodal embeddings

Gemini Embedding 2 is a multimodal embedding model, but the OpenAI
embedding API only supports strings or token arrays as input. To support
multimodal inputs (images, audio, video, PDF), we extended the
`/v1/embeddings` endpoint with a `messages` field, following the
https://github.com/vllm-project/vllm/blob/2a16ece2d342c0c154a4949ad317b521f8c04ec4/vllm/entrypoints/pooling/embed/protocol.py#L113


### 2. Gemini Embedding 2 `embedContent` endpoint support

Gemini Embedding 2 models (`gemini-embedding-2-*`) use the
`embedContent` endpoint:
https://cloud.google.com/vertex-ai/generative-ai/docs/embeddings/get-multimodal-embeddings,
unlike older models (`text-embedding-004`, `gemini-embedding-001`) which
use the `predict` endpoint. The translator auto-detects the endpoint
based on model name.

**`EmbeddingInputItem` is only supported with the predict endpoint.**
The predict endpoint supports per-instance `task_type` and `title`:

```json
{
  "instances": [
    {"content": "query text", "task_type": "RETRIEVAL_QUERY"},
    {"content": "doc text", "task_type": "RETRIEVAL_DOCUMENT", "title": "My Doc"}
  ]
}
```

The `embedContent` endpoint does not support per-item task types — it
accepts a single `content` with one global `taskType` via
`embedContentConfig`. Accepting `EmbeddingInputItem` for `embedContent`
would be misleading (users would expect per-item behavior), so we reject
it with a clear error. Users should set `task_type` at the request level
instead.

**`task_type` limitation for `gemini-embedding-2`.** Per the doc:
https://docs.cloud.google.com/vertex-ai/generative-ai/docs/embeddings/get-multimodal-embeddings,
`gemini-embedding-2` does not support the `task_type` field — the task
must be included as a prompt instruction instead (e.g. `"task: search
result | query: how to reset password"`). The API silently ignores
`taskType` in `embedContentConfig`. We still send it if the user
provides it, in case future `embedContent` models support it.

**`embedContentConfig` vs deprecated top-level fields.** The REST API
reference documents `taskType`, `outputDimensionality`, `autoTruncate`
as deprecated top-level fields. The genai SDK v1.54+:
https://github.com/googleapis/go-genai/blob/v1.54.0/models.go#L727 sends
them via `embedContentConfig` instead.

### Batch processing limitation

The Vertex AI REST API does not support batch embedding for
`embedContent` models. Experimentally verified:

1. **`batchEmbedContents`** — 404 on all Vertex AI endpoints. This
endpoint only exists on the Gemini API
(`generativelanguage.googleapis.com`), not Vertex AI
(`aiplatform.googleapis.com`).
2. **`embedContent` with `content` (singular)** — works, returns one
embedding per request.
3. **`embedContent` with `contents` (plural)** — rejected.
4. **`embedContent` with multiple `parts`** — returns one aggregated
embedding, not separate embeddings per part. `parts` are designed for
combining modalities, not for batching.

A possible workaround is fan-out (splitting batch inputs into multiple
`embedContent` calls), but this is out of scope for the gateway. We
expect Vertex AI to add `batchEmbedContents` support in the future.

There should be little impact on performance: the inference engine is a
batch processing engine regardless. Whether it receives a single request
or batch requests, the engine batches internally. The only difference is
whether the requests arrive in one HTTP call or multiple.

---------

Signed-off-by: yxia216 <yxia216@bloomberg.net>
Signed-off-by: hustxiayang <yangxiast@gmail.com>
Co-authored-by: Dan Sun <dsun20@bloomberg.net>
Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
Co-authored-by: Aaron Choo <achoo30@bloomberg.net>
**Description**

Remove the deprecation banner from the 0.7 docs.

**Related Issues/PRs (if applicable)**

Related to: envoyproxy#2177

**Special notes for reviewers (if applicable)**

N/A

Signed-off-by: Ignasi Barrera <nacx@apache.org>
**Description**

Update the compatibility matrix to specify EG v1.8.1+.

Signed-off-by: Aaron Choo <achoo30@bloomberg.net>
…ners (envoyproxy#2194)

**Description**

Azure is strict about `scheme` header to be same as the TLS transport on
which the request is being made. If the listener is an http listener,
envoy forwards a request with `scheme: http` instead of `https`. This
leads to requests getting dropped.
The simple solution is to use `matchUpstream` which is what is being
done in MCP backend listeners but missed in regular AI gateway route
listeners.

**Related Issues/PRs (if applicable)**
Fixes envoyproxy#2095

Signed-off-by: Anurag Aggarwal <kanurag94@gmail.com>
…ackend HTTPRoute (envoyproxy#2134)

**Description**

When an `MCPRoute` has a `backendRef` with `securityPolicy.apiKey`
configured (either via `secretRef` or `inline`), the controller resolves
the secret and embeds the **plaintext API key** directly into the
generated `HTTPRoute` resource. This happens in two places:

1. **Header injection** — the key is written as a literal value in an
`HTTPRouteFilter` of type `RequestHeaderModifier` (e.g., `Authorization:
Bearer <plaintext-token>`).
2. **Query parameter injection** — the key is appended to the URL path
in a `URLRewrite` filter (e.g., `/mcp?api_key=<plaintext-token>`).

fixes envoyproxy#2141

**Possible Solutions**
1. This can be solved for Header injection by using
https://gateway.envoyproxy.io/docs/api/extension_types/#httpcredentialinjectionfilter.
However, APIKey for `QueryParams` will still continue to be stored in
plaintext. **Note: This PR implements this approach.**
2. By contrast, the existing `BackendSecurityPolicy` (used by
`AIGatewayRoute` / `AIServiceBackend`) stores the resolved credential
inside a Kubernetes **Secret** (the filter config secret consumed by
extproc), which benefits from RBAC, encryption at rest, and audit
logging. MCPRoute should adopt a similar approach.
3. Explore if we can add support for QueryParams in
CredentialInjectionFilter in Envoy Gateway.

**Affected code:**
- internal/controller/mcp_route.go`

**Testing**

**Created MCPRoute with credential injection into Authorization
header.**
Credential got created and HTTPRouteFilter with Credential Injection
filter got created. List tools and tool calls work as expected.
Credential and filter got deleted on removing backend and deleting
MCPRoute.

**Created MCPRoute with credential injection into a custom header.**
Credential got created and HTTPRouteFilter with Credential Injection
filter got created. List tools and tool calls work as expected.
Credential and filter got deleted on removing backend and deleting
MCPRoute.

**Created MCPRoute with inline API Key into Authorization header.** 
No change in behaviour.

**Created MCPRoute with API Key injected into query param** 
No change in behaviour.

---------

Signed-off-by: Aishwarya <aishwarya.raimule@nutanix.com>
Signed-off-by: aishwaryaraimule21 <aishwarya.raimule@nutanix.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
…oyproxy#2200)

Bumps the go group with 7 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
|
[github.com/anthropics/anthropic-sdk-go](https://github.com/anthropics/anthropic-sdk-go)
| `1.43.0` | `1.45.0` |
|
[github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2)
| `1.32.17` | `1.32.18` |
|
[github.com/modelcontextprotocol/go-sdk](https://github.com/modelcontextprotocol/go-sdk)
| `1.6.0` | `1.6.1` |
| [github.com/openai/openai-go/v3](https://github.com/openai/openai-go)
| `3.35.0` | `3.37.0` |
| [github.com/tetratelabs/func-e](https://github.com/tetratelabs/func-e)
| `1.5.0` | `1.6.0` |
|
[google.golang.org/api](https://github.com/googleapis/google-api-go-client)
| `0.279.0` | `0.280.0` |
| [google.golang.org/genai](https://github.com/googleapis/go-genai) |
`1.57.0` | `1.58.0` |


Updates `github.com/anthropics/anthropic-sdk-go` from 1.43.0 to 1.45.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/anthropics/anthropic-sdk-go/releases">github.com/anthropics/anthropic-sdk-go's
releases</a>.</em></p>
<blockquote>
<h2>v1.45.0</h2>
<h2>1.45.0 (2026-05-21)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-go/compare/v1.44.1...v1.45.0">v1.44.1...v1.45.0</a></p>
<h3>Features</h3>
<ul>
<li><strong>api:</strong> Add support for thinking-token-count beta for
estimated tokens in thinking block deltas when streaming (<a
href="https://github.com/anthropics/anthropic-sdk-go/commit/dedeb6d263a651d63c95bd360befbd53dd26ec12">dedeb6d</a>)</li>
</ul>
<h2>v1.44.1</h2>
<h2>1.44.1 (2026-05-19)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-go/compare/v1.44.0...v1.44.1">v1.44.0...v1.44.1</a></p>
<h3>Bug Fixes</h3>
<ul>
<li><strong>runner:</strong> skip tool calls SessionToolRunner does not
own (<a
href="https://github.com/anthropics/anthropic-sdk-go/commit/93afc65f2f1b811d760f2e5149e13dd5eb328f79">93afc65</a>)</li>
</ul>
<h2>v1.44.0</h2>
<h2>1.44.0 (2026-05-19)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-go/compare/v1.43.0...v1.44.0">v1.43.0...v1.44.0</a></p>
<h3>Features</h3>
<ul>
<li><strong>client:</strong> Add support for self-hosted sandboxes in
CMA with sandbox helpers (<a
href="https://github.com/anthropics/anthropic-sdk-go/commit/34354c43f329852a88682bb6665a1453754d61be">34354c4</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/anthropics/anthropic-sdk-go/blob/main/CHANGELOG.md">github.com/anthropics/anthropic-sdk-go's
changelog</a>.</em></p>
<blockquote>
<h2>1.45.0 (2026-05-21)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-go/compare/v1.44.1...v1.45.0">v1.44.1...v1.45.0</a></p>
<h3>Features</h3>
<ul>
<li><strong>api:</strong> Add support for thinking-token-count beta for
estimated tokens in thinking block deltas when streaming (<a
href="https://github.com/anthropics/anthropic-sdk-go/commit/dedeb6d263a651d63c95bd360befbd53dd26ec12">dedeb6d</a>)</li>
</ul>
<h2>1.44.1 (2026-05-19)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-go/compare/v1.44.0...v1.44.1">v1.44.0...v1.44.1</a></p>
<h3>Bug Fixes</h3>
<ul>
<li><strong>runner:</strong> skip tool calls SessionToolRunner does not
own (<a
href="https://github.com/anthropics/anthropic-sdk-go/commit/93afc65f2f1b811d760f2e5149e13dd5eb328f79">93afc65</a>)</li>
</ul>
<h2>1.44.0 (2026-05-19)</h2>
<p>Full Changelog: <a
href="https://github.com/anthropics/anthropic-sdk-go/compare/v1.43.0...v1.44.0">v1.43.0...v1.44.0</a></p>
<h3>Features</h3>
<ul>
<li><strong>client:</strong> Add support for self-hosted sandboxes in
CMA with sandbox helpers (<a
href="https://github.com/anthropics/anthropic-sdk-go/commit/34354c43f329852a88682bb6665a1453754d61be">34354c4</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/anthropics/anthropic-sdk-go/commit/88310ccdb19419fb6c8b0fd2e99f1e3d8c74041e"><code>88310cc</code></a>
release: 1.45.0</li>
<li><a
href="https://github.com/anthropics/anthropic-sdk-go/commit/4eb28e321282db071753c97d3223b092db9108d1"><code>4eb28e3</code></a>
feat(api): Add support for thinking-token-count beta for estimated
tokens in ...</li>
<li><a
href="https://github.com/anthropics/anthropic-sdk-go/commit/d138190aeae5568972430f9a6204875aa04097fc"><code>d138190</code></a>
release: 1.44.1</li>
<li><a
href="https://github.com/anthropics/anthropic-sdk-go/commit/d0a73a50e70544b552f202d4e6f67eb45b9fd739"><code>d0a73a5</code></a>
fix(runner): skip tool calls SessionToolRunner does not own</li>
<li><a
href="https://github.com/anthropics/anthropic-sdk-go/commit/288857308b47e48ee7d572506efffb568d514846"><code>2888573</code></a>
release: 1.44.0 (<a
href="https://redirect.github.com/anthropics/anthropic-sdk-go/issues/340">#340</a>)</li>
<li>See full diff in <a
href="https://github.com/anthropics/anthropic-sdk-go/compare/v1.43.0...v1.45.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `github.com/aws/aws-sdk-go-v2/config` from 1.32.17 to 1.32.18
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/db9f4e546dfe2f62a6bc3bf54b9da42ebace6372"><code>db9f4e5</code></a>
Release 2026-05-22</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/34e7ddc9400e830a9ae226a7e3c2161e5ece4f19"><code>34e7ddc</code></a>
Regenerated Clients</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/f9db036cf7b3b8a1ea5eb67c3d296da4b48b6e2b"><code>f9db036</code></a>
Update endpoints model</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/ae5eae1e3ec46433bd99496bfa6936f8f09a2e72"><code>ae5eae1</code></a>
Update API model</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/429dbdd2a35d325aabc5757edfc9ebf09c2ad12e"><code>429dbdd</code></a>
Feat discover endpoint partition validation (<a
href="https://redirect.github.com/aws/aws-sdk-go-v2/issues/3410">#3410</a>)</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/ab4f5b60785064ec6346c922604d94b63d9c7299"><code>ab4f5b6</code></a>
Release 2026-05-21</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/757a09909a97a15e5a481d9839b83f15b8fdc4bc"><code>757a099</code></a>
Regenerated Clients</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/02c8323ee6c99be82dae3a3923616756cb164525"><code>02c8323</code></a>
Update API model</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/f4ac954c5b3567f7918fbaa845bd05a8b211f54e"><code>f4ac954</code></a>
Bump smithy-go version and update imports for evenstream protocoltests
(<a
href="https://redirect.github.com/aws/aws-sdk-go-v2/issues/3420">#3420</a>)</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/6d937001e020def8b587dccbe5d803933ce57bfd"><code>6d93700</code></a>
Add replace for credentials dependency added on go.mod (<a
href="https://redirect.github.com/aws/aws-sdk-go-v2/issues/3419">#3419</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/aws/aws-sdk-go-v2/compare/config/v1.32.17...config/v1.32.18">compare
view</a></li>
</ul>
</details>
<br />

Updates `github.com/modelcontextprotocol/go-sdk` from 1.6.0 to 1.6.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/modelcontextprotocol/go-sdk/releases">github.com/modelcontextprotocol/go-sdk's
releases</a>.</em></p>
<blockquote>
<h2>v1.6.1</h2>
<p>This release adds an MCPGODEBUG flag to opt out of the Content-Type
check on POST requests.</p>
<h2>Behavior Changes</h2>
<p>Prior to v1.6.0 (v1.4.0...v1.5.0), the Content-Type check on POST
requests was gated by the same <code>disablecrossoriginprotection</code>
MCPGODEBUG flag as the cross-origin protection. In v1.6.0, the
cross-origin protection was disabled by default (replaced by the opt-in
<code>enableoriginverification</code> flag), but the Content-Type check
was kept on unconditionally, leaving no way to disable it.
This release restores an escape hatch for both the Streamable HTTP and
SSE transports: setting
<code>MCPGODEBUG=disablecontenttypecheck=1</code> skips the
<code>Content-Type: application/json</code> validation on POST requests.
See <a
href="https://redirect.github.com/modelcontextprotocol/go-sdk/issues/957">#957</a>.</p>
<h2>What's Changed</h2>
<ul>
<li>mcp: add MCPGPDEBUG for opt-in Content-Type check by <a
href="https://github.com/guglielmo-san"><code>@​guglielmo-san</code></a>
in <a
href="https://redirect.github.com/modelcontextprotocol/go-sdk/pull/972">modelcontextprotocol/go-sdk#972</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/modelcontextprotocol/go-sdk/compare/v1.6.0...v1.6.1">https://github.com/modelcontextprotocol/go-sdk/compare/v1.6.0...v1.6.1</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/modelcontextprotocol/go-sdk/commit/d454bbaf06a342aee5336df3370321d9cdec2478"><code>d454bba</code></a>
mcp: add MCPGPDEBUG for opt-in Content-Type check (<a
href="https://redirect.github.com/modelcontextprotocol/go-sdk/issues/972">#972</a>)</li>
<li>See full diff in <a
href="https://github.com/modelcontextprotocol/go-sdk/compare/v1.6.0...v1.6.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `github.com/openai/openai-go/v3` from 3.35.0 to 3.37.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.37.0</h2>
<h2>3.37.0 (2026-05-21)</h2>
<p>Full Changelog: <a
href="https://github.com/openai/openai-go/compare/v3.36.0...v3.37.0">v3.36.0...v3.37.0</a></p>
<h3>Features</h3>
<ul>
<li><strong>api:</strong> api update (<a
href="https://github.com/openai/openai-go/commit/7f7416ea4f6953a2861189dee6391515c3b995a9">7f7416e</a>)</li>
<li><strong>api:</strong> manual updates (<a
href="https://github.com/openai/openai-go/commit/d6465620413df87d971e7e37ae74bef4c70076b1">d646562</a>)</li>
<li><strong>api:</strong> update OpenAPI spec or Stainless config (<a
href="https://github.com/openai/openai-go/commit/b34b78a83433003a6168fffd175cc963ad719495">b34b78a</a>)</li>
<li><strong>client:</strong> optimize json encoder for internal types
(<a
href="https://github.com/openai/openai-go/commit/93adc6e6247e8ce830152c3df0980a3154aa098a">93adc6e</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>go:</strong> format generated admin paths (<a
href="https://github.com/openai/openai-go/commit/1dd8f5ec0adeeefef6a56068b5532ba5e3b3290e">1dd8f5e</a>)</li>
<li><strong>go:</strong> format generated project permission paths (<a
href="https://github.com/openai/openai-go/commit/b751c37ce2d6348545d75451dfc253dd7dda0f4f">b751c37</a>)</li>
</ul>
<h3>Chores</h3>
<ul>
<li><strong>api:</strong> docs updates (<a
href="https://github.com/openai/openai-go/commit/08bc80ea58a19ba0725942c1f3afbcfb043851a0">08bc80e</a>)</li>
</ul>
<h2>v3.36.0</h2>
<h2>3.36.0 (2026-05-13)</h2>
<p>Full Changelog: <a
href="https://github.com/openai/openai-go/compare/v3.35.0...v3.36.0">v3.35.0...v3.36.0</a></p>
<h3>Features</h3>
<ul>
<li><strong>api:</strong> add service_tier parameter to response compact
method (<a
href="https://github.com/openai/openai-go/commit/bacd2c0bcf980e8d424d67446fb4d9c4ea897d24">bacd2c0</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>go:</strong> avoid panic when http.DefaultTransport is
wrapped (<a
href="https://github.com/openai/openai-go/commit/95a0250a9c770674f8deacb3a3fc1175e6808967">95a0250</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.37.0 (2026-05-21)</h2>
<p>Full Changelog: <a
href="https://github.com/openai/openai-go/compare/v3.36.0...v3.37.0">v3.36.0...v3.37.0</a></p>
<h3>Features</h3>
<ul>
<li><strong>api:</strong> api update (<a
href="https://github.com/openai/openai-go/commit/7f7416ea4f6953a2861189dee6391515c3b995a9">7f7416e</a>)</li>
<li><strong>api:</strong> manual updates (<a
href="https://github.com/openai/openai-go/commit/d6465620413df87d971e7e37ae74bef4c70076b1">d646562</a>)</li>
<li><strong>api:</strong> update OpenAPI spec or Stainless config (<a
href="https://github.com/openai/openai-go/commit/b34b78a83433003a6168fffd175cc963ad719495">b34b78a</a>)</li>
<li><strong>client:</strong> optimize json encoder for internal types
(<a
href="https://github.com/openai/openai-go/commit/93adc6e6247e8ce830152c3df0980a3154aa098a">93adc6e</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>go:</strong> format generated admin paths (<a
href="https://github.com/openai/openai-go/commit/1dd8f5ec0adeeefef6a56068b5532ba5e3b3290e">1dd8f5e</a>)</li>
<li><strong>go:</strong> format generated project permission paths (<a
href="https://github.com/openai/openai-go/commit/b751c37ce2d6348545d75451dfc253dd7dda0f4f">b751c37</a>)</li>
</ul>
<h3>Chores</h3>
<ul>
<li><strong>api:</strong> docs updates (<a
href="https://github.com/openai/openai-go/commit/08bc80ea58a19ba0725942c1f3afbcfb043851a0">08bc80e</a>)</li>
</ul>
<h2>3.36.0 (2026-05-13)</h2>
<p>Full Changelog: <a
href="https://github.com/openai/openai-go/compare/v3.35.0...v3.36.0">v3.35.0...v3.36.0</a></p>
<h3>Features</h3>
<ul>
<li><strong>api:</strong> add service_tier parameter to response compact
method (<a
href="https://github.com/openai/openai-go/commit/bacd2c0bcf980e8d424d67446fb4d9c4ea897d24">bacd2c0</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>go:</strong> avoid panic when http.DefaultTransport is
wrapped (<a
href="https://github.com/openai/openai-go/commit/95a0250a9c770674f8deacb3a3fc1175e6808967">95a0250</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/openai/openai-go/commit/8f01a93893a51fc300850dc311aa66c96467f47b"><code>8f01a93</code></a>
Merge pull request <a
href="https://redirect.github.com/openai/openai-go/issues/676">#676</a>
from openai/release-please--branches--main--changes--...</li>
<li><a
href="https://github.com/openai/openai-go/commit/2db0d86948259932a76fe8df25a3a513c132f242"><code>2db0d86</code></a>
release: 3.37.0</li>
<li><a
href="https://github.com/openai/openai-go/commit/ea245d8115372e980d442072c79436f991366348"><code>ea245d8</code></a>
Merge pull request <a
href="https://redirect.github.com/openai/openai-go/issues/991">#991</a>
from stainless-sdks/dev/xuanqi/public-api-docs-enterp...</li>
<li><a
href="https://github.com/openai/openai-go/commit/1dd8f5ec0adeeefef6a56068b5532ba5e3b3290e"><code>1dd8f5e</code></a>
fix(go): format generated admin paths</li>
<li><a
href="https://github.com/openai/openai-go/commit/7f7416ea4f6953a2861189dee6391515c3b995a9"><code>7f7416e</code></a>
feat(api): api update</li>
<li><a
href="https://github.com/openai/openai-go/commit/b751c37ce2d6348545d75451dfc253dd7dda0f4f"><code>b751c37</code></a>
fix(go): format generated project permission paths</li>
<li><a
href="https://github.com/openai/openai-go/commit/08bc80ea58a19ba0725942c1f3afbcfb043851a0"><code>08bc80e</code></a>
chore(api): docs updates</li>
<li><a
href="https://github.com/openai/openai-go/commit/d6465620413df87d971e7e37ae74bef4c70076b1"><code>d646562</code></a>
feat(api): manual updates</li>
<li><a
href="https://github.com/openai/openai-go/commit/b34b78a83433003a6168fffd175cc963ad719495"><code>b34b78a</code></a>
feat(api): update OpenAPI spec or Stainless config</li>
<li><a
href="https://github.com/openai/openai-go/commit/efa3cc0d27ca02c86ecea59f34a7b731fdc1708f"><code>efa3cc0</code></a>
codegen metadata</li>
<li>Additional commits viewable in <a
href="https://github.com/openai/openai-go/compare/v3.35.0...v3.37.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `github.com/tetratelabs/func-e` from 1.5.0 to 1.6.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tetratelabs/func-e/releases">github.com/tetratelabs/func-e's
releases</a>.</em></p>
<blockquote>
<h2>v1.6.0</h2>
<p>func-e 1.6.0 gives you yesterday's envoy main build via the
&quot;dev&quot; version</p>
<p>Before, testing pre-release Envoy with func-e meant compiling it
yourself or using Docker, which only worked on Linux. Now you can
install and run dev builds on all platforms the same way you would any
tagged version.</p>
<pre lang="bash"><code>$ ENVOY_VERSION=dev func-e run --version
downloading
https://archive.tetratelabs.io/envoy/download/dev/envoy-dev-darwin-arm64.tar.xz
starting:
/Users/codefromthecrypt/.local/share/func-e/envoy-versions/dev/bin/envoy
with logs in
/Users/codefromthecrypt/.local/state/func-e/envoy-runs/20260518_170024_807

<p>/Users/codefromthecrypt/.local/share/func-e/envoy-versions/dev/bin/envoy
version:
abbadd905fa486ff1085cf3bbe4f3b73eb6dd8e0/1.39.0-dev/Clean/RELEASE/BoringSSL</p>
<p>$ func-e versions -a<br />
dev 2026-05-18 (a8d396eb)<br />
1.38.0 2026-04-23<br />
1.37.2 2026-04-10<br />
-- snip--<br />
</code></pre></p>
<p>This works because envoy's version manifest was recently updated with
a special &quot;dev&quot; key backed by a <a
href="https://redirect.github.com/tetratelabs/archive-envoy/pull/70">daily
pipeline job</a>, which archives linux from envoy's docker image, and
builds macos from the same SHA.</p>
<h2>Updating the &quot;dev&quot; build with the &quot;dev-latest&quot;
alias.</h2>
<p><code>dev</code> installs on demand like all other versions and stays
put once pulled. The alias <code>dev-latest</code> compares the remote
release date against the local install and re-downloads only when the
build has changed. <code>func-e use dev-latest</code> persists
&quot;dev&quot; in the version file, so it is a one-shot refresh, not a
stored preference.</p>
<h2>Why Use An Envoy &quot;dev&quot; Build?</h2>
<p>Envoy releases are worth the wait, but they land about once a
quarter. The dev build is for the gap between “merged” and “released”:
you can try current Envoy mainline without building Envoy yourself or
relying on a Linux-only Docker workflow.</p>
<p>For example, Envoy 1.39-dev already has new dynamic-module support
for request-aware upstream selection. A dynamic module can parse a
request, write <code>selected_backend</code> or
<code>selected_endpoint</code> into request state, and have the cluster
read it while choosing the upstream host. That removes the need to pass
routing decisions through synthetic headers or route re-selection.</p>
<p>Use dev when you need to test an unreleased feature, validate upgrade
impact early, or give feedback before the next Envoy release is cut. Use
tagged versions for normal production runs.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/tetratelabs/func-e/commit/33bfb64ba4176a8d970a21f9a7516b73c9065266"><code>33bfb64</code></a>
Removes last of windows remnants (<a
href="https://redirect.github.com/tetratelabs/func-e/issues/515">#515</a>)</li>
<li><a
href="https://github.com/tetratelabs/func-e/commit/3d2f9e8b33c4e279ff523f4f73d4abd6d8b2c5b3"><code>3d2f9e8</code></a>
Automates PR to update last known Envoy version (<a
href="https://redirect.github.com/tetratelabs/func-e/issues/514">#514</a>)</li>
<li><a
href="https://github.com/tetratelabs/func-e/commit/d785fc8c942815230d3c9c9058a1c0de74a9bb91"><code>d785fc8</code></a>
Reverts to Tools.mk for go run instead of go tool (<a
href="https://redirect.github.com/tetratelabs/func-e/issues/513">#513</a>)</li>
<li><a
href="https://github.com/tetratelabs/func-e/commit/99644b8672c6ed54fef2a5afe20b05472e27750f"><code>99644b8</code></a>
Removes nfpm env workaround (<a
href="https://redirect.github.com/tetratelabs/func-e/issues/512">#512</a>)</li>
<li><a
href="https://github.com/tetratelabs/func-e/commit/1791ba3ad4bf9999a994230d8a1e7bcdc49143d7"><code>1791ba3</code></a>
Fix install.sh to follow curl-sh norms (<a
href="https://redirect.github.com/tetratelabs/func-e/issues/511">#511</a>)</li>
<li><a
href="https://github.com/tetratelabs/func-e/commit/7f8616455617411cd217fbb78aeb3268814fd1ae"><code>7f86164</code></a>
Fix races and -race by default (<a
href="https://redirect.github.com/tetratelabs/func-e/issues/510">#510</a>)</li>
<li><a
href="https://github.com/tetratelabs/func-e/commit/04fe1e25b51cdff3e025548a63626cde0c996415"><code>04fe1e2</code></a>
Use yesterday's envoy main build via the &quot;dev&quot; version (<a
href="https://redirect.github.com/tetratelabs/func-e/issues/509">#509</a>)</li>
<li><a
href="https://github.com/tetratelabs/func-e/commit/a0c7a071675c5502a481b72bc9b32fea934c8311"><code>a0c7a07</code></a>
Backfills rationale for internal httptest package (<a
href="https://redirect.github.com/tetratelabs/func-e/issues/508">#508</a>)</li>
<li><a
href="https://github.com/tetratelabs/func-e/commit/91e310e948417655a9c2548744b70f3285984555"><code>91e310e</code></a>
Installs go so that release e2e can run (<a
href="https://redirect.github.com/tetratelabs/func-e/issues/507">#507</a>)</li>
<li>See full diff in <a
href="https://github.com/tetratelabs/func-e/compare/v1.5.0...v1.6.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `google.golang.org/api` from 0.279.0 to 0.280.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.280.0</h2>
<h2><a
href="https://github.com/googleapis/google-api-go-client/compare/v0.279.0...v0.280.0">0.280.0</a>
(2026-05-19)</h2>
<h3>Features</h3>
<ul>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3591">#3591</a>)
(<a
href="https://github.com/googleapis/google-api-go-client/commit/55ba2fab69ee14286ad052f57ed90a726b071e86">55ba2fa</a>)</li>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3593">#3593</a>)
(<a
href="https://github.com/googleapis/google-api-go-client/commit/054d4b6054450d2be21f50fad64145a4e0125424">054d4b6</a>)</li>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3594">#3594</a>)
(<a
href="https://github.com/googleapis/google-api-go-client/commit/03829161b8cd77bf11f4a3a5d07a43f6b1904fbe">0382916</a>)</li>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3595">#3595</a>)
(<a
href="https://github.com/googleapis/google-api-go-client/commit/13e1ad2eeb540d19709df87ce9a0cfdb632f1bf3">13e1ad2</a>)</li>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3596">#3596</a>)
(<a
href="https://github.com/googleapis/google-api-go-client/commit/4c77865748dda2086de226e9401531c934cd909f">4c77865</a>)</li>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3598">#3598</a>)
(<a
href="https://github.com/googleapis/google-api-go-client/commit/ae2f33001826f523ecc6d2f141244e55fbac45c0">ae2f330</a>)</li>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3599">#3599</a>)
(<a
href="https://github.com/googleapis/google-api-go-client/commit/f82d2049187ed2ab7ee27831a1a78887c5969ca4">f82d204</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.279.0...v0.280.0">0.280.0</a>
(2026-05-19)</h2>
<h3>Features</h3>
<ul>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3591">#3591</a>)
(<a
href="https://github.com/googleapis/google-api-go-client/commit/55ba2fab69ee14286ad052f57ed90a726b071e86">55ba2fa</a>)</li>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3593">#3593</a>)
(<a
href="https://github.com/googleapis/google-api-go-client/commit/054d4b6054450d2be21f50fad64145a4e0125424">054d4b6</a>)</li>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3594">#3594</a>)
(<a
href="https://github.com/googleapis/google-api-go-client/commit/03829161b8cd77bf11f4a3a5d07a43f6b1904fbe">0382916</a>)</li>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3595">#3595</a>)
(<a
href="https://github.com/googleapis/google-api-go-client/commit/13e1ad2eeb540d19709df87ce9a0cfdb632f1bf3">13e1ad2</a>)</li>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3596">#3596</a>)
(<a
href="https://github.com/googleapis/google-api-go-client/commit/4c77865748dda2086de226e9401531c934cd909f">4c77865</a>)</li>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3598">#3598</a>)
(<a
href="https://github.com/googleapis/google-api-go-client/commit/ae2f33001826f523ecc6d2f141244e55fbac45c0">ae2f330</a>)</li>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3599">#3599</a>)
(<a
href="https://github.com/googleapis/google-api-go-client/commit/f82d2049187ed2ab7ee27831a1a78887c5969ca4">f82d204</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/googleapis/google-api-go-client/commit/3887b09ecbbaf25fba1bf52227ad5ca4f89e9968"><code>3887b09</code></a>
chore(main): release 0.280.0 (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3592">#3592</a>)</li>
<li><a
href="https://github.com/googleapis/google-api-go-client/commit/f82d2049187ed2ab7ee27831a1a78887c5969ca4"><code>f82d204</code></a>
feat(all): auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3599">#3599</a>)</li>
<li><a
href="https://github.com/googleapis/google-api-go-client/commit/13e7314e1377c0dd4e132a681b3130abc5843dbd"><code>13e7314</code></a>
chore(all): update all (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3597">#3597</a>)</li>
<li><a
href="https://github.com/googleapis/google-api-go-client/commit/ae2f33001826f523ecc6d2f141244e55fbac45c0"><code>ae2f330</code></a>
feat(all): auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3598">#3598</a>)</li>
<li><a
href="https://github.com/googleapis/google-api-go-client/commit/4c77865748dda2086de226e9401531c934cd909f"><code>4c77865</code></a>
feat(all): auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3596">#3596</a>)</li>
<li><a
href="https://github.com/googleapis/google-api-go-client/commit/13e1ad2eeb540d19709df87ce9a0cfdb632f1bf3"><code>13e1ad2</code></a>
feat(all): auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3595">#3595</a>)</li>
<li><a
href="https://github.com/googleapis/google-api-go-client/commit/03829161b8cd77bf11f4a3a5d07a43f6b1904fbe"><code>0382916</code></a>
feat(all): auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3594">#3594</a>)</li>
<li><a
href="https://github.com/googleapis/google-api-go-client/commit/054d4b6054450d2be21f50fad64145a4e0125424"><code>054d4b6</code></a>
feat(all): auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3593">#3593</a>)</li>
<li><a
href="https://github.com/googleapis/google-api-go-client/commit/55ba2fab69ee14286ad052f57ed90a726b071e86"><code>55ba2fa</code></a>
feat(all): auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3591">#3591</a>)</li>
<li>See full diff in <a
href="https://github.com/googleapis/google-api-go-client/compare/v0.279.0...v0.280.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `google.golang.org/genai` from 1.57.0 to 1.58.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/googleapis/go-genai/releases">google.golang.org/genai's
releases</a>.</em></p>
<blockquote>
<h2>v1.58.0</h2>
<h2><a
href="https://github.com/googleapis/go-genai/compare/v1.57.0...v1.58.0">1.58.0</a>
(2026-05-21)</h2>
<h3>Features</h3>
<ul>
<li>add <code>enable_prompt_injection_detection</code> for Computer Use
feature for the Gemini API. (<a
href="https://github.com/googleapis/go-genai/commit/19c2566dcfdbfdbc5821ab8ffb71f6155f084dab">19c2566</a>)</li>
<li>add new fields (<a
href="https://github.com/googleapis/go-genai/commit/1608e807c1aa9d80dfc484db6cc37f49ee4e69a1">1608e80</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/googleapis/go-genai/blob/main/CHANGELOG.md">google.golang.org/genai's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/googleapis/go-genai/compare/v1.57.0...v1.58.0">1.58.0</a>
(2026-05-21)</h2>
<h3>Features</h3>
<ul>
<li>add <code>enable_prompt_injection_detection</code> for Computer Use
feature for the Gemini API. (<a
href="https://github.com/googleapis/go-genai/commit/19c2566dcfdbfdbc5821ab8ffb71f6155f084dab">19c2566</a>)</li>
<li>add new fields (<a
href="https://github.com/googleapis/go-genai/commit/1608e807c1aa9d80dfc484db6cc37f49ee4e69a1">1608e80</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/googleapis/go-genai/commit/97ea31f16473973e587f5b18659a5669dffd1f84"><code>97ea31f</code></a>
chore(main): release 1.58.0 (<a
href="https://redirect.github.com/googleapis/go-genai/issues/793">#793</a>)</li>
<li><a
href="https://github.com/googleapis/go-genai/commit/19c2566dcfdbfdbc5821ab8ffb71f6155f084dab"><code>19c2566</code></a>
feat: add <code>enable_prompt_injection_detection</code> for Computer
Use feature for th...</li>
<li><a
href="https://github.com/googleapis/go-genai/commit/1608e807c1aa9d80dfc484db6cc37f49ee4e69a1"><code>1608e80</code></a>
feat: add new fields</li>
<li><a
href="https://github.com/googleapis/go-genai/commit/843a665755f75055e7c4bde1177af703384f7905"><code>843a665</code></a>
chore: update comment in BatchJobOutputInfo to unblock javadoc
generation</li>
<li><a
href="https://github.com/googleapis/go-genai/commit/8b28bf81bd7a3cee47ed0a8b911e0d574f87a7aa"><code>8b28bf8</code></a>
chore: Throw fatals() instead of errors() in the replay_api_client when
the i...</li>
<li>See full diff in <a
href="https://github.com/googleapis/go-genai/compare/v1.57.0...v1.58.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `google.golang.org/genproto/googleapis/rpc` from
0.0.0-20260427160629-7cedc36a6bc4 to 0.0.0-20260511170946-3700d4141b60
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/googleapis/go-genproto/commits">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>
**Description**

When an MCPRoute/AIGW ROute references a non-existent Gateway in its
spec.parentRefs, the controller still marks the route as "Accepted" with
the message "Gateway Route reconciled successfully". The controller logs
"Gateway not found" but does not propagate this as an error, so the
reconciliation appears successful.

Root Cause:

In internal/controller/mcp_route.go, the syncGateway function was a void
function that silently returned on errors — it logged "Gateway not
found" but never returned an error to the caller. Since syncGateways
(which calls syncGateway for each parentRef) always returned nil, the
syncMCPRoute function completed successfully, and Reconcile marked the
status as ConditionTypeAccepted.
- and same goes for ai gateway route controller 

Fix:

Changed syncGateway to return an error. When the referenced Gateway is
not found, it now returns a descriptive error ("gateway
<namespace>/<name> not found"). This error propagates through
syncGateways → syncRoute → Reconcile, which then calls updateRouteStatus
with ConditionTypeNotAccepted and the error message.

During Route deletion (via the finalizer path), the error is still
logged but does not block cleanup — handleFinalizer already handles
onDeletionFn errors non-fatally.

---------

Signed-off-by: Hritik003 <hritik.raj@nutanix.com>
… in Bedrock translator (envoyproxy#2189)

**Description**

In the Anthropic-to-AWS-Bedrock translator, Claude Code with
mid-conversation-system beta sends system prompts as {"role": "system"}
in the messages array. The SDK has no system role constant so these hit
the default error case. This promotes them to the top-level system param
before conversion.

Fixes envoyproxy#2206

Signed-off-by: Linus Schlumberger <linus.schlumberger@siemens.com>
Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
…ror translation (envoyproxy#2161)

**Description**

Anthropic→OpenAI error translation could fail with an internal 500 when
an OpenAI-compatible upstream returned a structured JSON error where
`error.code` was numeric (e.g. `400`) instead of string. This change
makes the error model tolerant to both representations so upstream 4xx
diagnostics can still be translated and surfaced to Anthropic clients.

- **Schema decoding hardening (`internal/apischema/openai/openai.go`)**
  - Added `UnmarshalJSON` for `openai.ErrorType`.
  - `error.code` now accepts:
    - JSON string (`"code":"400"`)
    - JSON number (`"code":400`)
    - `null` / omitted
- Numeric values are normalized to the existing internal `*string`
field.

- **Translator regression coverage
(`internal/translator/anthropic_openai_test.go`)**
- Extended `TestAnthropicToOpenAITranslator_ResponseError` with a JSON
error fixture containing numeric `code`.
- Confirms response still maps to Anthropic error envelope with expected
`type` and `message`.

```json
{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "Bad request",
    "param": null,
    "code": 400
  }
}
```

**Related Issues/PRs (if applicable)**

Fixes envoyproxy#2151

**Special notes for reviewers (if applicable)**

N/A

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
**Description**

Fix the vars for the 0.7 and main releases.

**Related Issues/PRs (if applicable)**

N/A

**Special notes for reviewers (if applicable)**

N/A

Signed-off-by: Ignasi Barrera <nacx@apache.org>
…2199)

**Description**
Anthropic recently exposed the reasoning tokens via
`output_tokens_details`:
https://platform.claude.com/docs/en/api/python/messages/create. Thus we
should also added this usage information for our users.

---------

Signed-off-by: yxia216 <yxia216@bloomberg.net>
Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
…voyproxy#2220)

Bumps the go group with 3 updates in the / directory:
[go.opentelemetry.io/contrib/exporters/autoexport](https://github.com/open-telemetry/opentelemetry-go-contrib),
[go.opentelemetry.io/contrib/propagators/autoprop](https://github.com/open-telemetry/opentelemetry-go-contrib)
and
[google.golang.org/api](https://github.com/googleapis/google-api-go-client).

Updates `go.opentelemetry.io/contrib/exporters/autoexport` from 0.68.0
to 0.69.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/open-telemetry/opentelemetry-go-contrib/releases">go.opentelemetry.io/contrib/exporters/autoexport's
releases</a>.</em></p>
<blockquote>
<h2>v1.44.0/v2.5.1/v0.69.0/v0.37.1/v0.24.0/v0.19.0/v0.16.1/v0.16.0</h2>
<h3>Added</h3>
<ul>
<li>Add <code>error.type</code> attribute to
<code>http.client.request.duration</code> for transport failures in
<code>otelhttp</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8801">#8801</a>)</li>
<li>Add examples for prometheus compatibility document. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8716">#8716</a>)</li>
<li>Add support for <code>cardinality_limits</code> in
<code>PeriodicMetricReader</code> in <code>otelconf</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8885">#8885</a>)</li>
<li>Add <code>Resource</code> method to <code>SDK</code> in
<code>go.opentelemetry.io/contrib/otelconf/x</code> to expose the
resolved SDK resource from declarative configuration. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8913">#8913</a>)</li>
<li>Add <code>go.opentelemetry.io/contrib/detectors/hetzner</code>, a
new resource detector for Hetzner Cloud servers, ported from
<code>github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/hetzner</code>.
Detects <code>cloud.provider</code>, <code>cloud.platform</code>,
<code>cloud.region</code>, <code>cloud.availability_zone</code>,
<code>host.id</code>, and <code>host.name</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8979">#8979</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Set error field as <code>record.SetErr</code> instead of a plain
attribute in
<code>go.opentelemetry.io/contrib/bridges/otellogrus</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8776">#8776</a>)</li>
<li>Set the &quot;error&quot; field (e.g. created via
<code>zap.Error</code>) as <code>record.SetErr</code> instead of a plain
attribute in <code>go.opentelemetry.io/contrib/bridges/otelzap</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8719">#8719</a>)</li>
<li>Set fields implementing <code>error</code> interface from
<code>slog</code> records as <code>record.SetErr</code> instead of plain
attributes in <code>go.opentelemetry.io/contrib/bridges/otelslog</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8774">#8774</a>)</li>
<li>Set emitted errors in
<code>go.opentelemetry.io/contrib/bridges/otellogr</code> as record
errors (<code>Record.SetErr</code>) instead of
<code>exception.message</code> attributes. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8775">#8775</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fix header attributes lost when using sub-spans in
<code>go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8797">#8797</a>)</li>
<li>Validate <code>encoding</code> configuration for OTLP HTTP exporters
in <code>go.opentelemetry.io/contrib/otelconf</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8772">#8772</a>)</li>
<li>Remove the custom body wrapper from the request's body after the
request is processed to allow body type comparisons with the original
type in
<code>go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp</code>
and
<code>go.opentelemetry.io/contrib/instrumentation/github.com/gorilla/mux/otelmux</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/6914">#6914</a>)</li>
<li>Unknown or empty HTTP methods now report &quot;_OTHER&quot; instead
of &quot;GET&quot; across all HTTP instrumentations to align with
OpenTelemetry semantic conventions. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8868">#8868</a>)</li>
<li>The default span name formatter in
<code>go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp</code>
now conforms to the OpenTelemetry HTTP semantic conventions for server
span names. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8871">#8871</a>)
<ul>
<li>The default span name is now <code>{method} {route}</code> (e.g.
<code>GET /foo/{id}</code>) when a route pattern is available, or
<code>{method}</code> (e.g. <code>GET</code>) otherwise.</li>
</ul>
</li>
</ul>
<h3>Removed</h3>
<ul>
<li>Remove the deprecated <code>WithSpanOptions</code> option in
<code>go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8991">#8991</a>)</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>otelconf: validate encoding configuration for OTLP HTTP exporters by
<a href="https://github.com/sonalgaud12"><code>@​sonalgaud12</code></a>
in <a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8772">open-telemetry/opentelemetry-go-contrib#8772</a></li>
<li>fix(deps): update module github.com/aws/aws-sdk-go-v2/service/s3 to
v1.99.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8780">open-telemetry/opentelemetry-go-contrib#8780</a></li>
<li>chore(deps): update prom/prometheus docker tag to v3.11.1 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8779">open-telemetry/opentelemetry-go-contrib#8779</a></li>
<li>otellogrus: Set error field as <code>record.SetErr</code> by <a
href="https://github.com/sonalgaud12"><code>@​sonalgaud12</code></a> in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8778">open-telemetry/opentelemetry-go-contrib#8778</a></li>
<li>chore(deps): update module golang.org/x/sys to v0.43.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8783">open-telemetry/opentelemetry-go-contrib#8783</a></li>
<li>chore(deps): update golang.org/x/telemetry digest to 93c7c8a by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8786">open-telemetry/opentelemetry-go-contrib#8786</a></li>
<li>chore(deps): update module github.com/mattn/go-isatty to v0.0.21 by
<a href="https://github.com/renovate"><code>@​renovate</code></a>[bot]
in <a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8787">open-telemetry/opentelemetry-go-contrib#8787</a></li>
<li>chore(deps): update module github.com/mattn/go-runewidth to v0.0.23
by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8788">open-telemetry/opentelemetry-go-contrib#8788</a></li>
<li>chore(deps): update golang.org/x by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8791">open-telemetry/opentelemetry-go-contrib#8791</a></li>
<li>chore(deps): update actions/github-script action to v9 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8795">open-telemetry/opentelemetry-go-contrib#8795</a></li>
<li>fix(deps): update golang.org/x by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8794">open-telemetry/opentelemetry-go-contrib#8794</a></li>
<li>otelzap: set error field as record.SetErr by <a
href="https://github.com/iblancasa"><code>@​iblancasa</code></a> in <a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8719">open-telemetry/opentelemetry-go-contrib#8719</a></li>
<li>fix(deps): update golang.org/x to 746e56f by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8796">open-telemetry/opentelemetry-go-contrib#8796</a></li>
<li>chore(deps): update module golang.org/x/arch to v0.26.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8798">open-telemetry/opentelemetry-go-contrib#8798</a></li>
<li>Check if otelgrpc metrics are enabled by <a
href="https://github.com/dashpole"><code>@​dashpole</code></a> in <a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8792">open-telemetry/opentelemetry-go-contrib#8792</a></li>
<li>chore(deps): update actions/upload-artifact action to v7.0.1 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8800">open-telemetry/opentelemetry-go-contrib#8800</a></li>
<li>Check instrument enabled in deprecatedruntime by <a
href="https://github.com/dashpole"><code>@​dashpole</code></a> in <a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8793">open-telemetry/opentelemetry-go-contrib#8793</a></li>
<li>chore(deps): update module github.com/ashanbrown/forbidigo/v2 to
v2.3.1 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8804">open-telemetry/opentelemetry-go-contrib#8804</a></li>
<li>chore(deps): update module github.com/ashanbrown/makezero/v2 to
v2.2.1 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8802">open-telemetry/opentelemetry-go-contrib#8802</a></li>
<li>chore(deps): update module github.com/manuelarte/funcorder to v0.6.0
by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8803">open-telemetry/opentelemetry-go-contrib#8803</a></li>
</ul>
<!-- 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-contrib/blob/main/CHANGELOG.md">go.opentelemetry.io/contrib/exporters/autoexport's
changelog</a>.</em></p>
<blockquote>
<h2>[1.44.0/2.5.1/0.69.0/0.37.1/0.24.0/0.19.0/0.16.1/0.16.0] -
2026-05-28</h2>
<h3>Added</h3>
<ul>
<li>Add <code>error.type</code> attribute to
<code>http.client.request.duration</code> for transport failures in
<code>otelhttp</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8801">#8801</a>)</li>
<li>Add examples for prometheus compatibility document. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8716">#8716</a>)</li>
<li>Add support for <code>cardinality_limits</code> in
<code>PeriodicMetricReader</code> in <code>otelconf</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8885">#8885</a>)</li>
<li>Add <code>Resource</code> method to <code>SDK</code> in
<code>go.opentelemetry.io/contrib/otelconf/x</code> to expose the
resolved SDK resource from declarative configuration. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8913">#8913</a>)</li>
<li>Add <code>go.opentelemetry.io/contrib/detectors/hetzner</code>, a
new resource detector for Hetzner Cloud servers, ported from
<code>github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/hetzner</code>.
Detects <code>cloud.provider</code>, <code>cloud.platform</code>,
<code>cloud.region</code>, <code>cloud.availability_zone</code>,
<code>host.id</code>, and <code>host.name</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8979">#8979</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Set error field as <code>record.SetErr</code> instead of a plain
attribute in
<code>go.opentelemetry.io/contrib/bridges/otellogrus</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8776">#8776</a>)</li>
<li>Set the &quot;error&quot; field (e.g. created via
<code>zap.Error</code>) as <code>record.SetErr</code> instead of a plain
attribute in <code>go.opentelemetry.io/contrib/bridges/otelzap</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8719">#8719</a>)</li>
<li>Set fields implementing <code>error</code> interface from
<code>slog</code> records as <code>record.SetErr</code> instead of plain
attributes in <code>go.opentelemetry.io/contrib/bridges/otelslog</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8774">#8774</a>)</li>
<li>Set emitted errors in
<code>go.opentelemetry.io/contrib/bridges/otellogr</code> as record
errors (<code>Record.SetErr</code>) instead of
<code>exception.message</code> attributes. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8775">#8775</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fix header attributes lost when using sub-spans in
<code>go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8797">#8797</a>)</li>
<li>Validate <code>encoding</code> configuration for OTLP HTTP exporters
in <code>go.opentelemetry.io/contrib/otelconf</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8772">#8772</a>)</li>
<li>Remove the custom body wrapper from the request's body after the
request is processed to allow body type comparisons with the original
type in
<code>go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp</code>
and
<code>go.opentelemetry.io/contrib/instrumentation/github.com/gorilla/mux/otelmux</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/6914">#6914</a>)</li>
<li>Unknown or empty HTTP methods now report &quot;_OTHER&quot; instead
of &quot;GET&quot; across all HTTP instrumentations to align with
OpenTelemetry semantic conventions. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8868">#8868</a>)</li>
<li>The default span name formatter in
<code>go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp</code>
now conforms to the OpenTelemetry HTTP semantic conventions for server
span names. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8871">#8871</a>)
<ul>
<li>The default span name is now <code>{method} {route}</code> (e.g.
<code>GET /foo/{id}</code>) when a route pattern is available, or
<code>{method}</code> (e.g. <code>GET</code>) otherwise.</li>
</ul>
</li>
</ul>
<h3>Removed</h3>
<ul>
<li>Remove the deprecated <code>WithSpanOptions</code> option in
<code>go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8991">#8991</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/03b2bcdb54b3dde73c9ff91ae216aec262f6c8f5"><code>03b2bcd</code></a>
Release v1.44.0/v2.5.1/v0.69.0/v0.37.1/v0.24.0/v0.19.0/v0.16.1/v0.16.0
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9033">#9033</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/80c46d4037d5991ce324216a52cf7e8d7f2d81fa"><code>80c46d4</code></a>
chore(deps): update module github.com/alecthomas/chroma/v2 to v2.26.0
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9034">#9034</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/51f292197d33b84a21b3c70ae21cb185a2570d5e"><code>51f2921</code></a>
fix(deps): update module github.com/hetznercloud/hcloud-go/v2 to v2.41.2
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9026">#9026</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/db82162f1b642bb6dca7fa5be48045315bb466d6"><code>db82162</code></a>
fix(deps): update aws-sdk-go-v2 monorepo (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9031">#9031</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/5a3e533d8cd4045128e61a966f6dad58964a78ea"><code>5a3e533</code></a>
fix(deps): update module github.com/aws/smithy-go to v1.26.0 (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9032">#9032</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/c67843c753a924faef17bc4aa63c138aa9472477"><code>c67843c</code></a>
otelhttp: Remove custom wrapper after handling request (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/6914">#6914</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/c0a41352283151ab6655e88120e4ff4f0a917a2e"><code>c0a4135</code></a>
docs(otelhttptrace): add performance guidance for WithoutSubSpans (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8785">#8785</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/a51a86790e1f4df231a70bb5fecc72b95d3c1bf0"><code>a51a867</code></a>
otelconf: implement cardinality_limits support in PeriodicMetricReader
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8885">#8885</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/dead6e50fc0b5b3dc4aea288df207953dae5afe7"><code>dead6e5</code></a>
chore(deps): update module go.yaml.in/yaml/v2 to v2.4.4 (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8994">#8994</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/979ce1857524394d0884fd7c491722c5bcb43d50"><code>979ce18</code></a>
chore(deps): update module github.com/jgautheron/goconst to v1.10.2 (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9030">#9030</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/open-telemetry/opentelemetry-go-contrib/compare/zpages/v0.68.0...zpages/v0.69.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `go.opentelemetry.io/contrib/propagators/autoprop` from 0.68.0
to 0.69.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/open-telemetry/opentelemetry-go-contrib/releases">go.opentelemetry.io/contrib/propagators/autoprop's
releases</a>.</em></p>
<blockquote>
<h2>v1.44.0/v2.5.1/v0.69.0/v0.37.1/v0.24.0/v0.19.0/v0.16.1/v0.16.0</h2>
<h3>Added</h3>
<ul>
<li>Add <code>error.type</code> attribute to
<code>http.client.request.duration</code> for transport failures in
<code>otelhttp</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8801">#8801</a>)</li>
<li>Add examples for prometheus compatibility document. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8716">#8716</a>)</li>
<li>Add support for <code>cardinality_limits</code> in
<code>PeriodicMetricReader</code> in <code>otelconf</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8885">#8885</a>)</li>
<li>Add <code>Resource</code> method to <code>SDK</code> in
<code>go.opentelemetry.io/contrib/otelconf/x</code> to expose the
resolved SDK resource from declarative configuration. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8913">#8913</a>)</li>
<li>Add <code>go.opentelemetry.io/contrib/detectors/hetzner</code>, a
new resource detector for Hetzner Cloud servers, ported from
<code>github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/hetzner</code>.
Detects <code>cloud.provider</code>, <code>cloud.platform</code>,
<code>cloud.region</code>, <code>cloud.availability_zone</code>,
<code>host.id</code>, and <code>host.name</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8979">#8979</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Set error field as <code>record.SetErr</code> instead of a plain
attribute in
<code>go.opentelemetry.io/contrib/bridges/otellogrus</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8776">#8776</a>)</li>
<li>Set the &quot;error&quot; field (e.g. created via
<code>zap.Error</code>) as <code>record.SetErr</code> instead of a plain
attribute in <code>go.opentelemetry.io/contrib/bridges/otelzap</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8719">#8719</a>)</li>
<li>Set fields implementing <code>error</code> interface from
<code>slog</code> records as <code>record.SetErr</code> instead of plain
attributes in <code>go.opentelemetry.io/contrib/bridges/otelslog</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8774">#8774</a>)</li>
<li>Set emitted errors in
<code>go.opentelemetry.io/contrib/bridges/otellogr</code> as record
errors (<code>Record.SetErr</code>) instead of
<code>exception.message</code> attributes. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8775">#8775</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fix header attributes lost when using sub-spans in
<code>go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8797">#8797</a>)</li>
<li>Validate <code>encoding</code> configuration for OTLP HTTP exporters
in <code>go.opentelemetry.io/contrib/otelconf</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8772">#8772</a>)</li>
<li>Remove the custom body wrapper from the request's body after the
request is processed to allow body type comparisons with the original
type in
<code>go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp</code>
and
<code>go.opentelemetry.io/contrib/instrumentation/github.com/gorilla/mux/otelmux</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/6914">#6914</a>)</li>
<li>Unknown or empty HTTP methods now report &quot;_OTHER&quot; instead
of &quot;GET&quot; across all HTTP instrumentations to align with
OpenTelemetry semantic conventions. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8868">#8868</a>)</li>
<li>The default span name formatter in
<code>go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp</code>
now conforms to the OpenTelemetry HTTP semantic conventions for server
span names. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8871">#8871</a>)
<ul>
<li>The default span name is now <code>{method} {route}</code> (e.g.
<code>GET /foo/{id}</code>) when a route pattern is available, or
<code>{method}</code> (e.g. <code>GET</code>) otherwise.</li>
</ul>
</li>
</ul>
<h3>Removed</h3>
<ul>
<li>Remove the deprecated <code>WithSpanOptions</code> option in
<code>go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8991">#8991</a>)</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>otelconf: validate encoding configuration for OTLP HTTP exporters by
<a href="https://github.com/sonalgaud12"><code>@​sonalgaud12</code></a>
in <a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8772">open-telemetry/opentelemetry-go-contrib#8772</a></li>
<li>fix(deps): update module github.com/aws/aws-sdk-go-v2/service/s3 to
v1.99.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8780">open-telemetry/opentelemetry-go-contrib#8780</a></li>
<li>chore(deps): update prom/prometheus docker tag to v3.11.1 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8779">open-telemetry/opentelemetry-go-contrib#8779</a></li>
<li>otellogrus: Set error field as <code>record.SetErr</code> by <a
href="https://github.com/sonalgaud12"><code>@​sonalgaud12</code></a> in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8778">open-telemetry/opentelemetry-go-contrib#8778</a></li>
<li>chore(deps): update module golang.org/x/sys to v0.43.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8783">open-telemetry/opentelemetry-go-contrib#8783</a></li>
<li>chore(deps): update golang.org/x/telemetry digest to 93c7c8a by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8786">open-telemetry/opentelemetry-go-contrib#8786</a></li>
<li>chore(deps): update module github.com/mattn/go-isatty to v0.0.21 by
<a href="https://github.com/renovate"><code>@​renovate</code></a>[bot]
in <a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8787">open-telemetry/opentelemetry-go-contrib#8787</a></li>
<li>chore(deps): update module github.com/mattn/go-runewidth to v0.0.23
by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8788">open-telemetry/opentelemetry-go-contrib#8788</a></li>
<li>chore(deps): update golang.org/x by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8791">open-telemetry/opentelemetry-go-contrib#8791</a></li>
<li>chore(deps): update actions/github-script action to v9 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8795">open-telemetry/opentelemetry-go-contrib#8795</a></li>
<li>fix(deps): update golang.org/x by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8794">open-telemetry/opentelemetry-go-contrib#8794</a></li>
<li>otelzap: set error field as record.SetErr by <a
href="https://github.com/iblancasa"><code>@​iblancasa</code></a> in <a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8719">open-telemetry/opentelemetry-go-contrib#8719</a></li>
<li>fix(deps): update golang.org/x to 746e56f by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8796">open-telemetry/opentelemetry-go-contrib#8796</a></li>
<li>chore(deps): update module golang.org/x/arch to v0.26.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8798">open-telemetry/opentelemetry-go-contrib#8798</a></li>
<li>Check if otelgrpc metrics are enabled by <a
href="https://github.com/dashpole"><code>@​dashpole</code></a> in <a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8792">open-telemetry/opentelemetry-go-contrib#8792</a></li>
<li>chore(deps): update actions/upload-artifact action to v7.0.1 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8800">open-telemetry/opentelemetry-go-contrib#8800</a></li>
<li>Check instrument enabled in deprecatedruntime by <a
href="https://github.com/dashpole"><code>@​dashpole</code></a> in <a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8793">open-telemetry/opentelemetry-go-contrib#8793</a></li>
<li>chore(deps): update module github.com/ashanbrown/forbidigo/v2 to
v2.3.1 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8804">open-telemetry/opentelemetry-go-contrib#8804</a></li>
<li>chore(deps): update module github.com/ashanbrown/makezero/v2 to
v2.2.1 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8802">open-telemetry/opentelemetry-go-contrib#8802</a></li>
<li>chore(deps): update module github.com/manuelarte/funcorder to v0.6.0
by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/pull/8803">open-telemetry/opentelemetry-go-contrib#8803</a></li>
</ul>
<!-- 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-contrib/blob/main/CHANGELOG.md">go.opentelemetry.io/contrib/propagators/autoprop's
changelog</a>.</em></p>
<blockquote>
<h2>[1.44.0/2.5.1/0.69.0/0.37.1/0.24.0/0.19.0/0.16.1/0.16.0] -
2026-05-28</h2>
<h3>Added</h3>
<ul>
<li>Add <code>error.type</code> attribute to
<code>http.client.request.duration</code> for transport failures in
<code>otelhttp</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8801">#8801</a>)</li>
<li>Add examples for prometheus compatibility document. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8716">#8716</a>)</li>
<li>Add support for <code>cardinality_limits</code> in
<code>PeriodicMetricReader</code> in <code>otelconf</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8885">#8885</a>)</li>
<li>Add <code>Resource</code> method to <code>SDK</code> in
<code>go.opentelemetry.io/contrib/otelconf/x</code> to expose the
resolved SDK resource from declarative configuration. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8913">#8913</a>)</li>
<li>Add <code>go.opentelemetry.io/contrib/detectors/hetzner</code>, a
new resource detector for Hetzner Cloud servers, ported from
<code>github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/hetzner</code>.
Detects <code>cloud.provider</code>, <code>cloud.platform</code>,
<code>cloud.region</code>, <code>cloud.availability_zone</code>,
<code>host.id</code>, and <code>host.name</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8979">#8979</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Set error field as <code>record.SetErr</code> instead of a plain
attribute in
<code>go.opentelemetry.io/contrib/bridges/otellogrus</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8776">#8776</a>)</li>
<li>Set the &quot;error&quot; field (e.g. created via
<code>zap.Error</code>) as <code>record.SetErr</code> instead of a plain
attribute in <code>go.opentelemetry.io/contrib/bridges/otelzap</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8719">#8719</a>)</li>
<li>Set fields implementing <code>error</code> interface from
<code>slog</code> records as <code>record.SetErr</code> instead of plain
attributes in <code>go.opentelemetry.io/contrib/bridges/otelslog</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8774">#8774</a>)</li>
<li>Set emitted errors in
<code>go.opentelemetry.io/contrib/bridges/otellogr</code> as record
errors (<code>Record.SetErr</code>) instead of
<code>exception.message</code> attributes. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8775">#8775</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fix header attributes lost when using sub-spans in
<code>go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8797">#8797</a>)</li>
<li>Validate <code>encoding</code> configuration for OTLP HTTP exporters
in <code>go.opentelemetry.io/contrib/otelconf</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8772">#8772</a>)</li>
<li>Remove the custom body wrapper from the request's body after the
request is processed to allow body type comparisons with the original
type in
<code>go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp</code>
and
<code>go.opentelemetry.io/contrib/instrumentation/github.com/gorilla/mux/otelmux</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/6914">#6914</a>)</li>
<li>Unknown or empty HTTP methods now report &quot;_OTHER&quot; instead
of &quot;GET&quot; across all HTTP instrumentations to align with
OpenTelemetry semantic conventions. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8868">#8868</a>)</li>
<li>The default span name formatter in
<code>go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp</code>
now conforms to the OpenTelemetry HTTP semantic conventions for server
span names. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8871">#8871</a>)
<ul>
<li>The default span name is now <code>{method} {route}</code> (e.g.
<code>GET /foo/{id}</code>) when a route pattern is available, or
<code>{method}</code> (e.g. <code>GET</code>) otherwise.</li>
</ul>
</li>
</ul>
<h3>Removed</h3>
<ul>
<li>Remove the deprecated <code>WithSpanOptions</code> option in
<code>go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8991">#8991</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/03b2bcdb54b3dde73c9ff91ae216aec262f6c8f5"><code>03b2bcd</code></a>
Release v1.44.0/v2.5.1/v0.69.0/v0.37.1/v0.24.0/v0.19.0/v0.16.1/v0.16.0
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9033">#9033</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/80c46d4037d5991ce324216a52cf7e8d7f2d81fa"><code>80c46d4</code></a>
chore(deps): update module github.com/alecthomas/chroma/v2 to v2.26.0
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9034">#9034</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/51f292197d33b84a21b3c70ae21cb185a2570d5e"><code>51f2921</code></a>
fix(deps): update module github.com/hetznercloud/hcloud-go/v2 to v2.41.2
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9026">#9026</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/db82162f1b642bb6dca7fa5be48045315bb466d6"><code>db82162</code></a>
fix(deps): update aws-sdk-go-v2 monorepo (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9031">#9031</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/5a3e533d8cd4045128e61a966f6dad58964a78ea"><code>5a3e533</code></a>
fix(deps): update module github.com/aws/smithy-go to v1.26.0 (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9032">#9032</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/c67843c753a924faef17bc4aa63c138aa9472477"><code>c67843c</code></a>
otelhttp: Remove custom wrapper after handling request (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/6914">#6914</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/c0a41352283151ab6655e88120e4ff4f0a917a2e"><code>c0a4135</code></a>
docs(otelhttptrace): add performance guidance for WithoutSubSpans (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8785">#8785</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/a51a86790e1f4df231a70bb5fecc72b95d3c1bf0"><code>a51a867</code></a>
otelconf: implement cardinality_limits support in PeriodicMetricReader
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8885">#8885</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/dead6e50fc0b5b3dc4aea288df207953dae5afe7"><code>dead6e5</code></a>
chore(deps): update module go.yaml.in/yaml/v2 to v2.4.4 (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/8994">#8994</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/979ce1857524394d0884fd7c491722c5bcb43d50"><code>979ce18</code></a>
chore(deps): update module github.com/jgautheron/goconst to v1.10.2 (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9030">#9030</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/open-telemetry/opentelemetry-go-contrib/compare/zpages/v0.68.0...zpages/v0.69.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `go.opentelemetry.io/otel` from 1.43.0 to 1.44.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's
changelog</a>.</em></p>
<blockquote>
<h2>[1.44.0/0.66.0/0.20.0/0.0.17] 2026-05-27</h2>
<h3>Added</h3>
<ul>
<li>Add <code>ByteSlice</code> and <code>ByteSliceValue</code> functions
for new <code>BYTESLICE</code> attribute type in
<code>go.opentelemetry.io/otel/attribute</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/7948">#7948</a>)</li>
<li>Apply attribute value limit to the <code>KindBytes</code> attribute
type in <code>go.opentelemetry.io/otel/sdk/log</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/7990">#7990</a>)</li>
<li>Apply attribute value limit to the <code>BYTESLICE</code> attribute
type in <code>go.opentelemetry.io/otel/sdk/trace</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/7990">#7990</a>)</li>
<li>Support <code>BYTESLICE</code> attributes in
<code>go.opentelemetry.io/otel/trace</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li>
<li>Support <code>BYTESLICE</code> attributes in
<code>go.opentelemetry.io/otel/exporters/otlp/otlptrace</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li>
<li>Support <code>BYTESLICE</code> attributes in
<code>go.opentelemetry.io/otel/exporters/otlp/otlplog</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li>
<li>Support <code>BYTESLICE</code> attributes in
<code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li>
<li>Support <code>BYTESLICE</code> attributes in
<code>go.opentelemetry.io/otel/exporters/zipkin</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li>
<li>Add <code>String</code> method for <code>Value</code> type in
<code>go.opentelemetry.io/otel/attribute</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8142">#8142</a>)</li>
<li>Add <code>Slice</code> and <code>SliceValue</code> functions for new
<code>SLICE</code> attribute type in
<code>go.opentelemetry.io/otel/attribute</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8166">#8166</a>)</li>
<li>Support <code>SLICE</code> attributes in
<code>go.opentelemetry.io/otel/exporters/otlp/otlptrace</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8216">#8216</a>)</li>
<li>Support <code>SLICE</code> attributes in
<code>go.opentelemetry.io/otel/exporters/otlp/otlplog</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8216">#8216</a>)</li>
<li>Support <code>SLICE</code> attributes in
<code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8216">#8216</a>)</li>
<li>Support <code>SLICE</code> attributes in
<code>go.opentelemetry.io/otel/exporters/zipkin</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8216">#8216</a>)</li>
<li>Apply <code>AttributeValueLengthLimit</code> to
<code>attribute.SLICE</code> type attribute values in
<code>go.opentelemetry.io/otel/sdk/trace</code>, recursively truncating
contained string values. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8217">#8217</a>)</li>
<li>Add <code>Error</code> field on <code>Record</code> type in
<code>go.opentelemetry.io/otel/log/logtest</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8148">#8148</a>)</li>
<li>Add <code>WithMaxRequestSize</code> option in
<code>go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li>
<li>Add <code>WithMaxRequestSize</code> option in
<code>go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li>
<li>Add <code>WithMaxRequestSize</code> option in
<code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li>
<li>Add <code>WithMaxRequestSize</code> option in
<code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li>
<li>Add <code>WithMaxRequestSize</code> option in
<code>go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li>
<li>Add <code>WithMaxRequestSize</code> option in
<code>go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li>
<li>Add <code>Settable</code> to
<code>go.opentelemetry.io/otel/metric/x</code> to allow reusing
attribute options. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8178">#8178</a>)</li>
<li>Add experimental support for splitting metric data across multiple
batches in <code>go.opentelemetry.io/otel/sdk/metric</code>.
Set <code>OTEL_GO_X_METRIC_EXPORT_BATCH_SIZE=&lt;max_size&gt;</code> to
enable for all periodic readers.
See <code>go.opentelemetry.io/otel/sdk/metric/internal/x</code> for
feature documentation. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8071">#8071</a>)</li>
<li>Add experimental self-observability metrics in
<code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc</code>.
Enable with <code>OTEL_GO_X_SELF_OBSERVABILITY=true</code> environment
variable.
See
<code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc/internal/x</code>
for feature documentation. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8192">#8192</a>)</li>
<li>Add experimental self-observability metrics in
<code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp</code>.
Enable with <code>OTEL_GO_X_SELF_OBSERVABILITY=true</code> environment
variable.
See
<code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp/internal/x</code>
for feature documentation. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8194">#8194</a>)</li>
<li>Add experimental self-observability metrics in
<code>go.opentelemetry.io/otel/exporters/stdout/stdoutlog</code>.
Enable with <code>OTEL_GO_X_SELF_OBSERVABILITY=true</code> environment
variable.
See <code>go.opentelemetry.io/otel/stdout/stdoutlog/internal/x</code>
for feature documentation. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8263">#8263</a>)</li>
<li>Add <code>WithDefaultAttributes</code> to
<code>go.opentelemetry.io/otel/metric/x</code> to support setting
default attributes on instruments. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8135">#8135</a>)</li>
<li>Add <code>go.opentelemetry.io/otel/semconv/v1.41.0</code> package.
The package contains semantic conventions from the <code>v1.41.0</code>
version of the OpenTelemetry Semantic Conventions.
See the <a
href="https://github.com/open-telemetry/opentelemetry-go/blob/main/semconv/v1.41.0/MIGRATION.md">migration
documentation</a> for information on how to upgrade from
<code>go.opentelemetry.io/otel/semconv/v1.40.0</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8324">#8324</a>)</li>
<li>Add Observable variants of instruments to
<code>go.opentelemetry.io/otel/semconv/v1.41.0</code> package. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8350">#8350</a>)</li>
<li>Generate explicit histogram bucket boundaries from weaver
configuration for HTTP and RPC duration instruments in
<code>go.opentelemetry.io/otel/semconv/v1.41.0</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8002">#8002</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li>⚠️ <strong>Breaking Change:</strong>
<code>go.opentelemetry.io/otel/sdk/metric</code> now applies a default
cardinality limit of 2000 to comply with the Metrics SDK specification
recommendation.
New attribute sets are dropped when the cardinality limit is reached.
The measurement of these sets are aggregated into a special attribute
set containing <code>attribute.Bool(&quot;otel.metric.overflow&quot;,
true)</code>.</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go/commit/b62d92831b2dd142f5a0cc89c828270274196877"><code>b62d928</code></a>
Release 1.44.0 (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8376">#8376</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go/commit/94132a0a729e94c5aa6e9e1ce7640c0f802dcfea"><code>94132a0</code></a>
chore(deps): update golang.org/x/telemetry digest to 5997936 (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8379">#8379</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go/commit/6fdcf82adfebc3becfb5d357957546d6d7258469"><code>6fdcf82</code></a>
feat: add self-observability metrics to otlpmetricgrpc metric exporters
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8192">#8192</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go/commit/761bbfc2f4ae002f4a54f8c57c12b8a58135a741"><code>761bbfc</code></a>
fix(deps): update golang.org/x (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8377">#8377</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go/commit/3a91dc62d3852313bab40ff151bb3e11fae1745e"><code>3a91dc6</code></a>
fix(deps): update googleapis to 3dc84a4 (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8375">#8375</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go/commit/f593185679130f56e14bed3c337fa7f8f60756b1"><code>f593185</code></a>
exporters/otlp: default max request size to 64 MiB (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8365">#8365</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go/commit/f02feacf8652b69c051851cfa2945d2ed5f0d568"><code>f02feac</code></a>
Merge commit from fork</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go/commit/36c2f1bfd1a6a789dc575f8886399093d7600586"><code>36c2f1b</code></a>
semconvkit: add invariant test for histogram-exclusion rule (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8370">#8370</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go/commit/d0b6cbdff5346557923fd05bd3f5f34df002aeee"><code>d0b6cbd</code></a>
sdk/metric: document unit-sensitivity of DefaultAggregationSelector (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8224">#8224</a>)</li>
<li><a
href="https://github.com/open-telemetry/opentelemetry-go/commit/9a68034bd45c6f24c481d9f9c87ebbee0a61482f"><code>9a68034</code></a>
add self observability for stdout exporter (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8263">#8263</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/open-telemetry/opentelemetry-go/compare/v1.43.0...v1.44.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `go.opentelemetry.io/otel/exporters/prometheus` from 0.65.0 to
0.66.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/prometheus's
releases</a>.</em></p>
<blockquote>
<h2>v1.44.0/v0.66.0/v0.20.0/v0.0.17</h2>
<h3>Added</h3>
<ul>
<li>Add <code>ByteSlice</code> and <code>ByteSliceValue</code> functions
for new <code>BYTESLICE</code> attribute type in
<code>go.opentelemetry.io/otel/attribute</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/7948">#7948</a>)</li>
<li>Apply attribute value limit to the <code>KindBytes</code> attribute
type in <code>go.opentelemetry.io/otel/sdk/log</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/7990">#7990</a>)</li>
<li>Apply attribute value limit to the <code>BYTESLICE</code> attribute
type in <code>go.opentelemetry.io/otel/sdk/trace</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/7990">#7990</a>)</li>
<li>Support <code>BYTESLICE</code> attributes in
<code>go.opentelemetry.io/otel/trace</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li>
<li>Support <code>BYTESLICE</code> attributes in
<code>go.opentelemetry.io/otel/exporters/otlp/otlptrace</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li>
<li>Support <code>BYTESLICE</code> attributes in
<code>go.opentelemetry.io/otel/exporters/otlp/otlplog</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li>
<li>Support <code>BYTESLICE</code> attributes in
<code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li>
<li>Support <code>BYTESLICE</code> attributes in
<code>go.opentelemetry.io/otel/exporters/zipkin</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li>
<li>Add <code>String</code> method for <code>Value</code> type in
<code>go.opentelemetry.io/otel/attribute</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8142">#8142</a>)</li>
<li>Add <code>Slice</code> and <code>SliceValue</code> functions for new
<code>SLICE</code> attribute type in
<code>go.opentelemetry.io/otel/attribute</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8166">#8166</a>)</li>
<li>Support <code>SLICE</code> attributes in
<code>go.opentelemetry.io/otel/exporters/otlp/otlptrace</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8216">#8216</a>)</li>
<li>Support <code>SLICE</code> attributes in
<code>go.opentelemetry.io/otel/exporters/otlp/otlplog</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8216">#8216</a>)</li>
<li>Support <code>SLICE</code> attributes in
<code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8216">#8216</a>)</li>
<li>Support <code>SLICE</code> attributes in
<code>go.opentelemetry.io/otel/exporters/zipkin</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8216">#8216</a>)</li>
<li>Apply <code>AttributeValueLengthLimit</code> to
<code>attribute.SLICE</code> type attribute values in
<code>go.opentelemetry.io/otel/sdk/trace</code>, recursively truncating
contained string values. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8217">#8217</a>)</li>
<li>Add <code>Error</code> field on <code>Record</code> type in
<code>go.opentelemetry.io/otel/log/logtest</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8148">#8148</a>)</li>
<li>Add <code>WithMaxRequestSize</code> option in
<code>go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li>
<li>Add <code>WithMaxRequestSize</code> option in
<code>go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li>
<li>Add <code>WithMaxRequestSize</code> option in
<code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li>
<li>Add <code>WithMaxRequestSize</code> option in
<code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li>
<li>Add <code>WithMaxRequestSize</code> option in
<code>go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li>
<li>Add <code>WithMaxRequestSize</code> option in
<code>go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li>
<li>Add <code>Settable</code> to
<code>go.opentelemetry.io/otel/metric/x</code> to allow reusing
attribute options. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8178">#8178</a>)</li>
<li>Add experimental support for splitting metric data across multiple
batches in <code>go.opentelemetry.io/otel/sdk/metric</code>.
Set <code>OTEL_GO_X_METRIC_EXPORT_BATCH_SIZE=&lt;max_size&gt;</code> to
enable for all periodic readers.
See <code>go.opentelemetry.io/otel/sdk/metric/internal/x</code> for
feature documentation. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8071">#8071</a>)</li>
<li>Add experimental self-observability metrics in
<code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc</code>.
Enable with <code>OTEL_GO_X_SELF_OBSERVABILITY=true</code> environment
variable.
See
<code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc/internal/x</code>
for feature documentation. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8192">#8192</a>)</li>
<li>Add experimental self-observability metrics in
<code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp</code>.
Enable with <code>OTEL_GO_X_SELF_OBSERVABILITY=true</code> environment
variable.
See
<code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp/internal/x</code>
for feature documentation. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8194">#8194</a>)</li>
<li>Add experimental self-observability metrics in
<code>go.opentelemetry.io/otel/exporters/stdout/stdoutlog</code>.
Enable with <code>OTEL_GO_X_SELF_OBSERVABILITY=true</code> environment
variable.
See <code>go.opentelemetry.io/otel/stdout/stdoutlog/internal/x</code>
for feature documentation. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8263">#8263</a>)</li>
<li>Add <code>WithDefaultAttributes</code> to
<code>go.opentelemetry.io/otel/metric/x</code> to support setting
default attributes on instruments. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8135">#8135</a>)</li>
<li>Add <code>go.opentelemetry.io/otel/semconv/v1.41.0</code> package.
The package contains semantic conventions from the <code>v1.41.0</code>
version of the OpenTelemetry Semantic Conventions.
See the <a
href="https://github.com/open-telemetry/opentelemetry-go/blob/HEAD/semconv/v1.41.0/MIGRATION.md">migration
documentation</a> for information on how to upgrade from
<code>go.opentelemetry.io/otel/semconv/v1.40.0</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8324">#8324</a>)</li>
<li>Add Observable variants of instruments to
<code>go.opentelemetry.io/otel/semconv/v1.41.0</code> package. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8350">#8350</a>)</li>
<li>Generate explicit histogram bucket boundaries from weaver
configuration for HTTP and RPC duration instruments in
<code>go.opentelemetry.io/otel/semconv/v1.41.0</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8002">#8002</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li>⚠️ <strong>Breaking Change:</strong>
<code>go.opentelemetry.io/otel/sdk/metric</code> now applies a default
cardinality limit of 2000 to comply with the Metrics SDK specification
recommendation.
New attribute sets are dropped when the cardinality limit is reached.
The measurement of these sets are aggregated into a special attribute
set containing <code>attribute.Bool(&quot;otel.metric.overflow&quot;,
true)</code>.
This can break users who relied on the previous unlimited default.</li>
</ul>
<!-- 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/prometheus's
changelog</a>.</em></p>
<blockquote>
<h2>[1.44.0/0.66.0/0.20.0/0.0.17] 2026-05-27</h2>
<h3>Added</h3>
<ul>
<li>Add <code>ByteSlice</code> and <code>ByteSliceValue</code> functions
for new <code>BYTESLICE</code> attribute type in
<code>go.opentelemetry.io/otel/attribute</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/7948">#7948</a>)</li>
<li>Apply attribute value limit to the <code>KindBytes</code> attribute
type in <code>go.opentelemetry.io/otel/sdk/log</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/7990">#7990</a>)</li>
<li>Apply attribute value limit to the <code>BYTESLICE</code> attribute
type in <code>go.opentelemetry.io/otel/sdk/trace</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/7990">#7990</a>)</li>
<li>Support <code>BYTESLICE</code> attributes in
<code>go.opentelemetry.io/otel/trace</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li>
<li>Support <code>BYTESLICE</code> attributes in
<code>go.opentelemetry.io/otel/exporters/otlp/otlptrace</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li>
<li>Support <code>BYTESLICE</code> attributes in
<code>go.opentelemetry.io/otel/exporters/otlp/otlplog</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li>
<li>Support <code>BYTESLICE</code> attributes in
<code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li>
<li>Support <code>BYTESLICE</code> attributes in
<code>go.opentelemetry.io/otel/exporters/zipkin</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8153">#8153</a>)</li>
<li>Add <code>String</code> method for <code>Value</code> type in
<code>go.opentelemetry.io/otel/attribute</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8142">#8142</a>)</li>
<li>Add <code>Slice</code> and <code>SliceValue</code> functions for new
<code>SLICE</code> attribute type in
<code>go.opentelemetry.io/otel/attribute</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8166">#8166</a>)</li>
<li>Support <code>SLICE</code> attributes in
<code>go.opentelemetry.io/otel/exporters/otlp/otlptrace</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8216">#8216</a>)</li>
<li>Support <code>SLICE</code> attributes in
<code>go.opentelemetry.io/otel/exporters/otlp/otlplog</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8216">#8216</a>)</li>
<li>Support <code>SLICE</code> attributes in
<code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8216">#8216</a>)</li>
<li>Support <code>SLICE</code> attributes in
<code>go.opentelemetry.io/otel/exporters/zipkin</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8216">#8216</a>)</li>
<li>Apply <code>AttributeValueLengthLimit</code> to
<code>attribute.SLICE</code> type attribute values in
<code>go.opentelemetry.io/otel/sdk/trace</code>, recursively truncating
contained string values. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8217">#8217</a>)</li>
<li>Add <code>Error</code> field on <code>Record</code> type in
<code>go.opentelemetry.io/otel/log/logtest</code>. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8148">#8148</a>)</li>
<li>Add <code>WithMaxRequestSize</code> option in
<code>go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li>
<li>Add <code>WithMaxRequestSize</code> option in
<code>go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li>
<li>Add <code>WithMaxRequestSize</code> option in
<code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li>
<li>Add <code>WithMaxRequestSize</code> option in
<code>go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li>
<li>Add <code>WithMaxRequestSize</code> option in
<code>go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li>
<li>Add <code>WithMaxRequestSize</code> option in
<code>go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp</code>.
(<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8157">#8157</a>)</li>
<li>Add <code>Settable</code> to
<code>go.opentelemetry.io/otel/metric/x</code> to allow reusing
attribute options. (<a
href="https://redirect.github.com/open-telemetry/opentelemetry-go/issues/8178">#8178</a>)</li>
<li>Add experimental support for splitting metric data across multiple
batches in <code>go.opentelemetry.io/otel/sdk/metric</code>.
Set <code>OTEL_GO_X_METRIC_EXPORT_BATCH_SIZE=&lt;max_size&gt;</code> to
enable for all periodic readers.
See <code>go.opentelemetry.io/otel/s…
… github-actions group (envoyproxy#2221)

Bumps the github-actions group with 1 update:
[docker/setup-qemu-action](https://github.com/docker/setup-qemu-action).

Updates `docker/setup-qemu-action` from 4.0.0 to 4.1.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/docker/setup-qemu-action/releases">docker/setup-qemu-action's
releases</a>.</em></p>
<blockquote>
<h2>v4.1.0</h2>
<ul>
<li>Add <code>reset</code> input to uninstall current emulators by <a
href="https://github.com/crazy-max"><code>@​crazy-max</code></a> in <a
href="https://redirect.github.com/docker/setup-qemu-action/pull/21">docker/setup-qemu-action#21</a></li>
<li>Bump <code>@​docker/actions-toolkit</code> from 0.77.0 to 0.91.0 in
<a
href="https://redirect.github.com/docker/setup-qemu-action/pull/250">docker/setup-qemu-action#250</a>
<a
href="https://redirect.github.com/docker/setup-qemu-action/pull/247">docker/setup-qemu-action#247</a></li>
<li>Bump brace-expansion from 1.1.12 to 1.1.15 in <a
href="https://redirect.github.com/docker/setup-qemu-action/pull/265">docker/setup-qemu-action#265</a></li>
<li>Bump fast-xml-builder from 1.0.0 to 1.2.0 in <a
href="https://redirect.github.com/docker/setup-qemu-action/pull/286">docker/setup-qemu-action#286</a></li>
<li>Bump fast-xml-parser from 5.4.2 to 5.8.0 in <a
href="https://redirect.github.com/docker/setup-qemu-action/pull/255">docker/setup-qemu-action#255</a></li>
<li>Bump flatted from 3.3.3 to 3.4.2 in <a
href="https://redirect.github.com/docker/setup-qemu-action/pull/257">docker/setup-qemu-action#257</a></li>
<li>Bump glob from 10.3.15 to 10.5.0 in <a
href="https://redirect.github.com/docker/setup-qemu-action/pull/254">docker/setup-qemu-action#254</a></li>
<li>Bump handlebars from 4.7.8 to 4.7.9 in <a
href="https://redirect.github.com/docker/setup-qemu-action/pull/262">docker/setup-qemu-action#262</a></li>
<li>Bump lodash from 4.17.23 to 4.18.1 in <a
href="https://redirect.github.com/docker/setup-qemu-action/pull/273">docker/setup-qemu-action#273</a></li>
<li>Bump postcss from 8.5.6 to 8.5.10 in <a
href="https://redirect.github.com/docker/setup-qemu-action/pull/285">docker/setup-qemu-action#285</a></li>
<li>Bump tar from 6.2.1 to 7.5.15 in <a
href="https://redirect.github.com/docker/setup-qemu-action/pull/287">docker/setup-qemu-action#287</a></li>
<li>Bump tmp from 0.2.5 to 0.2.6 in <a
href="https://redirect.github.com/docker/setup-qemu-action/pull/291">docker/setup-qemu-action#291</a></li>
<li>Bump undici from 6.23.0 to 6.26.0 in <a
href="https://redirect.github.com/docker/setup-qemu-action/pull/251">docker/setup-qemu-action#251</a></li>
<li>Bump vite from 7.3.1 to 7.3.2 in <a
href="https://redirect.github.com/docker/setup-qemu-action/pull/271">docker/setup-qemu-action#271</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/docker/setup-qemu-action/compare/v4.0.0...v4.1.0">https://github.com/docker/setup-qemu-action/compare/v4.0.0...v4.1.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/docker/setup-qemu-action/commit/06116385d9baf250c9f4dcb4858b16962ea869c3"><code>0611638</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/setup-qemu-action/issues/21">#21</a>
from crazy-max/uninst</li>
<li><a
href="https://github.com/docker/setup-qemu-action/commit/ce59c818a5ff16552ddf7407ee7cb00bea682925"><code>ce59c81</code></a>
chore: update generated content</li>
<li><a
href="https://github.com/docker/setup-qemu-action/commit/2ddad4401e17fa807e8a3c4bd289ccdd993f0868"><code>2ddad44</code></a>
uninstall current emulators</li>
<li><a
href="https://github.com/docker/setup-qemu-action/commit/8c37cd6f3456e1f3f3026250eac496709e9e7e10"><code>8c37cd6</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/setup-qemu-action/issues/250">#250</a>
from docker/dependabot/npm_and_yarn/docker/actions-to...</li>
<li><a
href="https://github.com/docker/setup-qemu-action/commit/d1a0ff34af591b8e290e46f3fa114ef5bb81cd1c"><code>d1a0ff3</code></a>
chore: update generated content</li>
<li><a
href="https://github.com/docker/setup-qemu-action/commit/0a8f3dc12541cc2c3b19c182a1a2c90a2c8b8d93"><code>0a8f3dc</code></a>
build(deps): bump <code>@​docker/actions-toolkit</code> from 0.79.0 to
0.91.0</li>
<li><a
href="https://github.com/docker/setup-qemu-action/commit/9430f61a7691bd1bfdc4d6ba70e558659d36fa7a"><code>9430f61</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/setup-qemu-action/issues/291">#291</a>
from docker/dependabot/npm_and_yarn/tmp-0.2.6</li>
<li><a
href="https://github.com/docker/setup-qemu-action/commit/978bd7796cb6698377e7af6726b726e5ced642d0"><code>978bd77</code></a>
chore: update generated content</li>
<li><a
href="https://github.com/docker/setup-qemu-action/commit/3479febc62cc0fbcb98c7c7fc0dac778c0d79d6a"><code>3479feb</code></a>
build(deps): bump tmp from 0.2.5 to 0.2.6</li>
<li><a
href="https://github.com/docker/setup-qemu-action/commit/b113c264143c28c2974bed61af25be32d32f4782"><code>b113c26</code></a>
Merge pull request <a
href="https://redirect.github.com/docker/setup-qemu-action/issues/255">#255</a>
from docker/dependabot/npm_and_yarn/fast-xml-parser-5...</li>
<li>Additional commits viewable in <a
href="https://github.com/docker/setup-qemu-action/compare/ce360397dd3f832beb865e1373c09c0e9f86d70a...06116385d9baf250c9f4dcb4858b16962ea869c3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=docker/setup-qemu-action&package-manager=github_actions&previous-version=4.0.0&new-version=4.1.0)](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>
**Description**

Adds stacklok to adopters page

---------

Signed-off-by: Chris Burns <29541485+ChrisJBurns@users.noreply.github.com>
…roxy#2225)

**Description**

The request body we send to GCP Vertex AI (the Gemini generateContent
API) had a few field names in the wrong style. Vertex expects camelCase
names like `generationConfig` and `systemInstruction`, but three of them
were written in snake_case (`generation_config`, `system_instruction`,
`tool_config`). The `safetySettings` field was already camelCase, so the
struct was inconsistent with itself.

This updates those three names to camelCase so they all match the format
Vertex documents and the format the `google.golang.org/genai` library
uses. Vertex does accept the snake_case versions as well, so this isn't
fixing broken behaviour, but it removes the inconsistency and means
we're no longer relying on that leniency.

I also updated the tests that were asserting the old snake_case output.
While I was in there, I replaced some hardcoded content-length values in
the unit test with a check that the content-length header matches the
actual body length. Those fixed numbers would have needed recalculating
every time the body changed by even a byte, and the new check stays
correct on its own.

Testing: the existing unit tests and the data plane tests pass,
including the GCP Vertex AI cases that exercise the request body end to
end.

Signed-off-by: Chris Burns <29541485+ChrisJBurns@users.noreply.github.com>
…m chart (envoyproxy#2226)

**Description**

The controller and inference-pool `ClusterRole`/`ClusterRoleBinding`
names are built with `printf "%s:%s" <base> .Release.Namespace` to keep
them unique per-release (introduced in envoyproxy#1511). When `.Release.Namespace`
is empty, this renders `name: <base>:` — an unquoted trailing colon that
strict YAML parsers reject with `mapping values are not allowed in this
context`. The whole render fails and zero resources are produced.

This doesn't trigger via `helm install` or `helm template` (the CLI
always defaults the namespace), only where a renderer leaves it unset —
e.g. the Helm SDK's `engine.Render` without `ReleaseOptions`, or
Replicated's image-extraction render.

The fix adds two independent layers of defense across the three affected
helpers (`_helpers.tpl`) and their six call sites
(`serviceaccount.yaml`,
`envoy_gateway_cluster_role_for_inference_pool.yaml`):

- Wrap the namespace in `default "default"` so the `printf` argument is
never empty. No behavior change for real installs, where the namespace
is always populated.
- Quote the rendered `name` fields so a trailing colon is always
unambiguous.

Either layer fixes the failure on its own; both are included for
robustness.

**Special notes for reviewers (if applicable)**

Verified with `helm lint` and `helm template` (default and explicit
namespaces) — names render correctly as `<base>:<namespace>` with no
change to existing behavior.

Signed-off-by: Chris Burns <29541485+ChrisJBurns@users.noreply.github.com>
…oyproxy#2191)

**Description**

In the OpenAI-to-AWS-Bedrock message converter, Bedrock Converse rejects
assistant messages with empty content arrays. Some clients send empty
assistant messages. This skips them when they have no content blocks.
Tool-call-only messages are preserved.

Fixes envoyproxy#2208

Signed-off-by: Linus Schlumberger <linus.schlumberger@siemens.com>
Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
…oyproxy#2170)

**Description**

**Scope:** this PR fixes the narrow case where the upstream cluster
ext_proc
filter issued `CONTINUE_AND_REPLACE` even though *nothing in the request
pipeline needed to mutate the body* — no translation, no model override,
no
retry, no backend `HTTPBodyMutation`. In that path, the upstream filter
replayed `u.parent.originalRequestBodyRaw` (snapshotted at the router
phase),
which clobbered any body mutation applied by an earlier ext_proc filter
in the
listener chain. After this PR, that path emits `CONTINUE` and leaves the
body
alone.

The broader question of "preserve an intermediate filter's body mutation
across translation / retries / `HTTPBodyMutation`" is **not** addressed
by
this PR. When `wantBodyReplace == true`, the replacement body is still
derived
from the router-phase snapshot, so any intermediate filter's mutation is
lost
on those branches. That's an architectural property of the
snapshot-at-router-
phase design — the upstream filter has no view of Envoy's current body,
by
design, to avoid re-buffering through ext_proc at the upstream phase.
Fixing
it requires a separate design (either re-buffering at upstream, or
propagating a diff via dynamic metadata) and should be its own PR.

**Root cause of the narrow bug.** The existing safety net in
`applyBodyMutation` looks like it covers the no-config case:

    if bodyMutator == nil {
        return bodyMutation
    }

but it does not fire in practice. `bodymutator.NewBodyMutator(nil, ...)`
returns a non-nil struct even when its `*filterapi.HTTPBodyMutation`
argument
is nil. So the early-return is dead code; the function falls through,
calls
`Mutate(originalRequestBodyRaw)` on a no-config mutator (which returns
its
input unchanged), wraps that in a `BodyMutation`, and the upstream
filter
sends `CONTINUE_AND_REPLACE` with the original body — even though
nothing
asked for a body replacement.

**Fix:**

* Add `BodyMutator.HasMutations()` predicate. `NewBodyMutator`'s
contract is
unchanged (it still returns non-nil); callers can ask whether the
mutator
  actually has anything to do.
* In `upstreamProcessor.ProcessRequestHeaders`, compute

mutatorHasMutations := u.bodyMutator != nil &&
u.bodyMutator.HasMutations()
wantBodyReplace := bodyMutation != nil || forceBodyMutation ||
mutatorHasMutations

before calling `applyBodyMutation`. When false, skip the body-mutation
work
and emit `CONTINUE` instead of `CONTINUE_AND_REPLACE`, preserving
translator
header mutations (e.g. path rewrite), header-mutator output, and
auth-handler
header additions. Skip the content-length dynamic-metadata restamp on
the
  `CONTINUE` branch since the body length did not change.

All existing `CONTINUE_AND_REPLACE` callers stay on the existing path
(these
are the branches where this PR explicitly does not change behavior,
including
the loss-of-earlier-mutation property documented above):

* Translator emits a body (AWS Bedrock/SigV4, OpenAI to Anthropic,
OpenAI to
  Vertex, etc.) — `bodyMutation != nil`.
* Backend `HTTPBodyMutation` configured — `HasMutations() == true`.
* Retry — `forceBodyMutation == true` via `u.onRetry()`.
* Streaming with `IncludeUsage=false` — `forceBodyMutation == true`.
* Model override — translator emits `newBody` via
`sjson.SetBytesOptions`, so
  `bodyMutation != nil`.

**Tests:**

* Added
`Test_chatCompletionProcessorUpstreamFilter_ProcessRequestHeaders_BodyReplaceContract`
  with two subtests:
  * `no translator body, no mutator, no force -> CONTINUE` exercises the
previously untested path. Asserts `Status == CONTINUE`, no
`BodyMutation`,
    preserved translator and auth-handler header mutations, and
    `DynamicMetadata == nil` (no content-length restamp).
  * `translator body present -> CONTINUE_AND_REPLACE` pins the existing
    behavior so a future refactor cannot quietly flip the contract back.

The coverage gap that let this ship: every existing `t.Run("ok", ...)`
subtest
under `Test_chatCompletionProcessorUpstreamFilter_ProcessRequestHeaders`
set
`retBodyMutation` on the mock translator, so the "translator returns nil
body"
path was never exercised.

**Related Issues/PRs (if applicable)**

None.

**Special notes for reviewers (if applicable)**

* The fix is request-side only. Response-side code is untouched.
* `NewBodyMutator`'s contract is intentionally not changed (it still
returns
non-nil even when given a nil `*filterapi.HTTPBodyMutation`). A
predicate is
added instead, to keep the blast radius local to
`ProcessRequestHeaders`. If
reviewers prefer changing the constructor to return nil in the no-config
  case, that is a larger refactor and a separate PR.
* The bug is in the generic `upstreamProcessor[...]`, so the fix applies
to
every endpoint spec (chat completions, messages, embeddings,
completions,
GCP, AWS Bedrock, etc.). The new tests exercise one endpoint spec for
the
same reason the existing `ProcessRequestHeaders` table-test does —
locking
  the generic method's contract.

Signed-off-by: Chris Burns <29541485+ChrisJBurns@users.noreply.github.com>
Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
**Description**

**Problem**

If a buffer filter (`envoy.filters.http.buffer`) is added to the chain,
for example via an EnvoyPatchPolicy to raise the request buffer limit,
the AI Gateway extproc could be placed ahead of it. The AI Gateway
extproc runs with `RequestBodyMode: BUFFERED`, so when it runs before
the buffer filter it buffers the body against Envoy Gateway's default 32
KiB downstream per-connection limit and returns `413 Payload Too Large`
for larger bodies before the buffer filter's higher limit applies.

The buffer filter raises the stream's buffer limit to
`max_request_bytes`, but only for filters that decode after it. This was
hit in practice with large request bodies such as Gemini CLI tool
definitions.

**Solution**

When a buffer filter sits at or after the computed ext_proc insertion
point, insert the AI Gateway extproc immediately after the last buffer
filter. Envoy Gateway already orders the buffer filter before ext_proc,
so this honors that order. Behavior is unchanged when no buffer filter
is present.

This works because EnvoyPatchPolicy patches are applied before the
extension hook runs and Envoy Gateway does not re-sort filters
afterward, so the buffer filter is visible to this code.

The extension server only moves its own filter, not the user's buffer
filter, so this fixes the 413 for AI Gateway's extproc specifically and
not for other co-resident BUFFERED ext_procs.

**Testing**

Added table tests for three cases: ext_proc before buffer (inserted
after buffer), buffer before ext_proc (inserted after buffer), and no
buffer filter (unchanged).

Signed-off-by: Chris Burns <29541485+ChrisJBurns@users.noreply.github.com>
Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
**Description**

This updates the homepage info

Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com>
Signed-off-by: Ignasi Barrera <nacx@apache.org>
**Description**

Limit by default the size of MCP request payloads.

**Related Issues/PRs (if applicable)**

N/A

**Special notes for reviewers (if applicable)**

N/A

Signed-off-by: Ignasi Barrera <nacx@apache.org>
**Description**

Bind pprof to localhost so it is only accessible by default from the
local pod or via kubectl port-forward. Since it is for debugging
purposes, it does not need to listen on `0.0.0.0`.

**Related Issues/PRs (if applicable)**

N/A

**Special notes for reviewers (if applicable)**

N/A

Signed-off-by: Ignasi Barrera <ignasi@tetrate.io>
envoyproxy#2239)

**Description**

`ExtractTokenUsageFromExplicitCaching`  is called in both start message
and the delta message, as a result. The usage report is not correct.

Fix: remove the accumulation in the message delta; also the previous
tests can pass because the test cases did not mock the real cases,
update all related tests cases as well.

---------

Signed-off-by: yxia216 <yxia216@bloomberg.net>
Signed-off-by: Aaron Choo <achoo30@bloomberg.net>
Signed-off-by: Anurag Aggarwal <kanurag94@gmail.com>
Signed-off-by: Aishwarya <aishwarya.raimule@nutanix.com>
Signed-off-by: aishwaryaraimule21 <aishwarya.raimule@nutanix.com>
Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Hritik003 <hritik.raj@nutanix.com>
Signed-off-by: Linus Schlumberger <linus.schlumberger@siemens.com>
Signed-off-by: Ignasi Barrera <nacx@apache.org>
Signed-off-by: Chris Burns <29541485+ChrisJBurns@users.noreply.github.com>
Signed-off-by: Takeshi Yoneda <t.y.mathetake@gmail.com>
Signed-off-by: hustxiayang <yxia216@bloomberg.net>
Signed-off-by: hustxiayang <yangxiast@gmail.com>
Co-authored-by: Aaron Choo <achoo30@bloomberg.net>
Co-authored-by: Anurag Aggarwal <kanurag94@gmail.com>
Co-authored-by: aishwaryaraimule21 <aishwarya.raimule@nutanix.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
Co-authored-by: Hritik Raj <hritik.raj@nutanix.com>
Co-authored-by: Linus Schlumberger <linus.schlumberger@siemens.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Chris Burns <29541485+ChrisJBurns@users.noreply.github.com>
Co-authored-by: Takeshi Yoneda <t.y.mathetake@gmail.com>
Co-authored-by: Ignasi Barrera <nacx@apache.org>
**Description**
ServiceQuota currently needs to be implemented. The extension server
does not inject the descriptor set but the rate limit config is properly
configured. Adding it as a TODO/follow up.

Signed-off-by: achoo30 <achoo30@bloomberg.net>
**Description**

The failover logic depends on an Envoyproxy commit that has not been
officially released. Marking that feature as a todo and will enable it
once the changes are stable.

Signed-off-by: achoo30 <achoo30@bloomberg.net>
**Description**

This commit fixes my affiliation

Signed-off-by: Takeshi Yoneda <tyoneda@netflix.com>
dependabot Bot and others added 25 commits June 22, 2026 18:27
…oyproxy#2256)

Bumps the go group with 8 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [github.com/aws/aws-sdk-go-v2](https://github.com/aws/aws-sdk-go-v2) |
`1.41.7` | `1.41.11` |
|
[github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream](https://github.com/aws/aws-sdk-go-v2)
| `1.7.10` | `1.7.12` |
|
[github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2)
| `1.32.18` | `1.32.22` |
| [github.com/bytedance/sonic](https://github.com/bytedance/sonic) |
`1.15.1` | `1.15.2` |
| [github.com/openai/openai-go/v3](https://github.com/openai/openai-go)
| `3.37.0` | `3.39.0` |
| [github.com/prometheus/common](https://github.com/prometheus/common) |
`0.67.5` | `0.68.1` |
|
[google.golang.org/api](https://github.com/googleapis/google-api-go-client)
| `0.282.0` | `0.283.0` |
| [google.golang.org/genai](https://github.com/googleapis/go-genai) |
`1.58.0` | `1.59.0` |


Updates `github.com/aws/aws-sdk-go-v2` from 1.41.7 to 1.41.11
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/fa369bd7bb9576e85ac094a43a15e8372a3d0129"><code>fa369bd</code></a>
Release 2026-06-03</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/960ee4dc8380a46ded94f3976e073242d42bf8ed"><code>960ee4d</code></a>
Regenerated Clients</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/4b6df8b301a6c965903012dda08e9f38fd163f1c"><code>4b6df8b</code></a>
Update endpoints model</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/30b15dd22cc690c7d647c32f415111437cfbed2a"><code>30b15dd</code></a>
Update API model</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/e8c72af3150fa9c8898c916b2e213a5d3d7d64ed"><code>e8c72af</code></a>
enable schema-serde (<a
href="https://redirect.github.com/aws/aws-sdk-go-v2/issues/3421">#3421</a>)</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/b4d02c534cf7f5c782e10bc3f66e40c081a7bb3a"><code>b4d02c5</code></a>
Release 2026-06-02</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/48e375b484e0ae917f61904db440ef17382093d1"><code>48e375b</code></a>
Regenerated Clients</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/b8a4fc132e65d8310e2de67e0600eec53e2f4b26"><code>b8a4fc1</code></a>
Update API model</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/e8627b4cc01977004c41ff0f42670a44d500982d"><code>e8627b4</code></a>
Merge pull request <a
href="https://redirect.github.com/aws/aws-sdk-go-v2/issues/3430">#3430</a>
from aws/fix-remove-ioutil</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/4e258a368c5b421d28bae4a18e718b1b4c7dd16a"><code>4e258a3</code></a>
chore: update changelog description per review</li>
<li>Additional commits viewable in <a
href="https://github.com/aws/aws-sdk-go-v2/compare/v1.41.7...v1.41.11">compare
view</a></li>
</ul>
</details>
<br />

Updates `github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream` from
1.7.10 to 1.7.12
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/93c3f1871b862d743e0bd2e2e7180246df3a9212"><code>93c3f18</code></a>
Release 2022-12-02</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/7254028f8bc89095326d9e3657fdbc98b98cca94"><code>7254028</code></a>
Regenerated Clients</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/f43ad83db1b3da1c2ea37857524148c91189cb4c"><code>f43ad83</code></a>
Update SDK's smithy-go dependency to v1.13.5</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/77d257ee120e67d45a5de6f0d6478f313a21b92a"><code>77d257e</code></a>
Update API model</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/779e29ff5a4bcebe1ab7088ab12c4c95ce06f8aa"><code>779e29f</code></a>
Release 2022-12-01</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/f64d7d2b0a0033996b32ba9e1b18e5a923452b84"><code>f64d7d2</code></a>
Regenerated Clients</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/9bc59f75ee4683ca886c3d701b49bb81db2efd4d"><code>9bc59f7</code></a>
Update endpoints model</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/d9c18aa2bdd4c237a4919452f58e29c20ba484cc"><code>d9c18aa</code></a>
Update API model</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/0259b169b753daf77ad332c680a9ad1e3f56753d"><code>0259b16</code></a>
Release 2022-11-30</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/ee0277f1abad4856afc13ced2bfb90a43dbd9d34"><code>ee0277f</code></a>
Regenerated Clients</li>
<li>Additional commits viewable in <a
href="https://github.com/aws/aws-sdk-go-v2/compare/service/account/v1.7.10...service/account/v1.7.12">compare
view</a></li>
</ul>
</details>
<br />

Updates `github.com/aws/aws-sdk-go-v2/config` from 1.32.18 to 1.32.22
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/fa369bd7bb9576e85ac094a43a15e8372a3d0129"><code>fa369bd</code></a>
Release 2026-06-03</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/960ee4dc8380a46ded94f3976e073242d42bf8ed"><code>960ee4d</code></a>
Regenerated Clients</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/4b6df8b301a6c965903012dda08e9f38fd163f1c"><code>4b6df8b</code></a>
Update endpoints model</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/30b15dd22cc690c7d647c32f415111437cfbed2a"><code>30b15dd</code></a>
Update API model</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/e8c72af3150fa9c8898c916b2e213a5d3d7d64ed"><code>e8c72af</code></a>
enable schema-serde (<a
href="https://redirect.github.com/aws/aws-sdk-go-v2/issues/3421">#3421</a>)</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/b4d02c534cf7f5c782e10bc3f66e40c081a7bb3a"><code>b4d02c5</code></a>
Release 2026-06-02</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/48e375b484e0ae917f61904db440ef17382093d1"><code>48e375b</code></a>
Regenerated Clients</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/b8a4fc132e65d8310e2de67e0600eec53e2f4b26"><code>b8a4fc1</code></a>
Update API model</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/e8627b4cc01977004c41ff0f42670a44d500982d"><code>e8627b4</code></a>
Merge pull request <a
href="https://redirect.github.com/aws/aws-sdk-go-v2/issues/3430">#3430</a>
from aws/fix-remove-ioutil</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/4e258a368c5b421d28bae4a18e718b1b4c7dd16a"><code>4e258a3</code></a>
chore: update changelog description per review</li>
<li>Additional commits viewable in <a
href="https://github.com/aws/aws-sdk-go-v2/compare/config/v1.32.18...config/v1.32.22">compare
view</a></li>
</ul>
</details>
<br />

Updates `github.com/aws/aws-sdk-go-v2/service/sts` from 1.42.1 to 1.43.1
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/b3e07aa0a0dd26ec46095c28ce65301da2e78dba"><code>b3e07aa</code></a>
Release 2023-11-20</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/2fc1c0dab14dff82fc2c2465cb7c40a4157196a0"><code>2fc1c0d</code></a>
Regenerated Clients</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/1a6bd026243230178e775059d27038c0ced194ea"><code>1a6bd02</code></a>
Update endpoints model</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/ac2c871bff4a9fbb6284f1dcc061fdcabea346f3"><code>ac2c871</code></a>
Update API model</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/03c6858107f8c4c85637c18e1b643e33ca4575c0"><code>03c6858</code></a>
deprecate v4.SignHTTPRequestMiddleware (<a
href="https://redirect.github.com/aws/aws-sdk-go-v2/issues/2375">#2375</a>)</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/0be05fa6cc06d8e81eda10cbf8413030754c4df6"><code>0be05fa</code></a>
Release 2023-11-17</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/d0c9d422756e7eb30b9937468e659b140fc5e578"><code>d0c9d42</code></a>
Regenerated Clients</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/e2ede4019d693a352b0ccbb0b87dd74c1fb4990e"><code>e2ede40</code></a>
Update endpoints model</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/7720f87d0ec2f3609e2912c864b6f9ae550e0792"><code>7720f87</code></a>
Update API model</li>
<li><a
href="https://github.com/aws/aws-sdk-go-v2/commit/4bd06b93f8627928c17604383bd8639f2cb23739"><code>4bd06b9</code></a>
Merge customizations for service s3</li>
<li>Additional commits viewable in <a
href="https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.42.1...service/s3/v1.43.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `github.com/bytedance/sonic` from 1.15.1 to 1.15.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/bytedance/sonic/releases">github.com/bytedance/sonic's
releases</a>.</em></p>
<blockquote>
<h2>v1.15.2</h2>
<h2>What's Changed</h2>
<ul>
<li>rebase: update dev_hw with latest main by <a
href="https://github.com/hellohw188"><code>@​hellohw188</code></a> in <a
href="https://redirect.github.com/bytedance/sonic/pull/937">bytedance/sonic#937</a></li>
<li>Revert &quot;rebase: update dev_hw with latest main&quot; by <a
href="https://github.com/liuq19"><code>@​liuq19</code></a> in <a
href="https://redirect.github.com/bytedance/sonic/pull/941">bytedance/sonic#941</a></li>
<li>fix: align map runtime compatibility with Go 1.24+ by <a
href="https://github.com/liuq19"><code>@​liuq19</code></a> in <a
href="https://redirect.github.com/bytedance/sonic/pull/951">bytedance/sonic#951</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/bytedance/sonic/compare/v1.15.1...v1.15.2">https://github.com/bytedance/sonic/compare/v1.15.1...v1.15.2</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/bytedance/sonic/commit/579b6ffa7b3b36665600615500a2bf2d59964c5c"><code>579b6ff</code></a>
fix: use legacy map iterator shim</li>
<li><a
href="https://github.com/bytedance/sonic/commit/d77451355d8ae076459356fb89aac3b1c837e027"><code>d774513</code></a>
fix: align map runtime tags with Go 1.24</li>
<li><a
href="https://github.com/bytedance/sonic/commit/47cc3ed0c10b735127abdba4651b0f939949ff2a"><code>47cc3ed</code></a>
Revert &quot;rebase: update dev_hw with latest main&quot; (<a
href="https://redirect.github.com/bytedance/sonic/issues/941">#941</a>)</li>
<li><a
href="https://github.com/bytedance/sonic/commit/fdf817a24dedf68ee60c13a50b887d99eb6b0dfa"><code>fdf817a</code></a>
chore: update llvm</li>
<li><a
href="https://github.com/bytedance/sonic/commit/93044d2e5efd844250915435020a3885f8326c2c"><code>93044d2</code></a>
fix:add pretouchRecX86 in arm64 and add !arm64 to
loader_go117_test.go</li>
<li><a
href="https://github.com/bytedance/sonic/commit/59cca7ca115c17b5a15b9731b10a4040982440fe"><code>59cca7c</code></a>
feat: update sve_linkname|sve_wrapgoc with asm2arm_tool</li>
<li><a
href="https://github.com/bytedance/sonic/commit/76dcf4a830bb447aaaffc702468eb0768d9cc05f"><code>76dcf4a</code></a>
chore: add asm2arm_tool execution and test scripts</li>
<li><a
href="https://github.com/bytedance/sonic/commit/ccddb06137cc52e0ef6bb3d5d16ac08e364c7e98"><code>ccddb06</code></a>
feat: add SL mode support for asm2arm_tool</li>
<li><a
href="https://github.com/bytedance/sonic/commit/a756ce4d6c940eba7a2bca9817ab1c2d9c025280"><code>a756ce4</code></a>
feat: add JIT mode support for asm2arm_tool</li>
<li><a
href="https://github.com/bytedance/sonic/commit/1d176268eb2cea9dc083e18b38537d9e14141e37"><code>1d17626</code></a>
feat: use SVE acceleration in linkname and wrapgoc</li>
<li>Additional commits viewable in <a
href="https://github.com/bytedance/sonic/compare/v1.15.1...v1.15.2">compare
view</a></li>
</ul>
</details>
<br />

Updates `github.com/openai/openai-go/v3` from 3.37.0 to 3.39.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.39.0</h2>
<h2>3.39.0 (2026-06-03)</h2>
<p>Full Changelog: <a
href="https://github.com/openai/openai-%5Bgo/compare/v3.38.0...v3.39.0%5D(https://www.golinks.io/compare/v3.38.0...v3.39.0?trackSource=github)">v3.38.0...v3.39.0</a></p>
<h3>Features</h3>
<ul>
<li><strong>api:</strong> responses.moderation and
chat_completions.moderation (<a
href="https://github.com/openai/openai-%5Bgo/commit/7a2dac0ddf6b92dfcaa45b190dbe7f51368e199c%5D(https://www.golinks.io/commit/7a2dac0ddf6b92dfcaa45b190dbe7f51368e199c?trackSource=github)">7a2dac0</a>)</li>
</ul>
<h2>v3.38.0</h2>
<h2>3.38.0 (2026-06-01)</h2>
<p>Full Changelog: <a
href="https://github.com/openai/openai-go/compare/v3.37.0...v3.38.0">v3.37.0...v3.38.0</a></p>
<h3>Features</h3>
<ul>
<li><strong>api:</strong> manual updates (<a
href="https://github.com/openai/openai-go/commit/d7dac8192c292d882cb765d3379e10427930979e">d7dac81</a>)</li>
<li><strong>api:</strong> workload identity in audit logs,
additional_tools item in responses, fix ActionSearch.query to be
optional. (<a
href="https://github.com/openai/openai-go/commit/4c3981cfabc98ec1d67c2baf7c6a891ef6640f96">4c3981c</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.39.0 (2026-06-03)</h2>
<p>Full Changelog: <a
href="https://github.com/openai/openai-go/compare/v3.38.0...v3.39.0">v3.38.0...v3.39.0</a></p>
<h3>Features</h3>
<ul>
<li><strong>api:</strong> responses.moderation and
chat_completions.moderation (<a
href="https://github.com/openai/openai-go/commit/7a2dac0ddf6b92dfcaa45b190dbe7f51368e199c">7a2dac0</a>)</li>
</ul>
<h2>3.38.0 (2026-06-01)</h2>
<p>Full Changelog: <a
href="https://github.com/openai/openai-go/compare/v3.37.0...v3.38.0">v3.37.0...v3.38.0</a></p>
<h3>Features</h3>
<ul>
<li><strong>api:</strong> manual updates (<a
href="https://github.com/openai/openai-go/commit/d7dac8192c292d882cb765d3379e10427930979e">d7dac81</a>)</li>
<li><strong>api:</strong> workload identity in audit logs,
additional_tools item in responses, fix ActionSearch.query to be
optional. (<a
href="https://github.com/openai/openai-go/commit/4c3981cfabc98ec1d67c2baf7c6a891ef6640f96">4c3981c</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/openai/openai-go/commit/bfe92982d403b8eae7a355eb6a86650ee20b3570"><code>bfe9298</code></a>
release: 3.39.0</li>
<li><a
href="https://github.com/openai/openai-go/commit/b256c9a1cf224ae0cad685e9072968dba7932693"><code>b256c9a</code></a>
feat(api): responses.moderation and chat_completions.moderation</li>
<li><a
href="https://github.com/openai/openai-go/commit/fd8c615caa0b247c5a9de7318f457df1a014ea22"><code>fd8c615</code></a>
codegen metadata</li>
<li><a
href="https://github.com/openai/openai-go/commit/f25b030d119ec829f5dd78db9e05eff31b8f178d"><code>f25b030</code></a>
release: 3.38.0</li>
<li><a
href="https://github.com/openai/openai-go/commit/08e89a6fc0acbacf4645e16183e1130486e8a5de"><code>08e89a6</code></a>
feat(api): workload identity in audit logs, additional_tools item in
response...</li>
<li>See full diff in <a
href="https://github.com/openai/openai-go/compare/v3.37.0...v3.39.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `github.com/prometheus/common` from 0.67.5 to 0.68.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/prometheus/common/releases">github.com/prometheus/common's
releases</a>.</em></p>
<blockquote>
<h2>v0.68.1</h2>
<h2>What's Changed</h2>
<ul>
<li>build(deps): bump golang.org/x/net from 0.52.0 to 0.53.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/prometheus/common/pull/903">prometheus/common#903</a></li>
<li>build(deps): bump golang.org/x/net from 0.53.0 to 0.55.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/prometheus/common/pull/914">prometheus/common#914</a></li>
<li>Synchronize common files from prometheus/prometheus by <a
href="https://github.com/prombot"><code>@​prombot</code></a> in <a
href="https://redirect.github.com/prometheus/common/pull/915">prometheus/common#915</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/prometheus/common/compare/v0.68.0...v0.68.1">https://github.com/prometheus/common/compare/v0.68.0...v0.68.1</a></p>
<h2>v0.68.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Synchronize common files from prometheus/prometheus by <a
href="https://github.com/prombot"><code>@​prombot</code></a> in <a
href="https://redirect.github.com/prometheus/common/pull/873">prometheus/common#873</a></li>
<li>Synchronize common files from prometheus/prometheus by <a
href="https://github.com/prombot"><code>@​prombot</code></a> in <a
href="https://redirect.github.com/prometheus/common/pull/874">prometheus/common#874</a></li>
<li>build(deps): bump github.com/golang-jwt/jwt/v5 from 5.3.0 to 5.3.1
by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/prometheus/common/pull/879">prometheus/common#879</a></li>
<li>build(deps): bump golang.org/x/net from 0.48.0 to 0.49.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/prometheus/common/pull/878">prometheus/common#878</a></li>
<li>Synchronize common files from prometheus/prometheus by <a
href="https://github.com/prombot"><code>@​prombot</code></a> in <a
href="https://redirect.github.com/prometheus/common/pull/875">prometheus/common#875</a></li>
<li>Synchronize common files from prometheus/prometheus by <a
href="https://github.com/prombot"><code>@​prombot</code></a> in <a
href="https://redirect.github.com/prometheus/common/pull/880">prometheus/common#880</a></li>
<li>Remove logic adding unit to metrics name by <a
href="https://github.com/vesari"><code>@​vesari</code></a> in <a
href="https://redirect.github.com/prometheus/common/pull/877">prometheus/common#877</a></li>
<li>Synchronize common files from prometheus/prometheus by <a
href="https://github.com/prombot"><code>@​prombot</code></a> in <a
href="https://redirect.github.com/prometheus/common/pull/881">prometheus/common#881</a></li>
<li>Update for Go 1.26 by <a
href="https://github.com/SuperQ"><code>@​SuperQ</code></a> in <a
href="https://redirect.github.com/prometheus/common/pull/883">prometheus/common#883</a></li>
<li>build(deps): bump golang.org/x/net from 0.49.0 to 0.51.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/prometheus/common/pull/882">prometheus/common#882</a></li>
<li>version: Add a slog helper by <a
href="https://github.com/SuperQ"><code>@​SuperQ</code></a> in <a
href="https://redirect.github.com/prometheus/common/pull/886">prometheus/common#886</a></li>
<li>Remove Arthur from maintainers list by <a
href="https://github.com/ArthurSens"><code>@​ArthurSens</code></a> in <a
href="https://redirect.github.com/prometheus/common/pull/885">prometheus/common#885</a></li>
<li>Synchronize common files from prometheus/prometheus by <a
href="https://github.com/prombot"><code>@​prombot</code></a> in <a
href="https://redirect.github.com/prometheus/common/pull/895">prometheus/common#895</a></li>
<li>Synchronize common files from prometheus/prometheus by <a
href="https://github.com/prombot"><code>@​prombot</code></a> in <a
href="https://redirect.github.com/prometheus/common/pull/896">prometheus/common#896</a></li>
<li>config: change NewOAuth2RoundTripper to accept variadic
HTTPClientOption by <a
href="https://github.com/alliasgher"><code>@​alliasgher</code></a> in <a
href="https://redirect.github.com/prometheus/common/pull/898">prometheus/common#898</a></li>
<li>config: guard against nil oauth2 credential in RoundTrip by <a
href="https://github.com/alliasgher"><code>@​alliasgher</code></a> in <a
href="https://redirect.github.com/prometheus/common/pull/897">prometheus/common#897</a></li>
<li>build(deps): bump golang.org/x/net from 0.51.0 to 0.52.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/prometheus/common/pull/890">prometheus/common#890</a></li>
<li>build(deps): bump go.yaml.in/yaml/v2 from 2.4.3 to 2.4.4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/prometheus/common/pull/891">prometheus/common#891</a></li>
<li>build(deps): bump golang.org/x/oauth2 from 0.34.0 to 0.36.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/prometheus/common/pull/892">prometheus/common#892</a></li>
<li>Move interface assertions to a test file by <a
href="https://github.com/msiegen"><code>@​msiegen</code></a> in <a
href="https://redirect.github.com/prometheus/common/pull/839">prometheus/common#839</a></li>
<li>fix(http_config): fix client cert rotation when no CA is configured
by <a href="https://github.com/machine424"><code>@​machine424</code></a>
in <a
href="https://redirect.github.com/prometheus/common/pull/908">prometheus/common#908</a></li>
<li>Remove CircleCI by <a
href="https://github.com/ArthurSens"><code>@​ArthurSens</code></a> in <a
href="https://redirect.github.com/prometheus/common/pull/910">prometheus/common#910</a></li>
<li>Fix: apply DialContextFunc to OAuth2 token-fetch transport by <a
href="https://github.com/yuri-tceretian"><code>@​yuri-tceretian</code></a>
in <a
href="https://redirect.github.com/prometheus/common/pull/911">prometheus/common#911</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/alliasgher"><code>@​alliasgher</code></a> made
their first contribution in <a
href="https://redirect.github.com/prometheus/common/pull/898">prometheus/common#898</a></li>
<li><a href="https://github.com/msiegen"><code>@​msiegen</code></a> made
their first contribution in <a
href="https://redirect.github.com/prometheus/common/pull/839">prometheus/common#839</a></li>
<li><a
href="https://github.com/machine424"><code>@​machine424</code></a> made
their first contribution in <a
href="https://redirect.github.com/prometheus/common/pull/908">prometheus/common#908</a></li>
<li><a
href="https://github.com/yuri-tceretian"><code>@​yuri-tceretian</code></a>
made their first contribution in <a
href="https://redirect.github.com/prometheus/common/pull/911">prometheus/common#911</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/prometheus/common/compare/v0.67.5...v0.68.0">https://github.com/prometheus/common/compare/v0.67.5...v0.68.0</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/prometheus/common/blob/main/CHANGELOG.md">github.com/prometheus/common's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
<h2>main / unreleased</h2>
<h3>What's Changed</h3>
<h2>v0.69.0 / 2026-06-17</h2>
<h3>Security / behavior changes</h3>
<ul>
<li><strong>config: credentials are no longer forwarded across
cross-host redirects.</strong> When <code>FollowRedirects</code> is
enabled, the HTTP client now strips <code>Authorization</code>,
<code>Cookie</code>, <code>Proxy-Authorization</code> and other
sensitive headers, and skips basic-auth, bearer-token and OAuth2
credentials, when a redirect points to a different host. This aligns
with Go's <code>net/http</code> behavior. Callers that relied on
credentials being sent to a redirect target on another host will need to
target that host directly. <a
href="https://redirect.github.com/prometheus/common/issues/901">#901</a>
<a
href="https://redirect.github.com/prometheus/common/issues/920">#920</a>
<a
href="https://redirect.github.com/prometheus/common/issues/921">#921</a></li>
<li>config: <code>LoadHTTPConfigFile</code> now resolves relative file
paths (e.g. <code>*_file</code> credentials, <code>http_headers</code>
files) against the config file's own directory instead of its parent
directory. Configs that worked around the old behavior by prefixing
paths with the config's directory name must drop that prefix. <a
href="https://redirect.github.com/prometheus/common/issues/925">#925</a></li>
</ul>
<h3>Bugfixes</h3>
<ul>
<li>expfmt: fix nil pointer panic when parsing empty braces
<code>{}</code>. <a
href="https://redirect.github.com/prometheus/common/issues/922">#922</a></li>
<li>model: fix <code>Time.UnmarshalJSON</code> for larger negative
numbers. <a
href="https://redirect.github.com/prometheus/common/issues/918">#918</a></li>
</ul>
<h3>Performance</h3>
<ul>
<li>model: reduce allocations in <code>Time.UnmarshalJSON</code>. <a
href="https://redirect.github.com/prometheus/common/issues/918">#918</a></li>
</ul>
<h3>Internal</h3>
<ul>
<li>Synchronize common files from prometheus/prometheus. <a
href="https://redirect.github.com/prometheus/common/issues/917">#917</a></li>
<li>Modernize Go. <a
href="https://redirect.github.com/prometheus/common/issues/919">#919</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/prometheus/common/compare/v0.68.1...v0.69.0">https://github.com/prometheus/common/compare/v0.68.1...v0.69.0</a></p>
<h2>v0.67.2 / 2025-10-28</h2>
<h2>What's Changed</h2>
<ul>
<li>config: Fix panic in <code>tlsRoundTripper</code> when CA file is
absent by <a href="https://github.com/ndk"><code>@​ndk</code></a> in <a
href="https://redirect.github.com/prometheus/common/pull/792">prometheus/common#792</a></li>
<li>Cleanup linting issues by <a
href="https://github.com/SuperQ"><code>@​SuperQ</code></a> in <a
href="https://redirect.github.com/prometheus/common/pull/860">prometheus/common#860</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/ndk"><code>@​ndk</code></a> made their
first contribution in <a
href="https://redirect.github.com/prometheus/common/pull/792">prometheus/common#792</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/prometheus/common/compare/v0.67.1...v0.67.2">https://github.com/prometheus/common/compare/v0.67.1...v0.67.2</a></p>
<h2>v0.67.1 / 2025-10-07</h2>
<h2>What's Changed</h2>
<ul>
<li>Remove VERSION file to avoid Go conflict error in <a
href="https://redirect.github.com/prometheus/common/pull/853">prometheus/common#853</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/prometheus/common/compare/v0.67.0...v0.67.1">https://github.com/prometheus/common/compare/v0.67.0...v0.67.1</a></p>
<h2>v0.67.0 / 2025-10-07</h2>
<h2>What's Changed</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/prometheus/common/commit/212057321e897d625d07379aaddaca01afca7710"><code>2120573</code></a>
Update common Prometheus files (<a
href="https://redirect.github.com/prometheus/common/issues/915">#915</a>)</li>
<li><a
href="https://github.com/prometheus/common/commit/228386adfe1e9c8ede570fbca47782a9abca1a35"><code>228386a</code></a>
build(deps): bump golang.org/x/net from 0.53.0 to 0.55.0 (<a
href="https://redirect.github.com/prometheus/common/issues/914">#914</a>)</li>
<li><a
href="https://github.com/prometheus/common/commit/b8c88b4866403159e523c588dc7563b0f78c0418"><code>b8c88b4</code></a>
build(deps): bump golang.org/x/net from 0.52.0 to 0.53.0 (<a
href="https://redirect.github.com/prometheus/common/issues/903">#903</a>)</li>
<li><a
href="https://github.com/prometheus/common/commit/1e0ae832fb26a2c20c2c0d6ee1289111c668be18"><code>1e0ae83</code></a>
config: apply DialContextFunc to OAuth2 token-fetch transport (<a
href="https://redirect.github.com/prometheus/common/issues/911">#911</a>)</li>
<li><a
href="https://github.com/prometheus/common/commit/b51d01ba2175d103309dcee11f6c01bd03487a64"><code>b51d01b</code></a>
Remove CircleCI (<a
href="https://redirect.github.com/prometheus/common/issues/910">#910</a>)</li>
<li><a
href="https://github.com/prometheus/common/commit/0f3c348807322ea84d92fc7688b1b37a08e17d1f"><code>0f3c348</code></a>
Merge pull request <a
href="https://redirect.github.com/prometheus/common/issues/908">#908</a>
from machine424/ttlsco</li>
<li><a
href="https://github.com/prometheus/common/commit/732a9cf781621a8d8f895ef933b78cf4e9f5d6af"><code>732a9cf</code></a>
fix(http_config): fix client cert rotation when no CA is configured</li>
<li><a
href="https://github.com/prometheus/common/commit/ce9215c53d8c8e507c5f72a69d80568c072be3d9"><code>ce9215c</code></a>
Move interface assertions to a test file (<a
href="https://redirect.github.com/prometheus/common/issues/839">#839</a>)</li>
<li><a
href="https://github.com/prometheus/common/commit/1ba5ed78ffdaf199c6dded3ff8ac88edbdb53712"><code>1ba5ed7</code></a>
build(deps): bump golang.org/x/oauth2 from 0.34.0 to 0.36.0 (<a
href="https://redirect.github.com/prometheus/common/issues/892">#892</a>)</li>
<li><a
href="https://github.com/prometheus/common/commit/8f8ada69df73ad76cabef710856070a42ef420c0"><code>8f8ada6</code></a>
build(deps): bump go.yaml.in/yaml/v2 from 2.4.3 to 2.4.4 (<a
href="https://redirect.github.com/prometheus/common/issues/891">#891</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/prometheus/common/compare/v0.67.5...v0.68.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `google.golang.org/api` from 0.282.0 to 0.283.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.283.0</h2>
<h2><a
href="https://github.com/googleapis/google-api-go-client/compare/v0.282.0...v0.283.0">0.283.0</a>
(2026-06-01)</h2>
<h3>Features</h3>
<ul>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3609">#3609</a>)
(<a
href="https://github.com/googleapis/google-api-go-client/commit/ed84bb800c56d3f7fee4c11f96673114e94a8cc2">ed84bb8</a>)</li>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3611">#3611</a>)
(<a
href="https://github.com/googleapis/google-api-go-client/commit/3855346eda7f4ba6c844d86de5de493d3e395f00">3855346</a>)</li>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3612">#3612</a>)
(<a
href="https://github.com/googleapis/google-api-go-client/commit/32624d32240ec8e5997810fb9cb54f8000b6c7f8">32624d3</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.282.0...v0.283.0">0.283.0</a>
(2026-06-01)</h2>
<h3>Features</h3>
<ul>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3609">#3609</a>)
(<a
href="https://github.com/googleapis/google-api-go-client/commit/ed84bb800c56d3f7fee4c11f96673114e94a8cc2">ed84bb8</a>)</li>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3611">#3611</a>)
(<a
href="https://github.com/googleapis/google-api-go-client/commit/3855346eda7f4ba6c844d86de5de493d3e395f00">3855346</a>)</li>
<li><strong>all:</strong> Auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3612">#3612</a>)
(<a
href="https://github.com/googleapis/google-api-go-client/commit/32624d32240ec8e5997810fb9cb54f8000b6c7f8">32624d3</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/googleapis/google-api-go-client/commit/f6726366ff2f0b8fc82cec6f063dc9beb3ab1377"><code>f672636</code></a>
chore(main): release 0.283.0 (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3610">#3610</a>)</li>
<li><a
href="https://github.com/googleapis/google-api-go-client/commit/32624d32240ec8e5997810fb9cb54f8000b6c7f8"><code>32624d3</code></a>
feat(all): auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3612">#3612</a>)</li>
<li><a
href="https://github.com/googleapis/google-api-go-client/commit/3855346eda7f4ba6c844d86de5de493d3e395f00"><code>3855346</code></a>
feat(all): auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3611">#3611</a>)</li>
<li><a
href="https://github.com/googleapis/google-api-go-client/commit/ed84bb800c56d3f7fee4c11f96673114e94a8cc2"><code>ed84bb8</code></a>
feat(all): auto-regenerate discovery clients (<a
href="https://redirect.github.com/googleapis/google-api-go-client/issues/3609">#3609</a>)</li>
<li>See full diff in <a
href="https://github.com/googleapis/google-api-go-client/compare/v0.282.0...v0.283.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `google.golang.org/genai` from 1.58.0 to 1.59.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/googleapis/go-genai/releases">google.golang.org/genai's
releases</a>.</em></p>
<blockquote>
<h2>v1.59.0</h2>
<h2><a
href="https://github.com/googleapis/go-genai/compare/v1.58.0...v1.59.0">1.59.0</a>
(2026-06-03)</h2>
<h3>Features</h3>
<ul>
<li>Add Agent Platform MCP support to async generate_content (<a
href="https://github.com/googleapis/go-genai/commit/4b138c23dba7df1d76626fbc4565d4838469ce96">4b138c2</a>)</li>
<li>Add transcription language code. (<a
href="https://github.com/googleapis/go-genai/commit/cc4dd9cdd6e3c09044493c439c89cb67254539de">cc4dd9c</a>)</li>
<li>Add TranslationConfig for live translation. (<a
href="https://github.com/googleapis/go-genai/commit/76f4126a18dbb6c4606f649e1f8400003364f785">76f4126</a>)</li>
<li>additional computer_use field support for vertex. (<a
href="https://github.com/googleapis/go-genai/commit/8831eb39c99879b30695b3c1262d70a0b2b25450">8831eb3</a>)</li>
<li>Support 'additionalProperties', 'defs' and 'ref' in the
GenerateContent.Schema type. (<a
href="https://github.com/googleapis/go-genai/commit/996b8316fdc4dfe1bb5d70e3af45542a4a55bf9e">996b831</a>)</li>
<li>Support Reinforcement Tuning in GenAI SDK (<a
href="https://github.com/googleapis/go-genai/commit/fecb49e3d7870921be23054457b7b5163b8bba4f">fecb49e</a>)</li>
<li>Support ReinforcementTuning in GenAI SDK including ValidateReward
API method. (<a
href="https://github.com/googleapis/go-genai/commit/c95d115482daa0e69a02b25c239bd232bf62f054">c95d115</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/googleapis/go-genai/blob/main/CHANGELOG.md">google.golang.org/genai's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/googleapis/go-genai/compare/v1.58.0...v1.59.0">1.59.0</a>
(2026-06-03)</h2>
<h3>Features</h3>
<ul>
<li>Add Agent Platform MCP support to async generate_content (<a
href="https://github.com/googleapis/go-genai/commit/4b138c23dba7df1d76626fbc4565d4838469ce96">4b138c2</a>)</li>
<li>Add transcription language code. (<a
href="https://github.com/googleapis/go-genai/commit/cc4dd9cdd6e3c09044493c439c89cb67254539de">cc4dd9c</a>)</li>
<li>Add TranslationConfig for live translation. (<a
href="https://github.com/googleapis/go-genai/commit/76f4126a18dbb6c4606f649e1f8400003364f785">76f4126</a>)</li>
<li>additional computer_use field support for vertex. (<a
href="https://github.com/googleapis/go-genai/commit/8831eb39c99879b30695b3c1262d70a0b2b25450">8831eb3</a>)</li>
<li>Support 'additionalProperties', 'defs' and 'ref' in the
GenerateContent.Schema type. (<a
href="https://github.com/googleapis/go-genai/commit/996b8316fdc4dfe1bb5d70e3af45542a4a55bf9e">996b831</a>)</li>
<li>Support Reinforcement Tuning in GenAI SDK (<a
href="https://github.com/googleapis/go-genai/commit/fecb49e3d7870921be23054457b7b5163b8bba4f">fecb49e</a>)</li>
<li>Support ReinforcementTuning in GenAI SDK including ValidateReward
API method. (<a
href="https://github.com/googleapis/go-genai/commit/c95d115482daa0e69a02b25c239bd232bf62f054">c95d115</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/googleapis/go-genai/commit/bba8883a9ecbbb04ee5d5e3a2b665136483b7ce2"><code>bba8883</code></a>
chore(main): release 1.59.0 (<a
href="https://redirect.github.com/googleapis/go-genai/issues/799">#799</a>)</li>
<li><a
href="https://github.com/googleapis/go-genai/commit/c95d115482daa0e69a02b25c239bd232bf62f054"><code>c95d115</code></a>
feat: Support ReinforcementTuning in GenAI SDK including ValidateReward
API m...</li>
<li><a
href="https://github.com/googleapis/go-genai/commit/cc4dd9cdd6e3c09044493c439c89cb67254539de"><code>cc4dd9c</code></a>
feat: Add transcription language code.</li>
<li><a
href="https://github.com/googleapis/go-genai/commit/d1ef633b5a7139cd0b92c935a7c480d2de137839"><code>d1ef633</code></a>
chore: deprecate Google Maps grounding widget API fields</li>
<li><a
href="https://github.com/googleapis/go-genai/commit/76f4126a18dbb6c4606f649e1f8400003364f785"><code>76f4126</code></a>
feat: Add TranslationConfig for live translation.</li>
<li><a
href="https://github.com/googleapis/go-genai/commit/4b138c23dba7df1d76626fbc4565d4838469ce96"><code>4b138c2</code></a>
feat: Add Agent Platform MCP support to async generate_content</li>
<li><a
href="https://github.com/googleapis/go-genai/commit/2468757ab49e306020701e183d3d3a60b9328992"><code>2468757</code></a>
chore: Remove 'additionalProperties', 'defs' and 'ref' in the
GenerateContent...</li>
<li><a
href="https://github.com/googleapis/go-genai/commit/12650726cd492be68381b900f12e79308a07d467"><code>1265072</code></a>
chore: Internal cleanup</li>
<li><a
href="https://github.com/googleapis/go-genai/commit/8831eb39c99879b30695b3c1262d70a0b2b25450"><code>8831eb3</code></a>
feat: additional computer_use field support for vertex.</li>
<li><a
href="https://github.com/googleapis/go-genai/commit/996b8316fdc4dfe1bb5d70e3af45542a4a55bf9e"><code>996b831</code></a>
feat: Support 'additionalProperties', 'defs' and 'ref' in the
GenerateContent...</li>
<li>Additional commits viewable in <a
href="https://github.com/googleapis/go-genai/compare/v1.58.0...v1.59.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>
…yproxy#2274)

**Description**

The previous gateway controller code made assumptions about the
namespace consistency across gateway resources. This change adds an
explicit check and returns an error if there are inconsistencies.

**Related Issues/PRs (if applicable)**

N/A

**Special notes for reviewers (if applicable)**

N/A

Signed-off-by: Ignasi Barrera <ignasi@tetrate.io>
)

**Description**

Fix the a nil check on MCP session to capture all branches.

**Related Issues/PRs (if applicable)**

N/A

**Special notes for reviewers (if applicable)**

N/A

Signed-off-by: Ignasi Barrera <ignasi@tetrate.io>
**Description**

Set an upper bound for content blocks to prevent unreasonable values
from eating up all memory.

**Related Issues/PRs (if applicable)**

N/A

**Special notes for reviewers (if applicable)**

N/A

Signed-off-by: Ignasi Barrera <ignasi@tetrate.io>
… pointers (envoyproxy#2242)

**Description**

Adds nil checks for tool call IDs before dereferencing the pointers.

**Related Issues/PRs (if applicable)**

N/A

**Special notes for reviewers (if applicable)**

N/A

Signed-off-by: Ignasi Barrera <nacx@apache.org>
…logs (envoyproxy#2245)

**Description**

Implements the `slog.LogValuer` interface in the internal FilterAPI
structs to avoid leaking sensitive fields into the logs if those types
are used in log messages.

**Related Issues/PRs (if applicable)**

N/A

**Special notes for reviewers (if applicable)**

N/A

---------

Signed-off-by: Ignasi Barrera <ignasi@tetrate.io>
Co-authored-by: Aaron Choo <achoo30@bloomberg.net>
envoyproxy#2270)

**Description**

Prepare release documentation for the upcoming **v1.0.0** release.
Docs-only change in two parts:

- **`RELEASES.md`** — record the API stability commitment that motivates
the major version bump. As of v1.0.0, `v1beta1` is the committed
**stable** control-plane API and is covered by the existing "never break
unless critical security" guarantee. `v1alpha1` remains served but
deprecated and will be removed in a future release per the deprecation
policy. `QuotaPolicy` stays `v1alpha1`-only and is therefore outside the
stable surface; in particular its `serviceQuota` field is accepted but
not yet enforced end-to-end.
- **`site/docs/compatibility.md`** — add the `v1.0.x` row to the
compatibility matrix (Envoy Gateway v1.8.x+, Envoy Proxy v1.38.x,
Kubernetes v1.32+, Gateway API v1.5.x).

No API, controller, or data-plane code changes.

AI usage: these docs were drafted with assistance from Claude (Claude
Code) and reviewed by the author.

**Related Issues/PRs (if applicable)**

**Special notes for reviewers (if applicable)**

This is forward-looking v1.0 release-prep. The new `v1.0.x`
compatibility row is marked `Supported` and the `RELEASES.md` wording
says "as of the v1.0.0 release", even though v1.0.0 has not been tagged
yet. Intent is for this to land as part of, or immediately before, the
v1.0 cut rather than necessarily merging standalone today.

Two items intentionally left to maintainers:

- EOL rolling in the compatibility matrix. With the v0.7 to v1.0 major
jump, which of v0.7.x / v0.6.x / v0.5.x roll to End of Life is a
judgment call; this PR only adds the `v1.0.x` row and does not change
existing support statuses.
- The `serviceQuota` docs accuracy fix tracked on the
`docs/quota-policy-accuracy` branch is complementary to the
`RELEASES.md` note added here.

---------

Signed-off-by: Erica Hughberg <erica.sundberg.90@gmail.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
**Description**

Adds comprehensive documentation for the QuotaPolicy CRD, which was
fully implemented
but had no user-facing documentation. Covers service-wide quotas,
per-model quotas,
CEL cost expressions, Exclusive vs Shared bucket modes, client-selector
based bucket rules,
shadow mode, and duration format. Follows the structure of existing
traffic capability guides.

Distinguishes QuotaPolicy (total consumption budgets) from rate limiting
(request velocity)
to help adopters choose the right mechanism.

**Related Issues/PRs (if applicable)**

Related envoyproxy#1571

**Special notes for reviewers (if applicable)**

All field definitions and semantics sourced from
`api/v1alpha1/quota_policy.go` GoDoc comments.
Includes complete, copy-pasteable YAML examples for every configuration
option.

---------

Signed-off-by: Erica Hughberg <erica.sundberg.90@gmail.com>
Signed-off-by: Aaron Choo <achoo30@bloomberg.net>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Aaron Choo <achoo30@bloomberg.net>
…y#2240)

**Description**

A JSON `null` response body decodes into a nil `*ChatCompletionResponse`
without
an error, because the decode target is a `**ChatCompletionResponse`
(`Decode(&resp)`).
Some OpenAI-compatible backends return a `null` body with a 200 status
(e.g. an
upstream that aborts the response after committing headers under load).
In the
non-streaming path `ResponseBody` then dereferenced the nil response at
`resp.Usage.PromptTokens`, panicking the ext-proc with a SIGSEGV (addr
0x80).

`RedactBody` already guards `resp == nil`, so the nil case is known; the
main path
just missed it. This treats a nil response as an empty response: report
zero token
usage and fall back to the request model, mirroring the streaming path's
behavior
when no usage is present, rather than crashing.

A regression test feeds a literal `null` body and asserts no panic and
zero usage.

Per the project's generative-AI policy: this change was prepared with
the
assistance of an AI coding tool (Claude Code). The submitter understands
and takes
full ownership of the change.

**Related Issues/PRs (if applicable)**

Fixes envoyproxy#2273

**Special notes for reviewers (if applicable)**

N/A

Signed-off-by: Kunwar Srivastav <kshivamsrivastav@gmail.com>
Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
…yproxy#2237)

**Description**

Fix two bugs in the Anthropic-to-Bedrock translator message merging
logic at `internal/translator/anthropic_awsbedrock.go`.

**Bug 1: Wrong slice index (original report)**

When system messages are present in the request body,
`promoteAnthropicSystemMessagesToParam` filters them out, producing a
shorter `messages` slice. The coalescing loop was using
`body.Messages[i+1]` (the original unfiltered slice) instead of
`messages[i+1]` (the filtered slice), causing index misalignment that
could read wrong messages or panic with out-of-bounds access.

**Bug 2: Coalescing logic was unreachable (root cause)**

Tool result messages have `Role: "user"`, so they match `case
anthropicschema.MessageRoleUser` and go through `convertUserMessage()` —
which handles tool results individually but never coalesces consecutive
ones. The coalescing logic in the `default` branch was dead code for
tool results since they never reach that branch.

**Changes**

- Moved the `hasToolResult` check + coalescing loop into the
`MessageRoleUser` case branch
- Non-tool-result user messages still go through `convertUserMessage()`
- Changed `body.Messages[i+1]` → `messages[i+1]` to use the correct
filtered slice
- Simplified the `default` branch to just return an error for unexpected
roles
- Updated existing test to expect coalesced output (3 messages instead
of 4)
- Added regression test with system messages to verify index alignment

**Testing**

- All existing translator tests pass
- New
`TestAnthropicToAWSBedrockTranslator_RequestBody_ToolResultMessagesWithSystemMessages`
verifies the fix works when system messages are present alongside
consecutive tool results

---------

Signed-off-by: liuhy <liuhongyu@apache.org>
Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
v1.0.0 marks v1beta1 control-plane API as stable (per RELEASES.md).
46 commits since v0.7.0 — mostly bug fixes (Bedrock translator coalescing,
Anthropic streaming usage double-counting, GCP camelCase JSON tags, MCP
secret leak, RBAC empty-namespace) plus two feats:
  - openai → gcp embedContent translation for gemini-embedding-2 (envoyproxy#2114)
  - completion token details for Anthropic models (envoyproxy#2199)

Conflicts resolved (2 files):

  - internal/apischema/gcp/gcp.go:
      fork's CachedContentRequest struct and upstream's new EmbedContent*
      structs were added at the same file-tail location. Kept both.

  - internal/translator/openai_gcpvertexai_test.go:
      upstream removed the "content-length" entry from expected
      wantHeaderMut across 10 test cases (consistent with the upstream
      change that no longer emits content-length when no body mutation
      is needed — fix: skip CONTINUE_AND_REPLACE when no body change
      is needed, envoyproxy#2170). Took upstream's version everywhere.

Verified after merge:
  - go build ./... ✓
  - go vet ./... ✓
  - All affected unit tests pass (apischema/anthropic, apischema/openai,
    translator, extproc, endpointspec, mainlib, backendauth).
  - Fork-only feature tests pass: cachedContents translator (Vertex form
    + Developer API form), expandToVertexFullModelPath, rewriteVertexModelName,
    ImageEdits translator, server prefix fallback router, mainlib path
    extractors for cachedContents + region.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
router.ProcessRequestBody re-set x-ai-eg-original-path unconditionally,
overwriting the pre-rewrite path stored by ProcessRequestHeaders. By the
time ProcessRequestBody runs, r.requestHeaders[":path"] already holds the
rewritten form (e.g. /cachedContents after /v1beta/cachedContents →
/cachedContents), so upstream-filter's processorForPath then looked up
/cachedContents — which is not a registered prefix — and returned no
processor. The upstream filter silently produced no response and Envoy
60s-timed the request out (504 UT).

The v0.7-era code had this exact guard; it was dropped in the v1.0.0
merge conflict resolution (upstream removed it, we accepted upstream's
version). Restore the fork's guard so bump-through GET/DELETE bodyless
requests still get the header from ProcessRequestHeaders and body-carrying
requests don't clobber it in ProcessRequestBody.

Symptom: POST /v1beta/cachedContents 504s with response_flags=UT after
v1.0.0 deploy. Regression only affects paths that go through
rewriteDeveloperAPIPath (cachedContents Developer-API form) — generateContent
is unaffected because its :path rewrite happens in the upstream stage.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…xy#2291)

**Description**

When an upstream response is gzip-encoded but has an empty body, the
gateway aborts a response that was actually fine.

`decodeContentIfNeeded` builds a `gzip.NewReader` to decompress the
body. `gzip.NewReader` reads the gzip header immediately, and over a
zero-byte body that read returns `io.EOF`. The function returns that as
`failed to decode gzip: EOF`, which the ext_proc layer treats as fatal,
so the client gets nothing even though the upstream returned a
successful response. We saw this in production as an ext_proc abort with
`response_code: 200` but `bytes_sent: 0`.

This happens when an upstream sends `Content-Encoding: gzip` with an
empty body, or when a streaming response is buffered to end-of-stream
with no payload (for example, the connection terminated before any body
bytes arrived). The streaming path also runs the accumulated buffer
through `decodeContentIfNeeded`, so an empty buffer hits the same error.

The fix returns an empty body as-is instead of trying to build a
decompressor. It is intentionally narrow: a non-empty but malformed gzip
body still errors exactly as before, and only the zero-length case is
treated as a pass-through.

Tests: added an `empty gzip body` case to `TestDecodeContentIfNeeded`
covering an empty body with `Content-Encoding: gzip`. `gofmt`, `go vet`,
and the `internal/extproc` package tests pass.

**Related Issues/PRs (if applicable)**

N/A

**Special notes for reviewers (if applicable)**

The guard lives in `decodeContentIfNeeded` rather than at the call sites
because both the buffered and streaming paths flow through it, so a
single check covers both.

Signed-off-by: Chris Burns <29541485+ChrisJBurns@users.noreply.github.com>
…yproxy#2289)

**Description**

The OpenAI-to-AWS Bedrock translator panics when streaming event
serialization fails, causing the extproc container to crash. Instead of
propagating the error upstream for graceful handling, the code calls
`panic()` at `internal/translator/openai_awsbedrock.go:740`.

**Location**

`internal/translator/openai_awsbedrock.go:740`

**Before:**
```go
err = serializeOpenAIChatCompletionChunk(oaiEvent, &newBody)
if err != nil {
    panic(fmt.Errorf("failed to marshal event: %w", err))  // ❌ PANIC
}
```

**After:**
```go
err = serializeOpenAIChatCompletionChunk(oaiEvent, &newBody)
if err != nil {
    return nil, nil, metrics.TokenUsage{}, "", fmt.Errorf("failed to marshal streaming event: %w", err)
}
```

**Root Cause**

`serializeOpenAIChatCompletionChunk()` wraps `json.Marshal()` and
returns an error when marshaling fails. When marshal fails (e.g.,
malformed chunk data or edge cases in converted Bedrock events), the
streaming handler panics instead of returning an error.

**Impact**

- **Critical**: extproc crash disrupts all ongoing requests through the
gateway
- **No graceful degradation**: Clients receive connection errors, no
meaningful error response
- **Hard to debug**: Panic crashes the process without proper error
logging
- **Affects**: All streaming requests through AWS Bedrock backend

**Fix**

Replace `panic()` with proper error return, allowing Envoy to handle the
failure gracefully. This pattern matches the error handling used
elsewhere in the same file for non-streaming responses (e.g., line
754-756).

**Testing**

All existing Bedrock translator tests pass:
```
=== RUN   TestOpenAIToAWSBedrockTranslator
--- PASS: TestOpenAIToAWSBedrockTranslator
```

**Files Changed**

| File | Change |
|------|--------|
| `internal/translator/openai_awsbedrock.go` | panic → return error |

---------

Signed-off-by: liuhy <liuhongyu@apache.org>
Co-authored-by: Claude <noreply@anthropic.com>
…oyproxy#2339)

**Description**

`AIGatewayRoute` `rules[].backendRefs[]` accepts a `namespace` field,
but when a backendRef points at an `InferencePool` in a different
namespace, the controller generated the child `HTTPRoute` backendRef
with the route's *own* namespace instead of the referenced one. The
route then reported `ResolvedRefs: False` with `BackendNotFound: custom
backend InferencePool <route-ns>/<pool-name> not found`, even with a
valid `ReferenceGrant` in the pool's namespace.

This PR makes the controller honor the `namespace` specified on an
`InferencePool` backendRef when generating the `HTTPRoute`, and
validates cross-namespace `InferencePool` references via
`ReferenceGrant` — consistent with the existing `AIServiceBackend`
behavior. Same-namespace references are unaffected and require no
`ReferenceGrant`.

Implementation notes:
- `newHTTPRoute` now uses `backendRef.GetNamespace(route.Namespace)` for
the generated `InferencePool` backendRef instead of hardcoding the route
namespace.
- The `referenceGrantValidator` is refactored to be generic over the
target group/kind; `validateAIServiceBackendReference` is preserved as a
thin wrapper (behavior unchanged) and a new
`validateInferencePoolReference` is added.
- The Gateway controller already resolved the
`InferencePool`/`BackendSecurityPolicy` using the backendRef namespace,
so fixing the generated `HTTPRoute` namespace completes the end-to-end
path.

**Related Issues/PRs (if applicable)**

Fixes envoyproxy#2230

**Special notes for reviewers (if applicable)**

Added unit tests:
- `Test_newHTTPRoute_InferencePool_CrossNamespace` — namespace honored
with a valid `ReferenceGrant`, rejected without one, and same-namespace
needs no grant.
- `TestReferenceGrantValidator_ValidateInferencePoolReference` —
cross-namespace grant matching for `InferencePool` targets.

Verified with `go build`, `go vet`, and `go test
./internal/controller/...` (all passing), and `gofmt`.

Signed-off-by: liuhy <liuhongyu@apache.org>
…oyproxy#2236)

**Description**

The `message_delta` event handler in `anthropicStreamParser` was using
`Add*` methods for input tokens, cached tokens, and cache creation
tokens. However, the Anthropic API reports cumulative (not incremental)
token counts in `message_delta`, and `message_start` already sets these
values correctly via `ExtractTokenUsageFromExplicitCaching`. Using `Add`
on top of the already-set cumulative values caused cache tokens to be
counted twice.

### Bug Example

With `input_tokens=9` and `cache_read_input_tokens=1`:

| Step | Action | InputTokens | CachedInputTokens |
|------|--------|-------------|-------------------|
| `message_start` | `SetInputTokens(10)`, `SetCachedInputTokens(1)` | 10
✅ | 1 ✅ |
| `message_delta` (before fix) | `AddInputTokens(1)`,
`AddCachedInputTokens(1)` | 11 ❌ | 2 ❌ |
| `message_delta` (after fix) | Only `SetOutputTokens(16)` | 10 ✅ | 1 ✅
|

### Root Cause

`ExtractTokenUsageFromExplicitCaching` computes `InputTokens =
input_tokens + cache_read + cache_creation`. In `message_start`, this is
correctly set via `Set*` methods. In `message_delta`, the same
cumulative values were being added via `Add*` methods, causing double
counting.

### Fix

The `message_delta` handler now only updates output tokens using
`SetOutputTokens`, since `message_start` typically reports
`output_tokens=0` and `message_delta` provides the final count. This
matches the pattern already used in `anthropic_anthropic.go`'s
`reflectStreamingEvent`. The `MessageDeltaUsage` struct uses non-pointer
`int64` fields that default to 0 when absent from JSON, making it
impossible to distinguish "not provided" from "actually zero" — so we
cannot safely `Set` override from delta either, as it would erase
correct `message_start` values with zeros.

### Changes

- `internal/translator/anthropic_helper.go`: Removed `Add*` calls for
input/cache tokens from `message_delta` handler; replaced
`AddOutputTokens` with `SetOutputTokens`; removed unused
`ExtractTokenUsageFromExplicitCaching` call; added `>= 0` guard for
`ThinkingTokens`
- `internal/translator/anthropic_helper_test.go`: Added
`TestAnthropicStreamParserTokenUsage_NoDoubleCounting` with 6 test cases

### Test Coverage

- Cache tokens in both `message_start` and `message_delta` (core
double-count scenario)
- Cache creation tokens in both events
- Both cache_read and cache_creation in both events
- No cache tokens (baseline correctness)
- Cache tokens only in `message_start`, not in `message_delta`
- Cache tokens only in `message_delta` — verifies they are ignored
(non-pointer int64 fields cannot distinguish absent from zero)

---------

Signed-off-by: liuhy <liuhongyu@apache.org>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
…ity (envoyproxy#2382)

**Description**
It should take a bit time to finalize the discussion and implementation
of envoyproxy#2368, and it needs
users to config on their side to adapt to this new feature. However,
some users already used the newer claude models, so just update the
claude models list for a temporal fix to unblock them.

Signed-off-by: yxia216 <yxia216@bloomberg.net>
**Description**

This commit preserves message-level `cache_control` fields on OpenAI
tool result messages when translating requests to Anthropic-compatible
backends. Previously, the OpenAI schema dropped the field before
translation, so AWS Anthropic requests could not place a cache
breakpoint on an outer `tool_result` block.

The translator now prefers the message-level marker and falls back to
the existing content-part marker. Unit tests cover string and multipart
results, consecutive tool messages, and the compatibility path for
content-part markers.

**Related Issues/PRs (if applicable)**
N/A

**Special notes for reviewers (if applicable)**
I raised this PR because prompt caching worked for plain messages, tool
definitions, and `tool_use` blocks, but missed when the breakpoint
landed on a tool result through the OpenAI-compatible endpoint. The
native Anthropic endpoint already preserved this shape.

The E2E matrix checks all five prompt shapes against the in-cluster test
upstream and verifies the exact AWS Anthropic request body. It does not
call a live provider.

I used Cursor to help investigate and implement this change, and I
reviewed and verified the code and tests.

Signed-off-by: John Panos <johncpanos@gmail.com>
…message_delta (envoyproxy#2292)

**Description**

Anthropic Messages streaming usage extraction reads input and cache
token counts from `message_start`, and on `message_delta` it only
updates `output_tokens`. Some Anthropic-compatable backends report the
final `input_tokens`, `cache_creation_input_tokens` and
`cache_read_input_tokens` on the `message_delta` event instead. In that
case the input and cache counts get dropped and recorded as zero, which
corrupts usage metrics and any downstream cost or quota accounting that
depends on them.

This runs the `message_delta` usage through the same
`ExtractTokenUsageFromExplicitCaching` path already used for
`message_start` and merges it with `Override`. The fields are only
merged when non-zero, so a standard delta that carries `output_tokens`
alone doesnt overwrite the `message_start` baseline with zeros.

**Related Issues/PRs (if applicable)**

Fixes envoyproxy#2290

**Special notes for reviewers (if applicable)**

Added two streaming subtests (cache-creation and cache-read variants)
using the values from the issue: `input_tokens` 4522 + cache 4511 gives
9033 input total and 9038 total. They fail on main and pass with this
change. The existing streaming and non-streaming usage tests are
untouched.

---------

Signed-off-by: pjdurden <prajjwalchittori1@gmail.com>
Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
)

**Description**

This handles both route-level cluster names and per-backend cluster
names generated by Envoy Gateway. Per-backend clusters now receive the
upstream ext_proc and header mutation filters together with metadata for
the specific backend reference, so priority-based fallback can apply the
fallback backend's schema translation.

The cluster-name parsing is isolated in a helper that validates the
route rule and backend indexes. Existing route-level cluster behavior is
preserved.

**Related Issues/PRs (if applicable)**

Fixes envoyproxy#2135

**Testing**

- `go test ./internal/extensionserver -run
'TestParseAIGatewayClusterName|TestMaybeModifyClusterPerBackendClusterName|Test_maybeModifyCluster'
-count=1`
- `go test ./internal/extensionserver -count=1`
- `go test ./internal/extensionserver -coverprofile=<temp-file>
-count=1` (package 88.3%; parser and endpoint metadata helper 100%)
- `go vet ./internal/extensionserver`
- `git diff --check`

The repository's `go tool -modfile=tools/go.mod` lint command is not
compatible with the local Go 1.26 tool invocation, so the extension
server lint target was not run.

**Special notes for reviewers (if applicable)**

The regression tests cover both per-backend LoadAssignment metadata and
the EDS-managed cluster-level metadata fallback. This update was
prepared with OpenAI Codex assistance and reviewed against the current
extension server implementation.

---------

Signed-off-by: Yang Haoran <97868579@qq.com>
Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
…i models (envoyproxy#2259)

**Description**
The previous implementation on tokens tracking is like 
```
if chunk.UsageMetadata.CandidatesTokenCount >= 0 {
				tokenUsage.SetOutputTokens(uint32(chunk.UsageMetadata.CandidatesTokenCount)) //nolint:gosec
			}
```
The output tokens should include both the reasoning tokens and the
candidates tokens. Thus fix this by reusing the the variable `usage`,
just like non-streaming mode. Also updated the tests to include
reasoning tokens

---------

Signed-off-by: yxia216 <yxia216@bloomberg.net>
Co-authored-by: Ignasi Barrera <ignasi@tetrate.io>
…hought_signature_validator for Gemini function calls (envoyproxy#2366)

**Description**

Gemini 3.x requires the thought signature (see [1]) returned with a
`functionCall` to be echoed back on that part in subsequent requests;
otherwise Vertex rejects the request with `400 INVALID_ARGUMENT`
("Function call is missing a thought_signature in functionCall parts").
The OpenAI → GCPVertexAI translator emits the signature in responses as
`message.thinking_blocks[].signature` (envoyproxy#1995) but on the request side
only reads it from assistant `content` parts of type `"thinking"`
(envoyproxy#1726), and sends nothing when absent. Standard OpenAI-schema clients
have no signature field to echo, so every tool round-trip with Gemini
3.x fails.

This PR changes `assistantMsgToGeminiParts` to:

- also accept a signature echoed via the assistant message's
`thinking_blocks[].signature` — the same shape the gateway itself emits,
so round-tripping the response message now works. Content-part
signatures keep priority.
- fall back to Google's documented compatibility value
`skip_thought_signature_validator` on the first `functionCall` part when
the client echoed no signature at all (matching LiteLLM's behavior).
Attached to the first part only, consistent with how Gemini attaches
signatures for parallel calls.

`ChatCompletionAssistantMessageParam` gains the `thinking_blocks` field
to make the request/response contract symmetric.

**Related Issues/PRs (if applicable)**

Fixes envoyproxy#2365
Related PRs: envoyproxy#1726, envoyproxy#1995

**Special notes for reviewers (if applicable)**

- Four pre-existing fixtures in `gemini_helper_test.go` /
`TestOpenAIMessagesToGeminiContents` exercised tool calls without a
signature and now expect the dummy value — that's the intended new
behavior, not weakened assertions.
- Verified end-to-end with `aigw run` against real Vertex
(`gemini-3.5-flash`, `eu`): the signature-less round-trip returns 200
with this patch and 400 on `main`; `thinking_blocks` echo returns 200
and carries the real signature; streaming unaffected. Vertex accepts the
dummy value (documented compatibility path, so no hard dependency on
Google keeping undocumented behavior).

1: https://ai.google.dev/gemini-api/docs/thought-signatures

---------

Signed-off-by: Adam Nych <adam.nych@univio.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…wer gemini models like gemini-3.5-flash (envoyproxy#2399)

**Description**

***Problem***

When the model returns a tool call, OpenAI expects the finish reason to
be `tool_calls` while Gemini returns `STOP`. We convert it via
```
if len(toolCalls) > 0 {
			return openai.ChatCompletionChoicesFinishReasonToolCalls
		}
```
This was correct for streaming mode because the finish reason and the
tool calls are in the same chunk in the previous Gemini models. However,
for newer Gemini models like gemini-3.5-flash, they are split into
**two** chunks. The `functionCall` chunk has
**no** `finishReason`, and a **trailing** chunk carries `finishReason:
STOP` with an empty
text part and **no** `functionCall`:

```jsonc
// raw GCP chunk 1 — has the tool call, no finishReason
{"candidates":[{"content":{"parts":[{"functionCall":{"name":"get_current_weather","args":{"...":"..."}},
                                     "thoughtSignature":"..."}]}}],
 "usageMetadata":{"trafficType":"ON_DEMAND"}}

// raw GCP chunk 2 — terminal STOP, empty text, no functionCall
{"candidates":[{"content":{"parts":[{"text":""}]},"finishReason":"STOP"}],
 "usageMetadata":{"promptTokenCount":107,"candidatesTokenCount":31,"thoughtsTokenCount":148,"...":"..."}}
```


In this case, the conversion would be invalid. Thus, we need to remember
whether the model returned a tool call during the streaming mode.

---------

Signed-off-by: yxia216 <yxia216@bloomberg.net>
@coderabbitai

coderabbitai Bot commented Jul 28, 2026

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

이번 변경은 임베딩 요청 스키마와 Vertex AI embedContent 경로, MCP 자격 증명 처리, 컨트롤러 네임스페이스·ReferenceGrant 검증, provider 스트리밍 처리, 프록시 요청 제한, 보안 로깅, CI 액션 및 문서를 업데이트합니다.

Changes

Platform and documentation

Layer / File(s) Summary
Platform, dependency, and documentation updates
.github/workflows/*, go.mod, SECURITY.md, site/docs/*, manifests/charts/*
CI 액션과 의존성 버전, Helm 템플릿, QuotaPolicy 문서, 보안 정책 및 릴리스 문서가 갱신되었습니다.

Embedding flow

Layer / File(s) Summary
Embedding request and response contracts
internal/apischema/gcp/gcp.go, internal/apischema/openai/openai.go, internal/translator/*embedding*
Embedding 요청이 completion/chat 변형을 지원하도록 변경되고 GCP embedContent 요청·응답 스키마가 추가되었습니다.
Vertex AI embedding translation
internal/translator/openai_gcpvertexai_embeddings.go, internal/translator/openai_gcpvertexai_embeddings_test.go
모델에 따라 predict 또는 embedContent를 선택하고 텍스트·멀티모달 입력, 사용량, truncation 응답을 처리합니다.

Controller and request processing

Layer / File(s) Summary
Controller namespace and reference handling
cmd/controller/*, internal/controller/controller.go, internal/controller/gateway.go, internal/controller/referencegrant.go
Envoy Gateway 네임스페이스 전달, 제한된 네임스페이스 검색, InferencePool 교차 네임스페이스 검증이 추가되었습니다.
MCP credential resource lifecycle
internal/controller/mcp_route.go, internal/controller/mcp_route_test.go
API 키 유형별 필터 구성이 추가되고, SecretRef 자격 증명 Secret 생성·갱신·삭제와 Gateway 오류 전파가 구현되었습니다.
Proxy limits, body mutation, and logging
internal/mcpproxy/*, internal/extproc/*, internal/filterapi/*, internal/pprof/pprof.go
MCP 요청 바디 크기 제한, 조건부 바디 교체, 민감 로그 필드 마스킹, 로컬 pprof 바인딩이 추가되었습니다.

Extension and provider translation

Layer / File(s) Summary
Extension metadata and filter placement
internal/extensionserver/*
클러스터 이름 파싱, 백엔드 메타데이터 설정, scheme 변환 및 buffer 이후 ext_proc 삽입 처리가 갱신되었습니다.
Anthropic, Gemini, and Bedrock translation
internal/translator/anthropic_*, internal/translator/gemini_helper.go, internal/translator/openai_awsbedrock.go
스트리밍 토큰 병합, 캐시 메타데이터, tool call 검증, system 메시지 승격, Gemini signature 및 Bedrock 메시지 변환이 보강되었습니다.
Provider integration and end-to-end validation
tests/data-plane/*, tests/e2e/*, internal/translator/*_test.go
provider 사용량 기대값, 분리된 tool-call 종료 이유, null 응답, prompt-cache 변환 및 관련 E2E 테스트가 갱신되었습니다.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related PRs

  • inflearn/ai-gateway#4: 동일한 CI workflow 액션 버전 갱신과 .gitignore·문서 변경을 포함합니다.

Poem

당근처럼 새 스키마가 자라나고
토끼는 임베딩 길을 깡충 뛴다.
비밀 키는 살포시 감춰지고,
버퍼 뒤 필터는 자리 잡는다.
“삐약!” 더 안전한 게이트웨이!

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/upstream-post-v1.0.0-fixes

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 10

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
internal/controller/mcp_route.go (1)

745-762: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

이전 Secret 삭제를 필터 Update 성공 이후로 옮기는 편이 안전합니다.

현재는 Delete를 먼저 수행하므로, 이어지는 Update가 실패하면 필터가 이미 삭제된 Secret을 계속 참조해 크리덴셜 주입이 깨진 상태로 남습니다(다음 리컨실까지).

♻️ 제안 순서 변경
-		if previousCredentialSecretName != "" && previousCredentialSecretName != credentialSecretName {
-			deleteErr := c.kube.CoreV1().Secrets(mcpRoute.Namespace).Delete(ctx, previousCredentialSecretName, metav1.DeleteOptions{})
-			if deleteErr != nil && !apierrors.IsNotFound(deleteErr) {
-				return fmt.Errorf("failed to delete stale credential secret %s: %w", previousCredentialSecretName, deleteErr)
-			}
-		}
-
 		// Update existing filter unconditionally to ensure it matches the desired state.
 		existingFilter.Spec = filter.Spec
 		c.logger.Info("Updating HTTPRouteFilter", "namespace", existingFilter.Namespace, "name", existingFilter.Name)
 		if err = c.client.Update(ctx, &existingFilter); err != nil {
 			return fmt.Errorf("failed to update HTTPRouteFilter: %w", err)
 		}
+		if previousCredentialSecretName != "" && previousCredentialSecretName != credentialSecretName {
+			deleteErr := c.kube.CoreV1().Secrets(mcpRoute.Namespace).Delete(ctx, previousCredentialSecretName, metav1.DeleteOptions{})
+			if deleteErr != nil && !apierrors.IsNotFound(deleteErr) {
+				return fmt.Errorf("failed to delete stale credential secret %s: %w", previousCredentialSecretName, deleteErr)
+			}
+		}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/controller/mcp_route.go` around lines 745 - 762, Move the stale
credential Secret deletion from before the HTTPRouteFilter update to after a
successful `c.client.Update` in the existing filter reconciliation flow.
Preserve the current transition check and NotFound handling, and return the same
wrapped error if deletion fails; if the update fails, return immediately without
deleting the previous Secret.
internal/extproc/processor_impl.go (1)

513-565: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift

AUTH용 바디를 별도로 전달하세요
wantBodyReplace=false여도 h.Do(ctx, u.requestHeaders, bodyMutation.GetBody())는 그대로 호출되는데, 이때 전달되는 값은 빈 바디입니다. Envoy는 실제 요청 본문을 유지하므로, 본문 해시에 의존하는 인증 핸들러는 잘못된 서명/인증 헤더를 만들 수 있습니다. 바디를 교체하지 않더라도 auth 계산용 본문은 현재 요청 본문 기준으로 넘겨야 합니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/extproc/processor_impl.go` around lines 513 - 565, When invoking the
auth handler h.Do, pass the current request body for authentication even when
wantBodyReplace is false, instead of always using bodyMutation.GetBody(), which
may be empty. Preserve bodyMutation.GetBody() for replacement cases and ensure
the handler receives the actual current request body used by Envoy for
hash/signature calculations.
🧹 Nitpick comments (13)
internal/controller/mcp_route.go (1)

798-817: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick win

기존 Secret 업데이트 경로에서 ownerReference를 보정하지 않습니다.

desired에만 controller reference를 설정하고 업데이트는 existing.Data만 교체하므로, 동일 이름의 Secret이 이미 다른 소유자(또는 소유자 없이) 존재하면 소유권 없이 내용만 덮어쓰게 되고 MCPRoute 삭제 시 GC 대상에서 누락됩니다.

♻️ 제안 수정
 	if string(existing.Data[egv1a1.InjectedCredentialKey]) != credentialValue {
 		existing.Data = desired.Data
+		existing.OwnerReferences = desired.OwnerReferences
 		c.logger.Info("Updating credential secret", "namespace", mcpRoute.Namespace, "name", secretName)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/controller/mcp_route.go` around lines 798 - 817, Update the existing
Secret path in the credential reconciliation logic to also synchronize its
ownerReferences from desired, not only existing.Data. Ensure the controller
reference is applied when updating an already-present Secret, while preserving
the current update condition and error handling.
internal/controller/gateway_test.go (1)

2841-2867: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

envoyGatewayNamespace가 빈 문자열인 케이스 테스트 추가를 권장합니다.

gateway.go에서 지적한 빈 값 폴백 동작이 회귀 테스트로 고정되지 않습니다. NewGatewayController(..., "", ...) 케이스를 추가하면 가드 수정 후 동작이 보장됩니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/controller/gateway_test.go` around lines 2841 - 2867, Extend
TestGatewayController_getObjectsForGatewaySameNamespace with a case that
constructs NewGatewayController using an empty envoyGatewayNamespace, then
verifies getObjectsForGateway still resolves the gateway’s namespace and returns
its matching pod and deployment. Preserve the existing non-empty namespace
assertions and use the same gateway-scoped test resources to lock in the
fallback behavior.
internal/controller/mcp_route_test.go (1)

318-331: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

expCredentialHeader가 어떤 케이스에서도 설정되지 않아 사실상 검증되지 않습니다.

secretRef + 커스텀 헤더(Header: ptr.To("X-API-KEY")) 케이스를 추가하면 CredentialInjection.Header 전달과 "Bearer" 미적용 동작이 함께 고정됩니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/controller/mcp_route_test.go` around lines 318 - 331, Update the MCP
backend API key test cases to add a SecretRef configuration with Header set to
ptr.To("X-API-KEY"), and set expCredentialHeader to that custom header while
expecting the secret value without a "Bearer " prefix. Ensure the case validates
CredentialInjection.Header propagation and the custom-header behavior.
internal/extensionserver/post_translate_modify.go (1)

865-904: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

setEndpointMetadataBackendNamesetClusterMetadataBackendName의 코드 중복.

두 함수는 대상 타입(*clusterv3.Cluster vs *endpointv3.LbEndpoint)만 다를 뿐 메타데이터 초기화 및 필드 설정 로직이 완전히 동일합니다. internal/extensionserver/inferencepool.go에서 이미 적용한 것처럼(*corev3.Metadata를 직접 받는 공통 헬퍼 + 호출부에서 사전 초기화) 공통 함수로 추출하면 중복을 줄일 수 있습니다.

♻️ 리팩터링 제안
-func setClusterMetadataBackendName(cluster *clusterv3.Cluster, namespace, name, routeName string, routeRuleIndex, refIndex int) {
-	if cluster.Metadata == nil {
-		cluster.Metadata = &corev3.Metadata{}
-	}
-	if cluster.Metadata.FilterMetadata == nil {
-		cluster.Metadata.FilterMetadata = make(map[string]*structpb.Struct)
-	}
-	m, ok := cluster.Metadata.FilterMetadata[internalapi.InternalEndpointMetadataNamespace]
-	if !ok {
-		m = &structpb.Struct{}
-		cluster.Metadata.FilterMetadata[internalapi.InternalEndpointMetadataNamespace] = m
-	}
-	if m.Fields == nil {
-		m.Fields = make(map[string]*structpb.Value)
-	}
-	m.Fields[internalapi.InternalMetadataBackendNameKey] = structpb.NewStringValue(
-		internalapi.PerRouteRuleRefBackendName(namespace, name, routeName, routeRuleIndex, refIndex),
-	)
-}
-
-func setEndpointMetadataBackendName(endpoint *endpointv3.LbEndpoint, namespace, name, routeName string, routeRuleIndex, refIndex int) {
-	if endpoint.Metadata == nil {
-		endpoint.Metadata = &corev3.Metadata{}
-	}
-	if endpoint.Metadata.FilterMetadata == nil {
-		endpoint.Metadata.FilterMetadata = make(map[string]*structpb.Struct)
-	}
-	m, ok := endpoint.Metadata.FilterMetadata[internalapi.InternalEndpointMetadataNamespace]
-	if !ok {
-		m = &structpb.Struct{}
-		endpoint.Metadata.FilterMetadata[internalapi.InternalEndpointMetadataNamespace] = m
-	}
-	if m.Fields == nil {
-		m.Fields = make(map[string]*structpb.Value)
-	}
-	m.Fields[internalapi.InternalMetadataBackendNameKey] = structpb.NewStringValue(
-		internalapi.PerRouteRuleRefBackendName(namespace, name, routeName, routeRuleIndex, refIndex),
-	)
-}
+func setBackendNameMetadata(metadata *corev3.Metadata, namespace, name, routeName string, routeRuleIndex, refIndex int) *corev3.Metadata {
+	if metadata == nil {
+		metadata = &corev3.Metadata{}
+	}
+	if metadata.FilterMetadata == nil {
+		metadata.FilterMetadata = make(map[string]*structpb.Struct)
+	}
+	m, ok := metadata.FilterMetadata[internalapi.InternalEndpointMetadataNamespace]
+	if !ok {
+		m = &structpb.Struct{}
+		metadata.FilterMetadata[internalapi.InternalEndpointMetadataNamespace] = m
+	}
+	if m.Fields == nil {
+		m.Fields = make(map[string]*structpb.Value)
+	}
+	m.Fields[internalapi.InternalMetadataBackendNameKey] = structpb.NewStringValue(
+		internalapi.PerRouteRuleRefBackendName(namespace, name, routeName, routeRuleIndex, refIndex),
+	)
+	return metadata
+}
+
+func setClusterMetadataBackendName(cluster *clusterv3.Cluster, namespace, name, routeName string, routeRuleIndex, refIndex int) {
+	cluster.Metadata = setBackendNameMetadata(cluster.Metadata, namespace, name, routeName, routeRuleIndex, refIndex)
+}
+
+func setEndpointMetadataBackendName(endpoint *endpointv3.LbEndpoint, namespace, name, routeName string, routeRuleIndex, refIndex int) {
+	endpoint.Metadata = setBackendNameMetadata(endpoint.Metadata, namespace, name, routeName, routeRuleIndex, refIndex)
+}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/extensionserver/post_translate_modify.go` around lines 865 - 904,
Extract the duplicated metadata initialization and backend-name field assignment
from setClusterMetadataBackendName and setEndpointMetadataBackendName into a
shared helper accepting *corev3.Metadata. Have each caller initialize its target
Metadata when needed, then pass it to the helper while preserving the existing
namespace, key, and PerRouteRuleRefBackendName values.
tests/e2e/testupstream_test.go (1)

316-324: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

동일 manifest를 두 테스트가 각각 apply/delete 하면서 서로의 리소스를 정리합니다.

TestWithTestUpstream도 같은 testdata/testupstream.yaml을 apply하고 Cleanup에서 전체 삭제합니다. 이 테스트가 뒤에 실행되면 방금 삭제된 Gateway/EnvoyProxy를 다시 만들며 파드 재기동을 기다려야 하고, 반대 순서라면 앞선 테스트의 Cleanup이 이 테스트의 리소스까지 지웁니다. 또한 RequireWaitForGatewayPodReady가 Terminating 상태의 이전 파드를 ready로 판정할 여지가 있어 플레이키 가능성이 있습니다.

manifest를 TestMain/공유 setup으로 한 번만 적용하거나, 이 테스트를 TestWithTestUpstream의 서브테스트로 편입하는 편이 안전합니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/e2e/testupstream_test.go` around lines 316 - 324, Remove the per-test
manifest lifecycle from TestPromptCacheTranslationMatrix: share a single
setup/cleanup with TestWithTestUpstream, preferably by applying
testdata/testupstream.yaml once in TestMain or shared setup, or by making this
test a subtest of TestWithTestUpstream. Ensure both tests reuse the same
resources and cleanup occurs only after both complete, while retaining the
gateway readiness check.
internal/translator/anthropic_helper.go (1)

849-908: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

동일 이벤트를 다시 unmarshal하지 말고 SDK의 JSON.*.Valid() presence 메타데이터로 통일하세요. message_delta를 별도 익명 구조체로 한 번 더 파싱하기보다, input_tokens/캐시 토큰의 존재 여부를 SDK가 제공하는 필드 메타데이터로 처리하면 중복 로직을 줄일 수 있습니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/translator/anthropic_helper.go` around lines 849 - 908, Update
updateInputUsageFromMessageDelta to reuse the already parsed SDK message_delta
event instead of unmarshalling data into messageDeltaUsageFields again.
Determine presence of input_tokens, cache_read_input_tokens, and
cache_creation_input_tokens through each SDK JSON field’s Valid() metadata,
while preserving the existing cumulative Set behavior and fallback handling for
absent values.
internal/translator/openai_openai.go (1)

147-157: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

근본 원인은 Decode에 이중 포인터를 넘긴 것입니다.

resp가 이미 포인터이므로 Decode(resp)로 넘기면 JSON null은 no-op이 되어 nil이 될 수 없고, 별도 가드가 불필요합니다. 증상 방어보다 호출 자체를 고치는 편이 명확합니다.

♻️ 제안 리팩터
 	resp := &openai.ChatCompletionResponse{}
-	if err := json.NewDecoder(body).Decode(&resp); err != nil {
+	// Pass resp (not &resp): a JSON `null` body is then a no-op instead of
+	// nilling out the pointer.
+	if err := json.NewDecoder(body).Decode(resp); err != nil {
 		return nil, nil, tokenUsage, responseModel, fmt.Errorf("failed to unmarshal body: %w", err)
 	}
-	// A JSON `null` body decodes into a nil *resp without an error (the decode
-	// target is a **ChatCompletionResponse), which some upstreams return with a
-	// 200 status. Treat it as an empty response so we report zero usage and fall
-	// back to the request model, mirroring the streaming path, instead of
-	// dereferencing nil below.
-	if resp == nil {
-		resp = &openai.ChatCompletionResponse{}
-	}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/translator/openai_openai.go` around lines 147 - 157, Update the
response decoding in the relevant OpenAI translation flow to pass the existing
response pointer directly to json.Decoder.Decode instead of a pointer to that
pointer. Remove the now-unnecessary resp == nil fallback block, while preserving
the existing decode error handling and subsequent response processing.
internal/translator/openai_gcpvertexai.go (1)

453-471: 🎯 Functional Correctness | 🔵 Trivial | 💤 Low value

다중 candidate 스트림에서 streamedToolCall이 candidate 간 공유됩니다.

n > 1(다중 candidate) 응답에서 candidate 0이 tool call을 스트리밍하면 candidate 1의 정상 stoptool_calls로 바뀝니다. Gemini에서 흔한 경로는 아니지만, candidate index별로 플래그를 관리하는 편이 정확합니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/translator/openai_gcpvertexai.go` around lines 453 - 471, Update the
streamed tool-call tracking in the candidate conversion flow so each candidate
maintains its own flag instead of sharing `o.streamedToolCall`. Use the current
candidate index when recording tool calls and when converting a terminal `stop`
to `tool_calls`, preserving independent finish reasons for multi-candidate
streams.
internal/apischema/openai/openai.go (1)

1778-1826: 🗄️ Data Integrity & Integration | 🔵 Trivial | 🏗️ Heavy lift

EmbeddingRequest의 필드 중복으로 인한 잠재적 데이터 불일치 위험

최상위 EmbeddingBaseRequestOfCompletion/OfChat 내부의 EmbeddingBaseRequest가 서로 독립된 복사본입니다. UnmarshalJSON 경로에서는 항상 동기화되지만, MarshalJSON은 최상위 필드를 전혀 사용하지 않고 활성 변형(OfChat/OfCompletion)만 직렬화합니다. 반대로 internal/tracing/openinference/openai/request_attrs.gobuildEmbeddingsRequestAttributesembRequest.Model/EncodingFormat/Dimensions/User 등 최상위 필드만 읽습니다. 즉 두 값의 역할이 반대이며, 이는 이번 PR의 테스트 픽스처들(embeddings_test.go, embeddings_requests.go, tracing_test.go)이 모두 동일 값을 두 곳에 수동으로 중복 기입해야 하는 이유이기도 합니다. 향후 한쪽만 갱신하면 트레이싱 속성이 stale한 값을 담거나 직렬화된 요청 바디와 어긋날 수 있습니다.

접근자 메서드(func (r *EmbeddingRequest) GetModel() string 등)로 활성 변형에서 값을 읽도록 캡슐화하고 최상위 중복 필드를 제거하는 것을 권장합니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/apischema/openai/openai.go` around lines 1778 - 1826,
EmbeddingRequest duplicates EmbeddingBaseRequest and allows tracing attributes
to diverge from the serialized variant. Remove the promoted top-level
EmbeddingBaseRequest, update UnmarshalJSON and MarshalJSON to rely solely on
OfCompletion or OfChat, and add accessor methods such as GetModel,
GetEncodingFormat, GetDimensions, and GetUser that read from the active variant;
update buildEmbeddingsRequestAttributes and affected fixtures to use these
accessors.
internal/translator/openai_gcpvertexai_embeddings.go (2)

173-189: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

동일 에러를 반환하는 두 case를 병합할 수 있습니다.

openai.EmbeddingInputItem[]openai.EmbeddingInputItem case의 반환 문자열이 완전히 동일하므로 case A, B:로 합치면 중복이 사라집니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/translator/openai_gcpvertexai_embeddings.go` around lines 173 - 189,
Merge the openai.EmbeddingInputItem and []openai.EmbeddingInputItem branches in
collectInputTexts into a single combined case, preserving the existing identical
error response and behavior.

114-118: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

오류 메시지가 실제 원인과 어긋날 수 있습니다.

openAIEmbeddingToGeminiMessage는 predict 경로에서만 호출되고, 호출 지점(라인 309-311)에서 이미 OfChat != nil을 걸러냅니다. 따라서 여기 도달하는 OfCompletion == nil은 사실상 "input도 messages도 없는" 요청인데, 메시지는 멀티모달 미지원을 언급해 진단을 흐립니다. embedding request must have either input or messages 계열로 문구를 맞추는 것이 정확합니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/translator/openai_gcpvertexai_embeddings.go` around lines 114 - 118,
Update the nil-check in openAIEmbeddingToGeminiMessage so its error message
accurately states that the embedding request must provide either input or
messages, instead of mentioning unsupported multimodal messages. Preserve the
existing ErrInvalidRequestBody wrapping and model context.
internal/translator/openai_gcpvertexai_embeddings_test.go (2)

190-218: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

글로벌 vendor title 케이스 커버리지가 없습니다.

vendor 필드 TaskType 오버라이드 케이스는 있으나 Title 오버라이드 케이스는 없습니다. openai_gcpvertexai_embeddings.go 라인 148-153에서 지적한 title 적용 규칙(RETRIEVAL_DOCUMENT 제약)을 고정하려면 predict 경로에 대해 Title + 비-RETRIEVAL_DOCUMENT task type 조합 테스트를 추가해 주세요.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/translator/openai_gcpvertexai_embeddings_test.go` around lines 190 -
218, Extend the predict-path test cases around the existing global TaskType
override scenario to cover global vendor Title behavior. Add a case where Title
is set globally and the effective task type is not RETRIEVAL_DOCUMENT, asserting
the generated request includes the expected title according to the title
application rule; also preserve coverage that titles are constrained to
RETRIEVAL_DOCUMENT as implemented in the embedding translation flow.

595-598: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

에러 케이스에서 오류 분류까지 검증하면 좋겠습니다.

wantError 케이스가 require.Error만 확인하므로, 번역기가 internalapi.ErrInvalidRequestBody로 래핑하는지(= 4xx로 매핑되는지)는 검증되지 않습니다. require.ErrorIs(t, err, internalapi.ErrInvalidRequestBody)를 옵션 플래그로 추가하면 상태 코드 회귀를 잡을 수 있습니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/translator/openai_gcpvertexai_embeddings_test.go` around lines 595 -
598, Extend the wantError handling in the embedding translator test to
optionally assert that the error wraps internalapi.ErrInvalidRequestBody using
require.ErrorIs, while preserving cases that only require an error. Add and
apply a test-case flag for this classification check so 4xx mapping regressions
are covered.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@internal/controller/mcp_route.go`:
- Around line 596-604: URL 쿼리 파라미터를 구성하는 `fullPathPtr` 업데이트에서 `apiKeyLiteral`을
삽입하기 전에 `url.QueryEscape`로 인코딩하세요. `apiKey.QueryParam` 이름과 기존 경로·오류 처리 흐름은 유지하고,
Secret 평문을 HTTPRoute 매니페스트에 기록하는 기존 TODO는 별도 이슈 추적 대상으로 남겨두세요.

In `@internal/controller/referencegrant.go`:
- Around line 162-173: Update referenceGrantValidator.matchesTo to accept the
target resource name and, after validating group and kind, reject grants whose
to.Name is set unless it matches that target name; preserve wildcard behavior
when to.Name is unset, and update all callers to pass the referenced resource
name.

In `@internal/tracing/openinference/anthropic/messages.go`:
- Around line 273-277: Apply the same shared index validation used for
ContentBlockStart.Index to every SSE index path, including
ContentBlockDelta.Index and ContentBlockStop.Index, so negative and unreasonably
large values are skipped before indexing response.Content. Add a regression test
covering a negative delta index and verifying no panic occurs.

In `@internal/translator/anthropic_anthropic.go`:
- Around line 186-217: Validate all provider token counts against the uint32
range before conversions in the streaming usage update block, including
OutputTokens and each input/cache field; reject, error, or safely clamp
out-of-range values rather than wrapping. Also guard the rawInput + cacheRead +
cacheCreation sum against uint32 overflow before passing it to SetInputTokens,
while preserving valid usage updates in the surrounding streaming token
handling.

In `@internal/translator/anthropic_awsbedrock_test.go`:
- Around line 1561-1574: The subtest name and assertion in “system message is
added to existing system param” describe conflicting behavior. After fixing
promoteAnthropicSystemMessagesToParam to preserve and combine the existing
System prompt with promoted system messages, update this test’s expected
System.Text assertion to verify both values rather than the overwritten value.

In `@internal/translator/anthropic_awsbedrock.go`:
- Around line 184-188: Update promoteAnthropicSystemMessagesToParam in
internal/translator/anthropic_awsbedrock.go:184-188 to preserve existing
body.System text and append the promoted system text instead of replacing it.
Update the related assertions, subtest name, and comments in
internal/translator/anthropic_awsbedrock_test.go:1561-1574 to expect the merged
result.

In `@internal/translator/anthropic_helper.go`:
- Around line 1051-1052: Update the comment near the message_start token
handling to reflect that message_delta also supplies input_tokens and cache
token counts, as implemented in the message_delta handling around the relevant
token update logic; remove the inaccurate statement that only output_tokens is
used from message_delta.
- Around line 624-659: Update the outputConfigModels list used by
outputConfigAvailable to include the opus-5 model identifier, while leaving
modelContainsAny substring matching and the effortModels list unchanged.

In `@internal/translator/openai_gcpvertexai_embeddings_test.go`:
- Line 482: Update the wantBodyNotContain assertions in the data URI test to use
the serialized key "fileUri" instead of "fileURI", ensuring the test actually
verifies that no file URI field is generated.

In `@internal/translator/openai_gcpvertexai_embeddings.go`:
- Around line 148-153: Update the global title application in the
instance-building flow to set Title only when the request task type is
RETRIEVAL_DOCUMENT, matching the existing per-item handling. Preserve the
current iteration and empty-title guard, and prevent titles from being added for
other task types such as SEMANTIC_SIMILARITY.

---

Outside diff comments:
In `@internal/controller/mcp_route.go`:
- Around line 745-762: Move the stale credential Secret deletion from before the
HTTPRouteFilter update to after a successful `c.client.Update` in the existing
filter reconciliation flow. Preserve the current transition check and NotFound
handling, and return the same wrapped error if deletion fails; if the update
fails, return immediately without deleting the previous Secret.

In `@internal/extproc/processor_impl.go`:
- Around line 513-565: When invoking the auth handler h.Do, pass the current
request body for authentication even when wantBodyReplace is false, instead of
always using bodyMutation.GetBody(), which may be empty. Preserve
bodyMutation.GetBody() for replacement cases and ensure the handler receives the
actual current request body used by Envoy for hash/signature calculations.

---

Nitpick comments:
In `@internal/apischema/openai/openai.go`:
- Around line 1778-1826: EmbeddingRequest duplicates EmbeddingBaseRequest and
allows tracing attributes to diverge from the serialized variant. Remove the
promoted top-level EmbeddingBaseRequest, update UnmarshalJSON and MarshalJSON to
rely solely on OfCompletion or OfChat, and add accessor methods such as
GetModel, GetEncodingFormat, GetDimensions, and GetUser that read from the
active variant; update buildEmbeddingsRequestAttributes and affected fixtures to
use these accessors.

In `@internal/controller/gateway_test.go`:
- Around line 2841-2867: Extend
TestGatewayController_getObjectsForGatewaySameNamespace with a case that
constructs NewGatewayController using an empty envoyGatewayNamespace, then
verifies getObjectsForGateway still resolves the gateway’s namespace and returns
its matching pod and deployment. Preserve the existing non-empty namespace
assertions and use the same gateway-scoped test resources to lock in the
fallback behavior.

In `@internal/controller/mcp_route_test.go`:
- Around line 318-331: Update the MCP backend API key test cases to add a
SecretRef configuration with Header set to ptr.To("X-API-KEY"), and set
expCredentialHeader to that custom header while expecting the secret value
without a "Bearer " prefix. Ensure the case validates CredentialInjection.Header
propagation and the custom-header behavior.

In `@internal/controller/mcp_route.go`:
- Around line 798-817: Update the existing Secret path in the credential
reconciliation logic to also synchronize its ownerReferences from desired, not
only existing.Data. Ensure the controller reference is applied when updating an
already-present Secret, while preserving the current update condition and error
handling.

In `@internal/extensionserver/post_translate_modify.go`:
- Around line 865-904: Extract the duplicated metadata initialization and
backend-name field assignment from setClusterMetadataBackendName and
setEndpointMetadataBackendName into a shared helper accepting *corev3.Metadata.
Have each caller initialize its target Metadata when needed, then pass it to the
helper while preserving the existing namespace, key, and
PerRouteRuleRefBackendName values.

In `@internal/translator/anthropic_helper.go`:
- Around line 849-908: Update updateInputUsageFromMessageDelta to reuse the
already parsed SDK message_delta event instead of unmarshalling data into
messageDeltaUsageFields again. Determine presence of input_tokens,
cache_read_input_tokens, and cache_creation_input_tokens through each SDK JSON
field’s Valid() metadata, while preserving the existing cumulative Set behavior
and fallback handling for absent values.

In `@internal/translator/openai_gcpvertexai_embeddings_test.go`:
- Around line 190-218: Extend the predict-path test cases around the existing
global TaskType override scenario to cover global vendor Title behavior. Add a
case where Title is set globally and the effective task type is not
RETRIEVAL_DOCUMENT, asserting the generated request includes the expected title
according to the title application rule; also preserve coverage that titles are
constrained to RETRIEVAL_DOCUMENT as implemented in the embedding translation
flow.
- Around line 595-598: Extend the wantError handling in the embedding translator
test to optionally assert that the error wraps internalapi.ErrInvalidRequestBody
using require.ErrorIs, while preserving cases that only require an error. Add
and apply a test-case flag for this classification check so 4xx mapping
regressions are covered.

In `@internal/translator/openai_gcpvertexai_embeddings.go`:
- Around line 173-189: Merge the openai.EmbeddingInputItem and
[]openai.EmbeddingInputItem branches in collectInputTexts into a single combined
case, preserving the existing identical error response and behavior.
- Around line 114-118: Update the nil-check in openAIEmbeddingToGeminiMessage so
its error message accurately states that the embedding request must provide
either input or messages, instead of mentioning unsupported multimodal messages.
Preserve the existing ErrInvalidRequestBody wrapping and model context.

In `@internal/translator/openai_gcpvertexai.go`:
- Around line 453-471: Update the streamed tool-call tracking in the candidate
conversion flow so each candidate maintains its own flag instead of sharing
`o.streamedToolCall`. Use the current candidate index when recording tool calls
and when converting a terminal `stop` to `tool_calls`, preserving independent
finish reasons for multi-candidate streams.

In `@internal/translator/openai_openai.go`:
- Around line 147-157: Update the response decoding in the relevant OpenAI
translation flow to pass the existing response pointer directly to
json.Decoder.Decode instead of a pointer to that pointer. Remove the
now-unnecessary resp == nil fallback block, while preserving the existing decode
error handling and subsequent response processing.

In `@tests/e2e/testupstream_test.go`:
- Around line 316-324: Remove the per-test manifest lifecycle from
TestPromptCacheTranslationMatrix: share a single setup/cleanup with
TestWithTestUpstream, preferably by applying testdata/testupstream.yaml once in
TestMain or shared setup, or by making this test a subtest of
TestWithTestUpstream. Ensure both tests reuse the same resources and cleanup
occurs only after both complete, while retaining the gateway readiness check.
🪄 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: CHILL

Plan: Pro

Run ID: 277690ab-dc0d-4f7e-885c-a0a09cd7a36d

📥 Commits

Reviewing files that changed from the base of the PR and between 7983c22 and 36fea2b.

⛔ Files ignored due to path filters (4)
  • go.sum is excluded by !**/*.sum
  • site/package-lock.json is excluded by !**/package-lock.json
  • site/static/img/adopters/stacklok.png is excluded by !**/*.png
  • tools/go.sum is excluded by !**/*.sum
📒 Files selected for processing (97)
  • .github/workflows/build_and_test.yaml
  • .github/workflows/codeql.yaml
  • .github/workflows/docker_build_job.yaml
  • .github/workflows/release.yaml
  • .gitignore
  • RELEASES.md
  • SECURITY.md
  • api/v1alpha1/quota_policy.go
  • api/v1beta1/mcp_route.go
  • cmd/aigw/translate.go
  • cmd/controller/main.go
  • cmd/controller/main_test.go
  • go.mod
  • internal/apischema/gcp/gcp.go
  • internal/apischema/openai/openai.go
  • internal/apischema/openai/vendor_fields_test.go
  • internal/bodymutator/body_mutator.go
  • internal/controller/ai_gateway_route.go
  • internal/controller/ai_gateway_route_test.go
  • internal/controller/controller.go
  • internal/controller/gateway.go
  • internal/controller/gateway_test.go
  • internal/controller/mcp_route.go
  • internal/controller/mcp_route_test.go
  • internal/controller/referencegrant.go
  • internal/controller/referencegrant_test.go
  • internal/endpointspec/endpointspec_test.go
  • internal/extensionserver/extensionserver_test.go
  • internal/extensionserver/inferencepool.go
  • internal/extensionserver/post_translate_modify.go
  • internal/extensionserver/post_translate_modify_test.go
  • internal/extproc/processor_impl.go
  • internal/extproc/processor_impl_test.go
  • internal/extproc/util.go
  • internal/extproc/util_test.go
  • internal/filterapi/filterconfig.go
  • internal/filterapi/filterconfig_test.go
  • internal/internalapi/internalapi.go
  • internal/mcpproxy/config.go
  • internal/mcpproxy/handlers.go
  • internal/mcpproxy/handlers_test.go
  • internal/mcpproxy/mcpproxy.go
  • internal/mcpproxy/mcpproxy_test.go
  • internal/pprof/pprof.go
  • internal/tracing/openinference/anthropic/messages.go
  • internal/tracing/openinference/anthropic/messages_test.go
  • internal/tracing/openinference/openai/embeddings_test.go
  • internal/tracing/openinference/openai/request_attrs.go
  • internal/tracing/tracing_test.go
  • internal/translator/anthropic_anthropic.go
  • internal/translator/anthropic_anthropic_test.go
  • internal/translator/anthropic_awsbedrock.go
  • internal/translator/anthropic_awsbedrock_test.go
  • internal/translator/anthropic_helper.go
  • internal/translator/anthropic_helper_test.go
  • internal/translator/anthropic_openai_test.go
  • internal/translator/gemini_helper.go
  • internal/translator/gemini_helper_test.go
  • internal/translator/openai_awsanthropic_test.go
  • internal/translator/openai_awsbedrock.go
  • internal/translator/openai_awsbedrock_embeddings.go
  • internal/translator/openai_awsbedrock_embeddings_test.go
  • internal/translator/openai_awsbedrock_test.go
  • internal/translator/openai_gcpanthropic_test.go
  • internal/translator/openai_gcpvertexai.go
  • internal/translator/openai_gcpvertexai_embeddings.go
  • internal/translator/openai_gcpvertexai_embeddings_test.go
  • internal/translator/openai_gcpvertexai_test.go
  • internal/translator/openai_openai.go
  • internal/translator/openai_openai_test.go
  • manifests/charts/ai-gateway-crds-helm/templates/aigateway.envoyproxy.io_mcproutes.yaml
  • manifests/charts/ai-gateway-crds-helm/templates/aigateway.envoyproxy.io_quotapolicies.yaml
  • manifests/charts/ai-gateway-helm/templates/_helpers.tpl
  • manifests/charts/ai-gateway-helm/templates/deployment.yaml
  • manifests/charts/ai-gateway-helm/templates/envoy_gateway_cluster_role_for_inference_pool.yaml
  • manifests/charts/ai-gateway-helm/templates/serviceaccount.yaml
  • site/blog/authors.yml
  • site/docs/_vars.json
  • site/docs/api/api.mdx
  • site/docs/capabilities/index.md
  • site/docs/capabilities/traffic/index.md
  • site/docs/capabilities/traffic/quota-policy.md
  • site/docs/capabilities/traffic/usage-based-ratelimiting.md
  • site/docs/compatibility.md
  • site/docusaurus.config.ts
  • site/package.json
  • site/src/components/HomepageFeatures/index.tsx
  • site/src/data/adopters/adopters.json
  • site/src/data/talks.json
  • site/versioned_docs/version-0.7/_vars.json
  • site/versioned_docs/version-0.7/compatibility.md
  • tests/data-plane/testupstream_test.go
  • tests/e2e/testdata/testupstream.yaml
  • tests/e2e/testupstream_test.go
  • tests/internal/testopenai/embeddings_requests.go
  • tests/internal/testopenai/openai_test.go
  • tools/go.mod

Comment on lines 596 to 604
case apiKey.QueryParam != nil:
// Query parameter injection cannot use Envoy Gateway's credentialInjection filter;
// embed directly in the URL rewrite path.
// TODO: evaluate alternatives to avoid embedding the secret in the HTTPRoute manifest.
apiKeyLiteral, err := c.readAPIKey(ctx, mcpRoute.Namespace, apiKey)
if err != nil {
return gwapiv1.HTTPRouteRule{}, fmt.Errorf("failed to read API key for backend %s: %w", ref.Name, err)
}
fullPathPtr = fmt.Sprintf("%s?%s=%s", fullPathPtr, *apiKey.QueryParam, apiKeyLiteral)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

쿼리 파라미터에 API 키를 URL 인코딩 없이 삽입합니다.

apiKeyLiteral&, =, #, 공백 등이 포함되면 rewrite된 경로가 깨지거나 의도치 않은 추가 파라미터로 해석됩니다. 최소한 url.QueryEscape를 적용해야 합니다. 아울러 SecretRef + QueryParam 조합에서는 Secret 평문이 HTTPRoute 매니페스트에 그대로 기록되므로, 기존 TODO를 이슈로 트래킹하는 것을 권합니다.

🐛 제안 수정
-			fullPathPtr = fmt.Sprintf("%s?%s=%s", fullPathPtr, *apiKey.QueryParam, apiKeyLiteral)
+			fullPathPtr = fmt.Sprintf("%s?%s=%s", fullPathPtr,
+				url.QueryEscape(*apiKey.QueryParam), url.QueryEscape(apiKeyLiteral))

원하시면 TODO 추적용 이슈를 대신 생성해 드릴까요?

📝 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.

Suggested change
case apiKey.QueryParam != nil:
// Query parameter injection cannot use Envoy Gateway's credentialInjection filter;
// embed directly in the URL rewrite path.
// TODO: evaluate alternatives to avoid embedding the secret in the HTTPRoute manifest.
apiKeyLiteral, err := c.readAPIKey(ctx, mcpRoute.Namespace, apiKey)
if err != nil {
return gwapiv1.HTTPRouteRule{}, fmt.Errorf("failed to read API key for backend %s: %w", ref.Name, err)
}
fullPathPtr = fmt.Sprintf("%s?%s=%s", fullPathPtr, *apiKey.QueryParam, apiKeyLiteral)
case apiKey.QueryParam != nil:
// Query parameter injection cannot use Envoy Gateway's credentialInjection filter;
// embed directly in the URL rewrite path.
// TODO: evaluate alternatives to avoid embedding the secret in the HTTPRoute manifest.
apiKeyLiteral, err := c.readAPIKey(ctx, mcpRoute.Namespace, apiKey)
if err != nil {
return gwapiv1.HTTPRouteRule{}, fmt.Errorf("failed to read API key for backend %s: %w", ref.Name, err)
}
fullPathPtr = fmt.Sprintf("%s?%s=%s", fullPathPtr,
url.QueryEscape(*apiKey.QueryParam), url.QueryEscape(apiKeyLiteral))
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/controller/mcp_route.go` around lines 596 - 604, URL 쿼리 파라미터를 구성하는
`fullPathPtr` 업데이트에서 `apiKeyLiteral`을 삽입하기 전에 `url.QueryEscape`로 인코딩하세요.
`apiKey.QueryParam` 이름과 기존 경로·오류 처리 흐름은 유지하고, Secret 평문을 HTTPRoute 매니페스트에 기록하는
기존 TODO는 별도 이슈 추적 대상으로 남겨두세요.

Comment on lines +162 to 173
// matchesTo checks if a ReferenceGrantTo matches the target resource identified by targetGroup/targetKind.
func (v *referenceGrantValidator) matchesTo(to *gwapiv1b1.ReferenceGrantTo, targetGroup gwapiv1b1.Group, targetKind gwapiv1b1.Kind) bool {
// Check group
if to.Group != aiServiceBackendGroup {
if to.Group != targetGroup {
return false
}

// Check kind
if to.Kind != aiServiceBackendKind {
if to.Kind != targetKind {
return false
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

to.Name이 지정된 ReferenceGrant도 무조건 허용됩니다.

Gateway API 스펙에서 ReferenceGrantTo.Name이 설정되면 해당 이름의 리소스만 허용해야 합니다. 현재는 group/kind만 비교하므로, 특정 InferencePool/AIServiceBackend 하나만 허용하려는 grant가 같은 kind의 모든 리소스를 허용하게 됩니다. 이번 변경으로 이 과허용이 InferencePool 참조까지 확대됩니다.

🔒 제안 수정 (targetName 전달 필요)
-func (v *referenceGrantValidator) matchesTo(to *gwapiv1b1.ReferenceGrantTo, targetGroup gwapiv1b1.Group, targetKind gwapiv1b1.Kind) bool {
+func (v *referenceGrantValidator) matchesTo(to *gwapiv1b1.ReferenceGrantTo, targetGroup gwapiv1b1.Group, targetKind gwapiv1b1.Kind, targetName string) bool {
 	// Check group
 	if to.Group != targetGroup {
 		return false
 	}
 
 	// Check kind
 	if to.Kind != targetKind {
 		return false
 	}
+
+	// When Name is set, only that specific resource is allowed.
+	if to.Name != nil && *to.Name != "" && string(*to.Name) != targetName {
+		return false
+	}
 
 	return true
 }
📝 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.

Suggested change
// matchesTo checks if a ReferenceGrantTo matches the target resource identified by targetGroup/targetKind.
func (v *referenceGrantValidator) matchesTo(to *gwapiv1b1.ReferenceGrantTo, targetGroup gwapiv1b1.Group, targetKind gwapiv1b1.Kind) bool {
// Check group
if to.Group != aiServiceBackendGroup {
if to.Group != targetGroup {
return false
}
// Check kind
if to.Kind != aiServiceBackendKind {
if to.Kind != targetKind {
return false
}
// matchesTo checks if a ReferenceGrantTo matches the target resource identified by targetGroup/targetKind.
func (v *referenceGrantValidator) matchesTo(to *gwapiv1b1.ReferenceGrantTo, targetGroup gwapiv1b1.Group, targetKind gwapiv1b1.Kind, targetName string) bool {
// Check group
if to.Group != targetGroup {
return false
}
// Check kind
if to.Kind != targetKind {
return false
}
// When Name is set, only that specific resource is allowed.
if to.Name != nil && *to.Name != "" && string(*to.Name) != targetName {
return false
}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/controller/referencegrant.go` around lines 162 - 173, Update
referenceGrantValidator.matchesTo to accept the target resource name and, after
validating group and kind, reject grants whose to.Name is set unless it matches
that target name; preserve wildcard behavior when to.Name is unset, and update
all callers to pass the referenced resource name.

Comment on lines +273 to +277
// Guard against negative or unreasonably large indices from a hostile upstream.
const maxContentBlocks = 1000
if idx < 0 || idx >= maxContentBlocks {
continue
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

모든 SSE 인덱스 경로에 음수 범위 검사를 적용해야 합니다.

현재 검사는 ContentBlockStart.Index에만 적용됩니다. ContentBlockDelta.Indexidx < len(response.Content)만 확인하므로 음수 값이 통과하고, Line 289에서 response.Content[-1] 접근으로 panic이 발생할 수 있습니다. ContentBlockStop.Index도 동일한 공통 검증을 사용하도록 수정하고 음수 delta 회귀 테스트를 추가해 주세요.

수정 예시
 		case event.ContentBlockDelta != nil:
 			idx := event.ContentBlockDelta.Index
-			if idx < len(response.Content) {
+			if idx >= 0 && idx < len(response.Content) {
 				block := &response.Content[idx]
 				delta := event.ContentBlockDelta.Delta
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/tracing/openinference/anthropic/messages.go` around lines 273 - 277,
Apply the same shared index validation used for ContentBlockStart.Index to every
SSE index path, including ContentBlockDelta.Index and ContentBlockStop.Index, so
negative and unreasonably large values are skipped before indexing
response.Content. Add a regression test covering a negative delta index and
verifying no panic occurs.

Comment on lines 186 to +217
if u.OutputTokens >= 0 {
a.streamingTokenUsage.SetOutputTokens(uint32(u.OutputTokens)) //nolint:gosec
}
// Merge the input/cache counts per field rather than replacing the whole usage snapshot:
// a delta may report only the fields that apply (the rest arrive as zero), so overwriting
// every field would clobber values already set on message_start. We can only treat a field
// as "present" when it is non-zero, since the upstream usage fields are not pointers.
if u.InputTokens > 0 || u.CacheReadInputTokens > 0 || u.CacheCreationInputTokens > 0 {
// The unified input_tokens is the sum of raw input + cache-read + cache-creation, so
// recover the latest known value of each component and overwrite only the ones present
// on this delta before recomputing the sum.
cacheRead, _ := a.streamingTokenUsage.CachedInputTokens()
cacheCreation, _ := a.streamingTokenUsage.CacheCreationInputTokens()
unifiedInput, _ := a.streamingTokenUsage.InputTokens()
var rawInput uint32
if unifiedInput >= cacheRead+cacheCreation {
rawInput = unifiedInput - cacheRead - cacheCreation
}

if u.InputTokens > 0 {
rawInput = uint32(u.InputTokens) //nolint:gosec
}
if u.CacheReadInputTokens > 0 {
cacheRead = uint32(u.CacheReadInputTokens) //nolint:gosec
}
if u.CacheCreationInputTokens > 0 {
cacheCreation = uint32(u.CacheCreationInputTokens) //nolint:gosec
}

a.streamingTokenUsage.SetCachedInputTokens(cacheRead)
a.streamingTokenUsage.SetCacheCreationInputTokens(cacheCreation)
a.streamingTokenUsage.SetInputTokens(rawInput + cacheRead + cacheCreation)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

토큰 수를 uint32로 변환하기 전에 상한을 검증하세요.

현재 음수만 일부 걸러내므로 math.MaxUint32를 초과하는 provider 값과 rawInput + cacheRead + cacheCreation 합계가 조용히 wrap됩니다. 잘못된 스트리밍 사용량이 기록되지 않도록 범위 검증 후 오류 처리 또는 안전한 상한 처리를 적용하세요.

🧰 Tools
🪛 ast-grep (0.44.1)

[warning] 186-186: Narrowing a non-constant integer to a smaller fixed-width type (int8/int16/int32, uint8/uint16/uint32) can silently overflow or wrap, yielding negative or truncated values that are dangerous in size, length, or index logic. Validate the source value is within the target type's range before converting (e.g. bounds-check, or use a checked helper), and avoid narrowing untrusted or len()/parsed values.
Context: uint32(u.OutputTokens)
Note: [CWE-190] Integer Overflow or Wraparound.

(integer-overflow-narrowing-conversion-go)


[warning] 205-205: Narrowing a non-constant integer to a smaller fixed-width type (int8/int16/int32, uint8/uint16/uint32) can silently overflow or wrap, yielding negative or truncated values that are dangerous in size, length, or index logic. Validate the source value is within the target type's range before converting (e.g. bounds-check, or use a checked helper), and avoid narrowing untrusted or len()/parsed values.
Context: uint32(u.InputTokens)
Note: [CWE-190] Integer Overflow or Wraparound.

(integer-overflow-narrowing-conversion-go)


[warning] 208-208: Narrowing a non-constant integer to a smaller fixed-width type (int8/int16/int32, uint8/uint16/uint32) can silently overflow or wrap, yielding negative or truncated values that are dangerous in size, length, or index logic. Validate the source value is within the target type's range before converting (e.g. bounds-check, or use a checked helper), and avoid narrowing untrusted or len()/parsed values.
Context: uint32(u.CacheReadInputTokens)
Note: [CWE-190] Integer Overflow or Wraparound.

(integer-overflow-narrowing-conversion-go)


[warning] 211-211: Narrowing a non-constant integer to a smaller fixed-width type (int8/int16/int32, uint8/uint16/uint32) can silently overflow or wrap, yielding negative or truncated values that are dangerous in size, length, or index logic. Validate the source value is within the target type's range before converting (e.g. bounds-check, or use a checked helper), and avoid narrowing untrusted or len()/parsed values.
Context: uint32(u.CacheCreationInputTokens)
Note: [CWE-190] Integer Overflow or Wraparound.

(integer-overflow-narrowing-conversion-go)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/translator/anthropic_anthropic.go` around lines 186 - 217, Validate
all provider token counts against the uint32 range before conversions in the
streaming usage update block, including OutputTokens and each input/cache field;
reject, error, or safely clamp out-of-range values rather than wrapping. Also
guard the rawInput + cacheRead + cacheCreation sum against uint32 overflow
before passing it to SetInputTokens, while preserving valid usage updates in the
surrounding streaming token handling.

Source: Linters/SAST tools

Comment on lines +1561 to +1574
t.Run("system message is added to existing system param", func(t *testing.T) {
body := &anthropicschema.MessagesRequest{
System: &anthropicschema.SystemPrompt{Text: "You are Claude."},
Messages: []anthropicschema.MessageParam{
{Role: "system", Content: anthropicschema.MessageContent{Text: "Be concise."}},
{Role: anthropicschema.MessageRoleUser, Content: anthropicschema.MessageContent{Text: "Hi"}},
},
}
result := promoteAnthropicSystemMessagesToParam(body)
require.Len(t, result, 1)
require.NotNil(t, body.System)
// The existing system param is overwritten by the promoted messages.
require.Equal(t, "Be concise.", body.System.Text)
})

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

서브테스트 이름과 실제 검증 동작이 반대입니다.

이름은 "added to existing system param"인데 단정문은 기존 값("You are Claude.")이 사라지고 "Be concise."만 남는 덮어쓰기를 고정하고 있습니다. promoteAnthropicSystemMessagesToParam의 유실 동작(해당 파일 코멘트 참고)을 수정하면 기대값과 이름을 함께 갱신해야 합니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/translator/anthropic_awsbedrock_test.go` around lines 1561 - 1574,
The subtest name and assertion in “system message is added to existing system
param” describe conflicting behavior. After fixing
promoteAnthropicSystemMessagesToParam to preserve and combine the existing
System prompt with promoted system messages, update this test’s expected
System.Text assertion to verify both values rather than the overwritten value.

Comment on lines +184 to +188
if len(systemTexts) > 0 {
systemText := strings.Join(systemTexts, "\n")
body.System = &anthropicschema.SystemPrompt{Text: systemText}
}
return filtered

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

promoteAnthropicSystemMessagesToParam이 기존 top-level system을 덮어쓰며, 테스트가 그 유실을 고정하고 있습니다. 하나의 루트 원인은 승격 결과를 기존 body.System과 병합하지 않고 무조건 대체하는 것입니다.

  • internal/translator/anthropic_awsbedrock.go#L184-L188: 기존 body.System의 텍스트를 유지한 뒤 승격된 텍스트를 이어붙이도록 변경하세요.
  • internal/translator/anthropic_awsbedrock_test.go#L1561-L1574: 병합 동작을 기대하도록 단정문을 수정하고 서브테스트 이름과 주석도 일치시키세요.
📍 Affects 2 files
  • internal/translator/anthropic_awsbedrock.go#L184-L188 (this comment)
  • internal/translator/anthropic_awsbedrock_test.go#L1561-L1574
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/translator/anthropic_awsbedrock.go` around lines 184 - 188, Update
promoteAnthropicSystemMessagesToParam in
internal/translator/anthropic_awsbedrock.go:184-188 to preserve existing
body.System text and append the promoted system text instead of replacing it.
Update the related assertions, subtest name, and comments in
internal/translator/anthropic_awsbedrock_test.go:1561-1574 to expect the merged
result.

Comment on lines +624 to 659
// Structured outputs are available on Claude Fable 5, Claude Mythos 5, Claude Opus 4.8, Claude Mythos Preview,
// Claude Opus 4.7, Claude Opus 4.6, Claude Sonnet 5, Claude Sonnet 4.6, Claude Sonnet 4.5, Claude Opus 4.5, and Claude Haiku 4.5.
// See: https://platform.claude.com/docs/en/build-with-claude/structured-outputs
var outputConfigModels = []string{
"opus-4-5", // Claude Opus 4.5
"sonnet-4-5", // Claude Sonnet 4.5
"haiku-4-5", // Claude Haiku 4.5
"opus-4-6", // Claude Opus 4.6
"sonnet-4-6", // Claude Sonnet 4.6
"opus-4-5", // Claude Opus 4.5
"sonnet-4-5", // Claude Sonnet 4.5
"haiku-4-5", // Claude Haiku 4.5
"opus-4-6", // Claude Opus 4.6
"sonnet-4-6", // Claude Sonnet 4.6
"opus-4-7", // Claude Opus 4.7
"opus-4-8", // Claude Opus 4.8
"sonnet-5", // Claude Sonnet 5
"fable-5", // Claude Fable 5
"mythos-5", // Claude Mythos 5
"mythos-preview", // Claude Mythos Preview
}

func outputConfigAvailable(model internalapi.RequestModel) bool {
return modelContainsAny(model, outputConfigModels)
}

// effortModels lists model identifiers that support the output_config.effort parameter.
// The effort parameter is supported by Claude Mythos Preview, Claude Opus 4.7, Claude Opus 4.6, Claude Sonnet 4.6, and Claude Opus 4.5.
// The effort parameter is supported by Claude Fable 5, Claude Mythos 5, Claude Opus 4.8, Claude Mythos Preview,
// Claude Opus 4.7, Claude Opus 4.6, Claude Sonnet 5, Claude Sonnet 4.6, and Claude Opus 4.5.
// See: https://platform.claude.com/docs/en/build-with-claude/effort
var effortModels = []string{
"opus-4-5", // Claude Opus 4.5
"opus-4-6", // Claude Opus 4.6
"opus-4-7", // Claude Opus 4.7
"opus-4-8", // Claude Opus 4.8
"sonnet-4-6", // Claude Sonnet 4.6
"sonnet-5", // Claude Sonnet 5
"fable-5", // Claude Fable 5
"mythos-5", // Claude Mythos 5
"mythos-preview", // Claude Mythos Preview
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🌐 Web query:

Claude structured outputs and output_config effort supported models list

💡 Result:

As of July 28, 2026, Claude structured outputs are generally available (GA) and rely on the output_config.format parameter [1][2]. The previous top-level output_format parameter and associated beta headers (e.g., structured-outputs-2025-11-13) are deprecated and may cause 400 errors [1][2][3]. The output_config object can also support an effort parameter alongside format, allowing you to specify the model's processing effort (e.g., "low", "medium", "high", "max") [2][4]. Supported Models Structured outputs are generally available across Anthropic's current model lineup, including: - Claude Opus 5, Opus 4.8, Opus 4.7, Opus 4.6, and Opus 4.5 [1][5] - Claude Sonnet 5, Sonnet 4.6, and Sonnet 4.5 [1][5] - Claude Haiku 4.5 [1][5] - Claude Mythos 5 and Claude Mythos Preview [1][5] - Claude Fable 5 [1] Note: Feature support can vary slightly by deployment platform (e.g., native Claude API, Amazon Bedrock, Google Cloud Vertex AI, or Microsoft Foundry) [1][6]. For the most accurate, real-time verification of supported capabilities for a specific model ID, it is recommended to query the Anthropic Models API directly [5]. Implementation Details - Parameter Structure: Use output_config: {"format": {"type": "json_schema", "schema": {...}}, "effort": "..."} [2][4]. - Schema Requirements: The schema must be a valid JSON Schema [1]. Limitations include requiring additionalProperties: false for all objects and the exclusion of certain complex constraints (like specific string-length or numerical range limits) [6][4]. - SDK Integration: Most current SDKs require the use of output_config directly, though some helper methods (like Python's client.messages.parse()) may internally map legacy parameters for convenience [7].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Map the relevant file first.
ast-grep outline internal/translator/anthropic_helper.go --view expanded

# Find the helper and related model-matching logic.
rg -n "func modelContainsAny|modelContainsAny\\(|outputConfigModels|effortModels|outputConfigAvailable|effort" internal/translator/anthropic_helper.go internal/translator -S

Repository: inflearn/ai-gateway

Length of output: 14285


🏁 Script executed:

#!/bin/bash
set -euo pipefail

sed -n '608,670p' internal/translator/anthropic_helper.go

printf '\n--- tests ---\n'
sed -n '730,780p' internal/translator/anthropic_helper_test.go
printf '\n--- more tests ---\n'
sed -n '1138,1168p' internal/translator/anthropic_helper_test.go
printf '\n--- build params tests ---\n'
sed -n '1268,1495p' internal/translator/anthropic_helper_test.go

Repository: inflearn/ai-gateway

Length of output: 13638


🏁 Script executed:

#!/bin/bash
set -euo pipefail

sed -n '687,760p' internal/translator/anthropic_helper.go

printf '\n--- model override helpers ---\n'
rg -n "ModelNameOverride|featureCheckModel|modelNameOverride|normalize.*model|RequestModel" internal -S

Repository: inflearn/ai-gateway

Length of output: 48155


🏁 Script executed:

#!/bin/bash
set -euo pipefail

sed -n '680,760p' internal/translator/anthropic_helper_test.go
printf '\n---\n'
sed -n '1120,1165p' internal/translator/anthropic_helper_test.go

Repository: inflearn/ai-gateway

Length of output: 3166


opus-5outputConfigModels에 추가하세요. 현재 문서 기준으로 Claude Opus 5도 structured outputs를 지원하므로, 이 항목이 빠지면 해당 모델에서 OutputConfig가 비활성화됩니다. modelContainsAny의 부분 문자열 매칭은 벤더 접두사/버전 접미사가 붙은 실제 모델명을 처리하려는 의도라 그대로 두면 됩니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/translator/anthropic_helper.go` around lines 624 - 659, Update the
outputConfigModels list used by outputConfigAvailable to include the opus-5
model identifier, while leaving modelContainsAny substring matching and the
effortModels list unchanged.

Comment on lines +1051 to +1052
// Set all input token counts (input, cache read, cache creation) from message_start.
// message_delta may also contain these fields but only output_tokens is used from it.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

주석이 변경된 동작과 모순됩니다.

이제 message_delta에서 input_tokens/캐시 토큰도 반영하므로(1138) "only output_tokens is used from it"은 사실과 다릅니다.

📝 주석 수정 제안
 		// Set all input token counts (input, cache read, cache creation) from message_start.
-		// message_delta may also contain these fields but only output_tokens is used from it.
+		// message_delta may report corrected/late values for these fields; those are merged
+		// per field later via updateInputUsageFromMessageDelta.
📝 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.

Suggested change
// Set all input token counts (input, cache read, cache creation) from message_start.
// message_delta may also contain these fields but only output_tokens is used from it.
// Set all input token counts (input, cache read, cache creation) from message_start.
// message_delta may report corrected/late values for these fields; those are merged
// per field later via updateInputUsageFromMessageDelta.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/translator/anthropic_helper.go` around lines 1051 - 1052, Update the
comment near the message_start token handling to reflect that message_delta also
supplies input_tokens and cache token counts, as implemented in the
message_delta handling around the relevant token update logic; remove the
inaccurate statement that only output_tokens is used from message_delta.

`"inlineData"`,
`"mimeType":"image/png"`,
},
wantBodyNotContain: []string{`"instances"`, `"parameters"`, `"fileURI"`},

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

"fileURI" 단정은 실제로 아무것도 검증하지 못합니다.

genai가 직렬화하는 키는 fileUri(라인 449에서 확인)이므로 "fileURI"에 대한 NotContains는 항상 통과합니다. data URI 케이스에서 파일 URI가 생성되지 않았음을 확인하려면 실제 키 표기를 써야 합니다.

💚 제안 수정
-			wantBodyNotContain: []string{`"instances"`, `"parameters"`, `"fileURI"`},
+			wantBodyNotContain: []string{`"instances"`, `"parameters"`, `"fileUri"`},
📝 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.

Suggested change
wantBodyNotContain: []string{`"instances"`, `"parameters"`, `"fileURI"`},
wantBodyNotContain: []string{`"instances"`, `"parameters"`, `"fileUri"`},
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/translator/openai_gcpvertexai_embeddings_test.go` at line 482,
Update the wantBodyNotContain assertions in the data URI test to use the
serialized key "fileUri" instead of "fileURI", ensuring the test actually
verifies that no file URI field is generated.

Comment on lines +148 to +153
// Apply global title to all instances if specified.
if openAIReq.Title != "" {
for _, instance := range instances {
instance.Title = openAIReq.Title
}
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

글로벌 titleRETRIEVAL_DOCUMENT 이외 task type에도 무조건 적용됩니다.

같은 파일의 per-item 경로(라인 61-65, 74-76)는 GCP 제약에 따라 TaskType == RETRIEVAL_DOCUMENT일 때만 Title을 설정합니다. 반면 여기서는 task type과 무관하게 모든 instance에 title을 붙이므로, 예를 들어 taskType: SEMANTIC_SIMILARITY + title 조합이면 Vertex AI가 요청을 거부할 수 있습니다. 같은 게이트를 적용하는 편이 일관됩니다.

🐛 제안 수정
 		// Apply global title to all instances if specified.
-		if openAIReq.Title != "" {
+		// Title is only valid with task_type=RETRIEVAL_DOCUMENT.
+		if openAIReq.Title != "" {
 			for _, instance := range instances {
-				instance.Title = openAIReq.Title
+				if instance.TaskType == openai.EmbeddingTaskTypeRetrievalDocument {
+					instance.Title = openAIReq.Title
+				}
 			}
 		}
📝 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.

Suggested change
// Apply global title to all instances if specified.
if openAIReq.Title != "" {
for _, instance := range instances {
instance.Title = openAIReq.Title
}
}
// Apply global title to all instances if specified.
// Title is only valid with task_type=RETRIEVAL_DOCUMENT.
if openAIReq.Title != "" {
for _, instance := range instances {
if instance.TaskType == openai.EmbeddingTaskTypeRetrievalDocument {
instance.Title = openAIReq.Title
}
}
}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/translator/openai_gcpvertexai_embeddings.go` around lines 148 - 153,
Update the global title application in the instance-building flow to set Title
only when the request task type is RETRIEVAL_DOCUMENT, matching the existing
per-item handling. Preserve the current iteration and empty-title guard, and
prevent titles from being added for other task types such as
SEMANTIC_SIMILARITY.

@pokabookinflab
pokabookinflab merged commit 853addc into main Jul 28, 2026
26 of 32 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.