diff --git a/.fern/metadata.json b/.fern/metadata.json index 3ce9b76e..116c2979 100644 --- a/.fern/metadata.json +++ b/.fern/metadata.json @@ -55,5 +55,5 @@ } ] }, - "originGitCommit": "b989ef0a4d6a8c90b4a9e3935f9c1fa5144a7098" + "originGitCommit": "64f71eb5677230e7df074ef6b4478e0f51a3b616" } \ No newline at end of file diff --git a/.fern/replay.lock b/.fern/replay.lock index 1688e8e5..5c027d88 100644 --- a/.fern/replay.lock +++ b/.fern/replay.lock @@ -24,7 +24,13 @@ generations: cli_version: unknown generator_versions: fernapi/fern-python-sdk: 4.42.0 -current_generation: 9a1aed5baf8ba11a6319713529deadb212aa38de + - commit_sha: 50965d3c84d178394d7276feaf440e1180077570 + tree_hash: 80f079181bbb8c25740527893363c3c3365293e5 + timestamp: 2026-07-13T08:25:02.899Z + cli_version: unknown + generator_versions: + fernapi/fern-python-sdk: 4.42.0 +current_generation: 50965d3c84d178394d7276feaf440e1180077570 patches: - id: patch-1b45413e content_hash: sha256:39ab43ecd30a8791dc5eef09812657f167c0c1dfe33609c89795b12015738682 diff --git a/pyproject.toml b/pyproject.toml index a0468adc..775388c5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ dynamic = ["version"] [tool.poetry] name = "elevenlabs" -version = "2.57.0" +version = "2.58.0" description = "" readme = "README.md" authors = [] diff --git a/reference.md b/reference.md index 795a7037..14bc7dda 100644 --- a/reference.md +++ b/reference.md @@ -6791,6 +6791,84 @@ client.service_accounts.list() + + + + +
client.service_accounts.create(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Create a new service account in the workspace. By default, a workspace can have up to 20 service accounts. Enterprise customers may request an increase to this limit, up to 100. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from elevenlabs import ElevenLabs + +client = ElevenLabs( + api_key="YOUR_API_KEY", +) +client.service_accounts.create( + name="name", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**name:** `str` + +
+
+ +
+
+ +**default_sharing_groups:** `typing.Optional[typing.Sequence[DefaultSharingGroupConfig]]` — List of groups with their permission levels to share with by default. Each entry should specify a group_id and a permission_level (admin, editor, or viewer). + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ +
@@ -30938,6 +31016,14 @@ client.workspace.invites.create(
+**usage_limit:** `typing.Optional[int]` — Monthly credit usage limit for the invitee. Omit or set to null for no custom cap. + +
+
+ +
+
+ **request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -31024,6 +31110,14 @@ client.workspace.invites.create_batch(
+**usage_limit:** `typing.Optional[int]` — Monthly credit usage limit for the invitee. Omit or set to null for no custom cap. + +
+
+ +
+
+ **request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -31107,6 +31201,66 @@ client.workspace.invites.delete( ## Workspace Members +
client.workspace.members.list() +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Gets a list of all members of the workspace, including locked members. Service accounts are excluded. Requires the workspace_members_read permission. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from elevenlabs import ElevenLabs + +client = ElevenLabs( + api_key="YOUR_API_KEY", +) +client.workspace.members.list() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+
client.workspace.members.update(...)
diff --git a/src/elevenlabs/__init__.py b/src/elevenlabs/__init__.py index dbc0e273..500d08c0 100644 --- a/src/elevenlabs/__init__.py +++ b/src/elevenlabs/__init__.py @@ -574,6 +574,8 @@ DashboardCriteriaChartModel, DashboardDataCollectionChartModel, DataCollectionResultCommonModel, + DefaultSharingGroupConfig, + DefaultSharingGroupConfigPermissionLevel, DefaultSharingGroupResponseModel, DefaultSharingGroupResponseModelPermissionLevel, DeleteAgentProcedureParams, @@ -1501,10 +1503,14 @@ TextNormalisationType, TextToDialogueWebsocketApplyTextNormalizationEnum, TextToDialogueWebsocketAudioChunk, + TextToDialogueWebsocketAudioChunkMulti, TextToDialogueWebsocketClientMessage, + TextToDialogueWebsocketClientMessageMulti, TextToDialogueWebsocketError, TextToDialogueWebsocketFinal, TextToDialogueWebsocketFinalAudioForTurn, + TextToDialogueWebsocketFinalAudioForTurnMulti, + TextToDialogueWebsocketFinalMulti, TextToDialogueWebsocketOutputFormatEnum, TextToDialogueWebsocketVoiceInput, TextToDialogueWebsocketVoiceSettings, @@ -1871,12 +1877,14 @@ WorkspaceAuditLogsPageResponse, WorkspaceBatchCallsResponse, WorkspaceCreateApiKeyResponseModel, + WorkspaceCreateServiceAccountResponseModel, WorkspaceCreateWebhookResponseModel, WorkspaceGroupByNameResponseModel, WorkspaceGroupPermission, WorkspaceGroupResponseModel, WorkspaceGroupResponseModelGroupPvcLimit, WorkspaceGroupResponseModelGroupUsageLimit, + WorkspaceMemberResponseModel, WorkspaceResourceType, WorkspaceServiceAccountListResponseModel, WorkspaceServiceAccountResponseModel, @@ -1920,6 +1928,7 @@ usage, user, v_1_speech_to_text_realtime, + v_1_text_to_dialogue_multi_stream_input, v_1_text_to_dialogue_stream_input, v_1_text_to_speech_voice_id_multi_stream_input, v_1_text_to_speech_voice_id_stream_input, @@ -2033,6 +2042,7 @@ ) from .text_to_voice import VoiceDesignRequestModelModelId from .v_1_speech_to_text_realtime import ReceiveTranscription, TextToSpeechCommitStrategy + from .v_1_text_to_dialogue_multi_stream_input import ReceiveTextToDialogueWebsocketMessageMulti from .v_1_text_to_dialogue_stream_input import ReceiveTextToDialogueWebsocketMessage from .v_1_text_to_speech_voice_id_multi_stream_input import ReceiveMessageMulti, SendMessageMulti from .v_1_text_to_speech_voice_id_stream_input import ReceiveMessage, SendMessage @@ -2646,6 +2656,8 @@ "DashboardCriteriaChartModel": ".types", "DashboardDataCollectionChartModel": ".types", "DataCollectionResultCommonModel": ".types", + "DefaultSharingGroupConfig": ".types", + "DefaultSharingGroupConfigPermissionLevel": ".types", "DefaultSharingGroupResponseModel": ".types", "DefaultSharingGroupResponseModelPermissionLevel": ".types", "DeleteAgentProcedureParams": ".types", @@ -3389,6 +3401,7 @@ "ReceiveMessage": ".v_1_text_to_speech_voice_id_stream_input", "ReceiveMessageMulti": ".v_1_text_to_speech_voice_id_multi_stream_input", "ReceiveTextToDialogueWebsocketMessage": ".v_1_text_to_dialogue_stream_input", + "ReceiveTextToDialogueWebsocketMessageMulti": ".v_1_text_to_dialogue_multi_stream_input", "ReceiveTranscription": ".v_1_speech_to_text_realtime", "ReceiveTranslateStreamMessage": ".v_1_translate_realtime", "ReceiveUpstreamMessage": ".speech_engine_upstream", @@ -3628,10 +3641,14 @@ "TextToDialogueConvertWithTimestampsRequestOutputFormat": ".text_to_dialogue", "TextToDialogueWebsocketApplyTextNormalizationEnum": ".types", "TextToDialogueWebsocketAudioChunk": ".types", + "TextToDialogueWebsocketAudioChunkMulti": ".types", "TextToDialogueWebsocketClientMessage": ".types", + "TextToDialogueWebsocketClientMessageMulti": ".types", "TextToDialogueWebsocketError": ".types", "TextToDialogueWebsocketFinal": ".types", "TextToDialogueWebsocketFinalAudioForTurn": ".types", + "TextToDialogueWebsocketFinalAudioForTurnMulti": ".types", + "TextToDialogueWebsocketFinalMulti": ".types", "TextToDialogueWebsocketOutputFormatEnum": ".types", "TextToDialogueWebsocketVoiceInput": ".types", "TextToDialogueWebsocketVoiceSettings": ".types", @@ -4011,12 +4028,14 @@ "WorkspaceAuditLogsPageResponse": ".types", "WorkspaceBatchCallsResponse": ".types", "WorkspaceCreateApiKeyResponseModel": ".types", + "WorkspaceCreateServiceAccountResponseModel": ".types", "WorkspaceCreateWebhookResponseModel": ".types", "WorkspaceGroupByNameResponseModel": ".types", "WorkspaceGroupPermission": ".types", "WorkspaceGroupResponseModel": ".types", "WorkspaceGroupResponseModelGroupPvcLimit": ".types", "WorkspaceGroupResponseModelGroupUsageLimit": ".types", + "WorkspaceMemberResponseModel": ".types", "WorkspaceResourceType": ".types", "WorkspaceServiceAccountListResponseModel": ".types", "WorkspaceServiceAccountResponseModel": ".types", @@ -4053,6 +4072,7 @@ "usage": ".usage", "user": ".user", "v_1_speech_to_text_realtime": ".v_1_speech_to_text_realtime", + "v_1_text_to_dialogue_multi_stream_input": ".v_1_text_to_dialogue_multi_stream_input", "v_1_text_to_dialogue_stream_input": ".v_1_text_to_dialogue_stream_input", "v_1_text_to_speech_voice_id_multi_stream_input": ".v_1_text_to_speech_voice_id_multi_stream_input", "v_1_text_to_speech_voice_id_stream_input": ".v_1_text_to_speech_voice_id_stream_input", @@ -4688,6 +4708,8 @@ def __dir__(): "DashboardCriteriaChartModel", "DashboardDataCollectionChartModel", "DataCollectionResultCommonModel", + "DefaultSharingGroupConfig", + "DefaultSharingGroupConfigPermissionLevel", "DefaultSharingGroupResponseModel", "DefaultSharingGroupResponseModelPermissionLevel", "DeleteAgentProcedureParams", @@ -5431,6 +5453,7 @@ def __dir__(): "ReceiveMessage", "ReceiveMessageMulti", "ReceiveTextToDialogueWebsocketMessage", + "ReceiveTextToDialogueWebsocketMessageMulti", "ReceiveTranscription", "ReceiveTranslateStreamMessage", "ReceiveUpstreamMessage", @@ -5670,10 +5693,14 @@ def __dir__(): "TextToDialogueConvertWithTimestampsRequestOutputFormat", "TextToDialogueWebsocketApplyTextNormalizationEnum", "TextToDialogueWebsocketAudioChunk", + "TextToDialogueWebsocketAudioChunkMulti", "TextToDialogueWebsocketClientMessage", + "TextToDialogueWebsocketClientMessageMulti", "TextToDialogueWebsocketError", "TextToDialogueWebsocketFinal", "TextToDialogueWebsocketFinalAudioForTurn", + "TextToDialogueWebsocketFinalAudioForTurnMulti", + "TextToDialogueWebsocketFinalMulti", "TextToDialogueWebsocketOutputFormatEnum", "TextToDialogueWebsocketVoiceInput", "TextToDialogueWebsocketVoiceSettings", @@ -6053,12 +6080,14 @@ def __dir__(): "WorkspaceAuditLogsPageResponse", "WorkspaceBatchCallsResponse", "WorkspaceCreateApiKeyResponseModel", + "WorkspaceCreateServiceAccountResponseModel", "WorkspaceCreateWebhookResponseModel", "WorkspaceGroupByNameResponseModel", "WorkspaceGroupPermission", "WorkspaceGroupResponseModel", "WorkspaceGroupResponseModelGroupPvcLimit", "WorkspaceGroupResponseModelGroupUsageLimit", + "WorkspaceMemberResponseModel", "WorkspaceResourceType", "WorkspaceServiceAccountListResponseModel", "WorkspaceServiceAccountResponseModel", @@ -6095,6 +6124,7 @@ def __dir__(): "usage", "user", "v_1_speech_to_text_realtime", + "v_1_text_to_dialogue_multi_stream_input", "v_1_text_to_dialogue_stream_input", "v_1_text_to_speech_voice_id_multi_stream_input", "v_1_text_to_speech_voice_id_stream_input", diff --git a/src/elevenlabs/core/client_wrapper.py b/src/elevenlabs/core/client_wrapper.py index 6c309ae5..bb310b3a 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.57.0", + "User-Agent": "elevenlabs/2.58.0", "X-Fern-Language": "Python", "X-Fern-SDK-Name": "elevenlabs", - "X-Fern-SDK-Version": "2.57.0", + "X-Fern-SDK-Version": "2.58.0", **(self.get_custom_headers() or {}), } if self._api_key is not None: diff --git a/src/elevenlabs/service_accounts/client.py b/src/elevenlabs/service_accounts/client.py index 0856d553..f7c81d38 100644 --- a/src/elevenlabs/service_accounts/client.py +++ b/src/elevenlabs/service_accounts/client.py @@ -6,11 +6,15 @@ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from ..core.request_options import RequestOptions +from ..types.default_sharing_group_config import DefaultSharingGroupConfig +from ..types.workspace_create_service_account_response_model import WorkspaceCreateServiceAccountResponseModel from ..types.workspace_service_account_list_response_model import WorkspaceServiceAccountListResponseModel from .raw_client import AsyncRawServiceAccountsClient, RawServiceAccountsClient if typing.TYPE_CHECKING: from .api_keys.client import ApiKeysClient, AsyncApiKeysClient +# this is used as the default value for optional parameters +OMIT = typing.cast(typing.Any, ...) class ServiceAccountsClient: @@ -58,6 +62,47 @@ def list( _response = self._raw_client.list(request_options=request_options) return _response.data + def create( + self, + *, + name: str, + default_sharing_groups: typing.Optional[typing.Sequence[DefaultSharingGroupConfig]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> WorkspaceCreateServiceAccountResponseModel: + """ + Create a new service account in the workspace. By default, a workspace can have up to 20 service accounts. Enterprise customers may request an increase to this limit, up to 100. + + Parameters + ---------- + name : str + + default_sharing_groups : typing.Optional[typing.Sequence[DefaultSharingGroupConfig]] + List of groups with their permission levels to share with by default. Each entry should specify a group_id and a permission_level (admin, editor, or viewer). + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + WorkspaceCreateServiceAccountResponseModel + Successful Response + + Examples + -------- + from elevenlabs import ElevenLabs + + client = ElevenLabs( + api_key="YOUR_API_KEY", + ) + client.service_accounts.create( + name="name", + ) + """ + _response = self._raw_client.create( + name=name, default_sharing_groups=default_sharing_groups, request_options=request_options + ) + return _response.data + @property def api_keys(self): if self._api_keys is None: @@ -120,6 +165,55 @@ async def main() -> None: _response = await self._raw_client.list(request_options=request_options) return _response.data + async def create( + self, + *, + name: str, + default_sharing_groups: typing.Optional[typing.Sequence[DefaultSharingGroupConfig]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> WorkspaceCreateServiceAccountResponseModel: + """ + Create a new service account in the workspace. By default, a workspace can have up to 20 service accounts. Enterprise customers may request an increase to this limit, up to 100. + + Parameters + ---------- + name : str + + default_sharing_groups : typing.Optional[typing.Sequence[DefaultSharingGroupConfig]] + List of groups with their permission levels to share with by default. Each entry should specify a group_id and a permission_level (admin, editor, or viewer). + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + WorkspaceCreateServiceAccountResponseModel + Successful Response + + Examples + -------- + import asyncio + + from elevenlabs import AsyncElevenLabs + + client = AsyncElevenLabs( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.service_accounts.create( + name="name", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.create( + name=name, default_sharing_groups=default_sharing_groups, request_options=request_options + ) + return _response.data + @property def api_keys(self): if self._api_keys is None: diff --git a/src/elevenlabs/service_accounts/raw_client.py b/src/elevenlabs/service_accounts/raw_client.py index b70155d2..42b8fd69 100644 --- a/src/elevenlabs/service_accounts/raw_client.py +++ b/src/elevenlabs/service_accounts/raw_client.py @@ -7,10 +7,16 @@ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from ..core.http_response import AsyncHttpResponse, HttpResponse from ..core.request_options import RequestOptions +from ..core.serialization import convert_and_respect_annotation_metadata from ..core.unchecked_base_model import construct_type from ..errors.unprocessable_entity_error import UnprocessableEntityError +from ..types.default_sharing_group_config import DefaultSharingGroupConfig +from ..types.workspace_create_service_account_response_model import WorkspaceCreateServiceAccountResponseModel from ..types.workspace_service_account_list_response_model import WorkspaceServiceAccountListResponseModel +# this is used as the default value for optional parameters +OMIT = typing.cast(typing.Any, ...) + class RawServiceAccountsClient: def __init__(self, *, client_wrapper: SyncClientWrapper): @@ -63,6 +69,74 @@ def list( raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + def create( + self, + *, + name: str, + default_sharing_groups: typing.Optional[typing.Sequence[DefaultSharingGroupConfig]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[WorkspaceCreateServiceAccountResponseModel]: + """ + Create a new service account in the workspace. By default, a workspace can have up to 20 service accounts. Enterprise customers may request an increase to this limit, up to 100. + + Parameters + ---------- + name : str + + default_sharing_groups : typing.Optional[typing.Sequence[DefaultSharingGroupConfig]] + List of groups with their permission levels to share with by default. Each entry should specify a group_id and a permission_level (admin, editor, or viewer). + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[WorkspaceCreateServiceAccountResponseModel] + Successful Response + """ + _response = self._client_wrapper.httpx_client.request( + "v1/service-accounts", + method="POST", + json={ + "name": name, + "default_sharing_groups": convert_and_respect_annotation_metadata( + object_=default_sharing_groups, + annotation=typing.Sequence[DefaultSharingGroupConfig], + direction="write", + ), + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + WorkspaceCreateServiceAccountResponseModel, + construct_type( + type_=WorkspaceCreateServiceAccountResponseModel, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 422: + raise UnprocessableEntityError( + headers=dict(_response.headers), + body=typing.cast( + typing.Any, + construct_type( + type_=typing.Any, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + class AsyncRawServiceAccountsClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): @@ -114,3 +188,71 @@ async def list( except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + + async def create( + self, + *, + name: str, + default_sharing_groups: typing.Optional[typing.Sequence[DefaultSharingGroupConfig]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[WorkspaceCreateServiceAccountResponseModel]: + """ + Create a new service account in the workspace. By default, a workspace can have up to 20 service accounts. Enterprise customers may request an increase to this limit, up to 100. + + Parameters + ---------- + name : str + + default_sharing_groups : typing.Optional[typing.Sequence[DefaultSharingGroupConfig]] + List of groups with their permission levels to share with by default. Each entry should specify a group_id and a permission_level (admin, editor, or viewer). + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[WorkspaceCreateServiceAccountResponseModel] + Successful Response + """ + _response = await self._client_wrapper.httpx_client.request( + "v1/service-accounts", + method="POST", + json={ + "name": name, + "default_sharing_groups": convert_and_respect_annotation_metadata( + object_=default_sharing_groups, + annotation=typing.Sequence[DefaultSharingGroupConfig], + direction="write", + ), + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + WorkspaceCreateServiceAccountResponseModel, + construct_type( + type_=WorkspaceCreateServiceAccountResponseModel, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 422: + raise UnprocessableEntityError( + headers=dict(_response.headers), + body=typing.cast( + typing.Any, + construct_type( + type_=typing.Any, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) diff --git a/src/elevenlabs/types/__init__.py b/src/elevenlabs/types/__init__.py index 42ec8f6a..e393b528 100644 --- a/src/elevenlabs/types/__init__.py +++ b/src/elevenlabs/types/__init__.py @@ -663,6 +663,8 @@ from .dashboard_criteria_chart_model import DashboardCriteriaChartModel from .dashboard_data_collection_chart_model import DashboardDataCollectionChartModel from .data_collection_result_common_model import DataCollectionResultCommonModel + from .default_sharing_group_config import DefaultSharingGroupConfig + from .default_sharing_group_config_permission_level import DefaultSharingGroupConfigPermissionLevel from .default_sharing_group_response_model import DefaultSharingGroupResponseModel from .default_sharing_group_response_model_permission_level import DefaultSharingGroupResponseModelPermissionLevel from .delete_agent_procedure_params import DeleteAgentProcedureParams @@ -1686,10 +1688,14 @@ TextToDialogueWebsocketApplyTextNormalizationEnum, ) from .text_to_dialogue_websocket_audio_chunk import TextToDialogueWebsocketAudioChunk + from .text_to_dialogue_websocket_audio_chunk_multi import TextToDialogueWebsocketAudioChunkMulti from .text_to_dialogue_websocket_client_message import TextToDialogueWebsocketClientMessage + from .text_to_dialogue_websocket_client_message_multi import TextToDialogueWebsocketClientMessageMulti from .text_to_dialogue_websocket_error import TextToDialogueWebsocketError from .text_to_dialogue_websocket_final import TextToDialogueWebsocketFinal from .text_to_dialogue_websocket_final_audio_for_turn import TextToDialogueWebsocketFinalAudioForTurn + from .text_to_dialogue_websocket_final_audio_for_turn_multi import TextToDialogueWebsocketFinalAudioForTurnMulti + from .text_to_dialogue_websocket_final_multi import TextToDialogueWebsocketFinalMulti from .text_to_dialogue_websocket_output_format_enum import TextToDialogueWebsocketOutputFormatEnum from .text_to_dialogue_websocket_voice_input import TextToDialogueWebsocketVoiceInput from .text_to_dialogue_websocket_voice_settings import TextToDialogueWebsocketVoiceSettings @@ -2112,12 +2118,14 @@ from .workspace_audit_logs_page_response import WorkspaceAuditLogsPageResponse from .workspace_batch_calls_response import WorkspaceBatchCallsResponse from .workspace_create_api_key_response_model import WorkspaceCreateApiKeyResponseModel + from .workspace_create_service_account_response_model import WorkspaceCreateServiceAccountResponseModel from .workspace_create_webhook_response_model import WorkspaceCreateWebhookResponseModel from .workspace_group_by_name_response_model import WorkspaceGroupByNameResponseModel from .workspace_group_permission import WorkspaceGroupPermission from .workspace_group_response_model import WorkspaceGroupResponseModel from .workspace_group_response_model_group_pvc_limit import WorkspaceGroupResponseModelGroupPvcLimit from .workspace_group_response_model_group_usage_limit import WorkspaceGroupResponseModelGroupUsageLimit + from .workspace_member_response_model import WorkspaceMemberResponseModel from .workspace_resource_type import WorkspaceResourceType from .workspace_service_account_list_response_model import WorkspaceServiceAccountListResponseModel from .workspace_service_account_response_model import WorkspaceServiceAccountResponseModel @@ -2689,6 +2697,8 @@ "DashboardCriteriaChartModel": ".dashboard_criteria_chart_model", "DashboardDataCollectionChartModel": ".dashboard_data_collection_chart_model", "DataCollectionResultCommonModel": ".data_collection_result_common_model", + "DefaultSharingGroupConfig": ".default_sharing_group_config", + "DefaultSharingGroupConfigPermissionLevel": ".default_sharing_group_config_permission_level", "DefaultSharingGroupResponseModel": ".default_sharing_group_response_model", "DefaultSharingGroupResponseModelPermissionLevel": ".default_sharing_group_response_model_permission_level", "DeleteAgentProcedureParams": ".delete_agent_procedure_params", @@ -3616,10 +3626,14 @@ "TextNormalisationType": ".text_normalisation_type", "TextToDialogueWebsocketApplyTextNormalizationEnum": ".text_to_dialogue_websocket_apply_text_normalization_enum", "TextToDialogueWebsocketAudioChunk": ".text_to_dialogue_websocket_audio_chunk", + "TextToDialogueWebsocketAudioChunkMulti": ".text_to_dialogue_websocket_audio_chunk_multi", "TextToDialogueWebsocketClientMessage": ".text_to_dialogue_websocket_client_message", + "TextToDialogueWebsocketClientMessageMulti": ".text_to_dialogue_websocket_client_message_multi", "TextToDialogueWebsocketError": ".text_to_dialogue_websocket_error", "TextToDialogueWebsocketFinal": ".text_to_dialogue_websocket_final", "TextToDialogueWebsocketFinalAudioForTurn": ".text_to_dialogue_websocket_final_audio_for_turn", + "TextToDialogueWebsocketFinalAudioForTurnMulti": ".text_to_dialogue_websocket_final_audio_for_turn_multi", + "TextToDialogueWebsocketFinalMulti": ".text_to_dialogue_websocket_final_multi", "TextToDialogueWebsocketOutputFormatEnum": ".text_to_dialogue_websocket_output_format_enum", "TextToDialogueWebsocketVoiceInput": ".text_to_dialogue_websocket_voice_input", "TextToDialogueWebsocketVoiceSettings": ".text_to_dialogue_websocket_voice_settings", @@ -3986,12 +4000,14 @@ "WorkspaceAuditLogsPageResponse": ".workspace_audit_logs_page_response", "WorkspaceBatchCallsResponse": ".workspace_batch_calls_response", "WorkspaceCreateApiKeyResponseModel": ".workspace_create_api_key_response_model", + "WorkspaceCreateServiceAccountResponseModel": ".workspace_create_service_account_response_model", "WorkspaceCreateWebhookResponseModel": ".workspace_create_webhook_response_model", "WorkspaceGroupByNameResponseModel": ".workspace_group_by_name_response_model", "WorkspaceGroupPermission": ".workspace_group_permission", "WorkspaceGroupResponseModel": ".workspace_group_response_model", "WorkspaceGroupResponseModelGroupPvcLimit": ".workspace_group_response_model_group_pvc_limit", "WorkspaceGroupResponseModelGroupUsageLimit": ".workspace_group_response_model_group_usage_limit", + "WorkspaceMemberResponseModel": ".workspace_member_response_model", "WorkspaceResourceType": ".workspace_resource_type", "WorkspaceServiceAccountListResponseModel": ".workspace_service_account_list_response_model", "WorkspaceServiceAccountResponseModel": ".workspace_service_account_response_model", @@ -4587,6 +4603,8 @@ def __dir__(): "DashboardCriteriaChartModel", "DashboardDataCollectionChartModel", "DataCollectionResultCommonModel", + "DefaultSharingGroupConfig", + "DefaultSharingGroupConfigPermissionLevel", "DefaultSharingGroupResponseModel", "DefaultSharingGroupResponseModelPermissionLevel", "DeleteAgentProcedureParams", @@ -5514,10 +5532,14 @@ def __dir__(): "TextNormalisationType", "TextToDialogueWebsocketApplyTextNormalizationEnum", "TextToDialogueWebsocketAudioChunk", + "TextToDialogueWebsocketAudioChunkMulti", "TextToDialogueWebsocketClientMessage", + "TextToDialogueWebsocketClientMessageMulti", "TextToDialogueWebsocketError", "TextToDialogueWebsocketFinal", "TextToDialogueWebsocketFinalAudioForTurn", + "TextToDialogueWebsocketFinalAudioForTurnMulti", + "TextToDialogueWebsocketFinalMulti", "TextToDialogueWebsocketOutputFormatEnum", "TextToDialogueWebsocketVoiceInput", "TextToDialogueWebsocketVoiceSettings", @@ -5884,12 +5906,14 @@ def __dir__(): "WorkspaceAuditLogsPageResponse", "WorkspaceBatchCallsResponse", "WorkspaceCreateApiKeyResponseModel", + "WorkspaceCreateServiceAccountResponseModel", "WorkspaceCreateWebhookResponseModel", "WorkspaceGroupByNameResponseModel", "WorkspaceGroupPermission", "WorkspaceGroupResponseModel", "WorkspaceGroupResponseModelGroupPvcLimit", "WorkspaceGroupResponseModelGroupUsageLimit", + "WorkspaceMemberResponseModel", "WorkspaceResourceType", "WorkspaceServiceAccountListResponseModel", "WorkspaceServiceAccountResponseModel", diff --git a/src/elevenlabs/types/character_metadata_response_model.py b/src/elevenlabs/types/character_metadata_response_model.py index 67cb463c..5c0a7470 100644 --- a/src/elevenlabs/types/character_metadata_response_model.py +++ b/src/elevenlabs/types/character_metadata_response_model.py @@ -12,6 +12,7 @@ class CharacterMetadataResponseModel(UncheckedBaseModel): description: typing.Optional[str] = None sample_message: typing.Optional[str] = None + voice_creation_prompt_suggestion: typing.Optional[str] = None gender: typing.Optional[CharacterGender] = None age: typing.Optional[CharacterAge] = None accent: typing.Optional[str] = None diff --git a/src/elevenlabs/types/custom_guardrail_config.py b/src/elevenlabs/types/custom_guardrail_config.py index 736a6598..404dbbc7 100644 --- a/src/elevenlabs/types/custom_guardrail_config.py +++ b/src/elevenlabs/types/custom_guardrail_config.py @@ -34,7 +34,7 @@ class CustomGuardrailConfig(UncheckedBaseModel): history_message_count: typing.Optional[int] = pydantic.Field(default=None) """ - How many recent customer messages to include in the guardrail's history, plus the agent replies that follow them (and tool calls and results when history_include_tool_calls is enabled). Only customer messages count toward the limit. 0 (default) shows none; 1 shows the customer's latest message onward. When > 0, the guardrail prompt can refer to this history as ; the reply under evaluation appears as and may repeat at the end of the history. + How much recent history the guardrail sees before the reply it evaluates, counted in user messages (the agent replies between them are included too). The guardrail always gets a single transcript ending in the evaluated reply, marked 'AGENT [current reply]:'. 0 (default) adds no prior history (just that line); 1 adds the latest user message onward. """ trigger_action: typing.Optional[CustomGuardrailConfigTriggerAction] = None diff --git a/src/elevenlabs/types/default_sharing_group_config.py b/src/elevenlabs/types/default_sharing_group_config.py new file mode 100644 index 00000000..bf5f402a --- /dev/null +++ b/src/elevenlabs/types/default_sharing_group_config.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 .default_sharing_group_config_permission_level import DefaultSharingGroupConfigPermissionLevel + + +class DefaultSharingGroupConfig(UncheckedBaseModel): + group_id: str = pydantic.Field() + """ + The ID of the group to share with + """ + + permission_level: DefaultSharingGroupConfigPermissionLevel = pydantic.Field() + """ + The permission level to grant to the group + """ + + 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/elevenlabs/types/default_sharing_group_config_permission_level.py b/src/elevenlabs/types/default_sharing_group_config_permission_level.py new file mode 100644 index 00000000..8b0950e8 --- /dev/null +++ b/src/elevenlabs/types/default_sharing_group_config_permission_level.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +DefaultSharingGroupConfigPermissionLevel = typing.Union[typing.Literal["admin", "editor", "viewer"], typing.Any] diff --git a/src/elevenlabs/types/get_conversation_response_model.py b/src/elevenlabs/types/get_conversation_response_model.py index b991343b..072e6055 100644 --- a/src/elevenlabs/types/get_conversation_response_model.py +++ b/src/elevenlabs/types/get_conversation_response_model.py @@ -36,6 +36,7 @@ class GetConversationResponseModel(UncheckedBaseModel): has_audio: bool has_user_audio: bool has_response_audio: bool + has_auxiliary_audio: bool transcript: typing.List[ConversationHistoryTranscriptResponseModel] tag_ids: typing.Optional[typing.List[str]] = pydantic.Field(default=None) """ diff --git a/src/elevenlabs/types/text_to_dialogue_websocket_audio_chunk_multi.py b/src/elevenlabs/types/text_to_dialogue_websocket_audio_chunk_multi.py new file mode 100644 index 00000000..577ec9b3 --- /dev/null +++ b/src/elevenlabs/types/text_to_dialogue_websocket_audio_chunk_multi.py @@ -0,0 +1,43 @@ +# 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 .dialogue_text_alignment import DialogueTextAlignment + + +class TextToDialogueWebsocketAudioChunkMulti(UncheckedBaseModel): + """ + Server chunk containing encoded audio for a specific context and optional alignment metadata. + """ + + audio: typing.Optional[str] = pydantic.Field(default=None) + """ + Base64-encoded audio bytes for the selected `output_format`. + """ + + alignment: typing.Optional[DialogueTextAlignment] = pydantic.Field(default=None) + """ + Present when `sync_alignment` query parameter is `true` and the model returned timing data for the chunk. + """ + + normalized_alignment: typing.Optional[DialogueTextAlignment] = pydantic.Field(default=None) + """ + Reserved for future use; currently unused by the server. + """ + + context_id: typing.Optional[str] = pydantic.Field(default=None) + """ + The context this audio chunk belongs to. + """ + + 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/elevenlabs/types/text_to_dialogue_websocket_client_message_multi.py b/src/elevenlabs/types/text_to_dialogue_websocket_client_message_multi.py new file mode 100644 index 00000000..55c8665a --- /dev/null +++ b/src/elevenlabs/types/text_to_dialogue_websocket_client_message_multi.py @@ -0,0 +1,97 @@ +# 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 .pronunciation_dictionary_locator import PronunciationDictionaryLocator +from .text_to_dialogue_websocket_voice_input import TextToDialogueWebsocketVoiceInput +from .text_to_dialogue_websocket_voice_settings import TextToDialogueWebsocketVoiceSettings + + +class TextToDialogueWebsocketClientMessageMulti(UncheckedBaseModel): + """ + All fields are optional unless noted for a context's **first** message. + + **Every message** + - `context_id` is required, except on a message containing only `close_socket`. + + **First message for a context** + - `voices`: non-empty array of voice IDs (maximum 10 per context for `eleven_v3`; exactly 1 for `eleven_v3_conversational`). + - Credentials if not supplied via `xi-api-key` / `Authorization` headers or `single_use_token` query parameter (accepted on the first message of the connection only). + + **Subsequent messages for a context** + - Do not resend `voices`, `voice_settings`, `pronunciation_dictionary_locators`, or credential fields. + """ + + context_id: typing.Optional[str] = pydantic.Field(default=None) + """ + Identifier for an independent dialogue stream within the socket. The first message with a new `context_id` creates that context. Required on every message except one containing only `close_socket`. + """ + + inputs: typing.Optional[typing.List[TextToDialogueWebsocketVoiceInput]] = pydantic.Field(default=None) + """ + Dialogue lines to append to this context for synthesis. Each `voice_id` must be registered for this context. + """ + + flush: typing.Optional[bool] = pydantic.Field(default=None) + """ + Force generation of this context's buffered text without closing it. + """ + + close_context: typing.Optional[bool] = pydantic.Field(default=None) + """ + Flush this context's remaining audio, emit its `is_final` message, and close it. Other contexts stay open. + """ + + close_socket: typing.Optional[bool] = pydantic.Field(default=None) + """ + Flush all contexts, emit their remaining audio and `is_final` messages, and close the WebSocket. + """ + + keep_alive: typing.Optional[bool] = pydantic.Field(default=None) + """ + Resets this context's 20s inactivity timer; performs no synthesis. + """ + + xi_api_key: typing.Optional[str] = pydantic.Field(default=None) + """ + API key for the first message of the connection if not provided via the `xi-api-key` header. + """ + + authorization: typing.Optional[str] = pydantic.Field(default=None) + """ + Bearer token for the first message of the connection if not provided via the `Authorization` header. + """ + + single_use_token: typing.Optional[str] = pydantic.Field(default=None) + """ + Single-use token for the first message of the connection if not provided via the `single_use_token` query parameter. + """ + + voices: typing.Optional[typing.List[str]] = pydantic.Field(default=None) + """ + Voice IDs to load for this context (first message for the context only, required on that message). + """ + + voice_settings: typing.Optional[TextToDialogueWebsocketVoiceSettings] = pydantic.Field(default=None) + """ + Optional voice settings for this context (first message for the context only). + """ + + pronunciation_dictionary_locators: typing.Optional[typing.List[PronunciationDictionaryLocator]] = pydantic.Field( + default=None + ) + """ + Optional pronunciation dictionaries for this context (first message for the context only). + """ + + 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/elevenlabs/types/text_to_dialogue_websocket_final_audio_for_turn_multi.py b/src/elevenlabs/types/text_to_dialogue_websocket_final_audio_for_turn_multi.py new file mode 100644 index 00000000..27e8f08e --- /dev/null +++ b/src/elevenlabs/types/text_to_dialogue_websocket_final_audio_for_turn_multi.py @@ -0,0 +1,28 @@ +# 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 TextToDialogueWebsocketFinalAudioForTurnMulti(UncheckedBaseModel): + is_final_audio_for_turn: typing.Optional[bool] = pydantic.Field(default=None) + """ + Indicates that the final audio for a given turn of this context has been sent. + """ + + context_id: typing.Optional[str] = pydantic.Field(default=None) + """ + The context whose turn has finished. + """ + + 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/elevenlabs/types/text_to_dialogue_websocket_final_multi.py b/src/elevenlabs/types/text_to_dialogue_websocket_final_multi.py new file mode 100644 index 00000000..9f33c09f --- /dev/null +++ b/src/elevenlabs/types/text_to_dialogue_websocket_final_multi.py @@ -0,0 +1,28 @@ +# 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 TextToDialogueWebsocketFinalMulti(UncheckedBaseModel): + is_final: typing.Literal[True] = pydantic.Field(default=True) + """ + Marks the end of this context's closing flush sequence. + """ + + context_id: typing.Optional[str] = pydantic.Field(default=None) + """ + The context that has been finalized. + """ + + 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/elevenlabs/types/workspace_create_service_account_response_model.py b/src/elevenlabs/types/workspace_create_service_account_response_model.py new file mode 100644 index 00000000..603b9bd8 --- /dev/null +++ b/src/elevenlabs/types/workspace_create_service_account_response_model.py @@ -0,0 +1,22 @@ +# 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 + + +class WorkspaceCreateServiceAccountResponseModel(UncheckedBaseModel): + service_account_user_id: typing_extensions.Annotated[str, FieldMetadata(alias="service-account-user-id")] + + 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/elevenlabs/types/workspace_member_response_model.py b/src/elevenlabs/types/workspace_member_response_model.py new file mode 100644 index 00000000..a093bf25 --- /dev/null +++ b/src/elevenlabs/types/workspace_member_response_model.py @@ -0,0 +1,53 @@ +# 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 .seat_type import SeatType + + +class WorkspaceMemberResponseModel(UncheckedBaseModel): + """ + Public workspace member fields exposed via GET /v1/workspace/members. + """ + + user_id: str = pydantic.Field() + """ + The user ID of the workspace member. + """ + + email: str = pydantic.Field() + """ + The email address of the workspace member. + """ + + first_name: typing.Optional[str] = pydantic.Field(default=None) + """ + The first name of the workspace member, if available. + """ + + seat_type: typing.Optional[SeatType] = pydantic.Field(default=None) + """ + The seat type (role) of the workspace member. + """ + + is_owner: bool = pydantic.Field() + """ + Whether the member is the workspace owner. + """ + + is_locked: bool = pydantic.Field() + """ + Whether the member's account is locked in this workspace. + """ + + 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/elevenlabs/v_1_text_to_dialogue_multi_stream_input/__init__.py b/src/elevenlabs/v_1_text_to_dialogue_multi_stream_input/__init__.py new file mode 100644 index 00000000..607837da --- /dev/null +++ b/src/elevenlabs/v_1_text_to_dialogue_multi_stream_input/__init__.py @@ -0,0 +1,34 @@ +# This file was auto-generated by Fern from our API Definition. + +# isort: skip_file + +import typing +from importlib import import_module + +if typing.TYPE_CHECKING: + from .types import ReceiveTextToDialogueWebsocketMessageMulti +_dynamic_imports: typing.Dict[str, str] = {"ReceiveTextToDialogueWebsocketMessageMulti": ".types"} + + +def __getattr__(attr_name: str) -> typing.Any: + module_name = _dynamic_imports.get(attr_name) + if module_name is None: + raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") + try: + module = import_module(module_name, __package__) + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) + except ImportError as e: + raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e + except AttributeError as e: + raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e + + +def __dir__(): + lazy_attrs = list(_dynamic_imports.keys()) + return sorted(lazy_attrs) + + +__all__ = ["ReceiveTextToDialogueWebsocketMessageMulti"] diff --git a/src/elevenlabs/v_1_text_to_dialogue_multi_stream_input/types/__init__.py b/src/elevenlabs/v_1_text_to_dialogue_multi_stream_input/types/__init__.py new file mode 100644 index 00000000..18a83b97 --- /dev/null +++ b/src/elevenlabs/v_1_text_to_dialogue_multi_stream_input/types/__init__.py @@ -0,0 +1,36 @@ +# This file was auto-generated by Fern from our API Definition. + +# isort: skip_file + +import typing +from importlib import import_module + +if typing.TYPE_CHECKING: + from .receive_text_to_dialogue_websocket_message_multi import ReceiveTextToDialogueWebsocketMessageMulti +_dynamic_imports: typing.Dict[str, str] = { + "ReceiveTextToDialogueWebsocketMessageMulti": ".receive_text_to_dialogue_websocket_message_multi" +} + + +def __getattr__(attr_name: str) -> typing.Any: + module_name = _dynamic_imports.get(attr_name) + if module_name is None: + raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}") + try: + module = import_module(module_name, __package__) + if module_name == f".{attr_name}": + return module + else: + return getattr(module, attr_name) + except ImportError as e: + raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e + except AttributeError as e: + raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e + + +def __dir__(): + lazy_attrs = list(_dynamic_imports.keys()) + return sorted(lazy_attrs) + + +__all__ = ["ReceiveTextToDialogueWebsocketMessageMulti"] diff --git a/src/elevenlabs/v_1_text_to_dialogue_multi_stream_input/types/receive_text_to_dialogue_websocket_message_multi.py b/src/elevenlabs/v_1_text_to_dialogue_multi_stream_input/types/receive_text_to_dialogue_websocket_message_multi.py new file mode 100644 index 00000000..0f1af1cd --- /dev/null +++ b/src/elevenlabs/v_1_text_to_dialogue_multi_stream_input/types/receive_text_to_dialogue_websocket_message_multi.py @@ -0,0 +1,15 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +from ...types.text_to_dialogue_websocket_audio_chunk_multi import TextToDialogueWebsocketAudioChunkMulti +from ...types.text_to_dialogue_websocket_error import TextToDialogueWebsocketError +from ...types.text_to_dialogue_websocket_final_audio_for_turn_multi import TextToDialogueWebsocketFinalAudioForTurnMulti +from ...types.text_to_dialogue_websocket_final_multi import TextToDialogueWebsocketFinalMulti + +ReceiveTextToDialogueWebsocketMessageMulti = typing.Union[ + TextToDialogueWebsocketAudioChunkMulti, + TextToDialogueWebsocketFinalAudioForTurnMulti, + TextToDialogueWebsocketFinalMulti, + TextToDialogueWebsocketError, +] diff --git a/src/elevenlabs/workspace/invites/client.py b/src/elevenlabs/workspace/invites/client.py index 8fbbbe07..4c9f6662 100644 --- a/src/elevenlabs/workspace/invites/client.py +++ b/src/elevenlabs/workspace/invites/client.py @@ -35,6 +35,7 @@ def create( workspace_permission: typing.Optional[str] = OMIT, seat_type: typing.Optional[SeatType] = OMIT, group_ids: typing.Optional[typing.Sequence[str]] = OMIT, + usage_limit: typing.Optional[int] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AddWorkspaceInviteResponseModel: """ @@ -54,6 +55,9 @@ def create( group_ids : typing.Optional[typing.Sequence[str]] The group ids of the user + usage_limit : typing.Optional[int] + Monthly credit usage limit for the invitee. Omit or set to null for no custom cap. + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -78,6 +82,7 @@ def create( workspace_permission=workspace_permission, seat_type=seat_type, group_ids=group_ids, + usage_limit=usage_limit, request_options=request_options, ) return _response.data @@ -88,6 +93,7 @@ def create_batch( emails: typing.Sequence[str], seat_type: typing.Optional[SeatType] = OMIT, group_ids: typing.Optional[typing.Sequence[str]] = OMIT, + usage_limit: typing.Optional[int] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AddWorkspaceInviteResponseModel: """ @@ -104,6 +110,9 @@ def create_batch( group_ids : typing.Optional[typing.Sequence[str]] The group ids of the user + usage_limit : typing.Optional[int] + Monthly credit usage limit for the invitee. Omit or set to null for no custom cap. + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -124,7 +133,11 @@ def create_batch( ) """ _response = self._raw_client.create_batch( - emails=emails, seat_type=seat_type, group_ids=group_ids, request_options=request_options + emails=emails, + seat_type=seat_type, + group_ids=group_ids, + usage_limit=usage_limit, + request_options=request_options, ) return _response.data @@ -184,6 +197,7 @@ async def create( workspace_permission: typing.Optional[str] = OMIT, seat_type: typing.Optional[SeatType] = OMIT, group_ids: typing.Optional[typing.Sequence[str]] = OMIT, + usage_limit: typing.Optional[int] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AddWorkspaceInviteResponseModel: """ @@ -203,6 +217,9 @@ async def create( group_ids : typing.Optional[typing.Sequence[str]] The group ids of the user + usage_limit : typing.Optional[int] + Monthly credit usage limit for the invitee. Omit or set to null for no custom cap. + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -235,6 +252,7 @@ async def main() -> None: workspace_permission=workspace_permission, seat_type=seat_type, group_ids=group_ids, + usage_limit=usage_limit, request_options=request_options, ) return _response.data @@ -245,6 +263,7 @@ async def create_batch( emails: typing.Sequence[str], seat_type: typing.Optional[SeatType] = OMIT, group_ids: typing.Optional[typing.Sequence[str]] = OMIT, + usage_limit: typing.Optional[int] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AddWorkspaceInviteResponseModel: """ @@ -261,6 +280,9 @@ async def create_batch( group_ids : typing.Optional[typing.Sequence[str]] The group ids of the user + usage_limit : typing.Optional[int] + Monthly credit usage limit for the invitee. Omit or set to null for no custom cap. + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -289,7 +311,11 @@ async def main() -> None: asyncio.run(main()) """ _response = await self._raw_client.create_batch( - emails=emails, seat_type=seat_type, group_ids=group_ids, request_options=request_options + emails=emails, + seat_type=seat_type, + group_ids=group_ids, + usage_limit=usage_limit, + request_options=request_options, ) return _response.data diff --git a/src/elevenlabs/workspace/invites/raw_client.py b/src/elevenlabs/workspace/invites/raw_client.py index 1831093f..07322ac2 100644 --- a/src/elevenlabs/workspace/invites/raw_client.py +++ b/src/elevenlabs/workspace/invites/raw_client.py @@ -28,6 +28,7 @@ def create( workspace_permission: typing.Optional[str] = OMIT, seat_type: typing.Optional[SeatType] = OMIT, group_ids: typing.Optional[typing.Sequence[str]] = OMIT, + usage_limit: typing.Optional[int] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[AddWorkspaceInviteResponseModel]: """ @@ -47,6 +48,9 @@ def create( group_ids : typing.Optional[typing.Sequence[str]] The group ids of the user + usage_limit : typing.Optional[int] + Monthly credit usage limit for the invitee. Omit or set to null for no custom cap. + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -63,6 +67,7 @@ def create( "workspace_permission": workspace_permission, "seat_type": seat_type, "group_ids": group_ids, + "usage_limit": usage_limit, }, headers={ "content-type": "application/json", @@ -102,6 +107,7 @@ def create_batch( emails: typing.Sequence[str], seat_type: typing.Optional[SeatType] = OMIT, group_ids: typing.Optional[typing.Sequence[str]] = OMIT, + usage_limit: typing.Optional[int] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[AddWorkspaceInviteResponseModel]: """ @@ -118,6 +124,9 @@ def create_batch( group_ids : typing.Optional[typing.Sequence[str]] The group ids of the user + usage_limit : typing.Optional[int] + Monthly credit usage limit for the invitee. Omit or set to null for no custom cap. + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -133,6 +142,7 @@ def create_batch( "emails": emails, "seat_type": seat_type, "group_ids": group_ids, + "usage_limit": usage_limit, }, headers={ "content-type": "application/json", @@ -235,6 +245,7 @@ async def create( workspace_permission: typing.Optional[str] = OMIT, seat_type: typing.Optional[SeatType] = OMIT, group_ids: typing.Optional[typing.Sequence[str]] = OMIT, + usage_limit: typing.Optional[int] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[AddWorkspaceInviteResponseModel]: """ @@ -254,6 +265,9 @@ async def create( group_ids : typing.Optional[typing.Sequence[str]] The group ids of the user + usage_limit : typing.Optional[int] + Monthly credit usage limit for the invitee. Omit or set to null for no custom cap. + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -270,6 +284,7 @@ async def create( "workspace_permission": workspace_permission, "seat_type": seat_type, "group_ids": group_ids, + "usage_limit": usage_limit, }, headers={ "content-type": "application/json", @@ -309,6 +324,7 @@ async def create_batch( emails: typing.Sequence[str], seat_type: typing.Optional[SeatType] = OMIT, group_ids: typing.Optional[typing.Sequence[str]] = OMIT, + usage_limit: typing.Optional[int] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[AddWorkspaceInviteResponseModel]: """ @@ -325,6 +341,9 @@ async def create_batch( group_ids : typing.Optional[typing.Sequence[str]] The group ids of the user + usage_limit : typing.Optional[int] + Monthly credit usage limit for the invitee. Omit or set to null for no custom cap. + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -340,6 +359,7 @@ async def create_batch( "emails": emails, "seat_type": seat_type, "group_ids": group_ids, + "usage_limit": usage_limit, }, headers={ "content-type": "application/json", diff --git a/src/elevenlabs/workspace/members/client.py b/src/elevenlabs/workspace/members/client.py index ef28b5b3..0c171e18 100644 --- a/src/elevenlabs/workspace/members/client.py +++ b/src/elevenlabs/workspace/members/client.py @@ -6,6 +6,7 @@ from ...core.request_options import RequestOptions from ...types.seat_type import SeatType from ...types.update_workspace_member_response_model import UpdateWorkspaceMemberResponseModel +from ...types.workspace_member_response_model import WorkspaceMemberResponseModel from .raw_client import AsyncRawMembersClient, RawMembersClient # this is used as the default value for optional parameters @@ -27,6 +28,34 @@ def with_raw_response(self) -> RawMembersClient: """ return self._raw_client + def list( + self, *, request_options: typing.Optional[RequestOptions] = None + ) -> typing.List[WorkspaceMemberResponseModel]: + """ + Gets a list of all members of the workspace, including locked members. Service accounts are excluded. Requires the workspace_members_read permission. + + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + typing.List[WorkspaceMemberResponseModel] + Successful Response + + Examples + -------- + from elevenlabs import ElevenLabs + + client = ElevenLabs( + api_key="YOUR_API_KEY", + ) + client.workspace.members.list() + """ + _response = self._raw_client.list(request_options=request_options) + return _response.data + def update( self, *, @@ -97,6 +126,42 @@ def with_raw_response(self) -> AsyncRawMembersClient: """ return self._raw_client + async def list( + self, *, request_options: typing.Optional[RequestOptions] = None + ) -> typing.List[WorkspaceMemberResponseModel]: + """ + Gets a list of all members of the workspace, including locked members. Service accounts are excluded. Requires the workspace_members_read permission. + + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + typing.List[WorkspaceMemberResponseModel] + Successful Response + + Examples + -------- + import asyncio + + from elevenlabs import AsyncElevenLabs + + client = AsyncElevenLabs( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.workspace.members.list() + + + asyncio.run(main()) + """ + _response = await self._raw_client.list(request_options=request_options) + return _response.data + async def update( self, *, diff --git a/src/elevenlabs/workspace/members/raw_client.py b/src/elevenlabs/workspace/members/raw_client.py index 4f5def77..efc7271d 100644 --- a/src/elevenlabs/workspace/members/raw_client.py +++ b/src/elevenlabs/workspace/members/raw_client.py @@ -11,6 +11,7 @@ from ...errors.unprocessable_entity_error import UnprocessableEntityError from ...types.seat_type import SeatType from ...types.update_workspace_member_response_model import UpdateWorkspaceMemberResponseModel +from ...types.workspace_member_response_model import WorkspaceMemberResponseModel # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -20,6 +21,53 @@ class RawMembersClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper + def list( + self, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[typing.List[WorkspaceMemberResponseModel]]: + """ + Gets a list of all members of the workspace, including locked members. Service accounts are excluded. Requires the workspace_members_read permission. + + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[typing.List[WorkspaceMemberResponseModel]] + Successful Response + """ + _response = self._client_wrapper.httpx_client.request( + "v1/workspace/members", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + typing.List[WorkspaceMemberResponseModel], + construct_type( + type_=typing.List[WorkspaceMemberResponseModel], # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 422: + raise UnprocessableEntityError( + headers=dict(_response.headers), + body=typing.cast( + typing.Any, + construct_type( + type_=typing.Any, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + def update( self, *, @@ -100,6 +148,53 @@ class AsyncRawMembersClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper + async def list( + self, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[typing.List[WorkspaceMemberResponseModel]]: + """ + Gets a list of all members of the workspace, including locked members. Service accounts are excluded. Requires the workspace_members_read permission. + + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[typing.List[WorkspaceMemberResponseModel]] + Successful Response + """ + _response = await self._client_wrapper.httpx_client.request( + "v1/workspace/members", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + typing.List[WorkspaceMemberResponseModel], + construct_type( + type_=typing.List[WorkspaceMemberResponseModel], # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 422: + raise UnprocessableEntityError( + headers=dict(_response.headers), + body=typing.cast( + typing.Any, + construct_type( + type_=typing.Any, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + async def update( self, *,