
    b
ioK                       d dl mZ d dlZd dlZd dlmZmZmZ d dlm	Z	m
Z
mZmZmZmZ d dl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 e	rd dlZd d
lmZmZ d dl m!Z!m"Z" d dl#m$Z$m%Z%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.ej+        d@d            Z/dAdZ0dBd!Z1dCd$Z2dDd&Z3dEd(Z4dFd0Z5dGd2Z6 G d3 d/ed45          Z7dd6dd7dHd<Z8dS )I    )annotationsN)AsyncIteratorMappingSequence)TYPE_CHECKINGAnyCallableOptionalTypeVarUnion)Self	TypedDict)client)run_helpers)dumps)InputTokenDetailsUsageMetadata)	AnthropicAsyncAnthropic)AsyncMessageStreamMessageStream)
CompletionMessageMessageStreamEventCr   r   )boundreturnOptional[tuple[type, ...]]c                 >    	 ddl m} m} | |fS # t          $ r Y d S w xY w)Nr   NotGivenOmit)anthropic._typesr!   r"   ImportErrorr    s     C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\langsmith/wrappers/_anthropic.py_get_not_givenr&       sL    33333333$   tts    
ddictc                   	 t                      xr fd|                                 D             } n4# t          $ r'}t                              d|            Y d }~nd }~ww xY wd| v r;d| d         dg|                     dg           z   | d<   |                     d           d |                                 D             S )Nc                T    i | ]#\  }t          fd D                        |$S )c              3  8   K   | ]}t          |          V  d S N)
isinstance).0tvs     r%   	<genexpr>z._strip_not_given.<locals>.<dictcomp>.<genexpr>0   s-      ??:a++??????    )any)r.   kr0   	not_givens     @r%   
<dictcomp>z$_strip_not_given.<locals>.<dictcomp>-   sS       Aq????Y?????1  r2   zError stripping NotGiven: system)rolecontentmessagesc                    i | ]
\  }}|||S r,    r.   r4   r0   s      r%   r6   z$_strip_not_given.<locals>.<dictcomp>:   s    888TQ!-Aq---r2   )r&   items	Exceptionloggererrorgetpop)r'   er5   s     @r%   _strip_not_givenrE   *   s   7&(((9 	   GGII  A
  7 7 75!55666666667 1}}"*q{CCDquuH
 H
 
* 	
h88QWWYY8888s   04 
A%A  A%prepopulated_invocation_paramskwargsc                \   t          |          }|                    d          }|rt          |t                    r|g}h dfd|                                D             }dd|                    dd           |                    dd           |                    dd           |i | |d	S )
Nstop>   top_ktop_pstreamthinkingmcp_serverstool_choiceservice_tierc                $    i | ]\  }}|v 	||S r<   r<   )r.   r4   r0   allowed_invocation_keyss      r%   r6   z$_infer_ls_params.<locals>.<dictcomp>Q   s1       AQ2I-I-I1-I-I-Ir2   	anthropicchatmodeltemperature
max_tokens)ls_providerls_model_typels_model_namels_temperaturels_max_tokensls_stopls_invocation_params)rE   rB   r-   strr>   )rF   rG   strippedrI   invocation_paramsrR   s        @r%   _infer_ls_paramsrb   =   s    ''H<<D 
4%% v     !))  
 #!gt44",,}d;;!lD99!
,!
!
  r2   Optional[Callable]c                 6    	 ddl m}  | S # t          $ r Y d S w xY w)Nr   accumulate_event)!anthropic.lib.streaming._messagesrf   r$   re   s    r%   _get_sdk_accumulate_eventrh   c   sA    FFFFFF   tts   
 
anthropic_token_usager   c                &   |                      d          pd}|                      d          pd}i }|                      d          pd}|r||d<   |                      d          pi }|r=|                     d          pd}|                     d          pd}|r||d<   |r||d<   n|                      d	          pd}|r||d<   t          |                                          }	||	z   }
|
|z   }t          |
||
          }|rt	          di ||d<   |S )Ninput_tokensr   output_tokenscache_read_input_tokens
cache_readcache_creationephemeral_5m_input_tokensephemeral_1h_input_tokenscache_creation_input_tokens)rk   rl   total_tokensinput_token_detailsr<   )rB   sumvaluesr   r   )ri   rk   rl   rt   rn   cache_creation_objephemeral_5mephemeral_1hro   cache_token_sumadjusted_inputadjusted_totalresults                r%   _create_usage_metadatar~   m   s   (,,^<<AL)--o>>C!M "&**+DEEJJ 7,6L).223CDDJ 
C)--.IJJOa)--.IJJOa 	L?K ;< 	L?K ;<.223PQQVUV 	C4B 01 -446677O!O3N#m3N###  F
  Q(9(P(P<O(P(P$%Mr2   messager   c                |   |                                  }|                    dd          }|rt          |          |d<   |                    dd           |                    d          pg }d |D             }|rBd |D             }d                    |          pd|d<   d	 t          |          D             |d
<   |S )zHConvert an Anthropic Message to a flat outputs dict with usage_metadata.usageNusage_metadatatyper9   c                n    g | ]2}t          |t                    r|                    d           dk    0|3S )r   tool_user-   r(   rB   r.   bs     r%   
<listcomp>z'_message_to_outputs.<locals>.<listcomp>   sE       jD1167eeFmmz6Q6Q6Q6Q6Qr2   c                    g | ]F}t          |t                    r/|                    d           dk    0|                    dd          GS )r   text r   r   s     r%   r   z'_message_to_outputs.<locals>.<listcomp>   sY     
 
 
!T""
 ()uuV}}'>'> EE&"'>'>'>r2   r   c                    g | ]m\  }}|                     d d|           d||                     dd          t          |                     di                                                     ddnS )idcall_functionnamer   input)r   	arguments)r   r   indexr   )rB   _dumpsdecode)r.   iblocks      r%   r   z'_message_to_outputs.<locals>.<listcomp>   s     !
 !
 !
 5 iikakk22"!IIfb11!'		'2(>(>!?!?!F!F!H!H 	 !
 !
 !
r2   
tool_calls)
model_dumprC   r~   rB   join	enumerate)r   outputsri   r9   tool_use_blocks
text_partss         r%   _message_to_outputsr      s     ""G#KK66 R$:;P$Q$Q !KKkk)$$*G   O  

 

 
 


  WWZ008D	!
 !
 &o66!
 !
 !
 Nr2   
all_chunksr   c                    t                      }|d| iS d }| D ]J}	  |||          }# t          $ r-}t                              d|            d| icY d }~c S d }~ww xY w|d| iS t	          |          S )Noutput)eventcurrent_snapshotz/Error accumulating event in Anthropic Wrapper: )rh   RuntimeErrorr@   debugr   )r   
accumulatefull_messagechunkrD   s        r%   _reduce_chat_chunksr      s    *,,J*%%L * *	*%:!-  LL  	* 	* 	*LLN1NNOOOj)))))))))	* *%%|,,,s   *
A! AA!A!list[Completion]c                    g }| D ] }|j         }||                    |           !d                    |          }| r#| d                                         }d|ig|d<   ndd|igi}|S )Nr   r   choices)
completionappendr   r   )r   all_contentr   r9   r'   s        r%   _reduce_completionsr      s    K ( ("w'''ggk""G -rN%%'')*)&'*+,Hr2   r   c                &   	 t          | d          r:t          | j                  r&	 |                                 } n# t          $ r Y nw xY wt	          |           S # t
          $ r+}t                              d|            d| icY d }~S d }~ww xY w)Nparsez"Error processing chat completion: r   )hasattrcallabler   r?   r   BaseExceptionr@   r   )r   rD   s     r%   _process_chat_completionr      s    #
 7G$$ 	'-)@)@ 	!--//   "7+++ # # #=!==>>>'"""""""#s=   $A < A 
A	A A		A 
B% BBBoriginal_creater	   r   r_   	reduce_fntracing_extraTracingExtrac                     t          j                    fd            }t          j                    fd            }t          j                   r|n|S )Nc                     |                     d          }t          j        dd|rnd t          t          t          j        t                    d	}  |          | i |}|S NrL   llm)r   run_typer   process_inputsprocess_outputs_invocation_params_fnr<   rB   r   	traceablerE   r   	functoolspartialrb   
argsrG   rL   	decoratorr}   r   r   rF   r   r   s
        r%   createz_get_wrapper.<locals>.create   s    H%%) 

#)3iit+4"+"3 "@# #

 

 

 

	 ,?++T<V<<r2   c                    K   |                     d          }t          j        dd|rnd t          t          t          j        t                    d	}  |          | i | d {V }|S r   r   r   s
        r%   acreatez_get_wrapper.<locals>.acreate  s      H%%) 

#)3iit+4"+"3 "@# #

 

 

 

	 2yy114B6BBBBBBBBr2   )r   wrapsr   is_async)r   r   r   rF   r   r   r   s   `````  r%   _get_wrapperr      s     __%%        &%" __%%        &%  "*?;;G77Gr2   original_streamc                   	
 dt                                                     v }t          j        d|t          dt
          t          j        t          |          d|	t          j        d|dt
          t          t          j        t          |          d|
|r" G 	
fdd           G  fdd          }|S  G 	
fd	d
           G  fdd          }|S )z;Create a wrapper for Anthropic's streaming context manager.asyncr   )r   r   r   r   r   )r   r   r   r   r   c                      e Zd ZddZefd            Zedd            Zedd
            ZddZd fdZ	ddZ
d dZd dZd!dZd"dZd dZed!d            ZdS )#6_get_stream_wrapper.<locals>.AsyncMessageStreamWrapperwrappedr   r   Nonec                "    || _         || _        d S r,   _wrapped_kwargsselfr   rG   s      r%   __init__z?_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.__init__6      
 !(%r2   c                :      fd            } |di  j         S )Nc                  K   j         j        2 3 d {V }|W V  6 t          j                    }j                                          d {V }t          |          }||_        |                    d          x}r||j        d<   d S d S Nr   	r   text_streamr   get_current_run_treeget_final_messager   r   rB   metadata)_r   run_treefinal_messager   r   r   s         r%   _text_streamzX_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.text_stream.<locals>._text_stream@  s      '+}'@ $ $ $ $ $ $ $e# (A*?AAH*.-*I*I*K*K$K$K$K$K$K$KM1-@@G'.H$ ',< = ==u D>C)*:;;;D Ds   r<   r   r   r   configured_traceable_texts   ` r%   r   zB_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.text_stream>  sG    *D D D D +*D $|33dl333r2   httpx.Responsec                    | j         j        S r,   r   responser   s    r%   r   z?_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.responseM      }--r2   
str | Nonec                    | j         j        S r,   r   
request_idr   s    r%   r   zA_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.request_idQ      }//r2   r   c                b   K   |                                  }|                                 d {V S r,   )	__aiter__	__anext__)r   aiters     r%   r   z@_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.__anext__U  s7      (("__.........r2   !AsyncIterator[MessageStreamEvent]c               ^    K    fd            } |di  j         2 3 d {V }|W V  6 d S )Nc                 6    j                                         S r,   )r   r   r   r   s    r%   traced_iterzU_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.__aiter__.<locals>.traced_iterZ  s    =22444r2   r<   r   )r   r  r   configured_traceables   `  r%   r   z@_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.__aiter__Y  s      %5 5 5 5 &%5 $/;#>#>#>#>              %KKKKK $?#>#>s   ,r   c                H   K   | j                                          d {V  | S r,   )r   
__aenter__r   s    r%   r  zA_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.__aenter__a  s1      m..000000000r2   c                4   K    | j         j        |  d {V  d S r,   )r   	__aexit__r   excs     r%   r	  z@_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.__aexit__e  0      -dm-s3333333333r2   c                H   K   | j                                          d {V  d S r,   r   closer   s    r%   r  z<_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.closeh  s2      m))+++++++++++r2   r   c                D   K   | j                                          d {V S r,   r   r   r   s    r%   r   zH_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.get_final_messagek  s,      !]<<>>>>>>>>>r2   r_   c                D   K   | j                                          d {V S r,   r   get_final_textr   s    r%   r  zE_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.get_final_textn  s,      !]99;;;;;;;;;r2   c                H   K   | j                                          d {V  d S r,   r   
until_doner   s    r%   r  zA_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.until_doneq  s2      m..00000000000r2   c                    | j         j        S r,   r   current_message_snapshotr   s    r%   r  zO_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.current_message_snapshott      }==r2   N)r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r_   )__name__
__module____qualname__r   propertyr   r   r   r   r   r  r	  r  r   r  r  r  r  r   s   r%   AsyncMessageStreamWrapperr   5  sX       & & & & 4 4 4 4 X4 . . . X. 0 0 0 X0/ / / /              4 4 4 4, , , ,? ? ? ?< < < <1 1 1 1 > > > X> > >r2   r'  c                  (    e Zd Zd Z fdZd ZdS )>_get_stream_wrapper.<locals>.AsyncMessagesStreamManagerWrapperc                    || _         d S r,   r   r   rG   s     r%   r   zG_get_stream_wrapper.<locals>.AsyncMessagesStreamManagerWrapper.__init__y      %r2   c                   K    di | j         | _        | j                                         d {V } |fi | j         S Nr<   )r   _managerr  )r   rL   r'  r   s     r%   r  zI_get_stream_wrapper.<locals>.AsyncMessagesStreamManagerWrapper.__aenter__|  s`       / ? ?$, ? ?#}779999999900HH4<HHHr2   c                4   K    | j         j        |  d {V  d S r,   )r/  r	  r
  s     r%   r	  zH_get_stream_wrapper.<locals>.AsyncMessagesStreamManagerWrapper.__aexit__  r  r2   N)r"  r#  r$  r   r  r	  )r'  r   s   r%   !AsyncMessagesStreamManagerWrapperr)  x  sW        & & &I I I I I I
4 4 4 4 4r2   r1  c                      e Zd ZddZedd            Zedd	            Zefd
            ZddZ fdZ	ddZ
ddZddZddZd dZddZedd            ZdS )!1_get_stream_wrapper.<locals>.MessageStreamWrapperr   r   r   r   c                "    || _         || _        d S r,   r   r   s      r%   r   z:_get_stream_wrapper.<locals>.MessageStreamWrapper.__init__  r   r2   r   c                    | j         j        S r,   r   r   s    r%   r   z:_get_stream_wrapper.<locals>.MessageStreamWrapper.response  r   r2   r   c                    | j         j        S r,   r   r   s    r%   r   z<_get_stream_wrapper.<locals>.MessageStreamWrapper.request_id  r   r2   c                :      fd            } |di  j         S )Nc               ;     K   j         j        E d {V  t          j                    }j                                         }t          |          }||_        |                    d          x}r||j        d<   d S d S r   r   )r   r   r   r   r   r   s        r%   r   zS_get_stream_wrapper.<locals>.MessageStreamWrapper.text_stream.<locals>._text_stream  s      #}88888888*?AAH$(M$C$C$E$EM1-@@G'.H$ ',< = ==u D>C)*:;;;D Dr2   r<   r   r   s   ` r%   r   z=_get_stream_wrapper.<locals>.MessageStreamWrapper.text_stream  sG    *D D D D +*D $|33dl333r2   r   c                N    |                                                                  S r,   )__iter____next__r   s    r%   r;  z:_get_stream_wrapper.<locals>.MessageStreamWrapper.__next__  s    }}//111r2   c                :      fd            } |di  j         S )Nc                 6    j                                         S r,   )r   r:  r  s    r%   r  zO_get_stream_wrapper.<locals>.MessageStreamWrapper.__iter__.<locals>.traced_iter  s    =11333r2   r<   r   )r   r  r  s   ` r%   r:  z:_get_stream_wrapper.<locals>.MessageStreamWrapper.__iter__  sB    %4 4 4 4 &%4 #{22T\222r2   r   c                8    | j                                          | S r,   )r   	__enter__r   s    r%   r?  z;_get_stream_wrapper.<locals>.MessageStreamWrapper.__enter__  s    '')))r2   c                $     | j         j        |  d S r,   )r   __exit__r
  s     r%   rA  z:_get_stream_wrapper.<locals>.MessageStreamWrapper.__exit__      &&,,,,r2   c                8    | j                                          d S r,   r  r   s    r%   r  z7_get_stream_wrapper.<locals>.MessageStreamWrapper.close  s    ##%%%%%r2   r   c                4    | j                                         S r,   r  r   s    r%   r   zC_get_stream_wrapper.<locals>.MessageStreamWrapper.get_final_message  s    }66888r2   r_   c                4    | j                                         S r,   r  r   s    r%   r  z@_get_stream_wrapper.<locals>.MessageStreamWrapper.get_final_text  s    }33555r2   c                4    | j                                         S r,   r  r   s    r%   r  z<_get_stream_wrapper.<locals>.MessageStreamWrapper.until_done  s    }//111r2   c                    | j         j        S r,   r  r   s    r%   r  zJ_get_stream_wrapper.<locals>.MessageStreamWrapper.current_message_snapshot  r  r2   N)r   r   r   r   )r   r   r  r  r  r  r   r!  )r"  r#  r$  r   r%  r   r   r   r;  r:  r?  rA  r  r   r  r  r  r&  s   r%   MessageStreamWrapperr3    sS       & & & & . . . X. 0 0 0 X0 4 4 4 4 X42 2 2 23 3 3 3 3   - - - -& & & &9 9 9 96 6 6 62 2 2 2 > > > X> > >r2   rH  c                  (    e Zd Zd Z fdZd ZdS )9_get_stream_wrapper.<locals>.MessagesStreamManagerWrapperc                    || _         d S r,   r   r+  s     r%   r   zB_get_stream_wrapper.<locals>.MessagesStreamManagerWrapper.__init__  r,  r2   c                r     di | j         | _         | j                                        fi | j         S r.  )r   r/  r?  )r   rH  r   s    r%   r?  zC_get_stream_wrapper.<locals>.MessagesStreamManagerWrapper.__enter__  sE     / ? ?$, ? ?++DM,C,C,E,EVVVVVr2   c                $     | j         j        |  d S r,   )r/  rA  r
  s     r%   rA  zB_get_stream_wrapper.<locals>.MessagesStreamManagerWrapper.__exit__  rB  r2   N)r"  r#  r$  r   r?  rA  )rH  r   s   r%   MessagesStreamManagerWrapperrJ    sW        & & &W W W W W W- - - - -r2   rN  Nr<   )
r_   lowerr   r   r   rE   r   r   rb   r   )r   r   rF   r   r   r1  rN  r'  rH  r  r   s   `      @@@@r%   _get_stream_wrapperrP    s    #o..44666H&0 	%''/<
 
	 	 	 	 !, 5 	!'0'/<
 
	! 	! 	! 	!  _,A	> A	> A	> A	> A	> A	> A	> A	> A	> A	> A	>F
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 10>	> >	> >	> >	> >	> >	> >	> >	> >	> >	> >	>@		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- ,+r2   c                  .    e Zd ZU ded<   ded<   ded<   dS )r   zOptional[Mapping[str, Any]]r   zOptional[list[str]]tagszOptional[ls_client.Client]r   N)r"  r#  r$  __annotations__r<   r2   r%   r   r     s6         ))))&&&&&&r2   F)totalChatAnthropic)r   	chat_namecompletions_namer   Optional[TracingExtra]rV  rW  c                  |pi }t          |                    d          pi           }|                    di           }d |                                D             }|r||d<   t	          | j        j        |t          ||          | j        _        t          | j        j	        |||          | j        _	        t	          | j
        j        |t          ||          | j
        _        t          | d          ret          | j        d          rPt          | j        j        d          r6t	          | j        j        j        |t          ||          | j        j        _        | S )a  Patch the Anthropic client to make it traceable.

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

    Returns:
        The patched client.

    Example:
        ```python
        import anthropic
        from langsmith import wrappers

        client = wrappers.wrap_anthropic(anthropic.Anthropic())

        # Use Anthropic client same as you normally would:
        system = "You are a helpful assistant."
        messages = [
            {
                "role": "user",
                "content": "What physics breakthroughs do you predict will happen by 2300?",
            }
        ]
        completion = client.messages.create(
            model="claude-3-5-sonnet-latest",
            messages=messages,
            max_tokens=1000,
            system=system,
        )
        print(completion.content)

        # With raw response to access headers:
        raw_response = client.messages.with_raw_response.create(
            model="claude-3-5-sonnet-latest",
            messages=messages,
            max_tokens=1000,
            system=system,
        )
        print(raw_response.headers)  # Access HTTP headers
        message = raw_response.parse()  # Get parsed response

        # You can also use the streaming context manager:
        with client.messages.stream(
            model="claude-3-5-sonnet-latest",
            messages=messages,
            max_tokens=1000,
            system=system,
        ) as stream:
            for text in stream.text_stream:
                print(text, end="", flush=True)
            message = stream.get_final_message()
        ```
    r   r^   c                &    i | ]\  }}|d k    ||S )r   r<   r=   s      r%   r6   z"wrap_anthropic.<locals>.<dictcomp>!  s*     ( ( (A!z//1///r2   betar:   r   )r(   rB   rC   r>   r   r:   r   r   rP  rL   completionsr   r   r[  )r   r   rV  rW  r   rF   tracing_extra_rests          r%   wrap_anthropicr^    sy   ~ "'RM M%%j117R88H%-\\2H"%M%M"( (&,,..( ( (  2)1:&)& FO 1&	 FO !-!&! !F 	
FK,,
 FK((33

 '3K '*'
 '
# Mr2   )r   r   )r'   r(   r   r(   )rF   r(   rG   r(   )r   rc   )ri   r(   r   r   )r   r   r   r(   )r   r   r   r(   )r   r   r   r(   )r   r   )r   r	   r   r_   r   r	   rF   r(   r   r   r   r	   )
r   r	   r   r_   rF   r(   r   r   r   r	   )
r   r   r   rX  rV  r_   rW  r_   r   r   )9
__future__r   r   loggingcollections.abcr   r   r   typingr   r   r	   r
   r   r   typing_extensionsr   r   	langsmithr   	ls_clientr   langsmith._internal._orjsonr   r   langsmith.schemasr   r   httpxrS   r   r   anthropic.lib.streamingr   r   anthropic.typesr   r   r   r   	getLoggerr"  r@   	lru_cacher&   rE   rb   rh   r~   r   r   r   r   r   rP  r   r^  r<   r2   r%   <module>rm     s
   " " " " " "      < < < < < < < < < <                . - - - - - - - ) ) ) ) ) ) ! ! ! ! ! ! 7 7 7 7 7 7 > > > > > > > > HLLL33333333IIIIIIIIGGGGGGGGGGGCu[*:C?@AAA		8	$	$    9 9 9 9&# # # #L    # # # #L   D- - - -&    # # # #"*H *H *H *HZ|, |, |, |,~' ' ' ' '9E ' ' ' ' -1$'n n n n n n n nr2   