Fix opener not trigger when tts disabled

This commit is contained in:
Xin Wang
2026-02-12 14:55:03 +08:00
parent a7ef8858de
commit cbebfe1c7a

View File

@@ -408,14 +408,20 @@ class DuplexPipeline:
return None return None
prompt_hint = (self._runtime_greeting or "").strip() prompt_hint = (self._runtime_greeting or "").strip()
system_context = (self.conversation.system_prompt or self._runtime_system_prompt or "").strip()
# Keep context concise to avoid overloading greeting generation.
if len(system_context) > 1200:
system_context = system_context[:1200]
system_prompt = ( system_prompt = (
"你是语音通话助手的开场白生成器。" "你是语音通话助手的开场白生成器。"
"请只输出一句自然、简洁、友好的中文开场白。" "请只输出一句自然、简洁、友好的中文开场白。"
"不要使用引号,不要使用 markdown不要加解释。" "不要使用引号,不要使用 markdown不要加解释。"
) )
user_prompt = "请生成一句中文开场白不超过25个汉字" user_prompt = "请生成一句中文开场白不超过25个汉字"
if system_context:
user_prompt += f"\n\n以下是该助手的系统提示词,请据此决定语气、角色和边界:\n{system_context}"
if prompt_hint: if prompt_hint:
user_prompt += f" 风格提示:{prompt_hint}" user_prompt += f"\n\n额外风格提示:{prompt_hint}"
try: try:
generated = await self.llm_service.generate( generated = await self.llm_service.generate(
@@ -532,23 +538,24 @@ class DuplexPipeline:
if not self._outbound_task or self._outbound_task.done(): if not self._outbound_task or self._outbound_task.done():
self._outbound_task = asyncio.create_task(self._outbound_loop()) self._outbound_task = asyncio.create_task(self._outbound_loop())
# Speak greeting if configured # Resolve greeting once per session start.
if tts_output_enabled: # Always emit text opener event so text-only sessions can display it.
greeting_to_speak = self.conversation.greeting greeting_to_speak = self.conversation.greeting
if self._generated_opener_enabled(): if self._generated_opener_enabled():
generated_greeting = await self._generate_runtime_greeting() generated_greeting = await self._generate_runtime_greeting()
if generated_greeting: if generated_greeting:
greeting_to_speak = generated_greeting greeting_to_speak = generated_greeting
self.conversation.greeting = generated_greeting self.conversation.greeting = generated_greeting
if greeting_to_speak: if greeting_to_speak:
await self._send_event( await self._send_event(
ev( ev(
"assistant.response.final", "assistant.response.final",
text=greeting_to_speak, text=greeting_to_speak,
trackId=self.session_id, trackId=self.session_id,
), ),
priority=20, priority=20,
) )
if tts_output_enabled:
await self._speak(greeting_to_speak) await self._speak(greeting_to_speak)
except Exception as e: except Exception as e: