diff --git a/.fern/metadata.json b/.fern/metadata.json index d89058f0..1b7623da 100644 --- a/.fern/metadata.json +++ b/.fern/metadata.json @@ -55,5 +55,5 @@ } ] }, - "originGitCommit": "6c42e37ab55baee85654fffddd43af522c9fd27b" + "originGitCommit": "d70d58e8e6cdede07532d2bc772e5363b0647f48" } \ No newline at end of file diff --git a/.fern/replay.lock b/.fern/replay.lock new file mode 100644 index 00000000..8448e0ca --- /dev/null +++ b/.fern/replay.lock @@ -0,0 +1,10 @@ +# DO NOT EDIT MANUALLY - Managed by Fern Replay +version: "1.0" +generations: + - commit_sha: 6cdc807dbce06ea8b7e9037f018adb6816f39236 + tree_hash: 86240007aae7bfde82f6e453828a4b21974b8d3b + timestamp: 2026-05-20T07:38:29.115Z + cli_version: unknown + generator_versions: {} +current_generation: 6cdc807dbce06ea8b7e9037f018adb6816f39236 +patches: [] diff --git a/.fernignore b/.fernignore index 093cdb6f..220a3b5d 100644 --- a/.fernignore +++ b/.fernignore @@ -23,3 +23,6 @@ assets/ # Ignore custom tests tests/ +.fern/replay.lock +.fern/replay.yml +.gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..74928d6a --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +.fern/replay.lock linguist-generated=true diff --git a/pyproject.toml b/pyproject.toml index 91169602..41850495 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ dynamic = ["version"] [tool.poetry] name = "elevenlabs" -version = "2.48.0" +version = "2.49.0" description = "" readme = "README.md" authors = [] diff --git a/reference.md b/reference.md index af30ff63..1ea54006 100644 --- a/reference.md +++ b/reference.md @@ -5835,7 +5835,7 @@ client.audio_native.update_content_from_url(
-(Deprecated) This endpoint is deprecated. Use /v1/workspace/analytics/query/usage-by-product-over-time instead. Returns the usage metrics for the current user or the entire workspace they are part of. The response provides a time axis based on the specified aggregation interval (default: day), with usage values for each interval along that axis. Usage is broken down by the selected breakdown type. For example, breakdown type "voice" will return the usage of each voice for each interval along the time axis. +(Deprecated) This endpoint is deprecated. Use /v1/workspace/analytics/query/usage-by-product-over-time instead, which exposes the bucket size as `interval_seconds` (an integer in seconds) rather than `aggregation_interval`. Returns the usage metrics for the current user or the entire workspace they are part of. The response provides a time axis based on the specified aggregation interval (default: day), with usage values for each interval along that axis. Usage is broken down by the selected breakdown type. For example, breakdown type "voice" will return the usage of each voice for each interval along the time axis.
@@ -7760,6 +7760,14 @@ client.speech_engine.create(
+**overrides:** `typing.Optional[SpeechEngineConversationInitiationClientDataConfig]` — Override settings the client may set during conversation initiation + +
+
+ +
+
+ **request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -8050,6 +8058,14 @@ client.speech_engine.update(
+**overrides:** `typing.Optional[SpeechEngineConversationInitiationClientDataConfig]` + +
+
+ +
+
+ **request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -8947,6 +8963,14 @@ client.conversational_ai.conversations.get(
+**format:** `typing.Optional[ConversationsGetRequestFormat]` — Response format. Defaults to 'json'. Set to 'opentelemetry' for an OTLP-compatible trace payload using the same structure as the post-call webhook. + +
+
+ +
+
+ **request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -22366,6 +22390,914 @@ client.music.composition_plan.create(
+ +
+ + +## Productions Orders +
client.productions.orders.list(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Lists Productions orders in the workspace. Supports filtering by status and date range, with pagination. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +import datetime + +from elevenlabs import ElevenLabs + +client = ElevenLabs( + api_key="YOUR_API_KEY", +) +client.productions.orders.list( + page_size=1, + offset=1, + status=["open"], + start_date=datetime.datetime.fromisoformat( + "2024-01-15 09:30:00+00:00", + ), + end_date=datetime.datetime.fromisoformat( + "2024-01-15 09:30:00+00:00", + ), +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**page_size:** `typing.Optional[int]` — Maximum number of orders to return per page. + +
+
+ +
+
+ +**offset:** `typing.Optional[int]` — Number of orders to skip for pagination. + +
+
+ +
+
+ +**status:** `typing.Optional[ + typing.Union[OrderRequestState, typing.Sequence[OrderRequestState]] +]` — Filter orders by one or more statuses. + +
+
+ +
+
+ +**start_date:** `typing.Optional[dt.datetime]` — Filter orders created on or after this date. + +
+
+ +
+
+ +**end_date:** `typing.Optional[dt.datetime]` — Filter orders created on or before this date. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.productions.orders.create() +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Creates a new Productions order in the workspace. The order starts in the open state and can be configured with items before submission. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from elevenlabs import ElevenLabs + +client = ElevenLabs( + api_key="YOUR_API_KEY", +) +client.productions.orders.create() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.productions.orders.get(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Retrieves full details for a Productions order. + +Quote and pricing information may not be available immediately; if you wish to see the quote before submission, you may need to poll the order details until it is ready. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from elevenlabs import ElevenLabs + +client = ElevenLabs( + api_key="YOUR_API_KEY", +) +client.productions.orders.get( + order_id="order_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**order_id:** `OrderId` — The ID of the order. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.productions.orders.update(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Updates an open order. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from elevenlabs import ElevenLabs, UpdateOrderRequest + +client = ElevenLabs( + api_key="YOUR_API_KEY", +) +client.productions.orders.update( + order_id="order_id", + request=UpdateOrderRequest( + name="Spanish Dubs", + ), +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**order_id:** `OrderId` — The ID of the order. + +
+
+ +
+
+ +**request:** `UpdateOrderRequest` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.productions.orders.submit(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Submits an open order for processing. The order must have at least one item. Once submitted, items can no longer be modified. + +Upon submission, the workspace will be charged for the order. The quote is based on information extracted from the uploaded media, such as its duration. The quote may not be available immediately; if you wish to see the quote before submission, you may need to poll the order details until the quote is ready. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from elevenlabs import ElevenLabs + +client = ElevenLabs( + api_key="YOUR_API_KEY", +) +client.productions.orders.submit( + order_id="order_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**order_id:** `OrderId` — The ID of the order. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +## Productions Orders Media +
client.productions.orders.media.register(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Registers a media file with an order, either by uploading it directly or by providing a URL to fetch it from. Exactly one of `media` or `media_url` must be provided. The registered media can then be referenced when adding order items. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from elevenlabs import ElevenLabs + +client = ElevenLabs( + api_key="YOUR_API_KEY", +) +client.productions.orders.media.register( + order_id="order_id", + declared_language="declared_language", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**order_id:** `OrderId` — The ID of the order to which this media will be attached. + +
+
+ +
+
+ +**declared_language:** `str` — The language code of the media content (e.g. 'en', 'es-ES'). Must be a supported source language for some order item kind. + +
+
+ +
+
+ +**media:** `from __future__ import annotations + +typing.Optional[core.File]` — See core.File for more documentation + +
+
+ +
+
+ +**media_url:** `typing.Optional[str]` — A URL to fetch the media file from. Mutually exclusive with media. + +
+
+ +
+
+ +**media_url_filename:** `typing.Optional[str]` — The filename for URL-sourced media (e.g. 'example.mp4'). Required when using media_url. + +
+
+ +
+
+ +**media_url_content_type:** `typing.Optional[str]` — The MIME type for URL-sourced media (e.g. 'video/mp4'). Required when using media_url. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.productions.orders.media.get(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Retrieves metadata and a time-limited download URL for a previously uploaded media file. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from elevenlabs import ElevenLabs + +client = ElevenLabs( + api_key="YOUR_API_KEY", +) +client.productions.orders.media.get( + order_id="order_id", + media_id="media_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**order_id:** `OrderId` — The ID of the order. + +
+
+ +
+
+ +**media_id:** `MediaId` — The ID of the media file. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +## Productions Orders Items +
client.productions.orders.items.upsert(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Adds or updates an order item on an open order. Returns the item ID and the quoted price. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from elevenlabs import ( + ElevenLabs, + RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput_Dub, + UpsertOrderItemRequest, +) + +client = ElevenLabs( + api_key="YOUR_API_KEY", +) +client.productions.orders.items.upsert( + order_id="order_id", + request=UpsertOrderItemRequest( + item=RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput_Dub( + media_id="prodmedia_01jgatk6h0fwxrtbjade61yqhx", + source_language="en", + destination_languages=["hi", "fr-FR", "de"], + include_captions=True, + include_source_captions=False, + instructions="Voices don't need to match the originals, prioritize native-sounding voices", + captions_sdh=False, + ), + ), +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**order_id:** `OrderId` — The ID of the order. + +
+
+ +
+
+ +**request:** `UpsertOrderItemRequest` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.productions.orders.items.remove(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Removes an order item from an open order. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from elevenlabs import ElevenLabs + +client = ElevenLabs( + api_key="YOUR_API_KEY", +) +client.productions.orders.items.remove( + order_id="order_id", + item_id="item_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**order_id:** `OrderId` — The ID of the order. + +
+
+ +
+
+ +**item_id:** `ItemId` — The ID of the order item. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +## Productions Orders Deliverables +
client.productions.orders.deliverables.list(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Retrieves the delivered files for a completed order. Returns an empty list if the order is not yet completed. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from elevenlabs import ElevenLabs + +client = ElevenLabs( + api_key="YOUR_API_KEY", +) +client.productions.orders.deliverables.list( + order_id="order_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**order_id:** `OrderId` — The ID of the order. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +## Productions Orders Languages +
client.productions.orders.languages.list(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Returns the available languages for a given order item kind. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from elevenlabs import ElevenLabs + +client = ElevenLabs( + api_key="YOUR_API_KEY", +) +client.productions.orders.languages.list( + order_item_kind="dub", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**order_item_kind:** `OrderItemKind` — The kind of order item. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ +
@@ -28367,7 +29299,7 @@ client.workspace.usage.get_usage_by_product_over_time(
-**interval_seconds:** `typing.Optional[int]` +**interval_seconds:** `typing.Optional[int]` — Bucket size in seconds. Each row in the response covers this many seconds of usage. For example, pass 3600 for hourly buckets or 86400 for daily buckets.
diff --git a/src/elevenlabs/__init__.py b/src/elevenlabs/__init__.py index b90ed8bc..54b8f037 100644 --- a/src/elevenlabs/__init__.py +++ b/src/elevenlabs/__init__.py @@ -29,6 +29,7 @@ Age, AgentAlertingMonitorConfig, AgentAlertingSettings, + AgentAlertingWebhookNotifier, AgentBranchBasicInfo, AgentBranchResponse, AgentBranchSummary, @@ -88,7 +89,6 @@ AnalysisPropertyConstantValue, AnalysisPropertyType, AnalysisScope, - ApiIntegrationDocResponse, ApiIntegrationOAuth2AuthCodeResponse, ApiIntegrationOAuth2AuthCodeResponseScopeSeparator, ApiIntegrationOAuth2CustomAppResponse, @@ -108,6 +108,8 @@ ArrayJsonSchemaPropertyOutputConstantValueItem, ArrayJsonSchemaPropertyOutputItems, AsrConversationalConfig, + AsrConversationalConfigOverride, + AsrConversationalConfigOverrideConfig, AsrConversationalConfigWorkflowOverride, AsrInputFormat, AsrProvider, @@ -490,6 +492,7 @@ CreateOAuth2JwtRequest, CreateOAuth2JwtRequestAlgorithm, CreateOAuth2JwtRequestTokenResponseField, + CreateOrderResponse, CreatePhoneNumberResponseModel, CreatePreviouslyGeneratedVoiceRequest, CreatePrivateKeyJwtRequest, @@ -501,12 +504,12 @@ CreateServiceParams, CreateSimulationTestRequest, CreateSipTrunkPhoneNumberRequest, - CreateSpeechEngineResponse, CreateStaffParams, CreateStringEnvironmentVariableRequest, CreateToolCallUnitTestRequest, CreateTranscriptRequest, CreateTwilioPhoneNumberRequest, + CueOptionsRequest, Currency, CustomGuardrailConfig, CustomGuardrailConfigTriggerAction, @@ -552,6 +555,7 @@ DeleteWorkspaceGroupMemberResponseModel, DeleteWorkspaceInviteResponseModel, DeleteWorkspaceWebhookResponseModel, + DeliverableInfo, DependentAvailableAgentIdentifier, DependentAvailableAgentIdentifierAccessLevel, DependentAvailableMcpServerIdentifier, @@ -580,6 +584,7 @@ DocumentUsageModeEnum, DocxExportOptions, DtmfInputConfig, + DubOrderItemRequest, DubbedSegment, DubbingMediaMetadata, DubbingMediaReference, @@ -793,6 +798,7 @@ InvoiceResponse, InvoiceResponseModelPaymentIntentStatus, InvoiceResponseModelPaymentIntentStatussesItem, + ItemId, KeepContextAlive, KnowledgeBaseContentSearchResponseModel, KnowledgeBaseContentSearchResult, @@ -823,6 +829,8 @@ LanguageAddedResponse, LanguageDetectionToolConfig, LanguageDetectionToolResultModel, + LanguageInfo, + LanguagePairInfo, LanguagePresetInput, LanguagePresetOutput, LanguagePresetTranslation, @@ -853,9 +861,9 @@ ListHolidaysParams, ListLocationsParams, ListMcpToolsResponseModel, + ListOrdersResponse, ListProductsParams, ListResponseAgentBranchSummary, - ListResponseApiIntegrationDocResponse, ListResponseMeta, ListServicesParams, ListSpeechEnginesResponse, @@ -920,6 +928,7 @@ McpToolConfigOverrideOutputInputOverridesValue_Constant, McpToolConfigOverrideOutputInputOverridesValue_DynamicVariable, McpToolConfigOverrideOutputInputOverridesValue_Llm, + MediaId, MemoryEntrySearchResult, MemoryEntrySearchResultSource, MessageSearchSortBy, @@ -956,10 +965,20 @@ ObjectJsonSchemaPropertyOutputPropertiesValue, OrbAvatar, OrchestratorToolMockBehaviorConfig, + OrderDeliverablesResponse, + OrderId, + OrderItemInfo, + OrderItemKind, + OrderMediaResponse, + OrderRequestState, + OrderResponse, + OrderState, + OrderSummary, OutboundCallRecipient, OutboundCallRecipientResponseModel, OutboundSipTrunkConfigRequestModel, OutputFormat, + PairedLanguagesResponse, PartialTranscriptPayload, PatchWorkspaceWebhookResponseModel, PdfExportOptions, @@ -1109,6 +1128,7 @@ PydanticPronunciationDictionaryVersionLocator, QualityPresetType, QueryParamsJsonSchema, + QuoteInfo, RagChunkMetadata, RagConfig, RagConfigWorkflowOverride, @@ -1133,7 +1153,9 @@ RegionConfigRequest, RegionalProcessingSurchargeInfo, RegisterForGroupSessionParams, + RegisterMediaResponse, RemoveMemberFromGroupRequest, + RemoveOrderItemResponse, Render, RenderStatus, RenderType, @@ -1154,6 +1176,26 @@ ReviewResponseModelRejectReasonsItem, ReviewResponseModelReviewStatus, ReviewStatus, + RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput, + RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput_Dub, + RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput_Subtitles, + RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindOutput, + RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindOutput_Dub, + RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindOutput_Subtitles, + RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind, + RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind_Pair, + RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind_Single, + RttAudioPayload, + RttEndOfStreamPayload, + RttErrorPayload, + RttFinalTranscriptPayload, + RttInputAudioChunkPayload, + RttInputFormatEnum, + RttOutputFormatEnum, + RttPartialTranscriptPayload, + RttSessionStartedPayload, + RttStatusPayload, + RttTranslationPayload, SafetyCommonModel, SafetyEvaluation, SafetyResponseModel, @@ -1209,6 +1251,7 @@ SimilarVoicesForSpeakerResponse, SimulationTestModel, SimulationToolMockBehaviorConfig, + SingleLanguagesResponse, SingleTestRunRequestModel, SingleUseTokenResponseModel, SingleUseTokenType, @@ -1243,6 +1286,7 @@ SpeakerUpdatedResponse, SpeechEngineConfig, SpeechEngineConfigRequestHeadersValue, + SpeechEngineConversationInitiationClientDataConfig, SpeechEngineResponse, SpeechEngineSummaryResponse, SpeechHistoryItemResponse, @@ -1266,10 +1310,12 @@ StudioClipReferenceClipType, StudioTextStyleOutlineModel, StudioTextStyleShadowModel, + SubmitOrderResponse, Subscription, SubscriptionResponse, SubscriptionResponseModelMaxCreditLimitExtension, SubscriptionStatusType, + SubtitleOrderItemRequest, SuggestedAudioTag, SupportedVoice, SystemToolConfigInput, @@ -1431,6 +1477,8 @@ UpdateOAuth2JwtRequest, UpdateOAuth2JwtRequestAlgorithm, UpdateOAuth2JwtRequestTokenResponseField, + UpdateOrderRequest, + UpdateOrderResponse, UpdateProductParams, UpdateProjectRequest, UpdatePronunciationDictionariesRequest, @@ -1440,6 +1488,8 @@ UpdateStaffParams, UpdateToolCallUnitTestRequest, UpdateWorkspaceMemberResponseModel, + UpsertOrderItemRequest, + UpsertOrderItemResponse, UrlAvatar, UrlModel, UsageAggregationInterval, @@ -1680,6 +1730,7 @@ history, models, music, + productions, pronunciation_dictionaries, samples, service_accounts, @@ -1694,6 +1745,7 @@ tokens, usage, user, + v_1_realtime_translation, v_1_speech_to_text_realtime, v_1_text_to_dialogue_stream_input, v_1_text_to_speech_voice_id_multi_stream_input, @@ -1784,6 +1836,7 @@ TextToSpeechStreamWithTimestampsRequestOutputFormat, ) from .text_to_voice import VoiceDesignRequestModelModelId + from .v_1_realtime_translation import ReceiveRttMessage, SendRttMessage from .v_1_speech_to_text_realtime import ReceiveTranscription, TextToSpeechCommitStrategy from .v_1_text_to_dialogue_stream_input import ReceiveTextToDialogueWebsocketMessage from .v_1_text_to_speech_voice_id_multi_stream_input import ReceiveMessageMulti, SendMessageMulti @@ -1810,6 +1863,7 @@ "Age": ".types", "AgentAlertingMonitorConfig": ".types", "AgentAlertingSettings": ".types", + "AgentAlertingWebhookNotifier": ".types", "AgentBranchBasicInfo": ".types", "AgentBranchResponse": ".types", "AgentBranchSummary": ".types", @@ -1869,7 +1923,6 @@ "AnalysisPropertyConstantValue": ".types", "AnalysisPropertyType": ".types", "AnalysisScope": ".types", - "ApiIntegrationDocResponse": ".types", "ApiIntegrationOAuth2AuthCodeResponse": ".types", "ApiIntegrationOAuth2AuthCodeResponseScopeSeparator": ".types", "ApiIntegrationOAuth2CustomAppResponse": ".types", @@ -1889,6 +1942,8 @@ "ArrayJsonSchemaPropertyOutputConstantValueItem": ".types", "ArrayJsonSchemaPropertyOutputItems": ".types", "AsrConversationalConfig": ".types", + "AsrConversationalConfigOverride": ".types", + "AsrConversationalConfigOverrideConfig": ".types", "AsrConversationalConfigWorkflowOverride": ".types", "AsrInputFormat": ".types", "AsrProvider": ".types", @@ -2300,6 +2355,7 @@ "CreateOAuth2JwtRequest": ".types", "CreateOAuth2JwtRequestAlgorithm": ".types", "CreateOAuth2JwtRequestTokenResponseField": ".types", + "CreateOrderResponse": ".types", "CreatePhoneNumberResponseModel": ".types", "CreatePreviouslyGeneratedVoiceRequest": ".types", "CreatePrivateKeyJwtRequest": ".types", @@ -2311,12 +2367,12 @@ "CreateServiceParams": ".types", "CreateSimulationTestRequest": ".types", "CreateSipTrunkPhoneNumberRequest": ".types", - "CreateSpeechEngineResponse": ".types", "CreateStaffParams": ".types", "CreateStringEnvironmentVariableRequest": ".types", "CreateToolCallUnitTestRequest": ".types", "CreateTranscriptRequest": ".types", "CreateTwilioPhoneNumberRequest": ".types", + "CueOptionsRequest": ".types", "Currency": ".types", "CustomGuardrailConfig": ".types", "CustomGuardrailConfigTriggerAction": ".types", @@ -2362,6 +2418,7 @@ "DeleteWorkspaceGroupMemberResponseModel": ".types", "DeleteWorkspaceInviteResponseModel": ".types", "DeleteWorkspaceWebhookResponseModel": ".types", + "DeliverableInfo": ".types", "DependentAvailableAgentIdentifier": ".types", "DependentAvailableAgentIdentifierAccessLevel": ".types", "DependentAvailableMcpServerIdentifier": ".types", @@ -2390,6 +2447,7 @@ "DocumentUsageModeEnum": ".types", "DocxExportOptions": ".types", "DtmfInputConfig": ".types", + "DubOrderItemRequest": ".types", "DubbedSegment": ".types", "DubbingCreateRequestMode": ".dubbing", "DubbingListRequestDubbingStatus": ".dubbing", @@ -2617,6 +2675,7 @@ "InvoiceResponse": ".types", "InvoiceResponseModelPaymentIntentStatus": ".types", "InvoiceResponseModelPaymentIntentStatussesItem": ".types", + "ItemId": ".types", "KeepContextAlive": ".types", "KnowledgeBaseContentSearchResponseModel": ".types", "KnowledgeBaseContentSearchResult": ".types", @@ -2647,6 +2706,8 @@ "LanguageAddedResponse": ".types", "LanguageDetectionToolConfig": ".types", "LanguageDetectionToolResultModel": ".types", + "LanguageInfo": ".types", + "LanguagePairInfo": ".types", "LanguagePresetInput": ".types", "LanguagePresetOutput": ".types", "LanguagePresetTranslation": ".types", @@ -2677,9 +2738,9 @@ "ListHolidaysParams": ".types", "ListLocationsParams": ".types", "ListMcpToolsResponseModel": ".types", + "ListOrdersResponse": ".types", "ListProductsParams": ".types", "ListResponseAgentBranchSummary": ".types", - "ListResponseApiIntegrationDocResponse": ".types", "ListResponseMeta": ".types", "ListServicesParams": ".types", "ListSpeechEnginesResponse": ".types", @@ -2744,6 +2805,7 @@ "McpToolConfigOverrideOutputInputOverridesValue_Constant": ".types", "McpToolConfigOverrideOutputInputOverridesValue_DynamicVariable": ".types", "McpToolConfigOverrideOutputInputOverridesValue_Llm": ".types", + "MediaId": ".types", "MemoryEntrySearchResult": ".types", "MemoryEntrySearchResultSource": ".types", "MessageSearchSortBy": ".types", @@ -2782,10 +2844,20 @@ "ObjectJsonSchemaPropertyOutputPropertiesValue": ".types", "OrbAvatar": ".types", "OrchestratorToolMockBehaviorConfig": ".types", + "OrderDeliverablesResponse": ".types", + "OrderId": ".types", + "OrderItemInfo": ".types", + "OrderItemKind": ".types", + "OrderMediaResponse": ".types", + "OrderRequestState": ".types", + "OrderResponse": ".types", + "OrderState": ".types", + "OrderSummary": ".types", "OutboundCallRecipient": ".types", "OutboundCallRecipientResponseModel": ".types", "OutboundSipTrunkConfigRequestModel": ".types", "OutputFormat": ".types", + "PairedLanguagesResponse": ".types", "PartialTranscriptPayload": ".types", "PatchWorkspaceWebhookResponseModel": ".types", "PdfExportOptions": ".types", @@ -2937,6 +3009,7 @@ "PydanticPronunciationDictionaryVersionLocator": ".types", "QualityPresetType": ".types", "QueryParamsJsonSchema": ".types", + "QuoteInfo": ".types", "RagChunkMetadata": ".types", "RagConfig": ".types", "RagConfigWorkflowOverride": ".types", @@ -2959,6 +3032,7 @@ "RealtimeVoiceSettings": ".types", "ReceiveMessage": ".v_1_text_to_speech_voice_id_stream_input", "ReceiveMessageMulti": ".v_1_text_to_speech_voice_id_multi_stream_input", + "ReceiveRttMessage": ".v_1_realtime_translation", "ReceiveTextToDialogueWebsocketMessage": ".v_1_text_to_dialogue_stream_input", "ReceiveTranscription": ".v_1_speech_to_text_realtime", "RecordingResponse": ".types", @@ -2969,7 +3043,9 @@ "RegionConfigRequest": ".types", "RegionalProcessingSurchargeInfo": ".types", "RegisterForGroupSessionParams": ".types", + "RegisterMediaResponse": ".types", "RemoveMemberFromGroupRequest": ".types", + "RemoveOrderItemResponse": ".types", "Render": ".types", "RenderStatus": ".types", "RenderType": ".types", @@ -2990,6 +3066,26 @@ "ReviewResponseModelRejectReasonsItem": ".types", "ReviewResponseModelReviewStatus": ".types", "ReviewStatus": ".types", + "RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput": ".types", + "RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput_Dub": ".types", + "RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput_Subtitles": ".types", + "RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindOutput": ".types", + "RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindOutput_Dub": ".types", + "RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindOutput_Subtitles": ".types", + "RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind": ".types", + "RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind_Pair": ".types", + "RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind_Single": ".types", + "RttAudioPayload": ".types", + "RttEndOfStreamPayload": ".types", + "RttErrorPayload": ".types", + "RttFinalTranscriptPayload": ".types", + "RttInputAudioChunkPayload": ".types", + "RttInputFormatEnum": ".types", + "RttOutputFormatEnum": ".types", + "RttPartialTranscriptPayload": ".types", + "RttSessionStartedPayload": ".types", + "RttStatusPayload": ".types", + "RttTranslationPayload": ".types", "SafetyCommonModel": ".types", "SafetyEvaluation": ".types", "SafetyResponseModel": ".types", @@ -3033,6 +3129,7 @@ "SegmentedJsonExportOptions": ".types", "SendMessage": ".v_1_text_to_speech_voice_id_stream_input", "SendMessageMulti": ".v_1_text_to_speech_voice_id_multi_stream_input", + "SendRttMessage": ".v_1_realtime_translation", "SendText": ".types", "SendTextMulti": ".types", "SessionStartedPayload": ".types", @@ -3047,6 +3144,7 @@ "SimilarVoicesForSpeakerResponse": ".types", "SimulationTestModel": ".types", "SimulationToolMockBehaviorConfig": ".types", + "SingleLanguagesResponse": ".types", "SingleTestRunRequestModel": ".types", "SingleUseTokenResponseModel": ".types", "SingleUseTokenType": ".types", @@ -3081,6 +3179,7 @@ "SpeakerUpdatedResponse": ".types", "SpeechEngineConfig": ".types", "SpeechEngineConfigRequestHeadersValue": ".types", + "SpeechEngineConversationInitiationClientDataConfig": ".types", "SpeechEngineResponse": ".types", "SpeechEngineSummaryResponse": ".types", "SpeechHistoryItemResponse": ".types", @@ -3115,10 +3214,12 @@ "StudioClipReferenceClipType": ".types", "StudioTextStyleOutlineModel": ".types", "StudioTextStyleShadowModel": ".types", + "SubmitOrderResponse": ".types", "Subscription": ".types", "SubscriptionResponse": ".types", "SubscriptionResponseModelMaxCreditLimitExtension": ".types", "SubscriptionStatusType": ".types", + "SubtitleOrderItemRequest": ".types", "SuggestedAudioTag": ".types", "SupportedVoice": ".types", "SystemToolConfigInput": ".types", @@ -3291,6 +3392,8 @@ "UpdateOAuth2JwtRequest": ".types", "UpdateOAuth2JwtRequestAlgorithm": ".types", "UpdateOAuth2JwtRequestTokenResponseField": ".types", + "UpdateOrderRequest": ".types", + "UpdateOrderResponse": ".types", "UpdateProductParams": ".types", "UpdateProjectRequest": ".types", "UpdatePronunciationDictionariesRequest": ".types", @@ -3300,6 +3403,8 @@ "UpdateStaffParams": ".types", "UpdateToolCallUnitTestRequest": ".types", "UpdateWorkspaceMemberResponseModel": ".types", + "UpsertOrderItemRequest": ".types", + "UpsertOrderItemResponse": ".types", "UrlAvatar": ".types", "UrlModel": ".types", "UsageAggregationInterval": ".types", @@ -3534,6 +3639,7 @@ "models": ".models", "music": ".music", "play": ".play", + "productions": ".productions", "pronunciation_dictionaries": ".pronunciation_dictionaries", "samples": ".samples", "save": ".play", @@ -3550,6 +3656,7 @@ "tokens": ".tokens", "usage": ".usage", "user": ".user", + "v_1_realtime_translation": ".v_1_realtime_translation", "v_1_speech_to_text_realtime": ".v_1_speech_to_text_realtime", "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", @@ -3601,6 +3708,7 @@ def __dir__(): "Age", "AgentAlertingMonitorConfig", "AgentAlertingSettings", + "AgentAlertingWebhookNotifier", "AgentBranchBasicInfo", "AgentBranchResponse", "AgentBranchSummary", @@ -3660,7 +3768,6 @@ def __dir__(): "AnalysisPropertyConstantValue", "AnalysisPropertyType", "AnalysisScope", - "ApiIntegrationDocResponse", "ApiIntegrationOAuth2AuthCodeResponse", "ApiIntegrationOAuth2AuthCodeResponseScopeSeparator", "ApiIntegrationOAuth2CustomAppResponse", @@ -3680,6 +3787,8 @@ def __dir__(): "ArrayJsonSchemaPropertyOutputConstantValueItem", "ArrayJsonSchemaPropertyOutputItems", "AsrConversationalConfig", + "AsrConversationalConfigOverride", + "AsrConversationalConfigOverrideConfig", "AsrConversationalConfigWorkflowOverride", "AsrInputFormat", "AsrProvider", @@ -4091,6 +4200,7 @@ def __dir__(): "CreateOAuth2JwtRequest", "CreateOAuth2JwtRequestAlgorithm", "CreateOAuth2JwtRequestTokenResponseField", + "CreateOrderResponse", "CreatePhoneNumberResponseModel", "CreatePreviouslyGeneratedVoiceRequest", "CreatePrivateKeyJwtRequest", @@ -4102,12 +4212,12 @@ def __dir__(): "CreateServiceParams", "CreateSimulationTestRequest", "CreateSipTrunkPhoneNumberRequest", - "CreateSpeechEngineResponse", "CreateStaffParams", "CreateStringEnvironmentVariableRequest", "CreateToolCallUnitTestRequest", "CreateTranscriptRequest", "CreateTwilioPhoneNumberRequest", + "CueOptionsRequest", "Currency", "CustomGuardrailConfig", "CustomGuardrailConfigTriggerAction", @@ -4153,6 +4263,7 @@ def __dir__(): "DeleteWorkspaceGroupMemberResponseModel", "DeleteWorkspaceInviteResponseModel", "DeleteWorkspaceWebhookResponseModel", + "DeliverableInfo", "DependentAvailableAgentIdentifier", "DependentAvailableAgentIdentifierAccessLevel", "DependentAvailableMcpServerIdentifier", @@ -4181,6 +4292,7 @@ def __dir__(): "DocumentUsageModeEnum", "DocxExportOptions", "DtmfInputConfig", + "DubOrderItemRequest", "DubbedSegment", "DubbingCreateRequestMode", "DubbingListRequestDubbingStatus", @@ -4408,6 +4520,7 @@ def __dir__(): "InvoiceResponse", "InvoiceResponseModelPaymentIntentStatus", "InvoiceResponseModelPaymentIntentStatussesItem", + "ItemId", "KeepContextAlive", "KnowledgeBaseContentSearchResponseModel", "KnowledgeBaseContentSearchResult", @@ -4438,6 +4551,8 @@ def __dir__(): "LanguageAddedResponse", "LanguageDetectionToolConfig", "LanguageDetectionToolResultModel", + "LanguageInfo", + "LanguagePairInfo", "LanguagePresetInput", "LanguagePresetOutput", "LanguagePresetTranslation", @@ -4468,9 +4583,9 @@ def __dir__(): "ListHolidaysParams", "ListLocationsParams", "ListMcpToolsResponseModel", + "ListOrdersResponse", "ListProductsParams", "ListResponseAgentBranchSummary", - "ListResponseApiIntegrationDocResponse", "ListResponseMeta", "ListServicesParams", "ListSpeechEnginesResponse", @@ -4535,6 +4650,7 @@ def __dir__(): "McpToolConfigOverrideOutputInputOverridesValue_Constant", "McpToolConfigOverrideOutputInputOverridesValue_DynamicVariable", "McpToolConfigOverrideOutputInputOverridesValue_Llm", + "MediaId", "MemoryEntrySearchResult", "MemoryEntrySearchResultSource", "MessageSearchSortBy", @@ -4573,10 +4689,20 @@ def __dir__(): "ObjectJsonSchemaPropertyOutputPropertiesValue", "OrbAvatar", "OrchestratorToolMockBehaviorConfig", + "OrderDeliverablesResponse", + "OrderId", + "OrderItemInfo", + "OrderItemKind", + "OrderMediaResponse", + "OrderRequestState", + "OrderResponse", + "OrderState", + "OrderSummary", "OutboundCallRecipient", "OutboundCallRecipientResponseModel", "OutboundSipTrunkConfigRequestModel", "OutputFormat", + "PairedLanguagesResponse", "PartialTranscriptPayload", "PatchWorkspaceWebhookResponseModel", "PdfExportOptions", @@ -4728,6 +4854,7 @@ def __dir__(): "PydanticPronunciationDictionaryVersionLocator", "QualityPresetType", "QueryParamsJsonSchema", + "QuoteInfo", "RagChunkMetadata", "RagConfig", "RagConfigWorkflowOverride", @@ -4750,6 +4877,7 @@ def __dir__(): "RealtimeVoiceSettings", "ReceiveMessage", "ReceiveMessageMulti", + "ReceiveRttMessage", "ReceiveTextToDialogueWebsocketMessage", "ReceiveTranscription", "RecordingResponse", @@ -4760,7 +4888,9 @@ def __dir__(): "RegionConfigRequest", "RegionalProcessingSurchargeInfo", "RegisterForGroupSessionParams", + "RegisterMediaResponse", "RemoveMemberFromGroupRequest", + "RemoveOrderItemResponse", "Render", "RenderStatus", "RenderType", @@ -4781,6 +4911,26 @@ def __dir__(): "ReviewResponseModelRejectReasonsItem", "ReviewResponseModelReviewStatus", "ReviewStatus", + "RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput", + "RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput_Dub", + "RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput_Subtitles", + "RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindOutput", + "RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindOutput_Dub", + "RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindOutput_Subtitles", + "RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind", + "RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind_Pair", + "RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind_Single", + "RttAudioPayload", + "RttEndOfStreamPayload", + "RttErrorPayload", + "RttFinalTranscriptPayload", + "RttInputAudioChunkPayload", + "RttInputFormatEnum", + "RttOutputFormatEnum", + "RttPartialTranscriptPayload", + "RttSessionStartedPayload", + "RttStatusPayload", + "RttTranslationPayload", "SafetyCommonModel", "SafetyEvaluation", "SafetyResponseModel", @@ -4824,6 +4974,7 @@ def __dir__(): "SegmentedJsonExportOptions", "SendMessage", "SendMessageMulti", + "SendRttMessage", "SendText", "SendTextMulti", "SessionStartedPayload", @@ -4838,6 +4989,7 @@ def __dir__(): "SimilarVoicesForSpeakerResponse", "SimulationTestModel", "SimulationToolMockBehaviorConfig", + "SingleLanguagesResponse", "SingleTestRunRequestModel", "SingleUseTokenResponseModel", "SingleUseTokenType", @@ -4872,6 +5024,7 @@ def __dir__(): "SpeakerUpdatedResponse", "SpeechEngineConfig", "SpeechEngineConfigRequestHeadersValue", + "SpeechEngineConversationInitiationClientDataConfig", "SpeechEngineResponse", "SpeechEngineSummaryResponse", "SpeechHistoryItemResponse", @@ -4906,10 +5059,12 @@ def __dir__(): "StudioClipReferenceClipType", "StudioTextStyleOutlineModel", "StudioTextStyleShadowModel", + "SubmitOrderResponse", "Subscription", "SubscriptionResponse", "SubscriptionResponseModelMaxCreditLimitExtension", "SubscriptionStatusType", + "SubtitleOrderItemRequest", "SuggestedAudioTag", "SupportedVoice", "SystemToolConfigInput", @@ -5082,6 +5237,8 @@ def __dir__(): "UpdateOAuth2JwtRequest", "UpdateOAuth2JwtRequestAlgorithm", "UpdateOAuth2JwtRequestTokenResponseField", + "UpdateOrderRequest", + "UpdateOrderResponse", "UpdateProductParams", "UpdateProjectRequest", "UpdatePronunciationDictionariesRequest", @@ -5091,6 +5248,8 @@ def __dir__(): "UpdateStaffParams", "UpdateToolCallUnitTestRequest", "UpdateWorkspaceMemberResponseModel", + "UpsertOrderItemRequest", + "UpsertOrderItemResponse", "UrlAvatar", "UrlModel", "UsageAggregationInterval", @@ -5325,6 +5484,7 @@ def __dir__(): "models", "music", "play", + "productions", "pronunciation_dictionaries", "samples", "save", @@ -5341,6 +5501,7 @@ def __dir__(): "tokens", "usage", "user", + "v_1_realtime_translation", "v_1_speech_to_text_realtime", "v_1_text_to_dialogue_stream_input", "v_1_text_to_speech_voice_id_multi_stream_input", diff --git a/src/elevenlabs/base_client.py b/src/elevenlabs/base_client.py index bcc0caa4..468bc57e 100644 --- a/src/elevenlabs/base_client.py +++ b/src/elevenlabs/base_client.py @@ -21,6 +21,7 @@ from .history.client import AsyncHistoryClient, HistoryClient from .models.client import AsyncModelsClient, ModelsClient from .music.client import AsyncMusicClient, MusicClient + from .productions.client import AsyncProductionsClient, ProductionsClient from .pronunciation_dictionaries.client import AsyncPronunciationDictionariesClient, PronunciationDictionariesClient from .samples.client import AsyncSamplesClient, SamplesClient from .service_accounts.client import AsyncServiceAccountsClient, ServiceAccountsClient @@ -130,6 +131,7 @@ def __init__( self._conversational_ai: typing.Optional[ConversationalAiClient] = None self._speech_engine: typing.Optional[SpeechEngineClient] = None self._environment_variables: typing.Optional[EnvironmentVariablesClient] = None + self._productions: typing.Optional[ProductionsClient] = None self._tokens: typing.Optional[TokensClient] = None self._workspace: typing.Optional[WorkspaceClient] = None @@ -361,6 +363,14 @@ def environment_variables(self): self._environment_variables = EnvironmentVariablesClient(client_wrapper=self._client_wrapper) return self._environment_variables + @property + def productions(self): + if self._productions is None: + from .productions.client import ProductionsClient # noqa: E402 + + self._productions = ProductionsClient(client_wrapper=self._client_wrapper) + return self._productions + @property def tokens(self): if self._tokens is None: @@ -468,6 +478,7 @@ def __init__( self._conversational_ai: typing.Optional[AsyncConversationalAiClient] = None self._speech_engine: typing.Optional[AsyncSpeechEngineClient] = None self._environment_variables: typing.Optional[AsyncEnvironmentVariablesClient] = None + self._productions: typing.Optional[AsyncProductionsClient] = None self._tokens: typing.Optional[AsyncTokensClient] = None self._workspace: typing.Optional[AsyncWorkspaceClient] = None @@ -707,6 +718,14 @@ def environment_variables(self): self._environment_variables = AsyncEnvironmentVariablesClient(client_wrapper=self._client_wrapper) return self._environment_variables + @property + def productions(self): + if self._productions is None: + from .productions.client import AsyncProductionsClient # noqa: E402 + + self._productions = AsyncProductionsClient(client_wrapper=self._client_wrapper) + return self._productions + @property def tokens(self): if self._tokens is None: diff --git a/src/elevenlabs/conversational_ai/__init__.py b/src/elevenlabs/conversational_ai/__init__.py index 457ea3fb..8375c882 100644 --- a/src/elevenlabs/conversational_ai/__init__.py +++ b/src/elevenlabs/conversational_ai/__init__.py @@ -27,7 +27,11 @@ whatsapp, whatsapp_accounts, ) - from .conversations import ConversationsListRequestExcludeStatusesItem, ConversationsListRequestSummaryMode + from .conversations import ( + ConversationsGetRequestFormat, + ConversationsListRequestExcludeStatusesItem, + ConversationsListRequestSummaryMode, + ) from .knowledge_base import ( KnowledgeBaseGetOrCreateRagIndexesResponseValue, KnowledgeBaseGetOrCreateRagIndexesResponseValue_Failure, @@ -81,6 +85,7 @@ "BodySendAnOutboundMessageViaWhatsAppV1ConvaiWhatsappOutboundMessagePostTemplateParamsItem_Body": ".whatsapp", "BodySendAnOutboundMessageViaWhatsAppV1ConvaiWhatsappOutboundMessagePostTemplateParamsItem_Button": ".whatsapp", "BodySendAnOutboundMessageViaWhatsAppV1ConvaiWhatsappOutboundMessagePostTemplateParamsItem_Header": ".whatsapp", + "ConversationsGetRequestFormat": ".conversations", "ConversationsListRequestExcludeStatusesItem": ".conversations", "ConversationsListRequestSummaryMode": ".conversations", "KnowledgeBaseGetOrCreateRagIndexesResponseValue": ".knowledge_base", @@ -165,6 +170,7 @@ def __dir__(): "BodySendAnOutboundMessageViaWhatsAppV1ConvaiWhatsappOutboundMessagePostTemplateParamsItem_Body", "BodySendAnOutboundMessageViaWhatsAppV1ConvaiWhatsappOutboundMessagePostTemplateParamsItem_Button", "BodySendAnOutboundMessageViaWhatsAppV1ConvaiWhatsappOutboundMessagePostTemplateParamsItem_Header", + "ConversationsGetRequestFormat", "ConversationsListRequestExcludeStatusesItem", "ConversationsListRequestSummaryMode", "KnowledgeBaseGetOrCreateRagIndexesResponseValue", diff --git a/src/elevenlabs/conversational_ai/conversations/__init__.py b/src/elevenlabs/conversational_ai/conversations/__init__.py index 7c3388e8..9e97bf5b 100644 --- a/src/elevenlabs/conversational_ai/conversations/__init__.py +++ b/src/elevenlabs/conversational_ai/conversations/__init__.py @@ -6,10 +6,15 @@ from importlib import import_module if typing.TYPE_CHECKING: - from .types import ConversationsListRequestExcludeStatusesItem, ConversationsListRequestSummaryMode + from .types import ( + ConversationsGetRequestFormat, + ConversationsListRequestExcludeStatusesItem, + ConversationsListRequestSummaryMode, + ) from . import analysis, audio, feedback, files, messages, tags, topics from .messages import MessagesTextSearchRequestSummaryMode _dynamic_imports: typing.Dict[str, str] = { + "ConversationsGetRequestFormat": ".types", "ConversationsListRequestExcludeStatusesItem": ".types", "ConversationsListRequestSummaryMode": ".types", "MessagesTextSearchRequestSummaryMode": ".messages", @@ -45,6 +50,7 @@ def __dir__(): __all__ = [ + "ConversationsGetRequestFormat", "ConversationsListRequestExcludeStatusesItem", "ConversationsListRequestSummaryMode", "MessagesTextSearchRequestSummaryMode", diff --git a/src/elevenlabs/conversational_ai/conversations/client.py b/src/elevenlabs/conversational_ai/conversations/client.py index 6faa6f85..14de5e25 100644 --- a/src/elevenlabs/conversational_ai/conversations/client.py +++ b/src/elevenlabs/conversational_ai/conversations/client.py @@ -14,6 +14,7 @@ from ...types.get_sip_log_messages_response import GetSipLogMessagesResponse from ...types.token_response_model import TokenResponseModel from .raw_client import AsyncRawConversationsClient, RawConversationsClient +from .types.conversations_get_request_format import ConversationsGetRequestFormat from .types.conversations_list_request_exclude_statuses_item import ConversationsListRequestExcludeStatusesItem from .types.conversations_list_request_summary_mode import ConversationsListRequestSummaryMode @@ -357,7 +358,11 @@ def list( return _response.data def get( - self, conversation_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + conversation_id: str, + *, + format: typing.Optional[ConversationsGetRequestFormat] = None, + request_options: typing.Optional[RequestOptions] = None, ) -> GetConversationResponseModel: """ Get the details of a particular conversation @@ -367,6 +372,9 @@ def get( conversation_id : str The id of the conversation you're taking the action on. + format : typing.Optional[ConversationsGetRequestFormat] + Response format. Defaults to 'json'. Set to 'opentelemetry' for an OTLP-compatible trace payload using the same structure as the post-call webhook. + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -386,7 +394,7 @@ def get( conversation_id="123", ) """ - _response = self._raw_client.get(conversation_id, request_options=request_options) + _response = self._raw_client.get(conversation_id, format=format, request_options=request_options) return _response.data def delete(self, conversation_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> typing.Any: @@ -878,7 +886,11 @@ async def main() -> None: return _response.data async def get( - self, conversation_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + conversation_id: str, + *, + format: typing.Optional[ConversationsGetRequestFormat] = None, + request_options: typing.Optional[RequestOptions] = None, ) -> GetConversationResponseModel: """ Get the details of a particular conversation @@ -888,6 +900,9 @@ async def get( conversation_id : str The id of the conversation you're taking the action on. + format : typing.Optional[ConversationsGetRequestFormat] + Response format. Defaults to 'json'. Set to 'opentelemetry' for an OTLP-compatible trace payload using the same structure as the post-call webhook. + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -915,7 +930,7 @@ async def main() -> None: asyncio.run(main()) """ - _response = await self._raw_client.get(conversation_id, request_options=request_options) + _response = await self._raw_client.get(conversation_id, format=format, request_options=request_options) return _response.data async def delete( diff --git a/src/elevenlabs/conversational_ai/conversations/raw_client.py b/src/elevenlabs/conversational_ai/conversations/raw_client.py index 4c48c584..124cc999 100644 --- a/src/elevenlabs/conversational_ai/conversations/raw_client.py +++ b/src/elevenlabs/conversational_ai/conversations/raw_client.py @@ -17,6 +17,7 @@ from ...types.get_conversations_page_response_model import GetConversationsPageResponseModel from ...types.get_sip_log_messages_response import GetSipLogMessagesResponse from ...types.token_response_model import TokenResponseModel +from .types.conversations_get_request_format import ConversationsGetRequestFormat from .types.conversations_list_request_exclude_statuses_item import ConversationsListRequestExcludeStatusesItem from .types.conversations_list_request_summary_mode import ConversationsListRequestSummaryMode @@ -352,7 +353,11 @@ def list( raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def get( - self, conversation_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + conversation_id: str, + *, + format: typing.Optional[ConversationsGetRequestFormat] = None, + request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[GetConversationResponseModel]: """ Get the details of a particular conversation @@ -362,6 +367,9 @@ def get( conversation_id : str The id of the conversation you're taking the action on. + format : typing.Optional[ConversationsGetRequestFormat] + Response format. Defaults to 'json'. Set to 'opentelemetry' for an OTLP-compatible trace payload using the same structure as the post-call webhook. + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -373,6 +381,9 @@ def get( _response = self._client_wrapper.httpx_client.request( f"v1/convai/conversations/{jsonable_encoder(conversation_id)}", method="GET", + params={ + "format": format, + }, request_options=request_options, ) try: @@ -849,7 +860,11 @@ async def list( raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def get( - self, conversation_id: str, *, request_options: typing.Optional[RequestOptions] = None + self, + conversation_id: str, + *, + format: typing.Optional[ConversationsGetRequestFormat] = None, + request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[GetConversationResponseModel]: """ Get the details of a particular conversation @@ -859,6 +874,9 @@ async def get( conversation_id : str The id of the conversation you're taking the action on. + format : typing.Optional[ConversationsGetRequestFormat] + Response format. Defaults to 'json'. Set to 'opentelemetry' for an OTLP-compatible trace payload using the same structure as the post-call webhook. + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -870,6 +888,9 @@ async def get( _response = await self._client_wrapper.httpx_client.request( f"v1/convai/conversations/{jsonable_encoder(conversation_id)}", method="GET", + params={ + "format": format, + }, request_options=request_options, ) try: diff --git a/src/elevenlabs/conversational_ai/conversations/types/__init__.py b/src/elevenlabs/conversational_ai/conversations/types/__init__.py index 21fb0c26..724948fc 100644 --- a/src/elevenlabs/conversational_ai/conversations/types/__init__.py +++ b/src/elevenlabs/conversational_ai/conversations/types/__init__.py @@ -6,9 +6,11 @@ from importlib import import_module if typing.TYPE_CHECKING: + from .conversations_get_request_format import ConversationsGetRequestFormat from .conversations_list_request_exclude_statuses_item import ConversationsListRequestExcludeStatusesItem from .conversations_list_request_summary_mode import ConversationsListRequestSummaryMode _dynamic_imports: typing.Dict[str, str] = { + "ConversationsGetRequestFormat": ".conversations_get_request_format", "ConversationsListRequestExcludeStatusesItem": ".conversations_list_request_exclude_statuses_item", "ConversationsListRequestSummaryMode": ".conversations_list_request_summary_mode", } @@ -35,4 +37,8 @@ def __dir__(): return sorted(lazy_attrs) -__all__ = ["ConversationsListRequestExcludeStatusesItem", "ConversationsListRequestSummaryMode"] +__all__ = [ + "ConversationsGetRequestFormat", + "ConversationsListRequestExcludeStatusesItem", + "ConversationsListRequestSummaryMode", +] diff --git a/src/elevenlabs/conversational_ai/conversations/types/conversations_get_request_format.py b/src/elevenlabs/conversational_ai/conversations/types/conversations_get_request_format.py new file mode 100644 index 00000000..093d0bf8 --- /dev/null +++ b/src/elevenlabs/conversational_ai/conversations/types/conversations_get_request_format.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +ConversationsGetRequestFormat = typing.Union[typing.Literal["json", "opentelemetry"], typing.Any] diff --git a/src/elevenlabs/core/client_wrapper.py b/src/elevenlabs/core/client_wrapper.py index b59bd864..efe50811 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.48.0", + "User-Agent": "elevenlabs/2.49.0", "X-Fern-Language": "Python", "X-Fern-SDK-Name": "elevenlabs", - "X-Fern-SDK-Version": "2.48.0", + "X-Fern-SDK-Version": "2.49.0", **(self.get_custom_headers() or {}), } if self._api_key is not None: diff --git a/src/elevenlabs/music/client.py b/src/elevenlabs/music/client.py index 74425ddd..3169e86a 100644 --- a/src/elevenlabs/music/client.py +++ b/src/elevenlabs/music/client.py @@ -43,6 +43,7 @@ def video_to_music( output_format: typing.Optional[AllowedOutputFormats] = None, description: typing.Optional[str] = OMIT, tags: typing.Optional[typing.List[str]] = OMIT, + model_id: typing.Optional[typing.Literal["music_v1"]] = OMIT, sign_with_c_2_pa: typing.Optional[bool] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> typing.Iterator[bytes]: @@ -63,6 +64,9 @@ def video_to_music( tags : typing.Optional[typing.List[str]] Optional list of style tags (e.g. ['upbeat', 'cinematic']). A maximum of 10 tags is allowed. + model_id : typing.Optional[typing.Literal["music_v1"]] + The model to use for the generation. + sign_with_c_2_pa : typing.Optional[bool] Whether to sign the generated song with C2PA. Applicable only for mp3 files. @@ -79,6 +83,7 @@ def video_to_music( output_format=output_format, description=description, tags=tags, + model_id=model_id, sign_with_c_2_pa=sign_with_c_2_pa, request_options=request_options, ) as r: @@ -441,6 +446,7 @@ async def video_to_music( output_format: typing.Optional[AllowedOutputFormats] = None, description: typing.Optional[str] = OMIT, tags: typing.Optional[typing.List[str]] = OMIT, + model_id: typing.Optional[typing.Literal["music_v1"]] = OMIT, sign_with_c_2_pa: typing.Optional[bool] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> typing.AsyncIterator[bytes]: @@ -461,6 +467,9 @@ async def video_to_music( tags : typing.Optional[typing.List[str]] Optional list of style tags (e.g. ['upbeat', 'cinematic']). A maximum of 10 tags is allowed. + model_id : typing.Optional[typing.Literal["music_v1"]] + The model to use for the generation. + sign_with_c_2_pa : typing.Optional[bool] Whether to sign the generated song with C2PA. Applicable only for mp3 files. @@ -477,6 +486,7 @@ async def video_to_music( output_format=output_format, description=description, tags=tags, + model_id=model_id, sign_with_c_2_pa=sign_with_c_2_pa, request_options=request_options, ) as r: diff --git a/src/elevenlabs/music/raw_client.py b/src/elevenlabs/music/raw_client.py index 4e18dc54..dd663524 100644 --- a/src/elevenlabs/music/raw_client.py +++ b/src/elevenlabs/music/raw_client.py @@ -34,6 +34,7 @@ def video_to_music( output_format: typing.Optional[AllowedOutputFormats] = None, description: typing.Optional[str] = OMIT, tags: typing.Optional[typing.List[str]] = OMIT, + model_id: typing.Optional[typing.Literal["music_v1"]] = OMIT, sign_with_c_2_pa: typing.Optional[bool] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> typing.Iterator[HttpResponse[typing.Iterator[bytes]]]: @@ -54,6 +55,9 @@ def video_to_music( tags : typing.Optional[typing.List[str]] Optional list of style tags (e.g. ['upbeat', 'cinematic']). A maximum of 10 tags is allowed. + model_id : typing.Optional[typing.Literal["music_v1"]] + The model to use for the generation. + sign_with_c_2_pa : typing.Optional[bool] Whether to sign the generated song with C2PA. Applicable only for mp3 files. @@ -74,6 +78,7 @@ def video_to_music( data={ "description": description, "tags": tags, + "model_id": model_id, "sign_with_c2pa": sign_with_c_2_pa, }, files={ @@ -616,6 +621,7 @@ async def video_to_music( output_format: typing.Optional[AllowedOutputFormats] = None, description: typing.Optional[str] = OMIT, tags: typing.Optional[typing.List[str]] = OMIT, + model_id: typing.Optional[typing.Literal["music_v1"]] = OMIT, sign_with_c_2_pa: typing.Optional[bool] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> typing.AsyncIterator[AsyncHttpResponse[typing.AsyncIterator[bytes]]]: @@ -636,6 +642,9 @@ async def video_to_music( tags : typing.Optional[typing.List[str]] Optional list of style tags (e.g. ['upbeat', 'cinematic']). A maximum of 10 tags is allowed. + model_id : typing.Optional[typing.Literal["music_v1"]] + The model to use for the generation. + sign_with_c_2_pa : typing.Optional[bool] Whether to sign the generated song with C2PA. Applicable only for mp3 files. @@ -656,6 +665,7 @@ async def video_to_music( data={ "description": description, "tags": tags, + "model_id": model_id, "sign_with_c2pa": sign_with_c_2_pa, }, files={ diff --git a/src/elevenlabs/productions/__init__.py b/src/elevenlabs/productions/__init__.py new file mode 100644 index 00000000..60c065b3 --- /dev/null +++ b/src/elevenlabs/productions/__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 . import orders +_dynamic_imports: typing.Dict[str, str] = {"orders": ".orders"} + + +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__ = ["orders"] diff --git a/src/elevenlabs/productions/client.py b/src/elevenlabs/productions/client.py new file mode 100644 index 00000000..16b54941 --- /dev/null +++ b/src/elevenlabs/productions/client.py @@ -0,0 +1,63 @@ +# This file was auto-generated by Fern from our API Definition. + +from __future__ import annotations + +import typing + +from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from .raw_client import AsyncRawProductionsClient, RawProductionsClient + +if typing.TYPE_CHECKING: + from .orders.client import AsyncOrdersClient, OrdersClient + + +class ProductionsClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._raw_client = RawProductionsClient(client_wrapper=client_wrapper) + self._client_wrapper = client_wrapper + self._orders: typing.Optional[OrdersClient] = None + + @property + def with_raw_response(self) -> RawProductionsClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + RawProductionsClient + """ + return self._raw_client + + @property + def orders(self): + if self._orders is None: + from .orders.client import OrdersClient # noqa: E402 + + self._orders = OrdersClient(client_wrapper=self._client_wrapper) + return self._orders + + +class AsyncProductionsClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._raw_client = AsyncRawProductionsClient(client_wrapper=client_wrapper) + self._client_wrapper = client_wrapper + self._orders: typing.Optional[AsyncOrdersClient] = None + + @property + def with_raw_response(self) -> AsyncRawProductionsClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + AsyncRawProductionsClient + """ + return self._raw_client + + @property + def orders(self): + if self._orders is None: + from .orders.client import AsyncOrdersClient # noqa: E402 + + self._orders = AsyncOrdersClient(client_wrapper=self._client_wrapper) + return self._orders diff --git a/src/elevenlabs/productions/orders/__init__.py b/src/elevenlabs/productions/orders/__init__.py new file mode 100644 index 00000000..18d42c98 --- /dev/null +++ b/src/elevenlabs/productions/orders/__init__.py @@ -0,0 +1,39 @@ +# 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 . import deliverables, items, languages, media +_dynamic_imports: typing.Dict[str, str] = { + "deliverables": ".deliverables", + "items": ".items", + "languages": ".languages", + "media": ".media", +} + + +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__ = ["deliverables", "items", "languages", "media"] diff --git a/src/elevenlabs/productions/orders/client.py b/src/elevenlabs/productions/orders/client.py new file mode 100644 index 00000000..1dd7fe9e --- /dev/null +++ b/src/elevenlabs/productions/orders/client.py @@ -0,0 +1,573 @@ +# This file was auto-generated by Fern from our API Definition. + +from __future__ import annotations + +import datetime as dt +import typing + +from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ...core.request_options import RequestOptions +from ...types.create_order_response import CreateOrderResponse +from ...types.list_orders_response import ListOrdersResponse +from ...types.order_id import OrderId +from ...types.order_request_state import OrderRequestState +from ...types.order_response import OrderResponse +from ...types.submit_order_response import SubmitOrderResponse +from ...types.update_order_request import UpdateOrderRequest +from ...types.update_order_response import UpdateOrderResponse +from .raw_client import AsyncRawOrdersClient, RawOrdersClient + +if typing.TYPE_CHECKING: + from .deliverables.client import AsyncDeliverablesClient, DeliverablesClient + from .items.client import AsyncItemsClient, ItemsClient + from .languages.client import AsyncLanguagesClient, LanguagesClient + from .media.client import AsyncMediaClient, MediaClient +# this is used as the default value for optional parameters +OMIT = typing.cast(typing.Any, ...) + + +class OrdersClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._raw_client = RawOrdersClient(client_wrapper=client_wrapper) + self._client_wrapper = client_wrapper + self._media: typing.Optional[MediaClient] = None + self._items: typing.Optional[ItemsClient] = None + self._deliverables: typing.Optional[DeliverablesClient] = None + self._languages: typing.Optional[LanguagesClient] = None + + @property + def with_raw_response(self) -> RawOrdersClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + RawOrdersClient + """ + return self._raw_client + + def list( + self, + *, + page_size: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + status: typing.Optional[typing.Union[OrderRequestState, typing.Sequence[OrderRequestState]]] = None, + start_date: typing.Optional[dt.datetime] = None, + end_date: typing.Optional[dt.datetime] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> ListOrdersResponse: + """ + Lists Productions orders in the workspace. Supports filtering by status and date range, with pagination. + + Parameters + ---------- + page_size : typing.Optional[int] + Maximum number of orders to return per page. + + offset : typing.Optional[int] + Number of orders to skip for pagination. + + status : typing.Optional[typing.Union[OrderRequestState, typing.Sequence[OrderRequestState]]] + Filter orders by one or more statuses. + + start_date : typing.Optional[dt.datetime] + Filter orders created on or after this date. + + end_date : typing.Optional[dt.datetime] + Filter orders created on or before this date. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ListOrdersResponse + Successful Response + + Examples + -------- + import datetime + + from elevenlabs import ElevenLabs + + client = ElevenLabs( + api_key="YOUR_API_KEY", + ) + client.productions.orders.list( + page_size=1, + offset=1, + status=["open"], + start_date=datetime.datetime.fromisoformat( + "2024-01-15 09:30:00+00:00", + ), + end_date=datetime.datetime.fromisoformat( + "2024-01-15 09:30:00+00:00", + ), + ) + """ + _response = self._raw_client.list( + page_size=page_size, + offset=offset, + status=status, + start_date=start_date, + end_date=end_date, + request_options=request_options, + ) + return _response.data + + def create(self, *, request_options: typing.Optional[RequestOptions] = None) -> CreateOrderResponse: + """ + Creates a new Productions order in the workspace. The order starts in the open state and can be configured with items before submission. + + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CreateOrderResponse + Successful Response + + Examples + -------- + from elevenlabs import ElevenLabs + + client = ElevenLabs( + api_key="YOUR_API_KEY", + ) + client.productions.orders.create() + """ + _response = self._raw_client.create(request_options=request_options) + return _response.data + + def get(self, order_id: OrderId, *, request_options: typing.Optional[RequestOptions] = None) -> OrderResponse: + """ + Retrieves full details for a Productions order. + + Quote and pricing information may not be available immediately; if you wish to see the quote before submission, you may need to poll the order details until it is ready. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + OrderResponse + Successful Response + + Examples + -------- + from elevenlabs import ElevenLabs + + client = ElevenLabs( + api_key="YOUR_API_KEY", + ) + client.productions.orders.get( + order_id="order_id", + ) + """ + _response = self._raw_client.get(order_id, request_options=request_options) + return _response.data + + def update( + self, order_id: OrderId, *, request: UpdateOrderRequest, request_options: typing.Optional[RequestOptions] = None + ) -> UpdateOrderResponse: + """ + Updates an open order. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + request : UpdateOrderRequest + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + UpdateOrderResponse + Successful Response + + Examples + -------- + from elevenlabs import ElevenLabs, UpdateOrderRequest + + client = ElevenLabs( + api_key="YOUR_API_KEY", + ) + client.productions.orders.update( + order_id="order_id", + request=UpdateOrderRequest( + name="Spanish Dubs", + ), + ) + """ + _response = self._raw_client.update(order_id, request=request, request_options=request_options) + return _response.data + + def submit( + self, order_id: OrderId, *, request_options: typing.Optional[RequestOptions] = None + ) -> SubmitOrderResponse: + """ + Submits an open order for processing. The order must have at least one item. Once submitted, items can no longer be modified. + + Upon submission, the workspace will be charged for the order. The quote is based on information extracted from the uploaded media, such as its duration. The quote may not be available immediately; if you wish to see the quote before submission, you may need to poll the order details until the quote is ready. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + SubmitOrderResponse + Successful Response + + Examples + -------- + from elevenlabs import ElevenLabs + + client = ElevenLabs( + api_key="YOUR_API_KEY", + ) + client.productions.orders.submit( + order_id="order_id", + ) + """ + _response = self._raw_client.submit(order_id, request_options=request_options) + return _response.data + + @property + def media(self): + if self._media is None: + from .media.client import MediaClient # noqa: E402 + + self._media = MediaClient(client_wrapper=self._client_wrapper) + return self._media + + @property + def items(self): + if self._items is None: + from .items.client import ItemsClient # noqa: E402 + + self._items = ItemsClient(client_wrapper=self._client_wrapper) + return self._items + + @property + def deliverables(self): + if self._deliverables is None: + from .deliverables.client import DeliverablesClient # noqa: E402 + + self._deliverables = DeliverablesClient(client_wrapper=self._client_wrapper) + return self._deliverables + + @property + def languages(self): + if self._languages is None: + from .languages.client import LanguagesClient # noqa: E402 + + self._languages = LanguagesClient(client_wrapper=self._client_wrapper) + return self._languages + + +class AsyncOrdersClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._raw_client = AsyncRawOrdersClient(client_wrapper=client_wrapper) + self._client_wrapper = client_wrapper + self._media: typing.Optional[AsyncMediaClient] = None + self._items: typing.Optional[AsyncItemsClient] = None + self._deliverables: typing.Optional[AsyncDeliverablesClient] = None + self._languages: typing.Optional[AsyncLanguagesClient] = None + + @property + def with_raw_response(self) -> AsyncRawOrdersClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + AsyncRawOrdersClient + """ + return self._raw_client + + async def list( + self, + *, + page_size: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + status: typing.Optional[typing.Union[OrderRequestState, typing.Sequence[OrderRequestState]]] = None, + start_date: typing.Optional[dt.datetime] = None, + end_date: typing.Optional[dt.datetime] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> ListOrdersResponse: + """ + Lists Productions orders in the workspace. Supports filtering by status and date range, with pagination. + + Parameters + ---------- + page_size : typing.Optional[int] + Maximum number of orders to return per page. + + offset : typing.Optional[int] + Number of orders to skip for pagination. + + status : typing.Optional[typing.Union[OrderRequestState, typing.Sequence[OrderRequestState]]] + Filter orders by one or more statuses. + + start_date : typing.Optional[dt.datetime] + Filter orders created on or after this date. + + end_date : typing.Optional[dt.datetime] + Filter orders created on or before this date. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ListOrdersResponse + Successful Response + + Examples + -------- + import asyncio + import datetime + + from elevenlabs import AsyncElevenLabs + + client = AsyncElevenLabs( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.productions.orders.list( + page_size=1, + offset=1, + status=["open"], + start_date=datetime.datetime.fromisoformat( + "2024-01-15 09:30:00+00:00", + ), + end_date=datetime.datetime.fromisoformat( + "2024-01-15 09:30:00+00:00", + ), + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.list( + page_size=page_size, + offset=offset, + status=status, + start_date=start_date, + end_date=end_date, + request_options=request_options, + ) + return _response.data + + async def create(self, *, request_options: typing.Optional[RequestOptions] = None) -> CreateOrderResponse: + """ + Creates a new Productions order in the workspace. The order starts in the open state and can be configured with items before submission. + + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + CreateOrderResponse + Successful Response + + Examples + -------- + import asyncio + + from elevenlabs import AsyncElevenLabs + + client = AsyncElevenLabs( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.productions.orders.create() + + + asyncio.run(main()) + """ + _response = await self._raw_client.create(request_options=request_options) + return _response.data + + async def get(self, order_id: OrderId, *, request_options: typing.Optional[RequestOptions] = None) -> OrderResponse: + """ + Retrieves full details for a Productions order. + + Quote and pricing information may not be available immediately; if you wish to see the quote before submission, you may need to poll the order details until it is ready. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + OrderResponse + Successful Response + + Examples + -------- + import asyncio + + from elevenlabs import AsyncElevenLabs + + client = AsyncElevenLabs( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.productions.orders.get( + order_id="order_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.get(order_id, request_options=request_options) + return _response.data + + async def update( + self, order_id: OrderId, *, request: UpdateOrderRequest, request_options: typing.Optional[RequestOptions] = None + ) -> UpdateOrderResponse: + """ + Updates an open order. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + request : UpdateOrderRequest + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + UpdateOrderResponse + Successful Response + + Examples + -------- + import asyncio + + from elevenlabs import AsyncElevenLabs, UpdateOrderRequest + + client = AsyncElevenLabs( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.productions.orders.update( + order_id="order_id", + request=UpdateOrderRequest( + name="Spanish Dubs", + ), + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.update(order_id, request=request, request_options=request_options) + return _response.data + + async def submit( + self, order_id: OrderId, *, request_options: typing.Optional[RequestOptions] = None + ) -> SubmitOrderResponse: + """ + Submits an open order for processing. The order must have at least one item. Once submitted, items can no longer be modified. + + Upon submission, the workspace will be charged for the order. The quote is based on information extracted from the uploaded media, such as its duration. The quote may not be available immediately; if you wish to see the quote before submission, you may need to poll the order details until the quote is ready. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + SubmitOrderResponse + Successful Response + + Examples + -------- + import asyncio + + from elevenlabs import AsyncElevenLabs + + client = AsyncElevenLabs( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.productions.orders.submit( + order_id="order_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.submit(order_id, request_options=request_options) + return _response.data + + @property + def media(self): + if self._media is None: + from .media.client import AsyncMediaClient # noqa: E402 + + self._media = AsyncMediaClient(client_wrapper=self._client_wrapper) + return self._media + + @property + def items(self): + if self._items is None: + from .items.client import AsyncItemsClient # noqa: E402 + + self._items = AsyncItemsClient(client_wrapper=self._client_wrapper) + return self._items + + @property + def deliverables(self): + if self._deliverables is None: + from .deliverables.client import AsyncDeliverablesClient # noqa: E402 + + self._deliverables = AsyncDeliverablesClient(client_wrapper=self._client_wrapper) + return self._deliverables + + @property + def languages(self): + if self._languages is None: + from .languages.client import AsyncLanguagesClient # noqa: E402 + + self._languages = AsyncLanguagesClient(client_wrapper=self._client_wrapper) + return self._languages diff --git a/src/elevenlabs/productions/orders/deliverables/__init__.py b/src/elevenlabs/productions/orders/deliverables/__init__.py new file mode 100644 index 00000000..5cde0202 --- /dev/null +++ b/src/elevenlabs/productions/orders/deliverables/__init__.py @@ -0,0 +1,4 @@ +# This file was auto-generated by Fern from our API Definition. + +# isort: skip_file + diff --git a/src/elevenlabs/productions/orders/deliverables/client.py b/src/elevenlabs/productions/orders/deliverables/client.py new file mode 100644 index 00000000..2b0bf946 --- /dev/null +++ b/src/elevenlabs/productions/orders/deliverables/client.py @@ -0,0 +1,115 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +from ....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ....core.request_options import RequestOptions +from ....types.order_deliverables_response import OrderDeliverablesResponse +from ....types.order_id import OrderId +from .raw_client import AsyncRawDeliverablesClient, RawDeliverablesClient + + +class DeliverablesClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._raw_client = RawDeliverablesClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> RawDeliverablesClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + RawDeliverablesClient + """ + return self._raw_client + + def list( + self, order_id: OrderId, *, request_options: typing.Optional[RequestOptions] = None + ) -> OrderDeliverablesResponse: + """ + Retrieves the delivered files for a completed order. Returns an empty list if the order is not yet completed. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + OrderDeliverablesResponse + Successful Response + + Examples + -------- + from elevenlabs import ElevenLabs + + client = ElevenLabs( + api_key="YOUR_API_KEY", + ) + client.productions.orders.deliverables.list( + order_id="order_id", + ) + """ + _response = self._raw_client.list(order_id, request_options=request_options) + return _response.data + + +class AsyncDeliverablesClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._raw_client = AsyncRawDeliverablesClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> AsyncRawDeliverablesClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + AsyncRawDeliverablesClient + """ + return self._raw_client + + async def list( + self, order_id: OrderId, *, request_options: typing.Optional[RequestOptions] = None + ) -> OrderDeliverablesResponse: + """ + Retrieves the delivered files for a completed order. Returns an empty list if the order is not yet completed. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + OrderDeliverablesResponse + Successful Response + + Examples + -------- + import asyncio + + from elevenlabs import AsyncElevenLabs + + client = AsyncElevenLabs( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.productions.orders.deliverables.list( + order_id="order_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.list(order_id, request_options=request_options) + return _response.data diff --git a/src/elevenlabs/productions/orders/deliverables/raw_client.py b/src/elevenlabs/productions/orders/deliverables/raw_client.py new file mode 100644 index 00000000..8b0bd4fe --- /dev/null +++ b/src/elevenlabs/productions/orders/deliverables/raw_client.py @@ -0,0 +1,124 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing +from json.decoder import JSONDecodeError + +from ....core.api_error import ApiError +from ....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ....core.http_response import AsyncHttpResponse, HttpResponse +from ....core.jsonable_encoder import jsonable_encoder +from ....core.request_options import RequestOptions +from ....core.unchecked_base_model import construct_type +from ....errors.unprocessable_entity_error import UnprocessableEntityError +from ....types.order_deliverables_response import OrderDeliverablesResponse +from ....types.order_id import OrderId + + +class RawDeliverablesClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._client_wrapper = client_wrapper + + def list( + self, order_id: OrderId, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[OrderDeliverablesResponse]: + """ + Retrieves the delivered files for a completed order. Returns an empty list if the order is not yet completed. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[OrderDeliverablesResponse] + Successful Response + """ + _response = self._client_wrapper.httpx_client.request( + f"v1/productions/orders/{jsonable_encoder(order_id)}/deliverables", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + OrderDeliverablesResponse, + construct_type( + type_=OrderDeliverablesResponse, # 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 AsyncRawDeliverablesClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper + + async def list( + self, order_id: OrderId, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[OrderDeliverablesResponse]: + """ + Retrieves the delivered files for a completed order. Returns an empty list if the order is not yet completed. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[OrderDeliverablesResponse] + Successful Response + """ + _response = await self._client_wrapper.httpx_client.request( + f"v1/productions/orders/{jsonable_encoder(order_id)}/deliverables", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + OrderDeliverablesResponse, + construct_type( + type_=OrderDeliverablesResponse, # 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/productions/orders/items/__init__.py b/src/elevenlabs/productions/orders/items/__init__.py new file mode 100644 index 00000000..5cde0202 --- /dev/null +++ b/src/elevenlabs/productions/orders/items/__init__.py @@ -0,0 +1,4 @@ +# This file was auto-generated by Fern from our API Definition. + +# isort: skip_file + diff --git a/src/elevenlabs/productions/orders/items/client.py b/src/elevenlabs/productions/orders/items/client.py new file mode 100644 index 00000000..8e0c81dd --- /dev/null +++ b/src/elevenlabs/productions/orders/items/client.py @@ -0,0 +1,245 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +from ....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ....core.request_options import RequestOptions +from ....types.item_id import ItemId +from ....types.order_id import OrderId +from ....types.remove_order_item_response import RemoveOrderItemResponse +from ....types.upsert_order_item_request import UpsertOrderItemRequest +from ....types.upsert_order_item_response import UpsertOrderItemResponse +from .raw_client import AsyncRawItemsClient, RawItemsClient + +# this is used as the default value for optional parameters +OMIT = typing.cast(typing.Any, ...) + + +class ItemsClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._raw_client = RawItemsClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> RawItemsClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + RawItemsClient + """ + return self._raw_client + + def upsert( + self, + order_id: OrderId, + *, + request: UpsertOrderItemRequest, + request_options: typing.Optional[RequestOptions] = None, + ) -> UpsertOrderItemResponse: + """ + Adds or updates an order item on an open order. Returns the item ID and the quoted price. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + request : UpsertOrderItemRequest + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + UpsertOrderItemResponse + Successful Response + + Examples + -------- + from elevenlabs import ( + ElevenLabs, + RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput_Dub, + UpsertOrderItemRequest, + ) + + client = ElevenLabs( + api_key="YOUR_API_KEY", + ) + client.productions.orders.items.upsert( + order_id="order_id", + request=UpsertOrderItemRequest( + item=RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput_Dub( + media_id="prodmedia_01jgatk6h0fwxrtbjade61yqhx", + source_language="en", + destination_languages=["hi", "fr-FR", "de"], + include_captions=True, + include_source_captions=False, + instructions="Voices don't need to match the originals, prioritize native-sounding voices", + captions_sdh=False, + ), + ), + ) + """ + _response = self._raw_client.upsert(order_id, request=request, request_options=request_options) + return _response.data + + def remove( + self, order_id: OrderId, item_id: ItemId, *, request_options: typing.Optional[RequestOptions] = None + ) -> RemoveOrderItemResponse: + """ + Removes an order item from an open order. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + item_id : ItemId + The ID of the order item. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + RemoveOrderItemResponse + Successful Response + + Examples + -------- + from elevenlabs import ElevenLabs + + client = ElevenLabs( + api_key="YOUR_API_KEY", + ) + client.productions.orders.items.remove( + order_id="order_id", + item_id="item_id", + ) + """ + _response = self._raw_client.remove(order_id, item_id, request_options=request_options) + return _response.data + + +class AsyncItemsClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._raw_client = AsyncRawItemsClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> AsyncRawItemsClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + AsyncRawItemsClient + """ + return self._raw_client + + async def upsert( + self, + order_id: OrderId, + *, + request: UpsertOrderItemRequest, + request_options: typing.Optional[RequestOptions] = None, + ) -> UpsertOrderItemResponse: + """ + Adds or updates an order item on an open order. Returns the item ID and the quoted price. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + request : UpsertOrderItemRequest + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + UpsertOrderItemResponse + Successful Response + + Examples + -------- + import asyncio + + from elevenlabs import ( + AsyncElevenLabs, + RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput_Dub, + UpsertOrderItemRequest, + ) + + client = AsyncElevenLabs( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.productions.orders.items.upsert( + order_id="order_id", + request=UpsertOrderItemRequest( + item=RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput_Dub( + media_id="prodmedia_01jgatk6h0fwxrtbjade61yqhx", + source_language="en", + destination_languages=["hi", "fr-FR", "de"], + include_captions=True, + include_source_captions=False, + instructions="Voices don't need to match the originals, prioritize native-sounding voices", + captions_sdh=False, + ), + ), + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.upsert(order_id, request=request, request_options=request_options) + return _response.data + + async def remove( + self, order_id: OrderId, item_id: ItemId, *, request_options: typing.Optional[RequestOptions] = None + ) -> RemoveOrderItemResponse: + """ + Removes an order item from an open order. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + item_id : ItemId + The ID of the order item. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + RemoveOrderItemResponse + Successful Response + + Examples + -------- + import asyncio + + from elevenlabs import AsyncElevenLabs + + client = AsyncElevenLabs( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.productions.orders.items.remove( + order_id="order_id", + item_id="item_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.remove(order_id, item_id, request_options=request_options) + return _response.data diff --git a/src/elevenlabs/productions/orders/items/raw_client.py b/src/elevenlabs/productions/orders/items/raw_client.py new file mode 100644 index 00000000..f04d7150 --- /dev/null +++ b/src/elevenlabs/productions/orders/items/raw_client.py @@ -0,0 +1,267 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing +from json.decoder import JSONDecodeError + +from ....core.api_error import ApiError +from ....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ....core.http_response import AsyncHttpResponse, HttpResponse +from ....core.jsonable_encoder import jsonable_encoder +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.item_id import ItemId +from ....types.order_id import OrderId +from ....types.remove_order_item_response import RemoveOrderItemResponse +from ....types.upsert_order_item_request import UpsertOrderItemRequest +from ....types.upsert_order_item_response import UpsertOrderItemResponse + +# this is used as the default value for optional parameters +OMIT = typing.cast(typing.Any, ...) + + +class RawItemsClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._client_wrapper = client_wrapper + + def upsert( + self, + order_id: OrderId, + *, + request: UpsertOrderItemRequest, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[UpsertOrderItemResponse]: + """ + Adds or updates an order item on an open order. Returns the item ID and the quoted price. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + request : UpsertOrderItemRequest + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[UpsertOrderItemResponse] + Successful Response + """ + _response = self._client_wrapper.httpx_client.request( + f"v1/productions/orders/{jsonable_encoder(order_id)}/items", + method="POST", + json={ + "request": convert_and_respect_annotation_metadata( + object_=request, annotation=UpsertOrderItemRequest, direction="write" + ), + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + UpsertOrderItemResponse, + construct_type( + type_=UpsertOrderItemResponse, # 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 remove( + self, order_id: OrderId, item_id: ItemId, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[RemoveOrderItemResponse]: + """ + Removes an order item from an open order. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + item_id : ItemId + The ID of the order item. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[RemoveOrderItemResponse] + Successful Response + """ + _response = self._client_wrapper.httpx_client.request( + f"v1/productions/orders/{jsonable_encoder(order_id)}/items/{jsonable_encoder(item_id)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + RemoveOrderItemResponse, + construct_type( + type_=RemoveOrderItemResponse, # 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 AsyncRawItemsClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper + + async def upsert( + self, + order_id: OrderId, + *, + request: UpsertOrderItemRequest, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[UpsertOrderItemResponse]: + """ + Adds or updates an order item on an open order. Returns the item ID and the quoted price. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + request : UpsertOrderItemRequest + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[UpsertOrderItemResponse] + Successful Response + """ + _response = await self._client_wrapper.httpx_client.request( + f"v1/productions/orders/{jsonable_encoder(order_id)}/items", + method="POST", + json={ + "request": convert_and_respect_annotation_metadata( + object_=request, annotation=UpsertOrderItemRequest, direction="write" + ), + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + UpsertOrderItemResponse, + construct_type( + type_=UpsertOrderItemResponse, # 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 remove( + self, order_id: OrderId, item_id: ItemId, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[RemoveOrderItemResponse]: + """ + Removes an order item from an open order. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + item_id : ItemId + The ID of the order item. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[RemoveOrderItemResponse] + Successful Response + """ + _response = await self._client_wrapper.httpx_client.request( + f"v1/productions/orders/{jsonable_encoder(order_id)}/items/{jsonable_encoder(item_id)}", + method="DELETE", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + RemoveOrderItemResponse, + construct_type( + type_=RemoveOrderItemResponse, # 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/productions/orders/languages/__init__.py b/src/elevenlabs/productions/orders/languages/__init__.py new file mode 100644 index 00000000..5cde0202 --- /dev/null +++ b/src/elevenlabs/productions/orders/languages/__init__.py @@ -0,0 +1,4 @@ +# This file was auto-generated by Fern from our API Definition. + +# isort: skip_file + diff --git a/src/elevenlabs/productions/orders/languages/client.py b/src/elevenlabs/productions/orders/languages/client.py new file mode 100644 index 00000000..f5b5d696 --- /dev/null +++ b/src/elevenlabs/productions/orders/languages/client.py @@ -0,0 +1,117 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +from ....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ....core.request_options import RequestOptions +from ....types.order_item_kind import OrderItemKind +from ....types.root_model_annotated_union_paired_languages_response_single_languages_response_field_info_annotation_none_type_required_true_discriminator_kind import ( + RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind, +) +from .raw_client import AsyncRawLanguagesClient, RawLanguagesClient + + +class LanguagesClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._raw_client = RawLanguagesClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> RawLanguagesClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + RawLanguagesClient + """ + return self._raw_client + + def list( + self, order_item_kind: OrderItemKind, *, request_options: typing.Optional[RequestOptions] = None + ) -> RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind: + """ + Returns the available languages for a given order item kind. + + Parameters + ---------- + order_item_kind : OrderItemKind + The kind of order item. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind + Successful Response + + Examples + -------- + from elevenlabs import ElevenLabs + + client = ElevenLabs( + api_key="YOUR_API_KEY", + ) + client.productions.orders.languages.list( + order_item_kind="dub", + ) + """ + _response = self._raw_client.list(order_item_kind, request_options=request_options) + return _response.data + + +class AsyncLanguagesClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._raw_client = AsyncRawLanguagesClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> AsyncRawLanguagesClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + AsyncRawLanguagesClient + """ + return self._raw_client + + async def list( + self, order_item_kind: OrderItemKind, *, request_options: typing.Optional[RequestOptions] = None + ) -> RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind: + """ + Returns the available languages for a given order item kind. + + Parameters + ---------- + order_item_kind : OrderItemKind + The kind of order item. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind + Successful Response + + Examples + -------- + import asyncio + + from elevenlabs import AsyncElevenLabs + + client = AsyncElevenLabs( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.productions.orders.languages.list( + order_item_kind="dub", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.list(order_item_kind, request_options=request_options) + return _response.data diff --git a/src/elevenlabs/productions/orders/languages/raw_client.py b/src/elevenlabs/productions/orders/languages/raw_client.py new file mode 100644 index 00000000..adcbf109 --- /dev/null +++ b/src/elevenlabs/productions/orders/languages/raw_client.py @@ -0,0 +1,130 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing +from json.decoder import JSONDecodeError + +from ....core.api_error import ApiError +from ....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ....core.http_response import AsyncHttpResponse, HttpResponse +from ....core.jsonable_encoder import jsonable_encoder +from ....core.request_options import RequestOptions +from ....core.unchecked_base_model import construct_type +from ....errors.unprocessable_entity_error import UnprocessableEntityError +from ....types.order_item_kind import OrderItemKind +from ....types.root_model_annotated_union_paired_languages_response_single_languages_response_field_info_annotation_none_type_required_true_discriminator_kind import ( + RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind, +) + + +class RawLanguagesClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._client_wrapper = client_wrapper + + def list( + self, order_item_kind: OrderItemKind, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[ + RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind + ]: + """ + Returns the available languages for a given order item kind. + + Parameters + ---------- + order_item_kind : OrderItemKind + The kind of order item. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind] + Successful Response + """ + _response = self._client_wrapper.httpx_client.request( + f"v1/productions/orders/languages/{jsonable_encoder(order_item_kind)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind, + construct_type( + type_=RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind, # 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 AsyncRawLanguagesClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper + + async def list( + self, order_item_kind: OrderItemKind, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[ + RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind + ]: + """ + Returns the available languages for a given order item kind. + + Parameters + ---------- + order_item_kind : OrderItemKind + The kind of order item. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind] + Successful Response + """ + _response = await self._client_wrapper.httpx_client.request( + f"v1/productions/orders/languages/{jsonable_encoder(order_item_kind)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind, + construct_type( + type_=RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind, # 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/productions/orders/media/__init__.py b/src/elevenlabs/productions/orders/media/__init__.py new file mode 100644 index 00000000..5cde0202 --- /dev/null +++ b/src/elevenlabs/productions/orders/media/__init__.py @@ -0,0 +1,4 @@ +# This file was auto-generated by Fern from our API Definition. + +# isort: skip_file + diff --git a/src/elevenlabs/productions/orders/media/client.py b/src/elevenlabs/productions/orders/media/client.py new file mode 100644 index 00000000..26655821 --- /dev/null +++ b/src/elevenlabs/productions/orders/media/client.py @@ -0,0 +1,267 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +from .... import core +from ....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ....core.request_options import RequestOptions +from ....types.media_id import MediaId +from ....types.order_id import OrderId +from ....types.order_media_response import OrderMediaResponse +from ....types.register_media_response import RegisterMediaResponse +from .raw_client import AsyncRawMediaClient, RawMediaClient + +# this is used as the default value for optional parameters +OMIT = typing.cast(typing.Any, ...) + + +class MediaClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._raw_client = RawMediaClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> RawMediaClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + RawMediaClient + """ + return self._raw_client + + def register( + self, + order_id: OrderId, + *, + declared_language: str, + media: typing.Optional[core.File] = OMIT, + media_url: typing.Optional[str] = OMIT, + media_url_filename: typing.Optional[str] = OMIT, + media_url_content_type: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> RegisterMediaResponse: + """ + Registers a media file with an order, either by uploading it directly or by providing a URL to fetch it from. Exactly one of `media` or `media_url` must be provided. The registered media can then be referenced when adding order items. + + Parameters + ---------- + order_id : OrderId + The ID of the order to which this media will be attached. + + declared_language : str + The language code of the media content (e.g. 'en', 'es-ES'). Must be a supported source language for some order item kind. + + media : typing.Optional[core.File] + See core.File for more documentation + + media_url : typing.Optional[str] + A URL to fetch the media file from. Mutually exclusive with media. + + media_url_filename : typing.Optional[str] + The filename for URL-sourced media (e.g. 'example.mp4'). Required when using media_url. + + media_url_content_type : typing.Optional[str] + The MIME type for URL-sourced media (e.g. 'video/mp4'). Required when using media_url. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + RegisterMediaResponse + Successful Response + + Examples + -------- + from elevenlabs import ElevenLabs + + client = ElevenLabs( + api_key="YOUR_API_KEY", + ) + client.productions.orders.media.register( + order_id="order_id", + declared_language="declared_language", + ) + """ + _response = self._raw_client.register( + order_id, + declared_language=declared_language, + media=media, + media_url=media_url, + media_url_filename=media_url_filename, + media_url_content_type=media_url_content_type, + request_options=request_options, + ) + return _response.data + + def get( + self, order_id: OrderId, media_id: MediaId, *, request_options: typing.Optional[RequestOptions] = None + ) -> OrderMediaResponse: + """ + Retrieves metadata and a time-limited download URL for a previously uploaded media file. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + media_id : MediaId + The ID of the media file. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + OrderMediaResponse + Successful Response + + Examples + -------- + from elevenlabs import ElevenLabs + + client = ElevenLabs( + api_key="YOUR_API_KEY", + ) + client.productions.orders.media.get( + order_id="order_id", + media_id="media_id", + ) + """ + _response = self._raw_client.get(order_id, media_id, request_options=request_options) + return _response.data + + +class AsyncMediaClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._raw_client = AsyncRawMediaClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> AsyncRawMediaClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + AsyncRawMediaClient + """ + return self._raw_client + + async def register( + self, + order_id: OrderId, + *, + declared_language: str, + media: typing.Optional[core.File] = OMIT, + media_url: typing.Optional[str] = OMIT, + media_url_filename: typing.Optional[str] = OMIT, + media_url_content_type: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> RegisterMediaResponse: + """ + Registers a media file with an order, either by uploading it directly or by providing a URL to fetch it from. Exactly one of `media` or `media_url` must be provided. The registered media can then be referenced when adding order items. + + Parameters + ---------- + order_id : OrderId + The ID of the order to which this media will be attached. + + declared_language : str + The language code of the media content (e.g. 'en', 'es-ES'). Must be a supported source language for some order item kind. + + media : typing.Optional[core.File] + See core.File for more documentation + + media_url : typing.Optional[str] + A URL to fetch the media file from. Mutually exclusive with media. + + media_url_filename : typing.Optional[str] + The filename for URL-sourced media (e.g. 'example.mp4'). Required when using media_url. + + media_url_content_type : typing.Optional[str] + The MIME type for URL-sourced media (e.g. 'video/mp4'). Required when using media_url. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + RegisterMediaResponse + Successful Response + + Examples + -------- + import asyncio + + from elevenlabs import AsyncElevenLabs + + client = AsyncElevenLabs( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.productions.orders.media.register( + order_id="order_id", + declared_language="declared_language", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.register( + order_id, + declared_language=declared_language, + media=media, + media_url=media_url, + media_url_filename=media_url_filename, + media_url_content_type=media_url_content_type, + request_options=request_options, + ) + return _response.data + + async def get( + self, order_id: OrderId, media_id: MediaId, *, request_options: typing.Optional[RequestOptions] = None + ) -> OrderMediaResponse: + """ + Retrieves metadata and a time-limited download URL for a previously uploaded media file. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + media_id : MediaId + The ID of the media file. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + OrderMediaResponse + Successful Response + + Examples + -------- + import asyncio + + from elevenlabs import AsyncElevenLabs + + client = AsyncElevenLabs( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.productions.orders.media.get( + order_id="order_id", + media_id="media_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.get(order_id, media_id, request_options=request_options) + return _response.data diff --git a/src/elevenlabs/productions/orders/media/raw_client.py b/src/elevenlabs/productions/orders/media/raw_client.py new file mode 100644 index 00000000..a36170ae --- /dev/null +++ b/src/elevenlabs/productions/orders/media/raw_client.py @@ -0,0 +1,304 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing +from json.decoder import JSONDecodeError + +from .... import core +from ....core.api_error import ApiError +from ....core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ....core.http_response import AsyncHttpResponse, HttpResponse +from ....core.jsonable_encoder import jsonable_encoder +from ....core.request_options import RequestOptions +from ....core.unchecked_base_model import construct_type +from ....errors.unprocessable_entity_error import UnprocessableEntityError +from ....types.media_id import MediaId +from ....types.order_id import OrderId +from ....types.order_media_response import OrderMediaResponse +from ....types.register_media_response import RegisterMediaResponse + +# this is used as the default value for optional parameters +OMIT = typing.cast(typing.Any, ...) + + +class RawMediaClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._client_wrapper = client_wrapper + + def register( + self, + order_id: OrderId, + *, + declared_language: str, + media: typing.Optional[core.File] = OMIT, + media_url: typing.Optional[str] = OMIT, + media_url_filename: typing.Optional[str] = OMIT, + media_url_content_type: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[RegisterMediaResponse]: + """ + Registers a media file with an order, either by uploading it directly or by providing a URL to fetch it from. Exactly one of `media` or `media_url` must be provided. The registered media can then be referenced when adding order items. + + Parameters + ---------- + order_id : OrderId + The ID of the order to which this media will be attached. + + declared_language : str + The language code of the media content (e.g. 'en', 'es-ES'). Must be a supported source language for some order item kind. + + media : typing.Optional[core.File] + See core.File for more documentation + + media_url : typing.Optional[str] + A URL to fetch the media file from. Mutually exclusive with media. + + media_url_filename : typing.Optional[str] + The filename for URL-sourced media (e.g. 'example.mp4'). Required when using media_url. + + media_url_content_type : typing.Optional[str] + The MIME type for URL-sourced media (e.g. 'video/mp4'). Required when using media_url. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[RegisterMediaResponse] + Successful Response + """ + _response = self._client_wrapper.httpx_client.request( + f"v1/productions/orders/{jsonable_encoder(order_id)}/media", + method="POST", + data={ + "declared_language": declared_language, + "media_url": media_url, + "media_url_filename": media_url_filename, + "media_url_content_type": media_url_content_type, + }, + files={ + **({"media": media} if media is not None else {}), + }, + request_options=request_options, + omit=OMIT, + force_multipart=True, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + RegisterMediaResponse, + construct_type( + type_=RegisterMediaResponse, # 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 get( + self, order_id: OrderId, media_id: MediaId, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[OrderMediaResponse]: + """ + Retrieves metadata and a time-limited download URL for a previously uploaded media file. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + media_id : MediaId + The ID of the media file. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[OrderMediaResponse] + Successful Response + """ + _response = self._client_wrapper.httpx_client.request( + f"v1/productions/orders/{jsonable_encoder(order_id)}/media/{jsonable_encoder(media_id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + OrderMediaResponse, + construct_type( + type_=OrderMediaResponse, # 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 AsyncRawMediaClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper + + async def register( + self, + order_id: OrderId, + *, + declared_language: str, + media: typing.Optional[core.File] = OMIT, + media_url: typing.Optional[str] = OMIT, + media_url_filename: typing.Optional[str] = OMIT, + media_url_content_type: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[RegisterMediaResponse]: + """ + Registers a media file with an order, either by uploading it directly or by providing a URL to fetch it from. Exactly one of `media` or `media_url` must be provided. The registered media can then be referenced when adding order items. + + Parameters + ---------- + order_id : OrderId + The ID of the order to which this media will be attached. + + declared_language : str + The language code of the media content (e.g. 'en', 'es-ES'). Must be a supported source language for some order item kind. + + media : typing.Optional[core.File] + See core.File for more documentation + + media_url : typing.Optional[str] + A URL to fetch the media file from. Mutually exclusive with media. + + media_url_filename : typing.Optional[str] + The filename for URL-sourced media (e.g. 'example.mp4'). Required when using media_url. + + media_url_content_type : typing.Optional[str] + The MIME type for URL-sourced media (e.g. 'video/mp4'). Required when using media_url. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[RegisterMediaResponse] + Successful Response + """ + _response = await self._client_wrapper.httpx_client.request( + f"v1/productions/orders/{jsonable_encoder(order_id)}/media", + method="POST", + data={ + "declared_language": declared_language, + "media_url": media_url, + "media_url_filename": media_url_filename, + "media_url_content_type": media_url_content_type, + }, + files={ + **({"media": media} if media is not None else {}), + }, + request_options=request_options, + omit=OMIT, + force_multipart=True, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + RegisterMediaResponse, + construct_type( + type_=RegisterMediaResponse, # 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 get( + self, order_id: OrderId, media_id: MediaId, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[OrderMediaResponse]: + """ + Retrieves metadata and a time-limited download URL for a previously uploaded media file. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + media_id : MediaId + The ID of the media file. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[OrderMediaResponse] + Successful Response + """ + _response = await self._client_wrapper.httpx_client.request( + f"v1/productions/orders/{jsonable_encoder(order_id)}/media/{jsonable_encoder(media_id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + OrderMediaResponse, + construct_type( + type_=OrderMediaResponse, # 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/productions/orders/raw_client.py b/src/elevenlabs/productions/orders/raw_client.py new file mode 100644 index 00000000..7b148c7f --- /dev/null +++ b/src/elevenlabs/productions/orders/raw_client.py @@ -0,0 +1,610 @@ +# This file was auto-generated by Fern from our API Definition. + +import datetime as dt +import typing +from json.decoder import JSONDecodeError + +from ...core.api_error import ApiError +from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ...core.datetime_utils import serialize_datetime +from ...core.http_response import AsyncHttpResponse, HttpResponse +from ...core.jsonable_encoder import jsonable_encoder +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.create_order_response import CreateOrderResponse +from ...types.list_orders_response import ListOrdersResponse +from ...types.order_id import OrderId +from ...types.order_request_state import OrderRequestState +from ...types.order_response import OrderResponse +from ...types.submit_order_response import SubmitOrderResponse +from ...types.update_order_request import UpdateOrderRequest +from ...types.update_order_response import UpdateOrderResponse + +# this is used as the default value for optional parameters +OMIT = typing.cast(typing.Any, ...) + + +class RawOrdersClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._client_wrapper = client_wrapper + + def list( + self, + *, + page_size: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + status: typing.Optional[typing.Union[OrderRequestState, typing.Sequence[OrderRequestState]]] = None, + start_date: typing.Optional[dt.datetime] = None, + end_date: typing.Optional[dt.datetime] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[ListOrdersResponse]: + """ + Lists Productions orders in the workspace. Supports filtering by status and date range, with pagination. + + Parameters + ---------- + page_size : typing.Optional[int] + Maximum number of orders to return per page. + + offset : typing.Optional[int] + Number of orders to skip for pagination. + + status : typing.Optional[typing.Union[OrderRequestState, typing.Sequence[OrderRequestState]]] + Filter orders by one or more statuses. + + start_date : typing.Optional[dt.datetime] + Filter orders created on or after this date. + + end_date : typing.Optional[dt.datetime] + Filter orders created on or before this date. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[ListOrdersResponse] + Successful Response + """ + _response = self._client_wrapper.httpx_client.request( + "v1/productions/orders", + method="GET", + params={ + "page_size": page_size, + "offset": offset, + "status": status, + "start_date": serialize_datetime(start_date) if start_date is not None else None, + "end_date": serialize_datetime(end_date) if end_date is not None else None, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListOrdersResponse, + construct_type( + type_=ListOrdersResponse, # 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 create(self, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[CreateOrderResponse]: + """ + Creates a new Productions order in the workspace. The order starts in the open state and can be configured with items before submission. + + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[CreateOrderResponse] + Successful Response + """ + _response = self._client_wrapper.httpx_client.request( + "v1/productions/orders", + method="POST", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + CreateOrderResponse, + construct_type( + type_=CreateOrderResponse, # 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 get( + self, order_id: OrderId, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[OrderResponse]: + """ + Retrieves full details for a Productions order. + + Quote and pricing information may not be available immediately; if you wish to see the quote before submission, you may need to poll the order details until it is ready. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[OrderResponse] + Successful Response + """ + _response = self._client_wrapper.httpx_client.request( + f"v1/productions/orders/{jsonable_encoder(order_id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + OrderResponse, + construct_type( + type_=OrderResponse, # 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, order_id: OrderId, *, request: UpdateOrderRequest, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[UpdateOrderResponse]: + """ + Updates an open order. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + request : UpdateOrderRequest + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[UpdateOrderResponse] + Successful Response + """ + _response = self._client_wrapper.httpx_client.request( + f"v1/productions/orders/{jsonable_encoder(order_id)}", + method="PATCH", + json={ + "request": convert_and_respect_annotation_metadata( + object_=request, annotation=UpdateOrderRequest, direction="write" + ), + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + UpdateOrderResponse, + construct_type( + type_=UpdateOrderResponse, # 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 submit( + self, order_id: OrderId, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[SubmitOrderResponse]: + """ + Submits an open order for processing. The order must have at least one item. Once submitted, items can no longer be modified. + + Upon submission, the workspace will be charged for the order. The quote is based on information extracted from the uploaded media, such as its duration. The quote may not be available immediately; if you wish to see the quote before submission, you may need to poll the order details until the quote is ready. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[SubmitOrderResponse] + Successful Response + """ + _response = self._client_wrapper.httpx_client.request( + f"v1/productions/orders/{jsonable_encoder(order_id)}/submit", + method="POST", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + SubmitOrderResponse, + construct_type( + type_=SubmitOrderResponse, # 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 AsyncRawOrdersClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper + + async def list( + self, + *, + page_size: typing.Optional[int] = None, + offset: typing.Optional[int] = None, + status: typing.Optional[typing.Union[OrderRequestState, typing.Sequence[OrderRequestState]]] = None, + start_date: typing.Optional[dt.datetime] = None, + end_date: typing.Optional[dt.datetime] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[ListOrdersResponse]: + """ + Lists Productions orders in the workspace. Supports filtering by status and date range, with pagination. + + Parameters + ---------- + page_size : typing.Optional[int] + Maximum number of orders to return per page. + + offset : typing.Optional[int] + Number of orders to skip for pagination. + + status : typing.Optional[typing.Union[OrderRequestState, typing.Sequence[OrderRequestState]]] + Filter orders by one or more statuses. + + start_date : typing.Optional[dt.datetime] + Filter orders created on or after this date. + + end_date : typing.Optional[dt.datetime] + Filter orders created on or before this date. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[ListOrdersResponse] + Successful Response + """ + _response = await self._client_wrapper.httpx_client.request( + "v1/productions/orders", + method="GET", + params={ + "page_size": page_size, + "offset": offset, + "status": status, + "start_date": serialize_datetime(start_date) if start_date is not None else None, + "end_date": serialize_datetime(end_date) if end_date is not None else None, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListOrdersResponse, + construct_type( + type_=ListOrdersResponse, # 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 create( + self, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[CreateOrderResponse]: + """ + Creates a new Productions order in the workspace. The order starts in the open state and can be configured with items before submission. + + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[CreateOrderResponse] + Successful Response + """ + _response = await self._client_wrapper.httpx_client.request( + "v1/productions/orders", + method="POST", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + CreateOrderResponse, + construct_type( + type_=CreateOrderResponse, # 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 get( + self, order_id: OrderId, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[OrderResponse]: + """ + Retrieves full details for a Productions order. + + Quote and pricing information may not be available immediately; if you wish to see the quote before submission, you may need to poll the order details until it is ready. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[OrderResponse] + Successful Response + """ + _response = await self._client_wrapper.httpx_client.request( + f"v1/productions/orders/{jsonable_encoder(order_id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + OrderResponse, + construct_type( + type_=OrderResponse, # 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, order_id: OrderId, *, request: UpdateOrderRequest, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[UpdateOrderResponse]: + """ + Updates an open order. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + request : UpdateOrderRequest + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[UpdateOrderResponse] + Successful Response + """ + _response = await self._client_wrapper.httpx_client.request( + f"v1/productions/orders/{jsonable_encoder(order_id)}", + method="PATCH", + json={ + "request": convert_and_respect_annotation_metadata( + object_=request, annotation=UpdateOrderRequest, direction="write" + ), + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + UpdateOrderResponse, + construct_type( + type_=UpdateOrderResponse, # 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 submit( + self, order_id: OrderId, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[SubmitOrderResponse]: + """ + Submits an open order for processing. The order must have at least one item. Once submitted, items can no longer be modified. + + Upon submission, the workspace will be charged for the order. The quote is based on information extracted from the uploaded media, such as its duration. The quote may not be available immediately; if you wish to see the quote before submission, you may need to poll the order details until the quote is ready. + + Parameters + ---------- + order_id : OrderId + The ID of the order. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[SubmitOrderResponse] + Successful Response + """ + _response = await self._client_wrapper.httpx_client.request( + f"v1/productions/orders/{jsonable_encoder(order_id)}/submit", + method="POST", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + SubmitOrderResponse, + construct_type( + type_=SubmitOrderResponse, # 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/productions/raw_client.py b/src/elevenlabs/productions/raw_client.py new file mode 100644 index 00000000..d2aa8c8e --- /dev/null +++ b/src/elevenlabs/productions/raw_client.py @@ -0,0 +1,13 @@ +# This file was auto-generated by Fern from our API Definition. + +from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper + + +class RawProductionsClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._client_wrapper = client_wrapper + + +class AsyncRawProductionsClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper diff --git a/src/elevenlabs/speech_engine/client.py b/src/elevenlabs/speech_engine/client.py index 3ca9d9ea..f6870885 100644 --- a/src/elevenlabs/speech_engine/client.py +++ b/src/elevenlabs/speech_engine/client.py @@ -9,7 +9,6 @@ from ..types.asr_conversational_config import AsrConversationalConfig from ..types.base_turn_config import BaseTurnConfig from ..types.conversation_config_input import ConversationConfigInput -from ..types.create_speech_engine_response import CreateSpeechEngineResponse from ..types.list_speech_engines_response import ListSpeechEnginesResponse from ..types.privacy_config_input import PrivacyConfigInput from ..types.sort_direction import SortDirection @@ -114,7 +113,7 @@ def create( language: typing.Optional[str] = OMIT, tags: typing.Optional[typing.Sequence[str]] = OMIT, request_options: typing.Optional[RequestOptions] = None, - ) -> CreateSpeechEngineResponse: + ) -> SpeechEngineResponse: """ Create a new Speech Engine resource @@ -155,7 +154,7 @@ def create( Returns ------- - CreateSpeechEngineResponse + SpeechEngineResponse Successful Response Examples @@ -429,7 +428,7 @@ async def create( language: typing.Optional[str] = OMIT, tags: typing.Optional[typing.Sequence[str]] = OMIT, request_options: typing.Optional[RequestOptions] = None, - ) -> CreateSpeechEngineResponse: + ) -> SpeechEngineResponse: """ Create a new Speech Engine resource @@ -470,7 +469,7 @@ async def create( Returns ------- - CreateSpeechEngineResponse + SpeechEngineResponse Successful Response Examples diff --git a/src/elevenlabs/speech_engine/raw_client.py b/src/elevenlabs/speech_engine/raw_client.py index d0767c0f..e7784e76 100644 --- a/src/elevenlabs/speech_engine/raw_client.py +++ b/src/elevenlabs/speech_engine/raw_client.py @@ -16,7 +16,6 @@ from ..types.asr_conversational_config import AsrConversationalConfig from ..types.base_turn_config import BaseTurnConfig from ..types.conversation_config_input import ConversationConfigInput -from ..types.create_speech_engine_response import CreateSpeechEngineResponse from ..types.list_speech_engines_response import ListSpeechEnginesResponse from ..types.privacy_config_input import PrivacyConfigInput from ..types.sort_direction import SortDirection @@ -122,7 +121,7 @@ def create( language: typing.Optional[str] = OMIT, tags: typing.Optional[typing.Sequence[str]] = OMIT, request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[CreateSpeechEngineResponse]: + ) -> HttpResponse[SpeechEngineResponse]: """ Create a new Speech Engine resource @@ -163,7 +162,7 @@ def create( Returns ------- - HttpResponse[CreateSpeechEngineResponse] + HttpResponse[SpeechEngineResponse] Successful Response """ _response = self._client_wrapper.httpx_client.request( @@ -204,9 +203,9 @@ def create( try: if 200 <= _response.status_code < 300: _data = typing.cast( - CreateSpeechEngineResponse, + SpeechEngineResponse, construct_type( - type_=CreateSpeechEngineResponse, # type: ignore + type_=SpeechEngineResponse, # type: ignore object_=_response.json(), ), ) @@ -527,7 +526,7 @@ async def create( language: typing.Optional[str] = OMIT, tags: typing.Optional[typing.Sequence[str]] = OMIT, request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[CreateSpeechEngineResponse]: + ) -> AsyncHttpResponse[SpeechEngineResponse]: """ Create a new Speech Engine resource @@ -568,7 +567,7 @@ async def create( Returns ------- - AsyncHttpResponse[CreateSpeechEngineResponse] + AsyncHttpResponse[SpeechEngineResponse] Successful Response """ _response = await self._client_wrapper.httpx_client.request( @@ -609,9 +608,9 @@ async def create( try: if 200 <= _response.status_code < 300: _data = typing.cast( - CreateSpeechEngineResponse, + SpeechEngineResponse, construct_type( - type_=CreateSpeechEngineResponse, # type: ignore + type_=SpeechEngineResponse, # type: ignore object_=_response.json(), ), ) diff --git a/src/elevenlabs/types/__init__.py b/src/elevenlabs/types/__init__.py index ab36392a..c2afe8f4 100644 --- a/src/elevenlabs/types/__init__.py +++ b/src/elevenlabs/types/__init__.py @@ -27,6 +27,7 @@ from .age import Age from .agent_alerting_monitor_config import AgentAlertingMonitorConfig from .agent_alerting_settings import AgentAlertingSettings + from .agent_alerting_webhook_notifier import AgentAlertingWebhookNotifier from .agent_branch_basic_info import AgentBranchBasicInfo from .agent_branch_response import AgentBranchResponse from .agent_branch_summary import AgentBranchSummary @@ -90,7 +91,6 @@ from .analysis_property_constant_value import AnalysisPropertyConstantValue from .analysis_property_type import AnalysisPropertyType from .analysis_scope import AnalysisScope - from .api_integration_doc_response import ApiIntegrationDocResponse from .api_integration_o_auth_2_auth_code_response import ApiIntegrationOAuth2AuthCodeResponse from .api_integration_o_auth_2_auth_code_response_scope_separator import ( ApiIntegrationOAuth2AuthCodeResponseScopeSeparator, @@ -118,6 +118,8 @@ from .array_json_schema_property_output_constant_value_item import ArrayJsonSchemaPropertyOutputConstantValueItem from .array_json_schema_property_output_items import ArrayJsonSchemaPropertyOutputItems from .asr_conversational_config import AsrConversationalConfig + from .asr_conversational_config_override import AsrConversationalConfigOverride + from .asr_conversational_config_override_config import AsrConversationalConfigOverrideConfig from .asr_conversational_config_workflow_override import AsrConversationalConfigWorkflowOverride from .asr_input_format import AsrInputFormat from .asr_provider import AsrProvider @@ -580,6 +582,7 @@ from .create_o_auth_2_jwt_request import CreateOAuth2JwtRequest from .create_o_auth_2_jwt_request_algorithm import CreateOAuth2JwtRequestAlgorithm from .create_o_auth_2_jwt_request_token_response_field import CreateOAuth2JwtRequestTokenResponseField + from .create_order_response import CreateOrderResponse from .create_phone_number_response_model import CreatePhoneNumberResponseModel from .create_previously_generated_voice_request import CreatePreviouslyGeneratedVoiceRequest from .create_private_key_jwt_request import CreatePrivateKeyJwtRequest @@ -591,12 +594,12 @@ from .create_service_params import CreateServiceParams from .create_simulation_test_request import CreateSimulationTestRequest from .create_sip_trunk_phone_number_request import CreateSipTrunkPhoneNumberRequest - from .create_speech_engine_response import CreateSpeechEngineResponse from .create_staff_params import CreateStaffParams from .create_string_environment_variable_request import CreateStringEnvironmentVariableRequest from .create_tool_call_unit_test_request import CreateToolCallUnitTestRequest from .create_transcript_request import CreateTranscriptRequest from .create_twilio_phone_number_request import CreateTwilioPhoneNumberRequest + from .cue_options_request import CueOptionsRequest from .currency import Currency from .custom_guardrail_config import CustomGuardrailConfig from .custom_guardrail_config_trigger_action import ( @@ -644,6 +647,7 @@ from .delete_workspace_group_member_response_model import DeleteWorkspaceGroupMemberResponseModel from .delete_workspace_invite_response_model import DeleteWorkspaceInviteResponseModel from .delete_workspace_webhook_response_model import DeleteWorkspaceWebhookResponseModel + from .deliverable_info import DeliverableInfo from .dependent_available_agent_identifier import DependentAvailableAgentIdentifier from .dependent_available_agent_identifier_access_level import DependentAvailableAgentIdentifierAccessLevel from .dependent_available_mcp_server_identifier import DependentAvailableMcpServerIdentifier @@ -672,6 +676,7 @@ from .document_usage_mode_enum import DocumentUsageModeEnum from .docx_export_options import DocxExportOptions from .dtmf_input_config import DtmfInputConfig + from .dub_order_item_request import DubOrderItemRequest from .dubbed_segment import DubbedSegment from .dubbing_media_metadata import DubbingMediaMetadata from .dubbing_media_reference import DubbingMediaReference @@ -923,6 +928,7 @@ from .invoice_response import InvoiceResponse from .invoice_response_model_payment_intent_status import InvoiceResponseModelPaymentIntentStatus from .invoice_response_model_payment_intent_statusses_item import InvoiceResponseModelPaymentIntentStatussesItem + from .item_id import ItemId from .keep_context_alive import KeepContextAlive from .knowledge_base_content_search_response_model import KnowledgeBaseContentSearchResponseModel from .knowledge_base_content_search_result import KnowledgeBaseContentSearchResult @@ -959,6 +965,8 @@ from .language_added_response import LanguageAddedResponse from .language_detection_tool_config import LanguageDetectionToolConfig from .language_detection_tool_result_model import LanguageDetectionToolResultModel + from .language_info import LanguageInfo + from .language_pair_info import LanguagePairInfo from .language_preset_input import LanguagePresetInput from .language_preset_output import LanguagePresetOutput from .language_preset_translation import LanguagePresetTranslation @@ -991,9 +999,9 @@ from .list_holidays_params import ListHolidaysParams from .list_locations_params import ListLocationsParams from .list_mcp_tools_response_model import ListMcpToolsResponseModel + from .list_orders_response import ListOrdersResponse from .list_products_params import ListProductsParams from .list_response_agent_branch_summary import ListResponseAgentBranchSummary - from .list_response_api_integration_doc_response import ListResponseApiIntegrationDocResponse from .list_response_meta import ListResponseMeta from .list_services_params import ListServicesParams from .list_speech_engines_response import ListSpeechEnginesResponse @@ -1064,6 +1072,7 @@ McpToolConfigOverrideOutputInputOverridesValue_DynamicVariable, McpToolConfigOverrideOutputInputOverridesValue_Llm, ) + from .media_id import MediaId from .memory_entry_search_result import MemoryEntrySearchResult from .memory_entry_search_result_source import MemoryEntrySearchResultSource from .message_search_sort_by import MessageSearchSortBy @@ -1100,10 +1109,20 @@ from .object_json_schema_property_output_properties_value import ObjectJsonSchemaPropertyOutputPropertiesValue from .orb_avatar import OrbAvatar from .orchestrator_tool_mock_behavior_config import OrchestratorToolMockBehaviorConfig + from .order_deliverables_response import OrderDeliverablesResponse + from .order_id import OrderId + from .order_item_info import OrderItemInfo + from .order_item_kind import OrderItemKind + from .order_media_response import OrderMediaResponse + from .order_request_state import OrderRequestState + from .order_response import OrderResponse + from .order_state import OrderState + from .order_summary import OrderSummary from .outbound_call_recipient import OutboundCallRecipient from .outbound_call_recipient_response_model import OutboundCallRecipientResponseModel from .outbound_sip_trunk_config_request_model import OutboundSipTrunkConfigRequestModel from .output_format import OutputFormat + from .paired_languages_response import PairedLanguagesResponse from .partial_transcript_payload import PartialTranscriptPayload from .patch_workspace_webhook_response_model import PatchWorkspaceWebhookResponseModel from .pdf_export_options import PdfExportOptions @@ -1283,6 +1302,7 @@ from .pydantic_pronunciation_dictionary_version_locator import PydanticPronunciationDictionaryVersionLocator from .quality_preset_type import QualityPresetType from .query_params_json_schema import QueryParamsJsonSchema + from .quote_info import QuoteInfo from .rag_chunk_metadata import RagChunkMetadata from .rag_config import RagConfig from .rag_config_workflow_override import RagConfigWorkflowOverride @@ -1307,7 +1327,9 @@ from .region_config_request import RegionConfigRequest from .regional_processing_surcharge_info import RegionalProcessingSurchargeInfo from .register_for_group_session_params import RegisterForGroupSessionParams + from .register_media_response import RegisterMediaResponse from .remove_member_from_group_request import RemoveMemberFromGroupRequest + from .remove_order_item_response import RemoveOrderItemResponse from .render import Render from .render_status import RenderStatus from .render_type import RenderType @@ -1330,6 +1352,32 @@ from .review_response_model_reject_reasons_item import ReviewResponseModelRejectReasonsItem from .review_response_model_review_status import ReviewResponseModelReviewStatus from .review_status import ReviewStatus + from .root_model_annotated_union_dub_order_item_request_subtitle_order_item_request_field_info_annotation_none_type_required_true_discriminator_kind_input import ( + RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput, + RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput_Dub, + RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput_Subtitles, + ) + from .root_model_annotated_union_dub_order_item_request_subtitle_order_item_request_field_info_annotation_none_type_required_true_discriminator_kind_output import ( + RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindOutput, + RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindOutput_Dub, + RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindOutput_Subtitles, + ) + from .root_model_annotated_union_paired_languages_response_single_languages_response_field_info_annotation_none_type_required_true_discriminator_kind import ( + RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind, + RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind_Pair, + RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind_Single, + ) + from .rtt_audio_payload import RttAudioPayload + from .rtt_end_of_stream_payload import RttEndOfStreamPayload + from .rtt_error_payload import RttErrorPayload + from .rtt_final_transcript_payload import RttFinalTranscriptPayload + from .rtt_input_audio_chunk_payload import RttInputAudioChunkPayload + from .rtt_input_format_enum import RttInputFormatEnum + from .rtt_output_format_enum import RttOutputFormatEnum + from .rtt_partial_transcript_payload import RttPartialTranscriptPayload + from .rtt_session_started_payload import RttSessionStartedPayload + from .rtt_status_payload import RttStatusPayload + from .rtt_translation_payload import RttTranslationPayload from .safety_common_model import SafetyCommonModel from .safety_evaluation import SafetyEvaluation from .safety_response_model import SafetyResponseModel @@ -1385,6 +1433,7 @@ from .similar_voices_for_speaker_response import SimilarVoicesForSpeakerResponse from .simulation_test_model import SimulationTestModel from .simulation_tool_mock_behavior_config import SimulationToolMockBehaviorConfig + from .single_languages_response import SingleLanguagesResponse from .single_test_run_request_model import SingleTestRunRequestModel from .single_use_token_response_model import SingleUseTokenResponseModel from .single_use_token_type import SingleUseTokenType @@ -1419,6 +1468,9 @@ from .speaker_updated_response import SpeakerUpdatedResponse from .speech_engine_config import SpeechEngineConfig from .speech_engine_config_request_headers_value import SpeechEngineConfigRequestHeadersValue + from .speech_engine_conversation_initiation_client_data_config import ( + SpeechEngineConversationInitiationClientDataConfig, + ) from .speech_engine_response import SpeechEngineResponse from .speech_engine_summary_response import SpeechEngineSummaryResponse from .speech_history_item_response import SpeechHistoryItemResponse @@ -1444,10 +1496,12 @@ from .studio_clip_reference_clip_type import StudioClipReferenceClipType from .studio_text_style_outline_model import StudioTextStyleOutlineModel from .studio_text_style_shadow_model import StudioTextStyleShadowModel + from .submit_order_response import SubmitOrderResponse from .subscription import Subscription from .subscription_response import SubscriptionResponse from .subscription_response_model_max_credit_limit_extension import SubscriptionResponseModelMaxCreditLimitExtension from .subscription_status_type import SubscriptionStatusType + from .subtitle_order_item_request import SubtitleOrderItemRequest from .suggested_audio_tag import SuggestedAudioTag from .supported_voice import SupportedVoice from .system_tool_config_input import SystemToolConfigInput @@ -1627,6 +1681,8 @@ from .update_o_auth_2_jwt_request import UpdateOAuth2JwtRequest from .update_o_auth_2_jwt_request_algorithm import UpdateOAuth2JwtRequestAlgorithm from .update_o_auth_2_jwt_request_token_response_field import UpdateOAuth2JwtRequestTokenResponseField + from .update_order_request import UpdateOrderRequest + from .update_order_response import UpdateOrderResponse from .update_product_params import UpdateProductParams from .update_project_request import UpdateProjectRequest from .update_pronunciation_dictionaries_request import UpdatePronunciationDictionariesRequest @@ -1636,6 +1692,8 @@ from .update_staff_params import UpdateStaffParams from .update_tool_call_unit_test_request import UpdateToolCallUnitTestRequest from .update_workspace_member_response_model import UpdateWorkspaceMemberResponseModel + from .upsert_order_item_request import UpsertOrderItemRequest + from .upsert_order_item_response import UpsertOrderItemResponse from .url_avatar import UrlAvatar from .url_model import UrlModel from .usage_aggregation_interval import UsageAggregationInterval @@ -1920,6 +1978,7 @@ "Age": ".age", "AgentAlertingMonitorConfig": ".agent_alerting_monitor_config", "AgentAlertingSettings": ".agent_alerting_settings", + "AgentAlertingWebhookNotifier": ".agent_alerting_webhook_notifier", "AgentBranchBasicInfo": ".agent_branch_basic_info", "AgentBranchResponse": ".agent_branch_response", "AgentBranchSummary": ".agent_branch_summary", @@ -1979,7 +2038,6 @@ "AnalysisPropertyConstantValue": ".analysis_property_constant_value", "AnalysisPropertyType": ".analysis_property_type", "AnalysisScope": ".analysis_scope", - "ApiIntegrationDocResponse": ".api_integration_doc_response", "ApiIntegrationOAuth2AuthCodeResponse": ".api_integration_o_auth_2_auth_code_response", "ApiIntegrationOAuth2AuthCodeResponseScopeSeparator": ".api_integration_o_auth_2_auth_code_response_scope_separator", "ApiIntegrationOAuth2CustomAppResponse": ".api_integration_o_auth_2_custom_app_response", @@ -1999,6 +2057,8 @@ "ArrayJsonSchemaPropertyOutputConstantValueItem": ".array_json_schema_property_output_constant_value_item", "ArrayJsonSchemaPropertyOutputItems": ".array_json_schema_property_output_items", "AsrConversationalConfig": ".asr_conversational_config", + "AsrConversationalConfigOverride": ".asr_conversational_config_override", + "AsrConversationalConfigOverrideConfig": ".asr_conversational_config_override_config", "AsrConversationalConfigWorkflowOverride": ".asr_conversational_config_workflow_override", "AsrInputFormat": ".asr_input_format", "AsrProvider": ".asr_provider", @@ -2381,6 +2441,7 @@ "CreateOAuth2JwtRequest": ".create_o_auth_2_jwt_request", "CreateOAuth2JwtRequestAlgorithm": ".create_o_auth_2_jwt_request_algorithm", "CreateOAuth2JwtRequestTokenResponseField": ".create_o_auth_2_jwt_request_token_response_field", + "CreateOrderResponse": ".create_order_response", "CreatePhoneNumberResponseModel": ".create_phone_number_response_model", "CreatePreviouslyGeneratedVoiceRequest": ".create_previously_generated_voice_request", "CreatePrivateKeyJwtRequest": ".create_private_key_jwt_request", @@ -2392,12 +2453,12 @@ "CreateServiceParams": ".create_service_params", "CreateSimulationTestRequest": ".create_simulation_test_request", "CreateSipTrunkPhoneNumberRequest": ".create_sip_trunk_phone_number_request", - "CreateSpeechEngineResponse": ".create_speech_engine_response", "CreateStaffParams": ".create_staff_params", "CreateStringEnvironmentVariableRequest": ".create_string_environment_variable_request", "CreateToolCallUnitTestRequest": ".create_tool_call_unit_test_request", "CreateTranscriptRequest": ".create_transcript_request", "CreateTwilioPhoneNumberRequest": ".create_twilio_phone_number_request", + "CueOptionsRequest": ".cue_options_request", "Currency": ".currency", "CustomGuardrailConfig": ".custom_guardrail_config", "CustomGuardrailConfigTriggerAction": ".custom_guardrail_config_trigger_action", @@ -2443,6 +2504,7 @@ "DeleteWorkspaceGroupMemberResponseModel": ".delete_workspace_group_member_response_model", "DeleteWorkspaceInviteResponseModel": ".delete_workspace_invite_response_model", "DeleteWorkspaceWebhookResponseModel": ".delete_workspace_webhook_response_model", + "DeliverableInfo": ".deliverable_info", "DependentAvailableAgentIdentifier": ".dependent_available_agent_identifier", "DependentAvailableAgentIdentifierAccessLevel": ".dependent_available_agent_identifier_access_level", "DependentAvailableMcpServerIdentifier": ".dependent_available_mcp_server_identifier", @@ -2471,6 +2533,7 @@ "DocumentUsageModeEnum": ".document_usage_mode_enum", "DocxExportOptions": ".docx_export_options", "DtmfInputConfig": ".dtmf_input_config", + "DubOrderItemRequest": ".dub_order_item_request", "DubbedSegment": ".dubbed_segment", "DubbingMediaMetadata": ".dubbing_media_metadata", "DubbingMediaReference": ".dubbing_media_reference", @@ -2684,6 +2747,7 @@ "InvoiceResponse": ".invoice_response", "InvoiceResponseModelPaymentIntentStatus": ".invoice_response_model_payment_intent_status", "InvoiceResponseModelPaymentIntentStatussesItem": ".invoice_response_model_payment_intent_statusses_item", + "ItemId": ".item_id", "KeepContextAlive": ".keep_context_alive", "KnowledgeBaseContentSearchResponseModel": ".knowledge_base_content_search_response_model", "KnowledgeBaseContentSearchResult": ".knowledge_base_content_search_result", @@ -2714,6 +2778,8 @@ "LanguageAddedResponse": ".language_added_response", "LanguageDetectionToolConfig": ".language_detection_tool_config", "LanguageDetectionToolResultModel": ".language_detection_tool_result_model", + "LanguageInfo": ".language_info", + "LanguagePairInfo": ".language_pair_info", "LanguagePresetInput": ".language_preset_input", "LanguagePresetOutput": ".language_preset_output", "LanguagePresetTranslation": ".language_preset_translation", @@ -2744,9 +2810,9 @@ "ListHolidaysParams": ".list_holidays_params", "ListLocationsParams": ".list_locations_params", "ListMcpToolsResponseModel": ".list_mcp_tools_response_model", + "ListOrdersResponse": ".list_orders_response", "ListProductsParams": ".list_products_params", "ListResponseAgentBranchSummary": ".list_response_agent_branch_summary", - "ListResponseApiIntegrationDocResponse": ".list_response_api_integration_doc_response", "ListResponseMeta": ".list_response_meta", "ListServicesParams": ".list_services_params", "ListSpeechEnginesResponse": ".list_speech_engines_response", @@ -2811,6 +2877,7 @@ "McpToolConfigOverrideOutputInputOverridesValue_Constant": ".mcp_tool_config_override_output_input_overrides_value", "McpToolConfigOverrideOutputInputOverridesValue_DynamicVariable": ".mcp_tool_config_override_output_input_overrides_value", "McpToolConfigOverrideOutputInputOverridesValue_Llm": ".mcp_tool_config_override_output_input_overrides_value", + "MediaId": ".media_id", "MemoryEntrySearchResult": ".memory_entry_search_result", "MemoryEntrySearchResultSource": ".memory_entry_search_result_source", "MessageSearchSortBy": ".message_search_sort_by", @@ -2847,10 +2914,20 @@ "ObjectJsonSchemaPropertyOutputPropertiesValue": ".object_json_schema_property_output_properties_value", "OrbAvatar": ".orb_avatar", "OrchestratorToolMockBehaviorConfig": ".orchestrator_tool_mock_behavior_config", + "OrderDeliverablesResponse": ".order_deliverables_response", + "OrderId": ".order_id", + "OrderItemInfo": ".order_item_info", + "OrderItemKind": ".order_item_kind", + "OrderMediaResponse": ".order_media_response", + "OrderRequestState": ".order_request_state", + "OrderResponse": ".order_response", + "OrderState": ".order_state", + "OrderSummary": ".order_summary", "OutboundCallRecipient": ".outbound_call_recipient", "OutboundCallRecipientResponseModel": ".outbound_call_recipient_response_model", "OutboundSipTrunkConfigRequestModel": ".outbound_sip_trunk_config_request_model", "OutputFormat": ".output_format", + "PairedLanguagesResponse": ".paired_languages_response", "PartialTranscriptPayload": ".partial_transcript_payload", "PatchWorkspaceWebhookResponseModel": ".patch_workspace_webhook_response_model", "PdfExportOptions": ".pdf_export_options", @@ -3000,6 +3077,7 @@ "PydanticPronunciationDictionaryVersionLocator": ".pydantic_pronunciation_dictionary_version_locator", "QualityPresetType": ".quality_preset_type", "QueryParamsJsonSchema": ".query_params_json_schema", + "QuoteInfo": ".quote_info", "RagChunkMetadata": ".rag_chunk_metadata", "RagConfig": ".rag_config", "RagConfigWorkflowOverride": ".rag_config_workflow_override", @@ -3024,7 +3102,9 @@ "RegionConfigRequest": ".region_config_request", "RegionalProcessingSurchargeInfo": ".regional_processing_surcharge_info", "RegisterForGroupSessionParams": ".register_for_group_session_params", + "RegisterMediaResponse": ".register_media_response", "RemoveMemberFromGroupRequest": ".remove_member_from_group_request", + "RemoveOrderItemResponse": ".remove_order_item_response", "Render": ".render", "RenderStatus": ".render_status", "RenderType": ".render_type", @@ -3045,6 +3125,26 @@ "ReviewResponseModelRejectReasonsItem": ".review_response_model_reject_reasons_item", "ReviewResponseModelReviewStatus": ".review_response_model_review_status", "ReviewStatus": ".review_status", + "RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput": ".root_model_annotated_union_dub_order_item_request_subtitle_order_item_request_field_info_annotation_none_type_required_true_discriminator_kind_input", + "RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput_Dub": ".root_model_annotated_union_dub_order_item_request_subtitle_order_item_request_field_info_annotation_none_type_required_true_discriminator_kind_input", + "RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput_Subtitles": ".root_model_annotated_union_dub_order_item_request_subtitle_order_item_request_field_info_annotation_none_type_required_true_discriminator_kind_input", + "RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindOutput": ".root_model_annotated_union_dub_order_item_request_subtitle_order_item_request_field_info_annotation_none_type_required_true_discriminator_kind_output", + "RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindOutput_Dub": ".root_model_annotated_union_dub_order_item_request_subtitle_order_item_request_field_info_annotation_none_type_required_true_discriminator_kind_output", + "RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindOutput_Subtitles": ".root_model_annotated_union_dub_order_item_request_subtitle_order_item_request_field_info_annotation_none_type_required_true_discriminator_kind_output", + "RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind": ".root_model_annotated_union_paired_languages_response_single_languages_response_field_info_annotation_none_type_required_true_discriminator_kind", + "RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind_Pair": ".root_model_annotated_union_paired_languages_response_single_languages_response_field_info_annotation_none_type_required_true_discriminator_kind", + "RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind_Single": ".root_model_annotated_union_paired_languages_response_single_languages_response_field_info_annotation_none_type_required_true_discriminator_kind", + "RttAudioPayload": ".rtt_audio_payload", + "RttEndOfStreamPayload": ".rtt_end_of_stream_payload", + "RttErrorPayload": ".rtt_error_payload", + "RttFinalTranscriptPayload": ".rtt_final_transcript_payload", + "RttInputAudioChunkPayload": ".rtt_input_audio_chunk_payload", + "RttInputFormatEnum": ".rtt_input_format_enum", + "RttOutputFormatEnum": ".rtt_output_format_enum", + "RttPartialTranscriptPayload": ".rtt_partial_transcript_payload", + "RttSessionStartedPayload": ".rtt_session_started_payload", + "RttStatusPayload": ".rtt_status_payload", + "RttTranslationPayload": ".rtt_translation_payload", "SafetyCommonModel": ".safety_common_model", "SafetyEvaluation": ".safety_evaluation", "SafetyResponseModel": ".safety_response_model", @@ -3100,6 +3200,7 @@ "SimilarVoicesForSpeakerResponse": ".similar_voices_for_speaker_response", "SimulationTestModel": ".simulation_test_model", "SimulationToolMockBehaviorConfig": ".simulation_tool_mock_behavior_config", + "SingleLanguagesResponse": ".single_languages_response", "SingleTestRunRequestModel": ".single_test_run_request_model", "SingleUseTokenResponseModel": ".single_use_token_response_model", "SingleUseTokenType": ".single_use_token_type", @@ -3134,6 +3235,7 @@ "SpeakerUpdatedResponse": ".speaker_updated_response", "SpeechEngineConfig": ".speech_engine_config", "SpeechEngineConfigRequestHeadersValue": ".speech_engine_config_request_headers_value", + "SpeechEngineConversationInitiationClientDataConfig": ".speech_engine_conversation_initiation_client_data_config", "SpeechEngineResponse": ".speech_engine_response", "SpeechEngineSummaryResponse": ".speech_engine_summary_response", "SpeechHistoryItemResponse": ".speech_history_item_response", @@ -3157,10 +3259,12 @@ "StudioClipReferenceClipType": ".studio_clip_reference_clip_type", "StudioTextStyleOutlineModel": ".studio_text_style_outline_model", "StudioTextStyleShadowModel": ".studio_text_style_shadow_model", + "SubmitOrderResponse": ".submit_order_response", "Subscription": ".subscription", "SubscriptionResponse": ".subscription_response", "SubscriptionResponseModelMaxCreditLimitExtension": ".subscription_response_model_max_credit_limit_extension", "SubscriptionStatusType": ".subscription_status_type", + "SubtitleOrderItemRequest": ".subtitle_order_item_request", "SuggestedAudioTag": ".suggested_audio_tag", "SupportedVoice": ".supported_voice", "SystemToolConfigInput": ".system_tool_config_input", @@ -3322,6 +3426,8 @@ "UpdateOAuth2JwtRequest": ".update_o_auth_2_jwt_request", "UpdateOAuth2JwtRequestAlgorithm": ".update_o_auth_2_jwt_request_algorithm", "UpdateOAuth2JwtRequestTokenResponseField": ".update_o_auth_2_jwt_request_token_response_field", + "UpdateOrderRequest": ".update_order_request", + "UpdateOrderResponse": ".update_order_response", "UpdateProductParams": ".update_product_params", "UpdateProjectRequest": ".update_project_request", "UpdatePronunciationDictionariesRequest": ".update_pronunciation_dictionaries_request", @@ -3331,6 +3437,8 @@ "UpdateStaffParams": ".update_staff_params", "UpdateToolCallUnitTestRequest": ".update_tool_call_unit_test_request", "UpdateWorkspaceMemberResponseModel": ".update_workspace_member_response_model", + "UpsertOrderItemRequest": ".upsert_order_item_request", + "UpsertOrderItemResponse": ".upsert_order_item_response", "UrlAvatar": ".url_avatar", "UrlModel": ".url_model", "UsageAggregationInterval": ".usage_aggregation_interval", @@ -3595,6 +3703,7 @@ def __dir__(): "Age", "AgentAlertingMonitorConfig", "AgentAlertingSettings", + "AgentAlertingWebhookNotifier", "AgentBranchBasicInfo", "AgentBranchResponse", "AgentBranchSummary", @@ -3654,7 +3763,6 @@ def __dir__(): "AnalysisPropertyConstantValue", "AnalysisPropertyType", "AnalysisScope", - "ApiIntegrationDocResponse", "ApiIntegrationOAuth2AuthCodeResponse", "ApiIntegrationOAuth2AuthCodeResponseScopeSeparator", "ApiIntegrationOAuth2CustomAppResponse", @@ -3674,6 +3782,8 @@ def __dir__(): "ArrayJsonSchemaPropertyOutputConstantValueItem", "ArrayJsonSchemaPropertyOutputItems", "AsrConversationalConfig", + "AsrConversationalConfigOverride", + "AsrConversationalConfigOverrideConfig", "AsrConversationalConfigWorkflowOverride", "AsrInputFormat", "AsrProvider", @@ -4056,6 +4166,7 @@ def __dir__(): "CreateOAuth2JwtRequest", "CreateOAuth2JwtRequestAlgorithm", "CreateOAuth2JwtRequestTokenResponseField", + "CreateOrderResponse", "CreatePhoneNumberResponseModel", "CreatePreviouslyGeneratedVoiceRequest", "CreatePrivateKeyJwtRequest", @@ -4067,12 +4178,12 @@ def __dir__(): "CreateServiceParams", "CreateSimulationTestRequest", "CreateSipTrunkPhoneNumberRequest", - "CreateSpeechEngineResponse", "CreateStaffParams", "CreateStringEnvironmentVariableRequest", "CreateToolCallUnitTestRequest", "CreateTranscriptRequest", "CreateTwilioPhoneNumberRequest", + "CueOptionsRequest", "Currency", "CustomGuardrailConfig", "CustomGuardrailConfigTriggerAction", @@ -4118,6 +4229,7 @@ def __dir__(): "DeleteWorkspaceGroupMemberResponseModel", "DeleteWorkspaceInviteResponseModel", "DeleteWorkspaceWebhookResponseModel", + "DeliverableInfo", "DependentAvailableAgentIdentifier", "DependentAvailableAgentIdentifierAccessLevel", "DependentAvailableMcpServerIdentifier", @@ -4146,6 +4258,7 @@ def __dir__(): "DocumentUsageModeEnum", "DocxExportOptions", "DtmfInputConfig", + "DubOrderItemRequest", "DubbedSegment", "DubbingMediaMetadata", "DubbingMediaReference", @@ -4359,6 +4472,7 @@ def __dir__(): "InvoiceResponse", "InvoiceResponseModelPaymentIntentStatus", "InvoiceResponseModelPaymentIntentStatussesItem", + "ItemId", "KeepContextAlive", "KnowledgeBaseContentSearchResponseModel", "KnowledgeBaseContentSearchResult", @@ -4389,6 +4503,8 @@ def __dir__(): "LanguageAddedResponse", "LanguageDetectionToolConfig", "LanguageDetectionToolResultModel", + "LanguageInfo", + "LanguagePairInfo", "LanguagePresetInput", "LanguagePresetOutput", "LanguagePresetTranslation", @@ -4419,9 +4535,9 @@ def __dir__(): "ListHolidaysParams", "ListLocationsParams", "ListMcpToolsResponseModel", + "ListOrdersResponse", "ListProductsParams", "ListResponseAgentBranchSummary", - "ListResponseApiIntegrationDocResponse", "ListResponseMeta", "ListServicesParams", "ListSpeechEnginesResponse", @@ -4486,6 +4602,7 @@ def __dir__(): "McpToolConfigOverrideOutputInputOverridesValue_Constant", "McpToolConfigOverrideOutputInputOverridesValue_DynamicVariable", "McpToolConfigOverrideOutputInputOverridesValue_Llm", + "MediaId", "MemoryEntrySearchResult", "MemoryEntrySearchResultSource", "MessageSearchSortBy", @@ -4522,10 +4639,20 @@ def __dir__(): "ObjectJsonSchemaPropertyOutputPropertiesValue", "OrbAvatar", "OrchestratorToolMockBehaviorConfig", + "OrderDeliverablesResponse", + "OrderId", + "OrderItemInfo", + "OrderItemKind", + "OrderMediaResponse", + "OrderRequestState", + "OrderResponse", + "OrderState", + "OrderSummary", "OutboundCallRecipient", "OutboundCallRecipientResponseModel", "OutboundSipTrunkConfigRequestModel", "OutputFormat", + "PairedLanguagesResponse", "PartialTranscriptPayload", "PatchWorkspaceWebhookResponseModel", "PdfExportOptions", @@ -4675,6 +4802,7 @@ def __dir__(): "PydanticPronunciationDictionaryVersionLocator", "QualityPresetType", "QueryParamsJsonSchema", + "QuoteInfo", "RagChunkMetadata", "RagConfig", "RagConfigWorkflowOverride", @@ -4699,7 +4827,9 @@ def __dir__(): "RegionConfigRequest", "RegionalProcessingSurchargeInfo", "RegisterForGroupSessionParams", + "RegisterMediaResponse", "RemoveMemberFromGroupRequest", + "RemoveOrderItemResponse", "Render", "RenderStatus", "RenderType", @@ -4720,6 +4850,26 @@ def __dir__(): "ReviewResponseModelRejectReasonsItem", "ReviewResponseModelReviewStatus", "ReviewStatus", + "RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput", + "RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput_Dub", + "RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput_Subtitles", + "RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindOutput", + "RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindOutput_Dub", + "RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindOutput_Subtitles", + "RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind", + "RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind_Pair", + "RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind_Single", + "RttAudioPayload", + "RttEndOfStreamPayload", + "RttErrorPayload", + "RttFinalTranscriptPayload", + "RttInputAudioChunkPayload", + "RttInputFormatEnum", + "RttOutputFormatEnum", + "RttPartialTranscriptPayload", + "RttSessionStartedPayload", + "RttStatusPayload", + "RttTranslationPayload", "SafetyCommonModel", "SafetyEvaluation", "SafetyResponseModel", @@ -4775,6 +4925,7 @@ def __dir__(): "SimilarVoicesForSpeakerResponse", "SimulationTestModel", "SimulationToolMockBehaviorConfig", + "SingleLanguagesResponse", "SingleTestRunRequestModel", "SingleUseTokenResponseModel", "SingleUseTokenType", @@ -4809,6 +4960,7 @@ def __dir__(): "SpeakerUpdatedResponse", "SpeechEngineConfig", "SpeechEngineConfigRequestHeadersValue", + "SpeechEngineConversationInitiationClientDataConfig", "SpeechEngineResponse", "SpeechEngineSummaryResponse", "SpeechHistoryItemResponse", @@ -4832,10 +4984,12 @@ def __dir__(): "StudioClipReferenceClipType", "StudioTextStyleOutlineModel", "StudioTextStyleShadowModel", + "SubmitOrderResponse", "Subscription", "SubscriptionResponse", "SubscriptionResponseModelMaxCreditLimitExtension", "SubscriptionStatusType", + "SubtitleOrderItemRequest", "SuggestedAudioTag", "SupportedVoice", "SystemToolConfigInput", @@ -4997,6 +5151,8 @@ def __dir__(): "UpdateOAuth2JwtRequest", "UpdateOAuth2JwtRequestAlgorithm", "UpdateOAuth2JwtRequestTokenResponseField", + "UpdateOrderRequest", + "UpdateOrderResponse", "UpdateProductParams", "UpdateProjectRequest", "UpdatePronunciationDictionariesRequest", @@ -5006,6 +5162,8 @@ def __dir__(): "UpdateStaffParams", "UpdateToolCallUnitTestRequest", "UpdateWorkspaceMemberResponseModel", + "UpsertOrderItemRequest", + "UpsertOrderItemResponse", "UrlAvatar", "UrlModel", "UsageAggregationInterval", diff --git a/src/elevenlabs/types/agent_alerting_settings.py b/src/elevenlabs/types/agent_alerting_settings.py index 6b6e6635..241869c4 100644 --- a/src/elevenlabs/types/agent_alerting_settings.py +++ b/src/elevenlabs/types/agent_alerting_settings.py @@ -6,6 +6,7 @@ from ..core.pydantic_utilities import IS_PYDANTIC_V2 from ..core.unchecked_base_model import UncheckedBaseModel from .agent_alerting_monitor_config import AgentAlertingMonitorConfig +from .agent_alerting_webhook_notifier import AgentAlertingWebhookNotifier class AgentAlertingSettings(UncheckedBaseModel): @@ -19,6 +20,11 @@ class AgentAlertingSettings(UncheckedBaseModel): How many minutes an alert can stay inactive before it is auto-resolved. """ + notifiers: typing.Optional[typing.List[AgentAlertingWebhookNotifier]] = pydantic.Field(default=None) + """ + Delivery channels for alert lifecycle notifications. Currently supports webhook notifiers. + """ + if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 else: diff --git a/src/elevenlabs/types/agent_alerting_webhook_notifier.py b/src/elevenlabs/types/agent_alerting_webhook_notifier.py new file mode 100644 index 00000000..c7af95ad --- /dev/null +++ b/src/elevenlabs/types/agent_alerting_webhook_notifier.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 + + +class AgentAlertingWebhookNotifier(UncheckedBaseModel): + type: typing.Optional[typing.Literal["webhook"]] = None + url: str = pydantic.Field() + """ + The URL to send alert lifecycle notifications to. + """ + + request_headers: typing.Optional[typing.Dict[str, typing.Optional[str]]] = pydantic.Field(default=None) + """ + Optional static request headers sent with each alert webhook call, for example to authenticate with the receiving endpoint. + """ + + 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/asr_conversational_config_override.py b/src/elevenlabs/types/asr_conversational_config_override.py new file mode 100644 index 00000000..0743ccf1 --- /dev/null +++ b/src/elevenlabs/types/asr_conversational_config_override.py @@ -0,0 +1,23 @@ +# 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 AsrConversationalConfigOverride(UncheckedBaseModel): + keywords: typing.Optional[typing.List[str]] = pydantic.Field(default=None) + """ + Keywords to boost prediction probability for + """ + + 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/list_response_api_integration_doc_response.py b/src/elevenlabs/types/asr_conversational_config_override_config.py similarity index 64% rename from src/elevenlabs/types/list_response_api_integration_doc_response.py rename to src/elevenlabs/types/asr_conversational_config_override_config.py index 6aa4c7da..fbdaa23f 100644 --- a/src/elevenlabs/types/list_response_api_integration_doc_response.py +++ b/src/elevenlabs/types/asr_conversational_config_override_config.py @@ -5,13 +5,13 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2 from ..core.unchecked_base_model import UncheckedBaseModel -from .api_integration_doc_response import ApiIntegrationDocResponse -from .list_response_meta import ListResponseMeta -class ListResponseApiIntegrationDocResponse(UncheckedBaseModel): - meta: typing.Optional[ListResponseMeta] = None - results: typing.List[ApiIntegrationDocResponse] +class AsrConversationalConfigOverrideConfig(UncheckedBaseModel): + keywords: typing.Optional[bool] = pydantic.Field(default=None) + """ + Whether to allow overriding the keywords field. + """ if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/elevenlabs/types/chapter_statistics_response.py b/src/elevenlabs/types/chapter_statistics_response.py index e0c43024..e3b5629d 100644 --- a/src/elevenlabs/types/chapter_statistics_response.py +++ b/src/elevenlabs/types/chapter_statistics_response.py @@ -29,6 +29,11 @@ class ChapterStatisticsResponse(UncheckedBaseModel): The number of unconverted paragraphs. """ + credits_needed_to_convert: typing.Optional[int] = pydantic.Field(default=None) + """ + The number of credits needed to convert the remaining paragraphs. + """ + voice_statistics: typing.Optional[typing.List[VoiceStatisticsResponseModel]] = pydantic.Field(default=None) """ Per-voice breakdown of character counts. diff --git a/src/elevenlabs/types/conversation_config_client_override_config_input.py b/src/elevenlabs/types/conversation_config_client_override_config_input.py index cc947979..b14cba64 100644 --- a/src/elevenlabs/types/conversation_config_client_override_config_input.py +++ b/src/elevenlabs/types/conversation_config_client_override_config_input.py @@ -6,12 +6,18 @@ from ..core.pydantic_utilities import IS_PYDANTIC_V2 from ..core.unchecked_base_model import UncheckedBaseModel from .agent_config_override_config import AgentConfigOverrideConfig +from .asr_conversational_config_override_config import AsrConversationalConfigOverrideConfig from .conversation_config_override_config import ConversationConfigOverrideConfig from .tts_conversational_config_override_config import TtsConversationalConfigOverrideConfig from .turn_config_override_config import TurnConfigOverrideConfig class ConversationConfigClientOverrideConfigInput(UncheckedBaseModel): + asr: typing.Optional[AsrConversationalConfigOverrideConfig] = pydantic.Field(default=None) + """ + Configures overrides for nested fields. + """ + turn: typing.Optional[TurnConfigOverrideConfig] = pydantic.Field(default=None) """ Configures overrides for nested fields. diff --git a/src/elevenlabs/types/conversation_config_client_override_config_output.py b/src/elevenlabs/types/conversation_config_client_override_config_output.py index 88ec4fc4..0d2dcc2f 100644 --- a/src/elevenlabs/types/conversation_config_client_override_config_output.py +++ b/src/elevenlabs/types/conversation_config_client_override_config_output.py @@ -6,12 +6,18 @@ from ..core.pydantic_utilities import IS_PYDANTIC_V2 from ..core.unchecked_base_model import UncheckedBaseModel from .agent_config_override_config import AgentConfigOverrideConfig +from .asr_conversational_config_override_config import AsrConversationalConfigOverrideConfig from .conversation_config_override_config import ConversationConfigOverrideConfig from .tts_conversational_config_override_config import TtsConversationalConfigOverrideConfig from .turn_config_override_config import TurnConfigOverrideConfig class ConversationConfigClientOverrideConfigOutput(UncheckedBaseModel): + asr: typing.Optional[AsrConversationalConfigOverrideConfig] = pydantic.Field(default=None) + """ + Configures overrides for nested fields. + """ + turn: typing.Optional[TurnConfigOverrideConfig] = pydantic.Field(default=None) """ Configures overrides for nested fields. diff --git a/src/elevenlabs/types/conversation_config_client_override_input.py b/src/elevenlabs/types/conversation_config_client_override_input.py index 8a04d1e9..a70e728c 100644 --- a/src/elevenlabs/types/conversation_config_client_override_input.py +++ b/src/elevenlabs/types/conversation_config_client_override_input.py @@ -6,12 +6,18 @@ from ..core.pydantic_utilities import IS_PYDANTIC_V2 from ..core.unchecked_base_model import UncheckedBaseModel from .agent_config_override_input import AgentConfigOverrideInput +from .asr_conversational_config_override import AsrConversationalConfigOverride from .conversation_config_override import ConversationConfigOverride from .tts_conversational_config_override import TtsConversationalConfigOverride from .turn_config_override import TurnConfigOverride class ConversationConfigClientOverrideInput(UncheckedBaseModel): + asr: typing.Optional[AsrConversationalConfigOverride] = pydantic.Field(default=None) + """ + Configuration for conversational transcription + """ + turn: typing.Optional[TurnConfigOverride] = pydantic.Field(default=None) """ Configuration for turn detection diff --git a/src/elevenlabs/types/conversation_config_client_override_output.py b/src/elevenlabs/types/conversation_config_client_override_output.py index abaad9bc..ad717d6e 100644 --- a/src/elevenlabs/types/conversation_config_client_override_output.py +++ b/src/elevenlabs/types/conversation_config_client_override_output.py @@ -6,12 +6,18 @@ from ..core.pydantic_utilities import IS_PYDANTIC_V2 from ..core.unchecked_base_model import UncheckedBaseModel from .agent_config_override_output import AgentConfigOverrideOutput +from .asr_conversational_config_override import AsrConversationalConfigOverride from .conversation_config_override import ConversationConfigOverride from .tts_conversational_config_override import TtsConversationalConfigOverride from .turn_config_override import TurnConfigOverride class ConversationConfigClientOverrideOutput(UncheckedBaseModel): + asr: typing.Optional[AsrConversationalConfigOverride] = pydantic.Field(default=None) + """ + Configuration for conversational transcription + """ + turn: typing.Optional[TurnConfigOverride] = pydantic.Field(default=None) """ Configuration for turn detection diff --git a/src/elevenlabs/types/create_order_response.py b/src/elevenlabs/types/create_order_response.py new file mode 100644 index 00000000..f3dde063 --- /dev/null +++ b/src/elevenlabs/types/create_order_response.py @@ -0,0 +1,24 @@ +# 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 .order_id import OrderId + + +class CreateOrderResponse(UncheckedBaseModel): + order_id: OrderId = pydantic.Field() + """ + The ID of the newly created order. + """ + + 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/cue_options_request.py b/src/elevenlabs/types/cue_options_request.py new file mode 100644 index 00000000..a5989350 --- /dev/null +++ b/src/elevenlabs/types/cue_options_request.py @@ -0,0 +1,48 @@ +# 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 CueOptionsRequest(UncheckedBaseModel): + min_duration_ms: typing.Optional[int] = pydantic.Field(default=None) + """ + Minimum duration of each cue in milliseconds. + """ + + max_duration_ms: typing.Optional[int] = pydantic.Field(default=None) + """ + Maximum duration of each cue in milliseconds. + """ + + max_lines_per_cue: typing.Optional[int] = pydantic.Field(default=None) + """ + Maximum number of lines per cue. + """ + + max_chars_per_line: typing.Optional[int] = pydantic.Field(default=None) + """ + Maximum number of characters per line in a cue. + """ + + max_chars_per_s: typing.Optional[int] = pydantic.Field(default=None) + """ + Maximum characters per second reading speed. If not set, no reading speed limit is applied. + """ + + min_gap_between_cues_frames: typing.Optional[int] = pydantic.Field(default=None) + """ + Minimum gap between consecutive cues in frames. If not set, no minimum gap is enforced. + """ + + 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/deliverable_info.py b/src/elevenlabs/types/deliverable_info.py new file mode 100644 index 00000000..6b6bb3c9 --- /dev/null +++ b/src/elevenlabs/types/deliverable_info.py @@ -0,0 +1,38 @@ +# 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 DeliverableInfo(UncheckedBaseModel): + signed_url: str = pydantic.Field() + """ + A time-limited URL to download the delivered file. + """ + + content_type: str = pydantic.Field() + """ + The MIME type of the delivered file (e.g. 'video/mp4'). + """ + + name: str = pydantic.Field() + """ + The name of the delivered file. + """ + + version: typing.Optional[int] = pydantic.Field(default=None) + """ + The version number of the deliverable. + """ + + 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/dub_order_item_request.py b/src/elevenlabs/types/dub_order_item_request.py new file mode 100644 index 00000000..1ff54ff3 --- /dev/null +++ b/src/elevenlabs/types/dub_order_item_request.py @@ -0,0 +1,54 @@ +# 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 .media_id import MediaId + + +class DubOrderItemRequest(UncheckedBaseModel): + media_id: MediaId = pydantic.Field() + """ + The ID of the uploaded media file to dub. + """ + + source_language: str = pydantic.Field() + """ + The language code of the source media (e.g. 'en', 'es'). + """ + + destination_languages: typing.List[str] = pydantic.Field() + """ + List of target language codes to dub the media into. + """ + + include_captions: bool = pydantic.Field() + """ + Whether to generate captions for the dubbed outputs. + """ + + include_source_captions: bool = pydantic.Field() + """ + Whether to generate captions for the source language. + """ + + instructions: typing.Optional[str] = pydantic.Field(default=None) + """ + Optional free-text instructions for the dubbing team. + """ + + captions_sdh: typing.Optional[bool] = pydantic.Field(default=None) + """ + Whether captions should use SDH format, which includes descriptions for deaf and hard-of-hearing viewers. + """ + + 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/get_conversation_response_model.py b/src/elevenlabs/types/get_conversation_response_model.py index 17a6d318..f8cc0a77 100644 --- a/src/elevenlabs/types/get_conversation_response_model.py +++ b/src/elevenlabs/types/get_conversation_response_model.py @@ -41,6 +41,11 @@ class GetConversationResponseModel(UncheckedBaseModel): Conversation tag ids assigned to this conversation. """ + otlp_traces: typing.Optional[typing.Dict[str, typing.Any]] = pydantic.Field(default=None) + """ + OpenTelemetry trace payload when the request uses format=opentelemetry; otherwise omitted. + """ + if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 else: diff --git a/src/elevenlabs/types/item_id.py b/src/elevenlabs/types/item_id.py new file mode 100644 index 00000000..84514dfe --- /dev/null +++ b/src/elevenlabs/types/item_id.py @@ -0,0 +1,3 @@ +# This file was auto-generated by Fern from our API Definition. + +ItemId = str diff --git a/src/elevenlabs/types/language_info.py b/src/elevenlabs/types/language_info.py new file mode 100644 index 00000000..eba6c7b0 --- /dev/null +++ b/src/elevenlabs/types/language_info.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 LanguageInfo(UncheckedBaseModel): + code: str = pydantic.Field() + """ + The language code (e.g. 'en', 'fr', 'es-ES'). + """ + + label: str = pydantic.Field() + """ + The human-readable language name (e.g. 'English', 'French', 'Spanish (Spain)'). + """ + + 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/language_pair_info.py b/src/elevenlabs/types/language_pair_info.py new file mode 100644 index 00000000..348fe5c6 --- /dev/null +++ b/src/elevenlabs/types/language_pair_info.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 .language_info import LanguageInfo + + +class LanguagePairInfo(UncheckedBaseModel): + source_language: LanguageInfo = pydantic.Field() + """ + The source language. + """ + + destination_languages: typing.List[LanguageInfo] = pydantic.Field() + """ + The available destination languages for this source language. + """ + + 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/list_orders_response.py b/src/elevenlabs/types/list_orders_response.py new file mode 100644 index 00000000..98a82be4 --- /dev/null +++ b/src/elevenlabs/types/list_orders_response.py @@ -0,0 +1,24 @@ +# 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 .order_summary import OrderSummary + + +class ListOrdersResponse(UncheckedBaseModel): + orders: typing.List[OrderSummary] = pydantic.Field() + """ + The list of orders matching the query. + """ + + 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/media_id.py b/src/elevenlabs/types/media_id.py new file mode 100644 index 00000000..aadddb56 --- /dev/null +++ b/src/elevenlabs/types/media_id.py @@ -0,0 +1,3 @@ +# This file was auto-generated by Fern from our API Definition. + +MediaId = str diff --git a/src/elevenlabs/types/order_deliverables_response.py b/src/elevenlabs/types/order_deliverables_response.py new file mode 100644 index 00000000..2011b1aa --- /dev/null +++ b/src/elevenlabs/types/order_deliverables_response.py @@ -0,0 +1,24 @@ +# 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 .deliverable_info import DeliverableInfo + + +class OrderDeliverablesResponse(UncheckedBaseModel): + deliverables: typing.List[DeliverableInfo] = pydantic.Field() + """ + The list of delivered files for the order. Empty if the order is not yet completed. + """ + + 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/order_id.py b/src/elevenlabs/types/order_id.py new file mode 100644 index 00000000..72b7e34d --- /dev/null +++ b/src/elevenlabs/types/order_id.py @@ -0,0 +1,3 @@ +# This file was auto-generated by Fern from our API Definition. + +OrderId = str diff --git a/src/elevenlabs/types/order_item_info.py b/src/elevenlabs/types/order_item_info.py new file mode 100644 index 00000000..a5f4e690 --- /dev/null +++ b/src/elevenlabs/types/order_item_info.py @@ -0,0 +1,38 @@ +# 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 .item_id import ItemId +from .quote_info import QuoteInfo +from .root_model_annotated_union_dub_order_item_request_subtitle_order_item_request_field_info_annotation_none_type_required_true_discriminator_kind_output import ( + RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindOutput, +) + + +class OrderItemInfo(UncheckedBaseModel): + item_id: ItemId = pydantic.Field() + """ + The ID of the order item. + """ + + item: RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindOutput = pydantic.Field() + """ + The item configuration details. + """ + + quote: typing.Optional[QuoteInfo] = pydantic.Field(default=None) + """ + The quoted price for this item. + """ + + 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/order_item_kind.py b/src/elevenlabs/types/order_item_kind.py new file mode 100644 index 00000000..14d7dc79 --- /dev/null +++ b/src/elevenlabs/types/order_item_kind.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +OrderItemKind = typing.Union[typing.Literal["dub", "subtitles"], typing.Any] diff --git a/src/elevenlabs/types/order_media_response.py b/src/elevenlabs/types/order_media_response.py new file mode 100644 index 00000000..d784a968 --- /dev/null +++ b/src/elevenlabs/types/order_media_response.py @@ -0,0 +1,44 @@ +# 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 .media_id import MediaId + + +class OrderMediaResponse(UncheckedBaseModel): + media_id: MediaId = pydantic.Field() + """ + The ID of the media file. + """ + + name: str = pydantic.Field() + """ + The original filename of the uploaded media. + """ + + content_type: str = pydantic.Field() + """ + The MIME type of the media file (e.g. 'video/mp4'). + """ + + language: typing.Optional[str] = pydantic.Field(default=None) + """ + The detected or declared language of the media, if available. + """ + + signed_url: str = pydantic.Field() + """ + A time-limited URL to download the media file. + """ + + 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/order_request_state.py b/src/elevenlabs/types/order_request_state.py new file mode 100644 index 00000000..08c43865 --- /dev/null +++ b/src/elevenlabs/types/order_request_state.py @@ -0,0 +1,7 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +OrderRequestState = typing.Union[ + typing.Literal["open", "submitted", "paid", "accepted", "rejected", "done"], typing.Any +] diff --git a/src/elevenlabs/types/order_response.py b/src/elevenlabs/types/order_response.py new file mode 100644 index 00000000..ad442b0a --- /dev/null +++ b/src/elevenlabs/types/order_response.py @@ -0,0 +1,72 @@ +# This file was auto-generated by Fern from our API Definition. + +import datetime as dt +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2 +from ..core.unchecked_base_model import UncheckedBaseModel +from .order_id import OrderId +from .order_item_info import OrderItemInfo +from .order_state import OrderState + + +class OrderResponse(UncheckedBaseModel): + order_id: OrderId = pydantic.Field() + """ + The ID of the order. + """ + + name: str = pydantic.Field() + """ + The display name of the order. + """ + + state: OrderState = pydantic.Field() + """ + The current state of the order. + """ + + items: typing.List[OrderItemInfo] = pydantic.Field() + """ + The list of items in this order with their quotes. + """ + + total_amount_usd: typing.Optional[float] = pydantic.Field(default=None) + """ + The total price for all items in USD. Excluded from response until quotes are available. + """ + + created_at: dt.datetime = pydantic.Field() + """ + The timestamp when the order was created. + """ + + submitted_at: typing.Optional[dt.datetime] = pydantic.Field(default=None) + """ + The timestamp when the order was submitted, if applicable. + """ + + paid_at: typing.Optional[dt.datetime] = pydantic.Field(default=None) + """ + The timestamp when payment was received, if applicable. + """ + + accepted_at: typing.Optional[dt.datetime] = pydantic.Field(default=None) + """ + The timestamp when the order was accepted for production, if applicable. + """ + + completed_at: typing.Optional[dt.datetime] = pydantic.Field(default=None) + """ + The timestamp when the order was completed, if applicable. + """ + + 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/order_state.py b/src/elevenlabs/types/order_state.py new file mode 100644 index 00000000..b4e89fd5 --- /dev/null +++ b/src/elevenlabs/types/order_state.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +OrderState = typing.Union[typing.Literal["open", "submitted", "paid", "accepted", "rejected", "done"], typing.Any] diff --git a/src/elevenlabs/types/order_summary.py b/src/elevenlabs/types/order_summary.py new file mode 100644 index 00000000..14e3873d --- /dev/null +++ b/src/elevenlabs/types/order_summary.py @@ -0,0 +1,51 @@ +# This file was auto-generated by Fern from our API Definition. + +import datetime as dt +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2 +from ..core.unchecked_base_model import UncheckedBaseModel +from .order_id import OrderId +from .order_state import OrderState + + +class OrderSummary(UncheckedBaseModel): + order_id: OrderId = pydantic.Field() + """ + The ID of the order. + """ + + name: str = pydantic.Field() + """ + The display name of the order. + """ + + state: OrderState = pydantic.Field() + """ + The current state of the order. + """ + + total_amount_usd: typing.Optional[float] = pydantic.Field(default=None) + """ + The total price for all items in USD. Excluded from response until quotes are available. + """ + + submitted_at: typing.Optional[dt.datetime] = pydantic.Field(default=None) + """ + The timestamp when the order was submitted, if applicable. + """ + + updated_at: typing.Optional[dt.datetime] = pydantic.Field(default=None) + """ + The timestamp when the order was last modified, if applicable. + """ + + 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/paired_languages_response.py b/src/elevenlabs/types/paired_languages_response.py new file mode 100644 index 00000000..6bf32ef0 --- /dev/null +++ b/src/elevenlabs/types/paired_languages_response.py @@ -0,0 +1,24 @@ +# 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 .language_pair_info import LanguagePairInfo + + +class PairedLanguagesResponse(UncheckedBaseModel): + language_pairs: typing.List[LanguagePairInfo] = pydantic.Field() + """ + The list of available source-to-destination language mappings. + """ + + 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/quote_info.py b/src/elevenlabs/types/quote_info.py new file mode 100644 index 00000000..62ffe3ce --- /dev/null +++ b/src/elevenlabs/types/quote_info.py @@ -0,0 +1,23 @@ +# 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 QuoteInfo(UncheckedBaseModel): + amount_usd: float = pydantic.Field() + """ + The quoted price for this item in USD. Use the order's total_amount_usd for the combined order total. + """ + + 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/register_media_response.py b/src/elevenlabs/types/register_media_response.py new file mode 100644 index 00000000..312fc140 --- /dev/null +++ b/src/elevenlabs/types/register_media_response.py @@ -0,0 +1,24 @@ +# 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 .media_id import MediaId + + +class RegisterMediaResponse(UncheckedBaseModel): + media_id: MediaId = pydantic.Field() + """ + The ID of the uploaded media file. + """ + + 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/remove_order_item_response.py b/src/elevenlabs/types/remove_order_item_response.py new file mode 100644 index 00000000..f3a2c174 --- /dev/null +++ b/src/elevenlabs/types/remove_order_item_response.py @@ -0,0 +1,23 @@ +# 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 RemoveOrderItemResponse(UncheckedBaseModel): + success: bool = pydantic.Field() + """ + Whether the item was successfully removed. + """ + + 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/root_model_annotated_union_dub_order_item_request_subtitle_order_item_request_field_info_annotation_none_type_required_true_discriminator_kind_input.py b/src/elevenlabs/types/root_model_annotated_union_dub_order_item_request_subtitle_order_item_request_field_info_annotation_none_type_required_true_discriminator_kind_input.py new file mode 100644 index 00000000..8c11e86a --- /dev/null +++ b/src/elevenlabs/types/root_model_annotated_union_dub_order_item_request_subtitle_order_item_request_field_info_annotation_none_type_required_true_discriminator_kind_input.py @@ -0,0 +1,64 @@ +# This file was auto-generated by Fern from our API Definition. + +from __future__ import annotations + +import typing + +import pydantic +import typing_extensions +from ..core.pydantic_utilities import IS_PYDANTIC_V2 +from ..core.unchecked_base_model import UncheckedBaseModel, UnionMetadata +from .cue_options_request import CueOptionsRequest +from .media_id import MediaId + + +class RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput_Dub( + UncheckedBaseModel +): + kind: typing.Literal["dub"] = "dub" + media_id: MediaId + source_language: str + destination_languages: typing.List[str] + include_captions: bool + include_source_captions: bool + instructions: typing.Optional[str] = None + captions_sdh: typing.Optional[bool] = 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 RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput_Subtitles( + UncheckedBaseModel +): + kind: typing.Literal["subtitles"] = "subtitles" + media_ids: typing.List[MediaId] + source_language: str + destination_languages: typing.List[str] + cue_options: typing.Optional[CueOptionsRequest] = None + sdh: typing.Optional[bool] = None + instructions: typing.Optional[str] = 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 + + +RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput = typing_extensions.Annotated[ + typing.Union[ + RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput_Dub, + RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput_Subtitles, + ], + UnionMetadata(discriminant="kind"), +] diff --git a/src/elevenlabs/types/root_model_annotated_union_dub_order_item_request_subtitle_order_item_request_field_info_annotation_none_type_required_true_discriminator_kind_output.py b/src/elevenlabs/types/root_model_annotated_union_dub_order_item_request_subtitle_order_item_request_field_info_annotation_none_type_required_true_discriminator_kind_output.py new file mode 100644 index 00000000..6c3cef13 --- /dev/null +++ b/src/elevenlabs/types/root_model_annotated_union_dub_order_item_request_subtitle_order_item_request_field_info_annotation_none_type_required_true_discriminator_kind_output.py @@ -0,0 +1,64 @@ +# This file was auto-generated by Fern from our API Definition. + +from __future__ import annotations + +import typing + +import pydantic +import typing_extensions +from ..core.pydantic_utilities import IS_PYDANTIC_V2 +from ..core.unchecked_base_model import UncheckedBaseModel, UnionMetadata +from .cue_options_request import CueOptionsRequest +from .media_id import MediaId + + +class RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindOutput_Dub( + UncheckedBaseModel +): + kind: typing.Literal["dub"] = "dub" + media_id: MediaId + source_language: str + destination_languages: typing.List[str] + include_captions: bool + include_source_captions: bool + instructions: typing.Optional[str] = None + captions_sdh: typing.Optional[bool] = 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 RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindOutput_Subtitles( + UncheckedBaseModel +): + kind: typing.Literal["subtitles"] = "subtitles" + media_ids: typing.List[MediaId] + source_language: str + destination_languages: typing.List[str] + cue_options: typing.Optional[CueOptionsRequest] = None + sdh: typing.Optional[bool] = None + instructions: typing.Optional[str] = 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 + + +RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindOutput = typing_extensions.Annotated[ + typing.Union[ + RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindOutput_Dub, + RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindOutput_Subtitles, + ], + UnionMetadata(discriminant="kind"), +] diff --git a/src/elevenlabs/types/root_model_annotated_union_paired_languages_response_single_languages_response_field_info_annotation_none_type_required_true_discriminator_kind.py b/src/elevenlabs/types/root_model_annotated_union_paired_languages_response_single_languages_response_field_info_annotation_none_type_required_true_discriminator_kind.py new file mode 100644 index 00000000..b34240c9 --- /dev/null +++ b/src/elevenlabs/types/root_model_annotated_union_paired_languages_response_single_languages_response_field_info_annotation_none_type_required_true_discriminator_kind.py @@ -0,0 +1,53 @@ +# This file was auto-generated by Fern from our API Definition. + +from __future__ import annotations + +import typing + +import pydantic +import typing_extensions +from ..core.pydantic_utilities import IS_PYDANTIC_V2 +from ..core.unchecked_base_model import UncheckedBaseModel, UnionMetadata +from .language_info import LanguageInfo +from .language_pair_info import LanguagePairInfo + + +class RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind_Pair( + UncheckedBaseModel +): + kind: typing.Literal["pair"] = "pair" + language_pairs: typing.List[LanguagePairInfo] + + 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 RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind_Single( + UncheckedBaseModel +): + kind: typing.Literal["single"] = "single" + languages: typing.List[LanguageInfo] + + 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 + + +RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind = typing_extensions.Annotated[ + typing.Union[ + RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind_Pair, + RootModelAnnotatedUnionPairedLanguagesResponseSingleLanguagesResponseFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKind_Single, + ], + UnionMetadata(discriminant="kind"), +] diff --git a/src/elevenlabs/types/rtt_audio_payload.py b/src/elevenlabs/types/rtt_audio_payload.py new file mode 100644 index 00000000..faf25e41 --- /dev/null +++ b/src/elevenlabs/types/rtt_audio_payload.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 RttAudioPayload(UncheckedBaseModel): + """ + Base64-encoded audio of the translated speech. + """ + + message_type: typing.Literal["audio"] = pydantic.Field(default="audio") + """ + The message type identifier. + """ + + data: str = pydantic.Field() + """ + Base64-encoded audio data. + """ + + sample_rate: int = pydantic.Field() + """ + Sample rate of the audio in Hz. + """ + + 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/rtt_end_of_stream_payload.py b/src/elevenlabs/types/rtt_end_of_stream_payload.py new file mode 100644 index 00000000..070f9ea9 --- /dev/null +++ b/src/elevenlabs/types/rtt_end_of_stream_payload.py @@ -0,0 +1,27 @@ +# 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 RttEndOfStreamPayload(UncheckedBaseModel): + """ + Signal that the client has finished sending audio. + """ + + message_type: typing.Literal["end_of_stream"] = pydantic.Field(default="end_of_stream") + """ + The message type 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/elevenlabs/types/api_integration_doc_response.py b/src/elevenlabs/types/rtt_error_payload.py similarity index 67% rename from src/elevenlabs/types/api_integration_doc_response.py rename to src/elevenlabs/types/rtt_error_payload.py index 2e1021ea..e04cff3b 100644 --- a/src/elevenlabs/types/api_integration_doc_response.py +++ b/src/elevenlabs/types/rtt_error_payload.py @@ -7,20 +7,19 @@ from ..core.unchecked_base_model import UncheckedBaseModel -class ApiIntegrationDocResponse(UncheckedBaseModel): - id: str = pydantic.Field() +class RttErrorPayload(UncheckedBaseModel): """ - Integration identifier + Error encountered during translation. """ - name: str = pydantic.Field() + message_type: typing.Literal["error"] = pydantic.Field(default="error") """ - Display name of the integration + The message type identifier. """ - doc_mdx: str = pydantic.Field() + error: str = pydantic.Field() """ - Full MDX documentation content for the integration + Error message. """ if IS_PYDANTIC_V2: diff --git a/src/elevenlabs/types/rtt_final_transcript_payload.py b/src/elevenlabs/types/rtt_final_transcript_payload.py new file mode 100644 index 00000000..aee4ac82 --- /dev/null +++ b/src/elevenlabs/types/rtt_final_transcript_payload.py @@ -0,0 +1,32 @@ +# 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 RttFinalTranscriptPayload(UncheckedBaseModel): + """ + Final transcription of a completed segment. + """ + + message_type: typing.Literal["final_transcript"] = pydantic.Field(default="final_transcript") + """ + The message type identifier. + """ + + text: str = pydantic.Field() + """ + Final transcription 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/elevenlabs/types/rtt_input_audio_chunk_payload.py b/src/elevenlabs/types/rtt_input_audio_chunk_payload.py new file mode 100644 index 00000000..e2f74fe2 --- /dev/null +++ b/src/elevenlabs/types/rtt_input_audio_chunk_payload.py @@ -0,0 +1,32 @@ +# 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 RttInputAudioChunkPayload(UncheckedBaseModel): + """ + A chunk of audio to be translated. + """ + + message_type: typing.Literal["input_audio_chunk"] = pydantic.Field(default="input_audio_chunk") + """ + The message type identifier. + """ + + audio_base_64: str = pydantic.Field() + """ + Base64-encoded audio data. Recommended chunk size is around 100 ms of audio. + """ + + 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/rtt_input_format_enum.py b/src/elevenlabs/types/rtt_input_format_enum.py new file mode 100644 index 00000000..9760b10e --- /dev/null +++ b/src/elevenlabs/types/rtt_input_format_enum.py @@ -0,0 +1,7 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +RttInputFormatEnum = typing.Union[ + typing.Literal["pcm_8000", "pcm_16000", "pcm_22050", "pcm_24000", "pcm_44100", "pcm_48000", "ulaw_8000"], typing.Any +] diff --git a/src/elevenlabs/types/rtt_output_format_enum.py b/src/elevenlabs/types/rtt_output_format_enum.py new file mode 100644 index 00000000..873943e3 --- /dev/null +++ b/src/elevenlabs/types/rtt_output_format_enum.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +RttOutputFormatEnum = typing.Union[ + typing.Literal[ + "mp3_22050_32", + "mp3_44100_32", + "mp3_44100_64", + "mp3_44100_96", + "mp3_44100_128", + "mp3_44100_192", + "pcm_16000", + "pcm_22050", + "pcm_24000", + "pcm_44100", + "ulaw_8000", + ], + typing.Any, +] diff --git a/src/elevenlabs/types/rtt_partial_transcript_payload.py b/src/elevenlabs/types/rtt_partial_transcript_payload.py new file mode 100644 index 00000000..afd94eac --- /dev/null +++ b/src/elevenlabs/types/rtt_partial_transcript_payload.py @@ -0,0 +1,32 @@ +# 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 RttPartialTranscriptPayload(UncheckedBaseModel): + """ + Interim transcription of the source audio. + """ + + message_type: typing.Literal["partial_transcript"] = pydantic.Field(default="partial_transcript") + """ + The message type identifier. + """ + + text: str = pydantic.Field() + """ + Partial transcription 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/elevenlabs/types/rtt_session_started_payload.py b/src/elevenlabs/types/rtt_session_started_payload.py new file mode 100644 index 00000000..b23237bf --- /dev/null +++ b/src/elevenlabs/types/rtt_session_started_payload.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 RttSessionStartedPayload(UncheckedBaseModel): + """ + Confirms the session has been initialized. + """ + + message_type: typing.Literal["session_started"] = pydantic.Field(default="session_started") + """ + The message type identifier. + """ + + session_id: str = pydantic.Field() + """ + Unique identifier for this session. + """ + + client_session_id: typing.Optional[str] = pydantic.Field(default=None) + """ + Client-defined session identifier, if provided during connection. + """ + + 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/rtt_status_payload.py b/src/elevenlabs/types/rtt_status_payload.py new file mode 100644 index 00000000..a5e6ed76 --- /dev/null +++ b/src/elevenlabs/types/rtt_status_payload.py @@ -0,0 +1,32 @@ +# 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 RttStatusPayload(UncheckedBaseModel): + """ + Session lifecycle update. + """ + + message_type: typing.Literal["status"] = pydantic.Field(default="status") + """ + The message type identifier. + """ + + status: str = pydantic.Field() + """ + Current session status (`started` or `stopped`). + """ + + 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/rtt_translation_payload.py b/src/elevenlabs/types/rtt_translation_payload.py new file mode 100644 index 00000000..f093f862 --- /dev/null +++ b/src/elevenlabs/types/rtt_translation_payload.py @@ -0,0 +1,32 @@ +# 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 RttTranslationPayload(UncheckedBaseModel): + """ + Translated text in the target language. + """ + + message_type: typing.Literal["translation"] = pydantic.Field(default="translation") + """ + The message type identifier. + """ + + text: str = pydantic.Field() + """ + Translated 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/elevenlabs/types/single_languages_response.py b/src/elevenlabs/types/single_languages_response.py new file mode 100644 index 00000000..5087c22c --- /dev/null +++ b/src/elevenlabs/types/single_languages_response.py @@ -0,0 +1,24 @@ +# 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 .language_info import LanguageInfo + + +class SingleLanguagesResponse(UncheckedBaseModel): + languages: typing.List[LanguageInfo] = pydantic.Field() + """ + The list of available languages. + """ + + 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/speech_engine_conversation_initiation_client_data_config.py b/src/elevenlabs/types/speech_engine_conversation_initiation_client_data_config.py new file mode 100644 index 00000000..a536a4f6 --- /dev/null +++ b/src/elevenlabs/types/speech_engine_conversation_initiation_client_data_config.py @@ -0,0 +1,23 @@ +# 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 SpeechEngineConversationInitiationClientDataConfig(UncheckedBaseModel): + first_message: typing.Optional[bool] = pydantic.Field(default=None) + """ + Whether the first message can be overridden by the client + """ + + 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/speech_engine_response.py b/src/elevenlabs/types/speech_engine_response.py index b3901795..fd08544f 100644 --- a/src/elevenlabs/types/speech_engine_response.py +++ b/src/elevenlabs/types/speech_engine_response.py @@ -12,6 +12,7 @@ from .conversation_config_output import ConversationConfigOutput from .privacy_config_output import PrivacyConfigOutput from .speech_engine_config import SpeechEngineConfig +from .speech_engine_conversation_initiation_client_data_config import SpeechEngineConversationInitiationClientDataConfig from .tts_conversational_config_output import TtsConversationalConfigOutput @@ -71,6 +72,11 @@ class SpeechEngineResponse(UncheckedBaseModel): Arbitrary tags for categorization and filtering """ + overrides: SpeechEngineConversationInitiationClientDataConfig = pydantic.Field() + """ + Override settings the client may set during conversation initiation + """ + metadata: AgentMetadataDbModel = pydantic.Field() """ Creation and update timestamps with source information diff --git a/src/elevenlabs/types/submit_order_response.py b/src/elevenlabs/types/submit_order_response.py new file mode 100644 index 00000000..ca8c3a9f --- /dev/null +++ b/src/elevenlabs/types/submit_order_response.py @@ -0,0 +1,36 @@ +# This file was auto-generated by Fern from our API Definition. + +import datetime as dt +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2 +from ..core.unchecked_base_model import UncheckedBaseModel +from .order_id import OrderId +from .order_state import OrderState + + +class SubmitOrderResponse(UncheckedBaseModel): + order_id: OrderId = pydantic.Field() + """ + The ID of the submitted order. + """ + + state: OrderState = pydantic.Field() + """ + The current state of the order after submission. + """ + + submitted_at: dt.datetime = pydantic.Field() + """ + The timestamp when the order was submitted. + """ + + 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/subtitle_order_item_request.py b/src/elevenlabs/types/subtitle_order_item_request.py new file mode 100644 index 00000000..3c2f6eb3 --- /dev/null +++ b/src/elevenlabs/types/subtitle_order_item_request.py @@ -0,0 +1,50 @@ +# 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 .cue_options_request import CueOptionsRequest +from .media_id import MediaId + + +class SubtitleOrderItemRequest(UncheckedBaseModel): + media_ids: typing.List[MediaId] = pydantic.Field() + """ + The IDs of the uploaded media files to generate subtitles for. + """ + + source_language: str = pydantic.Field() + """ + The language code of the source media (e.g. 'en', 'es'). + """ + + destination_languages: typing.List[str] = pydantic.Field() + """ + List of target language codes. Subtitles will be generated for each media file in each destination language. + """ + + cue_options: typing.Optional[CueOptionsRequest] = pydantic.Field(default=None) + """ + Formatting options for subtitle cues such as duration, line count, and character limits. + """ + + sdh: typing.Optional[bool] = pydantic.Field(default=None) + """ + Whether subtitles should use SDH format, which includes descriptions for deaf and hard-of-hearing viewers. + """ + + instructions: typing.Optional[str] = pydantic.Field(default=None) + """ + Optional free-text instructions for the subtitling team. + """ + + 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/create_speech_engine_response.py b/src/elevenlabs/types/update_order_request.py similarity index 79% rename from src/elevenlabs/types/create_speech_engine_response.py rename to src/elevenlabs/types/update_order_request.py index 4f389e2c..61ca1c72 100644 --- a/src/elevenlabs/types/create_speech_engine_response.py +++ b/src/elevenlabs/types/update_order_request.py @@ -7,10 +7,10 @@ from ..core.unchecked_base_model import UncheckedBaseModel -class CreateSpeechEngineResponse(UncheckedBaseModel): - speech_engine_id: str = pydantic.Field() +class UpdateOrderRequest(UncheckedBaseModel): + name: str = pydantic.Field() """ - The speech engine resource ID + The new name for the order. """ if IS_PYDANTIC_V2: diff --git a/src/elevenlabs/types/update_order_response.py b/src/elevenlabs/types/update_order_response.py new file mode 100644 index 00000000..0db03948 --- /dev/null +++ b/src/elevenlabs/types/update_order_response.py @@ -0,0 +1,23 @@ +# 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 UpdateOrderResponse(UncheckedBaseModel): + name: str = pydantic.Field() + """ + The updated order name. + """ + + 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/upsert_order_item_request.py b/src/elevenlabs/types/upsert_order_item_request.py new file mode 100644 index 00000000..e980656c --- /dev/null +++ b/src/elevenlabs/types/upsert_order_item_request.py @@ -0,0 +1,32 @@ +# 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 .item_id import ItemId +from .root_model_annotated_union_dub_order_item_request_subtitle_order_item_request_field_info_annotation_none_type_required_true_discriminator_kind_input import ( + RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput, +) + + +class UpsertOrderItemRequest(UncheckedBaseModel): + item: RootModelAnnotatedUnionDubOrderItemRequestSubtitleOrderItemRequestFieldInfoAnnotationNoneTypeRequiredTrueDiscriminatorKindInput = pydantic.Field() + """ + The order item to add or update. + """ + + item_id: typing.Optional[ItemId] = pydantic.Field(default=None) + """ + The ID of an existing item to update. Omit to create a new item. + """ + + 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/upsert_order_item_response.py b/src/elevenlabs/types/upsert_order_item_response.py new file mode 100644 index 00000000..2fb75589 --- /dev/null +++ b/src/elevenlabs/types/upsert_order_item_response.py @@ -0,0 +1,30 @@ +# 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 .item_id import ItemId +from .quote_info import QuoteInfo + + +class UpsertOrderItemResponse(UncheckedBaseModel): + item_id: ItemId = pydantic.Field() + """ + The ID of the upserted order item. + """ + + quote: typing.Optional[QuoteInfo] = pydantic.Field(default=None) + """ + The quoted price for this item. + """ + + 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/voice_statistics_response_model.py b/src/elevenlabs/types/voice_statistics_response_model.py index a47b1ec9..003c2e8a 100644 --- a/src/elevenlabs/types/voice_statistics_response_model.py +++ b/src/elevenlabs/types/voice_statistics_response_model.py @@ -23,6 +23,11 @@ class VoiceStatisticsResponseModel(UncheckedBaseModel): The number of converted characters for this voice. """ + credits_needed_to_convert: typing.Optional[int] = pydantic.Field(default=None) + """ + The number of credits needed to convert the remaining audio for this voice. + """ + if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 else: diff --git a/src/elevenlabs/types/workspace_resource_type.py b/src/elevenlabs/types/workspace_resource_type.py index d6c999cf..7ad4c9aa 100644 --- a/src/elevenlabs/types/workspace_resource_type.py +++ b/src/elevenlabs/types/workspace_resource_type.py @@ -43,6 +43,7 @@ "avatars", "avatar_video_generations", "resource_collection", + "studio_projects", ], typing.Any, ] diff --git a/src/elevenlabs/usage/client.py b/src/elevenlabs/usage/client.py index cec797c9..14228519 100644 --- a/src/elevenlabs/usage/client.py +++ b/src/elevenlabs/usage/client.py @@ -39,7 +39,7 @@ def get( request_options: typing.Optional[RequestOptions] = None, ) -> UsageCharactersResponseModel: """ - (Deprecated) This endpoint is deprecated. Use /v1/workspace/analytics/query/usage-by-product-over-time instead. Returns the usage metrics for the current user or the entire workspace they are part of. The response provides a time axis based on the specified aggregation interval (default: day), with usage values for each interval along that axis. Usage is broken down by the selected breakdown type. For example, breakdown type "voice" will return the usage of each voice for each interval along the time axis. + (Deprecated) This endpoint is deprecated. Use /v1/workspace/analytics/query/usage-by-product-over-time instead, which exposes the bucket size as `interval_seconds` (an integer in seconds) rather than `aggregation_interval`. Returns the usage metrics for the current user or the entire workspace they are part of. The response provides a time axis based on the specified aggregation interval (default: day), with usage values for each interval along that axis. Usage is broken down by the selected breakdown type. For example, breakdown type "voice" will return the usage of each voice for each interval along the time axis. Parameters ---------- @@ -130,7 +130,7 @@ async def get( request_options: typing.Optional[RequestOptions] = None, ) -> UsageCharactersResponseModel: """ - (Deprecated) This endpoint is deprecated. Use /v1/workspace/analytics/query/usage-by-product-over-time instead. Returns the usage metrics for the current user or the entire workspace they are part of. The response provides a time axis based on the specified aggregation interval (default: day), with usage values for each interval along that axis. Usage is broken down by the selected breakdown type. For example, breakdown type "voice" will return the usage of each voice for each interval along the time axis. + (Deprecated) This endpoint is deprecated. Use /v1/workspace/analytics/query/usage-by-product-over-time instead, which exposes the bucket size as `interval_seconds` (an integer in seconds) rather than `aggregation_interval`. Returns the usage metrics for the current user or the entire workspace they are part of. The response provides a time axis based on the specified aggregation interval (default: day), with usage values for each interval along that axis. Usage is broken down by the selected breakdown type. For example, breakdown type "voice" will return the usage of each voice for each interval along the time axis. Parameters ---------- diff --git a/src/elevenlabs/usage/raw_client.py b/src/elevenlabs/usage/raw_client.py index 42443d5f..393249bb 100644 --- a/src/elevenlabs/usage/raw_client.py +++ b/src/elevenlabs/usage/raw_client.py @@ -32,7 +32,7 @@ def get( request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[UsageCharactersResponseModel]: """ - (Deprecated) This endpoint is deprecated. Use /v1/workspace/analytics/query/usage-by-product-over-time instead. Returns the usage metrics for the current user or the entire workspace they are part of. The response provides a time axis based on the specified aggregation interval (default: day), with usage values for each interval along that axis. Usage is broken down by the selected breakdown type. For example, breakdown type "voice" will return the usage of each voice for each interval along the time axis. + (Deprecated) This endpoint is deprecated. Use /v1/workspace/analytics/query/usage-by-product-over-time instead, which exposes the bucket size as `interval_seconds` (an integer in seconds) rather than `aggregation_interval`. Returns the usage metrics for the current user or the entire workspace they are part of. The response provides a time axis based on the specified aggregation interval (default: day), with usage values for each interval along that axis. Usage is broken down by the selected breakdown type. For example, breakdown type "voice" will return the usage of each voice for each interval along the time axis. Parameters ---------- @@ -123,7 +123,7 @@ async def get( request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[UsageCharactersResponseModel]: """ - (Deprecated) This endpoint is deprecated. Use /v1/workspace/analytics/query/usage-by-product-over-time instead. Returns the usage metrics for the current user or the entire workspace they are part of. The response provides a time axis based on the specified aggregation interval (default: day), with usage values for each interval along that axis. Usage is broken down by the selected breakdown type. For example, breakdown type "voice" will return the usage of each voice for each interval along the time axis. + (Deprecated) This endpoint is deprecated. Use /v1/workspace/analytics/query/usage-by-product-over-time instead, which exposes the bucket size as `interval_seconds` (an integer in seconds) rather than `aggregation_interval`. Returns the usage metrics for the current user or the entire workspace they are part of. The response provides a time axis based on the specified aggregation interval (default: day), with usage values for each interval along that axis. Usage is broken down by the selected breakdown type. For example, breakdown type "voice" will return the usage of each voice for each interval along the time axis. Parameters ---------- diff --git a/src/elevenlabs/v_1_realtime_translation/__init__.py b/src/elevenlabs/v_1_realtime_translation/__init__.py new file mode 100644 index 00000000..a2508ba7 --- /dev/null +++ b/src/elevenlabs/v_1_realtime_translation/__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 ReceiveRttMessage, SendRttMessage +_dynamic_imports: typing.Dict[str, str] = {"ReceiveRttMessage": ".types", "SendRttMessage": ".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__ = ["ReceiveRttMessage", "SendRttMessage"] diff --git a/src/elevenlabs/v_1_realtime_translation/types/__init__.py b/src/elevenlabs/v_1_realtime_translation/types/__init__.py new file mode 100644 index 00000000..7a065f02 --- /dev/null +++ b/src/elevenlabs/v_1_realtime_translation/types/__init__.py @@ -0,0 +1,38 @@ +# 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_rtt_message import ReceiveRttMessage + from .send_rtt_message import SendRttMessage +_dynamic_imports: typing.Dict[str, str] = { + "ReceiveRttMessage": ".receive_rtt_message", + "SendRttMessage": ".send_rtt_message", +} + + +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__ = ["ReceiveRttMessage", "SendRttMessage"] diff --git a/src/elevenlabs/v_1_realtime_translation/types/receive_rtt_message.py b/src/elevenlabs/v_1_realtime_translation/types/receive_rtt_message.py new file mode 100644 index 00000000..8dd72cee --- /dev/null +++ b/src/elevenlabs/v_1_realtime_translation/types/receive_rtt_message.py @@ -0,0 +1,21 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +from ...types.rtt_audio_payload import RttAudioPayload +from ...types.rtt_error_payload import RttErrorPayload +from ...types.rtt_final_transcript_payload import RttFinalTranscriptPayload +from ...types.rtt_partial_transcript_payload import RttPartialTranscriptPayload +from ...types.rtt_session_started_payload import RttSessionStartedPayload +from ...types.rtt_status_payload import RttStatusPayload +from ...types.rtt_translation_payload import RttTranslationPayload + +ReceiveRttMessage = typing.Union[ + RttSessionStartedPayload, + RttStatusPayload, + RttPartialTranscriptPayload, + RttFinalTranscriptPayload, + RttTranslationPayload, + RttAudioPayload, + RttErrorPayload, +] diff --git a/src/elevenlabs/v_1_realtime_translation/types/send_rtt_message.py b/src/elevenlabs/v_1_realtime_translation/types/send_rtt_message.py new file mode 100644 index 00000000..7b709971 --- /dev/null +++ b/src/elevenlabs/v_1_realtime_translation/types/send_rtt_message.py @@ -0,0 +1,8 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +from ...types.rtt_end_of_stream_payload import RttEndOfStreamPayload +from ...types.rtt_input_audio_chunk_payload import RttInputAudioChunkPayload + +SendRttMessage = typing.Union[RttInputAudioChunkPayload, RttEndOfStreamPayload] diff --git a/src/elevenlabs/workspace/usage/client.py b/src/elevenlabs/workspace/usage/client.py index c5bbc00c..1e7ebf11 100644 --- a/src/elevenlabs/workspace/usage/client.py +++ b/src/elevenlabs/workspace/usage/client.py @@ -54,6 +54,7 @@ def get_usage_by_product_over_time( End of the time range as a Unix timestamp in milliseconds. Must be at least 2020-01-01. interval_seconds : typing.Optional[int] + Bucket size in seconds. Each row in the response covers this many seconds of usage. For example, pass 3600 for hourly buckets or 86400 for daily buckets. group_by : typing.Optional[typing.Sequence[BodyGetWorkspaceUsageV1WorkspaceAnalyticsQueryUsageByProductOverTimePostGroupByItem]] @@ -129,6 +130,7 @@ async def get_usage_by_product_over_time( End of the time range as a Unix timestamp in milliseconds. Must be at least 2020-01-01. interval_seconds : typing.Optional[int] + Bucket size in seconds. Each row in the response covers this many seconds of usage. For example, pass 3600 for hourly buckets or 86400 for daily buckets. group_by : typing.Optional[typing.Sequence[BodyGetWorkspaceUsageV1WorkspaceAnalyticsQueryUsageByProductOverTimePostGroupByItem]] diff --git a/src/elevenlabs/workspace/usage/raw_client.py b/src/elevenlabs/workspace/usage/raw_client.py index 37c68866..f07e6bc5 100644 --- a/src/elevenlabs/workspace/usage/raw_client.py +++ b/src/elevenlabs/workspace/usage/raw_client.py @@ -48,6 +48,7 @@ def get_usage_by_product_over_time( End of the time range as a Unix timestamp in milliseconds. Must be at least 2020-01-01. interval_seconds : typing.Optional[int] + Bucket size in seconds. Each row in the response covers this many seconds of usage. For example, pass 3600 for hourly buckets or 86400 for daily buckets. group_by : typing.Optional[typing.Sequence[BodyGetWorkspaceUsageV1WorkspaceAnalyticsQueryUsageByProductOverTimePostGroupByItem]] @@ -134,6 +135,7 @@ async def get_usage_by_product_over_time( End of the time range as a Unix timestamp in milliseconds. Must be at least 2020-01-01. interval_seconds : typing.Optional[int] + Bucket size in seconds. Each row in the response covers this many seconds of usage. For example, pass 3600 for hourly buckets or 86400 for daily buckets. group_by : typing.Optional[typing.Sequence[BodyGetWorkspaceUsageV1WorkspaceAnalyticsQueryUsageByProductOverTimePostGroupByItem]] diff --git a/tests/test_speech_engine_custom.py b/tests/test_speech_engine_custom.py index 71247ac9..48d86e72 100644 --- a/tests/test_speech_engine_custom.py +++ b/tests/test_speech_engine_custom.py @@ -8,8 +8,8 @@ from elevenlabs.speech_engine.client import SpeechEngineClient as AutogeneratedSpeechEngineClient from elevenlabs.speech_engine.resource import SpeechEngineResource from elevenlabs.speech_engine_custom import AsyncSpeechEngineClient, SpeechEngineClient -from elevenlabs.types.create_speech_engine_response import CreateSpeechEngineResponse from elevenlabs.types.speech_engine_config import SpeechEngineConfig +from elevenlabs.types.speech_engine_response import SpeechEngineResponse def _make_sync_client() -> SpeechEngineClient: @@ -27,7 +27,7 @@ def _make_async_client() -> AsyncSpeechEngineClient: def test_create_returns_resource() -> None: client = _make_sync_client() - mock_response = CreateSpeechEngineResponse(speech_engine_id="seng_abc") + mock_response = MagicMock(spec=SpeechEngineResponse, speech_engine_id="seng_abc") with patch.object(AutogeneratedSpeechEngineClient, "create", return_value=mock_response): result = client.create(speech_engine=SpeechEngineConfig(ws_url="wss://test")) @@ -64,7 +64,7 @@ def test_update_returns_resource() -> None: @pytest.mark.asyncio async def test_async_create_returns_resource() -> None: client = _make_async_client() - mock_response = CreateSpeechEngineResponse(speech_engine_id="seng_abc") + mock_response = MagicMock(spec=SpeechEngineResponse, speech_engine_id="seng_abc") with patch.object(AutogeneratedAsyncSpeechEngineClient, "create", new_callable=AsyncMock, return_value=mock_response): result = await client.create(speech_engine=SpeechEngineConfig(ws_url="wss://test"))