
    `i              	          U d dl Z d dlZd dlZ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Zd dlmZ d dlmZmZmZmZmZmZ d dlmZmZ d dlmZmZ d d	lmZ d d
lmZmZ d dl m!Z!m"Z" e
r&d dl	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. d dl/m0Z0 	 d dl1m2Z2 d dl3m4Z4m5Z5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z; n# e<$ r  ed          w xY w	 d dl=m>Z> n # e<$ r 	 d dl?m>Z> n# e<$ r dZ>Y nw xY wY nw xY w	 d dl@mAZA n# e<$ r dZAY nw xY w	 d dl@mBZB n# e<$ r dZBY nw xY w	 d dlCmDZD n# e<$ r dZDY nw xY w	 d dlEmFZF n# e<$ r dZFY nw xY w	 d dlGmHZH n# e<$ r dZHY nw xY w	 d dlImJZJ n# e<$ r dZJY nw xY w	 d dlKmLZL n# e<$ r dZLY nw xY w	 d dlMmNZN n# e<$ r dZNY nw xY wejO        ejP        ejQ        ejR        ejS        ejP        ejT        ejU        dZV	 	 	 	 dYd"ZWdZd%ZX e jY        d&d'          ZZd(e[d)<   d[d,Z\d\d-Z]d\d.Z^d]d2Z_	 	 	 	 d^d5Z` G d6 d7e          Za G d8 d9          Zb G d: d;e4          Zc	 	 	 	 d_d>Zd	 	 	 	 d`d@ZedadCZfdbdGZg	 	 	 	 	 	 	 	 dcdKZhdddNZidedOZjdfdRZkdfdSZldfdTZmdgdVZndfdWZodfdXZpdS )h    N)OrderedDictwraps)TYPE_CHECKING)set_ai_pipeline_name)GEN_AI_ALLOWED_MESSAGE_ROLESget_start_span_functionnormalize_message_rolesset_data_normalizedtruncate_and_annotate_messagestransform_content_part)OPSPANDATA)DidNotEnableIntegration)should_send_default_pii)
_get_valueset_span_errored)capture_internal_exceptionslogger)AnyAsyncIteratorCallableDictIteratorListOptionalUnion)UUID)Span)TextPart)AgentFinish)BaseCallbackHandlerBaseCallbackManager	Callbacksmanager)BaseMessage)	LLMResultzlangchain not installed)AgentExecutor)OpenAIEmbeddings)AzureOpenAIEmbeddings)VertexAIEmbeddings)BedrockEmbeddings)CohereEmbeddings)MistralAIEmbeddings)HuggingFaceEmbeddings)OllamaEmbeddings)frequency_penaltyfunction_call
max_tokenspresence_penaltytemperature
tool_callstop_ktop_pcontent_blockDict[str, Any]returnc                 ,    t          |           }||n| S )z
    Transform a LangChain content block using the shared transform_content_part function.

    Returns the original content block if transformation is not applicable
    (e.g., for text blocks or unrecognized formats).
    )r   )r:   results     u/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/sentry_sdk/integrations/langchain.py"_transform_langchain_content_blockr@   {   s      $M22F'66]:    contentr   c                    t          | t                    r| S t          | t          t          f          rVg }| D ]O}t          |t                    r#|                    t          |                     :|                    |           P|S | S )zk
    Transform LangChain message content, handling both string content and
    list of content blocks.
    )
isinstancestrlisttupledictappendr@   )rB   transformedblocks      r?   $_transform_langchain_message_contentrL      s    
 '3 'D%=))  	* 	*E%&& *""#Ee#L#LMMMM""5))))NrA   langchain_agent_stack)defaultz5contextvars.ContextVar[Optional[List[Optional[str]]]]_agent_stack
agent_nameOptional[str]c                     t                                           }|g }n|                                }|                    |            t                               |           dS )z"Push an agent name onto the stack.N)rO   getcopyrI   set)rP   stacks     r?   _push_agentrW      sZ    E} 

	LLUrA   c                      t                                           } | rD|                                 } |                                 }t                               |            |S dS )z/Pop an agent name from the stack and return it.N)rO   rS   rT   poprU   )rV   rP   s     r?   
_pop_agentrZ      sT    E 

YY[[
4rA   c                  L    t                                           } | r| d         S dS )z>Get the current agent name (top of stack) without removing it.N)rO   rS   )rV   s    r?   _get_current_agentr]      s*    E Ry4rA   messagesList[List[BaseMessage]]	List[str]c                 4   g }| D ]}|D ]
}|j         dk    r5t          |j        t                    r|                    |j                   C|j         dk    rt          |j        t
                    r|j        D ]}t          |t                    r|                    |           -t          |t                    rX|                    d          dk    r?|                    d          }t          |t                    r|                    |           |S )Nsystemtypetext)rc   rD   rB   rE   rI   rF   rH   rS   )r^   system_instructionslist_messageiteminstructions         r?   _get_system_instructionsrj      s-    D D 	D 	DG|x''Jw,L,L'#**7?;;;;))j$.O.O)#O D DD!$,, D+2248888#D$// DDHHV4D4D4N4N&*hhv&6&6%k377 D/66{CCC	D rA   re   List[TextPart]c                     d | D             S )Nc                     g | ]}d |dS )rd   )rc   rB    ).0ri   s     r?   
<listcomp>z2_transform_system_instructions.<locals>.<listcomp>   s7       
  "	
 	
  rA   rn   )re   s    r?   _transform_system_instructionsrq      s%     
 /   rA   c            	       R    e Zd ZdZde Z	 	 ddd deddd	dfd
Zedd            ZdS )LangchainIntegration	langchainzauto.ai.TNselfinclude_prompts	max_spansOptional[int]r<   c                 b    || _         || _        |t          j        dt          d           d S d S )NzsThe `max_spans` parameter of `LangchainIntegration` is deprecated and will be removed in version 3.0 of sentry-sdk.   )
stacklevel)rv   rw   warningswarnDeprecationWarning)ru   rv   rw   s      r?   __init__zLangchainIntegration.__init__   sP    
  /" MO"	      ! rA   c                  &   t          t          j                  t          _        t          Ft	          t          j                  t          _        t          t          j                  t          _        t          t                     t          t                     t          t                     t          t                     t          t                     t          t                     t          t                     t          t                      d S N)_wrap_configurer&   
_configurer)   _wrap_agent_executor_invokeinvoke_wrap_agent_executor_streamstream_patch_embeddings_providerr*   r+   r,   r-   r.   r/   r0   r1   rn   rA   r?   
setup_oncezLangchainIntegration.setup_once   s    ,W-?@@$#>}?S#T#TM #>}?S#T#TM  	##3444"#8999"#5666"#4555"#3444"#6777"#8999"#344444rA   )TNr<   N)	__name__
__module____qualname__
identifieroriginboolr   staticmethodr   rn   rA   r?   rs   rs      s        J$
$$F !%%) $ # 
	     5 5 5 \5 5 5rA   rs   c                   B    e Zd ZU dZded<   g Zded<   dZeed<   d
d	ZdS )WatchedSpanNr    spanzList[WatchedSpan]childrenFis_pipeliner<   c                     || _         d S r   )r   )ru   r   s     r?   r   zWatchedSpan.__init__  s    			rA   )r   r    r<   N)	r   r   r   r   __annotations__r   r   r   r   rn   rA   r?   r   r     s[         D&$&H!&&&K     rA   r   c                      e Zd ZdZdddeddfdZd8dZd9dZd:dZ	 	 	 	 	 	 	 	 	 	 d;dZ		 	 	 	 	 	 	 	 d<dZ
dddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d=d$Z	 	 	 	 	 	 	 	 	 	 	 	 d>d'Z	 	 	 	 	 	 	 	 	 	 d?d*Z	 	 	 	 	 	 	 	 	 	 d?d+Z	 	 	 	 	 	 	 	 	 	 d@d-Z	 	 	 	 	 	 	 	 	 	 d@d.Z	 	 	 	 	 	 	 	 	 	 dAd1Zdd ddd2ed	d
ddddfd3Zdd d4ed	d
ddddf
d5Z	 	 	 	 	 	 	 	 	 	 dBd7ZdS )CSentryLangchainCallbackz+Callback handler that creates Sentry spans.max_span_map_sizerx   rv   r<   Nc                 H    t                      | _        || _        || _        d S r   )r   span_mapr   rv   )ru   r   rv   s      r?   r   z SentryLangchainCallback.__init__  s&     ;F--!2.rA   c                     | j         pt          | j                  | j         k    rU| j                            d          \  }}|                     ||           t          | j                  | j         k    Qd S d S d S )NF)last)r   lenr   popitem
_exit_span)ru   run_idwatched_spans      r?   gc_span_mapz#SentryLangchainCallback.gc_span_map  s    !-dm$$t'==='+}'<'<%'<'H'H$f555 dm$$t'===== .-==rA   r   r   errorr   c                 >   t                      5  |r	|| j        vr	 d d d            d S | j        |         }|j        }t          |           t	          j        ||j                   |                    d d d            | j        |= d d d            d S # 1 swxY w Y   d S r   )r   r   r   r   
sentry_sdkcapture_exceptionscope__exit__)ru   r   r   	span_datar   s        r?   _handle_errorz%SentryLangchainCallback._handle_error$  s	   (** 	& 	& V4=88	& 	& 	& 	& 	& 	& 	& 	& f-I>DT"""(
;;;MM$d+++f%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   BABBBrg   r'   c                 v    t          |j                  }|j        |d}|                    |j                   |S )NrolerB   )rL   rB   rc   updateadditional_kwargs)ru   rg   transformed_contentparseds       r?   _normalize_langchain_messagez4SentryLangchainCallback._normalize_langchain_message2  s<    B7?SS!,3FGGg/000rA   ru   	parent_idOptional[Any]kwargsr   c                 f   d }|rU| j                             |          }|r9t           |j        j        di |          }|j                            |           |t          t          j        di |          }|j        	                                 || j         |<   | 
                                 |S )Nrn   )r   rS   r   r   start_childr   rI   r   
start_span	__enter__r   )ru   r   r   r   r   parent_spans         r?   _create_spanz$SentryLangchainCallback._create_span9  s     15 	:37=3D3DY3O3OK :*+G;+;+G+Q+Q&+Q+QRR$++L999&z'<'F'Fv'F'FGGL##%%% ,frA   r   c                 z    |j         rt          d            |j                            d d d            | j        |= d S r   )r   r   r   r   r   )ru   r   r   s      r?   r   z"SentryLangchainCallback._exit_spanN  sG       	' &&&dD111M&!!!rA   )tagsparent_run_idmetadata
serializedr;   promptsr`   r   Optional[List[str]]r   Optional[UUID]r   Optional[Dict[str, Any]]c          	         t                      5  |s	 ddd           dS |                    di           }|                    |                    di                      |                    d          p+|                    d          p|                    d          pd}	|                     ||t          j        |                    d          pd	t          j        
          }
|
j        }|	r |	                    t          j        |	           |                    dd          }d|v r!|	                    t          j        d           n$d|v r |	                    t          j        d           t                                          D ]*\  }}||v r!||         t          ||||         d           +t!          ||                    d                     t#                      rV| j        rOd |D             }t'          j                    }t+          |||          }|t          |t          j        |d           ddd           dS # 1 swxY w Y   dS )zRun when LLM starts running.Ninvocation_paramsr   model
model_namemodel_id namezLangchain LLM callopr   r   _type	anthropicopenaiFunpacktoolsc                 2    g | ]}t           j        d |ddS )rd   )rc   rd   r   )r   USER)ro   prompts     r?   rp   z8SentryLangchainCallback.on_llm_start.<locals>.<listcomp>  sB     ' ' '
  != A,2F#C#C ' ' 'rA   )r   rS   r   r   r   GEN_AI_PIPELINErs   r   r   set_datar   GEN_AI_REQUEST_MODELGEN_AI_SYSTEMDATA_FIELDSitemsr   _set_tools_on_spanr   rv   r   get_current_scoper   GEN_AI_REQUEST_MESSAGES)ru   r   r   r   r   r   r   r   
all_paramsr   r   r   ai_typekey	attributenormalized_messagesr   messages_datas                     r?   on_llm_startz$SentryLangchainCallback.on_llm_startW  s    )** ;	 ;	 ;	 ;	 ;	 ;	 ;	 ;	 ;	 ;	  $7<<JjnnXr::;;; w'' >>,//>>*-- 	   ,,%ZZ''?+?+2 -  L  $D 1  
 !nnWb11Gg%%h4kBBBBW$$h4h???"-"3"3"5"5 X XY*$$C)D'iCQVWWWWtZ^^G%<%<===&(( T-A ' '
 #*' ' '# #466 >'u! ! !,' 8%$	   m;	 ;	 ;	 ;	 ;	 ;	 ;	 ;	 ;	 ;	 ;	 ;	 ;	 ;	 ;	 ;	 ;	 ;	s   IHII
Ir^   r_   c          	         t                      5  |s	 ddd           dS |                    di           }|                    |                    di                      |                    d          p+|                    d          p|                    d          pd}|                     ||                    d          t          j        d	|                                 t          j        
          }|j	        }|
                    t          j        d           |r |
                    t          j        |           |                    dd          }	d|	v r!|
                    t          j        d           n$d|	v r |
                    t          j        d           t                      }
|
r |
                    t          j        |
           t"                                          D ]*\  }}||v r!||         t'          ||||         d           +t)          ||                    d                     t+                      r| j        rt/          |          }t1          |          dk    r?|
                    t          j        t5          j        t9          |                               g }|D ];}|D ]6}|j        dk    r|                    |                     |                     7<tA          |          }tC          j"                    }tG          |||          }|t'          |t          j$        |d           ddd           dS # 1 swxY w Y   dS )z#Run when Chat Model starts running.Nr   r   r   r   r   r   r   zchat r   chatr   r   r   Fr   r   r   rb   )%r   rS   r   r   r   GEN_AI_CHATstriprs   r   r   r   r   GEN_AI_OPERATION_NAMEr   r   r]   GEN_AI_AGENT_NAMEr   r   r   r   r   rv   rj   r   GEN_AI_SYSTEM_INSTRUCTIONSjsondumpsrq   rc   rI   r   r
   r   r   r   r   )ru   r   r^   r   r   r   r   r   r   r   rP   r   r   re   r   rf   rg   r   r   s                      r?   on_chat_model_startz+SentryLangchainCallback.on_chat_model_start  s    )** G	 G	 G	 G	 G	 G	 G	 G	 G	 G	  $7<<JjnnXr::;;; w'' >>,//>>*-- 	   ,,

?++>$U__**,,+2 -  L  $DMM(8&AAA Dh;UCCC nnWb11Gg%%h4kBBBBW$$h4h???+--J Fh8*EEE"-"3"3"5"5 X XY*$$C)D'iCQVWWWWtZ^^G%<%<===&(( T-A &>x&H&H#*++a//MM ;
#ABU#V#VWW  
 ')#%  E#(  "<833$+22 ==gFF   	 '>>Q&R&R#"466 >'u! ! !,' 8%$	   EG	 G	 G	 G	 G	 G	 G	 G	 G	 G	 G	 G	 G	 G	 G	 G	 G	 G	s   M
LM

MMresponser(   c                x   t                      5  |r	|| j        vr	 ddd           dS | j        |         }|j        }t                      r1| j        r*t          |t          j        d |j        D                        t          ||           | 
                    ||           ddd           dS # 1 swxY w Y   dS )z!Run when Chat Model ends running.Nc                 &    g | ]}d  |D             S )c                     g | ]	}|j         
S rn   rd   ro   xs     r?   rp   zHSentryLangchainCallback.on_chat_model_end.<locals>.<listcomp>.<listcomp>      ,,,af,,,rA   rn   ro   rf   s     r?   rp   z=SentryLangchainCallback.on_chat_model_end.<locals>.<listcomp>  '    OOO,,e,,,OOOrA   )r   r   r   r   rv   r   r   GEN_AI_RESPONSE_TEXTgenerations_record_token_usager   )ru   r   r   r   r   r   s         r?   on_chat_model_endz)SentryLangchainCallback.on_chat_model_end  s5    )** 	/ 	/ V4=88	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ f-I>D&(( T-A #1OO(:NOOO    h///OOIv...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   B/A9B//B36B3c                   t                      5  |r	|| j        vr	 ddd           dS | j        |         }|j        }	 |j        d         d         }n# t          $ r d}Y nw xY w|	 |j        j                            d          }| |                    t          j
        |           n# t          $ r Y nw xY w	 |j                            d          }| |                    t          j        |           n# t          $ r Y nw xY w	 t                      rB| j        r;t!          |j        dd          }	|	#|	g k    rt#          |t          j        |	d           n# t          $ r Y nw xY wt                      r1| j        r*t#          |t          j        d |j        D                        t)          ||           |                     ||           ddd           dS # 1 swxY w Y   dS )	zRun when LLM ends running.Nr   r   finish_reasonr7   Fr   c                 &    g | ]}d  |D             S )c                     g | ]	}|j         
S rn   r   r   s     r?   rp   zASentryLangchainCallback.on_llm_end.<locals>.<listcomp>.<listcomp>C  r   rA   rn   r   s     r?   rp   z6SentryLangchainCallback.on_llm_end.<locals>.<listcomp>C  r   rA   )r   r   r   r   
IndexErrorrg   response_metadatarS   r   r   GEN_AI_RESPONSE_MODELAttributeErrorgeneration_infoGEN_AI_RESPONSE_FINISH_REASONSr   rv   getattrr   GEN_AI_RESPONSE_TOOL_CALLSr   r   r   )
ru   r   r   r   r   r   
generationresponse_modelr  r7   s
             r?   
on_llm_endz"SentryLangchainCallback.on_llm_end  s    )** 4	/ 4	/ V4=884	/ 4	/ 4	/ 4	/ 4	/ 4	/ 4	/ 4	/ f-I>D"%1!4Q7

 " " "!


" %%/%7%I%M%M$& &N &1h&DnUUU%   D$.$>$B$B?$S$SM$0$C]   &   D.00 T5I %,Z-?t%T%T
%1jB6F6F/ $ ( C *',	    &   D '(( T-A #1OO(:NOOO    h///OOIv...i4	/ 4	/ 4	/ 4	/ 4	/ 4	/ 4	/ 4	/ 4	/ 4	/ 4	/ 4	/ 4	/ 4	/ 4	/ 4	/ 4	/ 4	/s   GGAGA!G A!!G(AB*)G*
B74G6B77G;<C87G8
DGDG	AEG
E'$G&E''A(GG #G #Union[Exception, KeyboardInterrupt]c                2    |                      ||           dS )zRun when LLM errors.Nr   ru   r   r   r   s       r?   on_llm_errorz$SentryLangchainCallback.on_llm_errorI        	65)))))rA   c                2    |                      ||           dS )zRun when Chat Model errors.Nr  r  s       r?   on_chat_model_errorz+SentryLangchainCallback.on_chat_model_errorS  r  rA   finishr"   c                h   t                      5  |r	|| j        vr	 d d d            d S | j        |         }|j        }t                      r9| j        r2t          |t          j        |j        	                                           | 
                    ||           d d d            d S # 1 swxY w Y   d S r   )r   r   r   r   rv   r   r   r   return_valuesr   r   )ru   r  r   r   r   r   s         r?   on_agent_finishz'SentryLangchainCallback.on_agent_finish]  s!    )** 	/ 	/ V4=88	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ f-I>D&(( T-A #(79M9S9S9U9U   OOIv...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   B'A1B''B+.B+	input_strc          	      ^   t                      5  |s	 ddd           dS |                    d          p|                    d          pd}|                     ||                    d          t          j        d|                                 t          j                  }|j        }|	                    t          j        d           |	                    t          j        |           |                    d          }| |	                    t          j        |           t                      }	|	r |	                    t          j        |	           t!                      r7| j        r0t%          |t          j        |                    d	|g                     ddd           dS # 1 swxY w Y   dS )
zRun when tool starts running.Nr   r   r   zexecute_tool r   execute_tooldescriptioninputs)r   rS   r   r   GEN_AI_EXECUTE_TOOLr   rs   r   r   r   r   r   GEN_AI_TOOL_NAMEGEN_AI_TOOL_DESCRIPTIONr]   r   r   rv   r   GEN_AI_TOOL_INPUT)
ru   r   r  r   r   	tool_namer   r   tool_descriptionrP   s
             r?   on_tool_startz%SentryLangchainCallback.on_tool_startr  s    )** 	 	 	 	 	 	 	 	 	 	 #v..J&**V2D2DJI,,

?++)0Y006688+2 -  L  $DMM(8.IIIMM(3Y???)~~m<<+h>@PQQQ+--J Fh8*EEE&(( T-A #.JJx)55  7	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   F"E5F""F&)F&outputc                :   t                      5  |r	|| j        vr	 ddd           dS | j        |         }|j        }t                      r"| j        rt          |t          j        |           |                     ||           ddd           dS # 1 swxY w Y   dS )zRun when tool ends running.N)	r   r   r   r   rv   r   r   GEN_AI_TOOL_OUTPUTr   )ru   r)  r   r   r   r   s         r?   on_tool_endz#SentryLangchainCallback.on_tool_end  s    )** 
	/ 
	/ V4=88
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ f-I>D&(( OT-A O#D(*EvNNNOOIv...
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/ 
	/s   BABBBargsc                2    |                      ||           dS )zRun when tool errors.Nr  )ru   r   r   r-  r   s        r?   on_tool_errorz%SentryLangchainCallback.on_tool_error  r  rA   r   )r   r   r   r   r<   N)rg   r'   r<   r   )
ru   r   r   r   r   r   r   r   r<   r   )ru   r   r   r   r   r   r<   N)ru   r   r   r;   r   r`   r   r   r   r   r   r   r   r   r   r   r<   r   )ru   r   r   r;   r^   r_   r   r   r   r   r<   r   )
ru   r   r   r(   r   r   r   r   r<   r   )
ru   r   r   r  r   r   r   r   r<   r   )
ru   r   r  r"   r   r   r   r   r<   r   )
r   r   r-  r  r   r   r   r   r<   r   )r   r   r   __doc__r   r   r   r   r   r   r   r   r   r  r  r  r  r  rE   r(  r,  r/  rn   rA   r?   r   r     s       55/!0/CG/	/ / / /6 6 6 6& & & &   ' # 	
 
   *"'"4A"KQ"	" " " " '+*./3G G'G$G G
 G $G (G -G G 
G G G GRP'P$P ,P
 P P 
P P P Pd/'// 	/
 / 
/ / / /2</'</</ 	</
 </ 
</ </ </ </|*'*4* 	*
 * 
* * * **'*4* 	*
 * 
* * * */'// 	/
 / 
/ / / /*('($( (
 ( ( 
( ( ( (T/'/14/AG/SX/	/ / / / *(* 5* 	*
 * 
* * * * * *rA   r   token_usage2tuple[Optional[int], Optional[int], Optional[int]]c                     | sdS t          | d          pt          | d          }t          | d          pt          | d          }t          | d          }|||fS )NNNNprompt_tokensinput_tokenscompletion_tokensoutput_tokenstotal_tokensr   )r1  r6  r8  r9  s       r?   _extract_tokensr;    s       k?;; z^@ @L {,?@@ J_E EM k>::L44rA   r   c                     | sdS d}d}d}| D ]D}|D ]?}t          |          }t          |          \  }}}	|||ndz  }|||ndz  }||	|	ndz  }@E|dk    r|nd|dk    r|nd|dk    r|ndfS )z8Extract token usage from response.generations structure.r4  r   N)_get_token_usager;  )
r   total_inputtotal_outputtotal_totalgen_listgenr1  r6  r8  r9  s
             r?    _extract_tokens_from_generationsrC    s       KLK K K 	K 	KC*3//K8G8T8T5L-<+C<<JK]-FMMAML<+C<<JKK	K #QD$q((d"QD rA   objr   c                     d}t          | d          }||D ]}t          ||          }||c S t          | d          }||D ]}t          ||          }||c S |D ]}t          | |          }||c S dS )zM
    Check multiple paths to extract token usage from different objects.
    )usager1  usage_metadatarg   N
llm_outputr:  )rD  possible_namesrg   r   rF  rH  s         r?   r=  r=    s     @Ni((G" 	 	Dw--E  ! C..J" 	 	Dz400E  !   3%%LLL  4rA   r   r    r   c                 P   t          |          }|rt          |          \  }}}nt          |j                  \  }}}| |                     t
          j        |           | |                     t
          j        |           |"|                     t
          j        |           d S d S r   )	r=  r;  rC  r   r   r   GEN_AI_USAGE_INPUT_TOKENSGEN_AI_USAGE_OUTPUT_TOKENSGEN_AI_USAGE_TOTAL_TOKENS)r   r   r1  r6  r8  r9  s         r?   r   r     s    "8,,K 
4CK4P4P1m\\4T 5
 5
1m\ h8,GGG h9=IIIh8,GGGGG  rA   r-  r   )tuple[Optional[str], Optional[List[Any]]]c                    t          | dd          }t          |dd          }t          |di           }t          | dd          p:t          |dd          p)|                    d          p|                    d          }|rt          |          dk    r|nd}	 d}t          |          dk    r|d                             d	          }||                    d	          }n# t          $ r Y nw xY w||fS )
z?
    Get the agent name and available tools for the agent.
    agentNrunnableconfigr   available_toolsr      run_name)r  rS   r   	Exception)rD  r-  r   rP  rQ  runnable_configr   rP   s           r?   _get_request_datarX    s!    C$''Euj$//Hh"55OWd## 	25'4((	2w''	2 011	 
 7s5zzA~~EE4E
t99q==aZ00J(,,Z88J    s   AC" "
C/.C/r   Optional[List[Any]]c           	         | sdS t          | t          t          f          sdS g }| D ]2}	 t          |t                    r9d|v rmt          |d         t                    rR|d         }|                    d          |                    d          d}|d         r|                    |           nd|v rB|                    d          |                    d          d}|                    |           nP|                    d          p)|                    d          p|                    d          }|r@|                    ||                    d          p|                    d          d           nt          |d          rRt          |dd          t          |dd          pt          |dd          d}|d         r|                    |           nlt          |d	          r-|                    |j        t          |d
d          d           n/t          |          }|r|dk    r|                    |dd           ## t          $ r Y 0w xY w|r|ndS )z/Parse and simplify tools into a cleaner format.Nfunctionr   r   )r   r   r&  function_namedescr   r0  r   )rD   rF   rG   rH   rS   rI   hasattrr  r   rE   rV  )r   simplified_toolstoolfuncsimplified_toolr   tool_strs          r?   _simplify_langchain_toolsrd  .  s    tedE]++ t 3 32	$%% /U%%*T*5Et*L*L%
+D $ 0 0'+xx'>'>' 'O 'v. A(//@@@t^^ $ 0 0'+xx'>'>' 'O %++O<<<< (( 588K00588O44 
  (//(,/3xx/F/F 04#'88F#3#3    v&& U#D&$77#*4#E#E $3tVT22# #
 #6* =$++O<<<z** 
U '' $'.tY'E'E     t99 UB$++Xd,S,STTT 	 	 	H	  09T9s   HI


IIc                 n    |0t          |          }|r!t          | t          j        |d           dS dS dS )z9Set available tools data on a span if tools are provided.NFr   )rd  r   r   GEN_AI_REQUEST_AVAILABLE_TOOLS)r   r   r_  s      r?   r   r   o  s`    4U;; 	7 	      	 	rA   fCallable[..., Any]c                 f     t                     	 	 d
dt          ddddddddddf fd	            }|S )Ncallback_manager_clsinheritable_callbacksr%   local_callbacksr-  r   r   r<   c                 .   t          j                                        t                    }| 	| ||g|R i |S |pg }t	          |t
                    r|j        }nTt	          |t                    r|g}n;t	          |t                    r|}n#t          j
        d|            	| ||g|R i |S t	          |t
                    r|j        }nt	          |t                    r|}ng }t          d t          j        ||          D                       stt          |j        |j                  }t	          |t
                    r%|                                }g |j        ||_        n t	          |t                    r||g}ng ||} 	| ||g|R i |S )NzUnknown callback type: %sc              3   @   K   | ]}t          |t                    V  d S r   )rD   r   )ro   cbs     r?   	<genexpr>z9_wrap_configure.<locals>.new_configure.<locals>.<genexpr>  sA       
 
 r233
 
 
 
 
 
rA   )r   
get_clientget_integrationrs   rD   r$   handlersr#   rF   r   debugany	itertoolschainr   rw   rv   rT   )
rj  rk  rl  r-  r   integrationcallbacks_listinheritable_callbacks_listsentry_handlerrg  s
            r?   new_configurez&_wrap_configure.<locals>.new_configure}  sb    !+--==>RSS1$% 	  
    */R o':;; 	,5NN)<== 	-.NN.. 	,NNL4oFFF1$% 	  
    +-@AA 	,)>)G&&-t44 	,)>&&)+& 
 
on6PQQ
 
 
 
 
 	E 5%+ N /+>?? 	E"1"6"6"8"8,$-,",(( O-@AA E#2N"C"DO"D^"Dq !
 	
 
 

 
 
 	
rA   )NN)r   rc   )rg  r|  s   ` r?   r   r   |  s    
1XX .2'+I
 I
"I
*I
 %I
 	I

 I
 
I
 I
 I
 I
 I
 XI
V rA   c                 >     t                     d fd            }|S )Nru   r   r-  r   r<   c                 .   t          j                                        t                    }| | g|R i |S t	          | ||          \  }}t                      } |t          j        |rd| ndt          j                  5 }t          |           	 |r |
                    t          j        |           |
                    t          j        d           |
                    t          j        d           t          ||            | g|R i |}|                    d          }	|	ht#                      rZ|j        rSt'          |	g          }
t          j                    }t+          |
||          }|t-          |t          j        |d           |                    d          }|0t#                      r"|j        rt-          |t          j        |           |t3                       cd d d            S # t3                       w xY w# 1 swxY w Y   d S )Ninvoke_agent invoke_agentr   Finputr   r)  )r   rq  rr  rs   rX  r	   r   GEN_AI_INVOKE_AGENTr   rW   r   r   r   r   GEN_AI_RESPONSE_STREAMINGr   rS   r   rv   r
   r   r   r   r   r   rZ   )ru   r-  r   rx  rP   r   start_span_functionr   r>   r  r   r   r   r)  rg  s                 r?   
new_invokez/_wrap_agent_executor_invoke.<locals>.new_invoke  s    +--==>RSS1T+D+++F+++-dD&AA
E577  %1;O----'.
 
 
 0	 
###* JMM("<jIIIh<nMMMh@%HHH"4/// 41$111&11

7++%/11 &#3 & +B5'*J*J'&8::E$B+T5% %M %0+ $<)#(	     H--&/11 '#3 ' (h.KVTTT a0	 0	 0	 0	 0	 0	 0	 0	` a0	 0	 0	 0	 0	 0	 0	 0	 0	 0	s+   H
EG7H
7HH

HHru   r   r-  r   r   r   r<   r   r   )rg  r  s   ` r?   r   r     s:    
1XX8 8 8 8 8 X8t rA   c                 >     t                     d fd            }|S )Nru   r   r-  r   r<   c                    t          j                                        t                     | g|R i |S t	          | ||          \  }}t                      } |t          j        |rd| ndt          j                  	                                 t          |           |r                     t          j        |                               t          j        d                               t          j        d           t!          |           t#          |          dk    r|d                             d          nd }|ht'                      rZj        rSt+          |g          }t          j                    }t/          ||          }	|	t1          t          j        |	d	            | g|R i |}
|
dfd}dfd}t5          t7          |
                    dk    r |            }
n
 |            }
|
S )Nr  r  r   TrT  r   r  Fr   r<   Iterator[Any]c               3     K   d} 	 D ]}|V  	 |                     d          }n# t          $ r d }Y nw xY w|0t                      r"j        rt	          t
          j        |           n1# t          $ r$ t          j                    } t                      w xY wt                        j        |   d S # t                        j        |   w xY wNr4  r)  rS   rV  r   rv   r   r   r   sysexc_infor   rZ   r   r  eventr)  rx  old_iteratorr   s      r?   new_iteratorzE_wrap_agent_executor_stream.<locals>.new_stream.<locals>.new_iterator>  s     /AH))    EKKKK""YYx00FF  " " "!FFF" &/11 '#3 ' (h.KVTTT   <>> &&& x(((( x(((s8   	A, ' A, 6A, 65A, +B7 ,.BB7 7CAsyncIterator[Any]c                   K   d} 	 2 3 d {V }|W V  6 	 |                     d          }n# t          $ r d }Y nw xY w|0t                      r"j        rt	          t
          j        |           n1# t          $ r$ t          j                    } t                      w xY wt                        j        |   d S # t                        j        |   w xY wr  r  r  s      r?   new_iterator_asynczK_wrap_agent_executor_stream.<locals>.new_stream.<locals>.new_iterator_asyncX  s8     /AH)#/              %KKKKK $0""YYx00FF  " " "!FFF" &/11 '#3 ' (h.KVTTT   <>> &&& x(((( x(((sA   A3 A3 . A3 =A3 =5A3 2B> 3.B!!B> >Cz<class 'async_generator'>)r<   r  )r<   r  )r   rq  rr  rs   rX  r	   r   r  r   r   rW   r   r   r   r   r  r   r   rS   r   rv   r
   r   r   r   r   rE   rc   )ru   r-  r   rP   r   r  r  r   r   r   r>   r  r  rx  r  r   rg  s                @@@r?   
new_streamz/_wrap_agent_executor_stream.<locals>.new_stream  s    +--==>RSS1T+D+++F+++-dD&AA
E577""%1;O----'.
 
 

 	J 	BMM(4jAAAh4nEEEh8$???4'''(+D		QQG$$$D')) +  #:5'"B"B022E:#T5 M (#4! 	    4)$)))&))	) 	) 	) 	) 	) 	) 	) 	)4	) 	) 	) 	) 	) 	) 	) 	)4 tF|| ;;;''))FF!\^^FrA   r  r   )rg  r  s   ` r?   r   r     s@    
1XXj j j j j XjX rA   provider_classc                 Z   | dS t          | d          rt          | j                  | _        t          | d          rt          | j                  | _        t          | d          rt	          | j                  | _        t          | d          rt	          | j                  | _        dS dS )z<Patch an embeddings provider class with monitoring wrappers.Nembed_documentsembed_queryaembed_documentsaembed_query)r^  _wrap_embedding_methodr  r  _wrap_async_embedding_methodr  r  )r  s    r?   r   r   |  s    ~011 
)?**
 *
& ~}-- X%;N<V%W%W"~122 
*F++
 +
' ~~.. 
&B''
 '
###
 
rA   c                 >     t                     d fd            }|S )z>Wrap sync embedding methods (embed_documents and embed_query).ru   r   r-  r   r<   c                    t          j                                        t                    }| 	| g|R i |S t	          | dd           pt	          | dd           }t          j        t          j        |rd| ndt          j                  5 }|	                    t          j        d           |r |	                    t          j        |           t                      rY|j        rRt          |          dk    r?|d         }t!          |t"                    r|n|g}t%          |t          j        |d            	| g|R i |}|cd d d            S # 1 swxY w Y   d S 	Nr   r   zembeddings 
embeddingsr   r   Fr   r   rq  rr  rs   r  r   r   GEN_AI_EMBEDDINGSr   r   r   r   r   r   rv   r   rD   rF   r   GEN_AI_EMBEDDINGS_INPUT
ru   r-  r   rx  r   r   
input_datatextsr>   rg  s
            r?   new_embedding_methodz4_wrap_embedding_method.<locals>.new_embedding_method  s    +--==>RSS1T+D+++F+++T7D11VWT<QU5V5V
"#/9K+z+++|'.
 
 
 	 MM(8,GGG Ih;ZHHH ())
/
 IIMM!!W
&0T&B&BT

#(:E%    Qt-d---f--F/	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   B7EEEr  r   )rg  r  s   ` r?   r  r    s;     1XX     X>  rA   c                 N     t                     	 	 	 	 	 	 	 	 d fd            }|S )zAWrap async embedding methods (aembed_documents and aembed_query).ru   r   r-  r   r<   c                   K   t          j                                        t                    }| 	| g|R i | d {V S t	          | dd           pt	          | dd           }t          j        t          j        |rd| ndt          j                  5 }|	                    t          j        d           |r |	                    t          j        |           t                      rY|j        rRt          |          dk    r?|d         }t!          |t"                    r|n|g}t%          |t          j        |d            	| g|R i | d {V }|cd d d            S # 1 swxY w Y   d S r  r  r  s
            r?   new_async_embedding_methodz@_wrap_async_embedding_method.<locals>.new_async_embedding_method  s      !+--==>RSS41$111&111111111T7D11VWT<QU5V5V
"#/9K+z+++|'.
 
 
 	 MM(8,GGG Ih;ZHHH ())
/
 IIMM!!W
&0T&B&BT

#(:E%    1T3D333F33333333F/	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   B=E!!E%(E%r  r   )rg  r  s   ` r?   r  r    s\     1XX!-2	     XB &%rA   )r:   r;   r<   r;   )rB   r   r<   r   )rP   rQ   r<   N)r<   rQ   )r^   r_   r<   r`   )re   r`   r<   rk   )r1  r   r<   r2  )r   r   r<   r2  )rD  r   r<   r   )r   r    r   r   r<   N)rD  r   r-  r   r   r   r<   rN  )r   r   r<   rY  )r   r    r   r   r<   N)rg  rh  r<   rh  )r  r   r<   N)qcontextvarsrv  r  r   r|   collectionsr   	functoolsr   typingr   r   sentry_sdk.ai.monitoringr   sentry_sdk.ai.utilsr   r	   r
   r   r   r   sentry_sdk.constsr   r   sentry_sdk.integrationsr   r   sentry_sdk.scoper   sentry_sdk.tracing_utilsr   r   sentry_sdk.utilsr   r   r   r   r   r   r   r   r   r   uuidr   sentry_sdk.tracingr    sentry_sdk._typesr!   langchain_core.agentsr"   langchain_core.callbacksr#   r$   r%   r&   langchain_core.messagesr'   langchain_core.outputsr(   ImportErrorlangchain_classic.agentsr)   langchain.agentslangchain_openair*   r+   langchain_google_vertexair,   langchain_awsr-   langchain_coherer.   langchain_mistralair/   langchain_huggingfacer0   langchain_ollamar1    GEN_AI_REQUEST_FREQUENCY_PENALTYr  GEN_AI_REQUEST_MAX_TOKENSGEN_AI_REQUEST_PRESENCE_PENALTYGEN_AI_REQUEST_TEMPERATUREGEN_AI_REQUEST_TOP_KGEN_AI_REQUEST_TOP_Pr   r@   rL   
ContextVarrO   r   rW   rZ   r]   rj   rq   rs   r   r   r;  rC  r=  r   rX  rd  r   r   r   r   r   r  r  rn   rA   r?   <module>r     s            



   # # # # # #                       9 9 9 9 9 9                + * * * * * * * = = = = = = = = 4 4 4 4 4 4 A A A A A A A A @ @ @ @ @ @ @ @ +	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ''''''******2111111            4333330000000 2 2 2
,0
1
1126666666   2222222   	1111111   !6666666 ! ! ! !<<<<<<<   ///////   1111111   7777777   !;;;;;;; ! ! ! !1111111   
 "B84 @65**	 	
;#
;
; 
; 
; 
;   , K2DAAA E   
	 	 	 		 	 	 	      ,	$		 	 	 	$5 $5 $5 $5 $5; $5 $5 $5N       `* `* `* `* `*1 `* `* `*F5595 5 5 5"9   4   8H H H H&	%*0   :>: >: >: >:B
 
 
 
M M M M`< < < <~n n n nb
 
 
 
*#  #  #  # L%& %& %& %& %& %&s   B0 0CC C)CC)C# C)"C##C)(C)-C4 4C>=C>D	 	DDD D('D(,D3 3D=<D=E EEE E'&E'+E2 2E<;E< F FF