
    h                         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	Zd
ee   dee   fdZd
ededefdZd
ee   dedee   fdZy)zUtilities for chat loaders.    )deepcopy)IterableIteratorList)ChatSession)	AIMessageBaseMessagechat_session	delimiterreturnc                    g }| d   D ]  }t        |j                  t              rEd}|j                  D ]-  }t        |t              r||j	                  dd      z  })||z  }/ ||_        t        |j                  t
              st        d|j                         |s|j                  t        |             t        |t        |d               r|d   j                  j	                  d      |d   j                  d   |j                  j	                  d      k(  rt        |d   j                  t
              st        d|d   j                         |d   j                  |z   |j                  z   j                         |d   _        |d   j                  j	                  dg       j                  |j                  j	                  d      xs g        |j                  t        |              t        |	      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.
    messages textNzAChat Loaders only support messages with content type string, got sendereventsr   )
isinstancecontentlistdictgetstr
ValueErrorappendr   typeadditional_kwargsstripextendr   )r
   r   r   messager   r   s         d/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain_community/chat_loaders/utils.pymerge_chat_runs_in_sessionr#   
   s    #%H
+ "/goot,D"?? $gt,GKK55DGOD	$
 #GO'//3/')  OOHW-.wXb\ 23..228<H..x8((,,X67 hrl22C8 #B<//02 
 $$y07??Beg RL  RL**..x<CC))--h7=2 OOHW-.E"/F ))    chat_sessionsc              #   4   K   | D ]  }t        |        yw)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
   s     r"   merge_chat_runsr'   >   s"      & 7(667s   r   c           
         g }d}| d   D ]q  }|j                   j                  d      |k(  r@t        |j                  |j                   j	                         t        |dd            }|dz  }|j                  |       s t        |      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   num_convertedr!   s        r"   map_ai_messages_in_sessionr/   M   s    
 HM , !$$((2f<")";";"@"@"BD9G
 QM ! ))r$   c              #   6   K   | D ]  }t        ||        yw)r)   N)r/   )r%   r   r
   s      r"   map_ai_messagesr1   `   s$      & ?(v>>?s   N)z

)__doc__r,   r   typingr   r   r   langchain_core.chat_sessionsr   langchain_core.messagesr   r	   r   r#   r'   r/   r1    r$   r"   <module>r7      s    !  + + 4 : 171*1**-1*1*h78K#8 7Xk=R 7*k *3 *; *&?K(?25?k?r$   