o
    Zh2                     @  sh  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@dAddZG dd deZG dd deZG dd deZ G dd deZ!G dd deZ"dBddZ#dCd!d"Z$dDd&d'Z%dEd+d,Z&dFd.d/Z'G d0d1 d1Z(dGd5d6Z)dHd:d;Z*G d<d= d=Z+G d>d? d?Z,e, Z-dS )I    )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                 C s0   |}| 2 z3 dH W }||fV  |d7 }q6 dS )z$Async version of enumerate function.N    )r   r   ixr   r   Z/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/adapters/openai.py
aenumerate    s   

r#   c                   @  s   e Zd ZdZd	ddZdS )
IndexableBaseModelzDAllows a BaseModel to return its fields by string variable indexing.itemstrr   r   c                 C  s
   t | |S N)getattr)selfr%   r   r   r"   __getitem__-   s   
zIndexableBaseModel.__getitem__N)r%   r&   r   r   )__name__
__module____qualname____doc__r*   r   r   r   r"   r$   *       r$   c                   @     e Zd ZU dZded< dS )ChoicezChoice.dictmessageNr+   r,   r-   r.   __annotations__r   r   r   r"   r1   1      
 r1   c                   @  r0   )ChatCompletionszChat completions.zList[Choice]choicesNr4   r   r   r   r"   r7   7   r6   r7   c                   @  r0   )ChoiceChunkzChoice chunk.r2   deltaNr4   r   r   r   r"   r9   =   r6   r9   c                   @  r0   )ChatCompletionChunkzChat completion chunk.zList[ChoiceChunk]r8   Nr4   r   r   r   r"   r;   C   r6   r;   _dictMapping[str, Any]r   c                 C  s  |  d}|dkrt|  dddS |dkrI|  ddpd}i }|  d }r-t||d< |  d }r8||d< |  d	 }rC||d	< t||d
S |dkrVt|  dddS |dkrgt|  dd|  ddS |dkri }d| v rw| d |d< t|  dd|  d|dS t|  dd|dS )zConvert a dictionary to a LangChain message.

    Args:
        _dict: The dictionary.

    Returns:
        The LangChain message.
    roleusercontent )r@   	assistantfunction_call
tool_callscontext)r@   additional_kwargssystemfunctionname)r@   rI   tooltool_call_id)r@   rK   rF   )r@   r>   )getr   r2   r   r   r   r   r   )r<   r>   r@   rF   rC   rD   rE   r   r   r"   convert_dict_to_messageI   s6   
	
rM   r3   r2   c                 C  sH  t | tr| j| jd}nt | trd| jd}n}t | trgd| jd}d| jv r:| jd |d< |d dkr:d|d< d| jv rP| jd |d< |d dkrPd|d< d	| jv rf| jd	 |d	< |d dkrfd|d< n/t | trsd
| jd}n#t | trd| j| j	d}nt | t
rd| 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>   r@   r?   rB   rC   r@   rA   NrD   rE   rG   rH   )r>   r@   rI   rJ   )r>   r@   rK   zGot unknown type rI   )
isinstancer   r>   r@   r   r   rF   r   r   rI   r   rK   	TypeError)r3   Zmessage_dictr   r   r"   convert_message_to_dictr   sF   










rP   messagesSequence[Dict[str, Any]]List[BaseMessage]c                 C     d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                 S     g | ]}t |qS r   )rM   .0mr   r   r"   
<listcomp>       z+convert_openai_messages.<locals>.<listcomp>r   )rQ   r   r   r"   convert_openai_messages   s   	r[   chunkr   r    c                 C  s   i }t | tr>|dkrd|d< d| jv r#| jd |d< |dkr#d |d< d| jv r8| jd |d< |dkr7d |d< n| j|d< n	tdt|  |ddikrOi }|S )	Nr   rB   r>   rC   r@   rD   z%Got unexpected streaming chunk type: rA   )rN   r   rF   r@   
ValueErrortyper\   r    r<   r   r   r"   _convert_message_chunk   s$   


r`   Dict[str, Any]c                 C  s   t | |}dd|igiS )Nr8   r:   )r`   r_   r   r   r"   _convert_message_chunk_to_delta   s   
rb   c                   @     e Zd ZdZeeddddddZeeddd ddZedddd!ddZeeddddddZeeddd"ddZedddd#ddZdS )$ChatCompletionzChat completion.
ChatOpenAIFproviderstreamrQ   rR   rg   r&   rh   Literal[False]kwargsr   r   r2   c                K     d S r'   r   rQ   rg   rh   rj   r   r   r"   create      zChatCompletion.createrg   Literal[True]r   c                K  rk   r'   r   rl   r   r   r"   rm      rn   boolUnion[dict, Iterable]c          	      K  sb   t d}t||}|di |}t| }|s%||}ddt|igiS dd t||D S )Nlangchain.chat_modelsr8   r3   c                 s  s    | ]
\}}t ||V  qd S r'   rb   rW   r    cr   r   r"   	<genexpr>   s
    
z(ChatCompletion.create.<locals>.<genexpr>r   )	importlibimport_moduler(   r[   invokerP   	enumeraterh   	rQ   rg   rh   rj   modelsZ	model_clsZmodel_configZconverted_messagesresultr   r   r"   rm      s   


c                     d S r'   r   rl   r   r   r"   acreate      zChatCompletion.acreater   c                  r   r'   r   rl   r   r   r"   r   	  r   Union[dict, AsyncIterator]c          	        sj   t d}t||}|di |}t| }|s)||I d H }ddt|igiS dd t||2 S )Nrs   r8   r3   c                 S s(   | z3 d H W \}}t ||V  q6 d S r'   rt   ru   r   r   r"   rw   #  s
    z)ChatCompletion.acreate.<locals>.<genexpr>r   )rx   ry   r(   r[   ainvokerP   r#   astreamr|   r   r   r"   r     s   

N)
rQ   rR   rg   r&   rh   ri   rj   r   r   r2   
rQ   rR   rg   r&   rh   rp   rj   r   r   r   )
rQ   rR   rg   r&   rh   rq   rj   r   r   rr   
rQ   rR   rg   r&   rh   rp   rj   r   r   r   )
rQ   rR   rg   r&   rh   rq   rj   r   r   r   r+   r,   r-   r.   r   staticmethodrm   r   r   r   r   r"   rd      s8    rd   sessionr   rq   c                 C  s   t dd | d D S )z/Check if chat session has an assistant message.c                 S  s   g | ]}t |tqS r   )rN   r   rV   r   r   r"   rY   +  s    z*_has_assistant_message.<locals>.<listcomp>rQ   )any)r   r   r   r"   _has_assistant_message)  s   r   sessionsIterable[ChatSession]List[List[dict]]c                 C  rT   )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                 S  s&   g | ]}t |rd d |d D qS )c                 S  rU   r   )rP   )rW   sr   r   r"   rY   :  rZ   z>convert_messages_for_finetuning.<locals>.<listcomp>.<listcomp>rQ   )r   )rW   r   r   r   r"   rY   9  s    z3convert_messages_for_finetuning.<locals>.<listcomp>r   )r   r   r   r"   convert_messages_for_finetuning.  s   r   c                   @  rc   )$CompletionszCompletions.re   Frf   rQ   rR   rg   r&   rh   ri   rj   r   r   r7   c                K  rk   r'   r   rl   r   r   r"   rm   C  rn   zCompletions.createro   rp   r   c                K  rk   r'   r   rl   r   r   r"   rm   M  rn   rq    Union[ChatCompletions, Iterable]c          	      K  sf   t d}t||}|di |}t| }|s'||}ttt|dgdS dd t|	|D S )Nrs   r3   r8   c                 s  s,    | ]\}}t tt||d gdV  qdS )r:   r   Nr;   r9   r`   ru   r   r   r"   rw   i  s    
z%Completions.create.<locals>.<genexpr>r   )
rx   ry   r(   r[   rz   r7   r1   rP   r{   rh   r|   r   r   r"   rm   W  s   


c                  r   r'   r   rl   r   r   r"   r   p  r   zCompletions.acreater   c                  r   r'   r   rl   r   r   r"   r   z  r   %Union[ChatCompletions, AsyncIterator]c          	        sn   t d}t||}|di |}t| }|s+||I d H }ttt|dgdS dd t|	|2 S )Nrs   r   r   c                 S s6   | z3 d H W \}}t tt||dgdV  q6 d S )Nr   r   r   ru   r   r   r"   rw     s    z&Completions.acreate.<locals>.<genexpr>r   )
rx   ry   r(   r[   r   r7   r1   rP   r#   r   r|   r   r   r"   r     s   

N)
rQ   rR   rg   r&   rh   ri   rj   r   r   r7   r   )
rQ   rR   rg   r&   rh   rq   rj   r   r   r   r   )
rQ   rR   rg   r&   rh   rq   rj   r   r   r   r   r   r   r   r"   r   @  s8    r   c                   @  s   e Zd ZdZdddZdS )ChatzChat.r   Nonec                 C  s   t  | _d S r'   )r   Zcompletions)r)   r   r   r"   __init__  s   zChat.__init__N)r   r   )r+   r,   r-   r.   r   r   r   r   r"   r     r/   r   )r   )r   r   r   r   r   r   )r<   r=   r   r   )r3   r   r   r2   )rQ   rR   r   rS   )r\   r   r    r   r   r2   )r\   r   r    r   r   ra   )r   r   r   rq   )r   r   r   r   ).
__future__r   rx   typingr   r   r   r   r   r   r	   r
   r   Zlangchain_core.chat_sessionsr   Zlangchain_core.messagesr   r   r   r   r   r   r   r   r   Zpydanticr   Ztyping_extensionsr   r#   r$   r1   r7   r9   r;   rM   rP   r[   r`   rb   rd   r   r   r   r   Zchatr   r   r   r"   <module>   s2    ,,


)
4


V
^
