chore(types): keep the backported safeguards annotations within the line's budgets

The picked TypedDict fields use read-only Sequence[Mapping[str, object]] annotations and the picked Vertex test carries a test-quality-ok marker, so stable/1.102.x's LIT001, LIT012 and TQ008 budgets hold. Static typing only, no runtime change.
This commit is contained in:
mateo-berri 2026-09-22 12:18:27 -07:00
parent 4f4ed1121a
commit 712428eded
4 changed files with 11 additions and 8 deletions

View file

@ -1,4 +1,4 @@
from collections.abc import Iterable, Sequence
from collections.abc import Iterable, Mapping, Sequence
from enum import Enum
from typing import Any, Final, Literal, TypeAlias
@ -410,7 +410,7 @@ class AnthropicMessagesRequestOptionalParams(TypedDict, total=False):
output_config: AnthropicOutputConfig | None # Configuration for Claude's output behavior
cache_control: dict[str, Any] | None # Automatic prompt caching
reasoning_effort: str | None
safeguards: ReadOnly[list[dict[str, object]] | None]
safeguards: ReadOnly[Sequence[Mapping[str, object]] | None]
class AnthropicMessagesRequest(AnthropicMessagesRequestOptionalParams, total=False):
@ -530,7 +530,7 @@ class AnthropicStopDetails(TypedDict, total=False):
class MessageDelta(TypedDict, total=False):
stop_reason: str | None
stop_details: ReadOnly[AnthropicStopDetails]
safeguard_results: ReadOnly[list[dict[str, object]]]
safeguard_results: ReadOnly[Sequence[Mapping[str, object]]]
class ServerToolUsage(TypedDict, total=False):
@ -601,7 +601,7 @@ class MessageChunk(TypedDict, total=False):
stop_reason: str | None
stop_sequence: str | None
usage: UsageDelta
safeguard_results: ReadOnly[list[dict[str, object]]]
safeguard_results: ReadOnly[Sequence[Mapping[str, object]]]
class MessageStartBlock(TypedDict):

View file

@ -1,3 +1,4 @@
from collections.abc import Mapping, Sequence
from typing import Any, Literal, TypeAlias
from typing_extensions import NotRequired, ReadOnly, TypedDict
@ -97,4 +98,4 @@ class AnthropicMessagesResponse(TypedDict, total=False):
type: Literal["message"] | None
usage: AnthropicUsage | None
context_management: NotRequired[ContextManagementResponse]
safeguard_results: NotRequired[ReadOnly[list[dict[str, object]]]]
safeguard_results: NotRequired[ReadOnly[Sequence[Mapping[str, object]]]]

View file

@ -1,5 +1,5 @@
import json
from collections.abc import Sequence
from collections.abc import Mapping, Sequence
from enum import Enum
from typing import TYPE_CHECKING, Any, Final, Literal, TypeAlias
@ -1215,7 +1215,7 @@ class BedrockInvokeAnthropicMessagesRequest(TypedDict, total=False):
thinking: dict
metadata: dict
output_config: dict
safeguards: list
safeguards: ReadOnly[Sequence[Mapping[str, object]]]
# `context_management` is allowed for Bedrock InvokeModel only when it
# carries `compact_20260112` edits paired with the `compact-2026-01-12`

View file

@ -1627,7 +1627,9 @@ async def test_anthropic_messages_forwards_safeguards_and_dangerous_tool_use_bet
safeguards, safeguard_results = _claude_code_auto_mode_request()
captured: dict[str, object] = {}
with patch.object(VertexBase, "_ensure_access_token", return_value=("test-token", "test-project")):
with patch.object( # test-quality-ok: the GCP token exchange runs before the faked HTTP boundary
VertexBase, "_ensure_access_token", return_value=("test-token", "test-project")
):
response = await handler.anthropic_messages(
max_tokens=16,
messages=[{"role": "user", "content": "hi"}],