[Wake/VAD/STT 与 Live runtime]:完成真实重复语音运行,包含云端ASR/TTS开关、run-live和临时上下文测试

This commit is contained in:
mkbk
2026-06-17 20:00:55 +08:00
parent ac97daa1e7
commit 4b7cd18a0f
20 changed files with 1043 additions and 68 deletions
+33 -3
View File
@@ -11,7 +11,7 @@ from owner_voice_pet.models import AudioFrame, ErrorCode, Message, PipelineState
from owner_voice_pet.pipeline import VoicePipeline
from owner_voice_pet.stt import MetadataSttProvider
from owner_voice_pet.transport import MemoryAudioTransport
from owner_voice_pet.tts import SentenceBuffer, SineTtsProvider
from owner_voice_pet.tts import CloudTtsProvider, SentenceBuffer, SineTtsProvider
from owner_voice_pet.vad import EnergyVadProvider, VadRecorder
from owner_voice_pet.wakeword import KeywordWakeWordProvider
@@ -66,6 +66,36 @@ class PipelineLlmTtsTests(unittest.TestCase):
self.assertGreater(len(segment.pcm), 0)
self.assertGreater(segment.duration_ms, 0)
def test_cloud_tts_posts_speech_request(self) -> None:
class FakeResponse:
def __enter__(self):
return self
def __exit__(self, *args) -> None:
return None
def read(self) -> bytes:
return b"fake-mp3"
requests = []
def fake_urlopen(request, timeout):
requests.append(request)
return FakeResponse()
provider = CloudTtsProvider(
AppConfig(llm_api_key="secret", tts_model="mimo-v2.5-tts"),
urlopen=fake_urlopen,
)
provider.load()
segment = provider.synthesize("你好")
self.assertEqual(segment.metadata["format"], "mp3")
self.assertEqual(segment.pcm, b"fake-mp3")
body = json.loads(requests[0].data.decode())
self.assertEqual(body["model"], "mimo-v2.5-tts")
self.assertIn("/v1/audio/speech", requests[0].full_url)
def test_pipeline_runs_from_wake_to_playback(self) -> None:
frames = [
frame(0, 0, {"wake_word": "小杰小杰", "wake_confidence": 0.95}),
@@ -136,7 +166,7 @@ class PipelineLlmTtsTests(unittest.TestCase):
return FakeResponse()
config = AppConfig(
llm_base_url="https://newapi.mkbk.shop",
llm_base_url="https://token-plan-cn.xiaomimimo.com/v1",
llm_api_key="secret",
llm_model="test-model",
llm_api_style="chat_completions",
@@ -160,7 +190,7 @@ class PipelineLlmTtsTests(unittest.TestCase):
return json.dumps({"choices": [{"message": {"content": "非流式回复。"}}]}).encode()
config = AppConfig(
llm_base_url="https://newapi.mkbk.shop",
llm_base_url="https://token-plan-cn.xiaomimimo.com/v1",
llm_api_key="secret",
llm_model="test-model",
llm_api_style="chat_completions",