speechify-api 4.0.0__tar.gz → 5.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. speechify_api-5.0.0/LICENSE +21 -0
  2. {speechify_api-4.0.0 → speechify_api-5.0.0}/PKG-INFO +10 -7
  3. {speechify_api-4.0.0 → speechify_api-5.0.0}/README.md +5 -4
  4. {speechify_api-4.0.0 → speechify_api-5.0.0}/pyproject.toml +6 -4
  5. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/__init__.py +172 -1
  6. speechify_api-5.0.0/src/speechify/audio/__init__.py +130 -0
  7. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/audio/client.py +151 -37
  8. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/audio/raw_client.py +276 -30
  9. speechify_api-5.0.0/src/speechify/audio/types/__init__.py +125 -0
  10. speechify_api-5.0.0/src/speechify/audio/types/audio_stream_input_model.py +5 -0
  11. speechify_api-5.0.0/src/speechify/audio/types/audio_stream_input_output_format.py +30 -0
  12. speechify_api-5.0.0/src/speechify/audio/types/audio_stream_input_speech_marks.py +5 -0
  13. speechify_api-5.0.0/src/speechify/audio/types/get_speech_request_model.py +5 -0
  14. speechify_api-5.0.0/src/speechify/audio/types/input_close.py +24 -0
  15. speechify_api-5.0.0/src/speechify/audio/types/input_close_type.py +5 -0
  16. speechify_api-5.0.0/src/speechify/audio/types/input_flush.py +24 -0
  17. speechify_api-5.0.0/src/speechify/audio/types/input_flush_type.py +5 -0
  18. speechify_api-5.0.0/src/speechify/audio/types/input_text.py +28 -0
  19. speechify_api-5.0.0/src/speechify/audio/types/input_text_type.py +5 -0
  20. speechify_api-5.0.0/src/speechify/audio/types/session_pronunciations.py +29 -0
  21. speechify_api-5.0.0/src/speechify/audio/types/session_pronunciations_pronunciations_item.py +10 -0
  22. speechify_api-5.0.0/src/speechify/audio/types/session_pronunciations_pronunciations_item_alias.py +36 -0
  23. speechify_api-5.0.0/src/speechify/audio/types/session_pronunciations_pronunciations_item_ipa.py +36 -0
  24. speechify_api-5.0.0/src/speechify/audio/types/session_pronunciations_type.py +5 -0
  25. speechify_api-5.0.0/src/speechify/audio/types/speech_chunk.py +43 -0
  26. speechify_api-5.0.0/src/speechify/audio/types/speech_chunk_speech_marks_item.py +28 -0
  27. speechify_api-5.0.0/src/speechify/audio/types/speech_chunk_type.py +5 -0
  28. speechify_api-5.0.0/src/speechify/audio/types/speech_done.py +35 -0
  29. speechify_api-5.0.0/src/speechify/audio/types/speech_done_reason.py +5 -0
  30. speechify_api-5.0.0/src/speechify/audio/types/speech_done_type.py +5 -0
  31. speechify_api-5.0.0/src/speechify/audio/types/speech_error.py +34 -0
  32. speechify_api-5.0.0/src/speechify/audio/types/speech_error_error.py +64 -0
  33. speechify_api-5.0.0/src/speechify/audio/types/speech_error_error_code.py +181 -0
  34. speechify_api-5.0.0/src/speechify/audio/types/speech_error_type.py +5 -0
  35. speechify_api-5.0.0/src/speechify/audio/types/speech_flushed.py +24 -0
  36. speechify_api-5.0.0/src/speechify/audio/types/speech_flushed_type.py +5 -0
  37. speechify_api-5.0.0/src/speechify/audio/watermark/client.py +269 -0
  38. speechify_api-5.0.0/src/speechify/audio/watermark/raw_client.py +648 -0
  39. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/client.py +87 -38
  40. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/core/client_wrapper.py +40 -20
  41. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/core/http_client.py +221 -39
  42. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/core/http_response.py +4 -0
  43. speechify_api-5.0.0/src/speechify/core/http_sse/_api.py +455 -0
  44. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/core/http_sse/_decoders.py +13 -0
  45. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/core/jsonable_encoder.py +26 -1
  46. speechify_api-5.0.0/src/speechify/core/pagination.py +165 -0
  47. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/core/pydantic_utilities.py +114 -82
  48. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/core/request_options.py +9 -1
  49. speechify_api-5.0.0/src/speechify/environment.py +14 -0
  50. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/models/client.py +2 -2
  51. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/models/raw_client.py +2 -0
  52. {speechify_api-4.0.0/src/speechify/audio → speechify_api-5.0.0/src/speechify/projects}/__init__.py +3 -18
  53. speechify_api-5.0.0/src/speechify/projects/client.py +1458 -0
  54. speechify_api-5.0.0/src/speechify/projects/raw_client.py +3043 -0
  55. speechify_api-5.0.0/src/speechify/projects/types/__init__.py +34 -0
  56. speechify_api-5.0.0/src/speechify/projects/types/delete_project_request_mode.py +5 -0
  57. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/types/__init__.py +84 -0
  58. speechify_api-5.0.0/src/speechify/types/billing_entitlements.py +125 -0
  59. speechify_api-5.0.0/src/speechify/types/billing_entitlements_max_llm_model_class.py +5 -0
  60. speechify_api-5.0.0/src/speechify/types/entitlements_response.py +33 -0
  61. speechify_api-5.0.0/src/speechify/types/error_code.py +181 -0
  62. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/types/get_stream_request.py +13 -2
  63. speechify_api-5.0.0/src/speechify/types/get_stream_request_model.py +5 -0
  64. speechify_api-5.0.0/src/speechify/types/get_voice.py +63 -0
  65. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/types/get_voices_model.py +8 -1
  66. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/types/get_voices_model_name.py +1 -1
  67. speechify_api-5.0.0/src/speechify/types/list_projects_response.py +21 -0
  68. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/types/list_voices_response.py +3 -3
  69. speechify_api-5.0.0/src/speechify/types/list_webhook_endpoint_deliveries_response.py +25 -0
  70. speechify_api-5.0.0/src/speechify/types/list_webhook_endpoints_response.py +25 -0
  71. speechify_api-5.0.0/src/speechify/types/model.py +128 -0
  72. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/types/models_response.py +8 -1
  73. speechify_api-5.0.0/src/speechify/types/project.py +144 -0
  74. speechify_api-5.0.0/src/speechify/types/project_audit_event.py +73 -0
  75. speechify_api-5.0.0/src/speechify/types/project_audit_event_type.py +8 -0
  76. speechify_api-5.0.0/src/speechify/types/project_audit_response.py +25 -0
  77. speechify_api-5.0.0/src/speechify/types/project_member.py +33 -0
  78. speechify_api-5.0.0/src/speechify/types/project_members_response.py +21 -0
  79. speechify_api-5.0.0/src/speechify/types/project_monthly_budget_status.py +5 -0
  80. speechify_api-5.0.0/src/speechify/types/project_restore.py +56 -0
  81. speechify_api-5.0.0/src/speechify/types/project_still_revoked_counts.py +27 -0
  82. speechify_api-5.0.0/src/speechify/types/pronunciation.py +8 -0
  83. speechify_api-5.0.0/src/speechify/types/pronunciation_alias.py +31 -0
  84. speechify_api-5.0.0/src/speechify/types/pronunciation_case_sensitive.py +6 -0
  85. speechify_api-5.0.0/src/speechify/types/pronunciation_ipa.py +31 -0
  86. speechify_api-5.0.0/src/speechify/types/pronunciation_ipa_text.py +6 -0
  87. speechify_api-5.0.0/src/speechify/types/pronunciation_text.py +6 -0
  88. speechify_api-5.0.0/src/speechify/types/pronunciations.py +14 -0
  89. speechify_api-5.0.0/src/speechify/types/safety_identifier.py +10 -0
  90. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/types/speech_error_event.py +2 -1
  91. speechify_api-5.0.0/src/speechify/types/watermark_detection_response.py +38 -0
  92. speechify_api-5.0.0/src/speechify/types/watermark_verification_response.py +34 -0
  93. speechify_api-5.0.0/src/speechify/types/webhook_delivery_status.py +5 -0
  94. speechify_api-5.0.0/src/speechify/types/webhook_endpoint.py +103 -0
  95. speechify_api-5.0.0/src/speechify/types/webhook_endpoint_delivery.py +70 -0
  96. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/voices/client.py +92 -28
  97. speechify_api-5.0.0/src/speechify/voices/consent_challenges/__init__.py +4 -0
  98. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/voices/consent_challenges/client.py +6 -2
  99. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/voices/consent_challenges/raw_client.py +6 -0
  100. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/voices/raw_client.py +92 -18
  101. speechify_api-5.0.0/src/speechify/webhooks/__init__.py +34 -0
  102. speechify_api-5.0.0/src/speechify/webhooks/client.py +63 -0
  103. speechify_api-5.0.0/src/speechify/webhooks/endpoints/__init__.py +4 -0
  104. speechify_api-5.0.0/src/speechify/webhooks/endpoints/client.py +912 -0
  105. speechify_api-5.0.0/src/speechify/webhooks/endpoints/raw_client.py +1828 -0
  106. speechify_api-5.0.0/src/speechify/webhooks/raw_client.py +13 -0
  107. speechify_api-5.0.0/src/speechify/workspaces/__init__.py +4 -0
  108. speechify_api-5.0.0/src/speechify/workspaces/client.py +124 -0
  109. speechify_api-5.0.0/src/speechify/workspaces/raw_client.py +195 -0
  110. speechify_api-4.0.0/src/speechify/audio/types/__init__.py +0 -47
  111. speechify_api-4.0.0/src/speechify/audio/types/get_speech_request_model.py +0 -7
  112. speechify_api-4.0.0/src/speechify/core/http_sse/_api.py +0 -170
  113. speechify_api-4.0.0/src/speechify/core/pagination.py +0 -82
  114. speechify_api-4.0.0/src/speechify/environment.py +0 -7
  115. speechify_api-4.0.0/src/speechify/types/error_code.py +0 -78
  116. speechify_api-4.0.0/src/speechify/types/get_stream_request_model.py +0 -7
  117. speechify_api-4.0.0/src/speechify/types/get_voice.py +0 -30
  118. speechify_api-4.0.0/src/speechify/types/model.py +0 -94
  119. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/_default_clients.py +0 -0
  120. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/audio/types/get_speech_request_audio_format.py +0 -0
  121. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/audio/types/stream_audio_request_accept.py +0 -0
  122. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/audio/types/stream_with_timestamps_audio_request_accept.py +0 -0
  123. {speechify_api-4.0.0/src/speechify/models → speechify_api-5.0.0/src/speechify/audio/watermark}/__init__.py +0 -0
  124. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/core/__init__.py +0 -0
  125. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/core/api_error.py +0 -0
  126. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/core/datetime_utils.py +0 -0
  127. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/core/file.py +0 -0
  128. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/core/force_multipart.py +0 -0
  129. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/core/http_sse/__init__.py +0 -0
  130. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/core/http_sse/_exceptions.py +0 -0
  131. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/core/http_sse/_models.py +0 -0
  132. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/core/logging.py +0 -0
  133. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/core/parse_error.py +0 -0
  134. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/core/query_encoder.py +0 -0
  135. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/core/remove_none_from_dict.py +0 -0
  136. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/core/serialization.py +0 -0
  137. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/errors/__init__.py +0 -0
  138. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/errors/bad_gateway_error.py +0 -0
  139. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/errors/bad_request_error.py +0 -0
  140. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/errors/conflict_error.py +0 -0
  141. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/errors/content_too_large_error.py +0 -0
  142. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/errors/forbidden_error.py +0 -0
  143. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/errors/internal_server_error.py +0 -0
  144. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/errors/not_found_error.py +0 -0
  145. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/errors/payment_required_error.py +0 -0
  146. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/errors/service_unavailable_error.py +0 -0
  147. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/errors/too_many_requests_error.py +0 -0
  148. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/errors/unauthorized_error.py +0 -0
  149. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/errors/unprocessable_entity_error.py +0 -0
  150. {speechify_api-4.0.0/src/speechify/voices/consent_challenges → speechify_api-5.0.0/src/speechify/models}/__init__.py +0 -0
  151. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/py.typed +0 -0
  152. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/types/audio_output_format.py +0 -0
  153. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/types/audio_stream_output_format.py +0 -0
  154. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/types/consent_challenge.py +0 -0
  155. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/types/error.py +0 -0
  156. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/types/error_detail.py +0 -0
  157. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/types/get_speech_options_request.py +0 -0
  158. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/types/get_speech_response.py +0 -0
  159. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/types/get_speech_response_audio_format.py +0 -0
  160. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/types/get_stream_options_request.py +0 -0
  161. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/types/get_voice_gender.py +0 -0
  162. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/types/get_voice_language.py +0 -0
  163. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/types/get_voice_type.py +0 -0
  164. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/types/nested_chunk.py +0 -0
  165. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/types/pagination_meta.py +0 -0
  166. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/types/speech_chunk_event.py +0 -0
  167. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/types/speech_done_event.py +0 -0
  168. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/types/speech_marks.py +0 -0
  169. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/types/speech_stream_event.py +0 -0
  170. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/version.py +0 -0
  171. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/voices/__init__.py +0 -0
  172. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/voices/types/__init__.py +0 -0
  173. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/voices/types/create_voices_request_gender.py +0 -0
  174. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/voices/types/list_voices_request_gender.py +0 -0
  175. {speechify_api-4.0.0 → speechify_api-5.0.0}/src/speechify/voices/types/list_voices_request_type.py +0 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Speechify <developers@speechify.ai> (https://speechify.ai)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -1,12 +1,14 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: speechify-api
3
- Version: 4.0.0
3
+ Version: 5.0.0
4
4
  Summary: Official Speechify API SDK
5
+ License: MIT
5
6
  Keywords: speechify,ai,api,sdk,text-to-speech,tts
6
7
  Author: Speechify
7
- Author-email: support@speechify.com
8
+ Author-email: developers@speechify.ai
8
9
  Requires-Python: >=3.10,<4.0
9
10
  Classifier: Intended Audience :: Developers
11
+ Classifier: License :: OSI Approved :: MIT License
10
12
  Classifier: Operating System :: MacOS
11
13
  Classifier: Operating System :: Microsoft :: Windows
12
14
  Classifier: Operating System :: OS Independent
@@ -25,7 +27,7 @@ Classifier: Typing :: Typed
25
27
  Provides-Extra: aiohttp
26
28
  Requires-Dist: aiohttp (>=3.14.1,<4) ; (python_version >= "3.10") and (extra == "aiohttp")
27
29
  Requires-Dist: httpx (>=0.21.2)
28
- Requires-Dist: httpx-aiohttp (==0.1.8) ; (python_version >= "3.10") and (extra == "aiohttp")
30
+ Requires-Dist: httpx-aiohttp (>=0.1.8,<0.2.0) ; (python_version >= "3.10") and (extra == "aiohttp")
29
31
  Requires-Dist: pydantic (>=1.9.2)
30
32
  Requires-Dist: pydantic-core (>=2.18.2,<3.0.0)
31
33
  Requires-Dist: typing_extensions (>=4.0.0)
@@ -87,7 +89,7 @@ client = Speechify(
87
89
  client.audio.speech(
88
90
  audio_format="mp3",
89
91
  input="Hello! This is the Speechify text-to-speech API.",
90
- model="simba-3.2",
92
+ model="simba-3.5",
91
93
  voice_id="geffen_32",
92
94
  )
93
95
  ```
@@ -123,7 +125,7 @@ async def main() -> None:
123
125
  await client.audio.speech(
124
126
  audio_format="mp3",
125
127
  input="Hello! This is the Speechify text-to-speech API.",
126
- model="simba-3.2",
128
+ model="simba-3.5",
127
129
  voice_id="geffen_32",
128
130
  )
129
131
 
@@ -159,7 +161,7 @@ client = Speechify(
159
161
 
160
162
  client.audio.stream_with_timestamps(
161
163
  input="Streaming long-form audio with the Speechify API.",
162
- model="simba-3.2",
164
+ model="simba-3.5",
163
165
  voice_id="geffen_32",
164
166
  )
165
167
  ```
@@ -178,6 +180,7 @@ client = Speechify(
178
180
  client.voices.list(
179
181
  locale="en",
180
182
  model="simba-3.2",
183
+ project_id="proj_01arz3ndektsv4rrffq69g5fav",
181
184
  )
182
185
  ```
183
186
 
@@ -248,7 +251,7 @@ client = Speechify(..., timeout=20.0)
248
251
 
249
252
  # Override timeout for a specific method
250
253
  client.audio.speech(..., request_options={
251
- "timeout_in_seconds": 1
254
+ "timeout": 1
252
255
  })
253
256
  ```
254
257
 
@@ -51,7 +51,7 @@ client = Speechify(
51
51
  client.audio.speech(
52
52
  audio_format="mp3",
53
53
  input="Hello! This is the Speechify text-to-speech API.",
54
- model="simba-3.2",
54
+ model="simba-3.5",
55
55
  voice_id="geffen_32",
56
56
  )
57
57
  ```
@@ -87,7 +87,7 @@ async def main() -> None:
87
87
  await client.audio.speech(
88
88
  audio_format="mp3",
89
89
  input="Hello! This is the Speechify text-to-speech API.",
90
- model="simba-3.2",
90
+ model="simba-3.5",
91
91
  voice_id="geffen_32",
92
92
  )
93
93
 
@@ -123,7 +123,7 @@ client = Speechify(
123
123
 
124
124
  client.audio.stream_with_timestamps(
125
125
  input="Streaming long-form audio with the Speechify API.",
126
- model="simba-3.2",
126
+ model="simba-3.5",
127
127
  voice_id="geffen_32",
128
128
  )
129
129
  ```
@@ -142,6 +142,7 @@ client = Speechify(
142
142
  client.voices.list(
143
143
  locale="en",
144
144
  model="simba-3.2",
145
+ project_id="proj_01arz3ndektsv4rrffq69g5fav",
145
146
  )
146
147
  ```
147
148
 
@@ -212,7 +213,7 @@ client = Speechify(..., timeout=20.0)
212
213
 
213
214
  # Override timeout for a specific method
214
215
  client.audio.speech(..., request_options={
215
- "timeout_in_seconds": 1
216
+ "timeout": 1
216
217
  })
217
218
  ```
218
219
 
@@ -1,14 +1,16 @@
1
1
  [project]
2
2
  name = "speechify-api"
3
3
  dynamic = ["version"]
4
+ license = "MIT"
5
+ license-files = ["LICENSE"]
4
6
 
5
7
  [tool.poetry]
6
8
  name = "speechify-api"
7
- version = "4.0.0"
9
+ version = "5.0.0"
8
10
  description = "Official Speechify API SDK"
9
11
  readme = "README.md"
10
12
  authors = [
11
- "Speechify <support@speechify.com>"
13
+ "Speechify <developers@speechify.ai>"
12
14
  ]
13
15
  keywords = [
14
16
  "speechify",
@@ -18,7 +20,7 @@ keywords = [
18
20
  "text-to-speech",
19
21
  "tts"
20
22
  ]
21
-
23
+ license = "MIT"
22
24
  classifiers = [
23
25
  "Intended Audience :: Developers",
24
26
  "Programming Language :: Python",
@@ -50,7 +52,7 @@ Repository = 'https://github.com/Speechify-AI/sdk-python'
50
52
  python = "^3.10"
51
53
  aiohttp = { version = ">=3.14.1,<4", optional = true, python = ">=3.10"}
52
54
  httpx = ">=0.21.2"
53
- httpx-aiohttp = { version = "0.1.8", optional = true, python = ">=3.10"}
55
+ httpx-aiohttp = { version = "^0.1.8", optional = true, python = ">=3.10"}
54
56
  pydantic = ">= 1.9.2"
55
57
  pydantic-core = ">=2.18.2,<3.0.0"
56
58
  typing_extensions = ">= 4.0.0"
@@ -9,7 +9,10 @@ if typing.TYPE_CHECKING:
9
9
  from .types import (
10
10
  AudioOutputFormat,
11
11
  AudioStreamOutputFormat,
12
+ BillingEntitlements,
13
+ BillingEntitlementsMaxLlmModelClass,
12
14
  ConsentChallenge,
15
+ EntitlementsResponse,
13
16
  Error,
14
17
  ErrorCode,
15
18
  ErrorDetail,
@@ -25,11 +28,31 @@ if typing.TYPE_CHECKING:
25
28
  GetVoiceType,
26
29
  GetVoicesModel,
27
30
  GetVoicesModelName,
31
+ ListProjectsResponse,
28
32
  ListVoicesResponse,
33
+ ListWebhookEndpointDeliveriesResponse,
34
+ ListWebhookEndpointsResponse,
29
35
  Model,
30
36
  ModelsResponse,
31
37
  NestedChunk,
32
38
  PaginationMeta,
39
+ Project,
40
+ ProjectAuditEvent,
41
+ ProjectAuditEventType,
42
+ ProjectAuditResponse,
43
+ ProjectMember,
44
+ ProjectMembersResponse,
45
+ ProjectMonthlyBudgetStatus,
46
+ ProjectRestore,
47
+ ProjectStillRevokedCounts,
48
+ Pronunciation,
49
+ PronunciationAlias,
50
+ PronunciationCaseSensitive,
51
+ PronunciationIpa,
52
+ PronunciationIpaText,
53
+ PronunciationText,
54
+ Pronunciations,
55
+ SafetyIdentifier,
33
56
  SpeechChunkEvent,
34
57
  SpeechDoneEvent,
35
58
  SpeechErrorEvent,
@@ -38,6 +61,11 @@ if typing.TYPE_CHECKING:
38
61
  SpeechStreamEvent_SpeechChunk,
39
62
  SpeechStreamEvent_SpeechDone,
40
63
  SpeechStreamEvent_SpeechError,
64
+ WatermarkDetectionResponse,
65
+ WatermarkVerificationResponse,
66
+ WebhookDeliveryStatus,
67
+ WebhookEndpoint,
68
+ WebhookEndpointDelivery,
41
69
  )
42
70
  from .errors import (
43
71
  BadGatewayError,
@@ -53,30 +81,64 @@ if typing.TYPE_CHECKING:
53
81
  UnauthorizedError,
54
82
  UnprocessableEntityError,
55
83
  )
56
- from . import audio, models, voices
84
+ from . import audio, models, projects, voices, webhooks, workspaces
57
85
  from ._default_clients import DefaultAioHttpClient, DefaultAsyncHttpxClient
58
86
  from .audio import (
87
+ AudioStreamInputModel,
88
+ AudioStreamInputOutputFormat,
89
+ AudioStreamInputSpeechMarks,
59
90
  GetSpeechRequestAudioFormat,
60
91
  GetSpeechRequestModel,
92
+ InputClose,
93
+ InputCloseType,
94
+ InputFlush,
95
+ InputFlushType,
96
+ InputText,
97
+ InputTextType,
98
+ SessionPronunciations,
99
+ SessionPronunciationsPronunciationsItem,
100
+ SessionPronunciationsPronunciationsItemAlias,
101
+ SessionPronunciationsPronunciationsItemIpa,
102
+ SessionPronunciationsType,
103
+ SpeechChunk,
104
+ SpeechChunkSpeechMarksItem,
105
+ SpeechChunkType,
106
+ SpeechDone,
107
+ SpeechDoneReason,
108
+ SpeechDoneType,
109
+ SpeechError,
110
+ SpeechErrorError,
111
+ SpeechErrorErrorCode,
112
+ SpeechErrorType,
113
+ SpeechFlushed,
114
+ SpeechFlushedType,
61
115
  StreamAudioRequestAccept,
62
116
  StreamWithTimestampsAudioRequestAccept,
63
117
  )
64
118
  from .client import AsyncSpeechify, Speechify
65
119
  from .environment import SpeechifyEnvironment
120
+ from .projects import DeleteProjectRequestMode
66
121
  from .version import __version__
67
122
  from .voices import CreateVoicesRequestGender, ListVoicesRequestGender, ListVoicesRequestType
68
123
  _dynamic_imports: typing.Dict[str, str] = {
69
124
  "AsyncSpeechify": ".client",
70
125
  "AudioOutputFormat": ".types",
126
+ "AudioStreamInputModel": ".audio",
127
+ "AudioStreamInputOutputFormat": ".audio",
128
+ "AudioStreamInputSpeechMarks": ".audio",
71
129
  "AudioStreamOutputFormat": ".types",
72
130
  "BadGatewayError": ".errors",
73
131
  "BadRequestError": ".errors",
132
+ "BillingEntitlements": ".types",
133
+ "BillingEntitlementsMaxLlmModelClass": ".types",
74
134
  "ConflictError": ".errors",
75
135
  "ConsentChallenge": ".types",
76
136
  "ContentTooLargeError": ".errors",
77
137
  "CreateVoicesRequestGender": ".voices",
78
138
  "DefaultAioHttpClient": "._default_clients",
79
139
  "DefaultAsyncHttpxClient": "._default_clients",
140
+ "DeleteProjectRequestMode": ".projects",
141
+ "EntitlementsResponse": ".types",
80
142
  "Error": ".types",
81
143
  "ErrorCode": ".types",
82
144
  "ErrorDetail": ".types",
@@ -95,20 +157,63 @@ _dynamic_imports: typing.Dict[str, str] = {
95
157
  "GetVoiceType": ".types",
96
158
  "GetVoicesModel": ".types",
97
159
  "GetVoicesModelName": ".types",
160
+ "InputClose": ".audio",
161
+ "InputCloseType": ".audio",
162
+ "InputFlush": ".audio",
163
+ "InputFlushType": ".audio",
164
+ "InputText": ".audio",
165
+ "InputTextType": ".audio",
98
166
  "InternalServerError": ".errors",
167
+ "ListProjectsResponse": ".types",
99
168
  "ListVoicesRequestGender": ".voices",
100
169
  "ListVoicesRequestType": ".voices",
101
170
  "ListVoicesResponse": ".types",
171
+ "ListWebhookEndpointDeliveriesResponse": ".types",
172
+ "ListWebhookEndpointsResponse": ".types",
102
173
  "Model": ".types",
103
174
  "ModelsResponse": ".types",
104
175
  "NestedChunk": ".types",
105
176
  "NotFoundError": ".errors",
106
177
  "PaginationMeta": ".types",
107
178
  "PaymentRequiredError": ".errors",
179
+ "Project": ".types",
180
+ "ProjectAuditEvent": ".types",
181
+ "ProjectAuditEventType": ".types",
182
+ "ProjectAuditResponse": ".types",
183
+ "ProjectMember": ".types",
184
+ "ProjectMembersResponse": ".types",
185
+ "ProjectMonthlyBudgetStatus": ".types",
186
+ "ProjectRestore": ".types",
187
+ "ProjectStillRevokedCounts": ".types",
188
+ "Pronunciation": ".types",
189
+ "PronunciationAlias": ".types",
190
+ "PronunciationCaseSensitive": ".types",
191
+ "PronunciationIpa": ".types",
192
+ "PronunciationIpaText": ".types",
193
+ "PronunciationText": ".types",
194
+ "Pronunciations": ".types",
195
+ "SafetyIdentifier": ".types",
108
196
  "ServiceUnavailableError": ".errors",
197
+ "SessionPronunciations": ".audio",
198
+ "SessionPronunciationsPronunciationsItem": ".audio",
199
+ "SessionPronunciationsPronunciationsItemAlias": ".audio",
200
+ "SessionPronunciationsPronunciationsItemIpa": ".audio",
201
+ "SessionPronunciationsType": ".audio",
202
+ "SpeechChunk": ".audio",
109
203
  "SpeechChunkEvent": ".types",
204
+ "SpeechChunkSpeechMarksItem": ".audio",
205
+ "SpeechChunkType": ".audio",
206
+ "SpeechDone": ".audio",
110
207
  "SpeechDoneEvent": ".types",
208
+ "SpeechDoneReason": ".audio",
209
+ "SpeechDoneType": ".audio",
210
+ "SpeechError": ".audio",
211
+ "SpeechErrorError": ".audio",
212
+ "SpeechErrorErrorCode": ".audio",
111
213
  "SpeechErrorEvent": ".types",
214
+ "SpeechErrorType": ".audio",
215
+ "SpeechFlushed": ".audio",
216
+ "SpeechFlushedType": ".audio",
112
217
  "SpeechMarks": ".types",
113
218
  "SpeechStreamEvent": ".types",
114
219
  "SpeechStreamEvent_SpeechChunk": ".types",
@@ -121,10 +226,18 @@ _dynamic_imports: typing.Dict[str, str] = {
121
226
  "TooManyRequestsError": ".errors",
122
227
  "UnauthorizedError": ".errors",
123
228
  "UnprocessableEntityError": ".errors",
229
+ "WatermarkDetectionResponse": ".types",
230
+ "WatermarkVerificationResponse": ".types",
231
+ "WebhookDeliveryStatus": ".types",
232
+ "WebhookEndpoint": ".types",
233
+ "WebhookEndpointDelivery": ".types",
124
234
  "__version__": ".version",
125
235
  "audio": ".audio",
126
236
  "models": ".models",
237
+ "projects": ".projects",
127
238
  "voices": ".voices",
239
+ "webhooks": ".webhooks",
240
+ "workspaces": ".workspaces",
128
241
  }
129
242
 
130
243
 
@@ -152,15 +265,22 @@ def __dir__():
152
265
  __all__ = [
153
266
  "AsyncSpeechify",
154
267
  "AudioOutputFormat",
268
+ "AudioStreamInputModel",
269
+ "AudioStreamInputOutputFormat",
270
+ "AudioStreamInputSpeechMarks",
155
271
  "AudioStreamOutputFormat",
156
272
  "BadGatewayError",
157
273
  "BadRequestError",
274
+ "BillingEntitlements",
275
+ "BillingEntitlementsMaxLlmModelClass",
158
276
  "ConflictError",
159
277
  "ConsentChallenge",
160
278
  "ContentTooLargeError",
161
279
  "CreateVoicesRequestGender",
162
280
  "DefaultAioHttpClient",
163
281
  "DefaultAsyncHttpxClient",
282
+ "DeleteProjectRequestMode",
283
+ "EntitlementsResponse",
164
284
  "Error",
165
285
  "ErrorCode",
166
286
  "ErrorDetail",
@@ -179,20 +299,63 @@ __all__ = [
179
299
  "GetVoiceType",
180
300
  "GetVoicesModel",
181
301
  "GetVoicesModelName",
302
+ "InputClose",
303
+ "InputCloseType",
304
+ "InputFlush",
305
+ "InputFlushType",
306
+ "InputText",
307
+ "InputTextType",
182
308
  "InternalServerError",
309
+ "ListProjectsResponse",
183
310
  "ListVoicesRequestGender",
184
311
  "ListVoicesRequestType",
185
312
  "ListVoicesResponse",
313
+ "ListWebhookEndpointDeliveriesResponse",
314
+ "ListWebhookEndpointsResponse",
186
315
  "Model",
187
316
  "ModelsResponse",
188
317
  "NestedChunk",
189
318
  "NotFoundError",
190
319
  "PaginationMeta",
191
320
  "PaymentRequiredError",
321
+ "Project",
322
+ "ProjectAuditEvent",
323
+ "ProjectAuditEventType",
324
+ "ProjectAuditResponse",
325
+ "ProjectMember",
326
+ "ProjectMembersResponse",
327
+ "ProjectMonthlyBudgetStatus",
328
+ "ProjectRestore",
329
+ "ProjectStillRevokedCounts",
330
+ "Pronunciation",
331
+ "PronunciationAlias",
332
+ "PronunciationCaseSensitive",
333
+ "PronunciationIpa",
334
+ "PronunciationIpaText",
335
+ "PronunciationText",
336
+ "Pronunciations",
337
+ "SafetyIdentifier",
192
338
  "ServiceUnavailableError",
339
+ "SessionPronunciations",
340
+ "SessionPronunciationsPronunciationsItem",
341
+ "SessionPronunciationsPronunciationsItemAlias",
342
+ "SessionPronunciationsPronunciationsItemIpa",
343
+ "SessionPronunciationsType",
344
+ "SpeechChunk",
193
345
  "SpeechChunkEvent",
346
+ "SpeechChunkSpeechMarksItem",
347
+ "SpeechChunkType",
348
+ "SpeechDone",
194
349
  "SpeechDoneEvent",
350
+ "SpeechDoneReason",
351
+ "SpeechDoneType",
352
+ "SpeechError",
353
+ "SpeechErrorError",
354
+ "SpeechErrorErrorCode",
195
355
  "SpeechErrorEvent",
356
+ "SpeechErrorType",
357
+ "SpeechFlushed",
358
+ "SpeechFlushedType",
196
359
  "SpeechMarks",
197
360
  "SpeechStreamEvent",
198
361
  "SpeechStreamEvent_SpeechChunk",
@@ -205,8 +368,16 @@ __all__ = [
205
368
  "TooManyRequestsError",
206
369
  "UnauthorizedError",
207
370
  "UnprocessableEntityError",
371
+ "WatermarkDetectionResponse",
372
+ "WatermarkVerificationResponse",
373
+ "WebhookDeliveryStatus",
374
+ "WebhookEndpoint",
375
+ "WebhookEndpointDelivery",
208
376
  "__version__",
209
377
  "audio",
210
378
  "models",
379
+ "projects",
211
380
  "voices",
381
+ "webhooks",
382
+ "workspaces",
212
383
  ]
@@ -0,0 +1,130 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ # isort: skip_file
4
+
5
+ import typing
6
+ from importlib import import_module
7
+
8
+ if typing.TYPE_CHECKING:
9
+ from .types import (
10
+ AudioStreamInputModel,
11
+ AudioStreamInputOutputFormat,
12
+ AudioStreamInputSpeechMarks,
13
+ GetSpeechRequestAudioFormat,
14
+ GetSpeechRequestModel,
15
+ InputClose,
16
+ InputCloseType,
17
+ InputFlush,
18
+ InputFlushType,
19
+ InputText,
20
+ InputTextType,
21
+ SessionPronunciations,
22
+ SessionPronunciationsPronunciationsItem,
23
+ SessionPronunciationsPronunciationsItemAlias,
24
+ SessionPronunciationsPronunciationsItemIpa,
25
+ SessionPronunciationsType,
26
+ SpeechChunk,
27
+ SpeechChunkSpeechMarksItem,
28
+ SpeechChunkType,
29
+ SpeechDone,
30
+ SpeechDoneReason,
31
+ SpeechDoneType,
32
+ SpeechError,
33
+ SpeechErrorError,
34
+ SpeechErrorErrorCode,
35
+ SpeechErrorType,
36
+ SpeechFlushed,
37
+ SpeechFlushedType,
38
+ StreamAudioRequestAccept,
39
+ StreamWithTimestampsAudioRequestAccept,
40
+ )
41
+ from . import watermark
42
+ _dynamic_imports: typing.Dict[str, str] = {
43
+ "AudioStreamInputModel": ".types",
44
+ "AudioStreamInputOutputFormat": ".types",
45
+ "AudioStreamInputSpeechMarks": ".types",
46
+ "GetSpeechRequestAudioFormat": ".types",
47
+ "GetSpeechRequestModel": ".types",
48
+ "InputClose": ".types",
49
+ "InputCloseType": ".types",
50
+ "InputFlush": ".types",
51
+ "InputFlushType": ".types",
52
+ "InputText": ".types",
53
+ "InputTextType": ".types",
54
+ "SessionPronunciations": ".types",
55
+ "SessionPronunciationsPronunciationsItem": ".types",
56
+ "SessionPronunciationsPronunciationsItemAlias": ".types",
57
+ "SessionPronunciationsPronunciationsItemIpa": ".types",
58
+ "SessionPronunciationsType": ".types",
59
+ "SpeechChunk": ".types",
60
+ "SpeechChunkSpeechMarksItem": ".types",
61
+ "SpeechChunkType": ".types",
62
+ "SpeechDone": ".types",
63
+ "SpeechDoneReason": ".types",
64
+ "SpeechDoneType": ".types",
65
+ "SpeechError": ".types",
66
+ "SpeechErrorError": ".types",
67
+ "SpeechErrorErrorCode": ".types",
68
+ "SpeechErrorType": ".types",
69
+ "SpeechFlushed": ".types",
70
+ "SpeechFlushedType": ".types",
71
+ "StreamAudioRequestAccept": ".types",
72
+ "StreamWithTimestampsAudioRequestAccept": ".types",
73
+ "watermark": ".watermark",
74
+ }
75
+
76
+
77
+ def __getattr__(attr_name: str) -> typing.Any:
78
+ module_name = _dynamic_imports.get(attr_name)
79
+ if module_name is None:
80
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
81
+ try:
82
+ module = import_module(module_name, __package__)
83
+ if module_name == f".{attr_name}":
84
+ return module
85
+ else:
86
+ return getattr(module, attr_name)
87
+ except ImportError as e:
88
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
89
+ except AttributeError as e:
90
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
91
+
92
+
93
+ def __dir__():
94
+ lazy_attrs = list(_dynamic_imports.keys())
95
+ return sorted(lazy_attrs)
96
+
97
+
98
+ __all__ = [
99
+ "AudioStreamInputModel",
100
+ "AudioStreamInputOutputFormat",
101
+ "AudioStreamInputSpeechMarks",
102
+ "GetSpeechRequestAudioFormat",
103
+ "GetSpeechRequestModel",
104
+ "InputClose",
105
+ "InputCloseType",
106
+ "InputFlush",
107
+ "InputFlushType",
108
+ "InputText",
109
+ "InputTextType",
110
+ "SessionPronunciations",
111
+ "SessionPronunciationsPronunciationsItem",
112
+ "SessionPronunciationsPronunciationsItemAlias",
113
+ "SessionPronunciationsPronunciationsItemIpa",
114
+ "SessionPronunciationsType",
115
+ "SpeechChunk",
116
+ "SpeechChunkSpeechMarksItem",
117
+ "SpeechChunkType",
118
+ "SpeechDone",
119
+ "SpeechDoneReason",
120
+ "SpeechDoneType",
121
+ "SpeechError",
122
+ "SpeechErrorError",
123
+ "SpeechErrorErrorCode",
124
+ "SpeechErrorType",
125
+ "SpeechFlushed",
126
+ "SpeechFlushedType",
127
+ "StreamAudioRequestAccept",
128
+ "StreamWithTimestampsAudioRequestAccept",
129
+ "watermark",
130
+ ]