diff --git a/.fern/metadata.json b/.fern/metadata.json index a5a4ca5..bbed517 100644 --- a/.fern/metadata.json +++ b/.fern/metadata.json @@ -13,5 +13,5 @@ }, "exclude_types_from_init_exports": true }, - "originGitCommit": "49d478a59be2201df42d81f839acd1ff3fa3aa59" + "originGitCommit": "7edea35eef2583c1cb4860d7941275b0cd7ce900" } \ No newline at end of file diff --git a/.fern/replay.lock b/.fern/replay.lock index 27d2226..3f1540d 100644 --- a/.fern/replay.lock +++ b/.fern/replay.lock @@ -18,14 +18,20 @@ generations: cli_version: unknown generator_versions: fernapi/fern-python-sdk: 4.37.0 -current_generation: ded92fee3f96c394d5f4f8a106c4dfd21cce6105 + - commit_sha: 3b186f61b2dc118550a60bf2af4d8352ee6872b2 + tree_hash: 6b67aab55bdb2ee7fc022abf326154b27bb181d0 + timestamp: 2026-07-22T07:53:37.852Z + cli_version: unknown + generator_versions: + fernapi/fern-python-sdk: 4.37.0 +current_generation: 3b186f61b2dc118550a60bf2af4d8352ee6872b2 patches: - id: patch-13d8e068 content_hash: sha256:97d879ab169016b9abaf1866427a8ebc45af608f69e063a07e5126c9613c329b original_commit: 13d8e0683ffa08bcfc9a381eb9604adf5abdbe0b original_message: "chore: ignore local venv and planning docs" original_author: plutoless - base_generation: ded92fee3f96c394d5f4f8a106c4dfd21cce6105 + base_generation: 3b186f61b2dc118550a60bf2af4d8352ee6872b2 files: - .gitignore patch_content: | diff --git a/src/agora_agent/types/gradium_tts.py b/src/agora_agent/types/gradium_tts.py new file mode 100644 index 0000000..0a22c24 --- /dev/null +++ b/src/agora_agent/types/gradium_tts.py @@ -0,0 +1,29 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2 +from ..core.unchecked_base_model import UncheckedBaseModel +from .gradium_tts_params import GradiumTtsParams + + +class GradiumTts(UncheckedBaseModel): + """ + Gradium Text-to-Speech configuration. + """ + + params: GradiumTtsParams + skip_patterns: typing.Optional[typing.List[int]] = pydantic.Field(default=None) + """ + Controls whether the TTS module skips bracketed content when reading LLM response text. + """ + + 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 diff --git a/src/agora_agent/types/gradium_tts_params.py b/src/agora_agent/types/gradium_tts_params.py new file mode 100644 index 0000000..92b82c5 --- /dev/null +++ b/src/agora_agent/types/gradium_tts_params.py @@ -0,0 +1,47 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2 +from ..core.unchecked_base_model import UncheckedBaseModel + + +class GradiumTtsParams(UncheckedBaseModel): + """ + Gradium TTS configuration parameters. + """ + + api_key: str = pydantic.Field() + """ + Gradium API key. + """ + + url: typing.Optional[str] = pydantic.Field(default=None) + """ + WebSocket endpoint for streaming TTS output (for example, "wss://api.gradium.ai/api/speech/tts"). + """ + + model_name: typing.Optional[str] = pydantic.Field(default=None) + """ + Gradium TTS model name (for example, "default"). + """ + + voice_id: typing.Optional[str] = pydantic.Field(default=None) + """ + Gradium voice identifier. + """ + + sample_rate: typing.Optional[int] = pydantic.Field(default=None) + """ + Audio sample rate in Hz (for example, 16000). + """ + + 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 diff --git a/src/agora_agent/types/mistral_tts.py b/src/agora_agent/types/mistral_tts.py new file mode 100644 index 0000000..d60d853 --- /dev/null +++ b/src/agora_agent/types/mistral_tts.py @@ -0,0 +1,29 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2 +from ..core.unchecked_base_model import UncheckedBaseModel +from .mistral_tts_params import MistralTtsParams + + +class MistralTts(UncheckedBaseModel): + """ + Mistral Text-to-Speech configuration. + """ + + params: MistralTtsParams + skip_patterns: typing.Optional[typing.List[int]] = pydantic.Field(default=None) + """ + Controls whether the TTS module skips bracketed content when reading LLM response text. + """ + + 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 diff --git a/src/agora_agent/types/mistral_tts_params.py b/src/agora_agent/types/mistral_tts_params.py new file mode 100644 index 0000000..f9bf7c0 --- /dev/null +++ b/src/agora_agent/types/mistral_tts_params.py @@ -0,0 +1,37 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2 +from ..core.unchecked_base_model import UncheckedBaseModel + + +class MistralTtsParams(UncheckedBaseModel): + """ + Mistral TTS configuration parameters. + """ + + api_key: str = pydantic.Field() + """ + Mistral API key. + """ + + model: typing.Optional[str] = pydantic.Field(default=None) + """ + Mistral TTS model name (for example, "voxtral-mini-tts-2603"). + """ + + voice: typing.Optional[str] = pydantic.Field(default=None) + """ + Mistral voice identifier. + """ + + 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 diff --git a/src/agora_agent/types/tts.py b/src/agora_agent/types/tts.py index cc0bdc5..fd6538c 100644 --- a/src/agora_agent/types/tts.py +++ b/src/agora_agent/types/tts.py @@ -18,9 +18,11 @@ from .fish_audio_tts_params import FishAudioTtsParams from .generic_http_tts_params import GenericHttpTtsParams from .google_tts_params import GoogleTtsParams +from .gradium_tts_params import GradiumTtsParams from .hume_ai_tts_params import HumeAiTtsParams from .microsoft_tts_params import MicrosoftTtsParams from .minimax_tts_params import MinimaxTtsParams +from .mistral_tts_params import MistralTtsParams from .murf_tts_params import MurfTtsParams from .open_ai_tts_params import OpenAiTtsParams from .rime_tts_credential_mode import RimeTtsCredentialMode @@ -334,6 +336,36 @@ class Config: extra = pydantic.Extra.allow +class Tts_Gradium(UncheckedBaseModel): + vendor: typing.Literal["gradium"] = "gradium" + params: GradiumTtsParams + skip_patterns: typing.Optional[typing.List[int]] = 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 + + +class Tts_Mistral(UncheckedBaseModel): + vendor: typing.Literal["mistral"] = "mistral" + params: MistralTtsParams + skip_patterns: typing.Optional[typing.List[int]] = 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 + + Tts = typing_extensions.Annotated[ typing.Union[ Tts_Tencent, @@ -356,6 +388,8 @@ class Config: Tts_Cosyvoice, Tts_BytedanceDuplex, Tts_Stepfun, + Tts_Gradium, + Tts_Mistral, ], UnionMetadata(discriminant="vendor"), ]