
    	hjC                       d dl mZ d dlZd dlZd dlmZ d dlmZ d dl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! d dl"m#Z#  ededde
f                   Z$ ej%        e&          Z'ej(        dHd            Z)dIdZ*dJdZ+dKdZ,dLd"Z-dMd$Z.	 dNdOd)Z/dPd,Z0	 	 	 dQdRd6Z1	 	 dSdTd8Z2dUd;Z3 G d< d=ed>?          Z4dd@ddAdVdEZ5dWdGZ6dS )X    )annotationsN)defaultdict)Mapping)TYPE_CHECKINGAnyCallableOptionalTypeVarUnion)	TypedDict)client)run_helpers)InputTokenDetailsOutputTokenDetailsUsageMetadata)AsyncOpenAIOpenAI)ChatCompletionChunkChoiceChoiceDeltaToolCall)
Completion)ResponseStreamEvent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    g/var/www/html/web-builder-api.evdpl.com/venv/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                j    i | ]/\  }}t          |          s|                    d           r|,||0S )extra_)
isinstance
startswith).0kv	not_givens      r"   
<dictcomp>z$_strip_not_given.<locals>.<dictcomp>4   sX     
 
 
1q),,
 23h1G1G
 MNI qLUII    zError stripping NotGiven: )r#   items	Exceptionloggererror)r$   er.   s     @r"   _strip_not_givenr6   /   s    "$$	H
 
 
 
		
 
 
 	

    5!55666s   5 5 
A(A#A(#A(
model_typestrproviderkwargsc                V   t          |          }|                    d          }|rt          |t                    r|g}|| |                    d          |                    d          |                    d          p)|                    d          p|                    d          |dS )Nstopmodeltemperature
max_tokensmax_completion_tokensmax_output_tokens)ls_providerls_model_typels_model_namels_temperaturels_max_tokensls_stop)r6   getr)   r8   )r7   r9   r:   strippedr<   s        r"   _infer_invocation_paramsrJ   >   s    ''H<<D 
4%% v  #!g..",,}55!l33 -<</00-<<+,,	 	 	r0   choiceslist[Choice]c                   t          t          |                     }ddd}|D ]9}t          |d          r't          |j        dd           r|j        j        |d<    n:t          t                     }| D ]&}t          |d          rt          |j        dd           r|dxx         |j        j        z  cc<   t          |j        dd           r|                    d          sddd|d<   t          |j        j	        d	d           }|r|d         d	xx         |z  cc<   t          |j        j	        d
d           }|r|d         d
xx         |z  cc<   t          |j        dd           r3|j        j
        }|%|D ]"}||j                                     |           #(|r%d t          t          |                                          dz             D             |d<   |                                D ]\  }	}
|	t#          d |
D             d           t#          d |
D             d           dddd|d         |	<   |
D ]}t          |dd           rtt          |j        d	d           }|r"|d         |	         d         d	xx         |z  cc<   t          |j        d
d           }|r"|d         |	         d         d
xx         |z  cc<   | rt          | d         dd          ndt#          d |D             d           |dS )N	assistant rolecontentdeltarQ   rR   function_call)name	argumentsrU   rV   
tool_callsc                    g | ]}d S N )r+   _s     r"   
<listcomp>z#_reduce_choices.<locals>.<listcomp>o   s     Q Q Q! Q Q Qr0      c              3  2   K   | ]}|j         	|j         V  d S rY   )idr+   cs     r"   	<genexpr>z"_reduce_choices.<locals>.<genexpr>s   s+      CCQadCADCCCCCCr0   c              3  2   K   | ]}|j         	|j         V  d S rY   )typer`   s     r"   rb   z"_reduce_choices.<locals>.<genexpr>t   s+      II!&IafIIIIIIr0   )indexr_   rd   functionrf   r   re   c              3  F   K   | ]}t          |d d          |j        V  dS )finish_reasonN)getattrrh   r`   s     r"   rb   z"_reduce_choices.<locals>.<genexpr>   sJ        1ot44     r0   )re   rh   message)listreversedhasattrri   rS   rQ   r   rR   rH   rT   rW   re   appendrangemaxkeysr1   nextrf   )rK   reversed_choicesrj   ra   rW   name_
arguments_tool_calls_list	tool_callre   tool_call_chunkschunks               r"   _reduce_choicesrz   Q   s   HW--.. G   1g 	717FD#A#A 	glGFOE>I$>O>OJ F F1g 	Fqw	400 6	"""ago5"""qw66 H{{?33 M8:/L/LGO, 5vtDD >O,V444=444$QW%:KNN
 HO,[999ZG999qwd33 F"#'"4".%4 F F	"9?3::9EEEE  Q QuS9J9J5K5Ka5O/P/P Q Q Q'1'7'7'9'9 	 	#E#CC*:CCCTJJII.>III4PP%'b99	, ,GL!%( * 	 	5*d33 #ENFDAAE R-e4Z@HHHEQHHH!(d!K!KJ! -e4Z@MMM&MMM	 5<BWa000 )  
 
 
   r0   
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 rZ   )rz   )r+   rK   s     r"   r\   z _reduce_chat.<locals>.<listcomp>   s-     
 
 
)0OG$$
 
 
r0   rK   rj   rN   rO   rP   usageusage_metadata)	r   rk   rK   re   rn   
model_dumpvaluespop_create_usage_metadata)r{   choices_by_indexry   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///  Hr0   list[Completion]c                    g }| D ]+}|j         d         j        }||                    |           ,d                    |          }| r#| d                                         }d|ig|d<   ndd|igi}|S )Nr   rO   r~   textrK   )rK   r   rn   joinr   )r{   all_contentry   rR   r$   s        r"   _reduce_completionsr      s    K ( (-"'w'''ggk""G -rN%%'')*)&'*+,Hr0   r   service_tierOptional[str]r   c                X   |dv r|nd }|r| dnd}|                      d          p|                      d          pd}|                      d          p|                      d          pd}|                      d	          p||z   }d
|                      d          p|                      d          pi                      d          | d|                      d          p|                      d          pi                      d          i}d
|                      d          p|                      d          pi                      d          | d|                      d          p|                      d          pi                      d          i}|r@||                     | d          pdz
  ||<   ||                     | d          pdz
  ||<   t          |||t          di d |                                D             t	          di d |                                D                       S )N)priorityflexr[   rO   prompt_tokensinput_tokensr   completion_tokensoutput_tokenstotal_tokensaudioprompt_tokens_detailsinput_tokens_detailsaudio_tokens
cache_readcached_tokenscompletion_tokens_detailsoutput_tokens_details	reasoningreasoning_tokensc                    i | ]
\  }}|||S rY   rZ   r+   r,   r-   s      r"   r/   z*_create_usage_metadata.<locals>.<dictcomp>   s    MMM1q}q!}}}r0   c                    i | ]
\  }}|||S rY   rZ   r   s      r"   r/   z*_create_usage_metadata.<locals>.<dictcomp>   s    NNN1q!r0   )r   r   r   input_token_detailsoutput_token_detailsrZ   )rH   r   r   r1   r   )	r   r   recognized_service_tierservice_tier_prefixr   r   r   r   r   s	            r"   r   r      s    %(<<<$  *AH"%%%%b 
 	O,,X0C0CN0S0SXWX  	/00 	//	 
 #&&~66V,:VL 788 ""#9::
#n

*** 788 ""#9::
#o

! 	 ;<< ""#:;;
#n

))) ;<< ""#:;;
# 
!
!"  	
 8D##':$F$F$FGGL18
34 9F $$(;%F%F%FGGL19
45 !#!- 
 
MM 3 9 9 ; ;MMM
 
 0 
 
NN 4 : : < <NNN
 

 
 
 
r0   outputsr   c                    	 |                                  }|                    dd           }|r#t          ||                    d                    nd |d<   |S # t          $ r+}t
                              d|            d| icY d }~S d }~ww xY w)Nr   r   r   z"Error processing chat completion: output)r   r   r   rH   BaseExceptionr3   debug)r   rdictr   r5   s       r"   _process_chat_completionr      s    #""$$))GT22 "?EIIn4M4MNNN 	
  # # #=!==>>>'"""""""#s   AA 
B" BBBoriginal_creater   rU   	reduce_fntracing_extraOptional[TracingExtra]invocation_params_fnOptional[Callable]process_outputsc                     |pi t          j                    fd            }t          j                    fd            }t          j                   r|n|S )Nc            
         t          j        dd|                    d          du rnd t          d}  |          | i |S NllmstreamTrU   run_typer   process_inputs_invocation_params_fnr   rZ   )r   	traceablerH   r6   	argsr:   	decoratorr   rU   r   r   r   textras	      r"   createz_get_wrapper.<locals>.create  sv    ) 
#)::h#7#74#?#?iiT+"6+
 
 
 
	 *yy))4:6:::r0   c            
        K   t          |          }t          j        dd|                    d          du rnd t           d}  |          | i | d {V S r   )r6   r   r   rH   r   s	      r"   acreatez_get_wrapper.<locals>.acreate  s      !&))) 
#)::h#7#74#?#?iiT+"6+
 
 
 
	 0YY//@@@@@@@@@@r0   	functoolswrapsr   is_async)	r   rU   r   r   r   r   r   r   r   s	   ``` ``  @r"   _get_wrapperr     s      bF__%%; ; ; ; ; ; ; ; ; &%; __%%A A A A A A A A A &%A "*?;;G77Gr0   original_parsec                     |pi t          j                    fd            }t          j                    fd            }t          j                   r|n|S )Nc            
     `    t          j        ddd t          d}  |          | i |S Nr   r   rZ   )r   r   r6   r   r:   r   r   rU   r   r   r   s      r"   parsez!_get_parse_wrapper.<locals>.parse9  s\    ) 
+"6+
 
 
 
	 )yy(($9&999r0   c            
        K   t          |          }t          j        ddd t           d}  |          | i | d {V S r   )r6   r   r   r   s      r"   aparsez"_get_parse_wrapper.<locals>.aparseF  s      !&))) 
+"6+
 
 
 
	 /YY~..??????????r0   r   )r   rU   r   r   r   r   r   r   s   ``` `  @r"   _get_parse_wrapperr   0  s      bF_^$$
: 
: 
: 
: 
: 
: 
: 
: %$
: _^$$@ @ @ @ @ @ @ @ %$@ !).99D66uDr0   eventslist[ResponseStreamEvent]c                R    | D ]#}|j         dk    rt          |j                  c S $i S )Nzresponse.completed)rd   _process_responses_api_outputresponse)r   events     r"   _reduce_response_eventsr   W  sA     A A:---0@@@@@ .Ir0   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__rZ   r0   r"   r   r   ^  s6         ))))&&&&&&r0   r   F)total
ChatOpenAI)r   	chat_namecompletions_namer   r   r   c                  |pi }d}	 ddl m}m} t          | |          st          | |          rd}d}d}n# t          $ r Y nw xY wt          | j        j        j        |t          |t          j        t          d|          t                    | j        j        _        t          | j        j        |t          |t          j        t          d	|          
          | j        _        t          | d          rt          | j        d          rt          | j        j        d          ryt          | j        j        j        d          rZt#          | j        j        j        j        |t          |t          j        t          d|          
          | j        j        j        _        t          | d          rt          | j        d          rLt          | j        j        |t(          t*          |t          j        t          d|                    | j        _        t          | j        d          rFt#          | j        j        |t*          |t          j        t          d|          
          | j        _        | S )a  Patch the OpenAI client to make it traceable.

    Supports:
        - Chat and Responses API's
        - Sync and async OpenAI clients
        - create() and parse() methods
        - with and without streaming

    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.

    Example:

        .. code-block:: python

            import openai
            from langsmith import wrappers

            # Use OpenAI client same as you normally would.
            client = wrappers.wrap_openai(openai.OpenAI())

            # Chat API:
            messages = [
                {"role": "system", "content": "You are a helpful assistant."},
                {
                    "role": "user",
                    "content": "What physics breakthroughs do you predict will happen by 2300?",
                },
            ]
            completion = client.chat.completions.create(
                model="gpt-4o-mini", messages=messages
            )
            print(completion.choices[0].message.content)

            # Responses API:
            response = client.responses.create(
                model="gpt-4o-mini",
                messages=messages,
            )
            print(response.output_text)

    .. versionchanged:: 0.3.16

        Support for Responses API added.
    openair   )AsyncAzureOpenAIAzureOpenAIazureAzureChatOpenAIr   chat)r   r   r   r   )r   r   betacompletionsr   	responsesr   )r   r   r   )r   r   r   r)   r!   r   r   r   r   r   r   partialrJ   r   r   rm   r   r   r   r   r   r   )r   r   r   r   rB   r   r   s          r"   wrap_openair   d  s   z "'RMK88888888fk** 	-jAQ.R.R 	-!K)I,    &2&#&.$fk
 
 1	& 	& 	&FK" !-!#&.$e[
 
! ! !F 	
FK((
 FK$m44
 FK$0'::	
 .@K(.$'!*!2(&+" ".
 .
 .
$* v{## 6#X.. 
	&2 '' =+%.%6,fk& &	' 	' 	'F# 6#W-- 		%7 &-+%.%6,fk& && & &F" Ms   .7 
AAr   c                    | rl	 |                      dd          }|                    dd           x}r&t          ||                    d                    |d<   |S # t          $ r d| icY S w xY wi S )NTjson)exclude_nonemoder   r   r   r   )r   r   r   rH   r2   )r   r   r   s      r"   r   r     s     	(	(((d(HHF

7D111u +A6::n55, ,'( M 	( 	( 	(h''''	(Is   AA A,+A,)r   r   )r$   r%   r   r%   )r7   r8   r9   r8   r:   r%   )rK   rL   r   r%   )r{   r|   r   r%   )r{   r   r   r%   rY   )r   r%   r   r   r   r   )r   r   )NNN)r   r   rU   r8   r   r   r   r   r   r   r   r   r   r   )NN)r   r   rU   r8   r   r   r   r   r   r   r   r   )r   r   r   r%   )
r   r   r   r   r   r8   r   r8   r   r   )r   r   r   r%   )7
__future__r   r   loggingcollectionsr   collections.abcr   typingr   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   openai.types.responsesr   r   	getLoggerr   r3   	lru_cacher#   r6   rJ   rz   r   r   r   r   r   r   r   r   r   r   rZ   r0   r"   <module>r	     sG   " " " " " "      # # # # # # # # # # # #                ( ' ' ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! R R R R R R R R R R ;********         
 322222:::::: GCuX}c9:;;;		8	$	$          &; ; ; ;|   *   " :>A A A A AH# # # #& -1/3*.&H &H &H &H &HZ -1/3$E $E $E $E $EN   ' ' ' ' '9E ' ' ' ' -1!$I I I I I IX     r0   