mirror of
https://github.com/wassname/openrouter-python-sdk-retry-errors.git
synced 2026-07-29 11:23:49 +08:00
* `open_router.beta.responses.send()`: * `request` **Changed** **Breaking** ⚠️ * `response` **Changed** **Breaking** ⚠️ * `open_router.presets.create_presets_responses()`: `request` **Changed** **Breaking** ⚠️ * `open_router.presets.create_presets_chat_completions()`: `request` **Changed** **Breaking** ⚠️ * `open_router.chat.send()`: `request` **Changed** **Breaking** ⚠️ * `open_router.workspaces.set_budget()`: **Added** * `open_router.o_auth.create_auth_code()`: * `request.workspace_id` **Added** * `error.status[403]` **Added** * `open_router.files.download()`: **Added** * `open_router.models.get()`: **Added** * `open_router.workspaces.list_budgets()`: **Added** * `open_router.workspaces.delete_budget()`: **Added** * `open_router.datasets.get_benchmarks_artificial_analysis()`: **Added** * `open_router.beta.analytics.query_analytics()`: `response.data.warnings` **Added** * `open_router.files.delete()`: **Added** * `open_router.files.retrieve()`: **Added** * `open_router.files.upload()`: **Added** * `open_router.embeddings.list_models()`: `response.data.[].benchmarks` **Added** * `open_router.models.list()`: * `request` **Changed** * `response.data.[].benchmarks` **Added** * `open_router.models.list_for_user()`: `response.data.[].benchmarks` **Added** * `open_router.files.list()`: **Added** * `open_router.presets.create_presets_messages()`: `request` **Changed** * `open_router.datasets.get_benchmarks_design_arena()`: **Added**
534 lines
21 KiB
Python
534 lines
21 KiB
Python
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
|
|
from __future__ import annotations
|
|
from .advisorservertool_openrouter import (
|
|
AdvisorServerToolOpenRouter,
|
|
AdvisorServerToolOpenRouterTypedDict,
|
|
)
|
|
from .anthropiccachecontroldirective import (
|
|
AnthropicCacheControlDirective,
|
|
AnthropicCacheControlDirectiveTypedDict,
|
|
)
|
|
from .applypatchservertool import ApplyPatchServerTool, ApplyPatchServerToolTypedDict
|
|
from .applypatchservertool_openrouter import (
|
|
ApplyPatchServerToolOpenRouter,
|
|
ApplyPatchServerToolOpenRouterTypedDict,
|
|
)
|
|
from .autorouterplugin import AutoRouterPlugin, AutoRouterPluginTypedDict
|
|
from .bashservertool import BashServerTool, BashServerToolTypedDict
|
|
from .chatsearchmodelsservertool import (
|
|
ChatSearchModelsServerTool,
|
|
ChatSearchModelsServerToolTypedDict,
|
|
)
|
|
from .codeinterpreterservertool import (
|
|
CodeInterpreterServerTool,
|
|
CodeInterpreterServerToolTypedDict,
|
|
)
|
|
from .codexlocalshelltool import CodexLocalShellTool, CodexLocalShellToolTypedDict
|
|
from .computeruseservertool import ComputerUseServerTool, ComputerUseServerToolTypedDict
|
|
from .contextcompressionplugin import (
|
|
ContextCompressionPlugin,
|
|
ContextCompressionPluginTypedDict,
|
|
)
|
|
from .customtool import CustomTool, CustomToolTypedDict
|
|
from .datetimeservertool import DatetimeServerTool, DatetimeServerToolTypedDict
|
|
from .fileparserplugin import FileParserPlugin, FileParserPluginTypedDict
|
|
from .filesearchservertool import FileSearchServerTool, FileSearchServerToolTypedDict
|
|
from .fusionplugin import FusionPlugin, FusionPluginTypedDict
|
|
from .fusionservertool_openrouter import (
|
|
FusionServerToolOpenRouter,
|
|
FusionServerToolOpenRouterTypedDict,
|
|
)
|
|
from .imageconfig import ImageConfig, ImageConfigTypedDict
|
|
from .imagegenerationservertool import (
|
|
ImageGenerationServerTool,
|
|
ImageGenerationServerToolTypedDict,
|
|
)
|
|
from .imagegenerationservertool_openrouter import (
|
|
ImageGenerationServerToolOpenRouter,
|
|
ImageGenerationServerToolOpenRouterTypedDict,
|
|
)
|
|
from .inputs_union import InputsUnion, InputsUnionTypedDict
|
|
from .legacy_websearchservertool import (
|
|
LegacyWebSearchServerTool,
|
|
LegacyWebSearchServerToolTypedDict,
|
|
)
|
|
from .mcpservertool import McpServerTool, McpServerToolTypedDict
|
|
from .moderationplugin import ModerationPlugin, ModerationPluginTypedDict
|
|
from .openairesponsestoolchoice_union import (
|
|
OpenAIResponsesToolChoiceUnion,
|
|
OpenAIResponsesToolChoiceUnionTypedDict,
|
|
)
|
|
from .openairesponsestruncation import OpenAIResponsesTruncation
|
|
from .outputmodalityenum import OutputModalityEnum
|
|
from .paretorouterplugin import ParetoRouterPlugin, ParetoRouterPluginTypedDict
|
|
from .preview_20250311_websearchservertool import (
|
|
Preview20250311WebSearchServerTool,
|
|
Preview20250311WebSearchServerToolTypedDict,
|
|
)
|
|
from .preview_websearchservertool import (
|
|
PreviewWebSearchServerTool,
|
|
PreviewWebSearchServerToolTypedDict,
|
|
)
|
|
from .providerpreferences import ProviderPreferences, ProviderPreferencesTypedDict
|
|
from .reasoningconfig import ReasoningConfig, ReasoningConfigTypedDict
|
|
from .responsehealingplugin import ResponseHealingPlugin, ResponseHealingPluginTypedDict
|
|
from .responseincludesenum import ResponseIncludesEnum
|
|
from .shellservertool import ShellServerTool, ShellServerToolTypedDict
|
|
from .shellservertool_openrouter import (
|
|
ShellServerToolOpenRouter,
|
|
ShellServerToolOpenRouterTypedDict,
|
|
)
|
|
from .stopservertoolswhencondition import (
|
|
StopServerToolsWhenCondition,
|
|
StopServerToolsWhenConditionTypedDict,
|
|
)
|
|
from .storedprompttemplate import StoredPromptTemplate, StoredPromptTemplateTypedDict
|
|
from .subagentservertool_openrouter import (
|
|
SubagentServerToolOpenRouter,
|
|
SubagentServerToolOpenRouterTypedDict,
|
|
)
|
|
from .textextendedconfig import TextExtendedConfig, TextExtendedConfigTypedDict
|
|
from .traceconfig import TraceConfig, TraceConfigTypedDict
|
|
from .webfetchplugin import WebFetchPlugin, WebFetchPluginTypedDict
|
|
from .webfetchservertool import WebFetchServerTool, WebFetchServerToolTypedDict
|
|
from .websearchplugin import WebSearchPlugin, WebSearchPluginTypedDict
|
|
from .websearchservertool import WebSearchServerTool, WebSearchServerToolTypedDict
|
|
from .websearchservertool_openrouter import (
|
|
WebSearchServerToolOpenRouter,
|
|
WebSearchServerToolOpenRouterTypedDict,
|
|
)
|
|
from openrouter.types import (
|
|
BaseModel,
|
|
Nullable,
|
|
OptionalNullable,
|
|
UNSET,
|
|
UNSET_SENTINEL,
|
|
UnrecognizedStr,
|
|
)
|
|
from openrouter.utils import get_discriminator, validate_const, validate_open_enum
|
|
import pydantic
|
|
from pydantic import Discriminator, Tag, model_serializer
|
|
from pydantic.functional_validators import AfterValidator, PlainValidator
|
|
from typing import Any, Dict, List, Literal, Optional, Union
|
|
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
|
|
|
|
|
|
ResponsesRequestPluginTypedDict = TypeAliasType(
|
|
"ResponsesRequestPluginTypedDict",
|
|
Union[
|
|
ModerationPluginTypedDict,
|
|
ResponseHealingPluginTypedDict,
|
|
FileParserPluginTypedDict,
|
|
ContextCompressionPluginTypedDict,
|
|
ParetoRouterPluginTypedDict,
|
|
AutoRouterPluginTypedDict,
|
|
WebFetchPluginTypedDict,
|
|
FusionPluginTypedDict,
|
|
WebSearchPluginTypedDict,
|
|
],
|
|
)
|
|
|
|
|
|
ResponsesRequestPlugin = Annotated[
|
|
Union[
|
|
Annotated[AutoRouterPlugin, Tag("auto-router")],
|
|
Annotated[ContextCompressionPlugin, Tag("context-compression")],
|
|
Annotated[FileParserPlugin, Tag("file-parser")],
|
|
Annotated[FusionPlugin, Tag("fusion")],
|
|
Annotated[ModerationPlugin, Tag("moderation")],
|
|
Annotated[ParetoRouterPlugin, Tag("pareto-router")],
|
|
Annotated[ResponseHealingPlugin, Tag("response-healing")],
|
|
Annotated[WebSearchPlugin, Tag("web")],
|
|
Annotated[WebFetchPlugin, Tag("web-fetch")],
|
|
],
|
|
Discriminator(lambda m: get_discriminator(m, "id", "id")),
|
|
]
|
|
|
|
|
|
ResponsesRequestServiceTier = Union[
|
|
Literal[
|
|
"auto",
|
|
"default",
|
|
"flex",
|
|
"priority",
|
|
"scale",
|
|
],
|
|
UnrecognizedStr,
|
|
]
|
|
|
|
|
|
ResponsesRequestType = Literal["function",]
|
|
|
|
|
|
class ResponsesRequestToolFunctionTypedDict(TypedDict):
|
|
r"""Function tool definition"""
|
|
|
|
name: str
|
|
parameters: Nullable[Dict[str, Nullable[Any]]]
|
|
type: ResponsesRequestType
|
|
description: NotRequired[Nullable[str]]
|
|
strict: NotRequired[Nullable[bool]]
|
|
|
|
|
|
class ResponsesRequestToolFunction(BaseModel):
|
|
r"""Function tool definition"""
|
|
|
|
name: str
|
|
|
|
parameters: Nullable[Dict[str, Nullable[Any]]]
|
|
|
|
type: ResponsesRequestType
|
|
|
|
description: OptionalNullable[str] = UNSET
|
|
|
|
strict: OptionalNullable[bool] = UNSET
|
|
|
|
@model_serializer(mode="wrap")
|
|
def serialize_model(self, handler):
|
|
optional_fields = ["description", "strict"]
|
|
nullable_fields = ["description", "parameters", "strict"]
|
|
null_default_fields = []
|
|
|
|
serialized = handler(self)
|
|
|
|
m = {}
|
|
|
|
for n, f in type(self).model_fields.items():
|
|
k = f.alias or n
|
|
val = serialized.get(k)
|
|
serialized.pop(k, None)
|
|
|
|
optional_nullable = k in optional_fields and k in nullable_fields
|
|
is_set = (
|
|
self.__pydantic_fields_set__.intersection({n})
|
|
or k in null_default_fields
|
|
) # pylint: disable=no-member
|
|
|
|
if val is not None and val != UNSET_SENTINEL:
|
|
m[k] = val
|
|
elif val != UNSET_SENTINEL and (
|
|
not k in optional_fields or (optional_nullable and is_set)
|
|
):
|
|
m[k] = val
|
|
|
|
return m
|
|
|
|
|
|
ResponsesRequestToolUnionTypedDict = TypeAliasType(
|
|
"ResponsesRequestToolUnionTypedDict",
|
|
Union[
|
|
CodexLocalShellToolTypedDict,
|
|
ApplyPatchServerToolTypedDict,
|
|
ShellServerToolTypedDict,
|
|
ImageGenerationServerToolOpenRouterTypedDict,
|
|
ChatSearchModelsServerToolTypedDict,
|
|
ShellServerToolOpenRouterTypedDict,
|
|
BashServerToolTypedDict,
|
|
CodeInterpreterServerToolTypedDict,
|
|
ApplyPatchServerToolOpenRouterTypedDict,
|
|
WebSearchServerToolOpenRouterTypedDict,
|
|
WebFetchServerToolTypedDict,
|
|
FusionServerToolOpenRouterTypedDict,
|
|
DatetimeServerToolTypedDict,
|
|
SubagentServerToolOpenRouterTypedDict,
|
|
AdvisorServerToolOpenRouterTypedDict,
|
|
CustomToolTypedDict,
|
|
ComputerUseServerToolTypedDict,
|
|
ResponsesRequestToolFunctionTypedDict,
|
|
FileSearchServerToolTypedDict,
|
|
PreviewWebSearchServerToolTypedDict,
|
|
Preview20250311WebSearchServerToolTypedDict,
|
|
WebSearchServerToolTypedDict,
|
|
LegacyWebSearchServerToolTypedDict,
|
|
McpServerToolTypedDict,
|
|
ImageGenerationServerToolTypedDict,
|
|
],
|
|
)
|
|
|
|
|
|
ResponsesRequestToolUnion = Annotated[
|
|
Union[
|
|
Annotated[ResponsesRequestToolFunction, Tag("function")],
|
|
Annotated[PreviewWebSearchServerTool, Tag("web_search_preview")],
|
|
Annotated[
|
|
Preview20250311WebSearchServerTool, Tag("web_search_preview_2025_03_11")
|
|
],
|
|
Annotated[LegacyWebSearchServerTool, Tag("web_search")],
|
|
Annotated[WebSearchServerTool, Tag("web_search_2025_08_26")],
|
|
Annotated[FileSearchServerTool, Tag("file_search")],
|
|
Annotated[ComputerUseServerTool, Tag("computer_use_preview")],
|
|
Annotated[CodeInterpreterServerTool, Tag("code_interpreter")],
|
|
Annotated[McpServerTool, Tag("mcp")],
|
|
Annotated[ImageGenerationServerTool, Tag("image_generation")],
|
|
Annotated[CodexLocalShellTool, Tag("local_shell")],
|
|
Annotated[ShellServerTool, Tag("shell")],
|
|
Annotated[ApplyPatchServerTool, Tag("apply_patch")],
|
|
Annotated[CustomTool, Tag("custom")],
|
|
Annotated[AdvisorServerToolOpenRouter, Tag("openrouter:advisor")],
|
|
Annotated[SubagentServerToolOpenRouter, Tag("openrouter:subagent")],
|
|
Annotated[DatetimeServerTool, Tag("openrouter:datetime")],
|
|
Annotated[FusionServerToolOpenRouter, Tag("openrouter:fusion")],
|
|
Annotated[
|
|
ImageGenerationServerToolOpenRouter, Tag("openrouter:image_generation")
|
|
],
|
|
Annotated[
|
|
ChatSearchModelsServerTool, Tag("openrouter:experimental__search_models")
|
|
],
|
|
Annotated[WebFetchServerTool, Tag("openrouter:web_fetch")],
|
|
Annotated[WebSearchServerToolOpenRouter, Tag("openrouter:web_search")],
|
|
Annotated[ApplyPatchServerToolOpenRouter, Tag("openrouter:apply_patch")],
|
|
Annotated[BashServerTool, Tag("openrouter:bash")],
|
|
Annotated[ShellServerToolOpenRouter, Tag("openrouter:shell")],
|
|
],
|
|
Discriminator(lambda m: get_discriminator(m, "type", "type")),
|
|
]
|
|
|
|
|
|
class ResponsesRequestTypedDict(TypedDict):
|
|
r"""Request schema for Responses endpoint"""
|
|
|
|
background: NotRequired[Nullable[bool]]
|
|
cache_control: NotRequired[AnthropicCacheControlDirectiveTypedDict]
|
|
r"""Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models."""
|
|
frequency_penalty: NotRequired[Nullable[float]]
|
|
image_config: NotRequired[Dict[str, ImageConfigTypedDict]]
|
|
r"""Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/guides/overview/multimodal/image-generation for more details."""
|
|
include: NotRequired[Nullable[List[ResponseIncludesEnum]]]
|
|
input: NotRequired[InputsUnionTypedDict]
|
|
r"""Input for a response request - can be a string or array of items"""
|
|
instructions: NotRequired[Nullable[str]]
|
|
max_output_tokens: NotRequired[Nullable[int]]
|
|
max_tool_calls: NotRequired[Nullable[int]]
|
|
metadata: NotRequired[Nullable[Dict[str, str]]]
|
|
r"""Metadata key-value pairs for the request. Keys must be ≤64 characters and cannot contain brackets. Values must be ≤512 characters. Maximum 16 pairs allowed."""
|
|
modalities: NotRequired[List[OutputModalityEnum]]
|
|
r"""Output modalities for the response. Supported values are \"text\" and \"image\"."""
|
|
model: NotRequired[str]
|
|
models: NotRequired[List[str]]
|
|
parallel_tool_calls: NotRequired[Nullable[bool]]
|
|
plugins: NotRequired[List[ResponsesRequestPluginTypedDict]]
|
|
r"""Plugins you want to enable for this request, including their settings."""
|
|
presence_penalty: NotRequired[Nullable[float]]
|
|
previous_response_id: NotRequired[Nullable[str]]
|
|
prompt: NotRequired[Nullable[StoredPromptTemplateTypedDict]]
|
|
prompt_cache_key: NotRequired[Nullable[str]]
|
|
provider: NotRequired[Nullable[ProviderPreferencesTypedDict]]
|
|
r"""When multiple model providers are available, optionally indicate your routing preference."""
|
|
reasoning: NotRequired[Nullable[ReasoningConfigTypedDict]]
|
|
r"""Configuration for reasoning mode in the response"""
|
|
safety_identifier: NotRequired[Nullable[str]]
|
|
service_tier: NotRequired[Nullable[ResponsesRequestServiceTier]]
|
|
session_id: NotRequired[str]
|
|
r"""A unique identifier for grouping related requests (e.g., a conversation or agent workflow). When provided, OpenRouter uses it as the sticky routing key, routing all requests in the session to the same provider to maximize prompt cache hits. Also used for observability grouping. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 256 characters."""
|
|
stop_server_tools_when: NotRequired[List[StopServerToolsWhenConditionTypedDict]]
|
|
r"""Stop conditions for the server-tool agent loop. Any condition firing halts the loop (OR logic). When set, this overrides `max_tool_calls`."""
|
|
store: Literal[False]
|
|
stream: NotRequired[bool]
|
|
temperature: NotRequired[Nullable[float]]
|
|
text: NotRequired[TextExtendedConfigTypedDict]
|
|
r"""Text output configuration including format and verbosity"""
|
|
tool_choice: NotRequired[OpenAIResponsesToolChoiceUnionTypedDict]
|
|
tools: NotRequired[List[ResponsesRequestToolUnionTypedDict]]
|
|
top_k: NotRequired[int]
|
|
top_logprobs: NotRequired[Nullable[int]]
|
|
top_p: NotRequired[Nullable[float]]
|
|
trace: NotRequired[TraceConfigTypedDict]
|
|
r"""Metadata for observability and tracing. Known keys (trace_id, trace_name, span_name, generation_name, parent_span_id) have special handling. Additional keys are passed through as custom metadata to configured broadcast destinations."""
|
|
truncation: NotRequired[Nullable[OpenAIResponsesTruncation]]
|
|
user: NotRequired[str]
|
|
r"""A unique identifier representing your end-user, which helps distinguish between different users of your app. This allows your app to identify specific users in case of abuse reports, preventing your entire app from being affected by the actions of individual users. Maximum of 256 characters."""
|
|
|
|
|
|
class ResponsesRequest(BaseModel):
|
|
r"""Request schema for Responses endpoint"""
|
|
|
|
background: OptionalNullable[bool] = UNSET
|
|
|
|
cache_control: Optional[AnthropicCacheControlDirective] = None
|
|
r"""Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models."""
|
|
|
|
frequency_penalty: OptionalNullable[float] = UNSET
|
|
|
|
image_config: Optional[Dict[str, ImageConfig]] = None
|
|
r"""Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/guides/overview/multimodal/image-generation for more details."""
|
|
|
|
include: OptionalNullable[
|
|
List[Annotated[ResponseIncludesEnum, PlainValidator(validate_open_enum(False))]]
|
|
] = UNSET
|
|
|
|
input: Optional[InputsUnion] = None
|
|
r"""Input for a response request - can be a string or array of items"""
|
|
|
|
instructions: OptionalNullable[str] = UNSET
|
|
|
|
max_output_tokens: OptionalNullable[int] = UNSET
|
|
|
|
max_tool_calls: OptionalNullable[int] = UNSET
|
|
|
|
metadata: OptionalNullable[Dict[str, str]] = UNSET
|
|
r"""Metadata key-value pairs for the request. Keys must be ≤64 characters and cannot contain brackets. Values must be ≤512 characters. Maximum 16 pairs allowed."""
|
|
|
|
modalities: Optional[
|
|
List[Annotated[OutputModalityEnum, PlainValidator(validate_open_enum(False))]]
|
|
] = None
|
|
r"""Output modalities for the response. Supported values are \"text\" and \"image\"."""
|
|
|
|
model: Optional[str] = None
|
|
|
|
models: Optional[List[str]] = None
|
|
|
|
parallel_tool_calls: OptionalNullable[bool] = UNSET
|
|
|
|
plugins: Optional[List[ResponsesRequestPlugin]] = None
|
|
r"""Plugins you want to enable for this request, including their settings."""
|
|
|
|
presence_penalty: OptionalNullable[float] = UNSET
|
|
|
|
previous_response_id: OptionalNullable[str] = UNSET
|
|
|
|
prompt: OptionalNullable[StoredPromptTemplate] = UNSET
|
|
|
|
prompt_cache_key: OptionalNullable[str] = UNSET
|
|
|
|
provider: OptionalNullable[ProviderPreferences] = UNSET
|
|
r"""When multiple model providers are available, optionally indicate your routing preference."""
|
|
|
|
reasoning: OptionalNullable[ReasoningConfig] = UNSET
|
|
r"""Configuration for reasoning mode in the response"""
|
|
|
|
safety_identifier: OptionalNullable[str] = UNSET
|
|
|
|
service_tier: Annotated[
|
|
OptionalNullable[ResponsesRequestServiceTier],
|
|
PlainValidator(validate_open_enum(False)),
|
|
] = "auto"
|
|
|
|
session_id: Optional[str] = None
|
|
r"""A unique identifier for grouping related requests (e.g., a conversation or agent workflow). When provided, OpenRouter uses it as the sticky routing key, routing all requests in the session to the same provider to maximize prompt cache hits. Also used for observability grouping. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 256 characters."""
|
|
|
|
stop_server_tools_when: Optional[List[StopServerToolsWhenCondition]] = None
|
|
r"""Stop conditions for the server-tool agent loop. Any condition firing halts the loop (OR logic). When set, this overrides `max_tool_calls`."""
|
|
|
|
STORE: Annotated[
|
|
Annotated[Optional[Literal[False]], AfterValidator(validate_const(False))],
|
|
pydantic.Field(alias="store"),
|
|
] = False
|
|
|
|
stream: Optional[bool] = False
|
|
|
|
temperature: OptionalNullable[float] = UNSET
|
|
|
|
text: Optional[TextExtendedConfig] = None
|
|
r"""Text output configuration including format and verbosity"""
|
|
|
|
tool_choice: Optional[OpenAIResponsesToolChoiceUnion] = None
|
|
|
|
tools: Optional[List[ResponsesRequestToolUnion]] = None
|
|
|
|
top_k: Optional[int] = None
|
|
|
|
top_logprobs: OptionalNullable[int] = UNSET
|
|
|
|
top_p: OptionalNullable[float] = UNSET
|
|
|
|
trace: Optional[TraceConfig] = None
|
|
r"""Metadata for observability and tracing. Known keys (trace_id, trace_name, span_name, generation_name, parent_span_id) have special handling. Additional keys are passed through as custom metadata to configured broadcast destinations."""
|
|
|
|
truncation: Annotated[
|
|
OptionalNullable[OpenAIResponsesTruncation],
|
|
PlainValidator(validate_open_enum(False)),
|
|
] = UNSET
|
|
|
|
user: Optional[str] = None
|
|
r"""A unique identifier representing your end-user, which helps distinguish between different users of your app. This allows your app to identify specific users in case of abuse reports, preventing your entire app from being affected by the actions of individual users. Maximum of 256 characters."""
|
|
|
|
@model_serializer(mode="wrap")
|
|
def serialize_model(self, handler):
|
|
optional_fields = [
|
|
"background",
|
|
"cache_control",
|
|
"frequency_penalty",
|
|
"image_config",
|
|
"include",
|
|
"input",
|
|
"instructions",
|
|
"max_output_tokens",
|
|
"max_tool_calls",
|
|
"metadata",
|
|
"modalities",
|
|
"model",
|
|
"models",
|
|
"parallel_tool_calls",
|
|
"plugins",
|
|
"presence_penalty",
|
|
"previous_response_id",
|
|
"prompt",
|
|
"prompt_cache_key",
|
|
"provider",
|
|
"reasoning",
|
|
"safety_identifier",
|
|
"service_tier",
|
|
"session_id",
|
|
"stop_server_tools_when",
|
|
"store",
|
|
"stream",
|
|
"temperature",
|
|
"text",
|
|
"tool_choice",
|
|
"tools",
|
|
"top_k",
|
|
"top_logprobs",
|
|
"top_p",
|
|
"trace",
|
|
"truncation",
|
|
"user",
|
|
]
|
|
nullable_fields = [
|
|
"background",
|
|
"frequency_penalty",
|
|
"include",
|
|
"instructions",
|
|
"max_output_tokens",
|
|
"max_tool_calls",
|
|
"metadata",
|
|
"parallel_tool_calls",
|
|
"presence_penalty",
|
|
"previous_response_id",
|
|
"prompt",
|
|
"prompt_cache_key",
|
|
"provider",
|
|
"reasoning",
|
|
"safety_identifier",
|
|
"service_tier",
|
|
"temperature",
|
|
"top_logprobs",
|
|
"top_p",
|
|
"truncation",
|
|
]
|
|
null_default_fields = []
|
|
|
|
serialized = handler(self)
|
|
|
|
m = {}
|
|
|
|
for n, f in type(self).model_fields.items():
|
|
k = f.alias or n
|
|
val = serialized.get(k)
|
|
serialized.pop(k, None)
|
|
|
|
optional_nullable = k in optional_fields and k in nullable_fields
|
|
is_set = (
|
|
self.__pydantic_fields_set__.intersection({n})
|
|
or k in null_default_fields
|
|
) # pylint: disable=no-member
|
|
|
|
if val is not None and val != UNSET_SENTINEL:
|
|
m[k] = val
|
|
elif val != UNSET_SENTINEL and (
|
|
not k in optional_fields or (optional_nullable and is_set)
|
|
):
|
|
m[k] = val
|
|
|
|
return m
|