From 8c630cf1b7eaa0e866a0066b4ee6e58a08f8a105 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Wed, 16 Sep 2026 11:18:53 +0000 Subject: [PATCH 1/2] [fern-generated] Update SDK Generated by Fern CLI Version: unknown Generators: - fernapi/fern-python-sdk: 4.37.0 --- .fern/metadata.json | 2 +- .gitignore | 2 - ...ts_request_properties_advanced_features.py | 2 +- src/agora_agent/types/anam_avatar_params.py | 74 +++++++++++++++++++ .../types/anam_avatar_params_quality.py | 5 ++ .../anam_avatar_params_video_encoding.py | 5 ++ .../types/speechmatics_asr_params.py | 37 +--------- 7 files changed, 87 insertions(+), 40 deletions(-) create mode 100644 src/agora_agent/types/anam_avatar_params.py create mode 100644 src/agora_agent/types/anam_avatar_params_quality.py create mode 100644 src/agora_agent/types/anam_avatar_params_video_encoding.py diff --git a/.fern/metadata.json b/.fern/metadata.json index 7881670..62289a3 100644 --- a/.fern/metadata.json +++ b/.fern/metadata.json @@ -14,5 +14,5 @@ }, "exclude_types_from_init_exports": true }, - "originGitCommit": "ca763cb23651d522cb380db79b5d16547e7bd8ff" + "originGitCommit": "26314a9d3199f5e135302c3c3645b6bbb8f556d4" } \ No newline at end of file diff --git a/.gitignore b/.gitignore index 3e30921..d2e4ca8 100644 --- a/.gitignore +++ b/.gitignore @@ -3,5 +3,3 @@ __pycache__/ dist/ poetry.toml -.venv/ -docs/superpowers/ diff --git a/src/agora_agent/agents/types/start_agents_request_properties_advanced_features.py b/src/agora_agent/agents/types/start_agents_request_properties_advanced_features.py index 667e20e..e75f098 100644 --- a/src/agora_agent/agents/types/start_agents_request_properties_advanced_features.py +++ b/src/agora_agent/agents/types/start_agents_request_properties_advanced_features.py @@ -29,7 +29,7 @@ class StartAgentsRequestPropertiesAdvancedFeatures(UncheckedBaseModel): enable_tools: typing.Optional[bool] = pydantic.Field(default=None) """ - Enable invocation for MCP servers and inline REST tools. + Enable tool invocation. When enabled, the agent can invoke tools provided by the MCP server to implement advanced functionality. """ if IS_PYDANTIC_V2: diff --git a/src/agora_agent/types/anam_avatar_params.py b/src/agora_agent/types/anam_avatar_params.py new file mode 100644 index 0000000..8da3d0b --- /dev/null +++ b/src/agora_agent/types/anam_avatar_params.py @@ -0,0 +1,74 @@ +# 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 .anam_avatar_params_quality import AnamAvatarParamsQuality +from .anam_avatar_params_video_encoding import AnamAvatarParamsVideoEncoding + + +class AnamAvatarParams(UncheckedBaseModel): + """ + Anam Avatar configuration parameters. + """ + + api_key: str = pydantic.Field() + """ + Anam API key. + """ + + avatar_id: str = pydantic.Field() + """ + The unique identifier for the Anam avatar you want to use. + """ + + agora_uid: str = pydantic.Field() + """ + The unique identifier for the avatar's RTC connection. This must be different from other participants in the channel. + """ + + agora_token: str = pydantic.Field() + """ + The RTC token that authorizes the avatar to join the video channel. + """ + + sample_rate: typing.Optional[int] = pydantic.Field(default=None) + """ + The audio sample rate in Hz. + """ + + quality: typing.Optional[AnamAvatarParamsQuality] = pydantic.Field(default=None) + """ + The video quality level. + """ + + video_encoding: typing.Optional[AnamAvatarParamsVideoEncoding] = pydantic.Field(default=None) + """ + The video encoding format. + """ + + avatar_model: typing.Optional[str] = pydantic.Field(default=None) + """ + Anam avatar model, such as `cara_mk4` for Cara 4 portrait mode. + """ + + video_width: typing.Optional[int] = pydantic.Field(default=None) + """ + Anam output video width in pixels. Set together with `video_height`; omit both to use the model default resolution. + """ + + video_height: typing.Optional[int] = pydantic.Field(default=None) + """ + Anam output video height in pixels. Set together with `video_width`; omit both to use the model default resolution. + """ + + 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/anam_avatar_params_quality.py b/src/agora_agent/types/anam_avatar_params_quality.py new file mode 100644 index 0000000..167f503 --- /dev/null +++ b/src/agora_agent/types/anam_avatar_params_quality.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +AnamAvatarParamsQuality = typing.Union[typing.Literal["high", "medium", "low"], typing.Any] diff --git a/src/agora_agent/types/anam_avatar_params_video_encoding.py b/src/agora_agent/types/anam_avatar_params_video_encoding.py new file mode 100644 index 0000000..11c0b12 --- /dev/null +++ b/src/agora_agent/types/anam_avatar_params_video_encoding.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +AnamAvatarParamsVideoEncoding = typing.Union[typing.Literal["H264", "AV1"], typing.Any] diff --git a/src/agora_agent/types/speechmatics_asr_params.py b/src/agora_agent/types/speechmatics_asr_params.py index c1b7232..4709d22 100644 --- a/src/agora_agent/types/speechmatics_asr_params.py +++ b/src/agora_agent/types/speechmatics_asr_params.py @@ -12,19 +12,11 @@ class SpeechmaticsAsrParams(UncheckedBaseModel): Speechmatics ASR configuration parameters. """ - key: typing.Optional[str] = pydantic.Field(default=None) + api_key: str = pydantic.Field() """ Speechmatics API key """ - api_key: typing.Optional[str] = pydantic.Field( - default=None, - deprecated="Use key instead.", - ) - """ - Deprecated alias for key. The SDK normalizes it to key during validation. - """ - language: str = pydantic.Field() """ Language code to use for transcription @@ -35,33 +27,6 @@ class SpeechmaticsAsrParams(UncheckedBaseModel): WebSocket URL for the Speechmatics streaming API """ - if IS_PYDANTIC_V2: - - @pydantic.model_validator(mode="before") - @classmethod - def _normalize_api_key(cls, values: typing.Any) -> typing.Any: - if not isinstance(values, typing.Mapping): - return values - normalized = dict(values) - legacy_key = normalized.pop("api_key", None) - if legacy_key is not None: - normalized.setdefault("key", legacy_key) - if normalized.get("key") is None: - raise ValueError("SpeechmaticsAsrParams requires key") - return normalized - - else: - - @pydantic.root_validator(pre=True) - def _normalize_api_key(cls, values: typing.Dict[str, typing.Any]) -> typing.Dict[str, typing.Any]: - normalized = dict(values) - legacy_key = normalized.pop("api_key", None) - if legacy_key is not None: - normalized.setdefault("key", legacy_key) - if normalized.get("key") is None: - raise ValueError("SpeechmaticsAsrParams requires key") - return normalized - if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 else: From 0f4dc6b3851ca7a5da608dce8e8f2a9ed99269bb Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Wed, 16 Sep 2026 11:18:53 +0000 Subject: [PATCH 2/2] [fern-replay] Applied customizations Patches applied (3): - patch-13d8e068: chore: ignore local venv and planning docs - patch-a065088b: fix(vendors): send Speechmatics STT key instead of api_key - patch-33a436b3: fix: address v2.8.0 release review findings Patches with unresolved conflicts (2): - patch-8465addc: chore: prepare v2.8.1 release - patch-c204f469: chore: prepare v2.9.0 release Run `fern-replay resolve` to apply these customizations. --- .fern/replay.lock | 14 +++---- .gitignore | 2 + ...ts_request_properties_advanced_features.py | 2 +- .../types/speechmatics_asr_params.py | 37 ++++++++++++++++++- 4 files changed, 46 insertions(+), 9 deletions(-) diff --git a/.fern/replay.lock b/.fern/replay.lock index 147c6a2..699a092 100644 --- a/.fern/replay.lock +++ b/.fern/replay.lock @@ -66,20 +66,20 @@ generations: cli_version: unknown generator_versions: fernapi/fern-python-sdk: 4.37.0 - - commit_sha: c59b52fe317aeebe3651db3f63e7cf9f04454958 - tree_hash: 554422ea37528b3ec6d22e02052a9b1d96d107c7 - timestamp: 2026-09-16T08:58:10.673Z + - commit_sha: f7e9b5d993665a16b43eb1d7d442b118fbeffa4b + tree_hash: 68519b3d82b64ac128a76d6f5a86b1d4e5661410 + timestamp: 2026-09-16T11:18:46.374Z cli_version: unknown generator_versions: fernapi/fern-python-sdk: 4.37.0 -current_generation: c59b52fe317aeebe3651db3f63e7cf9f04454958 +current_generation: f7e9b5d993665a16b43eb1d7d442b118fbeffa4b 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: c59b52fe317aeebe3651db3f63e7cf9f04454958 + base_generation: f7e9b5d993665a16b43eb1d7d442b118fbeffa4b files: - .gitignore patch_content: | @@ -108,7 +108,7 @@ patches: original_commit: a065088b4c45e2ca7e1bb91b1a899b8444800121 original_message: "fix(vendors): send Speechmatics STT key instead of api_key" original_author: digitallysavvy - base_generation: c59b52fe317aeebe3651db3f63e7cf9f04454958 + base_generation: f7e9b5d993665a16b43eb1d7d442b118fbeffa4b files: - src/agora_agent/types/speechmatics_asr_params.py patch_content: | @@ -251,7 +251,7 @@ patches: original_commit: 33a436b3bdb6f2a6fe4d8987b6536c2f0ac2862e original_message: "fix: address v2.8.0 release review findings" original_author: digitallysavvy - base_generation: c59b52fe317aeebe3651db3f63e7cf9f04454958 + base_generation: f7e9b5d993665a16b43eb1d7d442b118fbeffa4b files: - src/agora_agent/agents/types/start_agents_request_properties_advanced_features.py patch_content: | diff --git a/.gitignore b/.gitignore index d2e4ca8..3e30921 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ __pycache__/ dist/ poetry.toml +.venv/ +docs/superpowers/ diff --git a/src/agora_agent/agents/types/start_agents_request_properties_advanced_features.py b/src/agora_agent/agents/types/start_agents_request_properties_advanced_features.py index e75f098..667e20e 100644 --- a/src/agora_agent/agents/types/start_agents_request_properties_advanced_features.py +++ b/src/agora_agent/agents/types/start_agents_request_properties_advanced_features.py @@ -29,7 +29,7 @@ class StartAgentsRequestPropertiesAdvancedFeatures(UncheckedBaseModel): enable_tools: typing.Optional[bool] = pydantic.Field(default=None) """ - Enable tool invocation. When enabled, the agent can invoke tools provided by the MCP server to implement advanced functionality. + Enable invocation for MCP servers and inline REST tools. """ if IS_PYDANTIC_V2: diff --git a/src/agora_agent/types/speechmatics_asr_params.py b/src/agora_agent/types/speechmatics_asr_params.py index 4709d22..c1b7232 100644 --- a/src/agora_agent/types/speechmatics_asr_params.py +++ b/src/agora_agent/types/speechmatics_asr_params.py @@ -12,11 +12,19 @@ class SpeechmaticsAsrParams(UncheckedBaseModel): Speechmatics ASR configuration parameters. """ - api_key: str = pydantic.Field() + key: typing.Optional[str] = pydantic.Field(default=None) """ Speechmatics API key """ + api_key: typing.Optional[str] = pydantic.Field( + default=None, + deprecated="Use key instead.", + ) + """ + Deprecated alias for key. The SDK normalizes it to key during validation. + """ + language: str = pydantic.Field() """ Language code to use for transcription @@ -27,6 +35,33 @@ class SpeechmaticsAsrParams(UncheckedBaseModel): WebSocket URL for the Speechmatics streaming API """ + if IS_PYDANTIC_V2: + + @pydantic.model_validator(mode="before") + @classmethod + def _normalize_api_key(cls, values: typing.Any) -> typing.Any: + if not isinstance(values, typing.Mapping): + return values + normalized = dict(values) + legacy_key = normalized.pop("api_key", None) + if legacy_key is not None: + normalized.setdefault("key", legacy_key) + if normalized.get("key") is None: + raise ValueError("SpeechmaticsAsrParams requires key") + return normalized + + else: + + @pydantic.root_validator(pre=True) + def _normalize_api_key(cls, values: typing.Dict[str, typing.Any]) -> typing.Dict[str, typing.Any]: + normalized = dict(values) + legacy_key = normalized.pop("api_key", None) + if legacy_key is not None: + normalized.setdefault("key", legacy_key) + if normalized.get("key") is None: + raise ValueError("SpeechmaticsAsrParams requires key") + return normalized + if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 else: