
    *`i)                        U d dl 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lmZ d dlmZmZmZmZmZ d dlmZ  e j        d	ed
           dedefdZ G d dee          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z e
eez  ez  e z   ed          f         Z!e
eez  ez  e z   ed          f         Z" ede!           Z# ed!e           Z$ ed"e           Z% ed#e            Z& ed$e           Z'e$e%z  e&z  e'z  Z(ee)d%<   dS )&    N)Enum)AnyLiteralTypeVar)Field)	Annotated	TypeAlias)MistralBase)ContentChunk	TextChunk
ThinkChunkUserContentChunk_convert_openai_content_chunks)ToolCalloncezN.*has moved to 'mistral_common.protocol.instruct.chunk'\. It will be removed.*)actioncategorymessagenamereturnc                 p   |  dt            d}| dk    r"ddlm} t          j        |t
                     |S | dk    r"ddlm} t          j        |t
                     |S | dk    r"dd	lm} t          j        |t
                     |S | d
k    r"ddlm} t          j        |t
                     |S | dk    r"ddlm	} t          j        |t
                     |S | dk    r"ddlm
} t          j        |t
                     |S | dk    r"ddlm} t          j        |t
                     |S | dk    r"ddlm}	 t          j        |t
                     |	S | dk    r"ddlm}
 t          j        |t
                     |
S | dk    r"ddlm} t          j        |t
                     |S t          dt            d|            )NzQ has moved to 'mistral_common.protocol.instruct.chunk'. It will be removed from 'z' in 1.10.0.AudioURLr   )r   AudioURLChunk)r   AudioURLType)r   
AudioChunk)r   BaseContentChunk)r   
ChunkTypes)r   ImageURL)r   ImageURLChunk)r   
ImageChunk)r    RawAudio)r!   zmodule z has no attribute )__name__&mistral_common.protocol.instruct.chunkr   warningswarnFutureWarningr   r   r   r   r   r   r   r    r!   AttributeError)r   msgr   r   r   r   r   r   r   r   r    r!   s               }/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/mistral_common/protocol/instruct/messages.py__getattr__r*      sM   xxbjxxx  zCCCCCCc=)))		 	 HHHHHHc=)))			GGGGGGc=)))			EEEEEEc=)))	#	#	#KKKKKKc=)))			EEEEEEc=)))			CCCCCCc=)))		 	 HHHHHHc=)))			EEEEEEc=)))			CCCCCCc=)))
E8EEtEE
F
FF    c                   "    e Zd ZdZdZdZdZdZdS )RoleszEnum for the roles of the messages.

    Attributes:
       system: The system role.
       user: The user role.
       assistant: The assistant role.
       tool: The tool role.

    Examples:
        >>> role = Roles.user
    systemuser	assistanttoolN)r"   
__module____qualname____doc__r.   r/   r0   r1    r+   r)   r-   r-   T   s.        
 
 FDIDDDr+   r-   c                      e Zd ZU dZeej        ej        ej        ej	        f         e
d<   deeeeeeeeeef         z  f                  z  f         fdZedeeeeeeeeeef         z  f                  z  f         dd fd            ZdS )BaseMessagezXBase class for all messages.

    Attributes:
       role: The role of the message.
    roler   c                 J    t          dt          |           j                   )zaConverts the message to the OpenAI format.

        Should be implemented by subclasses.
        z%to_openai method not implemented for )NotImplementedErrortyper"   selfs    r)   	to_openaizBaseMessage.to_openaip   s$    
 ""_$t**J]"_"_```r+   openai_messagec                 2    t          d| j         d          )ziConverts the OpenAI message to the Mistral format.

        Should be implemented by subclasses.
        z'from_openai method not implemented for .)r:   r"   clsr?   s     r)   from_openaizBaseMessage.from_openaiw   s      ""[CL"["["[\\\r+   N)r"   r2   r3   r4   r   r-   r.   r/   r0   r1   __annotations__dictstrlistr   r>   classmethodrD   r5   r+   r)   r7   r7   g   s           %,
EOUZG
HHHHa4S4S#S#X:N5N0O+P%P PQ a a a a ]c3d3dSVX[S[nH\C\>]9^3^.^)_ ]dq ] ] ] [] ] ]r+   r7   c                      e Zd ZU dZej        Zeej                 ed<   e	e
e         z  ed<   dee	e	e
ee	e	ee	ef         z  f                  z  f         fdZedee	e	e
ee	e	ee	ef         z  f                  z  f         dd fd            ZdS )	UserMessagezUser message.

    Attributes:
        content: The content of the message.

    Examples:
        >>> message = UserMessage(content="Can you help me to write a poem?")
    r8   contentr   c                     t          | j        t                    r| j        | j        dS | j        d | j        D             dS )*Converts the message to the OpenAI format.r8   rL   c                 6    g | ]}|                                 S r5   r>   .0chunks     r)   
<listcomp>z)UserMessage.to_openai.<locals>.<listcomp>   s"    .[.[.[Uu/@/@.[.[.[r+   )
isinstancerL   rG   r8   r<   s    r)   r>   zUserMessage.to_openai   sJ    dlC(( 	@ I$,???	.[.[dl.[.[.[\\\r+   r?   c                     t          |d         t                    r|                     |          S |                     |d         d |d         D             d          S )2Converts the OpenAI message to the Mistral format.rL   r8   c                 ,    g | ]}t          |          S r5   r   rR   s     r)   rU   z+UserMessage.from_openai.<locals>.<listcomp>   s!    iiie:5AAiiir+   rO   )rV   rG   model_validaterB   s     r)   rD   zUserMessage.from_openai   sp     nY/55 	6%%n555!!&v.ii~^gOhiii 
 
 	
r+   N)r"   r2   r3   r4   r-   r/   r8   r   rE   rG   rH   r   rF   r   r>   rI   rD   r5   r+   r)   rK   rK      s           !&
D'%*
***4()))))]4S4S#S#X:N5N0O+P%P PQ ] ] ] ] 	
c3d3dSVX[S[nH\C\>]9^3^.^)_ 	
dq 	
 	
 	
 [	
 	
 	
r+   rK   c                       e Zd ZU dZej        Zeej                 ed<   e	e
eez           z  ed<   dee	e	e
ee	e	ee	ef         z  f                  z  f         fdZedee	e	e
ee	e	ee	ef         z  f                  z  f         dd fd            ZdS )	SystemMessagezSystem message.

    Attributes:
        content: The content of the message.

    Examples:
        >>> message = SystemMessage(content="You are a helpful assistant.")
    r8   rL   r   c                 *    |                                  S )rN   )
model_dumpr<   s    r)   r>   zSystemMessage.to_openai   s       r+   r?   c                 ,    |                      |          S )rX   )r[   rB   s     r)   rD   zSystemMessage.from_openai   s     !!.111r+   N)r"   r2   r3   r4   r-   r.   r8   r   rE   rG   rH   r   r   rF   r   r>   rI   rD   r5   r+   r)   r]   r]      s           #(,D'%,
...4	J./////!4S4S#S#X:N5N0O+P%P PQ ! ! ! ! 2c3d3dSVX[S[nH\C\>]9^3^.^)_ 2ds 2 2 2 [2 2 2r+   r]   c                   X   e Zd ZU dZej        Zeej                 ed<   dZ	e
eeez           z  dz  ed<   dZee         dz  ed<   dZeed<   dee
e
eee
e
ee
ef         z  f                  z  f         fd	Zed
ee
e
eee
e
ee
ef         z  f                  z  f         dd fd            ZdS )AssistantMessagea<  Assistant message.

    Attributes:
        role: The role of the message.
        content: The content of the message.
        tool_calls: The tool calls of the message.
        prefix: Whether the message is a prefix.

    Examples:
        >>> message = AssistantMessage(content="Hello, how can I help you?")
    r8   NrL   
tool_callsFprefixr   c                     d| j         i}| j        n9t          | j        t                    r| j        |d<   nd | j        D             |d<   | j        d | j        D             |d<   |S )rN   r8   NrL   c                 6    g | ]}|                                 S r5   rQ   rR   s     r)   rU   z.AssistantMessage.to_openai.<locals>.<listcomp>   s"    "O"O"O5??#4#4"O"O"Or+   c                 6    g | ]}|                                 S r5   rQ   )rS   	tool_calls     r)   rU   z.AssistantMessage.to_openai.<locals>.<listcomp>   s$    %]%]%]	i&9&9&;&;%]%]%]r+   rc   )r8   rL   rV   rG   rc   )r=   out_dicts     r)   r>   zAssistantMessage.to_openai   s     DIL
 <c** 	P"&,HY"O"O$,"O"O"OHY?&%]%]T_%]%]%]H\"r+   r?   c                 &   |                     dd          }|d}net          |t                    r1g }|pg D ])}|                    t	          j        |                     *nt          dt          |                     |                     dd          }d}|t          |t                    r|}nAt          |t                    rd |D             }nt          dt          |                     | 	                    |d         ||d          S )	rX   rc   Nztool_calls must be a list, got rL   c                 ,    g | ]}t          |          S r5   rZ   rR   s     r)   rU   z0AssistantMessage.from_openai.<locals>.<listcomp>   s!    YYY5e<<YYYr+   zUnknown content type: r8   )r8   rL   rc   )
getrV   rH   appendr   rD   
ValueErrorr;   rG   r[   )rC   r?   openai_tool_callstools_callsopenai_tool_callopenai_contentrL   s          r)   rD   zAssistantMessage.from_openai   sO    +..|TBB$15KK)400 	ZK$5$; K K ""8#78H#I#IJJJJK XtDU?V?VXXYYY'++It<<37!Z%D%D!$GG-- 	NYY.YYYGGLd>6J6JLLMMM!!&v.") 
 
 	
r+   )r"   r2   r3   r4   r-   r0   r8   r   rE   rL   rG   rH   r   r   rc   r   rd   boolrF   r   r>   rI   rD   r5   r+   r)   rb   rb      s+        
 
 &+_D'%/
"4449=GS4	J.//$6===(,JX%,,,FD4S4S#S#X:N5N0O+P%P PQ      
c3d3dSVX[S[nH\C\>]9^3^.^)_ 
dv 
 
 
 [
 
 
r+   rb   c                   (    e Zd ZU dZdZedz  ed<   dS )FinetuningAssistantMessagezAssistant message for finetuning.

    Attributes:
        weight: The weight of the message to train on.

    Examples:
        >>> message = FinetuningAssistantMessage(content="Hello, how can I help you?", weight=0.5)
    Nweight)r"   r2   r3   r4   rv   floatrE   r5   r+   r)   ru   ru      s2            FEDLr+   ru   c                   B   e Zd ZU dZeee         z  ed<   ej	        Z
eej	                 ed<   dZedz  ed<   dZedz  ed<   deeeeeeeeeef         z  f                  z  f         fdZed	eeeeeeeeeef         z  f                  z  f         dd fd
            ZdS )ToolMessagea5  Tool message.

    Attributes:
        content: The content of the message.
        tool_call_id: The tool call id of the message.
        name: The name of the tool. (Deprecated in V3 tokenization)

    Examples:
       >>> message = ToolMessage(content="Hello, how can I help you?", tool_call_id="123")
    rL   r8   Ntool_call_idr   r   c                 R    | j         
J d            |                     dh          S )rN   N0tool_call_id must be provided for tool messages.r   )exclude)rz   r_   r<   s    r)   r>   zToolMessage.to_openai  s0     ,,.`,,,x000r+   messagesc                 R    |                      |          }|j        
J d            |S )rX   Nr|   )r[   rz   )rC   r~   tool_messages      r)   rD   zToolMessage.from_openai  s5     ))(33(446h444r+   )r"   r2   r3   r4   rG   rH   r   rE   r-   r1   r8   r   rz   r   rF   r   r>   rI   rD   r5   r+   r)   ry   ry     s        	 	 4	?"""" %
D'%*
***#L#*### D#*14S4S#S#X:N5N0O+P%P PQ 1 1 1 1
 4S4S#SRUXBV=V8W3X-X(X#Y ^k    [  r+   ry   r8   )discriminatorChatMessageType)boundUserMessageTypeAssistantMessageTypeToolMessageTypeSystemMessageTypeUATS)*r$   enumr   typingr   r   r   pydanticr   typing_extensionsr   r	   mistral_common.baser
   r#   r   r   r   r   r   +mistral_common.protocol.instruct.tool_callsr   filterwarningsr&   rG   r*   r-   r7   rK   r]   rb   ru   ry   ChatMessageFinetuningMessager   r   r   r   r   r   rE   r5   r+   r)   <module>r      sT          ( ( ( ( ( ( ( ( ( (       2 2 2 2 2 2 2 2 + + + + + +              A @ @ @ @ @  ]   6Gc 6Gc 6G 6G 6G 6Gr    C   &] ] ] ] ]+ ] ] ]2
 
 
 
 
+ 
 
 
@2 2 2 2 2K 2 2 2.=
 =
 =
 =
 =
{ =
 =
 =
@
  
  
  
  
 !1 
  
  
     +   @ 36FFTV[V[jpVqVqVqqrK"<<{J	E! 
 '+;??? '+;???w5=MNNN '+;???G/}EEE !$88?JM^^i ^ ^ ^ ^ ^r+   