livekit-plugins-volcengine 1.2.3.post0__tar.gz → 1.2.6__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.
- {livekit_plugins_volcengine-1.2.3.post0 → livekit_plugins_volcengine-1.2.6}/PKG-INFO +2 -2
- {livekit_plugins_volcengine-1.2.3.post0 → livekit_plugins_volcengine-1.2.6}/livekit/plugins/volcengine/realtime.py +20 -11
- livekit_plugins_volcengine-1.2.6/livekit/plugins/volcengine/version.py +1 -0
- {livekit_plugins_volcengine-1.2.3.post0 → livekit_plugins_volcengine-1.2.6}/pyproject.toml +1 -1
- livekit_plugins_volcengine-1.2.3.post0/livekit/plugins/volcengine/version.py +0 -1
- {livekit_plugins_volcengine-1.2.3.post0 → livekit_plugins_volcengine-1.2.6}/.gitignore +0 -0
- {livekit_plugins_volcengine-1.2.3.post0 → livekit_plugins_volcengine-1.2.6}/README.md +0 -0
- {livekit_plugins_volcengine-1.2.3.post0 → livekit_plugins_volcengine-1.2.6}/livekit/plugins/volcengine/__init__.py +0 -0
- {livekit_plugins_volcengine-1.2.3.post0 → livekit_plugins_volcengine-1.2.6}/livekit/plugins/volcengine/bigmodel_stt.py +0 -0
- {livekit_plugins_volcengine-1.2.3.post0 → livekit_plugins_volcengine-1.2.6}/livekit/plugins/volcengine/llm.py +0 -0
- {livekit_plugins_volcengine-1.2.3.post0 → livekit_plugins_volcengine-1.2.6}/livekit/plugins/volcengine/log.py +0 -0
- {livekit_plugins_volcengine-1.2.3.post0 → livekit_plugins_volcengine-1.2.6}/livekit/plugins/volcengine/py.typed +0 -0
- {livekit_plugins_volcengine-1.2.3.post0 → livekit_plugins_volcengine-1.2.6}/livekit/plugins/volcengine/stt.py +0 -0
- {livekit_plugins_volcengine-1.2.3.post0 → livekit_plugins_volcengine-1.2.6}/livekit/plugins/volcengine/tts.py +0 -0
- {livekit_plugins_volcengine-1.2.3.post0 → livekit_plugins_volcengine-1.2.6}/livekit/plugins/volcengine/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: livekit-plugins-volcengine
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.6
|
|
4
4
|
Summary: LiveKit Agent Plugins for Volcengine
|
|
5
5
|
Author-email: wangmengdi <790990241@qq.com>
|
|
6
6
|
Keywords: audio,livekit,realtime,video,webrtc
|
|
@@ -14,7 +14,7 @@ Classifier: Topic :: Multimedia :: Sound/Audio
|
|
|
14
14
|
Classifier: Topic :: Multimedia :: Video
|
|
15
15
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
16
16
|
Requires-Python: >=3.9
|
|
17
|
-
Requires-Dist: livekit-agents
|
|
17
|
+
Requires-Dist: livekit-agents>=1.2.6
|
|
18
18
|
Requires-Dist: numpy
|
|
19
19
|
Requires-Dist: openai>=1.75.0
|
|
20
20
|
Requires-Dist: osc-data>=0.2.2
|
|
@@ -169,6 +169,7 @@ class _RealtimeOptions:
|
|
|
169
169
|
system_role: str
|
|
170
170
|
max_session_duration: float | None
|
|
171
171
|
conn_options: APIConnectOptions
|
|
172
|
+
modalities: list[Literal["text", "audio"]]
|
|
172
173
|
opening: str = "你好啊,今天过得怎么样?"
|
|
173
174
|
speaking_style: str = "你的说话风格简洁明了,语速适中,语调自然。"
|
|
174
175
|
speaker: str = "zh_female_vv_jupiter_bigtts"
|
|
@@ -216,8 +217,8 @@ class _MessageGeneration:
|
|
|
216
217
|
message_id: str
|
|
217
218
|
text_ch: utils.aio.Chan[str]
|
|
218
219
|
audio_ch: utils.aio.Chan[rtc.AudioFrame]
|
|
219
|
-
modalities: asyncio.Future[list[Literal["text", "audio"]]]
|
|
220
220
|
audio_transcript: str = ""
|
|
221
|
+
modalities: asyncio.Future[list[Literal["text", "audio"]]] | None = None
|
|
221
222
|
|
|
222
223
|
|
|
223
224
|
@dataclass
|
|
@@ -245,17 +246,19 @@ class RealtimeModel(llm.RealtimeModel):
|
|
|
245
246
|
access_token: str | None = None,
|
|
246
247
|
system_role: str | None = None,
|
|
247
248
|
audio_output: bool = True,
|
|
249
|
+
modalities: NotGivenOr[list[Literal["text", "audio"]]] = NOT_GIVEN,
|
|
248
250
|
http_session: aiohttp.ClientSession | None = None,
|
|
249
251
|
max_session_duration: NotGivenOr[float | None] = NOT_GIVEN,
|
|
250
252
|
conn_options: APIConnectOptions = DEFAULT_API_CONNECT_OPTIONS,
|
|
251
253
|
) -> None:
|
|
254
|
+
modalities = modalities if utils.is_given(modalities) else ["text", "audio"]
|
|
252
255
|
super().__init__(
|
|
253
256
|
capabilities=llm.RealtimeCapabilities(
|
|
254
257
|
message_truncation=True,
|
|
255
258
|
turn_detection=True,
|
|
256
259
|
user_transcription=True,
|
|
257
260
|
auto_tool_reply_generation=False,
|
|
258
|
-
audio_output=
|
|
261
|
+
audio_output=("audio" in modalities),
|
|
259
262
|
)
|
|
260
263
|
)
|
|
261
264
|
|
|
@@ -277,10 +280,10 @@ class RealtimeModel(llm.RealtimeModel):
|
|
|
277
280
|
speaker=speaker,
|
|
278
281
|
opening=opening,
|
|
279
282
|
speaking_style=speaking_style,
|
|
283
|
+
modalities=modalities,
|
|
280
284
|
)
|
|
281
285
|
self._http_session = http_session
|
|
282
286
|
self._sessions = weakref.WeakSet[RealtimeSession]()
|
|
283
|
-
print(self.capabilities.audio_output)
|
|
284
287
|
|
|
285
288
|
def update_options(
|
|
286
289
|
self,
|
|
@@ -438,15 +441,18 @@ class RealtimeSession(
|
|
|
438
441
|
)
|
|
439
442
|
self.emit("generation_created", generation_ev)
|
|
440
443
|
item_id = utils.shortuuid()
|
|
444
|
+
modalities_fut: asyncio.Future[list[Literal["text", "audio"]]] = asyncio.Future()
|
|
441
445
|
self._current_item = _MessageGeneration(
|
|
442
446
|
message_id=item_id,
|
|
443
447
|
text_ch=utils.aio.Chan(),
|
|
444
448
|
audio_ch=utils.aio.Chan(),
|
|
445
|
-
modalities=
|
|
449
|
+
modalities=modalities_fut,
|
|
446
450
|
)
|
|
447
451
|
if not self._realtime_model.capabilities.audio_output:
|
|
448
452
|
self._current_item.audio_ch.close()
|
|
449
|
-
self._current_item.modalities.set_result(["text"])
|
|
453
|
+
self._current_item.modalities.set_result(["text"]) # type: ignore[union-attr]
|
|
454
|
+
else:
|
|
455
|
+
self._current_item.modalities.set_result(["audio", "text"]) # type: ignore[union-attr]
|
|
450
456
|
|
|
451
457
|
self._current_generation.message_ch.send_nowait(
|
|
452
458
|
llm.MessageGeneration(
|
|
@@ -505,7 +511,6 @@ class RealtimeSession(
|
|
|
505
511
|
is_final = not response["results"][0]["is_interim"]
|
|
506
512
|
if is_final:
|
|
507
513
|
item_id = utils.shortuuid()
|
|
508
|
-
logger.info("transcription completed")
|
|
509
514
|
self.emit(
|
|
510
515
|
"input_audio_transcription_completed",
|
|
511
516
|
llm.InputTranscriptionCompleted(
|
|
@@ -531,15 +536,18 @@ class RealtimeSession(
|
|
|
531
536
|
|
|
532
537
|
self.emit("generation_created", generation_ev)
|
|
533
538
|
item_id = utils.shortuuid()
|
|
539
|
+
modalities_fut: asyncio.Future[list[Literal["text", "audio"]]] = asyncio.Future()
|
|
534
540
|
self._current_item = _MessageGeneration(
|
|
535
541
|
message_id=item_id,
|
|
536
542
|
text_ch=utils.aio.Chan(),
|
|
537
543
|
audio_ch=utils.aio.Chan(),
|
|
538
|
-
modalities=
|
|
544
|
+
modalities=modalities_fut,
|
|
539
545
|
)
|
|
540
546
|
if not self._realtime_model.capabilities.audio_output:
|
|
541
547
|
self._current_item.audio_ch.close()
|
|
542
|
-
self._current_item.modalities.set_result(["text"])
|
|
548
|
+
self._current_item.modalities.set_result(["text"]) # type: ignore[union-attr]
|
|
549
|
+
else:
|
|
550
|
+
self._current_item.modalities.set_result(["audio", "text"]) # type: ignore[union-attr]
|
|
543
551
|
self._current_generation.message_ch.send_nowait(
|
|
544
552
|
llm.MessageGeneration(
|
|
545
553
|
message_id=item_id,
|
|
@@ -561,7 +569,6 @@ class RealtimeSession(
|
|
|
561
569
|
logger.info("tts start")
|
|
562
570
|
|
|
563
571
|
elif event == 352: # TTSResponse
|
|
564
|
-
logger.info("tts response")
|
|
565
572
|
if self._first_tts_response:
|
|
566
573
|
logger.info("llm first sentence")
|
|
567
574
|
logger.info("tts first response")
|
|
@@ -766,13 +773,15 @@ class RealtimeSession(
|
|
|
766
773
|
self,
|
|
767
774
|
*,
|
|
768
775
|
message_id: str,
|
|
776
|
+
modalities: list[Literal["text", "audio"]],
|
|
769
777
|
audio_end_ms: int,
|
|
770
778
|
audio_transcript: NotGivenOr[str] = NOT_GIVEN,
|
|
771
779
|
) -> None:
|
|
772
|
-
if
|
|
780
|
+
if "audio" in modalities:
|
|
781
|
+
# 当前 volcengine 实时接口未暴露远端音频截断事件;占位以对齐接口
|
|
773
782
|
pass
|
|
774
783
|
elif utils.is_given(audio_transcript):
|
|
775
|
-
#
|
|
784
|
+
# 同步转写文本到远端会话上下文
|
|
776
785
|
chat_ctx = self.chat_ctx.copy()
|
|
777
786
|
if (idx := chat_ctx.index_by_id(message_id)) is not None:
|
|
778
787
|
new_item = copy.copy(chat_ctx.items[idx])
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "1.2.6"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "1.2.3.post0"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|