[Wake/VAD/STT 与 Live runtime]:完成真实重复语音运行,包含云端ASR/TTS开关、run-live和临时上下文测试
This commit is contained in:
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user