This commit is contained in:
Kevin
2026-04-28 10:41:48 +08:00
parent 482b016872
commit 15884bd68e
60 changed files with 2092 additions and 1994 deletions

View File

@@ -7,6 +7,7 @@
from __future__ import annotations
import json
from collections.abc import Awaitable, Callable
from dataclasses import dataclass
from fastapi.concurrency import run_in_threadpool
@@ -52,6 +53,7 @@ class VoiceConfirmationService:
audits: VoiceAuditRepository,
session_factory: async_sessionmaker | None = None,
audit_emitter: VoiceAuditEmitter | None = None,
on_pending_queue_advanced: Callable[[str], Awaitable[None]] | None = None,
) -> None:
self._s = settings
self._sessions = sessions
@@ -64,6 +66,21 @@ class VoiceConfirmationService:
audits=audits,
session_factory=self._session_factory,
)
self._on_pending_queue_advanced = on_pending_queue_advanced
def set_on_pending_queue_advanced(
self, cb: Callable[[str], Awaitable[None]] | None
) -> None:
self._on_pending_queue_advanced = cb
async def _notify_pending_queue_advanced(self, surgery_id: str) -> None:
cb = self._on_pending_queue_advanced
if cb is None:
return
try:
await cb(surgery_id)
except Exception as exc:
logger.warning("on_pending_queue_advanced 回调失败: {}", exc)
# ------------------------------------------------------------------
# TTS保持对外接口不变
@@ -240,6 +257,7 @@ class VoiceConfirmationService:
chosen_label=chosen,
rejected=rejected,
)
await self._notify_pending_queue_advanced(surgery_id)
final_status = "rejected" if rejected else "recognized"
await self._emitter.success(
source="wav",
@@ -344,6 +362,7 @@ class VoiceConfirmationService:
chosen_label=chosen,
rejected=rejected,
)
await self._notify_pending_queue_advanced(surgery_id)
final_status = "rejected" if rejected else "recognized"
await self._emitter.success(
source="text",
@@ -448,7 +467,9 @@ class VoiceConfirmationService:
session_trace,
) -> object:
try:
return await run_in_threadpool(self._baidu.asr, pcm, "pcm", 16000, None)
return await run_in_threadpool(
self._baidu.asr_16k_mono_pcm_or_wav_fallback, pcm
)
except BaiduSpeechNotConfiguredError as exc:
raise await self._emitter.fail(
source="wav",
@@ -600,5 +621,6 @@ class VoiceConfirmationService:
include_extra={
"confirmation_id": confirmation_id,
"retry_remaining": retry_remaining,
"asr_text": text,
},
)