diff --git a/pyproject.toml b/pyproject.toml index 41850495..59ea5960 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ dynamic = ["version"] [tool.poetry] name = "elevenlabs" -version = "2.49.0" +version = "2.49.1" description = "" readme = "README.md" authors = [] diff --git a/src/elevenlabs/core/client_wrapper.py b/src/elevenlabs/core/client_wrapper.py index efe50811..e56a3f1a 100644 --- a/src/elevenlabs/core/client_wrapper.py +++ b/src/elevenlabs/core/client_wrapper.py @@ -22,10 +22,10 @@ def __init__( def get_headers(self) -> typing.Dict[str, str]: headers: typing.Dict[str, str] = { - "User-Agent": "elevenlabs/2.49.0", + "User-Agent": "elevenlabs/2.49.1", "X-Fern-Language": "Python", "X-Fern-SDK-Name": "elevenlabs", - "X-Fern-SDK-Version": "2.49.0", + "X-Fern-SDK-Version": "2.49.1", **(self.get_custom_headers() or {}), } if self._api_key is not None: diff --git a/src/elevenlabs/speech_engine/client.py b/src/elevenlabs/speech_engine/client.py index f6870885..7b3f2fb7 100644 --- a/src/elevenlabs/speech_engine/client.py +++ b/src/elevenlabs/speech_engine/client.py @@ -13,6 +13,7 @@ from ..types.privacy_config_input import PrivacyConfigInput from ..types.sort_direction import SortDirection from ..types.speech_engine_config import SpeechEngineConfig +from ..types.speech_engine_conversation_initiation_client_data_config import SpeechEngineConversationInitiationClientDataConfig from ..types.speech_engine_response import SpeechEngineResponse from ..types.tts_conversational_config_input import TtsConversationalConfigInput from .raw_client import AsyncRawSpeechEngineClient, RawSpeechEngineClient @@ -112,6 +113,7 @@ def create( call_limits: typing.Optional[AgentCallLimits] = OMIT, language: typing.Optional[str] = OMIT, tags: typing.Optional[typing.Sequence[str]] = OMIT, + overrides: typing.Optional[SpeechEngineConversationInitiationClientDataConfig] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> SpeechEngineResponse: """ @@ -181,6 +183,7 @@ def create( call_limits=call_limits, language=language, tags=tags, + overrides=overrides, request_options=request_options, ) return _response.data @@ -427,6 +430,7 @@ async def create( call_limits: typing.Optional[AgentCallLimits] = OMIT, language: typing.Optional[str] = OMIT, tags: typing.Optional[typing.Sequence[str]] = OMIT, + overrides: typing.Optional[SpeechEngineConversationInitiationClientDataConfig] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> SpeechEngineResponse: """ @@ -504,6 +508,7 @@ async def main() -> None: call_limits=call_limits, language=language, tags=tags, + overrides=overrides, request_options=request_options, ) return _response.data diff --git a/src/elevenlabs/speech_engine/raw_client.py b/src/elevenlabs/speech_engine/raw_client.py index e7784e76..d991374a 100644 --- a/src/elevenlabs/speech_engine/raw_client.py +++ b/src/elevenlabs/speech_engine/raw_client.py @@ -20,6 +20,7 @@ from ..types.privacy_config_input import PrivacyConfigInput from ..types.sort_direction import SortDirection from ..types.speech_engine_config import SpeechEngineConfig +from ..types.speech_engine_conversation_initiation_client_data_config import SpeechEngineConversationInitiationClientDataConfig from ..types.speech_engine_response import SpeechEngineResponse from ..types.tts_conversational_config_input import TtsConversationalConfigInput @@ -120,6 +121,7 @@ def create( call_limits: typing.Optional[AgentCallLimits] = OMIT, language: typing.Optional[str] = OMIT, tags: typing.Optional[typing.Sequence[str]] = OMIT, + overrides: typing.Optional[SpeechEngineConversationInitiationClientDataConfig] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[SpeechEngineResponse]: """ @@ -193,6 +195,9 @@ def create( ), "language": language, "tags": tags, + "overrides": convert_and_respect_annotation_metadata( + object_=overrides, annotation=SpeechEngineConversationInitiationClientDataConfig, direction="write" + ), }, headers={ "content-type": "application/json", @@ -525,6 +530,7 @@ async def create( call_limits: typing.Optional[AgentCallLimits] = OMIT, language: typing.Optional[str] = OMIT, tags: typing.Optional[typing.Sequence[str]] = OMIT, + overrides: typing.Optional[SpeechEngineConversationInitiationClientDataConfig] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[SpeechEngineResponse]: """ @@ -598,6 +604,9 @@ async def create( ), "language": language, "tags": tags, + "overrides": convert_and_respect_annotation_metadata( + object_=overrides, annotation=SpeechEngineConversationInitiationClientDataConfig, direction="write" + ), }, headers={ "content-type": "application/json", diff --git a/src/elevenlabs/speech_engine/resource.py b/src/elevenlabs/speech_engine/resource.py index 7d25bb16..b2171ebb 100644 --- a/src/elevenlabs/speech_engine/resource.py +++ b/src/elevenlabs/speech_engine/resource.py @@ -11,6 +11,7 @@ from .server import SpeechEngineServer from .session import SpeechEngineSession from .types import WebSocketLike +from ..types.speech_engine_response import SpeechEngineResponse logger = logging.getLogger("elevenlabs.speech_engine") @@ -116,10 +117,15 @@ def __init__( self, engine_id: str, client_wrapper: typing.Any = None, + response: typing.Optional[SpeechEngineResponse] = None, ) -> None: self.engine_id = engine_id self._client_wrapper = client_wrapper + # Full API response, accessible as engine.config.asr, engine.config.overrides, etc. + # None when the resource is constructed directly without an API call. + self.config: typing.Optional[SpeechEngineResponse] = response + def _get_api_key(self) -> typing.Optional[str]: if self._client_wrapper is None: return None diff --git a/src/elevenlabs/speech_engine_custom.py b/src/elevenlabs/speech_engine_custom.py index 18115838..a316b8b7 100644 --- a/src/elevenlabs/speech_engine_custom.py +++ b/src/elevenlabs/speech_engine_custom.py @@ -10,6 +10,7 @@ from .types.conversation_config_input import ConversationConfigInput from .types.privacy_config_input import PrivacyConfigInput from .types.speech_engine_config import SpeechEngineConfig +from .types.speech_engine_conversation_initiation_client_data_config import SpeechEngineConversationInitiationClientDataConfig from .types.tts_conversational_config_input import TtsConversationalConfigInput OMIT = typing.cast(typing.Any, ...) @@ -31,6 +32,7 @@ def create( # type: ignore[override] call_limits: typing.Optional[AgentCallLimits] = OMIT, language: typing.Optional[str] = OMIT, tags: typing.Optional[typing.Sequence[str]] = OMIT, + overrides: typing.Optional[SpeechEngineConversationInitiationClientDataConfig] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> SpeechEngineResource: """Create a Speech Engine resource. @@ -52,11 +54,13 @@ def create( # type: ignore[override] call_limits=call_limits, language=language, tags=tags, + overrides=overrides, request_options=request_options, ) return SpeechEngineResource( engine_id=response.speech_engine_id, client_wrapper=self._raw_client._client_wrapper, + response=response, ) def get( # type: ignore[override] @@ -73,10 +77,11 @@ def get( # type: ignore[override] :meth:`~SpeechEngineResource.create_session`, :meth:`~SpeechEngineResource.verify_request`). """ - super().get(speech_engine_id, request_options=request_options) + response = super().get(speech_engine_id, request_options=request_options) return SpeechEngineResource( engine_id=speech_engine_id, client_wrapper=self._raw_client._client_wrapper, + response=response, ) def update( # type: ignore[override] @@ -103,7 +108,7 @@ def update( # type: ignore[override] :meth:`~SpeechEngineResource.create_session`, :meth:`~SpeechEngineResource.verify_request`). """ - super().update( + response = super().update( speech_engine_id, name=name, speech_engine=speech_engine, @@ -120,6 +125,7 @@ def update( # type: ignore[override] return SpeechEngineResource( engine_id=speech_engine_id, client_wrapper=self._raw_client._client_wrapper, + response=response, ) @@ -139,6 +145,7 @@ async def create( # type: ignore[override] call_limits: typing.Optional[AgentCallLimits] = OMIT, language: typing.Optional[str] = OMIT, tags: typing.Optional[typing.Sequence[str]] = OMIT, + overrides: typing.Optional[SpeechEngineConversationInitiationClientDataConfig] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> SpeechEngineResource: """Create a Speech Engine resource. @@ -160,11 +167,13 @@ async def create( # type: ignore[override] call_limits=call_limits, language=language, tags=tags, + overrides=overrides, request_options=request_options, ) return SpeechEngineResource( engine_id=response.speech_engine_id, client_wrapper=self._raw_client._client_wrapper, + response=response, ) async def get( # type: ignore[override] @@ -181,10 +190,11 @@ async def get( # type: ignore[override] :meth:`~SpeechEngineResource.create_session`, :meth:`~SpeechEngineResource.verify_request`). """ - await super().get(speech_engine_id, request_options=request_options) + response = await super().get(speech_engine_id, request_options=request_options) return SpeechEngineResource( engine_id=speech_engine_id, client_wrapper=self._raw_client._client_wrapper, + response=response, ) async def update( # type: ignore[override] @@ -211,7 +221,7 @@ async def update( # type: ignore[override] :meth:`~SpeechEngineResource.create_session`, :meth:`~SpeechEngineResource.verify_request`). """ - await super().update( + response = await super().update( speech_engine_id, name=name, speech_engine=speech_engine, @@ -228,4 +238,5 @@ async def update( # type: ignore[override] return SpeechEngineResource( engine_id=speech_engine_id, client_wrapper=self._raw_client._client_wrapper, + response=response, )