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.
Files changed (15) hide show
  1. {livekit_plugins_volcengine-1.2.3.post0 → livekit_plugins_volcengine-1.2.6}/PKG-INFO +2 -2
  2. {livekit_plugins_volcengine-1.2.3.post0 → livekit_plugins_volcengine-1.2.6}/livekit/plugins/volcengine/realtime.py +20 -11
  3. livekit_plugins_volcengine-1.2.6/livekit/plugins/volcengine/version.py +1 -0
  4. {livekit_plugins_volcengine-1.2.3.post0 → livekit_plugins_volcengine-1.2.6}/pyproject.toml +1 -1
  5. livekit_plugins_volcengine-1.2.3.post0/livekit/plugins/volcengine/version.py +0 -1
  6. {livekit_plugins_volcengine-1.2.3.post0 → livekit_plugins_volcengine-1.2.6}/.gitignore +0 -0
  7. {livekit_plugins_volcengine-1.2.3.post0 → livekit_plugins_volcengine-1.2.6}/README.md +0 -0
  8. {livekit_plugins_volcengine-1.2.3.post0 → livekit_plugins_volcengine-1.2.6}/livekit/plugins/volcengine/__init__.py +0 -0
  9. {livekit_plugins_volcengine-1.2.3.post0 → livekit_plugins_volcengine-1.2.6}/livekit/plugins/volcengine/bigmodel_stt.py +0 -0
  10. {livekit_plugins_volcengine-1.2.3.post0 → livekit_plugins_volcengine-1.2.6}/livekit/plugins/volcengine/llm.py +0 -0
  11. {livekit_plugins_volcengine-1.2.3.post0 → livekit_plugins_volcengine-1.2.6}/livekit/plugins/volcengine/log.py +0 -0
  12. {livekit_plugins_volcengine-1.2.3.post0 → livekit_plugins_volcengine-1.2.6}/livekit/plugins/volcengine/py.typed +0 -0
  13. {livekit_plugins_volcengine-1.2.3.post0 → livekit_plugins_volcengine-1.2.6}/livekit/plugins/volcengine/stt.py +0 -0
  14. {livekit_plugins_volcengine-1.2.3.post0 → livekit_plugins_volcengine-1.2.6}/livekit/plugins/volcengine/tts.py +0 -0
  15. {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.post0
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==1.2.2
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=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=asyncio.Future(),
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=asyncio.Future(),
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 self._realtime_model.capabilities.audio_output:
780
+ if "audio" in modalities:
781
+ # 当前 volcengine 实时接口未暴露远端音频截断事件;占位以对齐接口
773
782
  pass
774
783
  elif utils.is_given(audio_transcript):
775
- # sync the forwarded text to the remote chat ctx
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"
@@ -13,7 +13,7 @@ dependencies = [
13
13
  "osc-data>=0.2.2",
14
14
  "pydantic",
15
15
  "numpy",
16
- "livekit-agents==1.2.2",
16
+ "livekit-agents>=1.2.6",
17
17
  ]
18
18
 
19
19
  classifiers = [
@@ -1 +0,0 @@
1
- __version__ = "1.2.3.post0"