"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations from .responseinputaudio import ResponseInputAudio, ResponseInputAudioTypedDict from .responseinputfile import ResponseInputFile, ResponseInputFileTypedDict from .responseinputtext import ResponseInputText, ResponseInputTextTypedDict from .responseinputvideo import ResponseInputVideo, ResponseInputVideoTypedDict from openrouter.types import ( BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL, UnrecognizedStr, ) from openrouter.utils import get_discriminator, validate_open_enum from pydantic import Discriminator, Tag, model_serializer from pydantic.functional_validators import PlainValidator from typing import List, Literal, Optional, Union from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict OpenResponsesInputMessageItemTypeMessage = Literal["message",] OpenResponsesInputMessageItemRoleDeveloper = Literal["developer",] OpenResponsesInputMessageItemRoleSystem = Literal["system",] OpenResponsesInputMessageItemRoleUser = Literal["user",] OpenResponsesInputMessageItemRoleUnionTypedDict = TypeAliasType( "OpenResponsesInputMessageItemRoleUnionTypedDict", Union[ OpenResponsesInputMessageItemRoleUser, OpenResponsesInputMessageItemRoleSystem, OpenResponsesInputMessageItemRoleDeveloper, ], ) OpenResponsesInputMessageItemRoleUnion = TypeAliasType( "OpenResponsesInputMessageItemRoleUnion", Union[ OpenResponsesInputMessageItemRoleUser, OpenResponsesInputMessageItemRoleSystem, OpenResponsesInputMessageItemRoleDeveloper, ], ) OpenResponsesInputMessageItemContentType = Literal["input_image",] OpenResponsesInputMessageItemDetail = Union[ Literal[ "auto", "high", "low", ], UnrecognizedStr, ] class OpenResponsesInputMessageItemContentInputImageTypedDict(TypedDict): r"""Image input content item""" type: OpenResponsesInputMessageItemContentType detail: OpenResponsesInputMessageItemDetail image_url: NotRequired[Nullable[str]] class OpenResponsesInputMessageItemContentInputImage(BaseModel): r"""Image input content item""" type: OpenResponsesInputMessageItemContentType detail: Annotated[ OpenResponsesInputMessageItemDetail, PlainValidator(validate_open_enum(False)) ] image_url: OptionalNullable[str] = UNSET @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = ["image_url"] nullable_fields = ["image_url"] 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 OpenResponsesInputMessageItemContentUnionTypedDict = TypeAliasType( "OpenResponsesInputMessageItemContentUnionTypedDict", Union[ ResponseInputTextTypedDict, ResponseInputAudioTypedDict, ResponseInputVideoTypedDict, OpenResponsesInputMessageItemContentInputImageTypedDict, ResponseInputFileTypedDict, ], ) OpenResponsesInputMessageItemContentUnion = Annotated[ Union[ Annotated[ResponseInputText, Tag("input_text")], Annotated[OpenResponsesInputMessageItemContentInputImage, Tag("input_image")], Annotated[ResponseInputFile, Tag("input_file")], Annotated[ResponseInputAudio, Tag("input_audio")], Annotated[ResponseInputVideo, Tag("input_video")], ], Discriminator(lambda m: get_discriminator(m, "type", "type")), ] class OpenResponsesInputMessageItemTypedDict(TypedDict): role: OpenResponsesInputMessageItemRoleUnionTypedDict id: NotRequired[str] type: NotRequired[OpenResponsesInputMessageItemTypeMessage] content: NotRequired[ Nullable[List[OpenResponsesInputMessageItemContentUnionTypedDict]] ] class OpenResponsesInputMessageItem(BaseModel): role: OpenResponsesInputMessageItemRoleUnion id: Optional[str] = None type: Optional[OpenResponsesInputMessageItemTypeMessage] = None content: OptionalNullable[List[OpenResponsesInputMessageItemContentUnion]] = UNSET @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = ["id", "type", "content"] nullable_fields = ["content"] 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