HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //usr/local/lib/python3.10/dist-packages/langsmith/wrappers/__pycache__/_openai.cpython-310.pyc
o

���g�0�@s�ddlmZddlZddlZddlmZddlmZddlm	Z	m
Z
mZmZm
Z
mZmZmZmZmZddlmZddlmZddlmZdd	lmZmZmZe	rhdd
lmZmZddl m!Z!m"Z"m#Z#ddl$m%Z%ed
edde
fd�Z&e�'e(�Z)ej*dJdd��Z+dKdd�Z,dLdd�Z-dMd d!�Z.dNd$d%�Z/dOd'd(�Z0dPd+d,�Z1dQd/d0�Z2			dRdSd:d;�Z3		dTdUd=d>�Z4Gd?d@�d@edAdB�Z5ddCddD�dVdHdI�Z6dS)W�)�annotationsN)�defaultdict)�Mapping)
�
TYPE_CHECKING�Any�Callable�DefaultDict�Dict�List�Optional�Type�TypeVar�Union)�	TypedDict)�client)�run_helpers)�InputTokenDetails�OutputTokenDetails�
UsageMetadata)�AsyncOpenAI�OpenAI)�ChatCompletionChunk�Choice�ChoiceDeltaToolCall)�
Completion�Crr)�bound�return�Optional[Type]cCs(z	ddlm}|WStyYdSw)Nr��NotGiven)�
openai._typesr �ImportErrorr�r#�E/usr/local/lib/python3.10/dist-packages/langsmith/wrappers/_openai.py�_get_not_given(s�r%�d�dictc
sfzt���dur|WS�fdd�|��D�WSty2}zt�d|���|WYd}~Sd}~ww)Ncs i|]\}}t|��s||�qSr#)�
isinstance��.0�k�v��	not_givenr#r$�
<dictcomp>7s z$_strip_not_given.<locals>.<dictcomp>zError stripping NotGiven: )r%�items�	Exception�logger�error)r&�er#r-r$�_strip_not_given2s��r5�
model_type�str�kwargscCsPt|�}|�d�}|rt|t�r|g}d||�dd�|�dd�|�dd�|d�S)N�stop�openai�model�temperature�
max_tokens)�ls_provider�
ls_model_type�
ls_model_name�ls_temperature�
ls_max_tokens�ls_stop)r5�getr(r7)r6r8�strippedr9r#r#r$�_infer_invocation_params=s



�rF�choices�List[Choice]c
Cs~tt|��}ddd�}|D]}t|d�r#t|jdd�r#|jj|d<nq
tt�}|D]v}t|d�r�t|jdd�r�t|jdd�rI|d|jj7<t|jdd�r�|�d�s\ddd�|d<t|jj	d	d�}|rp|dd	|7<t|jj	d
d�}|r�|dd
|7<t|jdd�r�|jj
}|dur�|D]
}||j�|�q�q*|�r&dd
�|�
�D�|d<|��D]r\}	}
|	tdd�|
D�d�tdd�|
D�d�d�|d|	<|
D]Q}t|dd��r$|d|	�d�s�ddd�|d|	d<t|jd	d�}|�r
|d|	d}|d	|7<t|jd
d�}|�r$|d|	d}|d
|7<q�q�|�r1t|ddd�ndtdd�|D�d�|d�S)N�	assistant���role�content�deltarLrM�
function_call)�name�	argumentsrPrQ�
tool_callscSsg|]}d�qS�Nr#)r*�_r#r#r$�
<listcomp>lsz#_reduce_choices.<locals>.<listcomp>cs��|]	}|jr|jVqdSrS)�id�r*�cr#r#r$�	<genexpr>p��z"_reduce_choices.<locals>.<genexpr>csrVrS)�typerXr#r#r$rZqr[)�indexrWr\�functionrr]css"�|]}t|dd�r|jVqdS)�
finish_reasonN)�getattrr_rXr#r#r$rZ�s�
�
�)r]r_�message)�list�reversed�hasattrr`rNrLrrMrDrOrRr]�append�keysr0�nextr^)
rG�reversed_choicesrarYrR�name_�
arguments_�tool_calls_list�	tool_callr]�tool_call_chunks�chunk�fn_r#r#r$�_reduce_choicesNsz��
��������rp�
all_chunks�List[ChatCompletionChunk]cCs�tt�}|D]}|jD]
}||j�|�qq|r+|d��}dd�|��D�|d<n
ddddd�igi}|�d	d�}|rAt|�nd|d
<|S)N���cSsg|]}t|��qSr#)rp)r*rGr#r#r$rU�s�z _reduce_chat.<locals>.<listcomp>rGrarIrJrK�usage�usage_metadata)	rrbrGr]re�
model_dump�values�pop�_create_usage_metadata)rq�choices_by_indexrn�choicer&�oai_token_usager#r#r$�_reduce_chat�s
���r}�List[Completion]cCsjg}|D]}|jdj}|dur|�|�qd�|�}|r,|d��}d|ig|d<|Sdd|igi}|S)NrrJrs�textrG)rGrre�joinrv)rq�all_contentrnrMr&r#r#r$�_reduce_completions�s
�
�r�r|rcCs�|�d�pd}|�d�p
d}|�d�p||}|�d�pi�d�|�d�p&i�d�d�}|�d	�p2i�d�|�d	�p;i�d
�d�}t|||tdidd
�|��D���tdidd
�|��D���d�S)N�
prompt_tokensr�completion_tokens�total_tokens�prompt_tokens_details�audio_tokens�
cached_tokens)�audio�
cache_read�completion_tokens_details�reasoning_tokens)r��	reasoningcS�i|]\}}|dur||�qSrSr#r)r#r#r$r/��z*_create_usage_metadata.<locals>.<dictcomp>cSr�rSr#r)r#r#r$r/�r�)�input_tokens�
output_tokensr��input_token_details�output_token_detailsr#)rDrrr0r)r|r�r�r�r�r�r#r#r$ry�s8���	������ry�outputsrc
Cslz|��}|�dd�}|rt|�nd|d<|WSty5}zt�d|���d|iWYd}~Sd}~ww)Nrtruz"Error processing chat completion: �output)rvrxry�
BaseExceptionr2�debug)r��rdictr|r4r#r#r$�_process_chat_completion�s���r��original_createrrP�	reduce_fn�
tracing_extra�Optional[TracingExtra]�invocation_params_fn�Optional[Callable]�process_outputsc	sj|pi�t���dd�d	������fdd��}t���dd�d	������fdd��}t���r3|S|S)
NF)�streamr��boolc	s<tjd�d|r	�ndt��d����}|��|d|i|��S�N�llm�rP�run_typer��process_inputs�_invocation_params_fnr�r�r#)r�	traceabler5�r��argsr8�	decorator�r�rPr�r�r��textrar#r$�create�s
��
z_get_wrapper.<locals>.createc	�sL�t|�}tjd�d|r�ndt��d����}|��|d|i|��IdHSr�)r5rr�r�r�r#r$�acreate�s�
��	z_get_wrapper.<locals>.acreate)r�r���	functools�wrapsr�is_async)r�rPr�r�r�r�r�r�r#r�r$�_get_wrapper�s 
 
r��original_parsecsR|pi�t�������fdd��}t�������fdd��}t���r'|S|S)Nc	s0tjd�ddt�td����}|��|i|��S�Nr�r�r#)rr�r5r��r�r8r��r�rPr�r�r#r$�parses��	z!_get_parse_wrapper.<locals>.parsec	�s@�t|�}tjd�ddt�td����}|��|i|��IdHSr�)r5rr�r�r�r�r#r$�aparse!s���	z"_get_parse_wrapper.<locals>.aparser�)r�rPr�r�r�r�r#r�r$�_get_parse_wrappers
r�c@s&eZdZUded<ded<ded<dS)�TracingExtrazOptional[Mapping[str, Any]]�metadatazOptional[List[str]]�tagszOptional[ls_client.Client]rN)�__name__�
__module__�__qualname__�__annotations__r#r#r#r$r�2s
r�F)�total�
ChatOpenAI)r��	chat_name�completions_namerr�r�c	Cs�t|jjj|t|t�td�td�|jj_t|jj|t	|t�td�d�|j_t
|d�rSt
|jd�rSt
|jjd�rSt
|jjjd�rSt|jjjj
||t�td�d�|jjj_
|S)a)Patch the OpenAI client to make it traceable.

    Args:
        client (Union[OpenAI, AsyncOpenAI]): The client to patch.
        tracing_extra (Optional[TracingExtra], optional): Extra tracing information.
            Defaults to None.
        chat_name (str, optional): The run name for the chat completions endpoint.
            Defaults to "ChatOpenAI".
        completions_name (str, optional): The run name for the completions endpoint.
            Defaults to "OpenAI".

    Returns:
        Union[OpenAI, AsyncOpenAI]: The patched client.

    �chat)r�r�r�r�)r�r��beta�completionsr�)r�r�r�r�r}r��partialrFr�r�rdr�r�r�)rr�r�r�r#r#r$�wrap_openai8s<
�

�
�
���

�r�)rr)r&r'rr')r6r7r8r')rGrHrr')rqrrrr')rqr~rr')r|r'rr)r�r)NNN)r�rrPr7r�rr�r�r�r�r�r�rr)NN)
r�rrPr7r�r�r�r�rr)
rrr�r�r�r7r�r7rr)7�
__future__rr��logging�collectionsr�collections.abcr�typingrrrrr	r
rrr
r�typing_extensionsr�	langsmithr�	ls_clientr�langsmith.schemasrrrr:rr�'openai.types.chat.chat_completion_chunkrrr�openai.types.completionrr�	getLoggerr�r2�	lru_cacher%r5rFrpr}r�ryr�r�r�r�r�r#r#r#r$�<module>sJ0


	


B


!�,�&	�