
    Ig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 	 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       `/var/www/html/answerous/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(  r^| j                  dd      xs d}i }| j                  d      x}rt        |      |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)rB   additional_kwargssystemfunctionname)rB   rJ   tooltool_call_id)rB   rL   rG   )rB   r@   )getr   r3   r   r   r   r   r   )_dictr@   rB   rG   rE   rF   s         r    convert_dict_to_messagerO   I   sT    99VDv~EIIi$<==		 ))Ir*0b"$!IIo66=615m1Do.<00:0.8l+<MNN		UYYy"%=>>		uyyB'?eiiPVFWXX	U?(-ff%IIi,>2/
 	
 599Y#;$GGr*   c                   t        | t              r| j                  | j                  d}nt        | t              rd| j                  d}nt        | t
              rjd| 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(  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   rH   rI   )r@   rB   rJ   rK   )r@   rB   rL   zGot unknown type rJ   )
isinstancer   r@   rB   r   r   rG   r   r   rJ   r   rL   	TypeError)r4   message_dicts     r    convert_message_to_dictrT   p   sb    ';' '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'	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.
    )rO   )messagesms     r    convert_openai_messagesrX      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   )rQ   r   rG   rB   
ValueErrortypechunkr   rN   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_deltar`      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   rV   re   rf   kwargss       r    createzChatCompletion.create   s     r*   re   c                    y r%   r   rh   s       r    rj   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%   r`   .0r   cs      r    	<genexpr>z(ChatCompletion.create.<locals>.<genexpr>   s#      Aq 015s   r   )	importlibimport_moduler&   rX   invokerT   	enumeraterf   	rV   re   rf   ri   models	model_clsmodel_configconverted_messagesresults	            r    rj   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   rh   s       r    acreatezChatCompletion.acreate   s         c                  K   y wr%   r   rh   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)Nro   r9   r4   c               L   K   | 3 d {   \  }}t        ||       7 6 y wr%   rq   rr   s      r    ru   z)ChatCompletion.acreate.<locals>.<genexpr>  s1       !Q 0155 s   $" "$"$r   )rv   rw   r&   rX   ainvokerT   r!   astreamrz   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)
rV   Sequence[Dict[str, Any]]re   r+   rf   Literal[False]ri   r   r,   r3   
rV   r   re   r+   rf   Literal[True]ri   r   r,   r   )
rV   r   re   r+   rf   boolri   r   r,   zUnion[dict, Iterable]
rV   r   re   r+   rf   r   ri   r   r,   r   )
rV   r   re   r+   rf   r   ri   r   r,   zUnion[dict, AsyncIterator]r-   r.   r/   r0   r   staticmethodrj   r   r   r*   r    rb   rb      s    %!&	*  	
  
    %*  	
  
    %	*  	
  
 (  %!&	*  	
  
    %*  	
  
    %	*  	
  
$ r*   rb   c           	     `    t        | d   D cg c]  }t        |t               c}      S c c}w )z/Check if chat session has an assistant message.rV   )anyrQ   r   )sessionrW   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.
    rV   )r   rT   )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.rc   Frd   c                    y r%   r   rh   s       r    rj   zCompletions.create<  s     r*   rk   c                    y r%   r   rh   s       r    rj   zCompletions.createF  rm   r*   c                  t        j                  d      }t        ||      } |di |}t        |       }|s1|j	                  |      }t        t        t        |            g      S d t        |j                  |            D        S )Nro   r4   r9   c           	   3  d   K   | ](  \  }}t        t        t        ||             g       * yw)r<   r   Nr>   r;   r^   rr   s      r    ru   z%Completions.create.<locals>.<genexpr>b  s;       Aq $(/Ea/KLM s   .0r   )
rv   rw   r&   rX   rx   r8   r2   rT   ry   rf   rz   s	            r    rj   zCompletions.createP  s     (()@AFH-	 *6*4X>!(();<F"(?(GHI  &l&9&9:L&MN	 r*   c                  K   y wr%   r   rh   s       r    r   zCompletions.acreatei  s      r   c                  K   y wr%   r   rh   s       r    r   zCompletions.acreates  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)Nro   r   r   c           	    v   K   | 3 d {   \  }}t        t        t        ||            g       17 ,6 y w)Nr   r   r   rr   s      r    ru   z&Completions.acreate.<locals>.<genexpr>  sF        !Q $(/Ea/KLM  s   9757)979r   )
rv   rw   r&   rX   r   r8   r2   rT   r!   r   rz   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)
rV   r   re   r+   rf   r   ri   r   r,   r8   r   )
rV   r   re   r+   rf   r   ri   r   r,   z Union[ChatCompletions, Iterable]r   )
rV   r   re   r+   rf   r   ri   r   r,   z%Union[ChatCompletions, AsyncIterator]r   r   r*   r    r   r   9  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]])rN   zMapping[str, Any]r,   r   )r4   r   r,   r3   )rV   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   rv   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>   rO   rT   rX   r^   r`   rb   r   r   r   r   chatr   r*   r    <module>r      s    " 
 
 
 5
 
 
  % 01 ),## # ( $ , $HN,^	:8+
S SlH
#$[ [|) ) vr*   