o
    id                     @   s|   d Z ddlmZ ddlmZmZmZmZmZm	Z	m
Z
 ddlmZmZ ddlmZ ddlmZ ddlmZ G dd	 d	eZd
S )z!LLM logging observer for Pipecat.    )logger)FunctionCallInProgressFrameFunctionCallResultFrameLLMContextFrameLLMFullResponseEndFrameLLMFullResponseStartFrameLLMMessagesFrameLLMTextFrame)BaseObserverFramePushed)OpenAILLMContextFrame)FrameDirection)
LLMServicec                   @   s   e Zd ZdZdefddZdS )LLMLogObservera  Observer to log LLM activity to the console.

    Logs all frame instances (only from/to LLM service) of:

    - LLMFullResponseStartFrame
    - LLMFullResponseEndFrame
    - LLMTextFrame
    - FunctionCallInProgressFrame
    - LLMMessagesFrame
    - OpenAILLMContextFrame

    This allows you to track when the LLM starts responding, what it generates,
    and when it finishes.
    datac                    s  |j }|j}|j}|j}|j}t|tst|tsdS |d }d}t|ttfrGt|tr0dnd}	t	
d| d| d|	 d	|d
d	 dS t|trbt	
d| d| d|jd|d
d	 dS t|tr|tjkrt	
d| d| d|j d|jd|j d|d
d dS t|trt	
d| d| d|j d|d
d	 dS t|ttfrt|tr|jjn|j }
t	
d| d| d|
 d|d
d	 dS t|trt	
d| d| d|j d|j d|d
d dS dS )zHandle frame push events and log LLM-related activities.

        Args:
            data: The frame push event data containing source, destination,
                  frame, direction, and timestamp information.
        Ni ʚ;u   →STARTENDu   🧠  z LLM z RESPONSE at z.2fsz LLM GENERATING: z at z LLM FUNCTION CALL (z): (z) at z LLM MESSAGES FRAME: z LLM CONTEXT FRAME: z LLM FUNCTION CALL RESULT ()sourcedestinationframe	direction	timestamp
isinstancer   r   r   r   debugr	   textr   r   
DOWNSTREAMtool_call_idfunction_name	argumentsr   messagesr   r   contextget_messagesr   result)selfr   srcdstr   r   r   time_secarroweventr"    r,   ^/home/ubuntu/.local/lib/python3.10/site-packages/pipecat/observers/loggers/llm_log_observer.pyon_push_frame*   sH   *
,
0
 
*
(zLLMLogObserver.on_push_frameN)__name__
__module____qualname____doc__r   r.   r,   r,   r,   r-   r      s    r   N)r2   logurur   pipecat.frames.framesr   r   r   r   r   r   r	   pipecat.observers.base_observerr
   r   1pipecat.processors.aggregators.openai_llm_contextr   "pipecat.processors.frame_processorr   pipecat.services.llm_servicer   r   r,   r,   r,   r-   <module>   s   $	