
    tni              	          U 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 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-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7 n# e8$ r  ed          w xY w	 d dl9m:Z: n # e8$ r 	 d dl;m:Z: n# e8$ r dZ:Y nw xY wY nw xY w	 d dl<m=Z= n# e8$ r dZ=Y nw xY w	 d dl<m>Z> n# e8$ r dZ>Y nw xY w	 d dl?m@Z@ n# e8$ r dZ@Y nw xY w	 d dlAmBZB n# e8$ r dZBY nw xY w	 d dlCmDZD n# e8$ r dZDY nw xY w	 d dlEmFZF n# e8$ r dZFY nw xY w	 d dlGmHZH n# e8$ r dZHY nw xY w	 d dlImJZJ n# e8$ r dZJY nw xY wejK        ejL        ejM        ejN        ejO        ejL        ejP        ejQ        dZR e jS        dd          ZTd eUd!<   dLd%ZVdMd&ZWdMd'ZX G d( d)e          ZY G d* d+          ZZ G d, d-e0          Z[	 	 	 	 dNd1Z\	 	 	 	 dOd3Z]dPd6Z^dQd:Z_	 	 	 	 	 	 	 	 dRd>Z`dSdAZadTdBZbdUdEZcdUdFZddUdGZedVdIZfdUdJZgdUdKZhdS )W    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)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)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langchain_agent_stack)defaultz5contextvars.ContextVar[Optional[List[Optional[str]]]]_agent_stack
agent_nameOptional[str]returnc                     t                                           }|g }n|                                }|                    |            t                               |           dS )z"Push an agent name onto the stack.N)r:   getcopyappendset)r;   stacks     ^/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/sentry_sdk/integrations/langchain.py_push_agentrE   ~   sZ    E} 

	LLU    c                      t                                           } | rD|                                 } |                                 }t                               |            |S dS )z/Pop an agent name from the stack and return it.N)r:   r?   r@   poprB   )rC   r;   s     rD   
_pop_agentrI      sT    E 

YY[[
4rF   c                  L    t                                           } | r| d         S dS )z>Get the current agent name (top of stack) without removing it.N)r:   r?   )rC   s    rD   _get_current_agentrL      s*    E Ry4rF   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)rQ   rR   warningswarnDeprecationWarning)rP   rQ   rR   s      rD   __init__zLangchainIntegration.__init__   sP    
  /" MO"	      ! rF   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-   r.   r/    rF   rD   
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4rF   )TNr=   N)	__name__
__module____qualname__
identifieroriginboolrZ   staticmethodre   rd   rF   rD   rN   rN      s        J$
$$F !%%) $ # 
	     5 5 5 \5 5 5rF   rN   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\   )rp   )rP   rp   s     rD   rZ   zWatchedSpan.__init__   s    			rF   )rp   r   r=   N)	rg   rh   ri   rp   __annotations__rq   rr   rl   rZ   rd   rF   rD   ro   ro      s[         D&$&H!&&&K     rF   ro   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_sizerS   rQ   r=   Nc                 H    t                      | _        || _        || _        d S r\   )r   span_maprw   rQ   )rP   rw   rQ   s      rD   rZ   z SentryLangchainCallback.__init__   s&     ;F--!2.rF   c                     | j         pt          | j                  | j         k    rU| j                            d          \  }}|                     ||           t          | j                  | j         k    Qd S d S d S )NF)last)rw   lenry   popitem
_exit_span)rP   run_idwatched_spans      rD   gc_span_mapz#SentryLangchainCallback.gc_span_map   s    !-dm$$t'==='+}'<'<%'<'H'H$f555 dm$$t'===== .-==rF   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   ry   rp   r   
sentry_sdkcapture_exceptionscope__exit__)rP   r   r   	span_datarp   s        rD   _handle_errorz%SentryLangchainCallback._handle_error   s	   (** 	& 	& V4=88	& 	& 	& 	& 	& 	& 	& 	& f-I>DT"""(
;;;MM$d+++f%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   BABBBmessager%   c                 X    |j         |j        d}|                    |j                   |S )Nrolecontent)typer   updateadditional_kwargs)rP   r   parseds      rD   _normalize_langchain_messagez4SentryLangchainCallback._normalize_langchain_message   s-    !,7?CCg/000rF   rP   	parent_idOptional[Any]kwargsro   c                 f   d }|rU| j                             |          }|r9t           |j        j        di |          }|j                            |           |t          t          j        di |          }|j        	                                 || j         |<   | 
                                 |S )Nrd   )ry   r?   ro   rp   start_childrq   rA   r   
start_span	__enter__r   )rP   r   r   r   r   parent_spans         rD   _create_spanz$SentryLangchainCallback._create_span   s     15 	:37=3D3DY3O3OK :*+G;+;+G+Q+Q&+Q+QRR$++L999&z'<'F'Fv'F'FGGL##%%% ,frF   r   c                 z    |j         rt          d            |j                            d d d            | j        |= d S r\   )rr   r   rp   r   ry   )rP   r   r   s      rD   r~   z"SentryLangchainCallback._exit_span  sG       	' &&&dD111M&!!!rF   )tagsparent_run_idmetadata
serializedDict[str, Any]prompts	List[str]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   rk   _type	anthropicopenaiFunpacktoolsc                 2    g | ]}t           j        d |ddS )text)r   r   r   )r   USER).0prompts     rD   
<listcomp>z8SentryLangchainCallback.on_llm_start.<locals>.<listcomp>E  sB     ' ' '
  != A,2F#C#C ' ' 'rF   )r   r?   r   r   r   GEN_AI_PIPELINErN   rk   rp   set_datar   GEN_AI_REQUEST_MODELGEN_AI_SYSTEMDATA_FIELDSitemsr   _set_tools_on_spanr   rQ   r   get_current_scoper   GEN_AI_REQUEST_MESSAGES)rP   r   r   r   r   r   r   r   
all_paramsr   r   rp   ai_typekey	attributenormalized_messagesr   messages_datas                     rD   on_llm_startz$SentryLangchainCallback.on_llm_start  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messagesList[List[BaseMessage]]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        rg }|D ]/}|D ]*}|                    |                     |                     +0t3          |          }t5          j                    }t9          |||          }|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   r?   r   r   r   GEN_AI_CHATstriprN   rk   rp   r   r   GEN_AI_OPERATION_NAMEr   r   rL   GEN_AI_AGENT_NAMEr   r   r   r   r   rQ   rA   r   r
   r   r   r   r   )rP   r   r   r   r   r   r   r   rp   r   r;   r   r   r   list_r   r   r   s                     rD   on_chat_model_startz+SentryLangchainCallback.on_chat_model_startX  s|    )** =	 =	 =	 =	 =	 =	 =	 =	 =	 =	  $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 &(#%  E#(  +22 ==gFF    '>>Q&R&R#"466 >'u! ! !,' 8%$	   q=	 =	 =	 =	 =	 =	 =	 =	 =	 =	 =	 =	 =	 =	 =	 =	 =	 =	s   KJ0KK!$K!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 rd   r   r   xs     rD   r   zHSentryLangchainCallback.on_chat_model_end.<locals>.<listcomp>.<listcomp>      ,,,af,,,rF   rd   r   r   s     rD   r   z=SentryLangchainCallback.on_chat_model_end.<locals>.<listcomp>  '    OOO,,e,,,OOOrF   )r   ry   rp   r   rQ   r   r   GEN_AI_RESPONSE_TEXTgenerations_record_token_usager~   )rP   r   r   r   r   rp   s         rD   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_reasonr5   Fr   c                 &    g | ]}d  |D             S )c                     g | ]	}|j         
S rd   r   r   s     rD   r   zASentryLangchainCallback.on_llm_end.<locals>.<listcomp>.<listcomp>  r   rF   rd   r   s     rD   r   z6SentryLangchainCallback.on_llm_end.<locals>.<listcomp>  r   rF   )r   ry   rp   r   
IndexErrorr   response_metadatar?   r   r   GEN_AI_RESPONSE_MODELAttributeErrorgeneration_infoGEN_AI_RESPONSE_FINISH_REASONSr   rQ   getattrr   GEN_AI_RESPONSE_TOOL_CALLSr   r   r~   )
rP   r   r   r   r   rp   
generationresponse_modelr   r5   s
             rD   
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   rP   r   r   r   s       rD   on_llm_errorz$SentryLangchainCallback.on_llm_error        	65)))))rF   c                2    |                      ||           dS )zRun when Chat Model errors.Nr   r   s       rD   on_chat_model_errorz+SentryLangchainCallback.on_chat_model_error  r   rF   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   ry   rp   r   rQ   r   r   r   return_valuesr   r~   )rP   r   r   r   r   rp   s         rD   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   r?   r   r   GEN_AI_EXECUTE_TOOLr   rN   rk   rp   r   r   r   GEN_AI_TOOL_NAMEGEN_AI_TOOL_DESCRIPTIONrL   r   r   rQ   r   GEN_AI_TOOL_INPUT)
rP   r   r   r   r   	tool_namer   rp   tool_descriptionr;   s
             rD   on_tool_startz%SentryLangchainCallback.on_tool_start   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   ry   rp   r   rQ   r   r   GEN_AI_TOOL_OUTPUTr~   )rP   r  r   r   r   rp   s         rD   on_tool_endz#SentryLangchainCallback.on_tool_endJ  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   )rP   r   r   r  r   s        rD   on_tool_errorz%SentryLangchainCallback.on_tool_errorZ  r   rF   rf   )r   r   r   r   r=   N)r   r%   r=   r   )
rP   rv   r   r   r   r   r   r   r=   ro   )rP   rv   r   ro   r   r   r=   N)rP   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r=   r   )rP   rv   r   r   r   r   r   r   r   r   r=   r   )
rP   rv   r   r&   r   r   r   r   r=   r   )
rP   rv   r   r   r   r   r   r   r=   r   )
rP   rv   r   r    r   r   r   r   r=   r   )
r   rv   r  r   r   r   r   r   r=   r   )rg   rh   ri   __doc__rl   rZ   r   r   r   r   r~   r   r   r   r   r   r   r   strr  r  r  rd   rF   rD   rv   rv      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F'F$F ,F
 F F 
F F F FP/'// 	/
 / 
/ / / /2</'</</ 	</
 </ 
</ </ </ </|*'*4* 	*
 * 
* * * **'*4* 	*
 * 
* * * */'// 	/
 / 
/ / / /*('($( (
 ( ( 
( ( ( (T/'/14/AG/SX/	/ / / / *(* 5* 	*
 * 
* * * * * *rF   rv   token_usager   2tuple[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   )r  r  r  r  s       rD   _extract_tokensr  e  s       k?;; z^@ @L {,?@@ J_E EM k>::L44rF   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.r  r   N)_get_token_usager  )
r   total_inputtotal_outputtotal_totalgen_listgenr  r  r  r  s
             rD    _extract_tokens_from_generationsr'  v  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 rF   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.
    )usager  usage_metadatar   N
llm_outputr  )r(  possible_namesr   r   r*  r,  s         rD   r!  r!    s     @Ni((G" 	 	Dw--E  ! C..J" 	 	Dz400E  !   3%%LLL  4rF   rp   r   r   c                 P   t          |          }|rt          |          \  }}}nt          |j                  \  }}}| |                     t
          j        |           | |                     t
          j        |           |"|                     t
          j        |           d S d S r\   )	r!  r  r'  r   r   r   GEN_AI_USAGE_INPUT_TOKENSGEN_AI_USAGE_OUTPUT_TOKENSGEN_AI_USAGE_TOTAL_TOKENS)rp   r   r  r  r  r  s         rD   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  rF   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   r?   r|   	Exception)r(  r  r   r4  r5  runnable_configr   r;   s           rD   _get_request_datar<    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descrg   r  r   )
isinstancelisttupledictr?   rA   hasattrr   rg   r  r:  )r   simplified_toolstoolfuncsimplified_toolr   tool_strs          rD   _simplify_langchain_toolsrL    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   )rL  r   r   GEN_AI_REQUEST_AVAILABLE_TOOLS)rp   r   rG  s      rD   r   r     s`    4U;; 	7 	      	 	rF   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\   )rB  rv   )r   cbs     rD   	<genexpr>z9_wrap_configure.<locals>.new_configure.<locals>.<genexpr>\  sA       
 
 r233
 
 
 
 
 
rF   )r   
get_clientget_integrationrN   rB  r"   handlersr!   rC  r   debugany	itertoolschainrv   rR   rQ   r@   )
rR  rS  rT  r  r   integrationcallbacks_listinheritable_callbacks_listsentry_handlerrO  s
            rD   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 !
 	
 
 

 
 
 	
rF   )NN)r   r   )rO  rd  s   ` rD   r]   r]   *  s    
1XX .2'+I
 I
"I
*I
 %I
 	I

 I
 
I
 I
 I
 I
 I
 XI
V rF   c                 >     t                     d fd            }|S )NrP   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   rY  rZ  rN   r<  r	   r   GEN_AI_INVOKE_AGENTrk   rE   r   r   r   r   GEN_AI_RESPONSE_STREAMINGr   r?   r   rQ   r
   r   r   r   r   r   rI   )rP   r  r   r`  r;   r   start_span_functionrp   resultri  r   r   r   r  rO  s                 rD   
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rP   r   r  r   r   r   r=   r   r   )rO  rn  s   ` rD   r_   r_   z  s:    
1XX8 8 8 8 8 X8t rF   c                 >     t                     d fd            }|S )NrP   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 )Nrg  rh  r   Tr8  r   ri  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Nr  r  r?   r:  r   rQ   r   r   r   sysexc_infor   rI   r   rw  eventr  r`  old_iteratorrp   s      rD   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rt  ru  rx  s      rD   new_iterator_asynczK_wrap_agent_executor_stream.<locals>.new_stream.<locals>.new_iterator_async  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=   rr  )r=   r|  )r   rY  rZ  rN   r<  r	   r   rj  rk   r   rE   r   r   r   r   rk  r   r|   r?   r   rQ   r
   r   r   r   r   r  r   )rP   r  r   r;   r   rl  ri  r   r   r   rm  r{  r~  r`  rz  rp   rO  s                @@@rD   
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rF   ro  r   )rO  r  s   ` rD   ra   ra     s@    
1XXj j j j j XjX rF   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)rF  _wrap_embedding_methodr  r  _wrap_async_embedding_methodr  r  )r  s    rD   rc   rc   *  s    ~011 
)?**
 *
& ~}-- X%;N<V%W%W"~122 
*F++
 +
' ~~.. 
&B''
 '
###
 
rF   c                 >     t                     d fd            }|S )z>Wrap sync embedding methods (embed_documents and embed_query).rP   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   rY  rZ  rN   r   r   r   GEN_AI_EMBEDDINGSrk   r   r   r   r   r   rQ   r|   rB  rC  r   GEN_AI_EMBEDDINGS_INPUT
rP   r  r   r`  r   rp   
input_datatextsrm  rO  s
            rD   new_embedding_methodz4_wrap_embedding_method.<locals>.new_embedding_methodB  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ro  r   )rO  r  s   ` rD   r  r  ?  s;     1XX     X>  rF   c                 N     t                     	 	 	 	 	 	 	 	 d fd            }|S )zAWrap async embedding methods (aembed_documents and aembed_query).rP   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
            rD   new_async_embedding_methodz@_wrap_async_embedding_method.<locals>.new_async_embedding_methodh  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%ro  r   )rO  r  s   ` rD   r  r  e  s\     1XX!-2	     XB &%rF   )r;   r<   r=   N)r=   r<   )r  r   r=   r  )r   r   r=   r  )r(  r   r=   r   )rp   r   r   r   r=   N)r(  r   r  r   r   r   r=   r2  )r   r   r=   r=  )rp   r   r   r   r=   N)rO  rP  r=   rP  )r  r   r=   N)icontextvarsr^  rv  rW   collectionsr   	functoolsr   typingr   r   sentry_sdk.ai.monitoringr   sentry_sdk.ai.utilsr   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   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_huggingfacer.   langchain_ollamar/    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   
ContextVarr:   rt   rE   rI   rL   rN   ro   rv   r  r'  r!  r   r<  rL  r   r]   r_   ra   rc   r  r  rd   rF   rD   <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       T* T* T* T* T*1 T* T* T*n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   B$ $B59C   CCCCCCCC!C( (C21C26C= =DDD DD D' 'D10D15D< <EE
E EEE& &E0/E04E; ;FF