cartesia 2.0.0b1__tar.gz → 2.0.0b7__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 (167) hide show
  1. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/PKG-INFO +151 -49
  2. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/README.md +150 -48
  3. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/pyproject.toml +1 -1
  4. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/__init__.py +8 -4
  5. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/base_client.py +0 -4
  6. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/core/__init__.py +3 -0
  7. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/core/client_wrapper.py +2 -2
  8. cartesia-2.0.0b7/src/cartesia/core/pagination.py +88 -0
  9. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/infill/client.py +4 -4
  10. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/_async_websocket.py +48 -1
  11. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/_websocket.py +44 -3
  12. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/client.py +4 -4
  13. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/generation_request.py +5 -0
  14. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/web_socket_chunk_response.py +3 -0
  15. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/web_socket_response.py +2 -1
  16. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/web_socket_tts_request.py +1 -0
  17. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/emotion.py +5 -0
  18. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/generation_request.py +5 -0
  19. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/web_socket_chunk_response.py +3 -1
  20. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/web_socket_response.py +2 -1
  21. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/web_socket_tts_output.py +2 -0
  22. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/web_socket_tts_request.py +1 -0
  23. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/utils/constants.py +2 -2
  24. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voice_changer/requests/streaming_response.py +2 -0
  25. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voice_changer/types/streaming_response.py +2 -0
  26. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/__init__.py +8 -4
  27. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/client.py +285 -169
  28. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/requests/__init__.py +2 -0
  29. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/requests/create_voice_request.py +0 -2
  30. cartesia-2.0.0b7/src/cartesia/voices/requests/get_voices_response.py +24 -0
  31. cartesia-2.0.0b7/src/cartesia/voices/requests/localize_dialect.py +6 -0
  32. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/requests/voice.py +13 -9
  33. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/types/__init__.py +6 -4
  34. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/types/create_voice_request.py +0 -2
  35. cartesia-2.0.0b7/src/cartesia/voices/types/gender_presentation.py +5 -0
  36. cartesia-2.0.0b7/src/cartesia/voices/types/get_voices_response.py +34 -0
  37. cartesia-2.0.0b7/src/cartesia/voices/types/localize_dialect.py +6 -0
  38. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/types/voice.py +13 -9
  39. cartesia-2.0.0b7/src/cartesia/voices/types/voice_expand_options.py +5 -0
  40. cartesia-2.0.0b1/src/cartesia/datasets/client.py +0 -392
  41. cartesia-2.0.0b1/src/cartesia/voices/requests/localize_dialect.py +0 -8
  42. cartesia-2.0.0b1/src/cartesia/voices/types/localize_dialect.py +0 -8
  43. cartesia-2.0.0b1/src/cartesia/voices/types/localize_portuguese_dialect.py +0 -5
  44. cartesia-2.0.0b1/src/cartesia/voices/types/localize_spanish_dialect.py +0 -5
  45. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/api_status/__init__.py +0 -0
  46. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/api_status/client.py +0 -0
  47. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/api_status/requests/__init__.py +0 -0
  48. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/api_status/requests/api_info.py +0 -0
  49. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/api_status/types/__init__.py +0 -0
  50. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/api_status/types/api_info.py +0 -0
  51. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/client.py +0 -0
  52. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/core/api_error.py +0 -0
  53. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/core/datetime_utils.py +0 -0
  54. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/core/file.py +0 -0
  55. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/core/http_client.py +0 -0
  56. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/core/jsonable_encoder.py +0 -0
  57. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/core/pydantic_utilities.py +0 -0
  58. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/core/query_encoder.py +0 -0
  59. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/core/remove_none_from_dict.py +0 -0
  60. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/core/request_options.py +0 -0
  61. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/core/serialization.py +0 -0
  62. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/datasets/__init__.py +0 -0
  63. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/datasets/requests/__init__.py +0 -0
  64. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/datasets/requests/create_dataset_request.py +0 -0
  65. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/datasets/requests/dataset.py +0 -0
  66. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/datasets/requests/dataset_file.py +0 -0
  67. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/datasets/requests/paginated_dataset_files.py +0 -0
  68. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/datasets/requests/paginated_datasets.py +0 -0
  69. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/datasets/types/__init__.py +0 -0
  70. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/datasets/types/create_dataset_request.py +0 -0
  71. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/datasets/types/dataset.py +0 -0
  72. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/datasets/types/dataset_file.py +0 -0
  73. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/datasets/types/file_purpose.py +0 -0
  74. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/datasets/types/paginated_dataset_files.py +0 -0
  75. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/datasets/types/paginated_datasets.py +0 -0
  76. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/embedding/__init__.py +0 -0
  77. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/embedding/types/__init__.py +0 -0
  78. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/embedding/types/embedding.py +0 -0
  79. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/environment.py +0 -0
  80. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/infill/__init__.py +0 -0
  81. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/py.typed +0 -0
  82. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/__init__.py +0 -0
  83. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/__init__.py +0 -0
  84. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/cancel_context_request.py +0 -0
  85. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/controls.py +0 -0
  86. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/mp_3_output_format.py +0 -0
  87. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/output_format.py +0 -0
  88. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/phoneme_timestamps.py +0 -0
  89. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/raw_output_format.py +0 -0
  90. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/speed.py +0 -0
  91. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/tts_request.py +0 -0
  92. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/tts_request_embedding_specifier.py +0 -0
  93. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/tts_request_id_specifier.py +0 -0
  94. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/tts_request_voice_specifier.py +0 -0
  95. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/wav_output_format.py +0 -0
  96. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/web_socket_base_response.py +0 -0
  97. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/web_socket_done_response.py +0 -0
  98. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/web_socket_error_response.py +0 -0
  99. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/web_socket_flush_done_response.py +0 -0
  100. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/web_socket_phoneme_timestamps_response.py +0 -0
  101. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/web_socket_raw_output_format.py +0 -0
  102. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/web_socket_request.py +0 -0
  103. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/web_socket_stream_options.py +0 -0
  104. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/web_socket_timestamps_response.py +0 -0
  105. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/web_socket_tts_output.py +0 -0
  106. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/requests/word_timestamps.py +0 -0
  107. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/socket_client.py +0 -0
  108. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/__init__.py +0 -0
  109. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/cancel_context_request.py +0 -0
  110. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/context_id.py +0 -0
  111. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/controls.py +0 -0
  112. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/flush_id.py +0 -0
  113. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/mp_3_output_format.py +0 -0
  114. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/natural_specifier.py +0 -0
  115. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/numerical_specifier.py +0 -0
  116. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/output_format.py +0 -0
  117. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/phoneme_timestamps.py +0 -0
  118. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/raw_encoding.py +0 -0
  119. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/raw_output_format.py +0 -0
  120. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/speed.py +0 -0
  121. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/supported_language.py +0 -0
  122. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/tts_request.py +0 -0
  123. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/tts_request_embedding_specifier.py +0 -0
  124. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/tts_request_id_specifier.py +0 -0
  125. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/tts_request_voice_specifier.py +0 -0
  126. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/wav_output_format.py +0 -0
  127. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/web_socket_base_response.py +0 -0
  128. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/web_socket_done_response.py +0 -0
  129. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/web_socket_error_response.py +0 -0
  130. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/web_socket_flush_done_response.py +0 -0
  131. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/web_socket_phoneme_timestamps_response.py +0 -0
  132. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/web_socket_raw_output_format.py +0 -0
  133. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/web_socket_request.py +0 -0
  134. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/web_socket_stream_options.py +0 -0
  135. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/web_socket_timestamps_response.py +0 -0
  136. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/types/word_timestamps.py +0 -0
  137. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/utils/tts.py +0 -0
  138. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/tts/utils/types.py +0 -0
  139. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/version.py +0 -0
  140. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voice_changer/__init__.py +0 -0
  141. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voice_changer/client.py +0 -0
  142. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voice_changer/requests/__init__.py +0 -0
  143. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voice_changer/types/__init__.py +0 -0
  144. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voice_changer/types/output_format_container.py +0 -0
  145. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/requests/embedding_response.py +0 -0
  146. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/requests/embedding_specifier.py +0 -0
  147. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/requests/id_specifier.py +0 -0
  148. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/requests/localize_voice_request.py +0 -0
  149. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/requests/mix_voice_specifier.py +0 -0
  150. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/requests/mix_voices_request.py +0 -0
  151. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/requests/update_voice_request.py +0 -0
  152. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/requests/voice_metadata.py +0 -0
  153. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/types/base_voice_id.py +0 -0
  154. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/types/clone_mode.py +0 -0
  155. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/types/embedding_response.py +0 -0
  156. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/types/embedding_specifier.py +0 -0
  157. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/types/gender.py +0 -0
  158. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/types/id_specifier.py +0 -0
  159. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/types/localize_english_dialect.py +0 -0
  160. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/types/localize_target_language.py +0 -0
  161. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/types/localize_voice_request.py +0 -0
  162. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/types/mix_voice_specifier.py +0 -0
  163. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/types/mix_voices_request.py +0 -0
  164. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/types/update_voice_request.py +0 -0
  165. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/types/voice_id.py +0 -0
  166. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/types/voice_metadata.py +0 -0
  167. {cartesia-2.0.0b1 → cartesia-2.0.0b7}/src/cartesia/voices/types/weight.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cartesia
3
- Version: 2.0.0b1
3
+ Version: 2.0.0b7
4
4
  Summary:
5
5
  Requires-Python: >=3.8,<4.0
6
6
  Classifier: Intended Audience :: Developers
@@ -57,7 +57,7 @@ A full reference for this library is available [here](./reference.md).
57
57
  from cartesia import Cartesia
58
58
  import os
59
59
 
60
- client = Cartesia(api_key=os.environ.get("CARTESIA_API_KEY"))
60
+ client = Cartesia(api_key=os.getenv("CARTESIA_API_KEY"))
61
61
 
62
62
  # Get all available voices
63
63
  voices = client.voices.list()
@@ -65,21 +65,32 @@ print(voices)
65
65
 
66
66
  # Get a specific voice
67
67
  voice = client.voices.get(id="a0e99841-438c-4a64-b679-ae501e7d6091")
68
- print("The embedding for", voice["name"], "is", voice["embedding"])
68
+ print("The embedding for", voice.name, "is", voice.embedding)
69
69
 
70
- # Clone a voice using filepath
71
- cloned_voice_embedding = client.voices.clone(filepath="path/to/voice")
70
+ # Clone a voice using file data
71
+ cloned_voice = client.voices.clone(
72
+ clip=open("path/to/voice.wav", "rb"),
73
+ name="Test cloned voice",
74
+ language="en",
75
+ mode="similarity", # or "stability"
76
+ enhance=False, # use enhance=True to clean and denoise the cloning audio
77
+ description="Test voice description"
78
+ )
72
79
 
73
80
  # Mix voices together
74
- mixed_voice_embedding = client.voices.mix(
75
- [{ "id": "voice_id_1", "weight": 0.5 }, { "id": "voice_id_2", "weight": 0.25 }, { "id": "voice_id_3", "weight": 0.25 }]
81
+ mixed_voice = client.voices.mix(
82
+ voices=[
83
+ {"id": "voice_id_1", "weight": 0.25},
84
+ {"id": "voice_id_2", "weight": 0.75}
85
+ ]
76
86
  )
77
87
 
78
- # Create a new voice
88
+ # Create a new voice from embedding
79
89
  new_voice = client.voices.create(
80
- name="New Voice",
81
- description="A clone of my own voice",
82
- embedding=cloned_voice_embedding,
90
+ name="Test Voice",
91
+ description="Test voice description",
92
+ embedding=[...], # List[float] with 192 dimensions
93
+ language="en"
83
94
  )
84
95
  ```
85
96
 
@@ -90,15 +101,22 @@ Instantiate and use the client with the following:
90
101
  ```python
91
102
  from cartesia import Cartesia
92
103
  from cartesia.tts import OutputFormat_Raw, TtsRequestIdSpecifier
104
+ import os
93
105
 
94
106
  client = Cartesia(
95
- api_key="YOUR_API_KEY",
107
+ api_key=os.getenv("CARTESIA_API_KEY"),
96
108
  )
97
109
  client.tts.bytes(
98
- model_id="sonic-english",
110
+ model_id="sonic-2",
99
111
  transcript="Hello, world!",
100
- voice={"id": "694f9389-aac1-45b6-b726-9d9369183238"},
101
- ),
112
+ voice={
113
+ "mode": "id",
114
+ "id": "694f9389-aac1-45b6-b726-9d9369183238",
115
+ "experimental_controls": {
116
+ "speed": 0.5, # range between [-1.0, 1.0], or "slow", "fastest", etc.
117
+ "emotion": ["positivity", "curiosity:low"] # list of emotions with optional intensity
118
+ }
119
+ },
102
120
  language="en",
103
121
  output_format={
104
122
  "container": "raw",
@@ -114,18 +132,18 @@ The SDK also exports an `async` client so that you can make non-blocking calls t
114
132
 
115
133
  ```python
116
134
  import asyncio
135
+ import os
117
136
 
118
137
  from cartesia import AsyncCartesia
119
138
  from cartesia.tts import OutputFormat_Raw, TtsRequestIdSpecifier
120
139
 
121
140
  client = AsyncCartesia(
122
- api_key="YOUR_API_KEY",
141
+ api_key=os.getenv("CARTESIA_API_KEY"),
123
142
  )
124
143
 
125
-
126
144
  async def main() -> None:
127
- await client.tts.bytes(
128
- model_id="sonic-english",
145
+ async for output in client.tts.bytes(
146
+ model_id="sonic-2",
129
147
  transcript="Hello, world!",
130
148
  voice={"id": "694f9389-aac1-45b6-b726-9d9369183238"},
131
149
  language="en",
@@ -134,7 +152,8 @@ async def main() -> None:
134
152
  "sample_rate": 44100,
135
153
  "encoding": "pcm_f32le",
136
154
  },
137
- )
155
+ ):
156
+ print(f"Received chunk of size: {len(output)}")
138
157
 
139
158
 
140
159
  asyncio.run(main())
@@ -162,26 +181,38 @@ The SDK supports streaming responses, as well, the response will be a generator
162
181
  ```python
163
182
  from cartesia import Cartesia
164
183
  from cartesia.tts import Controls, OutputFormat_RawParams, TtsRequestIdSpecifierParams
184
+ import os
165
185
 
166
- client = Cartesia(
167
- api_key="YOUR_API_KEY",
168
- )
169
- response = client.tts.sse(
170
- model_id="string",
171
- transcript="string",
172
- voice={
173
- "id": "string",
174
- "experimental_controls": {
175
- speed=1.1,
176
- emotion="anger:lowest",
186
+ def get_tts_chunks():
187
+ client = Cartesia(
188
+ api_key=os.getenv("CARTESIA_API_KEY"),
189
+ )
190
+ response = client.tts.sse(
191
+ model_id="sonic-2",
192
+ transcript="Hello world!",
193
+ voice={
194
+ "id": "f9836c6e-a0bd-460e-9d3c-f7299fa60f94",
195
+ "experimental_controls": {
196
+ "speed": "normal",
197
+ "emotion": [],
198
+ },
177
199
  },
178
- },
179
- language="en",
180
- output_format={},
181
- duration=1.1,
182
- )
183
- for chunk in response:
184
- yield chunk
200
+ language="en",
201
+ output_format={
202
+ "container": "raw",
203
+ "encoding": "pcm_f32le",
204
+ "sample_rate": 44100,
205
+ },
206
+ )
207
+
208
+ audio_chunks = []
209
+ for chunk in response:
210
+ audio_chunks.append(chunk)
211
+ return audio_chunks
212
+
213
+ chunks = get_tts_chunks()
214
+ for chunk in chunks:
215
+ print(f"Received chunk of size: {len(chunk.data)}")
185
216
  ```
186
217
 
187
218
  ## WebSocket
@@ -190,16 +221,16 @@ for chunk in response:
190
221
  from cartesia import Cartesia
191
222
  from cartesia.tts import TtsRequestEmbeddingSpecifierParams, OutputFormat_RawParams
192
223
  import pyaudio
224
+ import os
193
225
 
194
226
  client = Cartesia(
195
- api_key="YOUR_API_KEY",
227
+ api_key=os.getenv("CARTESIA_API_KEY"),
196
228
  )
197
229
  voice_id = "a0e99841-438c-4a64-b679-ae501e7d6091"
198
- voice = client.voices.get(id=voice_id)
199
230
  transcript = "Hello! Welcome to Cartesia"
200
231
 
201
232
  # You can check out our models at https://docs.cartesia.ai/getting-started/available-models
202
- model_id = "sonic-english"
233
+ model_id = "sonic-2"
203
234
 
204
235
  p = pyaudio.PyAudio()
205
236
  rate = 22050
@@ -213,11 +244,11 @@ ws = client.tts.websocket()
213
244
  for output in ws.send(
214
245
  model_id=model_id,
215
246
  transcript=transcript,
216
- voice={"embedding": voice.embedding},
247
+ voice={"id": voice_id},
217
248
  stream=True,
218
249
  output_format={
219
250
  "container": "raw",
220
- "encoding": "pcm_f32le",
251
+ "encoding": "pcm_f32le",
221
252
  "sample_rate": 22050
222
253
  },
223
254
  ):
@@ -236,6 +267,55 @@ p.terminate()
236
267
  ws.close() # Close the websocket connection
237
268
  ```
238
269
 
270
+ ## Requesting Timestamps
271
+
272
+ ```python
273
+ import asyncio
274
+ from cartesia import AsyncCartesia
275
+ import os
276
+
277
+ async def main():
278
+ client = AsyncCartesia(api_key=os.getenv("CARTESIA_API_KEY"))
279
+
280
+ # Connect to the websocket
281
+ ws = await client.tts.websocket()
282
+
283
+ # Generate speech with timestamps
284
+ output_generate = await ws.send(
285
+ model_id="sonic-2",
286
+ transcript="Hello! Welcome to Cartesia's text-to-speech.",
287
+ voice={"id": "f9836c6e-a0bd-460e-9d3c-f7299fa60f94"},
288
+ output_format={
289
+ "container": "raw",
290
+ "encoding": "pcm_f32le",
291
+ "sample_rate": 44100
292
+ },
293
+ add_timestamps=True, # Enable word-level timestamps
294
+ stream=True
295
+ )
296
+
297
+ # Process the streaming response with timestamps
298
+ all_words = []
299
+ all_starts = []
300
+ all_ends = []
301
+ audio_chunks = []
302
+
303
+ async for out in output_generate:
304
+ # Collect audio data
305
+ if out.audio is not None:
306
+ audio_chunks.append(out.audio)
307
+
308
+ # Process timestamp data
309
+ if out.word_timestamps is not None:
310
+ all_words.extend(out.word_timestamps.words) # List of words
311
+ all_starts.extend(out.word_timestamps.start) # Start time for each word (seconds)
312
+ all_ends.extend(out.word_timestamps.end) # End time for each word (seconds)
313
+
314
+ await ws.close()
315
+
316
+ asyncio.run(main())
317
+ ```
318
+
239
319
  ## Advanced
240
320
 
241
321
  ### Retries
@@ -297,11 +377,33 @@ client = Cartesia(
297
377
 
298
378
  ## Contributing
299
379
 
300
- While we value open-source contributions to this SDK, this library is generated programmatically.
301
- Additions made directly to this library would have to be moved over to our generation code,
302
- otherwise they would be overwritten upon the next generated release. Feel free to open a PR as
303
- a proof of concept, but know that we will not be able to merge it as-is. We suggest opening
304
- an issue first to discuss with us!
380
+ Note that most of this library is generated programmatically from
381
+ <https://github.com/cartesia-ai/docs> before making edits to a file, verify it's not autogenerated
382
+ by checking for this comment at the top of the file:
383
+
384
+ ```
385
+ # This file was auto-generated by Fern from our API Definition.
386
+ ```
387
+
388
+ ### Running tests
389
+
390
+ ```sh
391
+ uv pip install -r requirements.txt
392
+ uv run pytest -rP -vv tests/custom/test_client.py::test_get_voices
393
+ ```
394
+ ### Manually generating SDK code from docs
395
+
396
+ Assuming all your repos are cloned into your home directory:
397
+
398
+ ```sh
399
+ $ cd ~/docs
400
+ $ fern generate --group python-sdk --log-level debug --api version-2024-11-13 --preview
401
+ $ cd ~/cartesia-python
402
+ $ git pull ~/docs/fern/apis/version-2024-11-13/.preview/fern-python-sdk
403
+ $ git commit --amend -m "manually regenerate from docs" # optional
404
+ ```
405
+
406
+ ### Automatically generating new SDK releases
305
407
 
306
- On the other hand, contributions to the README are always very welcome!
408
+ From https://github.com/cartesia-ai/docs click `Actions` then `Release Python SDK`. (Requires permissions.)
307
409
 
@@ -25,7 +25,7 @@ A full reference for this library is available [here](./reference.md).
25
25
  from cartesia import Cartesia
26
26
  import os
27
27
 
28
- client = Cartesia(api_key=os.environ.get("CARTESIA_API_KEY"))
28
+ client = Cartesia(api_key=os.getenv("CARTESIA_API_KEY"))
29
29
 
30
30
  # Get all available voices
31
31
  voices = client.voices.list()
@@ -33,21 +33,32 @@ print(voices)
33
33
 
34
34
  # Get a specific voice
35
35
  voice = client.voices.get(id="a0e99841-438c-4a64-b679-ae501e7d6091")
36
- print("The embedding for", voice["name"], "is", voice["embedding"])
36
+ print("The embedding for", voice.name, "is", voice.embedding)
37
37
 
38
- # Clone a voice using filepath
39
- cloned_voice_embedding = client.voices.clone(filepath="path/to/voice")
38
+ # Clone a voice using file data
39
+ cloned_voice = client.voices.clone(
40
+ clip=open("path/to/voice.wav", "rb"),
41
+ name="Test cloned voice",
42
+ language="en",
43
+ mode="similarity", # or "stability"
44
+ enhance=False, # use enhance=True to clean and denoise the cloning audio
45
+ description="Test voice description"
46
+ )
40
47
 
41
48
  # Mix voices together
42
- mixed_voice_embedding = client.voices.mix(
43
- [{ "id": "voice_id_1", "weight": 0.5 }, { "id": "voice_id_2", "weight": 0.25 }, { "id": "voice_id_3", "weight": 0.25 }]
49
+ mixed_voice = client.voices.mix(
50
+ voices=[
51
+ {"id": "voice_id_1", "weight": 0.25},
52
+ {"id": "voice_id_2", "weight": 0.75}
53
+ ]
44
54
  )
45
55
 
46
- # Create a new voice
56
+ # Create a new voice from embedding
47
57
  new_voice = client.voices.create(
48
- name="New Voice",
49
- description="A clone of my own voice",
50
- embedding=cloned_voice_embedding,
58
+ name="Test Voice",
59
+ description="Test voice description",
60
+ embedding=[...], # List[float] with 192 dimensions
61
+ language="en"
51
62
  )
52
63
  ```
53
64
 
@@ -58,15 +69,22 @@ Instantiate and use the client with the following:
58
69
  ```python
59
70
  from cartesia import Cartesia
60
71
  from cartesia.tts import OutputFormat_Raw, TtsRequestIdSpecifier
72
+ import os
61
73
 
62
74
  client = Cartesia(
63
- api_key="YOUR_API_KEY",
75
+ api_key=os.getenv("CARTESIA_API_KEY"),
64
76
  )
65
77
  client.tts.bytes(
66
- model_id="sonic-english",
78
+ model_id="sonic-2",
67
79
  transcript="Hello, world!",
68
- voice={"id": "694f9389-aac1-45b6-b726-9d9369183238"},
69
- ),
80
+ voice={
81
+ "mode": "id",
82
+ "id": "694f9389-aac1-45b6-b726-9d9369183238",
83
+ "experimental_controls": {
84
+ "speed": 0.5, # range between [-1.0, 1.0], or "slow", "fastest", etc.
85
+ "emotion": ["positivity", "curiosity:low"] # list of emotions with optional intensity
86
+ }
87
+ },
70
88
  language="en",
71
89
  output_format={
72
90
  "container": "raw",
@@ -82,18 +100,18 @@ The SDK also exports an `async` client so that you can make non-blocking calls t
82
100
 
83
101
  ```python
84
102
  import asyncio
103
+ import os
85
104
 
86
105
  from cartesia import AsyncCartesia
87
106
  from cartesia.tts import OutputFormat_Raw, TtsRequestIdSpecifier
88
107
 
89
108
  client = AsyncCartesia(
90
- api_key="YOUR_API_KEY",
109
+ api_key=os.getenv("CARTESIA_API_KEY"),
91
110
  )
92
111
 
93
-
94
112
  async def main() -> None:
95
- await client.tts.bytes(
96
- model_id="sonic-english",
113
+ async for output in client.tts.bytes(
114
+ model_id="sonic-2",
97
115
  transcript="Hello, world!",
98
116
  voice={"id": "694f9389-aac1-45b6-b726-9d9369183238"},
99
117
  language="en",
@@ -102,7 +120,8 @@ async def main() -> None:
102
120
  "sample_rate": 44100,
103
121
  "encoding": "pcm_f32le",
104
122
  },
105
- )
123
+ ):
124
+ print(f"Received chunk of size: {len(output)}")
106
125
 
107
126
 
108
127
  asyncio.run(main())
@@ -130,26 +149,38 @@ The SDK supports streaming responses, as well, the response will be a generator
130
149
  ```python
131
150
  from cartesia import Cartesia
132
151
  from cartesia.tts import Controls, OutputFormat_RawParams, TtsRequestIdSpecifierParams
152
+ import os
133
153
 
134
- client = Cartesia(
135
- api_key="YOUR_API_KEY",
136
- )
137
- response = client.tts.sse(
138
- model_id="string",
139
- transcript="string",
140
- voice={
141
- "id": "string",
142
- "experimental_controls": {
143
- speed=1.1,
144
- emotion="anger:lowest",
154
+ def get_tts_chunks():
155
+ client = Cartesia(
156
+ api_key=os.getenv("CARTESIA_API_KEY"),
157
+ )
158
+ response = client.tts.sse(
159
+ model_id="sonic-2",
160
+ transcript="Hello world!",
161
+ voice={
162
+ "id": "f9836c6e-a0bd-460e-9d3c-f7299fa60f94",
163
+ "experimental_controls": {
164
+ "speed": "normal",
165
+ "emotion": [],
166
+ },
145
167
  },
146
- },
147
- language="en",
148
- output_format={},
149
- duration=1.1,
150
- )
151
- for chunk in response:
152
- yield chunk
168
+ language="en",
169
+ output_format={
170
+ "container": "raw",
171
+ "encoding": "pcm_f32le",
172
+ "sample_rate": 44100,
173
+ },
174
+ )
175
+
176
+ audio_chunks = []
177
+ for chunk in response:
178
+ audio_chunks.append(chunk)
179
+ return audio_chunks
180
+
181
+ chunks = get_tts_chunks()
182
+ for chunk in chunks:
183
+ print(f"Received chunk of size: {len(chunk.data)}")
153
184
  ```
154
185
 
155
186
  ## WebSocket
@@ -158,16 +189,16 @@ for chunk in response:
158
189
  from cartesia import Cartesia
159
190
  from cartesia.tts import TtsRequestEmbeddingSpecifierParams, OutputFormat_RawParams
160
191
  import pyaudio
192
+ import os
161
193
 
162
194
  client = Cartesia(
163
- api_key="YOUR_API_KEY",
195
+ api_key=os.getenv("CARTESIA_API_KEY"),
164
196
  )
165
197
  voice_id = "a0e99841-438c-4a64-b679-ae501e7d6091"
166
- voice = client.voices.get(id=voice_id)
167
198
  transcript = "Hello! Welcome to Cartesia"
168
199
 
169
200
  # You can check out our models at https://docs.cartesia.ai/getting-started/available-models
170
- model_id = "sonic-english"
201
+ model_id = "sonic-2"
171
202
 
172
203
  p = pyaudio.PyAudio()
173
204
  rate = 22050
@@ -181,11 +212,11 @@ ws = client.tts.websocket()
181
212
  for output in ws.send(
182
213
  model_id=model_id,
183
214
  transcript=transcript,
184
- voice={"embedding": voice.embedding},
215
+ voice={"id": voice_id},
185
216
  stream=True,
186
217
  output_format={
187
218
  "container": "raw",
188
- "encoding": "pcm_f32le",
219
+ "encoding": "pcm_f32le",
189
220
  "sample_rate": 22050
190
221
  },
191
222
  ):
@@ -204,6 +235,55 @@ p.terminate()
204
235
  ws.close() # Close the websocket connection
205
236
  ```
206
237
 
238
+ ## Requesting Timestamps
239
+
240
+ ```python
241
+ import asyncio
242
+ from cartesia import AsyncCartesia
243
+ import os
244
+
245
+ async def main():
246
+ client = AsyncCartesia(api_key=os.getenv("CARTESIA_API_KEY"))
247
+
248
+ # Connect to the websocket
249
+ ws = await client.tts.websocket()
250
+
251
+ # Generate speech with timestamps
252
+ output_generate = await ws.send(
253
+ model_id="sonic-2",
254
+ transcript="Hello! Welcome to Cartesia's text-to-speech.",
255
+ voice={"id": "f9836c6e-a0bd-460e-9d3c-f7299fa60f94"},
256
+ output_format={
257
+ "container": "raw",
258
+ "encoding": "pcm_f32le",
259
+ "sample_rate": 44100
260
+ },
261
+ add_timestamps=True, # Enable word-level timestamps
262
+ stream=True
263
+ )
264
+
265
+ # Process the streaming response with timestamps
266
+ all_words = []
267
+ all_starts = []
268
+ all_ends = []
269
+ audio_chunks = []
270
+
271
+ async for out in output_generate:
272
+ # Collect audio data
273
+ if out.audio is not None:
274
+ audio_chunks.append(out.audio)
275
+
276
+ # Process timestamp data
277
+ if out.word_timestamps is not None:
278
+ all_words.extend(out.word_timestamps.words) # List of words
279
+ all_starts.extend(out.word_timestamps.start) # Start time for each word (seconds)
280
+ all_ends.extend(out.word_timestamps.end) # End time for each word (seconds)
281
+
282
+ await ws.close()
283
+
284
+ asyncio.run(main())
285
+ ```
286
+
207
287
  ## Advanced
208
288
 
209
289
  ### Retries
@@ -265,10 +345,32 @@ client = Cartesia(
265
345
 
266
346
  ## Contributing
267
347
 
268
- While we value open-source contributions to this SDK, this library is generated programmatically.
269
- Additions made directly to this library would have to be moved over to our generation code,
270
- otherwise they would be overwritten upon the next generated release. Feel free to open a PR as
271
- a proof of concept, but know that we will not be able to merge it as-is. We suggest opening
272
- an issue first to discuss with us!
348
+ Note that most of this library is generated programmatically from
349
+ <https://github.com/cartesia-ai/docs> before making edits to a file, verify it's not autogenerated
350
+ by checking for this comment at the top of the file:
351
+
352
+ ```
353
+ # This file was auto-generated by Fern from our API Definition.
354
+ ```
355
+
356
+ ### Running tests
357
+
358
+ ```sh
359
+ uv pip install -r requirements.txt
360
+ uv run pytest -rP -vv tests/custom/test_client.py::test_get_voices
361
+ ```
362
+ ### Manually generating SDK code from docs
363
+
364
+ Assuming all your repos are cloned into your home directory:
365
+
366
+ ```sh
367
+ $ cd ~/docs
368
+ $ fern generate --group python-sdk --log-level debug --api version-2024-11-13 --preview
369
+ $ cd ~/cartesia-python
370
+ $ git pull ~/docs/fern/apis/version-2024-11-13/.preview/fern-python-sdk
371
+ $ git commit --amend -m "manually regenerate from docs" # optional
372
+ ```
373
+
374
+ ### Automatically generating new SDK releases
273
375
 
274
- On the other hand, contributions to the README are always very welcome!
376
+ From https://github.com/cartesia-ai/docs click `Actions` then `Release Python SDK`. (Requires permissions.)
@@ -3,7 +3,7 @@ name = "cartesia"
3
3
 
4
4
  [tool.poetry]
5
5
  name = "cartesia"
6
- version = "2.0.0b1"
6
+ version = "2.0.0b7"
7
7
  description = ""
8
8
  readme = "README.md"
9
9
  authors = []
@@ -121,13 +121,14 @@ from .voices import (
121
121
  EmbeddingSpecifier,
122
122
  EmbeddingSpecifierParams,
123
123
  Gender,
124
+ GenderPresentation,
125
+ GetVoicesResponse,
126
+ GetVoicesResponseParams,
124
127
  IdSpecifier,
125
128
  IdSpecifierParams,
126
129
  LocalizeDialect,
127
130
  LocalizeDialectParams,
128
131
  LocalizeEnglishDialect,
129
- LocalizePortugueseDialect,
130
- LocalizeSpanishDialect,
131
132
  LocalizeTargetLanguage,
132
133
  LocalizeVoiceRequest,
133
134
  LocalizeVoiceRequestParams,
@@ -138,6 +139,7 @@ from .voices import (
138
139
  UpdateVoiceRequest,
139
140
  UpdateVoiceRequestParams,
140
141
  Voice,
142
+ VoiceExpandOptions,
141
143
  VoiceId,
142
144
  VoiceMetadata,
143
145
  VoiceMetadataParams,
@@ -175,15 +177,16 @@ __all__ = [
175
177
  "FilePurpose",
176
178
  "FlushId",
177
179
  "Gender",
180
+ "GenderPresentation",
178
181
  "GenerationRequest",
179
182
  "GenerationRequestParams",
183
+ "GetVoicesResponse",
184
+ "GetVoicesResponseParams",
180
185
  "IdSpecifier",
181
186
  "IdSpecifierParams",
182
187
  "LocalizeDialect",
183
188
  "LocalizeDialectParams",
184
189
  "LocalizeEnglishDialect",
185
- "LocalizePortugueseDialect",
186
- "LocalizeSpanishDialect",
187
190
  "LocalizeTargetLanguage",
188
191
  "LocalizeVoiceRequest",
189
192
  "LocalizeVoiceRequestParams",
@@ -235,6 +238,7 @@ __all__ = [
235
238
  "UpdateVoiceRequest",
236
239
  "UpdateVoiceRequestParams",
237
240
  "Voice",
241
+ "VoiceExpandOptions",
238
242
  "VoiceId",
239
243
  "VoiceMetadata",
240
244
  "VoiceMetadataParams",
@@ -5,14 +5,12 @@ from .environment import CartesiaEnvironment
5
5
  import httpx
6
6
  from .core.client_wrapper import SyncClientWrapper
7
7
  from .api_status.client import ApiStatusClient
8
- from .datasets.client import DatasetsClient
9
8
  from .infill.client import InfillClient
10
9
  from .tts.client import TtsClient
11
10
  from .voice_changer.client import VoiceChangerClient
12
11
  from .voices.client import VoicesClient
13
12
  from .core.client_wrapper import AsyncClientWrapper
14
13
  from .api_status.client import AsyncApiStatusClient
15
- from .datasets.client import AsyncDatasetsClient
16
14
  from .infill.client import AsyncInfillClient
17
15
  from .tts.client import AsyncTtsClient
18
16
  from .voice_changer.client import AsyncVoiceChangerClient
@@ -78,7 +76,6 @@ class BaseCartesia:
78
76
  timeout=_defaulted_timeout,
79
77
  )
80
78
  self.api_status = ApiStatusClient(client_wrapper=self._client_wrapper)
81
- self.datasets = DatasetsClient(client_wrapper=self._client_wrapper)
82
79
  self.infill = InfillClient(client_wrapper=self._client_wrapper)
83
80
  self.tts = TtsClient(client_wrapper=self._client_wrapper)
84
81
  self.voice_changer = VoiceChangerClient(client_wrapper=self._client_wrapper)
@@ -144,7 +141,6 @@ class AsyncBaseCartesia:
144
141
  timeout=_defaulted_timeout,
145
142
  )
146
143
  self.api_status = AsyncApiStatusClient(client_wrapper=self._client_wrapper)
147
- self.datasets = AsyncDatasetsClient(client_wrapper=self._client_wrapper)
148
144
  self.infill = AsyncInfillClient(client_wrapper=self._client_wrapper)
149
145
  self.tts = AsyncTtsClient(client_wrapper=self._client_wrapper)
150
146
  self.voice_changer = AsyncVoiceChangerClient(client_wrapper=self._client_wrapper)