cartesia 2.0.4__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.
- cartesia/__init__.py +46 -1
- cartesia/base_client.py +2 -0
- cartesia/client.py +5 -0
- cartesia/core/client_wrapper.py +1 -1
- cartesia/stt/__init__.py +51 -0
- cartesia/stt/_async_websocket.py +284 -0
- cartesia/stt/_websocket.py +272 -0
- cartesia/stt/requests/__init__.py +27 -0
- cartesia/stt/requests/done_message.py +14 -0
- cartesia/stt/requests/error_message.py +16 -0
- cartesia/stt/requests/flush_done_message.py +14 -0
- cartesia/stt/requests/streaming_transcription_response.py +39 -0
- cartesia/stt/requests/transcript_message.py +33 -0
- cartesia/stt/requests/transcription_response.py +21 -0
- cartesia/stt/socket_client.py +195 -0
- cartesia/stt/types/__init__.py +29 -0
- cartesia/stt/types/done_message.py +26 -0
- cartesia/stt/types/error_message.py +27 -0
- cartesia/stt/types/flush_done_message.py +26 -0
- cartesia/stt/types/streaming_transcription_response.py +92 -0
- cartesia/stt/types/stt_encoding.py +5 -0
- cartesia/stt/types/transcript_message.py +44 -0
- cartesia/stt/types/transcription_response.py +32 -0
- {cartesia-2.0.4.dist-info → cartesia-2.0.5.dist-info}/METADATA +159 -2
- {cartesia-2.0.4.dist-info → cartesia-2.0.5.dist-info}/RECORD +26 -7
- {cartesia-2.0.4.dist-info → cartesia-2.0.5.dist-info}/WHEEL +0 -0
@@ -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,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
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: cartesia
|
3
|
-
Version: 2.0.
|
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=
|
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=
|
19
|
-
cartesia/client.py,sha256=
|
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=
|
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,6 +51,25 @@ 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
75
|
cartesia/tts/_websocket.py,sha256=bYaJ5vmCAl8AYrIJsqP3aA_nkFTeN3ey-Zc1nql_I3g,19274
|
@@ -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.
|
175
|
-
cartesia-2.0.
|
176
|
-
cartesia-2.0.
|
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,,
|
File without changes
|