fix: accept betas body field from Claude Code clients (#360)

Claude Code newer versions send a `betas` list in the request body (e.g.
"interleaved-thinking-2025-05-14"). This landed in `__pydantic_extra__`
and triggered `_openai_reject_native_only_top_level_fields`, surfacing
as "Invalid request sent to provider." for all OpenAI Chat upstreams
(kimi, nvidia_nim).

Declare `betas` on both `MessagesRequest` and `TokenCountRequest` with
`exclude=True` so it is accepted from clients but never forwarded to any
provider body.
This commit is contained in:
alex
2026-05-06 14:45:15 +10:00
committed by GitHub
parent 6b8c697f4d
commit 8687fb3cbb
2 changed files with 4 additions and 1 deletions
+3
View File
@@ -153,6 +153,8 @@ class MessagesRequest(BaseModel):
output_config: dict[str, Any] | None = None output_config: dict[str, Any] | None = None
mcp_servers: list[dict[str, Any]] | None = None mcp_servers: list[dict[str, Any]] | None = None
extra_body: dict[str, Any] | None = None extra_body: dict[str, Any] | None = None
# Beta feature flags sent by Claude Code as a body field; accepted but never forwarded.
betas: list[str] | None = Field(default=None, exclude=True)
class TokenCountRequest(BaseModel): class TokenCountRequest(BaseModel):
@@ -169,3 +171,4 @@ class TokenCountRequest(BaseModel):
context_management: dict[str, Any] | None = None context_management: dict[str, Any] | None = None
output_config: dict[str, Any] | None = None output_config: dict[str, Any] | None = None
mcp_servers: list[dict[str, Any]] | None = None mcp_servers: list[dict[str, Any]] | None = None
betas: list[str] | None = Field(default=None, exclude=True)
+1 -1
View File
@@ -19,7 +19,7 @@ def build_request_body(request_data: Any, *, thinking_enabled: bool) -> dict:
try: try:
body = build_base_request_body( body = build_base_request_body(
request_data, request_data,
reasoning_replay=ReasoningReplayMode.DISABLED, reasoning_replay=ReasoningReplayMode.REASONING_CONTENT,
) )
except OpenAIConversionError as exc: except OpenAIConversionError as exc:
raise InvalidRequestError(str(exc)) from exc raise InvalidRequestError(str(exc)) from exc