
    Ng='                       d dl mZ d dlZd dl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mZmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZ erd d	lmZmZ d d
lm Z m!Z!m"Z" d dl#m$Z$  ededdef                   Z% ej&        e'          Z(ej)        d<d            Z*d=dZ+d>dZ,d?dZ-d@dZ.dAd!Z/dBd$Z0dCd'Z1	 	 	 dDdEd1Z2 G d2 d3ed45          Z3dd6dd7dFd;Z4dS )G    )annotationsN)defaultdict)TYPE_CHECKINGAnyCallableDefaultDictDictListMappingOptionalTypeTypeVarUnion)	TypedDict)client)run_helpers)InputTokenDetailsOutputTokenDetailsUsageMetadata)AsyncOpenAIOpenAI)ChatCompletionChunkChoiceChoiceDeltaToolCall)
CompletionCr   r   )boundreturnOptional[Type]c                 6    	 ddl m}  | S # t          $ r Y d S w xY w)Nr   NotGiven)openai._typesr"   ImportErrorr!   s    V/var/www/html/ai-engine/env/lib/python3.11/site-packages/langsmith/wrappers/_openai.py_get_not_givenr&   (   s@    ******   tts   
 
ddictc                    	 t                      | S fd|                                 D             S # t          $ r)}t                              d|            | cY d }~S d }~ww xY w)Nc                <    i | ]\  }}t          |          ||S  )
isinstance).0kv	not_givens      r%   
<dictcomp>z$_strip_not_given.<locals>.<dictcomp>7   s.    KKKA*Q	2J2JK1KKK    zError stripping NotGiven: )r&   items	Exceptionloggererror)r'   er0   s     @r%   _strip_not_givenr8   2   s    "$$	HKKKKKKKK   5!55666s   5 5 
A(A#A(#A(
model_typestrkwargsc                   t          |          }|                    d          }|rt          |t                    r|g}d| |                    dd           |                    dd           |                    dd           |dS )Nstopopenaimodeltemperature
max_tokens)ls_providerls_model_typels_model_namels_temperaturels_max_tokensls_stop)r8   getr,   r:   )r9   r;   strippedr=   s       r%   _infer_invocation_paramsrJ   =   s    ''H<<D 
4%% v  #!gt44",,}d;;!lD99  r2   choicesList[Choice]c                \   t          t          |                     }ddd}|D ]}|j        j        r|j        j        |d<    n t	          t                     }| D ]}|j        j        r|dxx         |j        j        z  cc<   |j        j        r|                    d          sddd|d<   |j        j        j        r%|d         dxx         |j        j        j        z  cc<   |j        j        j	        r%|d         d	xx         |j        j        j	        z  cc<   |j        j
        r/|j        j
        D ]"}||j                                     |           #|r/d
 |                                D             |d<   |                                D ]\  }}|t          d |D             d           t          d |D             d           d|d         |<   |D ]}|j        r|d         |                             d          sddd|d         |         d<   |j        j        r.|d         |         d         }	|	dxx         |j        j        z  cc<   |j        j	        r.|d         |         d         }	|	d	xx         |j        j	        z  cc<   | d         j        t          d |D             d           |dS )N	assistant rolecontentrQ   rR   function_call)name	argumentsrT   rU   c                    g | ]}d S Nr+   )r-   _s     r%   
<listcomp>z#_reduce_choices.<locals>.<listcomp>g   s     A A A! A A Ar2   
tool_callsc              3  2   K   | ]}|j         	|j         V  d S rW   )idr-   cs     r%   	<genexpr>z"_reduce_choices.<locals>.<genexpr>k   s+      CCQadCADCCCCCCr2   c              3  2   K   | ]}|j         	|j         V  d S rW   )typer]   s     r%   r_   z"_reduce_choices.<locals>.<genexpr>l   s+      II!&IafIIIIIIr2   )indexr\   ra   functionr   c              3  2   K   | ]}|j         	|j         V  d S rW   )finish_reasonr]   s     r%   r_   z"_reduce_choices.<locals>.<genexpr>~   s+      JJ!/JQ_JJJJJJr2   )rb   re   message)listreverseddeltarQ   r   rR   rS   rH   rT   rU   rZ   rb   appendkeysr3   nextrc   )
rK   reversed_choicesrf   r^   rZ   	tool_callrb   tool_call_chunkschunkfn_s
             r%   _reduce_choicesrr   N   s^   HW--.. G   7< 	glGFOE	 ?J$>O>OJ 6 67? 	2I!'/17  	Y;;// I46R+H+H(w$) O(000AG4I4NN000w$. Y(5559N9XX5557 	6W/ 6 6	17#**95555 E A Az/@/@ A A A'1'7'7'9'9 	E 	E#E#CC*:CCCTJJII.>III4PP, ,GL!%(
 * E E> E"<07;;JGG $&)+D D-e4Z@ ~* ;%l3E::FFu~'::~/ E%l3E::FK(((EN,DD(((E !JJ&6JJJ
 
   r2   
all_chunksList[ChatCompletionChunk]c                t   t          t                    }| D ],}|j        D ]"}||j                                     |           #-| r<| d                                         }d |                                D             |d<   n
dddddigi}|                    dd           }|rt          |          nd |d	<   |S )
Nc                ,    g | ]}t          |          S r+   )rr   )r-   rK   s     r%   rY   z _reduce_chat.<locals>.<listcomp>   s-     
 
 
)0OG$$
 
 
r2   rK   rf   rN   rO   rP   usageusage_metadata)	r   rg   rK   rb   rj   
model_dumpvaluespop_create_usage_metadata)rs   choices_by_indexrp   choicer'   oai_token_usages         r%   _reduce_chatr      s    7B47H7H : :m 	: 	:FV\*11&9999	: MrN%%''
 
4D4K4K4M4M
 
 
) )kb%I%IJKL eeGT**O3BL///  Hr2   List[Completion]c                    g }| D ]+}|j         d         j        }||                    |           ,d                    |          }| r#| d                                         }d|ig|d<   ndd|igi}|S )Nr   rO   rv   textrK   )rK   r   rj   joinrz   )rs   all_contentrp   rR   r'   s        r%   _reduce_completionsr      s    K ( (-"'w'''ggk""G -rN%%'')*)&'*+,Hr2   r   r   c                   |                      d          pd}|                      d          pd}|                      d          p||z   }|                      d          pi                      d          |                      d          pi                      d          d}|                      d	          pi                      d          |                      d	          pi                      d
          d}t          |||t          di d |                                D             t	          di 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   	reasoningc                    i | ]
\  }}|||S rW   r+   r-   r.   r/   s      r%   r1   z*_create_usage_metadata.<locals>.<dictcomp>   s    MMM1q}q!}}}r2   c                    i | ]
\  }}|||S rW   r+   r   s      r%   r1   z*_create_usage_metadata.<locals>.<dictcomp>   s    NNN1q!r2   )input_tokensoutput_tokensr   input_token_detailsoutput_token_detailsr+   )rH   r   r   r3   r   )r   r   r   r   r   r   s         r%   r}   r}      s   "&&77<1L#''(;<<AM"&&~66V,:VL!%%&=>>D"II
 
 '**+BCCIrNN
 
	! ! "%%&ABBHbMM
 
 &))*EFFL"QQ
 
	" " !#!- 
 
MM 3 9 9 ; ;MMM
 
 0 
 
NN 4 : : < <NNN
 

 
 
 
r2   outputsr   c                    	 |                                  }|                    dd           }|rt          |          nd |d<   |S # t          $ r+}t                              d|            d| icY d }~S d }~ww xY w)Nrx   ry   z"Error processing chat completion: output)rz   r|   r}   BaseExceptionr5   debug)r   rdictr   r7   s       r%   _process_chat_completionr      s    	#""$$))GT227FP"?333D 	  # # #=!==>>>'"""""""#s   AA 
A9 A4.A94A9original_creater   rT   	reduce_fntracing_extraOptional[TracingExtra]invocation_params_fnOptional[Callable]process_outputsc           	          |pi t          j                   ddd fd            }t          j                   ddd fd            }t          j                   r|n|S )NF)streamr   boolc           
     l    t          j        dd| rnd t          d	}  |          |d| i|S Nllm)rT   run_typer   process_inputs_invocation_params_fnr   r   r+   )r   	traceabler8   
r   argsr;   	decoratorr   rT   r   r   r   textras
       r%   createz_get_wrapper.<locals>.create   sj    ) 
#)3iit+"6+
 
 
 
	 *yy))4II&IIIr2   c           
        K   t          |          }t          j        dd| rnd t           d	}  |          |d| i| d {V S r   )r8   r   r   r   s
       r%   acreatez_get_wrapper.<locals>.acreate   s      !&))) 
#)3iit+"6+
 
 
 
	 0YY//OfOOOOOOOOOOr2   )r   r   )	functoolswrapsr   is_async)	r   rT   r   r   r   r   r   r   r   s	   ``` ``  @r%   _get_wrapperr      s      bF__%%%* J J J J J J J J J J J J &%J __%%,1 P P P P P P P P P P P P &%P "*?;;G77Gr2   c                  .    e Zd ZU ded<   ded<   ded<   dS )TracingExtrazOptional[Mapping[str, Any]]metadatazOptional[List[str]]tagszOptional[ls_client.Client]r   N)__name__
__module____qualname____annotations__r+   r2   r%   r   r     s6         ))))&&&&&&r2   r   F)total
ChatOpenAI)r   	chat_namecompletions_namer   r   r   c          
     :   t          | j        j        j        |t          |t          j        t          d          t                    | j        j        _        t          | j        j        |t          |t          j        t          d                    | j        _        | 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   )
r   r   completionsr   r   r   partialrJ   r   r   )r   r   r   r   s       r%   wrap_openair     s    , &2&#&./GPP0& & &FK" !-!#&./GOO! ! !F Mr2   )r   r   )r'   r(   r   r(   )r9   r:   r;   r(   )rK   rL   r   r(   )rs   rt   r   r(   )rs   r   r   r(   )r   r(   r   r   )r   r   )NNN)r   r   rT   r:   r   r   r   r   r   r   r   r   r   r   )
r   r   r   r   r   r:   r   r:   r   r   )5
__future__r   r   loggingcollectionsr   typingr   r   r   r   r	   r
   r   r   r   r   r   typing_extensionsr   	langsmithr   	ls_clientr   langsmith.schemasr   r   r   r>   r   r   'openai.types.chat.chat_completion_chunkr   r   r   openai.types.completionr   r   	getLoggerr   r5   	lru_cacher&   r8   rJ   rr   r   r   r}   r   r   r   r   r+   r2   r%   <module>r      s   " " " " " "      # # # # # #                          ( ' ' ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! R R R R R R R R R R 3********         
 322222 GCuX}c9:;;;		8	$	$          "4 4 4 4n   *       B
# 
# 
# 
#" -1/3*.&H &H &H &H &HR' ' ' ' '9E ' ' ' ' -1!$% % % % % % % %r2   