7f25c8f6bb
- main.py:uv run main.py 一键启动——读取 backend/.env、TORCH_HOME/NLTK_DATA 指向项目内缓存、certifi SSL + NO_PROXY 网络直连、默认开启 s2s,启动横幅 - vendor/:补丁后 s2s 云化栈移入项目(backend/vendor/s2s-cloud),pyproject sources 改相对路径 - .gitignore:忽略 .torch-cache / nltk_data 缓存 - AGENTS.md:进程管理铁律(AI 不启动/重启服务,由用户操作)
43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
from queue import Queue
|
|
from threading import Event
|
|
|
|
from speech_to_speech.pipeline.control import SESSION_END
|
|
from speech_to_speech.pipeline.messages import EndOfResponse, TTSInput
|
|
from speech_to_speech.TTS.qwen3_tts_handler import Qwen3TTSHandler
|
|
|
|
|
|
def _make_handler():
|
|
handler = object.__new__(Qwen3TTSHandler)
|
|
handler.queue_in = Queue()
|
|
handler.queue_out = Queue()
|
|
handler.stop_event = Event()
|
|
return handler
|
|
|
|
|
|
def test_coalesce_pending_tts_input_merges_ready_sentences_and_absorbs_response_end():
|
|
handler = _make_handler()
|
|
|
|
handler.queue_in.put(TTSInput(text="Second sentence.", language_code="en"))
|
|
handler.queue_in.put(TTSInput(text="Third sentence.", language_code="en"))
|
|
handler.queue_in.put(EndOfResponse())
|
|
|
|
text, lang, saw_end = handler._coalesce_pending_tts_input(TTSInput(text="First sentence.", language_code="en"))
|
|
|
|
assert text == "First sentence. Second sentence. Third sentence."
|
|
assert lang == "en"
|
|
assert saw_end is True
|
|
remaining = handler.queue_in.get_nowait()
|
|
assert isinstance(remaining, EndOfResponse)
|
|
|
|
|
|
def test_coalesce_pending_tts_input_stops_before_control_messages():
|
|
handler = _make_handler()
|
|
|
|
handler.queue_in.put(SESSION_END)
|
|
text, lang, saw_end = handler._coalesce_pending_tts_input(TTSInput(text="Hello.", language_code="en"))
|
|
|
|
assert text == "Hello."
|
|
assert lang == "en"
|
|
assert saw_end is False
|
|
assert handler.queue_in.get_nowait() == SESSION_END
|