
    Ng1                       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       _/var/www/html/ai-engine/env/lib/python3.11/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    rp|                      dd          pd}i }|                      d          x}rt          |          |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)rG   additional_kwargssystemfunctionname)rG   rO   tooltool_call_id)rG   rQ   rL   )rG   rE   )getr   r6   r   r   r   r   r   )rB   rE   rG   rL   rJ   rK   s         r$   convert_dict_to_messagerS   I   s    99VDv~~EIIi$<$<====			 ))Ir**0b"$!IIo666= 	E15m1D1Do.<000: 	9.8l+<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}nt          | t
                    r_d| 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<   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   rM   rN   )rE   rG   rO   rP   )rE   rG   rQ   zGot unknown type rO   )
isinstancer   rE   rG   r   r   rL   r   r   rO   r   rQ   	TypeError)r7   message_dicts     r$   convert_message_to_dictrX   p   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'	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!   )rS   .0ms     r$   
<listcomp>z+convert_openai_messages.<locals>.<listcomp>   s!    9991#A&&999r/   r!   )rY   s    r$   convert_openai_messagesrb      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   )rU   r   rL   rG   
ValueErrortyperc   r"   rB   s      r$   _convert_message_chunkrh      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?   )rh   rg   s      r$   _convert_message_chunk_to_deltark      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streamrY   rZ   rp   r)   rq   Literal[False]kwargsr   r   r6   c                   d S r+   r!   rY   rp   rq   rs   s       r$   createzChatCompletion.create   s	     sr/   rp   Literal[True]r   c                   d S r+   r!   ru   s       r$   rv   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+   rk   r_   r"   cs      r$   	<genexpr>z(ChatCompletion.create.<locals>.<genexpr>   sD        Aq 0155     r/   r!   )	importlibimport_moduler,   rb   invokerX   	enumeraterq   	rY   rp   rq   rs   models	model_clsmodel_configconverted_messagesresults	            r$   rv   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!   ru   s       r$   acreatezChatCompletion.acreate   s       sr/   r   c               
   K   d S r+   r!   ru   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,   rb   ainvokerX   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)
rY   rZ   rp   r)   rq   rr   rs   r   r   r6   
rY   rZ   rp   r)   rq   rx   rs   r   r   r   )
rY   rZ   rp   r)   rq   r{   rs   r   r   r|   
rY   rZ   rp   r)   rq   rx   rs   r   r   r   )
rY   rZ   rp   r)   rq   r{   rs   r   r   r   r0   r1   r2   r3   r   staticmethodrv   r   r!   r/   r$   rm   rm      sf        %!&	     \ X  %     \ X  %	     \(  %!&	     \ X  %     \ X  %	     \  r/   rm   sessionr   r{   c                @    t          d | d         D                       S )z/Check if chat session has an assistant message.c                8    g | ]}t          |t                    S r!   )rU   r   r^   s     r$   ra   z*_has_assistant_message.<locals>.<listcomp>$  s"    FFFQ
1i((FFFr/   rY   )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!   )rX   )r_   ss     r$   ra   z>convert_messages_for_finetuning.<locals>.<listcomp>.<listcomp>3  s!    AAA	 	#	#AAAr/   rY   )r   )r_   r   s     r$   ra   z3convert_messages_for_finetuning.<locals>.<listcomp>2  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.rn   Fro   rY   rZ   rp   r)   rq   rr   rs   r   r   r;   c                   d S r+   r!   ru   s       r$   rv   zCompletions.create<  s	     #r/   rw   rx   r   c                   d S r+   r!   ru   s       r$   rv   zCompletions.createF  rz   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>   rh   r   s      r$   r   z%Completions.create.<locals>.<genexpr>b  sg         Aq $(/Ea/K/KLLLM       r/   r!   )
r   r   r,   rb   r   r;   r5   rX   r   rq   r   s	            r$   rv   zCompletions.createP  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!   ru   s       r$   r   zCompletions.acreatei  s       #r/   r   c               
   K   d S r+   r!   ru   s       r$   r   zCompletions.acreates  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,   rb   r   r;   r5   rX   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)
rY   rZ   rp   r)   rq   rr   rs   r   r   r;   r   )
rY   rZ   rp   r)   rq   r{   rs   r   r   r   r   )
rY   rZ   rp   r)   rq   r{   rs   r   r   r   r   r!   r/   r$   r   r   9  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   )rY   rZ   r   r[   )rc   r   r"   r   r   r6   )rc   r   r"   r   r   ri   )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   rS   rX   rb   rh   rk   rm   r   r   r   r   chatr!   r/   r$   <module>r      s^   " " " " " "    
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 5 4 4 4 4 4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
       % % % % % % 01    # # # # # # # #           (       $       ,   $H $H $H $HN, , , ,^	: 	: 	: 	:   8+ + + +
S S S S S S S SlH H H H
   $[ [ [ [ [ [ [ [|) ) ) ) ) ) ) ) tvvr/   