# 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 import PatchAgentIdRequestSynthesizerVoiceConfig


class PatchAgentIdRequestSynthesizer(UncheckedBaseModel):
    """
    Synthesizer configuration for the agent. You can configure the synthesizer to use different voices and models. Currently we 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 https://waves.smallest.ai/voice-clone and use the voiceId for this field and select the model as waves_lightning_large_voice_clone to use your cloned voice. When updating the synthesizer configuration to voice clone model, you have to provide model and voiceId and gender all are required fields but when selecting the model as waves or waves and waves_lightning_large, you have to provide only model field and voiceId.
    """

    voice_config: typing_extensions.Annotated[
        typing.Optional[PatchAgentIdRequestSynthesizerVoiceConfig],
        FieldMetadata(alias="voiceConfig"),
        pydantic.Field(alias="voiceConfig"),
    ] = None
    speed: typing.Optional[float] = None
    consistency: typing.Optional[float] = None
    similarity: typing.Optional[float] = None
    enhancement: typing.Optional[float] = None

    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
