cartesia 2.0.0b7__tar.gz → 2.0.2__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.
- {cartesia-2.0.0b7 → cartesia-2.0.2}/PKG-INFO +68 -63
- {cartesia-2.0.0b7 → cartesia-2.0.2}/README.md +67 -62
- {cartesia-2.0.0b7 → cartesia-2.0.2}/pyproject.toml +1 -1
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/__init__.py +15 -1
- cartesia-2.0.2/src/cartesia/auth/__init__.py +13 -0
- cartesia-2.0.2/src/cartesia/auth/client.py +159 -0
- cartesia-2.0.2/src/cartesia/auth/requests/__init__.py +7 -0
- cartesia-2.0.2/src/cartesia/auth/requests/token_grant.py +10 -0
- cartesia-2.0.2/src/cartesia/auth/requests/token_request.py +17 -0
- cartesia-2.0.2/src/cartesia/auth/requests/token_response.py +10 -0
- cartesia-2.0.2/src/cartesia/auth/types/__init__.py +7 -0
- cartesia-2.0.2/src/cartesia/auth/types/token_grant.py +22 -0
- cartesia-2.0.2/src/cartesia/auth/types/token_request.py +28 -0
- cartesia-2.0.2/src/cartesia/auth/types/token_response.py +22 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/base_client.py +4 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/core/client_wrapper.py +1 -1
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/_async_websocket.py +8 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/_websocket.py +11 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/client.py +40 -4
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/generation_request.py +19 -1
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/tts_request.py +10 -1
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/web_socket_tts_request.py +3 -1
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/generation_request.py +19 -1
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/tts_request.py +10 -1
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/web_socket_tts_request.py +3 -1
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/__init__.py +6 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/client.py +208 -159
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/requests/create_voice_request.py +2 -0
- cartesia-2.0.2/src/cartesia/voices/requests/localize_dialect.py +11 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/requests/localize_voice_request.py +15 -2
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/types/__init__.py +6 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/types/create_voice_request.py +2 -0
- cartesia-2.0.2/src/cartesia/voices/types/localize_dialect.py +11 -0
- cartesia-2.0.2/src/cartesia/voices/types/localize_french_dialect.py +5 -0
- cartesia-2.0.2/src/cartesia/voices/types/localize_portuguese_dialect.py +5 -0
- cartesia-2.0.2/src/cartesia/voices/types/localize_spanish_dialect.py +5 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/types/localize_voice_request.py +16 -3
- cartesia-2.0.0b7/src/cartesia/voices/requests/localize_dialect.py +0 -6
- cartesia-2.0.0b7/src/cartesia/voices/types/localize_dialect.py +0 -6
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/api_status/__init__.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/api_status/client.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/api_status/requests/__init__.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/api_status/requests/api_info.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/api_status/types/__init__.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/api_status/types/api_info.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/client.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/core/__init__.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/core/api_error.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/core/datetime_utils.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/core/file.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/core/http_client.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/core/jsonable_encoder.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/core/pagination.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/core/pydantic_utilities.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/core/query_encoder.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/core/remove_none_from_dict.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/core/request_options.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/core/serialization.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/datasets/__init__.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/datasets/requests/__init__.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/datasets/requests/create_dataset_request.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/datasets/requests/dataset.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/datasets/requests/dataset_file.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/datasets/requests/paginated_dataset_files.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/datasets/requests/paginated_datasets.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/datasets/types/__init__.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/datasets/types/create_dataset_request.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/datasets/types/dataset.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/datasets/types/dataset_file.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/datasets/types/file_purpose.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/datasets/types/paginated_dataset_files.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/datasets/types/paginated_datasets.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/embedding/__init__.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/embedding/types/__init__.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/embedding/types/embedding.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/environment.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/infill/__init__.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/infill/client.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/py.typed +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/__init__.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/__init__.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/cancel_context_request.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/controls.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/mp_3_output_format.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/output_format.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/phoneme_timestamps.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/raw_output_format.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/speed.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/tts_request_embedding_specifier.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/tts_request_id_specifier.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/tts_request_voice_specifier.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/wav_output_format.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/web_socket_base_response.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/web_socket_chunk_response.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/web_socket_done_response.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/web_socket_error_response.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/web_socket_flush_done_response.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/web_socket_phoneme_timestamps_response.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/web_socket_raw_output_format.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/web_socket_request.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/web_socket_response.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/web_socket_stream_options.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/web_socket_timestamps_response.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/web_socket_tts_output.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/requests/word_timestamps.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/socket_client.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/__init__.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/cancel_context_request.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/context_id.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/controls.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/emotion.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/flush_id.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/mp_3_output_format.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/natural_specifier.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/numerical_specifier.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/output_format.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/phoneme_timestamps.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/raw_encoding.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/raw_output_format.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/speed.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/supported_language.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/tts_request_embedding_specifier.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/tts_request_id_specifier.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/tts_request_voice_specifier.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/wav_output_format.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/web_socket_base_response.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/web_socket_chunk_response.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/web_socket_done_response.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/web_socket_error_response.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/web_socket_flush_done_response.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/web_socket_phoneme_timestamps_response.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/web_socket_raw_output_format.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/web_socket_request.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/web_socket_response.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/web_socket_stream_options.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/web_socket_timestamps_response.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/web_socket_tts_output.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/types/word_timestamps.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/utils/constants.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/utils/tts.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/tts/utils/types.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/version.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voice_changer/__init__.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voice_changer/client.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voice_changer/requests/__init__.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voice_changer/requests/streaming_response.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voice_changer/types/__init__.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voice_changer/types/output_format_container.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voice_changer/types/streaming_response.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/requests/__init__.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/requests/embedding_response.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/requests/embedding_specifier.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/requests/get_voices_response.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/requests/id_specifier.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/requests/mix_voice_specifier.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/requests/mix_voices_request.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/requests/update_voice_request.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/requests/voice.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/requests/voice_metadata.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/types/base_voice_id.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/types/clone_mode.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/types/embedding_response.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/types/embedding_specifier.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/types/gender.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/types/gender_presentation.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/types/get_voices_response.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/types/id_specifier.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/types/localize_english_dialect.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/types/localize_target_language.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/types/mix_voice_specifier.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/types/mix_voices_request.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/types/update_voice_request.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/types/voice.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/types/voice_expand_options.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/types/voice_id.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/src/cartesia/voices/types/voice_metadata.py +0 -0
- {cartesia-2.0.0b7 → cartesia-2.0.2}/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.
|
3
|
+
Version: 2.0.2
|
4
4
|
Summary:
|
5
5
|
Requires-Python: >=3.8,<4.0
|
6
6
|
Classifier: Intended Audience :: Developers
|
@@ -47,53 +47,6 @@ Our complete API documentation can be found [on docs.cartesia.ai](https://docs.c
|
|
47
47
|
pip install cartesia
|
48
48
|
```
|
49
49
|
|
50
|
-
## Reference
|
51
|
-
|
52
|
-
A full reference for this library is available [here](./reference.md).
|
53
|
-
|
54
|
-
## Voices
|
55
|
-
|
56
|
-
```python
|
57
|
-
from cartesia import Cartesia
|
58
|
-
import os
|
59
|
-
|
60
|
-
client = Cartesia(api_key=os.getenv("CARTESIA_API_KEY"))
|
61
|
-
|
62
|
-
# Get all available voices
|
63
|
-
voices = client.voices.list()
|
64
|
-
print(voices)
|
65
|
-
|
66
|
-
# Get a specific voice
|
67
|
-
voice = client.voices.get(id="a0e99841-438c-4a64-b679-ae501e7d6091")
|
68
|
-
print("The embedding for", voice.name, "is", voice.embedding)
|
69
|
-
|
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
|
-
)
|
79
|
-
|
80
|
-
# Mix voices together
|
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
|
-
]
|
86
|
-
)
|
87
|
-
|
88
|
-
# Create a new voice from embedding
|
89
|
-
new_voice = client.voices.create(
|
90
|
-
name="Test Voice",
|
91
|
-
description="Test voice description",
|
92
|
-
embedding=[...], # List[float] with 192 dimensions
|
93
|
-
language="en"
|
94
|
-
)
|
95
|
-
```
|
96
|
-
|
97
50
|
## Usage
|
98
51
|
|
99
52
|
Instantiate and use the client with the following:
|
@@ -112,10 +65,6 @@ client.tts.bytes(
|
|
112
65
|
voice={
|
113
66
|
"mode": "id",
|
114
67
|
"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
68
|
},
|
120
69
|
language="en",
|
121
70
|
output_format={
|
@@ -176,7 +125,7 @@ except ApiError as e:
|
|
176
125
|
|
177
126
|
## Streaming
|
178
127
|
|
179
|
-
The SDK supports streaming responses
|
128
|
+
The SDK supports streaming responses as well, returning a generator that you can iterate over with a `for ... in ...` loop:
|
180
129
|
|
181
130
|
```python
|
182
131
|
from cartesia import Cartesia
|
@@ -215,7 +164,9 @@ for chunk in chunks:
|
|
215
164
|
print(f"Received chunk of size: {len(chunk.data)}")
|
216
165
|
```
|
217
166
|
|
218
|
-
##
|
167
|
+
## WebSockets
|
168
|
+
|
169
|
+
For the lowest latency in advanced usecases (such as streaming in an LLM-generated transcript and streaming out audio), you should use our websockets client:
|
219
170
|
|
220
171
|
```python
|
221
172
|
from cartesia import Cartesia
|
@@ -223,15 +174,10 @@ from cartesia.tts import TtsRequestEmbeddingSpecifierParams, OutputFormat_RawPar
|
|
223
174
|
import pyaudio
|
224
175
|
import os
|
225
176
|
|
226
|
-
client = Cartesia(
|
227
|
-
api_key=os.getenv("CARTESIA_API_KEY"),
|
228
|
-
)
|
177
|
+
client = Cartesia(api_key=os.getenv("CARTESIA_API_KEY"))
|
229
178
|
voice_id = "a0e99841-438c-4a64-b679-ae501e7d6091"
|
230
179
|
transcript = "Hello! Welcome to Cartesia"
|
231
180
|
|
232
|
-
# You can check out our models at https://docs.cartesia.ai/getting-started/available-models
|
233
|
-
model_id = "sonic-2"
|
234
|
-
|
235
181
|
p = pyaudio.PyAudio()
|
236
182
|
rate = 22050
|
237
183
|
|
@@ -242,14 +188,14 @@ ws = client.tts.websocket()
|
|
242
188
|
|
243
189
|
# Generate and stream audio using the websocket
|
244
190
|
for output in ws.send(
|
245
|
-
model_id=
|
191
|
+
model_id="sonic-2", # see: https://docs.cartesia.ai/getting-started/available-models
|
246
192
|
transcript=transcript,
|
247
193
|
voice={"id": voice_id},
|
248
194
|
stream=True,
|
249
195
|
output_format={
|
250
196
|
"container": "raw",
|
251
197
|
"encoding": "pcm_f32le",
|
252
|
-
"sample_rate":
|
198
|
+
"sample_rate": rate
|
253
199
|
},
|
254
200
|
):
|
255
201
|
buffer = output.audio
|
@@ -267,6 +213,40 @@ p.terminate()
|
|
267
213
|
ws.close() # Close the websocket connection
|
268
214
|
```
|
269
215
|
|
216
|
+
## Voices
|
217
|
+
|
218
|
+
List all available Voices with `client.voices.list`, which returns an iterable that automatically handles pagination:
|
219
|
+
|
220
|
+
```python
|
221
|
+
from cartesia import Cartesia
|
222
|
+
import os
|
223
|
+
|
224
|
+
client = Cartesia(api_key=os.getenv("CARTESIA_API_KEY"))
|
225
|
+
|
226
|
+
# Get all available Voices
|
227
|
+
voices = client.voices.list()
|
228
|
+
for voice in voices:
|
229
|
+
print(voice)
|
230
|
+
```
|
231
|
+
|
232
|
+
You can also get the complete metadata for a specific Voice, or make a new Voice by cloning from an audio sample:
|
233
|
+
|
234
|
+
```python
|
235
|
+
# Get a specific Voice
|
236
|
+
voice = client.voices.get(id="a0e99841-438c-4a64-b679-ae501e7d6091")
|
237
|
+
print("The embedding for", voice.name, "is", voice.embedding)
|
238
|
+
|
239
|
+
# Clone a Voice using file data
|
240
|
+
cloned_voice = client.voices.clone(
|
241
|
+
clip=open("path/to/voice.wav", "rb"),
|
242
|
+
name="Test cloned voice",
|
243
|
+
language="en",
|
244
|
+
mode="similarity", # or "stability"
|
245
|
+
enhance=False, # use enhance=True to clean and denoise the cloning audio
|
246
|
+
description="Test voice description"
|
247
|
+
)
|
248
|
+
```
|
249
|
+
|
270
250
|
## Requesting Timestamps
|
271
251
|
|
272
252
|
```python
|
@@ -290,7 +270,8 @@ async def main():
|
|
290
270
|
"encoding": "pcm_f32le",
|
291
271
|
"sample_rate": 44100
|
292
272
|
},
|
293
|
-
add_timestamps=True,
|
273
|
+
add_timestamps=True, # Enable word-level timestamps
|
274
|
+
add_phoneme_timestamps=True, # Enable phonemized timestamps
|
294
275
|
stream=True
|
295
276
|
)
|
296
277
|
|
@@ -358,6 +339,26 @@ client.tts.bytes(..., request_options={
|
|
358
339
|
})
|
359
340
|
```
|
360
341
|
|
342
|
+
### Mixing voices and creating from embeddings
|
343
|
+
|
344
|
+
```python
|
345
|
+
# Mix voices together
|
346
|
+
mixed_voice = client.voices.mix(
|
347
|
+
voices=[
|
348
|
+
{"id": "voice_id_1", "weight": 0.25},
|
349
|
+
{"id": "voice_id_2", "weight": 0.75}
|
350
|
+
]
|
351
|
+
)
|
352
|
+
|
353
|
+
# Create a new voice from embedding
|
354
|
+
new_voice = client.voices.create(
|
355
|
+
name="Test Voice",
|
356
|
+
description="Test voice description",
|
357
|
+
embedding=[...], # List[float] with 192 dimensions
|
358
|
+
language="en"
|
359
|
+
)
|
360
|
+
```
|
361
|
+
|
361
362
|
### Custom Client
|
362
363
|
|
363
364
|
You can override the `httpx` client to customize it for your use-case. Some common use-cases include support for proxies
|
@@ -375,6 +376,10 @@ client = Cartesia(
|
|
375
376
|
)
|
376
377
|
```
|
377
378
|
|
379
|
+
## Reference
|
380
|
+
|
381
|
+
A full reference for this library is available [here](./reference.md).
|
382
|
+
|
378
383
|
## Contributing
|
379
384
|
|
380
385
|
Note that most of this library is generated programmatically from
|
@@ -15,53 +15,6 @@ Our complete API documentation can be found [on docs.cartesia.ai](https://docs.c
|
|
15
15
|
pip install cartesia
|
16
16
|
```
|
17
17
|
|
18
|
-
## Reference
|
19
|
-
|
20
|
-
A full reference for this library is available [here](./reference.md).
|
21
|
-
|
22
|
-
## Voices
|
23
|
-
|
24
|
-
```python
|
25
|
-
from cartesia import Cartesia
|
26
|
-
import os
|
27
|
-
|
28
|
-
client = Cartesia(api_key=os.getenv("CARTESIA_API_KEY"))
|
29
|
-
|
30
|
-
# Get all available voices
|
31
|
-
voices = client.voices.list()
|
32
|
-
print(voices)
|
33
|
-
|
34
|
-
# Get a specific voice
|
35
|
-
voice = client.voices.get(id="a0e99841-438c-4a64-b679-ae501e7d6091")
|
36
|
-
print("The embedding for", voice.name, "is", voice.embedding)
|
37
|
-
|
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
|
-
)
|
47
|
-
|
48
|
-
# Mix voices together
|
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
|
-
]
|
54
|
-
)
|
55
|
-
|
56
|
-
# Create a new voice from embedding
|
57
|
-
new_voice = client.voices.create(
|
58
|
-
name="Test Voice",
|
59
|
-
description="Test voice description",
|
60
|
-
embedding=[...], # List[float] with 192 dimensions
|
61
|
-
language="en"
|
62
|
-
)
|
63
|
-
```
|
64
|
-
|
65
18
|
## Usage
|
66
19
|
|
67
20
|
Instantiate and use the client with the following:
|
@@ -80,10 +33,6 @@ client.tts.bytes(
|
|
80
33
|
voice={
|
81
34
|
"mode": "id",
|
82
35
|
"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
36
|
},
|
88
37
|
language="en",
|
89
38
|
output_format={
|
@@ -144,7 +93,7 @@ except ApiError as e:
|
|
144
93
|
|
145
94
|
## Streaming
|
146
95
|
|
147
|
-
The SDK supports streaming responses
|
96
|
+
The SDK supports streaming responses as well, returning a generator that you can iterate over with a `for ... in ...` loop:
|
148
97
|
|
149
98
|
```python
|
150
99
|
from cartesia import Cartesia
|
@@ -183,7 +132,9 @@ for chunk in chunks:
|
|
183
132
|
print(f"Received chunk of size: {len(chunk.data)}")
|
184
133
|
```
|
185
134
|
|
186
|
-
##
|
135
|
+
## WebSockets
|
136
|
+
|
137
|
+
For the lowest latency in advanced usecases (such as streaming in an LLM-generated transcript and streaming out audio), you should use our websockets client:
|
187
138
|
|
188
139
|
```python
|
189
140
|
from cartesia import Cartesia
|
@@ -191,15 +142,10 @@ from cartesia.tts import TtsRequestEmbeddingSpecifierParams, OutputFormat_RawPar
|
|
191
142
|
import pyaudio
|
192
143
|
import os
|
193
144
|
|
194
|
-
client = Cartesia(
|
195
|
-
api_key=os.getenv("CARTESIA_API_KEY"),
|
196
|
-
)
|
145
|
+
client = Cartesia(api_key=os.getenv("CARTESIA_API_KEY"))
|
197
146
|
voice_id = "a0e99841-438c-4a64-b679-ae501e7d6091"
|
198
147
|
transcript = "Hello! Welcome to Cartesia"
|
199
148
|
|
200
|
-
# You can check out our models at https://docs.cartesia.ai/getting-started/available-models
|
201
|
-
model_id = "sonic-2"
|
202
|
-
|
203
149
|
p = pyaudio.PyAudio()
|
204
150
|
rate = 22050
|
205
151
|
|
@@ -210,14 +156,14 @@ ws = client.tts.websocket()
|
|
210
156
|
|
211
157
|
# Generate and stream audio using the websocket
|
212
158
|
for output in ws.send(
|
213
|
-
model_id=
|
159
|
+
model_id="sonic-2", # see: https://docs.cartesia.ai/getting-started/available-models
|
214
160
|
transcript=transcript,
|
215
161
|
voice={"id": voice_id},
|
216
162
|
stream=True,
|
217
163
|
output_format={
|
218
164
|
"container": "raw",
|
219
165
|
"encoding": "pcm_f32le",
|
220
|
-
"sample_rate":
|
166
|
+
"sample_rate": rate
|
221
167
|
},
|
222
168
|
):
|
223
169
|
buffer = output.audio
|
@@ -235,6 +181,40 @@ p.terminate()
|
|
235
181
|
ws.close() # Close the websocket connection
|
236
182
|
```
|
237
183
|
|
184
|
+
## Voices
|
185
|
+
|
186
|
+
List all available Voices with `client.voices.list`, which returns an iterable that automatically handles pagination:
|
187
|
+
|
188
|
+
```python
|
189
|
+
from cartesia import Cartesia
|
190
|
+
import os
|
191
|
+
|
192
|
+
client = Cartesia(api_key=os.getenv("CARTESIA_API_KEY"))
|
193
|
+
|
194
|
+
# Get all available Voices
|
195
|
+
voices = client.voices.list()
|
196
|
+
for voice in voices:
|
197
|
+
print(voice)
|
198
|
+
```
|
199
|
+
|
200
|
+
You can also get the complete metadata for a specific Voice, or make a new Voice by cloning from an audio sample:
|
201
|
+
|
202
|
+
```python
|
203
|
+
# Get a specific Voice
|
204
|
+
voice = client.voices.get(id="a0e99841-438c-4a64-b679-ae501e7d6091")
|
205
|
+
print("The embedding for", voice.name, "is", voice.embedding)
|
206
|
+
|
207
|
+
# Clone a Voice using file data
|
208
|
+
cloned_voice = client.voices.clone(
|
209
|
+
clip=open("path/to/voice.wav", "rb"),
|
210
|
+
name="Test cloned voice",
|
211
|
+
language="en",
|
212
|
+
mode="similarity", # or "stability"
|
213
|
+
enhance=False, # use enhance=True to clean and denoise the cloning audio
|
214
|
+
description="Test voice description"
|
215
|
+
)
|
216
|
+
```
|
217
|
+
|
238
218
|
## Requesting Timestamps
|
239
219
|
|
240
220
|
```python
|
@@ -258,7 +238,8 @@ async def main():
|
|
258
238
|
"encoding": "pcm_f32le",
|
259
239
|
"sample_rate": 44100
|
260
240
|
},
|
261
|
-
add_timestamps=True,
|
241
|
+
add_timestamps=True, # Enable word-level timestamps
|
242
|
+
add_phoneme_timestamps=True, # Enable phonemized timestamps
|
262
243
|
stream=True
|
263
244
|
)
|
264
245
|
|
@@ -326,6 +307,26 @@ client.tts.bytes(..., request_options={
|
|
326
307
|
})
|
327
308
|
```
|
328
309
|
|
310
|
+
### Mixing voices and creating from embeddings
|
311
|
+
|
312
|
+
```python
|
313
|
+
# Mix voices together
|
314
|
+
mixed_voice = client.voices.mix(
|
315
|
+
voices=[
|
316
|
+
{"id": "voice_id_1", "weight": 0.25},
|
317
|
+
{"id": "voice_id_2", "weight": 0.75}
|
318
|
+
]
|
319
|
+
)
|
320
|
+
|
321
|
+
# Create a new voice from embedding
|
322
|
+
new_voice = client.voices.create(
|
323
|
+
name="Test Voice",
|
324
|
+
description="Test voice description",
|
325
|
+
embedding=[...], # List[float] with 192 dimensions
|
326
|
+
language="en"
|
327
|
+
)
|
328
|
+
```
|
329
|
+
|
329
330
|
### Custom Client
|
330
331
|
|
331
332
|
You can override the `httpx` client to customize it for your use-case. Some common use-cases include support for proxies
|
@@ -343,6 +344,10 @@ client = Cartesia(
|
|
343
344
|
)
|
344
345
|
```
|
345
346
|
|
347
|
+
## Reference
|
348
|
+
|
349
|
+
A full reference for this library is available [here](./reference.md).
|
350
|
+
|
346
351
|
## Contributing
|
347
352
|
|
348
353
|
Note that most of this library is generated programmatically from
|
@@ -1,7 +1,8 @@
|
|
1
1
|
# This file was auto-generated by Fern from our API Definition.
|
2
2
|
|
3
|
-
from . import api_status, datasets, embedding, infill, tts, voice_changer, voices
|
3
|
+
from . import api_status, auth, datasets, embedding, infill, tts, voice_changer, voices
|
4
4
|
from .api_status import ApiInfo, ApiInfoParams
|
5
|
+
from .auth import TokenGrant, TokenGrantParams, TokenRequest, TokenRequestParams, TokenResponse, TokenResponseParams
|
5
6
|
from .client import AsyncCartesia, Cartesia
|
6
7
|
from .datasets import (
|
7
8
|
CreateDatasetRequest,
|
@@ -129,6 +130,9 @@ from .voices import (
|
|
129
130
|
LocalizeDialect,
|
130
131
|
LocalizeDialectParams,
|
131
132
|
LocalizeEnglishDialect,
|
133
|
+
LocalizeFrenchDialect,
|
134
|
+
LocalizePortugueseDialect,
|
135
|
+
LocalizeSpanishDialect,
|
132
136
|
LocalizeTargetLanguage,
|
133
137
|
LocalizeVoiceRequest,
|
134
138
|
LocalizeVoiceRequestParams,
|
@@ -187,6 +191,9 @@ __all__ = [
|
|
187
191
|
"LocalizeDialect",
|
188
192
|
"LocalizeDialectParams",
|
189
193
|
"LocalizeEnglishDialect",
|
194
|
+
"LocalizeFrenchDialect",
|
195
|
+
"LocalizePortugueseDialect",
|
196
|
+
"LocalizeSpanishDialect",
|
190
197
|
"LocalizeTargetLanguage",
|
191
198
|
"LocalizeVoiceRequest",
|
192
199
|
"LocalizeVoiceRequestParams",
|
@@ -227,6 +234,12 @@ __all__ = [
|
|
227
234
|
"StreamingResponse_Error",
|
228
235
|
"StreamingResponse_ErrorParams",
|
229
236
|
"SupportedLanguage",
|
237
|
+
"TokenGrant",
|
238
|
+
"TokenGrantParams",
|
239
|
+
"TokenRequest",
|
240
|
+
"TokenRequestParams",
|
241
|
+
"TokenResponse",
|
242
|
+
"TokenResponseParams",
|
230
243
|
"TtsRequest",
|
231
244
|
"TtsRequestEmbeddingSpecifier",
|
232
245
|
"TtsRequestEmbeddingSpecifierParams",
|
@@ -288,6 +301,7 @@ __all__ = [
|
|
288
301
|
"WordTimestampsParams",
|
289
302
|
"__version__",
|
290
303
|
"api_status",
|
304
|
+
"auth",
|
291
305
|
"datasets",
|
292
306
|
"embedding",
|
293
307
|
"infill",
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
2
|
+
|
3
|
+
from .types import TokenGrant, TokenRequest, TokenResponse
|
4
|
+
from .requests import TokenGrantParams, TokenRequestParams, TokenResponseParams
|
5
|
+
|
6
|
+
__all__ = [
|
7
|
+
"TokenGrant",
|
8
|
+
"TokenGrantParams",
|
9
|
+
"TokenRequest",
|
10
|
+
"TokenRequestParams",
|
11
|
+
"TokenResponse",
|
12
|
+
"TokenResponseParams",
|
13
|
+
]
|
@@ -0,0 +1,159 @@
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
2
|
+
|
3
|
+
import typing
|
4
|
+
from ..core.client_wrapper import SyncClientWrapper
|
5
|
+
from .requests.token_grant import TokenGrantParams
|
6
|
+
from ..core.request_options import RequestOptions
|
7
|
+
from .types.token_response import TokenResponse
|
8
|
+
from ..core.serialization import convert_and_respect_annotation_metadata
|
9
|
+
from ..core.pydantic_utilities import parse_obj_as
|
10
|
+
from json.decoder import JSONDecodeError
|
11
|
+
from ..core.api_error import ApiError
|
12
|
+
from ..core.client_wrapper import AsyncClientWrapper
|
13
|
+
|
14
|
+
# this is used as the default value for optional parameters
|
15
|
+
OMIT = typing.cast(typing.Any, ...)
|
16
|
+
|
17
|
+
|
18
|
+
class AuthClient:
|
19
|
+
def __init__(self, *, client_wrapper: SyncClientWrapper):
|
20
|
+
self._client_wrapper = client_wrapper
|
21
|
+
|
22
|
+
def access_token(
|
23
|
+
self,
|
24
|
+
*,
|
25
|
+
grants: TokenGrantParams,
|
26
|
+
expires_in: typing.Optional[int] = OMIT,
|
27
|
+
request_options: typing.Optional[RequestOptions] = None,
|
28
|
+
) -> TokenResponse:
|
29
|
+
"""
|
30
|
+
Generates a new Access Token for the client. These tokens are short-lived and should be used to make requests to the API from authenticated clients.
|
31
|
+
|
32
|
+
Parameters
|
33
|
+
----------
|
34
|
+
grants : TokenGrantParams
|
35
|
+
The permissions to be granted via the token.
|
36
|
+
|
37
|
+
expires_in : typing.Optional[int]
|
38
|
+
The number of seconds the token will be valid for since the time of generation. The maximum is 1 hour (3600 seconds).
|
39
|
+
|
40
|
+
request_options : typing.Optional[RequestOptions]
|
41
|
+
Request-specific configuration.
|
42
|
+
|
43
|
+
Returns
|
44
|
+
-------
|
45
|
+
TokenResponse
|
46
|
+
|
47
|
+
Examples
|
48
|
+
--------
|
49
|
+
from cartesia import Cartesia
|
50
|
+
|
51
|
+
client = Cartesia(
|
52
|
+
api_key="YOUR_API_KEY",
|
53
|
+
)
|
54
|
+
client.auth.access_token(
|
55
|
+
grants={"tts": True},
|
56
|
+
expires_in=60,
|
57
|
+
)
|
58
|
+
"""
|
59
|
+
_response = self._client_wrapper.httpx_client.request(
|
60
|
+
"access-token",
|
61
|
+
method="POST",
|
62
|
+
json={
|
63
|
+
"grants": convert_and_respect_annotation_metadata(
|
64
|
+
object_=grants, annotation=TokenGrantParams, direction="write"
|
65
|
+
),
|
66
|
+
"expires_in": expires_in,
|
67
|
+
},
|
68
|
+
request_options=request_options,
|
69
|
+
omit=OMIT,
|
70
|
+
)
|
71
|
+
try:
|
72
|
+
if 200 <= _response.status_code < 300:
|
73
|
+
return typing.cast(
|
74
|
+
TokenResponse,
|
75
|
+
parse_obj_as(
|
76
|
+
type_=TokenResponse, # type: ignore
|
77
|
+
object_=_response.json(),
|
78
|
+
),
|
79
|
+
)
|
80
|
+
_response_json = _response.json()
|
81
|
+
except JSONDecodeError:
|
82
|
+
raise ApiError(status_code=_response.status_code, body=_response.text)
|
83
|
+
raise ApiError(status_code=_response.status_code, body=_response_json)
|
84
|
+
|
85
|
+
|
86
|
+
class AsyncAuthClient:
|
87
|
+
def __init__(self, *, client_wrapper: AsyncClientWrapper):
|
88
|
+
self._client_wrapper = client_wrapper
|
89
|
+
|
90
|
+
async def access_token(
|
91
|
+
self,
|
92
|
+
*,
|
93
|
+
grants: TokenGrantParams,
|
94
|
+
expires_in: typing.Optional[int] = OMIT,
|
95
|
+
request_options: typing.Optional[RequestOptions] = None,
|
96
|
+
) -> TokenResponse:
|
97
|
+
"""
|
98
|
+
Generates a new Access Token for the client. These tokens are short-lived and should be used to make requests to the API from authenticated clients.
|
99
|
+
|
100
|
+
Parameters
|
101
|
+
----------
|
102
|
+
grants : TokenGrantParams
|
103
|
+
The permissions to be granted via the token.
|
104
|
+
|
105
|
+
expires_in : typing.Optional[int]
|
106
|
+
The number of seconds the token will be valid for since the time of generation. The maximum is 1 hour (3600 seconds).
|
107
|
+
|
108
|
+
request_options : typing.Optional[RequestOptions]
|
109
|
+
Request-specific configuration.
|
110
|
+
|
111
|
+
Returns
|
112
|
+
-------
|
113
|
+
TokenResponse
|
114
|
+
|
115
|
+
Examples
|
116
|
+
--------
|
117
|
+
import asyncio
|
118
|
+
|
119
|
+
from cartesia import AsyncCartesia
|
120
|
+
|
121
|
+
client = AsyncCartesia(
|
122
|
+
api_key="YOUR_API_KEY",
|
123
|
+
)
|
124
|
+
|
125
|
+
|
126
|
+
async def main() -> None:
|
127
|
+
await client.auth.access_token(
|
128
|
+
grants={"tts": True},
|
129
|
+
expires_in=60,
|
130
|
+
)
|
131
|
+
|
132
|
+
|
133
|
+
asyncio.run(main())
|
134
|
+
"""
|
135
|
+
_response = await self._client_wrapper.httpx_client.request(
|
136
|
+
"access-token",
|
137
|
+
method="POST",
|
138
|
+
json={
|
139
|
+
"grants": convert_and_respect_annotation_metadata(
|
140
|
+
object_=grants, annotation=TokenGrantParams, direction="write"
|
141
|
+
),
|
142
|
+
"expires_in": expires_in,
|
143
|
+
},
|
144
|
+
request_options=request_options,
|
145
|
+
omit=OMIT,
|
146
|
+
)
|
147
|
+
try:
|
148
|
+
if 200 <= _response.status_code < 300:
|
149
|
+
return typing.cast(
|
150
|
+
TokenResponse,
|
151
|
+
parse_obj_as(
|
152
|
+
type_=TokenResponse, # type: ignore
|
153
|
+
object_=_response.json(),
|
154
|
+
),
|
155
|
+
)
|
156
|
+
_response_json = _response.json()
|
157
|
+
except JSONDecodeError:
|
158
|
+
raise ApiError(status_code=_response.status_code, body=_response.text)
|
159
|
+
raise ApiError(status_code=_response.status_code, body=_response_json)
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
2
|
+
|
3
|
+
from .token_grant import TokenGrantParams
|
4
|
+
from .token_request import TokenRequestParams
|
5
|
+
from .token_response import TokenResponseParams
|
6
|
+
|
7
|
+
__all__ = ["TokenGrantParams", "TokenRequestParams", "TokenResponseParams"]
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# This file was auto-generated by Fern from our API Definition.
|
2
|
+
|
3
|
+
import typing_extensions
|
4
|
+
from .token_grant import TokenGrantParams
|
5
|
+
import typing_extensions
|
6
|
+
|
7
|
+
|
8
|
+
class TokenRequestParams(typing_extensions.TypedDict):
|
9
|
+
grants: TokenGrantParams
|
10
|
+
"""
|
11
|
+
The permissions to be granted via the token.
|
12
|
+
"""
|
13
|
+
|
14
|
+
expires_in: typing_extensions.NotRequired[int]
|
15
|
+
"""
|
16
|
+
The number of seconds the token will be valid for since the time of generation. The maximum is 1 hour (3600 seconds).
|
17
|
+
"""
|