livekit-plugins-elevenlabs 0.8.1__py3-none-any.whl → 1.0.0__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.
- livekit/plugins/elevenlabs/__init__.py +2 -2
- livekit/plugins/elevenlabs/models.py +9 -1
- livekit/plugins/elevenlabs/tts.py +95 -92
- livekit/plugins/elevenlabs/version.py +1 -1
- {livekit_plugins_elevenlabs-0.8.1.dist-info → livekit_plugins_elevenlabs-1.0.0.dist-info}/METADATA +10 -20
- livekit_plugins_elevenlabs-1.0.0.dist-info/RECORD +9 -0
- {livekit_plugins_elevenlabs-0.8.1.dist-info → livekit_plugins_elevenlabs-1.0.0.dist-info}/WHEEL +1 -2
- livekit_plugins_elevenlabs-0.8.1.dist-info/RECORD +0 -10
- livekit_plugins_elevenlabs-0.8.1.dist-info/top_level.txt +0 -1
@@ -13,7 +13,7 @@
|
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
15
|
from .models import TTSEncoding, TTSModels
|
16
|
-
from .tts import
|
16
|
+
from .tts import DEFAULT_VOICE_ID, TTS, Voice, VoiceSettings
|
17
17
|
from .version import __version__
|
18
18
|
|
19
19
|
__all__ = [
|
@@ -22,7 +22,7 @@ __all__ = [
|
|
22
22
|
"VoiceSettings",
|
23
23
|
"TTSEncoding",
|
24
24
|
"TTSModels",
|
25
|
-
"
|
25
|
+
"DEFAULT_VOICE_ID",
|
26
26
|
"__version__",
|
27
27
|
]
|
28
28
|
|
@@ -10,4 +10,12 @@ TTSModels = Literal[
|
|
10
10
|
"eleven_flash_v2",
|
11
11
|
]
|
12
12
|
|
13
|
-
TTSEncoding = Literal[
|
13
|
+
TTSEncoding = Literal[
|
14
|
+
"mp3_22050_32",
|
15
|
+
"mp3_44100",
|
16
|
+
"mp3_44100_32",
|
17
|
+
"mp3_44100_64",
|
18
|
+
"mp3_44100_96",
|
19
|
+
"mp3_44100_128",
|
20
|
+
"mp3_44100_192",
|
21
|
+
]
|
@@ -21,9 +21,10 @@ import json
|
|
21
21
|
import os
|
22
22
|
import weakref
|
23
23
|
from dataclasses import dataclass
|
24
|
-
from typing import Any
|
24
|
+
from typing import Any
|
25
25
|
|
26
26
|
import aiohttp
|
27
|
+
|
27
28
|
from livekit.agents import (
|
28
29
|
APIConnectionError,
|
29
30
|
APIConnectOptions,
|
@@ -33,11 +34,19 @@ from livekit.agents import (
|
|
33
34
|
tts,
|
34
35
|
utils,
|
35
36
|
)
|
37
|
+
from livekit.agents.types import (
|
38
|
+
DEFAULT_API_CONNECT_OPTIONS,
|
39
|
+
NOT_GIVEN,
|
40
|
+
NotGivenOr,
|
41
|
+
)
|
42
|
+
from livekit.agents.utils import is_given
|
36
43
|
|
37
44
|
from .log import logger
|
38
45
|
from .models import TTSEncoding, TTSModels
|
39
46
|
|
40
|
-
|
47
|
+
# by default, use 22.05kHz sample rate at 32kbps
|
48
|
+
# in our testing, reduce TTFB by about ~110ms
|
49
|
+
_DefaultEncoding: TTSEncoding = "mp3_22050_32"
|
41
50
|
|
42
51
|
|
43
52
|
def _sample_rate_from_format(output_format: TTSEncoding) -> int:
|
@@ -49,9 +58,9 @@ def _sample_rate_from_format(output_format: TTSEncoding) -> int:
|
|
49
58
|
class VoiceSettings:
|
50
59
|
stability: float # [0.0 - 1.0]
|
51
60
|
similarity_boost: float # [0.0 - 1.0]
|
52
|
-
style: float
|
53
|
-
speed: float
|
54
|
-
use_speaker_boost: bool
|
61
|
+
style: NotGivenOr[float] = NOT_GIVEN # [0.0 - 1.0]
|
62
|
+
speed: NotGivenOr[float] = NOT_GIVEN # [0.8 - 1.2]
|
63
|
+
use_speaker_boost: NotGivenOr[bool] = NOT_GIVEN
|
55
64
|
|
56
65
|
|
57
66
|
@dataclass
|
@@ -59,22 +68,9 @@ class Voice:
|
|
59
68
|
id: str
|
60
69
|
name: str
|
61
70
|
category: str
|
62
|
-
settings: VoiceSettings | None = None
|
63
|
-
|
64
|
-
|
65
|
-
DEFAULT_VOICE = Voice(
|
66
|
-
id="EXAVITQu4vr4xnSDxMaL",
|
67
|
-
name="Bella",
|
68
|
-
category="premade",
|
69
|
-
settings=VoiceSettings(
|
70
|
-
stability=0.71,
|
71
|
-
speed=1.0,
|
72
|
-
similarity_boost=0.5,
|
73
|
-
style=0.0,
|
74
|
-
use_speaker_boost=True,
|
75
|
-
),
|
76
|
-
)
|
77
71
|
|
72
|
+
|
73
|
+
DEFAULT_VOICE_ID = "EXAVITQu4vr4xnSDxMaL"
|
78
74
|
API_BASE_URL_V1 = "https://api.elevenlabs.io/v1"
|
79
75
|
AUTHORIZATION_HEADER = "xi-api-key"
|
80
76
|
WS_INACTIVITY_TIMEOUT = 300
|
@@ -83,13 +79,14 @@ WS_INACTIVITY_TIMEOUT = 300
|
|
83
79
|
@dataclass
|
84
80
|
class _TTSOptions:
|
85
81
|
api_key: str
|
86
|
-
|
82
|
+
voice_id: str
|
83
|
+
voice_settings: NotGivenOr[VoiceSettings]
|
87
84
|
model: TTSModels | str
|
88
|
-
language: str
|
85
|
+
language: NotGivenOr[str]
|
89
86
|
base_url: str
|
90
87
|
encoding: TTSEncoding
|
91
88
|
sample_rate: int
|
92
|
-
streaming_latency: int
|
89
|
+
streaming_latency: NotGivenOr[int]
|
93
90
|
word_tokenizer: tokenize.WordTokenizer
|
94
91
|
chunk_length_schedule: list[int]
|
95
92
|
enable_ssml_parsing: bool
|
@@ -100,68 +97,70 @@ class TTS(tts.TTS):
|
|
100
97
|
def __init__(
|
101
98
|
self,
|
102
99
|
*,
|
103
|
-
|
100
|
+
voice_id: str = DEFAULT_VOICE_ID,
|
101
|
+
voice_settings: NotGivenOr[VoiceSettings] = NOT_GIVEN,
|
104
102
|
model: TTSModels | str = "eleven_flash_v2_5",
|
105
|
-
|
106
|
-
|
107
|
-
|
103
|
+
encoding: NotGivenOr[TTSEncoding] = NOT_GIVEN,
|
104
|
+
api_key: NotGivenOr[str] = NOT_GIVEN,
|
105
|
+
base_url: NotGivenOr[str] = NOT_GIVEN,
|
106
|
+
streaming_latency: NotGivenOr[int] = NOT_GIVEN,
|
108
107
|
inactivity_timeout: int = WS_INACTIVITY_TIMEOUT,
|
109
|
-
word_tokenizer:
|
108
|
+
word_tokenizer: NotGivenOr[tokenize.WordTokenizer] = NOT_GIVEN,
|
110
109
|
enable_ssml_parsing: bool = False,
|
111
|
-
chunk_length_schedule: list[int] =
|
110
|
+
chunk_length_schedule: NotGivenOr[list[int]] = NOT_GIVEN, # range is [50, 500]
|
112
111
|
http_session: aiohttp.ClientSession | None = None,
|
113
|
-
|
114
|
-
model_id: TTSModels | str | None = None,
|
115
|
-
language: str | None = None,
|
112
|
+
language: NotGivenOr[str] = NOT_GIVEN,
|
116
113
|
) -> None:
|
117
114
|
"""
|
118
115
|
Create a new instance of ElevenLabs TTS.
|
119
116
|
|
120
117
|
Args:
|
121
|
-
|
118
|
+
voice_id (str): Voice ID. Defaults to `DEFAULT_VOICE_ID`.
|
119
|
+
voice_settings (NotGivenOr[VoiceSettings]): Voice settings.
|
122
120
|
model (TTSModels | str): TTS model to use. Defaults to "eleven_turbo_v2_5".
|
123
|
-
api_key (str
|
124
|
-
base_url (str
|
125
|
-
streaming_latency (int): Optimize for streaming latency, defaults to 0 - disabled. 4 for max latency optimizations. deprecated
|
121
|
+
api_key (NotGivenOr[str]): ElevenLabs API key. Can be set via argument or `ELEVEN_API_KEY` environment variable.
|
122
|
+
base_url (NotGivenOr[str]): Custom base URL for the API. Optional.
|
123
|
+
streaming_latency (NotGivenOr[int]): Optimize for streaming latency, defaults to 0 - disabled. 4 for max latency optimizations. deprecated
|
126
124
|
inactivity_timeout (int): Inactivity timeout in seconds for the websocket connection. Defaults to 300.
|
127
|
-
word_tokenizer (tokenize.WordTokenizer): Tokenizer for processing text. Defaults to basic WordTokenizer.
|
125
|
+
word_tokenizer (NotGivenOr[tokenize.WordTokenizer]): Tokenizer for processing text. Defaults to basic WordTokenizer.
|
128
126
|
enable_ssml_parsing (bool): Enable SSML parsing for input text. Defaults to False.
|
129
|
-
chunk_length_schedule (list[int]): Schedule for chunk lengths, ranging from 50 to 500. Defaults to [80, 120, 200, 260].
|
127
|
+
chunk_length_schedule (NotGivenOr[list[int]]): Schedule for chunk lengths, ranging from 50 to 500. Defaults to [80, 120, 200, 260].
|
130
128
|
http_session (aiohttp.ClientSession | None): Custom HTTP session for API requests. Optional.
|
131
|
-
language (str
|
132
|
-
"""
|
129
|
+
language (NotGivenOr[str]): Language code for the TTS model, as of 10/24/24 only valid for "eleven_turbo_v2_5".
|
130
|
+
""" # noqa: E501
|
131
|
+
|
132
|
+
if not is_given(chunk_length_schedule):
|
133
|
+
chunk_length_schedule = [80, 120, 200, 260]
|
134
|
+
|
135
|
+
if not is_given(encoding):
|
136
|
+
encoding = _DefaultEncoding
|
133
137
|
|
134
138
|
super().__init__(
|
135
139
|
capabilities=tts.TTSCapabilities(
|
136
140
|
streaming=True,
|
137
141
|
),
|
138
|
-
sample_rate=_sample_rate_from_format(
|
142
|
+
sample_rate=_sample_rate_from_format(encoding),
|
139
143
|
num_channels=1,
|
140
144
|
)
|
141
145
|
|
142
|
-
if
|
143
|
-
|
144
|
-
"model_id is deprecated and will be removed in 1.5.0, use model instead",
|
145
|
-
)
|
146
|
-
model = model_id
|
147
|
-
|
148
|
-
api_key = api_key or os.environ.get("ELEVEN_API_KEY")
|
149
|
-
if not api_key:
|
146
|
+
elevenlabs_api_key = api_key if is_given(api_key) else os.environ.get("ELEVEN_API_KEY")
|
147
|
+
if not elevenlabs_api_key:
|
150
148
|
raise ValueError(
|
151
|
-
"ElevenLabs API key is required, either as argument or set ELEVEN_API_KEY environmental variable"
|
149
|
+
"ElevenLabs API key is required, either as argument or set ELEVEN_API_KEY environmental variable" # noqa: E501
|
152
150
|
)
|
153
151
|
|
154
|
-
if word_tokenizer
|
152
|
+
if not is_given(word_tokenizer):
|
155
153
|
word_tokenizer = tokenize.basic.WordTokenizer(
|
156
154
|
ignore_punctuation=False # punctuation can help for intonation
|
157
155
|
)
|
158
156
|
|
159
157
|
self._opts = _TTSOptions(
|
160
|
-
|
158
|
+
voice_id=voice_id,
|
159
|
+
voice_settings=voice_settings,
|
161
160
|
model=model,
|
162
|
-
api_key=
|
163
|
-
base_url=base_url
|
164
|
-
encoding=
|
161
|
+
api_key=elevenlabs_api_key,
|
162
|
+
base_url=base_url if is_given(base_url) else API_BASE_URL_V1,
|
163
|
+
encoding=encoding,
|
165
164
|
sample_rate=self.sample_rate,
|
166
165
|
streaming_latency=streaming_latency,
|
167
166
|
word_tokenizer=word_tokenizer,
|
@@ -179,7 +178,7 @@ class TTS(tts.TTS):
|
|
179
178
|
|
180
179
|
return self._session
|
181
180
|
|
182
|
-
async def list_voices(self) ->
|
181
|
+
async def list_voices(self) -> list[Voice]:
|
183
182
|
async with self._ensure_session().get(
|
184
183
|
f"{self._opts.base_url}/voices",
|
185
184
|
headers={AUTHORIZATION_HEADER: self._opts.api_key},
|
@@ -189,26 +188,33 @@ class TTS(tts.TTS):
|
|
189
188
|
def update_options(
|
190
189
|
self,
|
191
190
|
*,
|
192
|
-
|
193
|
-
|
194
|
-
|
191
|
+
voice_id: NotGivenOr[str] = NOT_GIVEN,
|
192
|
+
voice_settings: NotGivenOr[VoiceSettings] = NOT_GIVEN,
|
193
|
+
model: NotGivenOr[TTSModels | str] = NOT_GIVEN,
|
194
|
+
language: NotGivenOr[str] = NOT_GIVEN,
|
195
195
|
) -> None:
|
196
196
|
"""
|
197
197
|
Args:
|
198
|
-
|
199
|
-
|
200
|
-
|
198
|
+
voice_id (NotGivenOr[str]): Voice ID.
|
199
|
+
voice_settings (NotGivenOr[VoiceSettings]): Voice settings.
|
200
|
+
model (NotGivenOr[TTSModels | str]): TTS model to use.
|
201
|
+
language (NotGivenOr[str]): Language code for the TTS model.
|
201
202
|
"""
|
202
|
-
|
203
|
-
|
204
|
-
|
203
|
+
if is_given(model):
|
204
|
+
self._opts.model = model
|
205
|
+
if is_given(voice_id):
|
206
|
+
self._opts.voice_id = voice_id
|
207
|
+
if is_given(voice_settings):
|
208
|
+
self._opts.voice_settings = voice_settings
|
209
|
+
if is_given(language):
|
210
|
+
self._opts.language = language
|
205
211
|
|
206
212
|
def synthesize(
|
207
213
|
self,
|
208
214
|
text: str,
|
209
215
|
*,
|
210
|
-
conn_options:
|
211
|
-
) ->
|
216
|
+
conn_options: APIConnectOptions = DEFAULT_API_CONNECT_OPTIONS,
|
217
|
+
) -> ChunkedStream:
|
212
218
|
return ChunkedStream(
|
213
219
|
tts=self,
|
214
220
|
input_text=text,
|
@@ -218,8 +224,8 @@ class TTS(tts.TTS):
|
|
218
224
|
)
|
219
225
|
|
220
226
|
def stream(
|
221
|
-
self, *, conn_options:
|
222
|
-
) ->
|
227
|
+
self, *, conn_options: APIConnectOptions = DEFAULT_API_CONNECT_OPTIONS
|
228
|
+
) -> SynthesizeStream:
|
223
229
|
stream = SynthesizeStream(
|
224
230
|
tts=self,
|
225
231
|
conn_options=conn_options,
|
@@ -245,7 +251,7 @@ class ChunkedStream(tts.ChunkedStream):
|
|
245
251
|
tts: TTS,
|
246
252
|
input_text: str,
|
247
253
|
opts: _TTSOptions,
|
248
|
-
conn_options:
|
254
|
+
conn_options: APIConnectOptions,
|
249
255
|
session: aiohttp.ClientSession,
|
250
256
|
) -> None:
|
251
257
|
super().__init__(tts=tts, input_text=input_text, conn_options=conn_options)
|
@@ -254,8 +260,8 @@ class ChunkedStream(tts.ChunkedStream):
|
|
254
260
|
async def _run(self) -> None:
|
255
261
|
request_id = utils.shortuuid()
|
256
262
|
voice_settings = (
|
257
|
-
_strip_nones(dataclasses.asdict(self._opts.
|
258
|
-
if self._opts.
|
263
|
+
_strip_nones(dataclasses.asdict(self._opts.voice_settings))
|
264
|
+
if is_given(self._opts.voice_settings)
|
259
265
|
else None
|
260
266
|
)
|
261
267
|
data = {
|
@@ -322,7 +328,7 @@ class SynthesizeStream(tts.SynthesizeStream):
|
|
322
328
|
tts: TTS,
|
323
329
|
session: aiohttp.ClientSession,
|
324
330
|
opts: _TTSOptions,
|
325
|
-
conn_options:
|
331
|
+
conn_options: APIConnectOptions,
|
326
332
|
):
|
327
333
|
super().__init__(tts=tts, conn_options=conn_options)
|
328
334
|
self._opts, self._session = opts, session
|
@@ -392,15 +398,13 @@ class SynthesizeStream(tts.SynthesizeStream):
|
|
392
398
|
)
|
393
399
|
|
394
400
|
# 11labs protocol expects the first message to be an "init msg"
|
395
|
-
init_pkt =
|
396
|
-
text
|
397
|
-
voice_settings
|
398
|
-
if self._opts.
|
401
|
+
init_pkt = {
|
402
|
+
"text": " ",
|
403
|
+
"voice_settings": _strip_nones(dataclasses.asdict(self._opts.voice_settings))
|
404
|
+
if is_given(self._opts.voice_settings)
|
399
405
|
else None,
|
400
|
-
generation_config
|
401
|
-
|
402
|
-
),
|
403
|
-
)
|
406
|
+
"generation_config": {"chunk_length_schedule": self._opts.chunk_length_schedule},
|
407
|
+
}
|
404
408
|
await ws_conn.send_str(json.dumps(init_pkt))
|
405
409
|
eos_sent = False
|
406
410
|
|
@@ -423,14 +427,14 @@ class SynthesizeStream(tts.SynthesizeStream):
|
|
423
427
|
else:
|
424
428
|
continue
|
425
429
|
|
426
|
-
data_pkt =
|
430
|
+
data_pkt = {"text": f"{text} "} # must always end with a space
|
427
431
|
self._mark_started()
|
428
432
|
await ws_conn.send_str(json.dumps(data_pkt))
|
429
433
|
if xml_content:
|
430
434
|
logger.warning("11labs stream ended with incomplete xml content")
|
431
435
|
|
432
436
|
# no more token, mark eos
|
433
|
-
eos_pkt =
|
437
|
+
eos_pkt = {"text": ""}
|
434
438
|
await ws_conn.send_str(json.dumps(eos_pkt))
|
435
439
|
eos_sent = True
|
436
440
|
|
@@ -460,7 +464,7 @@ class SynthesizeStream(tts.SynthesizeStream):
|
|
460
464
|
):
|
461
465
|
if not eos_sent:
|
462
466
|
raise APIStatusError(
|
463
|
-
"11labs connection closed unexpectedly, not all tokens have been consumed",
|
467
|
+
"11labs connection closed unexpectedly, not all tokens have been consumed", # noqa: E501
|
464
468
|
request_id=request_id,
|
465
469
|
)
|
466
470
|
return
|
@@ -520,40 +524,39 @@ class SynthesizeStream(tts.SynthesizeStream):
|
|
520
524
|
|
521
525
|
|
522
526
|
def _dict_to_voices_list(data: dict[str, Any]):
|
523
|
-
voices:
|
527
|
+
voices: list[Voice] = []
|
524
528
|
for voice in data["voices"]:
|
525
529
|
voices.append(
|
526
530
|
Voice(
|
527
531
|
id=voice["voice_id"],
|
528
532
|
name=voice["name"],
|
529
533
|
category=voice["category"],
|
530
|
-
settings=None,
|
531
534
|
)
|
532
535
|
)
|
533
536
|
return voices
|
534
537
|
|
535
538
|
|
536
539
|
def _strip_nones(data: dict[str, Any]):
|
537
|
-
return {k: v for k, v in data.items() if v is not None}
|
540
|
+
return {k: v for k, v in data.items() if is_given(v) and v is not None}
|
538
541
|
|
539
542
|
|
540
543
|
def _synthesize_url(opts: _TTSOptions) -> str:
|
541
544
|
base_url = opts.base_url
|
542
|
-
voice_id = opts.
|
545
|
+
voice_id = opts.voice_id
|
543
546
|
model_id = opts.model
|
544
547
|
output_format = opts.encoding
|
545
548
|
url = (
|
546
549
|
f"{base_url}/text-to-speech/{voice_id}/stream?"
|
547
550
|
f"model_id={model_id}&output_format={output_format}"
|
548
551
|
)
|
549
|
-
if opts.streaming_latency:
|
552
|
+
if is_given(opts.streaming_latency):
|
550
553
|
url += f"&optimize_streaming_latency={opts.streaming_latency}"
|
551
554
|
return url
|
552
555
|
|
553
556
|
|
554
557
|
def _stream_url(opts: _TTSOptions) -> str:
|
555
558
|
base_url = opts.base_url
|
556
|
-
voice_id = opts.
|
559
|
+
voice_id = opts.voice_id
|
557
560
|
model_id = opts.model
|
558
561
|
output_format = opts.encoding
|
559
562
|
enable_ssml = str(opts.enable_ssml_parsing).lower()
|
@@ -564,8 +567,8 @@ def _stream_url(opts: _TTSOptions) -> str:
|
|
564
567
|
f"model_id={model_id}&output_format={output_format}&"
|
565
568
|
f"enable_ssml_parsing={enable_ssml}&inactivity_timeout={inactivity_timeout}"
|
566
569
|
)
|
567
|
-
if language
|
570
|
+
if is_given(language):
|
568
571
|
url += f"&language_code={language}"
|
569
|
-
if opts.streaming_latency:
|
572
|
+
if is_given(opts.streaming_latency):
|
570
573
|
url += f"&optimize_streaming_latency={opts.streaming_latency}"
|
571
574
|
return url
|
{livekit_plugins_elevenlabs-0.8.1.dist-info → livekit_plugins_elevenlabs-1.0.0.dist-info}/METADATA
RENAMED
@@ -1,35 +1,25 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: livekit-plugins-elevenlabs
|
3
|
-
Version: 0.
|
3
|
+
Version: 1.0.0
|
4
4
|
Summary: Agent Framework plugin for voice synthesis with ElevenLabs' API.
|
5
|
-
Home-page: https://github.com/livekit/agents
|
6
|
-
License: Apache-2.0
|
7
5
|
Project-URL: Documentation, https://docs.livekit.io
|
8
6
|
Project-URL: Website, https://livekit.io/
|
9
7
|
Project-URL: Source, https://github.com/livekit/agents
|
10
|
-
|
8
|
+
Author-email: LiveKit <hello@livekit.io>
|
9
|
+
License-Expression: Apache-2.0
|
10
|
+
Keywords: audio,elevenlabs,livekit,realtime,video,webrtc
|
11
11
|
Classifier: Intended Audience :: Developers
|
12
12
|
Classifier: License :: OSI Approved :: Apache Software License
|
13
|
-
Classifier: Topic :: Multimedia :: Sound/Audio
|
14
|
-
Classifier: Topic :: Multimedia :: Video
|
15
|
-
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
16
13
|
Classifier: Programming Language :: Python :: 3
|
14
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
17
15
|
Classifier: Programming Language :: Python :: 3.9
|
18
16
|
Classifier: Programming Language :: Python :: 3.10
|
19
|
-
Classifier:
|
17
|
+
Classifier: Topic :: Multimedia :: Sound/Audio
|
18
|
+
Classifier: Topic :: Multimedia :: Video
|
19
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
20
20
|
Requires-Python: >=3.9.0
|
21
|
+
Requires-Dist: livekit-agents[codecs]>=1.0.0
|
21
22
|
Description-Content-Type: text/markdown
|
22
|
-
Requires-Dist: livekit-agents[codecs]<1.0.0,>=0.12.16
|
23
|
-
Dynamic: classifier
|
24
|
-
Dynamic: description
|
25
|
-
Dynamic: description-content-type
|
26
|
-
Dynamic: home-page
|
27
|
-
Dynamic: keywords
|
28
|
-
Dynamic: license
|
29
|
-
Dynamic: project-url
|
30
|
-
Dynamic: requires-dist
|
31
|
-
Dynamic: requires-python
|
32
|
-
Dynamic: summary
|
33
23
|
|
34
24
|
# LiveKit Plugins Elevenlabs
|
35
25
|
|
@@ -0,0 +1,9 @@
|
|
1
|
+
livekit/plugins/elevenlabs/__init__.py,sha256=Va24UYTuuosmRuTcuzd_DIHYQOgV-wSYKJIXmOSB2Go,1255
|
2
|
+
livekit/plugins/elevenlabs/log.py,sha256=hIuXqDsEB5GBa7rQY3z4Uqi1oCqc_lRmCHZEmXz0LHw,73
|
3
|
+
livekit/plugins/elevenlabs/models.py,sha256=p_wHEz15bdsNEqwzN831ysm70PNWQ-xeN__BKvGPZxA,401
|
4
|
+
livekit/plugins/elevenlabs/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
5
|
+
livekit/plugins/elevenlabs/tts.py,sha256=gs9p4TwBAYX3vlsNn2XQ-oyPNUGcuvgix8K7vChRMmc,19985
|
6
|
+
livekit/plugins/elevenlabs/version.py,sha256=nW89L_U9N4ukT3wAO3BeTqOaa87zLUOsEFz8TkiKIP8,600
|
7
|
+
livekit_plugins_elevenlabs-1.0.0.dist-info/METADATA,sha256=EL7wso-EPaWpWwQ5OtxwDaIueFvHrSBEy7PPCigZ8SI,1312
|
8
|
+
livekit_plugins_elevenlabs-1.0.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
9
|
+
livekit_plugins_elevenlabs-1.0.0.dist-info/RECORD,,
|
@@ -1,10 +0,0 @@
|
|
1
|
-
livekit/plugins/elevenlabs/__init__.py,sha256=YZVadomFq3JWiZN6GWXJbuE4vaNNWq1CmdH25du8qwg,1249
|
2
|
-
livekit/plugins/elevenlabs/log.py,sha256=hIuXqDsEB5GBa7rQY3z4Uqi1oCqc_lRmCHZEmXz0LHw,73
|
3
|
-
livekit/plugins/elevenlabs/models.py,sha256=nB43wLS1ilzS7IxLYVSQxBjKPnbiPl4AHpHAOlG2i00,273
|
4
|
-
livekit/plugins/elevenlabs/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
5
|
-
livekit/plugins/elevenlabs/tts.py,sha256=-w8IeAvyQER4PLraajJz6OWDufvKpD_fPM8oPsYtX9s,19335
|
6
|
-
livekit/plugins/elevenlabs/version.py,sha256=PoHw-_DNE2B5SpeoQ-r6HSfVmbDgYuGamg0dN2jhayQ,600
|
7
|
-
livekit_plugins_elevenlabs-0.8.1.dist-info/METADATA,sha256=l8gbEDr8EsedqYQiqBhx6K9XwAdTtnQWVCxmlyjVG9w,1529
|
8
|
-
livekit_plugins_elevenlabs-0.8.1.dist-info/WHEEL,sha256=beeZ86-EfXScwlR_HKu4SllMC9wUEj_8Z_4FJ3egI2w,91
|
9
|
-
livekit_plugins_elevenlabs-0.8.1.dist-info/top_level.txt,sha256=OoDok3xUmXbZRvOrfvvXB-Juu4DX79dlq188E19YHoo,8
|
10
|
-
livekit_plugins_elevenlabs-0.8.1.dist-info/RECORD,,
|
@@ -1 +0,0 @@
|
|
1
|
-
livekit
|