2026-06-19 17:09:30.215 | INFO     | pipecat:<module>:28 - ᓚᘏᗢ Pipecat 1.4.0 (Python 3.13.5 (main, May  5 2026, 21:05:52) [GCC 14.2.0]) ᓚᘏᗢ
=== LLMContextFrame ===
@dataclass
class LLMContextFrame(Frame):
    """Frame containing a universal LLM context.

    Used as a signal to LLM services to ingest the provided context and
    generate a response based on it.

    Parameters:
        context: The LLM context containing messages, tools, and configuration.
    """

    context: LLMContext


=== LLMMessagesAppendFrame ===
@dataclass
class LLMMessagesAppendFrame(DataFrame):
    """Frame containing LLM messages to append to current context.

    A frame containing a list of LLM messages that need to be added to the
    current context.

    Parameters:
        messages: List of context messages to append.
        run_llm: Whether the context update should be sent to the LLM.
    """

    messages: list[LLMContextMessage]
    run_llm: bool | None = None


=== LLMMessagesUpdateFrame ===
@dataclass
class LLMMessagesUpdateFrame(DataFrame):
    """Frame containing LLM messages to replace current context.

    A frame containing a list of new LLM messages to replace the current
    context LLM messages.

    Parameters:
        messages: List of context messages to replace current context.
        run_llm: Whether the context update should be sent to the LLM.
    """

    messages: list[LLMContextMessage]
    run_llm: bool | None = None


=== LLMContext.__init__ ===
    def __init__(
        self,
        messages: list[LLMContextMessage] | None = None,
        tools: ToolsSchema | list[FunctionSchema | DirectFunction] | NotGiven = NOT_GIVEN,
        tool_choice: LLMContextToolChoice | NotGiven = NOT_GIVEN,
    ):
        """Initialize the LLM context.

        Args:
            messages: Initial list of conversation messages.
            tools: Available tools for the LLM to use. May be a ``ToolsSchema``
                or a plain list of direct functions and/or ``FunctionSchema``
                objects (normalized to a ``ToolsSchema`` internally). Any tool
                that carries a handler — a direct function, or a
                ``FunctionSchema`` with its ``handler`` set — is registered with
                the LLM service automatically, so no separate
                ``register_function`` call is needed.
            tool_choice: Tool selection strategy for the LLM.
        """
        self._messages: list[LLMContextMessage] = messages if messages else []
        self._tools: ToolsSchema | NotGiven = LLMContext._normalize_and_validate_tools(tools)
        self._tool_choice: LLMContextToolChoice | NotGiven = tool_choice

