o
    ]+ i`?                     @  sv  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	rbd 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 dZ#e$e%Z&ej'dDddZ(dEddZ)dFddZ*dGdd Z+dHd#d$Z,dId'd(Z-dJd*d+Z.dKd.d/Z/dLd7d8Z0dMd:d;Z1G d<d6 d6ed=d>Z2dd?dNdBdCZ3dS )O    )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[tuple[type, ...]]c                  C  s0   zddl m} m} | |fW S  ty   Y d S w )Nr   NotGivenOmit)Zanthropic._typesr   r   ImportErrorr    r    i/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/langsmith/wrappers/_anthropic.py_get_not_given   s   
r"   ddictc              
     s   zt    r fdd|  D } W n ty, } ztd|  W Y d }~nd }~ww d| v rFd| d dg| dg  | d< | d dd |  D S )Nc                   s,   i | ]\} t  fd dD s| qS )c                 3  s    | ]}t  |V  qd S N)
isinstance).0tvr    r!   	<genexpr>/   s    z._strip_not_given.<locals>.<dictcomp>.<genexpr>)any)r'   kZ	not_givenr)   r!   
<dictcomp>,   s    z$_strip_not_given.<locals>.<dictcomp>zError stripping NotGiven: system)Zrolecontentmessagesc                 S     i | ]\}}|d ur||qS r%   r    r'   r-   r*   r    r    r!   r/   9       )r"   items	Exceptionloggererrorgetpop)r#   er    r.   r!   _strip_not_given)   s    



r=   kwargsc                   sp   t | }|d}|rt|tr|g}h d  fdd| D }dd|dd |dd |d	d ||d
S )Nstop>   Ztop_pZservice_tierZmcp_serversstreamZtop_kZthinkingc                   s   i | ]\}}| v r||qS r    r    r4   Zallowed_invocation_keysr    r!   r/   O   s    z$_infer_ls_params.<locals>.<dictcomp>	anthropicZchatmodelZtemperatureZ
max_tokens)Zls_providerZls_model_typeZls_model_nameZls_temperatureZls_max_tokensZls_stopZls_invocation_params)r=   r:   r&   strr6   )r>   strippedr?   Zinvocation_paramsr    rA   r!   _infer_ls_params<   s    





rF   eventr   current_snapshotMessage | Nonec                 C  s   zddl m} W n ty   td | Y S w |d u r.| jdkr%| jS td| j d| jdkrGt|}|	| j
 }|j| |S | jdkrh|j| j }|jd	krf| jjd
krf| j| jj7  _|S | jdkr}| jj|_| jj|_| jj|j_|S )Nr   )ContentBlockzError importing ContentBlockmessage_startzUnexpected event order, got z before "message_start"Zcontent_block_startZcontent_block_deltatextZ
text_deltaZmessage_delta)anthropic.typesrJ   r   r8   debugtypemessageRuntimeErrorr   Zvalidate_pythonZcontent_block
model_dumpr1   appendindexdeltarL   Zstop_reasonZstop_sequenceusageoutput_tokens)rG   rH   rJ   adapterZcontent_block_instancer1   r    r    r!   _accumulate_event^   s>   






rY   
all_chunksr   c                 C  s   d }| D ]*}zt ||d}W q ty. } ztd|  d| iW  Y d }~  S d }~ww |d u r7d| iS | }t|di |d< |dd  d|iS )N)rG   rH   z/Error accumulating event in Anthropic Wrapper: outputrV   usage_metadatarO   rP   )rY   rQ   r8   rN   rR   _create_usage_metadatar;   )rZ   Zfull_messagechunkr<   r#   r    r    r!   _reduce_chat_chunks   s   r_   anthropic_token_usager   c              
   C  sh   |  dpd}|  dpd}|| }d|  dd|  dd i}t|||td
i dd | D d	S )Ninput_tokensr   rW   Z
cache_readZcache_creation_input_tokensZcache_read_input_tokensc                 S  r3   r%   r    r4   r    r    r!   r/      r5   z*_create_usage_metadata.<locals>.<dictcomp>)ra   rW   total_tokensinput_token_detailsr    )r:   r   r   r6   )r`   ra   rW   rb   rc   r    r    r!   r]      s   
r]   list[Completion]c                 C  sd   g }| D ]}|j }|d ur|| qd|}| r)| d  }d|ig|d< |S dd|igi}|S )N rL   choices)
completionrS   joinrR   )rZ   Zall_contentr^   r1   r#   r    r    r!   _reduce_completions   s   

rj   outputsr   c              
   C  s|   z|   }|dd }|rt|nd |d< |dd  d|iW S  ty= } ztd|  d| iW  Y d }~S d }~ww )NrV   r\   rO   rP   z"Error processing chat completion: r[   )rR   r;   r]   BaseExceptionr8   rN   )rk   Zrdictr`   r<   r    r    r!   _process_chat_completion   s   

rm   original_creater   namerD   	reduce_fntracing_extraTracingExtrac                   sJ   t  fdd}t  fdd}tr#|S |S )Nc               	     sF   | d}tjd d|rnd tttd}|| i |}|S Nr@   llm)ro   run_typerp   process_inputsprocess_outputs_invocation_params_fnr    r:   r   	traceabler=   rm   rF   argsr>   r@   	decoratorresultro   rn   rp   rq   r    r!   create   s   


z_get_wrapper.<locals>.createc               	     sN   | d}tjd d|rnd tttd}|| i |I d H }|S rs   ry   r{   r   r    r!   acreate   s   

	z_get_wrapper.<locals>.acreate)	functoolswrapsr   is_async)rn   ro   rp   rq   r   r   r    r   r!   _get_wrapper   s
   r   original_streamc                   s   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d G  fd	d
d
}|S G fdddG fddd}|S )z;Create a wrapper for Anthropic's streaming context manager.r   Nasyncrt   )ro   rp   ru   rv   rx   )ro   ru   rv   rw   rx   c                      s   e Zd Zd'ddZefddZed(d
dZed)ddZd*ddZd+ fddZ	d,ddZ
d-ddZd-ddZd.ddZd/d d!Zd-d"d#Zed.d$d%Zd&S )0z6_get_stream_wrapper.<locals>.AsyncMessageStreamWrapperwrapped4anthropic.lib.streaming._messages.AsyncMessageStreamr   Nonec                 [     || _ || _d S r%   _wrapped_kwargsselfr   r>   r    r    r!   __init__     
z?_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.__init__c                        fdd}|di  j S )Nc                   sF    j j2 z	3 d H W }|V  q6 t } j  I d H }t||_d S r%   r   text_streamr   Zget_current_run_treeget_final_messagerm   rk   )_r^   run_treefinal_messager   r    r!   _text_stream  s   zX_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.text_stream.<locals>._text_streamr    r   r   r   configured_traceable_textr   r!   r     s   zB_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.text_streamhttpx.Responsec                 S     | j jS r%   r   responser   r    r    r!   r        z?_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.response
str | Nonec                 S  r   r%   r   
request_idr   r    r    r!   r   #  r   zA_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.request_idr   c                   s   |   }| I d H S r%   )	__aiter__	__anext__)r   aiterr    r    r!   r   '  s   z@_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.__anext__!AsyncIterator[MessageStreamEvent]c                  s<    fdd}|di  j 2 z	3 d H W }|V  q6 d S )Nc                    
    j  S r%   )r   r   r   r   r    r!   traced_iter,     
zU_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.__aiter__.<locals>.traced_iterr    r   )r   r   r^   configured_traceabler   r!   r   +  s   z@_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.__aiter__r   c                   s   | j  I d H  | S r%   )r   
__aenter__r   r    r    r!   r   3  s   zA_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.__aenter__c                      | j j| I d H  d S r%   )r   	__aexit__r   excr    r    r!   r   7     z@_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.__aexit__c                      | j  I d H  d S r%   r   closer   r    r    r!   r   :     z<_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.closer   c                      | j  I d H S r%   r   r   r   r    r    r!   r   =     zH_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.get_final_messagerD   c                   r   r%   r   get_final_textr   r    r    r!   r   @  r   zE_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.get_final_textc                   r   r%   r   
until_doner   r    r    r!   r   C  r   zA_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.until_donec                 S  r   r%   r   current_message_snapshotr   r    r    r!   r   F  r   zO_get_stream_wrapper.<locals>.AsyncMessageStreamWrapper.current_message_snapshotN)r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   rD   )__name__
__module____qualname__r   propertyr   r   r   r   r   r   r   r   r   r   r   r   r    r   r   r    r!   AsyncMessageStreamWrapper
  s$    







r   c                      *   e Zd Zdd Z fddZdd ZdS )z>_get_stream_wrapper.<locals>.AsyncMessagesStreamManagerWrapperc                 [  
   || _ d S r%   r   r   r>   r    r    r!   r   K     
zG_get_stream_wrapper.<locals>.AsyncMessagesStreamManagerWrapper.__init__c                   s6   di | j | _| j I d H } |fi | j S Nr    )r   _managerr   )r   r@   r   r   r    r!   r   N  s   zI_get_stream_wrapper.<locals>.AsyncMessagesStreamManagerWrapper.__aenter__c                   r   r%   )r   r   r   r    r    r!   r   S  r   zH_get_stream_wrapper.<locals>.AsyncMessagesStreamManagerWrapper.__aexit__N)r   r   r   r   r   r   r    r   r    r!   !AsyncMessagesStreamManagerWrapperJ  s    r   c                      s   e Zd Zd&ddZed'dd	Zed(ddZefddZd)ddZ fddZ	d*ddZ
d+ddZd+ddZd,ddZd-dd Zd+d!d"Zed,d#d$Zd%S ).z1_get_stream_wrapper.<locals>.MessageStreamWrapperr   /anthropic.lib.streaming._messages.MessageStreamr   r   c                 [  r   r%   r   r   r    r    r!   r   Z  r   z:_get_stream_wrapper.<locals>.MessageStreamWrapper.__init__r   c                 S  r   r%   r   r   r    r    r!   r   b  r   z:_get_stream_wrapper.<locals>.MessageStreamWrapper.responser   c                 S  r   r%   r   r   r    r    r!   r   f  r   z<_get_stream_wrapper.<locals>.MessageStreamWrapper.request_idc                   r   )Nc                  ;  s0     j jE d H  t } j  }t||_d S r%   r   )r   r   r   r   r    r!   r   l  s
   
zS_get_stream_wrapper.<locals>.MessageStreamWrapper.text_stream.<locals>._text_streamr    r   r   r   r   r!   r   j  s   z=_get_stream_wrapper.<locals>.MessageStreamWrapper.text_streamr   c                 S  s   |    S r%   )__iter____next__r   r    r    r!   r   u  s   z:_get_stream_wrapper.<locals>.MessageStreamWrapper.__next__c                   r   )Nc                    r   r%   )r   r   r   r   r    r!   r   y  r   zO_get_stream_wrapper.<locals>.MessageStreamWrapper.__iter__.<locals>.traced_iterr    r   )r   r   r   r   r!   r   x  s   z:_get_stream_wrapper.<locals>.MessageStreamWrapper.__iter__r   c                 S  s   | j   | S r%   )r   	__enter__r   r    r    r!   r     s   
z;_get_stream_wrapper.<locals>.MessageStreamWrapper.__enter__c                 W     | j j|  d S r%   )r   __exit__r   r    r    r!   r        z:_get_stream_wrapper.<locals>.MessageStreamWrapper.__exit__c                 S  s   | j   d S r%   r   r   r    r    r!   r     s   z7_get_stream_wrapper.<locals>.MessageStreamWrapper.closer   c                 S  
   | j  S r%   r   r   r    r    r!   r     r   zC_get_stream_wrapper.<locals>.MessageStreamWrapper.get_final_messagerD   c                 S  r   r%   r   r   r    r    r!   r     r   z@_get_stream_wrapper.<locals>.MessageStreamWrapper.get_final_textc                 S  r   r%   r   r   r    r    r!   r     r   z<_get_stream_wrapper.<locals>.MessageStreamWrapper.until_donec                 S  r   r%   r   r   r    r    r!   r     r   zJ_get_stream_wrapper.<locals>.MessageStreamWrapper.current_message_snapshotN)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    r   r    r!   MessageStreamWrapperY  s$    








r   c                      r   )z9_get_stream_wrapper.<locals>.MessagesStreamManagerWrapperc                 [  r   r%   r   r   r    r    r!   r     r   zB_get_stream_wrapper.<locals>.MessagesStreamManagerWrapper.__init__c                   s*   di | j | _ | j fi | j S r   )r   r   r   r   r   r   r    r!   r     s   zC_get_stream_wrapper.<locals>.MessagesStreamManagerWrapper.__enter__c                 W  r   r%   )r   r   r   r    r    r!   r     r   zB_get_stream_wrapper.<locals>.MessagesStreamManagerWrapper.__exit__N)r   r   r   r   r   r   r    r   r    r!   MessagesStreamManagerWrapper  s    r   r    )	rB   rD   lowerr   rz   r_   r=   rF   rm   )r   ro   rq   rB   r   r   r   r    )r   r   r   r   r   r!   _get_stream_wrapper   s6   	@=r   c                   @  s&   e Zd ZU ded< ded< ded< dS )rr   zOptional[Mapping[str, Any]]metadatazOptional[list[str]]tagszOptional[ls_client.Client]r   N)r   r   r   __annotations__r    r    r    r!   rr     s   
 F)total)rq   r   Optional[TracingExtra]c                C  s   |pi }t | jjdt|| j_t| jjd|| j_t | jjdt|| j_t| drCt| j	drCt| j	jdrCt | 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()

    ZChatAnthropicr   betar2   r   )
r   r2   r   r_   r   r@   Zcompletionsrj   hasattrr   )r   rq   r    r    r!   wrap_anthropic  s>   0

r   )r   r   )r#   r$   r   r$   )r>   r$   )rG   r   rH   rI   r   rI   )rZ   r   r   r$   )r`   r$   r   r   )rZ   rd   r   r$   )rk   r   )
rn   r   ro   rD   rp   r   rq   rr   r   r   )r   r   ro   rD   rq   rr   r   r   )r   r   rq   r   r   r   )4
__future__r   r   loggingcollections.abcr   r   r   typingr   r   r   r	   r
   r   Zpydanticr   Ztyping_extensionsr   r   Z	langsmithr   Z	ls_clientr   Zlangsmith.schemasr   r   ZhttpxrB   r   r   rM   r   r   r   r   	getLoggerr   r8   	lru_cacher"   r=   rF   rY   r_   r]   rj   rm   r   r   rr   r   r    r    r    r!   <module>   s<     	

	

"
&




( 7