
    7|h2                       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 	 d 	 	 	 	 	 d!d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(dZ* G d d      Z+ G d d      Z, e,       Z-y))    )annotationsN)	AnyAsyncIteratorDictIterableListMappingSequenceUnionoverload)ChatSession)		AIMessageAIMessageChunkBaseMessageBaseMessageChunkChatMessageFunctionMessageHumanMessageSystemMessageToolMessage)	BaseModel)Literalc               F   K   |}| 2 3 d{   }||f |dz  }7 6 yw)z$Async version of enumerate function.N    )iterablestartixs       b/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/adapters/openai.py
aenumerater!       s6      	A  ad
	Q8s   !!!c                      e Zd ZdZddZy)IndexableBaseModelzDAllows a BaseModel to return its fields by string variable indexing.c                    t        | |      S N)getattr)selfitems     r    __getitem__zIndexableBaseModel.__getitem__-   s    tT""    N)r(   strreturnr   )__name__
__module____qualname____doc__r)   r   r*   r    r#   r#   *   s
    N#r*   r#   c                      e Zd ZU dZded<   y)ChoicezChoice.dictmessageNr-   r.   r/   r0   __annotations__r   r*   r    r2   r2   1   s
    Mr*   r2   c                      e Zd ZU dZded<   y)ChatCompletionszChat completions.zList[Choice]choicesNr5   r   r*   r    r8   r8   7   s    r*   r8   c                      e Zd ZU dZded<   y)ChoiceChunkzChoice chunk.r3   deltaNr5   r   r*   r    r;   r;   =   s
    Kr*   r;   c                      e Zd ZU dZded<   y)ChatCompletionChunkzChat completion chunk.zList[ChoiceChunk]r9   Nr5   r   r*   r    r>   r>   C   s     r*   r>   c                   | j                  d      }|dk(  rt        | j                  dd            S |dk(  rv| j                  dd      xs d}i }| j                  d      x}rt        |      |d<   | j                  d      x}r||d<   | j                  d	      x}r||d	<   t        ||
      S |dk(  rt	        | j                  dd            S |dk(  r,t        | j                  dd      | j                  d            S |dk(  r;i }d| v r| d   |d<   t        | j                  dd      | j                  d      |      S t        | j                  dd      |      S )zConvert a dictionary to a LangChain message.

    Args:
        _dict: The dictionary.

    Returns:
        The LangChain message.
    roleusercontent )rB   	assistantfunction_call
tool_callscontext)rB   additional_kwargssystemfunctionname)rB   rK   tooltool_call_id)rB   rM   rH   )rB   r@   )getr   r3   r   r   r   r   r   )_dictr@   rB   rH   rE   rF   rG   s          r    convert_dict_to_messagerP   I   ss    99VDv~EIIi$<==		 ))Ir*0b"$!IIo66=615m1Do.<00:0.8l+ii	**7*+2i(<MNN		UYYy"%=>>		uyyB'?eiiPVFWXX	U?(-ff%IIi,>2/
 	
 599Y#;$GGr*   c                4   t        | t              r| j                  | j                  d}nLt        | 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(  rd|d<   nt        | t              rd
| j                  d}ndt        | t              rd| j                  | j                  d}n9t        | 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.
    )r@   rB   rA   rD   rE   rB   rC   NrF   rG   rI   rJ   )r@   rB   rK   rL   )r@   rB   rM   zGot unknown type rK   )
isinstancer   r@   rB   r   r   rH   r   r   rK   r   rM   	TypeError)r4   message_dicts     r    convert_message_to_dictrU   r   s    ';' 'I	G\	* &7??C	GY	' +Hg777,3,E,Eo,VL)I&",*.Y'7444)0)B)B<)PL&I&",*.Y'111&-&?&?	&JL#I&",*.Y'	G]	+ (W__E	G_	-LL

 
G[	)#00
 +G9566***&88@Vr*   c                >    | D cg c]  }t        |       c}S c c}w )zConvert dictionaries representing OpenAI messages to LangChain format.

    Args:
        messages: List of dictionaries representing OpenAI messages

    Returns:
        List of LangChain BaseMessage objects.
    )rP   )messagesms     r    convert_openai_messagesrY      s     1991#A&999s   c                H   i }t        | t              ro|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   rD   r@   rE   rB   rF   z%Got unexpected streaming chunk type: rC   )rR   r   rH   rB   
ValueErrortypechunkr   rO   s      r    _convert_message_chunkr_      s    E%(6'E&Me555%*%<%<_%ME/" Av#'i 5222"'"9"9,"GE, Av#'i $}}E)@eNOOBLr*   c                (    t        | |      }dd|igiS )Nr9   r<   )r_   r]   s      r    _convert_message_chunk_to_deltara      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y)ChatCompletionzChat completion.
ChatOpenAIFproviderstreamc                    y r%   r   rW   rf   rg   kwargss       r    createzChatCompletion.create   s     r*   rf   c                    y r%   r   ri   s       r    rk   zChatCompletion.create        r*   c                   t        j                  d      }t        ||      } |di |}t        |       }|s!|j	                  |      }ddt        |      igiS d t        |j                  |            D        S )Nlangchain.chat_modelsr9   r4   c              3  :   K   | ]  \  }}t        ||        y wr%   ra   .0r   cs      r    	<genexpr>z(ChatCompletion.create.<locals>.<genexpr>   s#      Aq 015s   r   )	importlibimport_moduler&   rY   invokerU   	enumeraterg   	rW   rf   rg   rj   models	model_clsmodel_configconverted_messagesresults	            r    rk   zChatCompletion.create   s     (()@AFH-	 *6*4X>!(();<F,CF,K LMNN%l&9&9:L&MN r*   c                  K   y wr%   r   ri   s       r    acreatezChatCompletion.acreate   s         c                  K   y wr%   r   ri   s       r    r   zChatCompletion.acreate	        r   c                 K   t        j                  d      }t        ||      } |di |}t        |       }|s)|j	                  |       d {   }ddt        |      igiS d t        |j                  |            2        S 7 5w)Nrp   r9   r4   c               L   K   | 3 d {   \  }}t        ||       7 6 y wr%   rr   rs   s      r    rv   z)ChatCompletion.acreate.<locals>.<genexpr>#  s1       !Q 0155 s   $" "$"$r   )rw   rx   r&   rY   ainvokerU   r!   astreamr{   s	            r    r   zChatCompletion.acreate  s      (()@AFH-	 *6*4X>'//0BCCF,CF,K LMNN",\-A-ABT-U"V  Ds   ABB6BN)
rW   Sequence[Dict[str, Any]]rf   r+   rg   Literal[False]rj   r   r,   r3   
rW   r   rf   r+   rg   Literal[True]rj   r   r,   r   )
rW   r   rf   r+   rg   boolrj   r   r,   zUnion[dict, Iterable]
rW   r   rf   r+   rg   r   rj   r   r,   r   )
rW   r   rf   r+   rg   r   rj   r   r,   zUnion[dict, AsyncIterator]r-   r.   r/   r0   r   staticmethodrk   r   r   r*   r    rc   rc      s    %!&	*  	
  
    %*  	
  
    %	*  	
  
 (  %!&	*  	
  
    %*  	
  
    %	*  	
  
$ r*   rc   c           	     `    t        | d   D cg c]  }t        |t               c}      S c c}w )z/Check if chat session has an assistant message.rW   )anyrR   r   )sessionrX   s     r    _has_assistant_messager   )  s'    '*2EFQ
1i(FGGFs   +c           
         | D cg c])  }t        |      r|d   D cg c]  }t        |       c}+ c}}S c c}w c c}}w )zConvert messages to a list of lists of dictionaries for fine-tuning.

    Args:
        sessions: The chat sessions.

    Returns:
        The list of lists of dictionaries.
    rW   )r   rU   )sessionsr   ss      r    convert_messages_for_finetuningr   .  sE      !'* .5Z-@A	 	#A As   =8==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y)CompletionszCompletions.rd   Fre   c                    y r%   r   ri   s       r    rk   zCompletions.createC  s     r*   rl   c                    y r%   r   ri   s       r    rk   zCompletions.createM  rn   r*   c                  t        j                  d      }t        ||      } |di |}t        |       }|s1|j	                  |      }t        t        t        |            g      S d t        |j                  |            D        S )Nrp   r4   r9   c           	   3  d   K   | ](  \  }}t        t        t        ||             g       * yw)r<   r   Nr>   r;   r_   rs   s      r    rv   z%Completions.create.<locals>.<genexpr>i  s;       Aq $(/Ea/KLM s   .0r   )
rw   rx   r&   rY   ry   r8   r2   rU   rz   rg   r{   s	            r    rk   zCompletions.createW  s     (()@AFH-	 *6*4X>!(();<F"(?(GHI  &l&9&9:L&MN	 r*   c                  K   y wr%   r   ri   s       r    r   zCompletions.acreatep  s      r   c                  K   y wr%   r   ri   s       r    r   zCompletions.acreatez  r   r   c               .  K   t        j                  d      }t        ||      } |di |}t        |       }|s9|j	                  |       d {   }t        t        t        |            g      S d t        |j                  |            2        S 7 Ew)Nrp   r   r   c           	    v   K   | 3 d {   \  }}t        t        t        ||            g       17 ,6 y w)Nr   r   r   rs   s      r    rv   z&Completions.acreate.<locals>.<genexpr>  sF        !Q $(/Ea/KLM  s   9757)979r   )
rw   rx   r&   rY   r   r8   r2   rU   r!   r   r{   s	            r    r   zCompletions.acreate  s      (()@AFH-	 *6*4X>'//0BCCF"(?(GHI  #-\-A-ABT-U"V	  Ds   ABBABN)
rW   r   rf   r+   rg   r   rj   r   r,   r8   r   )
rW   r   rf   r+   rg   r   rj   r   r,   z Union[ChatCompletions, Iterable]r   )
rW   r   rf   r+   rg   r   rj   r   r,   z%Union[ChatCompletions, AsyncIterator]r   r   r*   r    r   r   @  s    %!&	*  	
  
    %*  	
  
    %	*  	
  
* 0  %!&	*  	
  
    %*  	
  
    %	*  	
  
/ r*   r   c                      e Zd ZdZddZy)ChatzChat.c                "    t               | _        y r%   )r   completions)r'   s    r    __init__zChat.__init__  s    &=r*   N)r,   None)r-   r.   r/   r0   r   r   r*   r    r   r     s
    )r*   r   )r   )r   zAsyncIterator[Any]r   intr,   zAsyncIterator[tuple[int, Any]])rO   zMapping[str, Any]r,   r   )r4   r   r,   r3   )rW   r   r,   zList[BaseMessage])r^   r   r   r   r,   r3   )r^   r   r   r   r,   zDict[str, Any])r   r   r,   r   )r   zIterable[ChatSession]r,   zList[List[dict]]).
__future__r   rw   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#   r2   r8   r;   r>   rP   rU   rY   r_   ra   rc   r   r   r   r   chatr   r*   r    <module>r      s    " 
 
 
 5
 
 
  % 01 ),## # ( $ , &HR1h	:8+
S SlH
#$[ [|) ) vr*   