a
    bg2                     @  s  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	d
dd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"dddddZ#ddddd Z$d!d"d#d$d%Z%d&d	dd'd(d)Z&d&d	d*d'd+d,Z'G d-d. d.Z(d/d0d1d2d3Z)d4d5d6d7d8Z*G d9d: d:Z+G d;d< d<Z,e, Z-dS )>    )annotationsN)	AnyAsyncIteratorDictIterableListMappingSequenceUnionoverload)ChatSession)		AIMessageAIMessageChunkBaseMessageBaseMessageChunkChatMessageFunctionMessageHumanMessageSystemMessageToolMessage)	BaseModel)LiteralzAsyncIterator[Any]intzAsyncIterator[tuple[int, Any]])iterablestartreturnc                 C s.   |}| 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   q/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/adapters/openai.py
aenumerate    s    
r!   c                   @  s    e Zd ZdZdddddZdS )IndexableBaseModelzDAllows a BaseModel to return its fields by string variable indexing.strr   )itemr   c                 C  s
   t | |S N)getattr)selfr$   r   r   r    __getitem__-   s    zIndexableBaseModel.__getitem__N)__name__
__module____qualname____doc__r(   r   r   r   r    r"   *   s   r"   c                   @  s   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    r-   1   s   
r-   c                   @  s   e Zd ZU dZded< dS )ChatCompletionszChat completions.zList[Choice]choicesNr0   r   r   r   r    r2   7   s   
r2   c                   @  s   e Zd ZU dZded< dS )ChoiceChunkzChoice chunk.r.   deltaNr0   r   r   r   r    r4   =   s   
r4   c                   @  s   e Zd ZU dZded< dS )ChatCompletionChunkzChat completion chunk.zList[ChoiceChunk]r3   Nr0   r   r   r   r    r6   C   s   
r6   zMapping[str, Any]r   )_dictr   c                 C  s$  |  d}|dkr$t|  dddS |dkr|  ddp:d}i }|  d }rZt||d< |  d }rp||d< |  d	 }r||d	< t||d
S |dkrt|  dddS |dkrt|  dd|  ddS |dkri }d| v r| d |d< t|  dd|  d|dS t|  dd|dS 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:   rC   tooltool_call_id)r:   rE   r@   )r:   r8   N)getr   r.   r   r   r   r   r   )r7   r8   r:   r@   r=   r>   r?   r   r   r    convert_dict_to_messageI   s6    	


rG   r.   )r/   r   c                 C  sP  t | tr| j| jd}nt | tr4d| jd}nt | trd| jd}d| jv rv| jd |d< |d dkrvd|d< d| jv r| jd |d< |d dkrd|d< d	| jv r| jd	 |d	< |d dkrd|d< nbt | trd
| jd}nJt | trd| j| j	d}n,t | t
r$d| j| jd}ntd|  d| jv rL| jd |d< |S )zConvert a LangChain message to a dictionary.

    Args:
        message: The LangChain message.

    Returns:
        The dictionary.
    )r8   r:   r9   r<   r=   r:   r;   Nr>   r?   rA   rB   )r8   r:   rC   rD   )r8   r:   rE   zGot unknown type rC   )
isinstancer   r8   r:   r   r   r@   r   r   rC   r   rE   	TypeError)r/   Zmessage_dictr   r   r    convert_message_to_dictr   sD    








rJ   Sequence[Dict[str, Any]]zList[BaseMessage])messagesr   c                 C  s   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  s   g | ]}t |qS r   )rG   .0mr   r   r    
<listcomp>       z+convert_openai_messages.<locals>.<listcomp>r   )rL   r   r   r    convert_openai_messages   s    	rR   r   )chunkr   r   c                 C  s   i }t | tr||dkrd|d< d| jv rF| jd |d< |dkrFd |d< d| jv rp| jd |d< |dkrzd |d< q| j|d< ntdt|  |ddikri }|S )	Nr   r<   r8   r=   r:   r>   z%Got unexpected streaming chunk type: r;   )rH   r   r@   r:   
ValueErrortyperS   r   r7   r   r   r    _convert_message_chunk   s"    



rW   zDict[str, Any]c                 C  s   t | |}dd|igiS )Nr3   r5   )rW   rV   r   r   r    _convert_message_chunk_to_delta   s    
rX   c                	   @  s   e Zd ZdZeedddddddd	d
ddZeedddddddd
ddZeddddddddd
ddZeedddddddd	d
ddZeedddddddd
ddZeddddddddd
ddZdS )ChatCompletionzChat completion.
ChatOpenAIFproviderstreamrK   r#   Literal[False]r   r.   rL   r\   r]   kwargsr   c                K  s   d S r%   r   rL   r\   r]   r`   r   r   r    create   s    zChatCompletion.creater\   Literal[True]r   c                K  s   d S r%   r   ra   r   r   r    rb      s    boolzUnion[dict, Iterable]c          	      K  sf   t d}t||}|f i |}t| }|sJ||}ddt|igiS dd t||D S d S )Nlangchain.chat_modelsr3   r/   c                 s  s   | ]\}}t ||V  qd S r%   rX   rN   r   cr   r   r    	<genexpr>   s   z(ChatCompletion.create.<locals>.<genexpr>)	importlibimport_moduler&   rR   invokerJ   	enumerater]   	rL   r\   r]   r`   modelsZ	model_clsZmodel_configZconverted_messagesresultr   r   r    rb      s    


c                  s   d S r%   r   ra   r   r   r    acreate   s    zChatCompletion.acreater   c                  s   d S r%   r   ra   r   r   r    rr   	  s    zUnion[dict, AsyncIterator]c          	        sl   t d}t||}|f i |}t| }|sP||I d H }ddt|igiS dd t||2 S d S )Nrf   r3   r/   c                 S s&   | z3 d H W \}}t ||V  q6 d S r%   rg   rh   r   r   r    rj   #  s   z)ChatCompletion.acreate.<locals>.<genexpr>)rk   rl   r&   rR   ainvokerJ   r!   astreamro   r   r   r    rr     s    

Nr)   r*   r+   r,   r   staticmethodrb   rr   r   r   r   r    rY      s6   rY   r   re   )sessionr   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   )rH   r   rM   r   r   r    rP   +  rQ   z*_has_assistant_message.<locals>.<listcomp>rL   )any)rw   r   r   r    _has_assistant_message)  s    ry   zIterable[ChatSession]zList[List[dict]])sessionsr   c                 C  s   d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                 S  s&   g | ]}t |rd d |d D qS )c                 S  s   g | ]}t |qS r   )rJ   )rN   sr   r   r    rP   :  rQ   z>convert_messages_for_finetuning.<locals>.<listcomp>.<listcomp>rL   )ry   )rN   rw   r   r   r    rP   9  s   z3convert_messages_for_finetuning.<locals>.<listcomp>r   )rz   r   r   r    convert_messages_for_finetuning.  s    r|   c                	   @  s   e Zd ZdZeedddddddd	d
ddZeedddddddd
ddZeddddddddd
ddZeedddddddd	d
ddZeedddddddd
ddZeddddddddd
ddZdS )CompletionszCompletions.rZ   Fr[   rK   r#   r^   r   r2   r_   c                K  s   d S r%   r   ra   r   r   r    rb   C  s    zCompletions.createrc   rd   r   c                K  s   d S r%   r   ra   r   r   r    rb   M  s    re   z Union[ChatCompletions, Iterable]c          	      K  sj   t d}t||}|f i |}t| }|sN||}ttt|dgdS dd t|	|D S d S )Nrf   r/   r3   c                 s  s*   | ]"\}}t tt||d gdV  qdS )r5   r   Nr6   r4   rW   rh   r   r   r    rj   i  s   z%Completions.create.<locals>.<genexpr>)
rk   rl   r&   rR   rm   r2   r-   rJ   rn   r]   ro   r   r   r    rb   W  s    


c                  s   d S r%   r   ra   r   r   r    rr   p  s    zCompletions.acreater   c                  s   d S r%   r   ra   r   r   r    rr   z  s    z%Union[ChatCompletions, AsyncIterator]c          	        sp   t d}t||}|f i |}t| }|sT||I d H }ttt|dgdS dd t|	|2 S d S )Nrf   r~   r   c                 S s4   | z*3 d H W \}}t tt||dgdV  q6 d S )Nr   r   r   rh   r   r   r    rj     s   z&Completions.acreate.<locals>.<genexpr>)
rk   rl   r&   rR   rs   r2   r-   rJ   r!   rt   ro   r   r   r    rr     s    

Nru   r   r   r   r    r}   @  s6   r}   c                   @  s   e Zd ZdZddddZdS )ChatzChat.None)r   c                 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     s   r   )r   ).
__future__r   rk   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"   r-   r2   r4   r6   rG   rJ   rR   rW   rX   rY   ry   r|   r}   r   Zchatr   r   r   r    <module>   s0   ,, 
)4V^