cartesia 2.0.3__py3-none-any.whl → 2.0.5__py3-none-any.whl

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.
@@ -0,0 +1,26 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ...core.pydantic_utilities import UniversalBaseModel
4
+ import pydantic
5
+ from ...core.pydantic_utilities import IS_PYDANTIC_V2
6
+ import typing
7
+
8
+
9
+ class DoneMessage(UniversalBaseModel):
10
+ """
11
+ Acknowledgment message sent in response to a `done` command, indicating that the session is complete and the WebSocket will close.
12
+ """
13
+
14
+ request_id: str = pydantic.Field()
15
+ """
16
+ Unique identifier for this transcription session.
17
+ """
18
+
19
+ if IS_PYDANTIC_V2:
20
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
21
+ else:
22
+
23
+ class Config:
24
+ frozen = True
25
+ smart_union = True
26
+ extra = pydantic.Extra.allow
@@ -0,0 +1,27 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ...core.pydantic_utilities import UniversalBaseModel
4
+ import typing
5
+ import pydantic
6
+ from ...core.pydantic_utilities import IS_PYDANTIC_V2
7
+
8
+
9
+ class ErrorMessage(UniversalBaseModel):
10
+ request_id: typing.Optional[str] = pydantic.Field(default=None)
11
+ """
12
+ The request ID associated with the error, if applicable.
13
+ """
14
+
15
+ message: str = pydantic.Field()
16
+ """
17
+ Human-readable error message describing what went wrong.
18
+ """
19
+
20
+ if IS_PYDANTIC_V2:
21
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
22
+ else:
23
+
24
+ class Config:
25
+ frozen = True
26
+ smart_union = True
27
+ extra = pydantic.Extra.allow
@@ -0,0 +1,26 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ...core.pydantic_utilities import UniversalBaseModel
4
+ import pydantic
5
+ from ...core.pydantic_utilities import IS_PYDANTIC_V2
6
+ import typing
7
+
8
+
9
+ class FlushDoneMessage(UniversalBaseModel):
10
+ """
11
+ Acknowledgment message sent in response to a `finalize` command, indicating that all buffered audio has been flushed and processed.
12
+ """
13
+
14
+ request_id: str = pydantic.Field()
15
+ """
16
+ Unique identifier for this transcription session.
17
+ """
18
+
19
+ if IS_PYDANTIC_V2:
20
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
21
+ else:
22
+
23
+ class Config:
24
+ frozen = True
25
+ smart_union = True
26
+ extra = pydantic.Extra.allow
@@ -0,0 +1,92 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from __future__ import annotations
4
+ from ...core.pydantic_utilities import UniversalBaseModel
5
+ import typing
6
+ from ...core.pydantic_utilities import IS_PYDANTIC_V2
7
+ import pydantic
8
+
9
+
10
+ class StreamingTranscriptionResponse_Transcript(UniversalBaseModel):
11
+ """
12
+ The server sends transcription results, control messages, or error messages. Each message has a `type` field to distinguish between different message types.
13
+ """
14
+
15
+ type: typing.Literal["transcript"] = "transcript"
16
+ request_id: str
17
+ text: str
18
+ is_final: bool
19
+ duration: typing.Optional[float] = None
20
+ language: typing.Optional[str] = None
21
+
22
+ if IS_PYDANTIC_V2:
23
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
24
+ else:
25
+
26
+ class Config:
27
+ frozen = True
28
+ smart_union = True
29
+ extra = pydantic.Extra.allow
30
+
31
+
32
+ class StreamingTranscriptionResponse_FlushDone(UniversalBaseModel):
33
+ """
34
+ The server sends transcription results, control messages, or error messages. Each message has a `type` field to distinguish between different message types.
35
+ """
36
+
37
+ type: typing.Literal["flush_done"] = "flush_done"
38
+ request_id: str
39
+
40
+ if IS_PYDANTIC_V2:
41
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
42
+ else:
43
+
44
+ class Config:
45
+ frozen = True
46
+ smart_union = True
47
+ extra = pydantic.Extra.allow
48
+
49
+
50
+ class StreamingTranscriptionResponse_Done(UniversalBaseModel):
51
+ """
52
+ The server sends transcription results, control messages, or error messages. Each message has a `type` field to distinguish between different message types.
53
+ """
54
+
55
+ type: typing.Literal["done"] = "done"
56
+ request_id: str
57
+
58
+ if IS_PYDANTIC_V2:
59
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
60
+ else:
61
+
62
+ class Config:
63
+ frozen = True
64
+ smart_union = True
65
+ extra = pydantic.Extra.allow
66
+
67
+
68
+ class StreamingTranscriptionResponse_Error(UniversalBaseModel):
69
+ """
70
+ The server sends transcription results, control messages, or error messages. Each message has a `type` field to distinguish between different message types.
71
+ """
72
+
73
+ type: typing.Literal["error"] = "error"
74
+ request_id: typing.Optional[str] = None
75
+ message: str
76
+
77
+ if IS_PYDANTIC_V2:
78
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
79
+ else:
80
+
81
+ class Config:
82
+ frozen = True
83
+ smart_union = True
84
+ extra = pydantic.Extra.allow
85
+
86
+
87
+ StreamingTranscriptionResponse = typing.Union[
88
+ StreamingTranscriptionResponse_Transcript,
89
+ StreamingTranscriptionResponse_FlushDone,
90
+ StreamingTranscriptionResponse_Done,
91
+ StreamingTranscriptionResponse_Error,
92
+ ]
@@ -0,0 +1,5 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ SttEncoding = typing.Union[typing.Literal["pcm_s16le"], typing.Any]
@@ -0,0 +1,44 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ...core.pydantic_utilities import UniversalBaseModel
4
+ import pydantic
5
+ import typing
6
+ from ...core.pydantic_utilities import IS_PYDANTIC_V2
7
+
8
+
9
+ class TranscriptMessage(UniversalBaseModel):
10
+ request_id: str = pydantic.Field()
11
+ """
12
+ Unique identifier for this transcription session.
13
+ """
14
+
15
+ text: str = pydantic.Field()
16
+ """
17
+ The transcribed text. May be partial or final depending on is_final.
18
+
19
+ **Note**: Text may be empty in initial responses while the system accumulates sufficient audio for transcription. This is normal behavior - wait for responses with non-empty text or monitor is_final for completion status.
20
+ """
21
+
22
+ is_final: bool = pydantic.Field()
23
+ """
24
+ Whether this is a final transcription result or an interim result.
25
+ """
26
+
27
+ duration: typing.Optional[float] = pydantic.Field(default=None)
28
+ """
29
+ The duration of the audio transcribed so far, in seconds.
30
+ """
31
+
32
+ language: typing.Optional[str] = pydantic.Field(default=None)
33
+ """
34
+ The detected or specified language of the input audio.
35
+ """
36
+
37
+ if IS_PYDANTIC_V2:
38
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
39
+ else:
40
+
41
+ class Config:
42
+ frozen = True
43
+ smart_union = True
44
+ extra = pydantic.Extra.allow
@@ -0,0 +1,32 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ from ...core.pydantic_utilities import UniversalBaseModel
4
+ import pydantic
5
+ import typing
6
+ from ...core.pydantic_utilities import IS_PYDANTIC_V2
7
+
8
+
9
+ class TranscriptionResponse(UniversalBaseModel):
10
+ text: str = pydantic.Field()
11
+ """
12
+ The transcribed text.
13
+ """
14
+
15
+ language: typing.Optional[str] = pydantic.Field(default=None)
16
+ """
17
+ The detected or specified language of the input audio.
18
+ """
19
+
20
+ duration: typing.Optional[float] = pydantic.Field(default=None)
21
+ """
22
+ The duration of the input audio in seconds.
23
+ """
24
+
25
+ if IS_PYDANTIC_V2:
26
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
27
+ else:
28
+
29
+ class Config:
30
+ frozen = True
31
+ smart_union = True
32
+ extra = pydantic.Extra.allow
@@ -154,7 +154,7 @@ class _TTSContext:
154
154
  f"Error generating audio:\n{response_obj.error}"
155
155
  )
156
156
  if isinstance(response_obj, WebSocketResponse_Done):
157
- break
157
+ return
158
158
  if (
159
159
  isinstance(response_obj, WebSocketResponse_Chunk)
160
160
  or isinstance(response_obj, WebSocketResponse_Timestamps)
@@ -185,7 +185,7 @@ class _TTSContext:
185
185
  f"Error generating audio:\n{response_obj.error}"
186
186
  )
187
187
  if isinstance(response_obj, WebSocketResponse_Done):
188
- break
188
+ return
189
189
  if (
190
190
  isinstance(response_obj, WebSocketResponse_Chunk)
191
191
  or isinstance(response_obj, WebSocketResponse_Timestamps)
@@ -221,7 +221,7 @@ class _TTSContext:
221
221
  if isinstance(response_obj, WebSocketResponse_Error):
222
222
  raise RuntimeError(f"Error generating audio:\n{response_obj.error}")
223
223
  if isinstance(response_obj, WebSocketResponse_Done):
224
- break
224
+ return
225
225
  yield self._websocket._convert_response(
226
226
  response_obj, include_context_id=True
227
227
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cartesia
3
- Version: 2.0.3
3
+ Version: 2.0.5
4
4
  Summary:
5
5
  Requires-Python: >=3.8,<4.0
6
6
  Classifier: Intended Audience :: Developers
@@ -213,6 +213,161 @@ p.terminate()
213
213
  ws.close() # Close the websocket connection
214
214
  ```
215
215
 
216
+ ## Speech-to-Text (STT) with Websockets
217
+
218
+ ```python
219
+ from cartesia import Cartesia
220
+ import os
221
+
222
+ client = Cartesia(api_key=os.getenv("CARTESIA_API_KEY"))
223
+
224
+ # Load your audio file as bytes
225
+ with open("path/to/audio.wav", "rb") as f:
226
+ audio_data = f.read()
227
+
228
+ # Convert to audio chunks (20ms chunks used here for a streaming example)
229
+ # This chunk size is calculated for 16kHz, 16-bit audio: 16000 * 0.02 * 2 = 640 bytes
230
+ chunk_size = 640
231
+ audio_chunks = [audio_data[i:i+chunk_size] for i in range(0, len(audio_data), chunk_size)]
232
+
233
+ # Create websocket connection
234
+ ws = client.stt.websocket(
235
+ model="ink-whisper",
236
+ language="en", # Must match the language of your audio
237
+ encoding="pcm_s16le", # Must match your audio's encoding format
238
+ sample_rate=16000, # Must match your audio's sample rate
239
+ )
240
+
241
+ # Send audio chunks (streaming approach)
242
+ for chunk in audio_chunks:
243
+ ws.send(chunk)
244
+
245
+ # Finalize and close
246
+ ws.send("finalize")
247
+ ws.send("done")
248
+
249
+ # Receive transcription results
250
+ for result in ws.receive():
251
+ if result['type'] == 'transcript':
252
+ print(f"Transcription: {result['text']}")
253
+ if result['is_final']:
254
+ print("Final result received")
255
+ elif result['type'] == 'done':
256
+ break
257
+
258
+ ws.close()
259
+ ```
260
+
261
+ ### Async Streaming Speech-to-Text (STT) with Websockets
262
+
263
+ For real-time streaming applications, here's a more practical async example that demonstrates concurrent audio processing and result handling:
264
+
265
+ ```python
266
+ import asyncio
267
+ import os
268
+ from cartesia import AsyncCartesia
269
+
270
+ async def streaming_stt_example():
271
+ """
272
+ Advanced async STT example for real-time streaming applications.
273
+ This example simulates streaming audio processing with proper error handling.
274
+ """
275
+ client = AsyncCartesia(api_key=os.getenv("CARTESIA_API_KEY"))
276
+
277
+ try:
278
+ # Create websocket connection
279
+ ws = await client.stt.websocket(
280
+ model="ink-whisper",
281
+ language="en", # Must match the language of your audio
282
+ encoding="pcm_s16le", # Must match your audio's encoding format
283
+ sample_rate=16000, # Must match your audio's sample rate
284
+ )
285
+
286
+ # Simulate streaming audio data (replace with your audio source)
287
+ async def audio_stream():
288
+ """Simulate real-time audio streaming - replace with actual audio capture"""
289
+ # Load audio file for simulation
290
+ with open("path/to/audio.wav", "rb") as f:
291
+ audio_data = f.read()
292
+
293
+ # Stream in 100ms chunks (realistic for real-time processing)
294
+ chunk_size = int(16000 * 0.1 * 2) # 100ms at 16kHz, 16-bit
295
+
296
+ for i in range(0, len(audio_data), chunk_size):
297
+ chunk = audio_data[i:i + chunk_size]
298
+ if chunk:
299
+ yield chunk
300
+ # Simulate real-time streaming delay
301
+ await asyncio.sleep(0.1)
302
+
303
+ # Send audio and receive results concurrently
304
+ async def send_audio():
305
+ """Send audio chunks to the STT websocket"""
306
+ try:
307
+ async for chunk in audio_stream():
308
+ await ws.send(chunk)
309
+ print(f"Sent audio chunk of {len(chunk)} bytes")
310
+ # Small delay to simulate realtime applications
311
+ await asyncio.sleep(0.02)
312
+
313
+ # Signal end of audio stream
314
+ await ws.send("finalize")
315
+ await ws.send("done")
316
+ print("Audio streaming completed")
317
+
318
+ except Exception as e:
319
+ print(f"Error sending audio: {e}")
320
+
321
+ async def receive_transcripts():
322
+ """Receive and process transcription results"""
323
+ full_transcript = ""
324
+
325
+ try:
326
+ async for result in ws.receive():
327
+ if result['type'] == 'transcript':
328
+ text = result['text']
329
+ is_final = result['is_final']
330
+
331
+ if is_final:
332
+ # Final result - this text won't change
333
+ full_transcript += text + " "
334
+ print(f"FINAL: {text}")
335
+ else:
336
+ # Partial result - may change as more audio is processed
337
+ print(f"PARTIAL: {text}")
338
+
339
+ elif result['type'] == 'done':
340
+ print("Transcription completed")
341
+ break
342
+
343
+ except Exception as e:
344
+ print(f"Error receiving transcripts: {e}")
345
+
346
+ return full_transcript.strip()
347
+
348
+ print("Starting streaming STT...")
349
+
350
+ # Use asyncio.gather to run audio sending and transcript receiving concurrently
351
+ _, final_transcript = await asyncio.gather(
352
+ send_audio(),
353
+ receive_transcripts()
354
+ )
355
+
356
+ print(f"\nComplete transcript: {final_transcript}")
357
+
358
+ # Clean up
359
+ await ws.close()
360
+
361
+ except Exception as e:
362
+ print(f"STT streaming error: {e}")
363
+ finally:
364
+ await client.close()
365
+
366
+ # Run the example
367
+ if __name__ == "__main__":
368
+ asyncio.run(streaming_stt_example())
369
+ ```
370
+
216
371
  ## Voices
217
372
 
218
373
  List all available Voices with `client.voices.list`, which returns an iterable that automatically handles pagination:
@@ -358,7 +513,6 @@ new_voice = client.voices.create(
358
513
  language="en"
359
514
  )
360
515
  ```
361
-
362
516
  ### Custom Client
363
517
 
364
518
  You can override the `httpx` client to customize it for your use-case. Some common use-cases include support for proxies
@@ -412,3 +566,6 @@ $ git commit --amend -m "manually regenerate from docs" # optional
412
566
 
413
567
  From https://github.com/cartesia-ai/docs click `Actions` then `Release Python SDK`. (Requires permissions.)
414
568
 
569
+
570
+
571
+
@@ -1,4 +1,4 @@
1
- cartesia/__init__.py,sha256=p9ilqR-oE6N6pPQbiKUbnfEdDy00ihjNTtg7ES7EHg0,8448
1
+ cartesia/__init__.py,sha256=aJVi_CoPyZ9i3PV0X8znskO0Jir6bfIAPVjKGvQHQmY,9957
2
2
  cartesia/api_status/__init__.py,sha256=_dHNLdknrBjxHtU2PvLumttJM-JTQhJQqhhAQkLqt_U,168
3
3
  cartesia/api_status/client.py,sha256=GJ9Dq8iCn3hn8vCIqc6k1fCGEhSz0T0kaPGcdFnbMDY,3146
4
4
  cartesia/api_status/requests/__init__.py,sha256=ilEMzEy1JEw484CuL92bX5lHGOznc62pjiDMgiZ0tKM,130
@@ -15,11 +15,11 @@ cartesia/auth/types/__init__.py,sha256=iZrkHrlWs8e9KkR27f2IG-B72HC_N05A7Lcyt_EU9
15
15
  cartesia/auth/types/token_grant.py,sha256=sdEqlqS95XSy_Xdp4TEeRSC1hQp4nbPv1HHZFxbU0So,666
16
16
  cartesia/auth/types/token_request.py,sha256=2cx2OBXTEjrbuVMOpBzkIm9-DZD2mGiWE6Ui3kumxGI,893
17
17
  cartesia/auth/types/token_response.py,sha256=_GcvfQdjwgNu1ODj8EuTkaMsez508a6xuOo8HOVNOJQ,626
18
- cartesia/base_client.py,sha256=YH0l0UUzanAa9mDdJU6BFQ9XKELiaPTm9NsJpVQ4evA,6539
19
- cartesia/client.py,sha256=sPAYQLt9W2E_2F17ooocvvJImuNyLrL8xUypgf6dZeI,6238
18
+ cartesia/base_client.py,sha256=igAZOMDXz2Nv58oXHa7I9UfgxVN48drqhEmfsCCQlg8,6701
19
+ cartesia/client.py,sha256=LoJjlJW2kJA-hyDt-Wu7QuKQsiTiLQfLYZjsjtewPJM,6537
20
20
  cartesia/core/__init__.py,sha256=-t9txgeQZL_1FDw_08GEoj4ft1Cn9Dti6X0Drsadlr0,1519
21
21
  cartesia/core/api_error.py,sha256=RE8LELok2QCjABadECTvtDp7qejA1VmINCh6TbqPwSE,426
22
- cartesia/core/client_wrapper.py,sha256=xKyHqaGJ7V2OuMGkVOEjxofnt8QaFjgiEIom7EWhBBI,1854
22
+ cartesia/core/client_wrapper.py,sha256=hvkz6qsmuAuZEKl86cWmFoKGN9WEIGEitiTe0ge6ODQ,1854
23
23
  cartesia/core/datetime_utils.py,sha256=nBys2IsYrhPdszxGKCNRPSOCwa-5DWOHG95FB8G9PKo,1047
24
24
  cartesia/core/file.py,sha256=d4NNbX8XvXP32z8KpK2Xovv33nFfruIrpz0QWxlgpZk,2663
25
25
  cartesia/core/http_client.py,sha256=KL5RGa0y4n8nX0-07WRg4ZQUTq30sc-XJbWcP5vjBDg,19552
@@ -51,9 +51,28 @@ cartesia/environment.py,sha256=Qnp91BGLic7hXmKsiYub2m3nPfvDWm59aB1wWta1J6A,160
51
51
  cartesia/infill/__init__.py,sha256=FTtvy8EDg9nNNg9WCatVgKTRYV8-_v1roeGPAKoa_pw,65
52
52
  cartesia/infill/client.py,sha256=PWE5Ak-wsaBM_8g52oDl9PYx76PkW6f900mnxvZf4Bk,12571
53
53
  cartesia/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
+ cartesia/stt/__init__.py,sha256=tfwo6MBzRGeKhhXKfSKQPhHjSeTr0jTib9hv7a9OJyg,1601
55
+ cartesia/stt/_async_websocket.py,sha256=YMOHdRmGLD2jsQzqK8UlcVkS-hG0PsXhBi17t6tccLo,11673
56
+ cartesia/stt/_websocket.py,sha256=d0Nmsu_VgVyR6OBgrx5KcvyjNXycDB7rruDRF2WbNc8,10864
57
+ cartesia/stt/requests/__init__.py,sha256=xufSQ2wiPAPP6J45-niiaRKGHkdMAZcUCApVcu8CAkQ,1036
58
+ cartesia/stt/requests/done_message.py,sha256=7kCw8FrTZ6C5MS1xTkCOonYPcaqttbzG6TRvMj_-Z8I,388
59
+ cartesia/stt/requests/error_message.py,sha256=AbVs03q-Rdp2AFmaJqj-b3RshYqhIQeSiQO3zOkFdiA,395
60
+ cartesia/stt/requests/flush_done_message.py,sha256=zCMsHdoXXsBS8jz-ZAIRkEyAsbgqYCI5jPdBHEBFHLY,394
61
+ cartesia/stt/requests/streaming_transcription_response.py,sha256=torouKJLwjB6SJNGYQwMsZG9q1nQEoRInTicpNFzzRM,1159
62
+ cartesia/stt/requests/transcript_message.py,sha256=H7vx-c2BmdiekPtiPXX3mvhgzxj0EeGEC6oeAQZ_YQU,964
63
+ cartesia/stt/requests/transcription_response.py,sha256=jV-FMzKp_cfvhQq3VmBvxY3-mi8zsWkdH6RwbBvPIUM,478
64
+ cartesia/stt/socket_client.py,sha256=Ly5lBPUbnYsiOjiidzSVFGEIu_ojuw9gqITIrP9qGdQ,7006
65
+ cartesia/stt/types/__init__.py,sha256=yVtbBSSFiTIBc0bEEffZef-oZsYPGJ3VCZd5m_N_uFI,973
66
+ cartesia/stt/types/done_message.py,sha256=F3Upci6Lm3Wcd_Ga4Uxxw9WO7XB3y54hrvR1cFqPxlo,803
67
+ cartesia/stt/types/error_message.py,sha256=7HmoN7pBymPvJSB9JHwvMp3iXP-4xxd-ATpr-U68ocA,802
68
+ cartesia/stt/types/flush_done_message.py,sha256=uaDC6IBtZQ9ahPS575ezZiH6neR5JDnaI9KOemCeIwI,809
69
+ cartesia/stt/types/streaming_transcription_response.py,sha256=ZrOvlwRF068NQ5xm09WU0Nb8HH9yhDoubESMJvYKjPE,3063
70
+ cartesia/stt/types/stt_encoding.py,sha256=OLxgmaNExZVFD1LXsEXcblALyylKIDePapAjDAI0r7w,148
71
+ cartesia/stt/types/transcript_message.py,sha256=U7g0wAhA1T21Ls1KP4chuigwgGe15Ea-vsDWBSpm5e8,1426
72
+ cartesia/stt/types/transcription_response.py,sha256=IJO6rDyO_5YmjlBUJX-3CdguZwB9ezQ4d9U4cG1V8Uw,902
54
73
  cartesia/tts/__init__.py,sha256=YrVxJT7i-0wygFgN2hOVftYLEM7JoFgCo3SvLoN7pkA,4735
55
74
  cartesia/tts/_async_websocket.py,sha256=tJ-6rdJrviKvGhSW8J8t-rCinXM5gXXQJgDO8OgW3EE,18805
56
- cartesia/tts/_websocket.py,sha256=Uk6B-TP-0nzeyFE9w-_PzNIiVYP14rKqSDZlm6bU24Q,19271
75
+ cartesia/tts/_websocket.py,sha256=bYaJ5vmCAl8AYrIJsqP3aA_nkFTeN3ey-Zc1nql_I3g,19274
57
76
  cartesia/tts/client.py,sha256=0jWpiNKPp4QbyibfB2tsFb7wqQ9vb4m_QlLB-qxzKP8,15398
58
77
  cartesia/tts/requests/__init__.py,sha256=0rcfMLHNbUhkRI1xS09UE4p-WT1BCqrcblFtPxcATOI,3261
59
78
  cartesia/tts/requests/cancel_context_request.py,sha256=Wl8g-o5vwl9ENm-H1wsLx441FkIR_4Wt5UYtuWce2Yw,431
@@ -171,6 +190,6 @@ cartesia/voices/types/voice_expand_options.py,sha256=e4FroWdlxEE-LXQfT1RWlGHtswl
171
190
  cartesia/voices/types/voice_id.py,sha256=GDoXcRVeIm-V21R4suxG2zqLD3DLYkXE9kgizadzFKo,79
172
191
  cartesia/voices/types/voice_metadata.py,sha256=4KNGjXMUKm3niv-NvKIFVGtiilpH13heuzKcZYNQxk4,1181
173
192
  cartesia/voices/types/weight.py,sha256=XqDU7_JItNUb5QykIDqTbELlRYQdbt2SviRgW0w2LKo,80
174
- cartesia-2.0.3.dist-info/METADATA,sha256=cW9xivCIN1lB-8xc8V_-DMwh0pwJa3gwmsYO3XwJl0M,11206
175
- cartesia-2.0.3.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
176
- cartesia-2.0.3.dist-info/RECORD,,
193
+ cartesia-2.0.5.dist-info/METADATA,sha256=07frH81jDGiPEaVtyn2_sKwXyFWw81XkWWqsEWWV1Zw,16627
194
+ cartesia-2.0.5.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
195
+ cartesia-2.0.5.dist-info/RECORD,,