
    dhz2                       S SK Jr  S SKrS SKJrJrJrJrJrJ	r	J
r
JrJr  S SKJr  S SKJrJrJrJrJrJrJrJrJr  S SKJr  S SKJr   S      S!S jjr " S	 S
\5      r " S S\5      r " S S\5      r  " S S\5      r! " S S\5      r"S"S jr#S#S jr$S$S jr%S%S jr&S&S jr' " S S5      r(S'S jr)    S(S jr* " S S5      r+ " S S5      r,\," 5       r-g))    )annotationsN)	AnyAsyncIteratorDictIterableListMappingSequenceUnionoverload)ChatSession)		AIMessageAIMessageChunkBaseMessageBaseMessageChunkChatMessageFunctionMessageHumanMessageSystemMessageToolMessage)	BaseModel)Literalc               F   #    UnU   Sh  vN nX#47v   US-  nM   N
 g7f)z$Async version of enumerate function.N    )iterablestartixs       [/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/adapters/openai.py
aenumerater!       s-      	A ad
	Q8s   !!!c                  "    \ rS rSrSrSS jrSrg)IndexableBaseModel*   zDAllows a BaseModel to return its fields by string variable indexing.c                    [        X5      $ N)getattr)selfitems     r    __getitem__IndexableBaseModel.__getitem__-   s    t""    r   N)r)   strreturnr   )__name__
__module____qualname____firstlineno____doc__r*   __static_attributes__r   r,   r    r#   r#   *   s
    N#r,   r#   c                  $    \ rS rSr% SrS\S'   Srg)Choice1   zChoice.dictmessager   Nr/   r0   r1   r2   r3   __annotations__r4   r   r,   r    r6   r6   1   s
    Mr,   r6   c                  $    \ rS rSr% SrS\S'   Srg)ChatCompletions7   zChat completions.zList[Choice]choicesr   Nr:   r   r,   r    r=   r=   7   s    r,   r=   c                  $    \ rS rSr% SrS\S'   Srg)ChoiceChunk=   zChoice chunk.r8   deltar   Nr:   r   r,   r    rA   rA   =   s
    Kr,   rA   c                  $    \ rS rSr% SrS\S'   Srg)ChatCompletionChunkC   zChat completion chunk.zList[ChoiceChunk]r?   r   Nr:   r   r,   r    rE   rE   C   s     r,   rE   c                   U R                  S5      nUS:X  a  [        U R                  SS5      S9$ US:X  a  U R                  SS5      =(       d    Sn0 nU R                  S5      =n(       a  [        U5      US'   U R                  S5      =n(       a  XSS'   U R                  S	5      =n(       a  XcS	'   [        X#S
9$ US:X  a  [	        U R                  SS5      S9$ US:X  a)  [        U R                  SS5      U R                  S5      S9$ US:X  a:  0 nSU ;   a  U S   US'   [        U R                  SS5      U R                  S5      US9$ [        U R                  SS5      US9$ )ztConvert a dictionary to a LangChain message.

Args:
    _dict: The dictionary.

Returns:
    The LangChain message.
roleusercontent )rJ   	assistantfunction_call
tool_callscontext)rJ   additional_kwargssystemfunctionname)rJ   rS   tooltool_call_id)rJ   rU   rP   )rJ   rH   )getr   r8   r   r   r   r   r   )_dictrH   rJ   rP   rM   rN   rO   s          r    convert_dict_to_messagerX   I   sj    99VDv~EIIi$<==		 ))Ir*0b"$!IIo66=615m1Do.<00:0.8l+ii	**7*+2i(NN		UYYy"%=>>		uyyB'?eiiPVFWXX	U?(-ff%IIi,>2/
 	
 599Y#;$GGr,   c                   [        U [        5      (       a  U R                  U R                  S.nGOn[        U [        5      (       a  SU R                  S.nGOH[        U [
        5      (       a  SU R                  S.nSU R                  ;   a   U R                  S   US'   US   S:X  a  SUS'   SU R                  ;   a   U R                  S   US'   US   S:X  a  SUS'   S	U R                  ;   a   U R                  S	   US	'   US   S:X  a  SUS'   O[        U [        5      (       a  S
U R                  S.nOn[        U [        5      (       a  SU R                  U R                  S.nO>[        U [        5      (       a  SU R                  U R                  S.nO[        SU  35      eSU R                  ;   a  U R                  S   US'   U$ )zvConvert a LangChain message to a dictionary.

Args:
    message: The LangChain message.

Returns:
    The dictionary.
)rH   rJ   rI   rL   rM   rJ   rK   NrN   rO   rQ   rR   )rH   rJ   rS   rT   )rH   rJ   rU   zGot unknown type rS   )
isinstancer   rH   rJ   r   r   rP   r   r   rS   r   rU   	TypeError)r9   message_dicts     r    convert_message_to_dictr]   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                B    U  Vs/ sH  n[        U5      PM     sn$ s  snf )zConvert dictionaries representing OpenAI messages to LangChain format.

Args:
    messages: List of dictionaries representing OpenAI messages

Returns:
    List of LangChain BaseMessage objects.
)rX   )messagesms     r    convert_openai_messagesra      s"     1991#A&999s   c                b   0 n[        U [        5      (       av  US:X  a  SUS'   SU R                  ;   a  U R                  S   US'   US:X  a  S US'   SU R                  ;   a  U R                  S   US'   US:X  a  S US'   O'U R                  US'   O[	        S[        U 5       35      eUSS0:X  a  0 nU$ )	Nr   rL   rH   rM   rJ   rN   z%Got unexpected streaming chunk type: rK   )rZ   r   rP   rJ   
ValueErrortypechunkr   rW   s      r    _convert_message_chunkrg      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                &    [        X5      nSSU0/0$ )Nr?   rC   )rg   re   s      r    _convert_message_chunk_to_deltari      s    "5,E%()**r,   c                  \   \ rS rSrSr\\SSS.         SS jj5       5       r\\SS.         SS jj5       5       r\SSS.         SS	 jj5       r\\SSS.         SS
 jj5       5       r\\SS.         SS jj5       5       r\SSS.         SS jj5       rSr	g)ChatCompletion   zChat completion.
ChatOpenAIFproviderstreamc                   g r&   r   r_   ro   rp   kwargss       r    createChatCompletion.create   s     r,   ro   c                   g r&   r   rr   s       r    rt   ru           r,   c                   [         R                  " S5      n[        XA5      nU" S0 UD6n[        U 5      nU(       d!  UR	                  U5      nSS[        U5      0/0$ S [        UR                  U5      5       5       $ )Nlangchain.chat_modelsr?   r9   c              3  :   #    U H  u  p[        X!5      v   M     g 7fr&   ri   .0r   cs      r    	<genexpr>(ChatCompletion.create.<locals>.<genexpr>   s!      NDA 055Ns   r   )	importlibimport_moduler'   ra   invoker]   	enumeraterp   	r_   ro   rp   rs   models	model_clsmodel_configconverted_messagesresults	            r    rt   ru      s     (()@AF-	 *6*4X>!(();<F,CF,K LMNN%l&9&9:L&MN r,   c                  #    g 7fr&   r   rr   s       r    acreateChatCompletion.acreate   s
         c                  #    g 7fr&   r   rr   s       r    r   r   	  
      r   c                 #    [         R                  " S5      n[        XA5      nU" S0 UD6n[        U 5      nU(       d)  UR	                  U5      I S h  vN nSS[        U5      0/0$ S [        UR                  U5      5       5       $  N57f)Nrz   r?   r9   c               J   #    U  S h  vN u  p[        X!5      7v   M   N
 g 7fr&   r|   r}   s      r    r   )ChatCompletion.acreate.<locals>.<genexpr>#  s&       ! 055s   #!!#!#r   )r   r   r'   ra   ainvoker]   r!   astreamr   s	            r    r   r     s      (()@AF-	 *6*4X>'//0BCCF,CF,K LMNN",\-A-ABT-U"V  Ds   AB
B6B
r   N)
r_   Sequence[Dict[str, Any]]ro   r-   rp   Literal[False]rs   r   r.   r8   
r_   r   ro   r-   rp   Literal[True]rs   r   r.   r   )
r_   r   ro   r-   rp   boolrs   r   r.   zUnion[dict, Iterable]
r_   r   ro   r-   rp   r   rs   r   r.   r   )
r_   r   ro   r-   rp   r   rs   r   r.   zUnion[dict, AsyncIterator]
r/   r0   r1   r2   r3   r   staticmethodrt   r   r4   r   r,   r    rk   rk      s    %!&	*  	
  
    %*  	
  
    %	*  	
  
 (  %!&	*  	
  
    %*  	
  
    %	*  	
  
$ r,   rk   c           	     d    [        U S    Vs/ sH  n[        U[        5      PM     sn5      $ s  snf )z/Check if chat session has an assistant message.r_   )anyrZ   r   )sessionr`   s     r    _has_assistant_messager   )  s-    '*2EF2EQ
1i(2EFGGFs   -c           
         U  VVs/ sH3  n[        U5      (       d  M  US    Vs/ sH  n[        U5      PM     snPM5     snn$ s  snf s  snnf )zConvert messages to a list of lists of dictionaries for fine-tuning.

Args:
    sessions: The chat sessions.

Returns:
    The list of lists of dictionaries.
r_   )r   r]   )sessionsr   ss      r    convert_messages_for_finetuningr   .  sS      G!'* 	BWZ-@A-@	 	#-@A As   AAAAAc                  \   \ rS rSrSr\\SSS.         SS jj5       5       r\\SS.         SS jj5       5       r\SSS.         SS	 jj5       r\\SSS.         SS
 jj5       5       r\\SS.         SS jj5       5       r\SSS.         SS jj5       rSr	g)Completionsi@  zCompletions.rm   Frn   c                   g r&   r   rr   s       r    rt   Completions.createC  s     r,   rv   c                   g r&   r   rr   s       r    rt   r   M  rx   r,   c                  [         R                  " S5      n[        XA5      nU" S0 UD6n[        U 5      nU(       d+  UR	                  U5      n[        [        [        U5      S9/S9$ S [        UR                  U5      5       5       $ )Nrz   r9   r?   c           	   3  X   #    U H!  u  p[        [        [        X!5      S 9/S9v   M#     g7f)rC   r   NrE   rA   rg   r}   s      r    r   %Completions.create.<locals>.<genexpr>i  s5       ODA $(/Ea/KLM Os   (*r   )
r   r   r'   ra   r   r=   r6   r]   r   rp   r   s	            r    rt   r   W  s     (()@AF-	 *6*4X>!(();<F"(?(GHI  &l&9&9:L&MN	 r,   c                  #    g 7fr&   r   rr   s       r    r   Completions.acreatep  s
      r   c                  #    g 7fr&   r   rr   s       r    r   r   z  r   r   c               ,  #    [         R                  " S5      n[        XA5      nU" S0 UD6n[        U 5      nU(       d3  UR	                  U5      I S h  vN n[        [        [        U5      S9/S9$ S [        UR                  U5      5       5       $  N?7f)Nrz   r   r   c           	    h   #    U  S h  vN u  p[        [        [        X!5      S9/S97v   M*   N%
 g 7f)Nr   r   r   r}   s      r    r   &Completions.acreate.<locals>.<genexpr>  s6        ! $(/Ea/KLMs   20.0"202r   )
r   r   r'   ra   r   r=   r6   r]   r!   r   r   s	            r    r   r     s      (()@AF-	 *6*4X>'//0BCCF"(?(GHI  #-\-A-ABT-U"V	  Ds   ABBA Br   N)
r_   r   ro   r-   rp   r   rs   r   r.   r=   r   )
r_   r   ro   r-   rp   r   rs   r   r.   z Union[ChatCompletions, Iterable]r   )
r_   r   ro   r-   rp   r   rs   r   r.   z%Union[ChatCompletions, AsyncIterator]r   r   r,   r    r   r   @  s    %!&	*  	
  
    %*  	
  
    %	*  	
  
* 0  %!&	*  	
  
    %*  	
  
    %	*  	
  
/ r,   r   c                  "    \ rS rSrSrSS jrSrg)Chati  zChat.c                "    [        5       U l        g r&   )r   completions)r(   s    r    __init__Chat.__init__  s    &=r,   )r   N)r.   None)r/   r0   r1   r2   r3   r   r4   r   r,   r    r   r     s
    )r,   r   )r   )r   zAsyncIterator[Any]r   intr.   zAsyncIterator[tuple[int, Any]])rW   zMapping[str, Any]r.   r   )r9   r   r.   r8   )r_   r   r.   zList[BaseMessage])rf   r   r   r   r.   r8   )rf   r   r   r   r.   zDict[str, Any])r   r   r.   r   )r   zIterable[ChatSession]r.   zList[List[dict]]).
__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#   r6   r=   rA   rE   rX   r]   ra   rg   ri   rk   r   r   r   r   chatr   r,   r    <module>r      s    " 
 
 
 5
 
 
  % 01 ),## # ( $ , &HR1h	:8+
S SlH
#$[ [|) ) vr,   