
    	h4=                       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 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j$        e%          Z&ej'        d9d            Z(d:dZ)d;dZ*d<dZ+d=dZ,d>d"Z-d?d$Z.d@d'Z/dAd/Z0dBd1Z1 G d2 d.ed34          Z2dd5dCd8Z3dS )D    )annotationsN)AsyncIteratorMappingSequence)TYPE_CHECKINGAnyCallableOptionalTypeVarUnion)TypeAdapter)Self	TypedDict)client)run_helpers)InputTokenDetailsUsageMetadata)	AnthropicAsyncAnthropic)
CompletionMessageMessageStreamEventCr   r   )boundreturnOptional[type]c                 6    	 ddl m}  | S # t          $ r Y d S w xY w)Nr   NotGiven)anthropic._typesr   ImportErrorr   s    j/var/www/html/web-builder-api.evdpl.com/venv/lib/python3.11/site-packages/langsmith/wrappers/_anthropic.py_get_not_givenr#      s@    ------   tts   
 
ddictc                   	 t                      x 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                <    i | ]\  }}t          |          ||S  )
isinstance).0kv	not_givens      r"   
<dictcomp>z$_strip_not_given.<locals>.<dictcomp>,   s.    LLL$!Q:a3K3KLALLL    zError stripping NotGiven: system)rolecontentmessagesc                    i | ]
\  }}|||S Nr(   r*   r+   r,   s      r"   r.   z$_strip_not_given.<locals>.<dictcomp>5   s    888TQ!-Aq---r/   )r#   items	Exceptionloggererrorgetpop)r$   er-   s     @r"   _strip_not_givenr>   )   s    7')))I6LLLL!''))LLLA 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%kwargsc                   t          |           }|                    d          }|rt          |t                    r|g}dd|                    dd           |                    dd           |                    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)r>   r;   r)   str)r?   strippedrA   s      r"   _infer_ls_paramsrO   8   s    ''H<<D 
4%% v #!gt44",,}d;;!lD99  r/   eventr   current_snapshotMessage | Nonec                   	 ddl m} n,# t          $ r t                              d           |cY S w xY w|*| j        dk    r| j        S t          d| j         d          | j        dk    rVt          |          }|	                    | j
                                                  }|j                            |           n| j        dk    rH|j        | j                 }|j        d	k    r*| j        j        d
k    r|xj        | j        j        z  c_        nC| j        dk    r8| j        j        |_        | j        j        |_        | j        j        |j        _        |S )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.typesrT   r!   r9   debugtypemessageRuntimeErrorr   validate_pythoncontent_block
model_dumpr2   appendindexdeltarX   stop_reasonstop_sequenceusageoutput_tokens)rP   rQ   rT   adaptercontent_block_instancer2   s         r"   _accumulate_eventrl   I   s    0000000      3444  :((= N5:NNN
 
 	
 z****<88!(!8!8**,,"
 "
 	 ''"	
 	
 	
 	
 
,	,	,"*5;7<6!!ek&6,&F&FLLEK,,LL		&	&',{'>$).)B&/4{/H,s   	 &22
all_chunksr   c                \   d }| D ]N}	 t          ||          }# t          $ r-}t                              d|            d| icY d }~c S d }~ww xY w|d| iS |                                }t          |                    di                     |d<   |                    dd            d|iS )N)rP   rQ   z/Error accumulating event in Anthropic Wrapper: outputrh   usage_metadatar]   r^   )rl   r_   r9   r\   rb   _create_usage_metadatar<   )rm   full_messagechunkr=   r$   s        r"   _reduce_chat_chunksrt   o   s    L * *	*,5<XXXLL 	* 	* 	*LLN1NNOOOj)))))))))	* *%%!!A0w1C1CDDAEE&$q>s   
A AAAanthropic_token_usager   c                8   |                      d          pd}|                      d          pd}||z   }d|                      dd          |                      dd          z   i}t          |||t          d	i d |                                D                       S )
Ninput_tokensr   ri   
cache_readcache_creation_input_tokenscache_read_input_tokensc                    i | ]
\  }}|||S r5   r(   r6   s      r"   r.   z*_create_usage_metadata.<locals>.<dictcomp>   s    MMM1q}q!}}}r/   )rw   ri   total_tokensinput_token_detailsr(   )r;   r   r   r7   )ru   rw   ri   r|   r}   s        r"   rq   rq      s    (,,^<<AL)--o>>C!M-/L+//0MqQQ

#
#$=q
A
AB! !#!- 
 
MM 3 9 9 ; ;MMM
 
	   r/   list[Completion]c                    g }| D ] }|j         }||                    |           !d                    |          }| r#| d                                         }d|ig|d<   ndd|igi}|S )N rX   choices)
completionrc   joinrb   )rm   all_contentrs   r2   r$   s        r"   _reduce_completionsr      s    K ( ("w'''ggk""G -rN%%'')*)&'*+,Hr/   outputsr   c                (   	 |                                  }|                    dd           }|rt          |          nd |d<   |                    dd            d|iS # t          $ r+}t                              d|            d| icY d }~S d }~ww xY w)Nrh   rp   r]   r^   z"Error processing chat completion: ro   )rb   r<   rq   BaseExceptionr9   r\   )r   rdictru   r=   s       r"   _process_chat_completionr      s    #""$$ %		'4 8 8 %"#8999 	
 			&$5!! # # #=!==>>>'"""""""#s   AA 
B& BBBoriginal_creater	   namerM   	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
          d}  |          | i |}|S Nstreamllm)r   run_typer   process_inputsprocess_outputs_invocation_params_fnr(   r;   r   	traceabler>   r   rO   	argsr?   r   	decoratorresultr   r   r   r   s	        r"   createz_get_wrapper.<locals>.create   sz    H%%) 
#)3iit+4"2
 
 
 
	 ,?++T<V<<r/   c            
        K   |                     d          }t          j        dd|rnd t          t          t
          d}  |          | i | d {V }|S r   r   r   s	        r"   acreatez_get_wrapper.<locals>.acreate   s      H%%) 
#)3iit+4"2
 
 
 
	 2yy114B6BBBBBBBBr/   )	functoolswrapsr   is_async)r   r   r   r   r   r   s   ````  r"   _get_wrapperr      s     __%%       &% __%%       &% "*?;;G77Gr/   original_streamc           	     ~   	
 ddl }dt                                                     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dS )#6_get_stream_wrapper.<locals>.AsyncMessageStreamWrapperwrapped4anthropic.lib.streaming._messages.AsyncMessageStreamr   Nonec                "    || _         || _        d S r5   _wrapped_kwargsselfr   r?   s      r"   __init__z?_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.__init__       
 !(%r/   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 S r5   r   text_streamr   get_current_run_treeget_final_messager   r   )_rs   run_treefinal_messager   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'?'N'NH$$$s   r(   r   r   r   configured_traceable_texts   ` r"   r   zB_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.text_stream   sG    *O O O O +*O $|33dl333r/   httpx.Responsec                    | j         j        S r5   r   responser   s    r"   r   z?_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.response
      }--r/   
str | Nonec                    | j         j        S r5   r   
request_idr   s    r"   r   zA_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.request_id      }//r/   r   c                b   K   |                                  }|                                 d {V S r5   )	__aiter__	__anext__)r   aiters     r"   r   z@_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.__anext__  s7      (("__.........r/   !AsyncIterator[MessageStreamEvent]c               ^    K    fd            } |di  j         2 3 d {V }|W V  6 d S )Nc                 6    j                                         S r5   )r   r   r   r   s    r"   traced_iterzU_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.__aiter__.<locals>.traced_iter  s    =22444r/   r(   r   )r   r   rs   configured_traceables   `  r"   r   z@_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.__aiter__  s      %5 5 5 5 &%5 $/;#>#>#>#>              %KKKKK $?#>#>s   ,r   c                H   K   | j                                          d {V  | S r5   )r   
__aenter__r   s    r"   r   zA_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.__aenter__  s1      m..000000000r/   c                4   K    | j         j        |  d {V  d S r5   )r   	__aexit__r   excs     r"   r   z@_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.__aexit__"  0      -dm-s3333333333r/   c                H   K   | j                                          d {V  d S r5   r   closer   s    r"   r   z<_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.close%  s2      m))+++++++++++r/   r   c                D   K   | j                                          d {V S r5   r   r   r   s    r"   r   zH_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.get_final_message(  s,      !]<<>>>>>>>>>r/   rM   c                D   K   | j                                          d {V S r5   r   get_final_textr   s    r"   r   zE_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.get_final_text+  s,      !]99;;;;;;;;;r/   c                H   K   | j                                          d {V  d S r5   r   
until_doner   s    r"   r   zA_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.until_done.  s2      m..00000000000r/   c                    | j         j        S r5   r   current_message_snapshotr   s    r"   r   zO_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.current_message_snapshot1      }==r/   N)r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   rM   )__name__
__module____qualname__r   propertyr   r   r   r   r   r   r   r   r   r   r   r   r   r   s   r"   AsyncMessageStreamWrapperr      sX       & & & & 	4 	4 	4 	4 X	4 . . . X. 0 0 0 X0/ / / /              4 4 4 4, , , ,? ? ? ?< < < <1 1 1 1 > > > X> > >r/   r   c                  (    e Zd Zd Z fdZd ZdS )>_get_stream_wrapper.<locals>.AsyncMessagesStreamManagerWrapperc                    || _         d S r5   r   r   r?   s     r"   r   zG_get_stream_wrapper.<locals>.AsyncMessagesStreamManagerWrapper.__init__6      %r/   c                   K    di | j         | _        | j                                         d {V } |fi | j         S Nr(   )r   _managerr   )r   r   r   r   s     r"   r   zI_get_stream_wrapper.<locals>.AsyncMessagesStreamManagerWrapper.__aenter__9  s`       / ? ?$, ? ?#}779999999900HH4<HHHr/   c                4   K    | j         j        |  d {V  d S r5   )r  r   r   s     r"   r   zH_get_stream_wrapper.<locals>.AsyncMessagesStreamManagerWrapper.__aexit__>  r   r/   N)r   r   r   r   r   r   )r   r   s   r"   !AsyncMessagesStreamManagerWrapperr   5  sW        & & &I I I I I I
4 4 4 4 4r/   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dS )!1_get_stream_wrapper.<locals>.MessageStreamWrapperr   /anthropic.lib.streaming._messages.MessageStreamr   r   c                "    || _         || _        d S r5   r   r   s      r"   r   z:_get_stream_wrapper.<locals>.MessageStreamWrapper.__init__E  r   r/   r   c                    | j         j        S r5   r   r   s    r"   r   z:_get_stream_wrapper.<locals>.MessageStreamWrapper.responseM  r   r/   r   c                    | j         j        S r5   r   r   s    r"   r   z<_get_stream_wrapper.<locals>.MessageStreamWrapper.request_idQ  r   r/   c                :      fd            } |di  j         S )Nc               ;     K   j         j        E d {V  t          j                    }j                                         }t          |          |_        d S r5   r   )r   r   r   r   s      r"   r   zS_get_stream_wrapper.<locals>.MessageStreamWrapper.text_stream.<locals>._text_streamW  s[      #}88888888*?AAH$(M$C$C$E$EM'?'N'NH$$$r/   r(   r   r   s   ` r"   r   z=_get_stream_wrapper.<locals>.MessageStreamWrapper.text_streamU  sG    *O O O O +*O $|33dl333r/   r   c                N    |                                                                  S r5   )__iter____next__r   s    r"   r  z:_get_stream_wrapper.<locals>.MessageStreamWrapper.__next__`  s    }}//111r/   c                :      fd            } |di  j         S )Nc                 6    j                                         S r5   )r   r  r   s    r"   r   zO_get_stream_wrapper.<locals>.MessageStreamWrapper.__iter__.<locals>.traced_iterd  s    =11333r/   r(   r   )r   r   r   s   ` r"   r  z:_get_stream_wrapper.<locals>.MessageStreamWrapper.__iter__c  sB    %4 4 4 4 &%4 #{22T\222r/   r   c                8    | j                                          | S r5   )r   	__enter__r   s    r"   r  z;_get_stream_wrapper.<locals>.MessageStreamWrapper.__enter__j  s    '')))r/   c                $     | j         j        |  d S r5   )r   __exit__r   s     r"   r  z:_get_stream_wrapper.<locals>.MessageStreamWrapper.__exit__n      &&,,,,r/   c                8    | j                                          d S r5   r   r   s    r"   r   z7_get_stream_wrapper.<locals>.MessageStreamWrapper.closeq  s    ##%%%%%r/   r   c                4    | j                                         S r5   r   r   s    r"   r   zC_get_stream_wrapper.<locals>.MessageStreamWrapper.get_final_messaget  s    }66888r/   rM   c                4    | j                                         S r5   r   r   s    r"   r   z@_get_stream_wrapper.<locals>.MessageStreamWrapper.get_final_textw  s    }33555r/   c                4    | j                                         S r5   r   r   s    r"   r   z<_get_stream_wrapper.<locals>.MessageStreamWrapper.until_donez  s    }//111r/   c                    | j         j        S r5   r   r   s    r"   r   zJ_get_stream_wrapper.<locals>.MessageStreamWrapper.current_message_snapshot}  r   r/   N)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   r   r   r   s   r"   MessageStreamWrapperr  D  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> > >r/   r  c                  (    e Zd Zd Z fdZd ZdS )9_get_stream_wrapper.<locals>.MessagesStreamManagerWrapperc                    || _         d S r5   r   r   s     r"   r   zB_get_stream_wrapper.<locals>.MessagesStreamManagerWrapper.__init__  r   r/   c                r     di | j         | _         | j                                        fi | j         S r  )r   r  r  )r   r  r   s    r"   r  zC_get_stream_wrapper.<locals>.MessagesStreamManagerWrapper.__enter__  sE     / ? ?$, ? ?++DM,C,C,E,EVVVVVr/   c                $     | j         j        |  d S r5   )r  r  r   s     r"   r  zB_get_stream_wrapper.<locals>.MessagesStreamManagerWrapper.__exit__  r  r/   N)r   r   r   r   r  r  )r  r   s   r"   MessagesStreamManagerWrapperr    sW        & & &W W W W W W- - - - -r/   r"  r(   )	rB   rM   lowerr   r   rt   r>   rO   r   )r   r   r   rB   r   r  r"  r   r  r   r   s   `      @@@@r"   _get_stream_wrapperr$     s    #o..44666H&0 %'.    !, 5 !'0.! ! ! !  Y,>	> >	> >	> >	> >	> >	> >	> >	> >	> >	> >	>@
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 
	4 10;	> ;	> ;	> ;	> ;	> ;	> ;	> ;	> ;	> ;	> ;	>z		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- ,+r/   c                  .    e Zd ZU ded<   ded<   ded<   dS )r   zOptional[Mapping[str, Any]]metadatazOptional[list[str]]tagszOptional[ls_client.Client]r   N)r   r   r   __annotations__r(   r/   r"   r   r     s6         ))))&&&&&&r/   F)total)r   r   Optional[TracingExtra]c                  |pi }t          | j        j        dt          |          | j        _        t	          | j        j        d|          | j        _        t          | j        j        dt          |          | j        _        t          | d          rdt          | j	        d          rOt          | j	        j        d          r5t          | 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   betar3   r   )
r   r3   r   rt   r$  r   completionsr   hasattrr-  )r   r   s     r"   wrap_anthropicr0    s    ` "'RM)	 FO 1 FO
 !-!	! !F 	

FK,,

 FK((33


 '3K '	'
 '
# Mr/   )r   r   )r$   r%   r   r%   )r?   r%   )rP   r   rQ   rR   r   rR   )rm   r   r   r%   )ru   r%   r   r   )rm   r~   r   r%   )r   r   )
r   r	   r   rM   r   r	   r   r   r   r	   )r   r	   r   rM   r   r   r   r	   )r   r   r   r*  r   r   )4
__future__r   r   loggingcollections.abcr   r   r   typingr   r   r	   r
   r   r   pydanticr   typing_extensionsr   r   	langsmithr   	ls_clientr   langsmith.schemasr   r   httpxrB   r   r   r[   r   r   r   r   	getLoggerr   r9   	lru_cacher#   r>   rO   rl   rt   rq   r   r   r   r$  r   r0  r(   r/   r"   <module>r=     s   " " " " " "      < < < < < < < < < <                !           - - - - - - - - ) ) ) ) ) ) ! ! ! ! ! ! > > > > > > > > HLLL33333333GGGGGGGGGGGCu[*:C?@AAA		8	$	$    9 9 9 9   "# # # #L       $    # # # # %H %H %H %HPs, s, s, s,l' ' ' ' '9E ' ' ' ' JN N N N N N N N Nr/   