
    gh%                        d Z ddlmZ ddlmZmZmZmZmZ ddl	m
Z
mZmZ ddlmZ ddlmZ ddlmZmZ ddlmZ erdd	lmZ dd
lmZ  G d de          Zd#dZ G d de          Zd$dZd%dZddd&d!Zd"S )'zBase message.    )annotations)TYPE_CHECKINGAnyOptionalUnioncast)
ConfigDictFieldfield_validator)Serializable)get_bolded_text)merge_dictsmerge_lists)is_interactive_env)SequenceChatPromptTemplatec                  @    e Zd ZU dZded<   	  ee          Zded<   	  ee          Zded<   	 ded	<   	 d
Z	ded<   	 d
Z
ded<   	  ed          Z edd          d%d            Zd& fdZed'd            Zed(d            Zd)dZd*d Z	 d+d,d#Zd-d$Z xZS ).BaseMessagezYBase abstract message class.

    Messages are the inputs and outputs of ChatModels.
    "Union[str, list[Union[str, dict]]]content)default_factorydictadditional_kwargsresponse_metadatastrtypeNOptional[str]nameidallow)extrabefore)modeid_valuer   returnc                (    |t          |          S |S )z Coerce the id field to a string.)r   )clsr%   s     Y/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/langchain_core/messages/base.pycast_id_to_strzBaseMessage.cast_id_to_str?   s     x==     kwargsNonec                >     t                      j        dd|i| dS )zsPass in content as positional arg.

        Args:
            content: The string contents of the message.
        r   N )super__init__)selfr   r,   	__class__s      r)   r1   zBaseMessage.__init__F   s-     	333F33333r+   boolc                    dS )zHBaseMessage is serializable.

        Returns:
            True
        Tr/   r(   s    r)   is_lc_serializablezBaseMessage.is_lc_serializableP   s	     tr+   	list[str]c                
    g dS )zlGet the namespace of the langchain object.

        Default is ["langchain", "schema", "messages"].
        )	langchainschemamessagesr/   r6   s    r)   get_lc_namespacezBaseMessage.get_lc_namespaceY   s     3222r+   c                    t          | j        t                    r| j        S d | j        D             }d                    d |D                       S )zlGet the text content of the message.

        Returns:
            The text content of the message.
        c                    g | ]Z}t          |t                    sA|                    d           dk    0t          |                    d          t                    X|[S )r   text)
isinstancer   get.0blocks     r)   
<listcomp>z$BaseMessage.text.<locals>.<listcomp>k   sm     
 
 
%%%
 yy  F**599V,,c22 +  +**r+    c              3  T   K   | ]#}t          |t                    r|n|d          V  $dS )r@   N)rA   r   rC   s     r)   	<genexpr>z#BaseMessage.text.<locals>.<genexpr>r   sJ       
 
CHZs++>EEv
 
 
 
 
 
r+   )rA   r   r   join)r2   blockss     r)   r@   zBaseMessage.texta   st     dlC(( 	 <
 

 
 
 ww 
 
LR
 
 
 
 
 	
r+   otherr   c                2    ddl m}  || g          }||z   S )z.Concatenate this message with another message.r   r   r<   )langchain_core.prompts.chatr   )r2   rL   r   prompts       r)   __add__zBaseMessage.__add__v   s3    BBBBBB##dV444~r+   Fhtmlc                    t          | j                                        dz   |          }| j        |d| j         z  }| d| j         S )a  Get a pretty representation of the message.

        Args:
            html: Whether to format the message as HTML. If True, the message will be
                formatted with HTML tags. Default is False.

        Returns:
            A pretty representation of the message.
        z MessageboldNz
Name: z

)get_msg_title_reprr   titler   r   )r2   rR   rW   s      r)   pretty_reprzBaseMessage.pretty_repr}   sZ     #49??#4#4z#AMMM9 +	+++E++T\+++r+   c                d    t          |                     t                                           dS )z-Print a pretty representation of the message.)rR   N)printrX   r   )r2   s    r)   pretty_printzBaseMessage.pretty_print   s.    d$6$8$899:::::r+   )r%   r   r&   r   )r   r   r,   r   r&   r-   )r&   r4   )r&   r8   )r&   r   )rL   r   r&   r   )F)rR   r4   r&   r   )r&   r-   )__name__
__module____qualname____doc____annotations__r
   r   r   r   r   r    r	   model_configr   r*   r1   classmethodr7   r=   r@   rQ   rX   r[   __classcell__)r3   s   @r)   r   r      s         
 0///-#eD9999999 $eD9999999SIII D BA :  L _T)))   *)4 4 4 4 4 4    [ 3 3 3 [3
 
 
 
*    , , , , ,&; ; ; ; ; ; ; ;r+   r   first_contentr   contentsr&   c                ~   | }|D ]}t          |t                    r"t          |t                    r||z  }2|g|z   }9t          |t                    rt          t	          d|          |          }m|r,t          |d         t                    r|dxx         |z  cc<   |dk    r|                    |           |S )zMerge multiple message contents.

    Args:
        first_content: The first content. Can be a string or a list.
        contents: The other contents. Can be a string or a list.

    Returns:
        The merged content.
    listrG   )rA   r   rg   r   r   append)rd   re   mergedr   s       r)   merge_contentrk      s     F # #fc"" 	#'3'' ,'! !G+&& 	# ff!5!5w??FF  	#
6":s33 	#2JJJ'!JJJJ]] MM'""""Mr+   c                      e Zd ZdZddZdS )BaseMessageChunkzCMessage chunk, which can be concatenated with other Message chunks.rL   r   r&   c           
        t          |t                    rl|                     | j        | j        t          | j        |j                  t          | j        |j                  t          | j	        |j	                            S t          |t                    rt          d |D                       rrt          | j        gd |D             R  }t          | j        gd |D             R  }t          | j	        gd |D             R  }|                     | j        |||          S d| j        j         d|j        j         d	}t          |          )
a  Message chunks support concatenation with other message chunks.

        This functionality is useful to combine message chunks yielded from
        a streaming model into a complete message.

        Args:
            other: Another message chunk to concatenate with this one.

        Returns:
            A new message chunk that is the concatenation of this message chunk
            and the other message chunk.

        Raises:
            TypeError: If the other object is not a message chunk.

        For example,

        `AIMessageChunk(content="Hello") + AIMessageChunk(content=" World")`

        will give `AIMessageChunk(content="Hello World")`
        )r    r   r   r   r   c              3  @   K   | ]}t          |t                    V  d S N)rA   rm   rD   os     r)   rI   z+BaseMessageChunk.__add__.<locals>.<genexpr>   s>       +
 +
01Jq*+++
 +
 +
 +
 +
 +
r+   c              3  $   K   | ]}|j         V  d S rp   )r   rq   s     r)   rI   z+BaseMessageChunk.__add__.<locals>.<genexpr>   s$      3M3M!AI3M3M3M3M3M3Mr+   c              3  $   K   | ]}|j         V  d S rp   )r   rq   s     r)   rI   z+BaseMessageChunk.__add__.<locals>.<genexpr>   %      )M)M!!*=)M)M)M)M)M)Mr+   c              3  $   K   | ]}|j         V  d S rp   )r   rq   s     r)   rI   z+BaseMessageChunk.__add__.<locals>.<genexpr>   ru   r+   )r    r   r   r   z$unsupported operand type(s) for +: "z" and "")rA   rm   r3   r    r   rk   r   r   r   r   rg   allr\   	TypeError)r2   rL   r   r   r   msgs         r)   rQ   zBaseMessageChunk.__add__   s   , e-.. 	 >>7Y%dlEMBB"-*E,C# # #.*E,C# # " 
 
 
 eT"" 	s +
 +
5:+
 +
 +
 (
 (
 	 $DLN3M3Mu3M3M3MNNNG +&!)M)Mu)M)M)M! ! ! !,&!)M)Mu)M)M)M! ! ! >>7"3"3	 "   2~&2 2o.2 2 2 	
 nnr+   N)rL   r   r&   rm   )r\   r]   r^   r_   rQ   r/   r+   r)   rm   rm      s.        MM: : : : : :r+   rm   messager   c                :    | j         |                                 dS )zConvert a Message to a dictionary.

    Args:
        message: Message to convert.

    Returns:
        Message as a dict. The dict will have a "type" key with the message type
        and a "data" key with the message data as a dict.
    )r   data)r   
model_dump)r{   s    r)   message_to_dictr      s      L'*<*<*>*>???r+   r<   Sequence[BaseMessage]
list[dict]c                    d | D             S )zConvert a sequence of Messages to a list of dictionaries.

    Args:
        messages: Sequence of messages (as BaseMessages) to convert.

    Returns:
        List of messages as dicts.
    c                ,    g | ]}t          |          S r/   )r   )rD   ms     r)   rF   z$messages_to_dict.<locals>.<listcomp>  s     1111OA111r+   r/   rN   s    r)   messages_to_dictr   
  s     211111r+   FrT   rW   r   rU   r4   c                   d| z   dz   }dt          |          z
  dz  }d|z  }t          |          dz  r|dz   n|}|rt          |          }| | | S )zGet a title representation for a message.

    Args:
        title: The title.
        bold: Whether to bold the title. Default is False.

    Returns:
        The title representation.
     P      =)lenr   )rW   rU   paddedsep_lensep
second_seps         r)   rV   rV     sw     5[3FCKKA%G
-C!&kkAo6s3J ) (('6':'''r+   N)rd   r   re   r   r&   r   )r{   r   r&   r   )r<   r   r&   r   )rW   r   rU   r4   r&   r   ) r_   
__future__r   typingr   r   r   r   r   pydanticr	   r
   r    langchain_core.load.serializabler   langchain_core.utilsr   langchain_core.utils._merger   r   $langchain_core.utils.interactive_envr   collections.abcr   rO   r   r   rk   rm   r   r   rV   r/   r+   r)   <module>r      s     " " " " " " < < < < < < < < < < < < < < 7 7 7 7 7 7 7 7 7 7 9 9 9 9 9 9 0 0 0 0 0 0 @ @ @ @ @ @ @ @ C C C C C C ?((((((>>>>>>~; ~; ~; ~; ~;, ~; ~; ~;B% % % %P= = = = ={ = = =@
@ 
@ 
@ 
@	2 	2 	2 	2 49 ( ( ( ( ( ( ( (r+   