o
    Zh                     @   s   d Z ddlmZ ddlmZmZmZ ddlmZ ddl	m
Z
mZ 	ddeded	efd
dZdee d	ee fddZdeded	efddZdee ded	ee fddZdS )zUtilities for chat loaders.    )deepcopy)IterableIteratorList)ChatSession)	AIMessageBaseMessage

chat_session	delimiterreturnc                 C   s  g }| d D ]u}t |jtstd|j |s |t| qt |t|d rt|d jddurt|d jd |jdkrtt |d jtsRtd|d j |d j| |j 	 |d _|d jdg 
|jdpqg  q|t| qt|dS )zMerge chat runs together in a chat session.

    A chat run is a sequence of messages from the same sender.

    Args:
        chat_session: A chat session.

    Returns:
        A chat session with merged chat runs.
    messageszAChat Loaders only support messages with content type string, got senderNeventsr   )
isinstancecontentstr
ValueErrorappendr   typeadditional_kwargsgetstripextendr   )r
   r   r   message r   ]/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/chat_loaders/utils.pymerge_chat_runs_in_session
   s<   

r   chat_sessionsc                 c   s    | D ]}t |V  qdS )zMerge chat runs together.

    A chat run is a sequence of messages from the same sender.

    Args:
        chat_sessions: A list of chat sessions.

    Returns:
        A list of chat sessions with merged chat runs.
    N)r   )r    r
   r   r   r   merge_chat_runs6   s   r!   r   c                 C   s`   g }d}| d D ]"}|j d|kr%t|j|j  t|ddd}|d7 }|| qt|dS )	Convert messages from the specified 'sender' to AI messages.

    This is useful for fine-tuning the AI to adapt to your voice.
    r   r   r   exampleN)r   r   r#      r   )r   r   r   r   copygetattrr   r   )r    r   r   Znum_convertedr   r   r   r   map_ai_messages_in_sessionE   s   

r'   c                 c   s    | D ]}t ||V  qdS )r"   N)r'   )r    r   r
   r   r   r   map_ai_messagesX   s   r(   N)r	   )__doc__r%   r   typingr   r   r   Zlangchain_core.chat_sessionsr   Zlangchain_core.messagesr   r   r   r   r!   r'   r(   r   r   r   r   <module>   s,    
,