Presist opener to history
This commit is contained in:
@@ -212,6 +212,27 @@ class ConversationManager:
|
|||||||
else:
|
else:
|
||||||
await self.set_state(ConversationState.IDLE)
|
await self.set_state(ConversationState.IDLE)
|
||||||
|
|
||||||
|
async def add_assistant_turn(self, text: str, was_interrupted: bool = False) -> None:
|
||||||
|
"""Append an assistant turn directly without mutating conversation state."""
|
||||||
|
content = text.strip()
|
||||||
|
if not content:
|
||||||
|
return
|
||||||
|
|
||||||
|
turn = ConversationTurn(
|
||||||
|
role="assistant",
|
||||||
|
text=content,
|
||||||
|
was_interrupted=was_interrupted,
|
||||||
|
)
|
||||||
|
self.turns.append(turn)
|
||||||
|
|
||||||
|
for callback in self._turn_callbacks:
|
||||||
|
try:
|
||||||
|
await callback(turn)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Turn callback error: {e}")
|
||||||
|
|
||||||
|
logger.info(f"Assistant (injected): {content[:50]}...")
|
||||||
|
|
||||||
async def interrupt(self) -> None:
|
async def interrupt(self) -> None:
|
||||||
"""Handle interruption (barge-in)."""
|
"""Handle interruption (barge-in)."""
|
||||||
if self.state == ConversationState.SPEAKING:
|
if self.state == ConversationState.SPEAKING:
|
||||||
|
|||||||
@@ -563,6 +563,7 @@ class DuplexPipeline:
|
|||||||
),
|
),
|
||||||
priority=20,
|
priority=20,
|
||||||
)
|
)
|
||||||
|
await self.conversation.add_assistant_turn(greeting_to_speak)
|
||||||
if tts_output_enabled:
|
if tts_output_enabled:
|
||||||
await self._speak(greeting_to_speak)
|
await self._speak(greeting_to_speak)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user