
    `i                     "   d dl Z d dlZd dlmZ d dlmZ ddlmZm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mZ d d
lmZ erd dlmZmZmZ d dlmZ 	 d dlZd dlmZ n# e$ r  ed          w xY w	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZ	 	 	 	 ddZdS )     N)wraps)DidNotEnable   )ai_client_spanupdate_ai_client_span)SPANDATA)logger)BAGGAGE_HEADER_NAME)should_propagate_traceadd_sentry_baggage_to_headers)TYPE_CHECKING)AnyCallableOptional)Span)HostedMCPToolzOpenAI Agents not installedagentagents.Agentresponse_modelOptional[str]returnc                 x    |r5t          | dd          }|r$|                    t          j        |           dS dS dS )zESet the response model on the agent's invoke_agent span if available._sentry_agent_spanN)getattrset_datar   GEN_AI_RESPONSE_MODEL)r   r   
agent_spans      /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/sentry_sdk/integrations/openai_agents/patches/models.py!_set_response_model_on_agent_spanr      s_      PU$8$??
 	P >OOOOOP P	P 	P    hosted_toolr   spanr   c                    | j                             d          }|i }|| j         d<   | j                             d          }|sd S t          t          j                    |          rxt          j                                        |          D ]R\  }}t          j        d	                    |||                     |t          k    rt          ||           K|||<   Qd S d S )Nheaders
server_urlr"   zI[Tracing] Adding `{key}` header {value} to outgoing request to {mcp_url}.)keyvaluemcp_url)tool_configgetr   
sentry_sdk
get_clientget_current_scopeiter_trace_propagation_headersr	   debugformatr
   r   )r!   r"   r$   r)   r'   r(   s         r   !_inject_trace_propagation_headersr2   )   s    %)))44G-4	*%)),77G j355w?? % )++JJPTJUU	% 	% 
L[bb5' c    
 )))-gu====$% %	% 	%r    original_get_modelCallable[..., Any]c                 |     t          t           d          r j        n           	 	 	 	 	 	 	 	 d fd
            }|S )z|
    Wraps the agents.Runner._get_model method to wrap the get_response method of the model to create a AI client span.
    __func__clsagents.Runnerr   r   
run_configagents.RunConfigr   agents.Modelc                   	
 t          j          |                    }t          |d          r|j        nt          |          }|_        t          |d          r*|j        t                    dfd            }||_        |j        	t          	          d	fd            }||_        t          |d	          r*|j        
t          
          d
fd
            }||_        |S )Nmodel_fetch_responseargsr   kwargsr   c                     K    | i | d {V }t          |d          r |j        rt          |j                  _        |S )Nr=   )hasattrr=   str_sentry_response_model)r?   r@   responser   original_fetch_responses      r   wrapped_fetch_responsezT_create_get_model_wrapper.<locals>.wrapped_get_model.<locals>.wrapped_fetch_response`   sb      !8!8$!I&!I!IIIIIII8W-- G(. G36x~3F3FE0r    c                  x  K   |                     d          }g }|d |D             }t          |          5 }|D ]}t          ||            	| i | d {V }t          dd           }|rt	          d           t          |           t          |||           d d d            n# 1 swxY w Y   |S )Ntoolsc                 <    g | ]}t          |t                    |S  
isinstancer   .0tools     r   
<listcomp>zf_create_get_model_wrapper.<locals>.wrapped_get_model.<locals>.wrapped_get_response.<locals>.<listcomp>p   s7          !*T=2Q2Q      r    r&   rD   )r+   r   r2   r   delattrr   r   )
r?   r@   	mcp_toolshosted_toolsr"   r!   resultr   r   original_get_responses
           r   wrapped_get_responsezR_create_get_model_wrapper.<locals>.wrapped_get_model.<locals>.wrapped_get_responsek   s[     

7++IL$   %.       v.. K$#/ N NK5kMMMMM44dEfEEEEEEEE ")0H$!O!O! =E#;<<<1%HHH%dFNEJJJK K K K K K K K K K K K K K K Ms   A*B//B36B3stream_responsec                 t  K   t          |          }t          |           dk    r| d         |d<   t          |           dk    r| d         |d<   g }t          |           dk    r| d         }|d |D             }t          |          5 }|D ]}t          ||           |                    t
          j        d           d }d	}t          j                    }	 | i |2 3 d {V }
|sHt          |
d
          r8t          j                    |	z
  }|                    t
          j
        |           d}t          |
d          r|
j        }|
W V  n6 |rOt          |d          r|j        rt          |j                  nd }t          |           t          |||           d d d            d S # 1 swxY w Y   d S )Nr   system_instructions   input   c                 <    g | ]}t          |t                    |S rK   rL   rN   s     r   rQ   zi_create_get_model_wrapper.<locals>.wrapped_get_model.<locals>.wrapped_stream_response.<locals>.<listcomp>   s8     ( ( ( $)$>>( ( ( (r    r&   TFdeltarE   r=   )dictlenr   r2   r   r   GEN_AI_RESPONSE_STREAMINGtimeperf_counterrB   #GEN_AI_RESPONSE_TIME_TO_FIRST_TOKENrE   r=   rC   r   r   )r?   r@   span_kwargsrT   rS   r"   r!   streaming_responsettft_recorded
start_timeeventttftr   r   original_stream_responses                r   wrapped_stream_responsezU_create_get_model_wrapper.<locals>.wrapped_get_model.<locals>.wrapped_stream_response   s      #6llt99q==9=aK 56t99q==+/7K(!t99q== $QI ,( ((1( ( ( $E;77 $4'3 R R9+DQQQQQMM("DdKKK)-&$)M!%!2!4!4J'?'?'P'P'P $ $ $ $ $ $ $e, 11H1H 1#'#4#6#6#CD MM ( Ld   -1M #5*55 @16.# (Q * 
  ''97CC& 2 8&C 2 8999 "&	 ' :%PPP- "4ne  E$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s    
AF- E&B:F--F14F1)r?   r   r@   r   r   r   )	copyrB   r=   rC   _sentry_request_modelr>   r   get_responserX   )r7   r   r9   r=   request_model_namerG   rW   rm   rF   rV   rl   r3   s    `      @@@r   wrapped_get_modelz4_create_get_model_wrapper.<locals>.wrapped_get_modelL   s_    	,,UJ??@@ -4E7,C,CSU[[U&8# 5+,, 
	;&+&;#*++            ,+  %;E! % 2	$	%	%	 	 	 	 	 	 
&	%	0 2 5+,, >	<','<$+,,8 8 8 8 8 8 -,8t %<E!r    )r7   r8   r   r   r9   r:   r   r;   )r   rB   r6   )r3   rr   s   ` r   _create_get_model_wrapperrs   E   s     %z22	 ## 
vv%3vASv	v v v v v 
vp r    )r   r   r   r   r   N)r!   r   r"   r   r   N)r3   r4   r   r4   ) rn   rc   	functoolsr   sentry_sdk.integrationsr   spansr   r   r,   sentry_sdk.constsr   sentry_sdk.utilsr	   sentry_sdk.tracingr
   sentry_sdk.tracing_utilsr   r   typingr   r   r   r   r   agentsagents.toolr   ImportErrorr   r2   rs   rK   r    r   <module>r      s           0 0 0 0 0 0 9 9 9 9 9 9 9 9     & & & & & & # # # # # # 2 2 2 2 2 2       
 !           (..........''''''6MMM))))))) 6 6 6
,4
5
556PP+:P	P P P P% %(.%	% % % %8D,DD D D D D Ds   
A A0