
    b
iT                       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(        dLd            Z)dMdZ*dMdZ+dNd Z,dOd#Z-dPd&Z.dQd(Z/	 dRdSd-Z0dTd0Z1	 	 	 dUdVd:Z2	 	 dWdXd<Z3dYd?Z4 G d@ dAedBC          Z5ddDddEdZdIZ6d[dKZ7dS )\    )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tuple[type, ...]c                     g } 	 ddl m}m} |                     |           |                     |           n# t          $ r Y nw xY wt          |           S )z4Get NotGiven/Omit sentinel types used by OpenAI SDK.r   )NotGivenOmit)openai._typesr   r   appendImportErrortuple)typesr   r   s      C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\langsmith/wrappers/_openai.py_get_omit_typesr&   %   s{      E00000000XT    <<s   27 
AAddictc                    	 t                      s| 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
omit_typess      r%   
<dictcomp>z$_strip_not_given.<locals>.<dictcomp>9   sX     
 
 
1q*--
 34,,x2H2H
 NOY qMVYY    zError stripping NotGiven: )r&   items	Exceptionloggererror)r'   er1   s     @r%   _strip_not_givenr9   4   s    $&&
 	H
 
 
 
		
 
 
 	

    5!55666s   5 5 
A(A#A(#A(c                    t          |           } d| v rC| d         }t          |d          r+	 i | d|                                iS # t          $ r Y nw xY w| S )zCStrip `NotGiven` values and serialize `text_format` to JSON schema.text_formatmodel_json_schema)r9   hasattrr<   r5   )r'   r;   s     r%   _process_inputsr>   C   s    A &; 344 	!;#@#@#B#B      Hs   A 
AA
model_typestrproviderprepopulated_invocation_paramsuse_responses_apiboolkwargsc                   t          |          }|                    d          }|rt          |t                    r|g}h dfd|                                D             }|rd|d<   || |                    d          |                    d          |                    d          p)|                    d	          p|                    d
          |i ||dS )Nstop>   nseedusertop_plogprobs	reasoning	verbosity
logit_bias
modalities
prediction
truncationservice_tiertop_logprobsstream_optionsresponse_formatpresence_penaltyprompt_cache_keyreasoning_effortfrequency_penaltyweb_search_optionsparallel_tool_callsc                $    i | ]\  }}|v 	||S  r^   )r.   r/   r0   allowed_invocation_keyss      r%   r2   z,_infer_invocation_params.<locals>.<dictcomp>}   s1       AQ2I-I-I1-I-I-Ir3   TrC   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ls_invocation_params)r9   getr,   r@   r4   )	r?   rA   rB   rC   rE   strippedrG   invocation_paramsr_   s	           @r%   _infer_invocation_paramsro   U   s$     ''H<<D 
4%% v  2   !))    615-.  #!g..",,}55!l33 -<</00-<<+,,!
,!
!
  r3   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deltarv   rw   function_call)name	argumentsrz   r{   
tool_callsc                    g | ]}d S Nr^   )r.   _s     r%   
<listcomp>z#_reduce_choices.<locals>.<listcomp>   s     Q Q Q! Q Q Qr3      c              3  2   K   | ]}|j         	|j         V  d S r~   )idr.   cs     r%   	<genexpr>z"_reduce_choices.<locals>.<genexpr>   s+      CCQadCADCCCCCCr3   c              3  2   K   | ]}|j         	|j         V  d S r~   )typer   s     r%   r   z"_reduce_choices.<locals>.<genexpr>   s+      II!&IafIIIIIIr3   )indexr   r   functionr   r   r   c              3  F   K   | ]}t          |d d          |j        V  dS )finish_reasonN)getattrr   r   s     r%   r   z"_reduce_choices.<locals>.<genexpr>   sJ        1ot44     r3   )r   r   message)listreversedr=   r   rx   rv   r   rw   rl   ry   r|   r   r!   rangemaxkeysr4   nextr   )rp   reversed_choicesr   r   r|   name_
arguments_tool_calls_list	tool_callr   tool_call_chunkschunks               r%   _reduce_choicesr      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 )  
 
 
   r3   
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^   )r   )r.   rp   s     r%   r   z _reduce_chat.<locals>.<listcomp>   s-     
 
 
)0OG$$
 
 
r3   rp   r   rs   rt   ru   usageusage_metadata)	r   r   rp   r   r!   
model_dumpvaluespop_create_usage_metadata)r   choices_by_indexr   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///  Hr3   list[Completion]c                    g }| D ]+}|j         d         j        }||                    |           ,d                    |          }| r#| d                                         }d|ig|d<   ndd|igi}|S )Nr   rt   r   textrp   )rp   r   r!   joinr   )r   all_contentr   rw   r'   s        r%   _reduce_completionsr      s    K ( (-"'w'''ggk""G -rN%%'')*)&'*+,Hr3   r   rS   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   rt   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_detailsrM   reasoning_tokensc                    i | ]
\  }}|||S r~   r^   r.   r/   r0   s      r%   r2   z*_create_usage_metadata.<locals>.<dictcomp>3  s    MMM1q}q!}}}r3   c                    i | ]
\  }}|||S r~   r^   r   s      r%   r2   z*_create_usage_metadata.<locals>.<dictcomp>6  s    NNN1q!r3   )r   r   r   input_token_detailsoutput_token_detailsr^   )rl   r   r   r4   r   )	r   rS   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
 

 
 
 
r3   outputsr   c                   	 t          | d          r:t          | j                  r&	 |                                 } n# t          $ r Y nw xY w|                                 }|                    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)Nparser   rS   r   z"Error processing chat completion: output)r=   callabler   r5   r   r   r   rl   BaseExceptionr6   debug)r   rdictr   r8   s       r%   _process_chat_completionr   ;  s   #
 7G$$ 	'-)@)@ 	!--//    ""$$))GT22 "?EIIn4M4MNNN 	
  # # #=!==>>>'"""""""#s>   $B" < B" 
A	B" A		AB" "
C, CCCoriginal_creater   rz   	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rz   run_typer   process_inputs_invocation_params_fnr   r^   r   	traceablerl   r>   	argsrE   	decoratorr   rz   r   r   r   textras	      r%   createz_get_wrapper.<locals>.create^  sv    ) 
#)::h#7#74#?#?iiT*"6+
 
 
 
	 *yy))4:6:::r3   c            
        K   t          j        dd|                    d          du rnd t          d}  |          | i | d {V S r   r   r   s	      r%   acreatez_get_wrapper.<locals>.acreatel  s      ) 
#)::h#7#74#?#?iiT*"6+
 
 
 
	 0YY//@@@@@@@@@@r3   	functoolswrapsr   is_async)	r   rz   r   r   r   r   r   r   r   s	   ``` ``  @r%   _get_wrapperr   T  s      bF__%%; ; ; ; ; ; ; ; ; &%; __%%
A 
A 
A 
A 
A 
A 
A 
A 
A &%
A "*?;;G77Gr3   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   r^   r   r   r>   r   rE   r   r   rz   r   r   r   s      r%   r   z!_get_parse_wrapper.<locals>.parse  s\    ) 
*"6+
 
 
 
	 )yy(($9&999r3   c            
     p   K   t          j        ddd t          d}  |          | i | d {V S r   r   r   s      r%   aparsez"_get_parse_wrapper.<locals>.aparse  sr      ) 
*"6+
 
 
 
	 /YY~..??????????r3   r   )r   rz   r   r   r   r   r   r   s   ``` `  @r%   _get_parse_wrapperr   |  s      bF_^$$
: 
: 
: 
: 
: 
: 
: 
: %$
: _^$$
@ 
@ 
@ 
@ 
@ 
@ 
@ 
@ %$
@ !).99D66uDr3   eventslist[ResponseStreamEvent]c                R    | D ]#}|j         dk    rt          |j                  c S $i S )Nzresponse.completed)r   _process_responses_api_outputresponse)r   events     r%   _reduce_response_eventsr    sA     A A:---0@@@@@ .Ir3   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^   r3   r%   r  r    s6         ))))&&&&&&r3   r  F)total
ChatOpenAI)r   	chat_namecompletions_namer   r  r  c                  |pi }t          |                    d          pi           }|                    di           }d |                                D             }|r||d<   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
||d          t"                    | j
        j        _        t          | j        j        |t$          |t          j        t           d||d                    | j        _        t'          | d          rt'          | j        d
          rt'          | j        j
        d          r{t'          | j        j
        j        d          r\t+          | j        j
        j        j        |t"          |t          j        t           d
||d                    | j        j
        j        _        t'          | d
          rt'          | j
        d          rlt'          | j
        j        d          rRt+          | j
        j        j        |t"          |t          j        t           d
||d                    | j
        j        _        t'          | d          rt'          | j        d          rNt          | j        j        |t0          t2          |t          j        t           d
||d                    | j        _        t'          | j        d          rHt+          | j        j        |t2          |t          j        t           d
||d                    | j        _        | S )ay  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
        - `with_raw_response` API for accessing HTTP headers

    Args:
        client: The client to patch.
        tracing_extra: Extra tracing information.
        chat_name: The run name for the chat completions endpoint.
        completions_name: The run name for the completions endpoint.

    Returns:
        The patched client.

    Example:
        ```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)

        # With raw response to access headers:
        raw_response = client.chat.completions.with_raw_response.create(
            model="gpt-4o-mini", messages=messages
        )
        print(raw_response.headers)  # Access HTTP headers
        completion = raw_response.parse()  # Get parsed response
        ```

    !!! warning "Behavior changed in `langsmith` 0.3.16"

        Support for Responses API added.

    !!! warning "Behavior changed in `langsmith` 0.3.x"

        Support for `with_raw_response` API added.
    r  rk   c                &    i | ]\  }}|d k    ||S )r  r^   r   s      r%   r2   zwrap_openai.<locals>.<dictcomp>  s*     ( ( (A!z//1///r3   openair   )AsyncAzureOpenAIAzureOpenAIazureAzureChatOpenAIr  chatF)r   r   r   r   )r   r   betacompletionsr   	responsesr   T)r   r   r   )r(   rl   r   r4   r  r  r  r,   r"   r   r  r  r   r   r   partialro   r   r   r=   r  r   r   r  r  r   )
r   r   r  r  r  rB   tracing_extra_restre   r  r  s
             r%   wrap_openair    s   J "'RM M%%j117R88H%-\\2H"%M%M"( (&,,..( ( (  2)1:&K88888888fk** 	-jAQ.R.R 	-!K)I,    &2&(&.$*
 
 1& & &FK" !-!(&.$*
 
! ! !F  	
FK((
 FK$m44
 FK$0'::	
 .@K(.$,!*!2(." ".
 .
 .
$*  	
FK//
 FK+W55

 );K#)$,!*!2(." ")
 )
 )
% v{## 6#X.. 	&2 '' =0%.%6,2& &' ' 'F# 6#W-- 	%7 &-0%.%6,2& && & &F" Ms   '.B 
B#"B#r   c                v   | r	 t          | d          r:t          | j                  r&	 |                                 } n# t          $ r Y nw xY w|                     dd          }|                    dd           x}r&t          ||                    d                    |d<   |S # t          $ r d| icY S w xY wi S )	Nr   Tjson)exclude_nonemoder   rS   r   r   )r=   r   r   r5   r   r   r   rl   )r   r   r   s      r%   r   r   v  s     (	(x)) hx~.F.F '~~//HH    D ((d(HHF

7D111u +A6::n55, ,'( M 	( 	( 	(h''''	(Is2   $B% > B% 
AB% 
AAB% %B65B6)r   r   )r'   r(   r   r(   )
r?   r@   rA   r@   rB   r(   rC   rD   rE   r(   )rp   rq   r   r(   )r   r   r   r(   )r   r   r   r(   r~   )r   r(   rS   r   r   r   )r   r   )NNN)r   r   rz   r@   r   r   r   r   r   r   r   r   r   r   )NN)r   r   rz   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   r   r(   )8
__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  r6   	lru_cacher&   r9   r>   ro   r   r   r   r   r   r   r   r  r  r  r   r^   r3   r%   <module>r.     s\   " " " " " "      # # # # # # # # # # # #                ( ' ' ' ' ' ) ) ) ) ) ) ! ! ! ! ! ! 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X -1/3#E #E #E #E #EL   ' ' ' ' '9E ' ' ' ' -1!$D D D D D DN     r3   