
    %Gg9=                       d dl mZ d dlZd dl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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"m#Z#  ededdef         Z$ ejJ                  e&      Z'ejP                  dd       Z)d dZ*d!dZ+	 	 	 	 	 	 d"dZ,d#dZ-d$dZ.d%dZ/d&dZ0	 	 	 	 	 	 	 	 	 	 d'dZ1	 	 	 	 	 	 	 	 d(dZ2 G d ded      Z3ddd)dZ4y)*    )annotationsN)TYPE_CHECKINGAnyAsyncIteratorCallableListMappingOptionalSequenceTypeTypeVarUnion)TypeAdapter)Self	TypedDict)client)run_helpers)InputTokenDetailsUsageMetadata)	AnthropicAsyncAnthropic)
CompletionMessageMessageStreamEventCr   r   )boundc                 2    	 ddl m}  | S # t        $ r Y y w xY w)Nr   NotGiven)anthropic._typesr   ImportErrorr   s    z/home/kushmeetdev/apache_webroot/langgraph_flaskproject/venv/lib/python3.12/site-packages/langsmith/wrappers/_anthropic.py_get_not_givenr#   #   s!    - s   
 	c                   	 t               x}0| j                         D ci c]  \  }}t        ||      r|| } }}d| v r0d| d   dg| j                  dg       z   | d<   | j                  d       | j                         D ci c]  \  }}|	|| c}}S c c}}w # t        $ r"}t        j                  d|        Y d }~d }~ww xY wc c}}w )NzError stripping NotGiven: system)rolecontentmessages)r#   items
isinstance	Exceptionloggererrorgetpop)d	not_givenkves        r"   _strip_not_givenr5   -   s    7'))I6"#'')L$!Q:a3KALAL 1}"*q{CDquuH
 
* 	
hWWY8TQ!-AqD88 M 71!5667 9s8   B BBB 
CCB 	C
(CC
c                    t        |       }|j                  d      }|rt        |t              r|g}dd|j                  dd       |j                  dd       |j                  dd       |dS )Nstop	anthropicchatmodeltemperature
max_tokens)ls_providerls_model_typels_model_namels_temperaturels_max_tokensls_stop)r5   r.   r*   str)kwargsstrippedr7   s      r"   _infer_ls_paramsrF   <   sl    'H<<D
4%v #!gt4",,}d;!lD9     c                V   	 ddl m} |4| j
                  dk(  r| j                  S t        d| j
                   d      | j
                  dk(  rQt        |      }|j                  | j                  j                               }|j                  j                  |       |S | j
                  dk(  rl|j                  | j                     }|j
                  d	k(  rB| j                  j
                  d
k(  r)|xj                   | j                  j                   z  c_        |S | j
                  dk(  r[| j                  j"                  |_        | j                  j$                  |_        | j&                  j(                  |j&                  _        |S # t        $ r t        j	                  d       |cY S w xY w)Nr   )ContentBlockzError importing ContentBlockmessage_startzUnexpected event order, got z before "message_start"content_block_startcontent_block_deltatext
text_deltamessage_delta)anthropic.typesrI   r!   r,   debugtypemessageRuntimeErrorr   validate_pythoncontent_block
model_dumpr'   appendindexdeltarM   stop_reasonstop_sequenceusageoutput_tokens)eventcurrent_snapshotrI   adaptercontent_block_instancer'   s         r"   _accumulate_eventrc   M   sz    0
 ::(== *5::,6MN
 	
 zz***<8!(!8!8**,"
 	  ''"	
  
,	,"**5;;7<<6!ekk&6&6,&FLLEKK,,,L  
	&',{{'>'>$).)B)B&/4{{/H/H,=   34 s   F  F('F(c                ,   d }| D ]  }	 t        ||      } |d| iS |j	                         }t        |j                  di             |d<   |j                  dd        d|iS # t        $ r(}t        j                  d|        d| icY d }~c S d }~ww xY w)N)r_   r`   z/Error accumulating event in Anthropic Wrapper: outputr]   usage_metadatarR   rS   )rc   rT   r,   rQ   rW   _create_usage_metadatar/   )
all_chunksfull_messagechunkr4   r0   s        r"   _reduce_chat_chunksrk   s   s    L *	*,5<XL* *%%!A0w1CDAEE&$q>  	*LLJ1#NOj))	*s   A""	B+BBBc                4   | j                  d      xs d}| j                  d      xs d}||z   }d| j                  dd      | j                  dd      z   i}t        |||t        di |j                         D ci c]  \  }}|	|| c}}      S c c}}w )	Ninput_tokensr   r^   
cache_readcache_creation_input_tokenscache_read_input_tokens)rm   r^   total_tokensinput_token_details )r.   r   r   r)   )anthropic_token_usagerm   r^   rq   rr   r2   r3   s          r"   rg   rg      s    (,,^<AL)--o>C!M-/L+//0MqQ

#
#$=q
AB! !#!- 
 3 9 9 ;M1q}q!tM
	 
 Ns   9
BBc                    g }| D ]"  }|j                   }||j                  |       $ dj                  |      }| r| d   j                         }d|ig|d<   |S dd|igi}|S )N rM   choices)
completionrX   joinrW   )rh   all_contentrj   r'   r0   s        r"   _reduce_completionsr|      s    K (""w'( ggk"GrN%%')*) H &'*+,HrG   c                    	 | j                         }|j                  dd       }|rt        |      nd |d<   |j                  dd        d|iS # t        $ r&}t        j                  d|        d| icY d }~S d }~ww xY w)Nr]   rf   rR   rS   z"Error processing chat completion: re   )rW   r/   rg   BaseExceptionr,   rQ   )outputsrdictrt   r4   s       r"   _process_chat_completionr      s    #""$ %		'4 8 % ##89 	
 			&$5!! #9!=>'""#s   A	A 	A;A60A;6A;TracingExtrac                     t        j                          fd       }t        j                          fd       }t        j                         r|S |S )Nc            
         |j                  d      }t        j                  dd|rnd t        t        t
        d}  |      | i |}|S Nstreamllm)namerun_type	reduce_fnprocess_inputsprocess_outputs_invocation_params_fnrs   r.   r   	traceabler5   r   rF   	argsrD   r   	decoratorresultr   original_creater   tracing_extras	        r"   createz_get_wrapper.<locals>.create   sc    H%)) 
#)it+4"2
 
	 ,?+T<V<rG   c            
        K   |j                  d      }t        j                  dd|rnd t        t        t
        d}  |      | i | d {   }|S 7 wr   r   r   s	        r"   acreatez_get_wrapper.<locals>.acreate   sp     H%)) 
#)it+4"2
 
	 2y14B6BB Cs   AAAA)	functoolswrapsr   is_async)r   r   r   r   r   r   s   ````  r"   _get_wrapperr      sW     ___% & ___% & "**?;7GGrG   c           	     Z   	
 ddl }dt               j                         v }t        j                  d|t
        dt        t        d|	t        j                  d|dt        t        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.r   N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y)6_get_stream_wrapper.<locals>.AsyncMessageStreamWrapperc                     || _         || _        y N_wrapped_kwargsselfwrappedrD   s      r"   __init__z?_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.__init__       
 !(%rG   c                >      fd       } |di  j                   S )Nc                   K   j                   j                  2 3 d {   }| 7 
6 t        j                         }j                   j	                          d {  7  }t        |      |_        y wr   r   text_streamr   get_current_run_treeget_final_messager   r   )_rj   run_treefinal_messager   s       r"   _text_streamzX_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.text_stream.<locals>._text_stream  sa     '+}}'@'@ $ $e#$'@*??AH*.--*I*I*K$K$KM'?'NH$s+   A4+)+A4+2A4A A4rs   r   r   r   configured_traceable_texts   ` r"   r   zB_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.text_stream  s+    *O +O $3dll33rG   c                .    | j                   j                  S r   r   responser   s    r"   r   z?_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.response      }}---rG   c                .    | j                   j                  S r   r   
request_idr   s    r"   r   zA_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.request_id      }}///rG   c                ^   K   | j                         }|j                          d {   S 7 wr   )	__aiter__	__anext__)r   aiters     r"   r   z@_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.__anext__  s%     ("__....s   $-+-c               l    K    fd       } |di  j                   2 3 d {   }| 7 
6 y w)Nc                 8    j                   j                         S r   )r   r   r   r   s    r"   traced_iterzU_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.__aiter__.<locals>.traced_iter  s    ==2244rG   rs   r   )r   r   rj   configured_traceables   `  r"   r   z@_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.__aiter__  sD     %5 &5 $/#>#>    %K #>s   4202424c                V   K   | j                   j                          d {    | S 7 wr   )r   
__aenter__r   s    r"   r   zA_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.__aenter__"  s&     mm..000 1s   )')c                R   K    | j                   j                  |  d {    y 7 wr   )r   	__aexit__r   excs     r"   r   z@_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.__aexit__&        -dmm--s333   '%'c                T   K   | j                   j                          d {    y 7 wr   r   closer   s    r"   r   z<_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.close)  s     mm))+++   (&(c                R   K   | j                   j                          d {   S 7 wr   r   r   r   s    r"   r   zH_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.get_final_message,  s     !]]<<>>>>   '%'c                R   K   | j                   j                          d {   S 7 wr   r   get_final_textr   s    r"   r   zE_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.get_final_text/  s     !]]99;;;;r   c                T   K   | j                   j                          d {    y 7 wr   r   
until_doner   s    r"   r   zA_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.until_done2  s     mm..000r   c                .    | j                   j                  S r   r   current_message_snapshotr   s    r"   r   zO_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.current_message_snapshot5      }}===rG   N)r   z4anthropic.lib.streaming._messages.AsyncMessageStreamreturnNone)r   zhttpx.Responser   z
str | Noner   r   )r   z!AsyncIterator[MessageStreamEvent]r   r   r   r   r   r   r   rC   )__name__
__module____qualname__r   propertyr   r   r   r   r   r   r   r   r   r   r   r   r   r   s   r"   AsyncMessageStreamWrapperr      s    &M& 	& 	4 	4 . . 0 0/ 4,?<1 > >rG   r   c                  &    e Zd Zd Z fdZd Zy)>_get_stream_wrapper.<locals>.AsyncMessagesStreamManagerWrapperc                    || _         y r   r   r   rD   s     r"   r   zG_get_stream_wrapper.<locals>.AsyncMessagesStreamManagerWrapper.__init__:  	    %rG   c                   K    di | j                   | _        | j                  j                          d {   } |fi | j                   S 7 wNrs   )r   _managerr   )r   r   r   original_streams     r"   r   zI_get_stream_wrapper.<locals>.AsyncMessagesStreamManagerWrapper.__aenter__=  sH      / ?$,, ?#}}77990H4<<HH :s   5AAAc                R   K    | j                   j                  |  d {    y 7 wr   )r   r   r   s     r"   r   zH_get_stream_wrapper.<locals>.AsyncMessagesStreamManagerWrapper.__aexit__B  r   r   N)r   r   r   r   r   r   )r   r   s   r"   !AsyncMessagesStreamManagerWrapperr   9  s    &I
4rG   r   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y)1_get_stream_wrapper.<locals>.MessageStreamWrapperc                     || _         || _        y r   r   r   s      r"   r   z:_get_stream_wrapper.<locals>.MessageStreamWrapper.__init__I  r   rG   c                .    | j                   j                  S r   r   r   s    r"   r   z:_get_stream_wrapper.<locals>.MessageStreamWrapper.responseQ  r   rG   c                .    | j                   j                  S r   r   r   s    r"   r   z<_get_stream_wrapper.<locals>.MessageStreamWrapper.request_idU  r   rG   c                >      fd       } |di  j                   S )Nc               ;     K   j                   j                  E d {    t        j                         }j                   j	                         }t        |      |_        y 7 Cwr   r   )r   r   r   r   s      r"   r   zS_get_stream_wrapper.<locals>.MessageStreamWrapper.text_stream.<locals>._text_stream[  sL     #}}8888*??AH$(MM$C$C$EM'?'NH$ 9s   A#A!AA#rs   r   r   s   ` r"   r   z=_get_stream_wrapper.<locals>.MessageStreamWrapper.text_streamY  s+    *O +O $3dll33rG   c                >    | j                         j                         S r   )__iter____next__r   s    r"   r  z:_get_stream_wrapper.<locals>.MessageStreamWrapper.__next__d  s    }}//11rG   c                >      fd       } |di  j                   S )Nc                 8    j                   j                         S r   )r   r  r   s    r"   r   zO_get_stream_wrapper.<locals>.MessageStreamWrapper.__iter__.<locals>.traced_iterh  s    ==1133rG   rs   r   )r   r   r   s   ` r"   r  z:_get_stream_wrapper.<locals>.MessageStreamWrapper.__iter__g  s)    %4 &4 #2T\\22rG   c                :    | j                   j                          | S r   )r   	__enter__r   s    r"   r	  z;_get_stream_wrapper.<locals>.MessageStreamWrapper.__enter__n  s    '')rG   c                6     | j                   j                  |  y r   )r   __exit__r   s     r"   r  z:_get_stream_wrapper.<locals>.MessageStreamWrapper.__exit__r      &&&,rG   c                8    | j                   j                          y r   r   r   s    r"   r   z7_get_stream_wrapper.<locals>.MessageStreamWrapper.closeu  s    ##%rG   c                6    | j                   j                         S r   r   r   s    r"   r   zC_get_stream_wrapper.<locals>.MessageStreamWrapper.get_final_messagex  s    }}6688rG   c                6    | j                   j                         S r   r   r   s    r"   r   z@_get_stream_wrapper.<locals>.MessageStreamWrapper.get_final_text{  s    }}3355rG   c                6    | j                   j                         S r   r   r   s    r"   r   z<_get_stream_wrapper.<locals>.MessageStreamWrapper.until_done~  s    }}//11rG   c                .    | j                   j                  S r   r   r   s    r"   r   zJ_get_stream_wrapper.<locals>.MessageStreamWrapper.current_message_snapshot  r   rG   N)r   z/anthropic.lib.streaming._messages.MessageStreamr   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   s   r"   MessageStreamWrapperr   H  s    &H& 	& . . 0 0 4 423-&962 > >rG   r  c                  &    e Zd Zd Z fdZd Zy)9_get_stream_wrapper.<locals>.MessagesStreamManagerWrapperc                    || _         y r   r   r   s     r"   r   zB_get_stream_wrapper.<locals>.MessagesStreamManagerWrapper.__init__  r   rG   c                     di | j                   | _         | j                  j                         fi | j                   S r   )r   r   r	  )r   r  r   s    r"   r	  zC_get_stream_wrapper.<locals>.MessagesStreamManagerWrapper.__enter__  s7     / ?$,, ?+DMM,C,C,EVVVrG   c                6     | j                   j                  |  y r   )r   r  r   s     r"   r  zB_get_stream_wrapper.<locals>.MessagesStreamManagerWrapper.__exit__  r  rG   N)r   r   r   r   r	  r  )r  r   s   r"   MessagesStreamManagerWrapperr    s    &W-rG   r  rs   )	r8   rC   lowerr   r   rk   r5   rF   r   )r   r   r   r8   r   r   r  r   r  r   r   s   `      @@@@r"   _get_stream_wrapperr     s     #o.4466H&00 %'.  !, 5 5 !'0.! ! >	> >	>@
	4 
	4 10;	> ;	>z		- 		- ,+rG   c                  ,    e Zd ZU ded<   ded<   ded<   y)r   zOptional[Mapping[str, Any]]metadatazOptional[List[str]]tagszOptional[ls_client.Client]r   N)r   r   r   __annotations__rs   rG   r"   r   r     s    ))
&&rG   F)total)r   c               \   |xs i }t        | j                  j                  dt        |      | j                  _        t	        | j                  j
                  d|      | j                  _        t        | j                  j                  dt        |      | j                  _        t        | d      rt        | j                  d      rit        | j                  j                  d      rIt        | j                  j                  j                  dt        |      | j                  j                  _        | S )a  Patch the Anthropic client to make it traceable.

    Args:
        client (Union[Anthropic, AsyncAnthropic]): The client to patch.
        tracing_extra (Optional[TracingExtra], optional): Extra tracing information.
            Defaults to None.

    Returns:
        Union[Anthropic, AsyncAnthropic]: The patched client.

    Example:

        .. code-block:: 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)

            # 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()

    ChatAnthropicr   betar(   r   )
r   r(   r   rk   r  r   completionsr|   hasattrr"  )r   r   s     r"   wrap_anthropicr%    s    ` "'RM)	FOO 1FOO
 !-!!	!F 	FKK,FKK(((3&2KK  ''	'
# MrG   )r   zOptional[Type])r0   dictr   r&  )rD   r&  )r_   r   r`   Message | Noner   r'  )rh   r   r   r&  )rt   r&  r   r   )rh   zList[Completion]r   r&  )r   r   )
r   r   r   rC   r   r   r   r   r   r   )r   r   r   rC   r   r   r   r   )r   r   r   zOptional[TracingExtra]r   r   )5
__future__r   r   loggingtypingr   r   r   r   r   r	   r
   r   r   r   r   pydanticr   typing_extensionsr   r   	langsmithr   	ls_clientr   langsmith.schemasr   r   httpxr8   r   r   rP   r   r   r   r   	getLoggerr   r,   	lru_cacher#   r5   rF   rc   rk   rg   r|   r   r   r  r   r%  rs   rG   r"   <module>r3     sG   "      ! - ) ! >3GGCu[*:C?@A			8	$  9"# #4B##L $ # %H%H
%H %H  	%H
 %HPs,s,
s,  s, 	s,l'9E ' JN NrG   