# This file was auto-generated by Fern from our API Definition.

import typing

import pydantic
import typing_extensions
from ....core.pydantic_utilities import IS_PYDANTIC_V2
from ....core.serialization import FieldMetadata
from ....core.unchecked_base_model import UncheckedBaseModel
from .patch_agent_id_request_synthesizer_voice_config_gender_gender import (
    PatchAgentIdRequestSynthesizerVoiceConfigGenderGender,
)
from .patch_agent_id_request_synthesizer_voice_config_gender_model import (
    PatchAgentIdRequestSynthesizerVoiceConfigGenderModel,
)


class PatchAgentIdRequestSynthesizerVoiceConfigGender(UncheckedBaseModel):
    model: typing.Optional[PatchAgentIdRequestSynthesizerVoiceConfigGenderModel] = pydantic.Field(default=None)
    """
    We currently support 3 types of models for the synthesizer. Waves, Waves Lightning Large and Waves Lightning Large Voice Clone. You can clone your voice using waves platform and use the voiceId for this field and select the model as waves_lightning_large_voice_clone to use your cloned voice.
    """

    voice_id: typing_extensions.Annotated[
        typing.Optional[str], FieldMetadata(alias="voiceId"), pydantic.Field(alias="voiceId")
    ] = None
    gender: typing.Optional[PatchAgentIdRequestSynthesizerVoiceConfigGenderGender] = pydantic.Field(default=None)
    """
    The gender of the synthesizer. When selecting gender, you have to select the model and voiceId which are required fields.
    """

    if IS_PYDANTIC_V2:
        model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True)  # type: ignore # Pydantic v2
    else:

        class Config:
            frozen = True
            smart_union = True
            extra = pydantic.Extra.allow
