
    ~
iz2                       d dl mZ d dlZd dlmZmZmZmZmZm	Z	m
Z
mZmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZ 	 d8d9d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"d:dZ#d;dZ$d<d#Z%d=d'Z&d>d)Z' G d* d+          Z(d?d/Z)d@d3Z* G d4 d5          Z+ G d6 d7          Z, e,            Z-dS )A    )annotationsN)	AnyAsyncIteratorDictIterableListMappingSequenceUnionoverload)ChatSession)		AIMessageAIMessageChunkBaseMessageBaseMessageChunkChatMessageFunctionMessageHumanMessageSystemMessageToolMessage)	BaseModel)LiteraliterableAsyncIterator[Any]startintreturnAsyncIterator[tuple[int, Any]]c               <   K   |}| 2 3 d{V }||fW V  |dz  }6 dS )z$Async version of enumerate function.N    )r   r   ixs       C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\langchain_community/adapters/openai.py
aenumerater%       sX       	A       ad



	Q 88s   c                      e Zd ZdZddZdS )	IndexableBaseModelzDAllows a BaseModel to return its fields by string variable indexing.itemstrr   r   c                "    t          | |          S N)getattr)selfr(   s     r$   __getitem__zIndexableBaseModel.__getitem__-   s    tT"""    N)r(   r)   r   r   )__name__
__module____qualname____doc__r.   r!   r/   r$   r'   r'   *   s.        NN# # # # # #r/   r'   c                      e Zd ZU dZded<   dS )ChoicezChoice.dictmessageNr0   r1   r2   r3   __annotations__r!   r/   r$   r5   r5   1   s         MMMMMMr/   r5   c                      e Zd ZU dZded<   dS )ChatCompletionszChat completions.zList[Choice]choicesNr8   r!   r/   r$   r;   r;   7   s$         r/   r;   c                      e Zd ZU dZded<   dS )ChoiceChunkzChoice chunk.r6   deltaNr8   r!   r/   r$   r>   r>   =   s         KKKKKr/   r>   c                      e Zd ZU dZded<   dS )ChatCompletionChunkzChat completion chunk.zList[ChoiceChunk]r<   Nr8   r!   r/   r$   rA   rA   C   s$           r/   rA   _dictMapping[str, Any]r   c                ^   |                      d          }|dk    r$t          |                      dd                    S |dk    r|                      dd          pd}i }|                      d          x}rt          |          |d<   |                      d          x}r||d<   |                      d	          x}r||d	<   t          ||
          S |dk    r$t	          |                      dd                    S |dk    r8t          |                      dd          |                      d                    S |dk    rJi }d| v r| d         |d<   t          |                      dd          |                      d          |          S t          |                      dd          |          S )zConvert a dictionary to a LangChain message.

    Args:
        _dict: The dictionary.

    Returns:
        The LangChain message.
    roleusercontent )rG   	assistantfunction_call
tool_callscontext)rG   additional_kwargssystemfunctionname)rG   rP   tooltool_call_id)rG   rR   rM   )rG   rE   )getr   r6   r   r   r   r   r   )rB   rE   rG   rM   rJ   rK   rL   s          r$   convert_dict_to_messagerT   I   s    99VDv~~EIIi$<$<====			 ))Ir**0b"$!IIo666= 	E15m1D1Do.<000: 	9.8l+ii	***7 	3+2i(<MNNNN			UYYy"%=%=>>>>			uyyB'?'?eiiPVFWFWXXXX	U??(-ff%IIi,,>22/
 
 
 	
 599Y#;#;$GGGGr/   r7   r6   c                   t          | t                    r| j        | j        d}n=t          | t                    rd| j        d}nt          | t
                    rd| j        d}d| j        v r!| j        d         |d<   |d         dk    rd|d<   d| j        v r!| j        d         |d<   |d         dk    rd|d<   d	| j        v r!| j        d	         |d	<   |d         dk    rd|d<   n~t          | t                    rd
| j        d}n^t          | t                    rd| j        | j	        d}n8t          | t                    rd| j        | j        d}nt          d|            d| j        v r| j        d         |d<   |S )zConvert a LangChain message to a dictionary.

    Args:
        message: The LangChain message.

    Returns:
        The dictionary.
    )rE   rG   rF   rI   rJ   rG   rH   NrK   rL   rN   rO   )rE   rG   rP   rQ   )rE   rG   rR   zGot unknown type rP   )
isinstancer   rE   rG   r   r   rM   r   r   rP   r   rR   	TypeError)r7   message_dicts     r$   convert_message_to_dictrY   r   s    ';'' $7 'II	G\	*	* "7 &7?CC	GY	'	'  7 +HHg777,3,Eo,VL)I&",,*.Y'7444)0)B<)PL&I&",,*.Y'111&-&?	&JL#I&",,*.Y'	G]	+	+ 7 (W_EE	G_	-	- 7L
 

 
G[	)	) 7#0
 
 5G55666***&8@Vr/   messagesSequence[Dict[str, Any]]List[BaseMessage]c                    d | D             S )zConvert dictionaries representing OpenAI messages to LangChain format.

    Args:
        messages: List of dictionaries representing OpenAI messages

    Returns:
        List of LangChain BaseMessage objects.
    c                ,    g | ]}t          |          S r!   )rT   .0ms     r$   
<listcomp>z+convert_openai_messages.<locals>.<listcomp>   s!    9991#A&&999r/   r!   )rZ   s    r$   convert_openai_messagesrc      s     :99999r/   chunkr   r"   c                D   i }t          | t                    r_|dk    rd|d<   d| j        v r| j        d         |d<   |dk    rd |d<   d| j        v r| j        d         |d<   |dk    rd |d<   n*| j        |d<   nt	          dt          |                      |ddik    ri }|S )	Nr   rI   rE   rJ   rG   rK   z%Got unexpected streaming chunk type: rH   )rV   r   rM   rG   
ValueErrortyperd   r"   rB   s      r$   _convert_message_chunkri      s    E%(( P66'E&Me555%*%<_%ME/" Avv#'i 5222"'"9,"GE, Avv#'i $}E)NeNNOOOBLr/   Dict[str, Any]c                0    t          | |          }dd|igiS )Nr<   r?   )ri   rh   s      r$   _convert_message_chunk_to_deltarl      s$    "5!,,E%()**r/   c                     e Zd ZdZeeddddd                        Zeedddd                        Zeddddd            Zeeddddd                        Zeeddd d                        Zedddd!d            ZdS )"ChatCompletionzChat completion.
ChatOpenAIFproviderstreamrZ   r[   rq   r)   rr   Literal[False]kwargsr   r   r6   c                   d S r+   r!   rZ   rq   rr   rt   s       r$   createzChatCompletion.create   s	     sr/   rq   Literal[True]r   c                   d S r+   r!   rv   s       r$   rw   zChatCompletion.create   	     3r/   boolUnion[dict, Iterable]c               &   t          j        d          }t          ||          } |di |}t          |           }|s)|                    |          }ddt          |          igiS d t          |                    |                    D             S )Nlangchain.chat_modelsr<   r7   c              3  <   K   | ]\  }}t          ||          V  d S r+   rl   r`   r"   cs      r$   	<genexpr>z(ChatCompletion.create.<locals>.<genexpr>   sD        Aq 0155     r/   r!   )	importlibimport_moduler,   rc   invokerY   	enumeraterr   	rZ   rq   rr   rt   models	model_clsmodel_configconverted_messagesresults	            r$   rw   zChatCompletion.create   s     ()@AAFH--	 y**6**4X>> 	!(();<<F,CF,K,K LMNN %l&9&9:L&M&MNN   r/   c               
   K   d S r+   r!   rv   s       r$   acreatezChatCompletion.acreate   s       sr/   r   c               
   K   d S r+   r!   rv   s       r$   r   zChatCompletion.acreate	         r/   Union[dict, AsyncIterator]c               6  K   t          j        d          }t          ||          } |di |}t          |           }|s/|                    |           d {V }ddt          |          igiS d t          |                    |                    2             S )Nr   r<   r7   c               L   K   | 3 d {V 	 \  }}t          ||          W V  6 d S r+   r   r   s      r$   r   z)ChatCompletion.acreate.<locals>.<genexpr>#  sl              !Q 0155       s   #r!   )r   r   r,   rc   ainvokerY   r%   astreamr   s	            r$   r   zChatCompletion.acreate  s       ()@AAFH--	 y**6**4X>> 	'//0BCCCCCCCCF,CF,K,K LMNN ",\-A-ABT-U-U"V"V   r/   N)
rZ   r[   rq   r)   rr   rs   rt   r   r   r6   
rZ   r[   rq   r)   rr   ry   rt   r   r   r   )
rZ   r[   rq   r)   rr   r|   rt   r   r   r}   
rZ   r[   rq   r)   rr   ry   rt   r   r   r   )
rZ   r[   rq   r)   rr   r|   rt   r   r   r   r0   r1   r2   r3   r   staticmethodrw   r   r!   r/   r$   rn   rn      sf        %!&	     \ X  %     \ X  %	     \(  %!&	     \ X  %     \ X  %	     \  r/   rn   sessionr   r|   c                @    t          d | d         D                       S )z/Check if chat session has an assistant message.c                8    g | ]}t          |t                    S r!   )rV   r   r_   s     r$   rb   z*_has_assistant_message.<locals>.<listcomp>+  s"    FFFQ
1i((FFFr/   rZ   )any)r   s    r$   _has_assistant_messager   )  s$    FF'*2EFFFGGGr/   sessionsIterable[ChatSession]List[List[dict]]c                    d | D             S )zConvert messages to a list of lists of dictionaries for fine-tuning.

    Args:
        sessions: The chat sessions.

    Returns:
        The list of lists of dictionaries.
    c                P    g | ]#}t          |          d  |d         D             $S )c                ,    g | ]}t          |          S r!   )rY   )r`   ss     r$   rb   z>convert_messages_for_finetuning.<locals>.<listcomp>.<listcomp>:  s!    AAA	 	#	#AAAr/   rZ   )r   )r`   r   s     r$   rb   z3convert_messages_for_finetuning.<locals>.<listcomp>9  sI       !'**AAWZ-@AAA  r/   r!   )r   s    r$   convert_messages_for_finetuningr   .  s#        r/   c                     e Zd ZdZeeddddd                        Zeedddd                        Zeddddd            Zeeddddd                        Zeeddd d                        Zedddd!d            ZdS )"CompletionszCompletions.ro   Frp   rZ   r[   rq   r)   rr   rs   rt   r   r   r;   c                   d S r+   r!   rv   s       r$   rw   zCompletions.createC  s	     #r/   rx   ry   r   c                   d S r+   r!   rv   s       r$   rw   zCompletions.createM  r{   r/   r|    Union[ChatCompletions, Iterable]c               V   t          j        d          }t          ||          } |di |}t          |           }|sA|                    |          }t          t          t          |                    g          S d t          |	                    |                    D             S )Nr   r7   r<   c           	   3  v   K   | ]4\  }}t          t          t          ||                     g          V  5dS )r?   r   NrA   r>   ri   r   s      r$   r   z%Completions.create.<locals>.<genexpr>i  sg         Aq $(/Ea/K/KLLLM       r/   r!   )
r   r   r,   rc   r   r;   r5   rY   r   rr   r   s	            r$   rw   zCompletions.createW  s     ()@AAFH--	 y**6**4X>> 	!(();<<F"(?(G(GHHHI     &l&9&9:L&M&MNN	   r/   c               
   K   d S r+   r!   rv   s       r$   r   zCompletions.acreatep  s       #r/   r   c               
   K   d S r+   r!   rv   s       r$   r   zCompletions.acreatez  r   r/   %Union[ChatCompletions, AsyncIterator]c               f  K   t          j        d          }t          ||          } |di |}t          |           }|sG|                    |           d {V }t          t          t          |                    g          S d t          |	                    |                    2             S )Nr   r   r   c           	       K   | 3 d {V 	 \  }}t          t          t          ||                    g          W V  <6 d S )Nr   r   r   r   s      r$   r   z&Completions.acreate.<locals>.<genexpr>  s               !Q $(/Ea/K/KLLLM         s   A r!   )
r   r   r,   rc   r   r;   r5   rY   r%   r   r   s	            r$   r   zCompletions.acreate  s       ()@AAFH--	 y**6**4X>> 	'//0BCCCCCCCCF"(?(G(GHHHI     #-\-A-ABT-U-U"V"V	   r/   N)
rZ   r[   rq   r)   rr   rs   rt   r   r   r;   r   )
rZ   r[   rq   r)   rr   r|   rt   r   r   r   r   )
rZ   r[   rq   r)   rr   r|   rt   r   r   r   r   r!   r/   r$   r   r   @  sf        %!&	     \ X  %     \ X  %	     \0  %!&	     \ X  %     \ X  %	     \  r/   r   c                      e Zd ZdZddZdS )ChatzChat.r   Nonec                ,    t                      | _        d S r+   )r   completions)r-   s    r$   __init__zChat.__init__  s    &==r/   N)r   r   )r0   r1   r2   r3   r   r!   r/   r$   r   r     s-        K) ) ) ) ) )r/   r   )r   )r   r   r   r   r   r   )rB   rC   r   r   )r7   r   r   r6   )rZ   r[   r   r\   )rd   r   r"   r   r   r6   )rd   r   r"   r   r   rj   )r   r   r   r|   )r   r   r   r   ).
__future__r   r   typingr   r   r   r   r   r	   r
   r   r   langchain_core.chat_sessionsr   langchain_core.messagesr   r   r   r   r   r   r   r   r   pydanticr   typing_extensionsr   r%   r'   r5   r;   r>   rA   rT   rY   rc   ri   rl   rn   r   r   r   r   chatr!   r/   r$   <module>r      s^   " " " " " "    
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 5 4 4 4 4 4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
       % % % % % % 01    # # # # # # # #           (       $       ,   &H &H &H &HR1 1 1 1h	: 	: 	: 	:   8+ + + +
S S S S S S S SlH H H H
   $[ [ [ [ [ [ [ [|) ) ) ) ) ) ) ) tvvr/   