Added a new LLMAssistantPushAggregationFrame control frame that signals LLMAssistantAggregator to immediately flush its text buffer to the conversation context

This commit is contained in:
filipi87
2026-02-27 11:56:36 -03:00
parent 2a6a993869
commit deba2515f9
2 changed files with 13 additions and 0 deletions

View File

@@ -1990,6 +1990,16 @@ class LLMFullResponseEndFrame(ControlFrame):
self.skip_tts = None self.skip_tts = None
@dataclass
class LLMAssistantPushAggregationFrame(ControlFrame):
"""Frame that forces the LLM assistant aggregator to push its current aggregation to context.
When received by ``LLMAssistantAggregator``, any text that has been accumulated
in the aggregation buffer is immediately committed to the conversation context as
an assistant message, without waiting for an ``LLMFullResponseEndFrame``.
"""
@dataclass @dataclass
class LLMContextSummaryRequestFrame(ControlFrame): class LLMContextSummaryRequestFrame(ControlFrame):
"""Frame requesting context summarization from an LLM service. """Frame requesting context summarization from an LLM service.

View File

@@ -35,6 +35,7 @@ from pipecat.frames.frames import (
InputAudioRawFrame, InputAudioRawFrame,
InterimTranscriptionFrame, InterimTranscriptionFrame,
InterruptionFrame, InterruptionFrame,
LLMAssistantPushAggregationFrame,
LLMContextAssistantTimestampFrame, LLMContextAssistantTimestampFrame,
LLMContextFrame, LLMContextFrame,
LLMContextSummaryRequestFrame, LLMContextSummaryRequestFrame,
@@ -879,6 +880,8 @@ class LLMAssistantAggregator(LLMContextAggregator):
elif isinstance(frame, (EndFrame, CancelFrame)): elif isinstance(frame, (EndFrame, CancelFrame)):
await self._handle_end_or_cancel(frame) await self._handle_end_or_cancel(frame)
await self.push_frame(frame, direction) await self.push_frame(frame, direction)
elif isinstance(frame, LLMAssistantPushAggregationFrame):
await self.push_aggregation()
elif isinstance(frame, LLMFullResponseStartFrame): elif isinstance(frame, LLMFullResponseStartFrame):
await self._handle_llm_start(frame) await self._handle_llm_start(frame)
elif isinstance(frame, LLMFullResponseEndFrame): elif isinstance(frame, LLMFullResponseEndFrame):