"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations from .endpointsmetadata import EndpointsMetadata, EndpointsMetadataTypedDict from .pipelinestage import PipelineStage, PipelineStageTypedDict from .routerattempt import RouterAttempt, RouterAttemptTypedDict from .routerparams import RouterParams, RouterParamsTypedDict from .routingstrategy import RoutingStrategy from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL from pydantic import model_serializer from typing import List, Optional from typing_extensions import NotRequired, TypedDict class OpenRouterMetadataTypedDict(TypedDict): attempt: int endpoints: EndpointsMetadataTypedDict is_byok: bool region: Nullable[str] requested: str strategy: RoutingStrategy summary: str attempts: NotRequired[List[RouterAttemptTypedDict]] params: NotRequired[RouterParamsTypedDict] pipeline: NotRequired[List[PipelineStageTypedDict]] class OpenRouterMetadata(BaseModel): attempt: int endpoints: EndpointsMetadata is_byok: bool region: Nullable[str] requested: str strategy: RoutingStrategy summary: str attempts: Optional[List[RouterAttempt]] = None params: Optional[RouterParams] = None pipeline: Optional[List[PipelineStage]] = None @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set(["attempts", "params", "pipeline"]) nullable_fields = set(["region"]) serialized = handler(self) m = {} for n, f in type(self).model_fields.items(): k = f.alias or n val = serialized.get(k, serialized.get(n)) is_nullable_and_explicitly_set = ( k in nullable_fields and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member ) if val != UNSET_SENTINEL: if ( val is not None or k not in optional_fields or is_nullable_and_explicitly_set ): m[k] = val return m