"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations from .byokproviderslug import BYOKProviderSlug from openrouter.types import ( BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL, ) from openrouter.utils import validate_open_enum from pydantic import model_serializer from pydantic.functional_validators import PlainValidator from typing import List, Optional from typing_extensions import Annotated, NotRequired, TypedDict class CreateBYOKKeyRequestTypedDict(TypedDict): key: str r"""The raw provider API key or credential. This value is encrypted at rest and never returned in API responses.""" provider: BYOKProviderSlug r"""The upstream provider this credential authenticates against, as a lowercase slug (e.g. `openai`, `anthropic`, `amazon-bedrock`).""" allowed_models: NotRequired[Nullable[List[str]]] r"""Optional allowlist of model slugs this credential may be used for. `null` means no restriction.""" allowed_user_ids: NotRequired[Nullable[List[str]]] r"""Optional allowlist of user IDs that may use this credential. `null` means no restriction.""" disabled: NotRequired[bool] r"""Whether this credential should be created in a disabled state.""" is_fallback: NotRequired[bool] r"""Whether this credential is treated as a fallback — used only after non-fallback keys for the same provider have been tried.""" name: NotRequired[Nullable[str]] r"""Optional human-readable name for the credential.""" workspace_id: NotRequired[str] r"""Optional workspace ID. Defaults to the authenticated entity's default workspace.""" class CreateBYOKKeyRequest(BaseModel): key: str r"""The raw provider API key or credential. This value is encrypted at rest and never returned in API responses.""" provider: Annotated[BYOKProviderSlug, PlainValidator(validate_open_enum(False))] r"""The upstream provider this credential authenticates against, as a lowercase slug (e.g. `openai`, `anthropic`, `amazon-bedrock`).""" allowed_models: OptionalNullable[List[str]] = UNSET r"""Optional allowlist of model slugs this credential may be used for. `null` means no restriction.""" allowed_user_ids: OptionalNullable[List[str]] = UNSET r"""Optional allowlist of user IDs that may use this credential. `null` means no restriction.""" disabled: Optional[bool] = None r"""Whether this credential should be created in a disabled state.""" is_fallback: Optional[bool] = None r"""Whether this credential is treated as a fallback — used only after non-fallback keys for the same provider have been tried.""" name: OptionalNullable[str] = UNSET r"""Optional human-readable name for the credential.""" workspace_id: Optional[str] = None r"""Optional workspace ID. Defaults to the authenticated entity's default workspace.""" @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = [ "allowed_models", "allowed_user_ids", "disabled", "is_fallback", "name", "workspace_id", ] nullable_fields = ["allowed_models", "allowed_user_ids", "name"] 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