o
    i`                     @   s   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dl	mZ d dlmZ d d	lmZ eeZed
i  defddZdeeef fddZdd Zdd Zdd Zdd Zdd ZdS )    N)config)handle_streamed_response)wrap_prompt_if_async_iterable)_retrieve_context)unwrap)wrap)
get_logger)ClaudeAgentSdkIntegrationclaude_agent_sdkreturnc                   C   s   t tddS )N__version__ )getattrr
    r   r   c/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/contrib/internal/claude_agent_sdk/patch.pyget_version   s   r   c                   C   s   ddiS )Nr
   z>=0.0.23r   r   r   r   r   _supported_versions   s   r   c           
   
   C   s   t j}t||\}}}|jddd}|r|d| z| |i |}	t||	|||ddW S  tyI   |jt	   |j
|||ddd |   w )	z6Trace the standalone query() async generator function.zclaude_agent_sdk.queryT)submit_to_llmobs_dd_prompt_wrapperquery)	operationNargskwargsresponser   )r
   _datadog_integrationr   trace_set_ctx_itemr   	Exceptionset_exc_infosysexc_infollmobs_set_tagsfinish)
func	_instancer   r   integrationwrapped_argswrapped_kwargsprompt_wrapperspanrespr   r   r   traced_query_async_generator   s"   r,   c           
   
      s   t |ddr| |i |I dH S tj}t||\}}}|jdd|d}|r,|d| t|I dH }	||||	d|_z| |i |I dH W S  tyf   |j	t
   |j|||dd	d
 |  d|_ w )zLTrace ClaudeSDKClient.query() - starts span, finished by receive_messages()._dd_internal_context_queryFNz&claude_agent_sdk.ClaudeSDKClient.queryT)r   instancer   )r*   r   r   before_contextrequestr   )r   r
   r   r   r   r   r   _dd_query_argsr   r   r    r!   r"   r#   )
r$   r.   r   r   r&   r'   r(   r)   r*   r/   r   r   r   traced_client_query5   s6   r2   c              
   C   s   t |ddr| |i |S tj}t |ddpi }|d}|d}|dp(i }|d}	d|_|	dur9|	|d	< |du rD| |i |S z| |i |}
t||
|||d
|dW S  tyt   |jt	   |j
|||dd
d |   w )zLTrace ClaudeSDKClient.receive_messages() - finishes span started by query().r-   Fr1   Nr*   r   r   r/   _dd_before_contextr0   )r   r.   r   )r   r
   r   getr1   r   r   r   r    r!   r"   r#   )r$   r.   r   r   r&   query_args_dictr*   
query_argsquery_kwargsr/   r+   r   r   r   traced_receive_messages[   s0   


r8   c                  C   sP   t tddrd S dt_ttjd} | t_tddt tddt tddt	 d S )	N_datadog_patchFT)integration_configr
   r   zClaudeSDKClient.queryz ClaudeSDKClient.receive_messages)
r   r
   r9   r	   r   r   r   r,   r2   r8   )r&   r   r   r   patch{   s   r;   c                   C   sF   t tddsd S dt_ttd ttjd ttjd ttd d S )Nr9   Fr   receive_messagesr   )r   r
   r9   r   ClaudeSDKClientdelattrr   r   r   r   unpatch   s   
r?   )r    r
   ddtracer   4ddtrace.contrib.internal.claude_agent_sdk._streamingr   r   /ddtrace.contrib.internal.claude_agent_sdk.utilsr   ddtrace.contrib.trace_utilsr   r   ddtrace.internal.loggerr   ddtrace.llmobs._integrationsr	   __name__log_addstrr   dictr   r,   r2   r8   r;   r?   r   r   r   r   <module>   s&    & 