From cbebfe1c7a1f31c9a7cfa7652874a3545f5a877f Mon Sep 17 00:00:00 2001 From: Xin Wang Date: Thu, 12 Feb 2026 14:55:03 +0800 Subject: [PATCH] Fix opener not trigger when tts disabled --- engine/core/duplex_pipeline.py | 43 ++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/engine/core/duplex_pipeline.py b/engine/core/duplex_pipeline.py index c99cba7..a92a3f9 100644 --- a/engine/core/duplex_pipeline.py +++ b/engine/core/duplex_pipeline.py @@ -408,14 +408,20 @@ class DuplexPipeline: return None 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 = ( "你是语音通话助手的开场白生成器。" "请只输出一句自然、简洁、友好的中文开场白。" "不要使用引号,不要使用 markdown,不要加解释。" ) user_prompt = "请生成一句中文开场白(不超过25个汉字)。" + if system_context: + user_prompt += f"\n\n以下是该助手的系统提示词,请据此决定语气、角色和边界:\n{system_context}" if prompt_hint: - user_prompt += f" 风格提示:{prompt_hint}" + user_prompt += f"\n\n额外风格提示:{prompt_hint}" try: generated = await self.llm_service.generate( @@ -532,23 +538,24 @@ class DuplexPipeline: if not self._outbound_task or self._outbound_task.done(): self._outbound_task = asyncio.create_task(self._outbound_loop()) - # Speak greeting if configured - if tts_output_enabled: - greeting_to_speak = self.conversation.greeting - if self._generated_opener_enabled(): - generated_greeting = await self._generate_runtime_greeting() - if generated_greeting: - greeting_to_speak = generated_greeting - self.conversation.greeting = generated_greeting - if greeting_to_speak: - await self._send_event( - ev( - "assistant.response.final", - text=greeting_to_speak, - trackId=self.session_id, - ), - priority=20, - ) + # Resolve greeting once per session start. + # Always emit text opener event so text-only sessions can display it. + greeting_to_speak = self.conversation.greeting + if self._generated_opener_enabled(): + generated_greeting = await self._generate_runtime_greeting() + if generated_greeting: + greeting_to_speak = generated_greeting + self.conversation.greeting = generated_greeting + if greeting_to_speak: + await self._send_event( + ev( + "assistant.response.final", + text=greeting_to_speak, + trackId=self.session_id, + ), + priority=20, + ) + if tts_output_enabled: await self._speak(greeting_to_speak) except Exception as e: