
    \j              	          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.m/Z/ 	 d dl0m1Z1 d dl2m3Z3m4Z4m5Z5m6Z6 d dl7m8Z8 d dl9m:Z: 	 d dl<m=Z= 	 d dl?m@Z@ 	 d dl?mAZA 	 d dlBmCZC 	 d dlDmEZE 	 d dlFmGZG 	 d dlHmIZI 	 d dlJmKZK 	 d dlLmMZM d7dZNej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  dZV	 	 	 	 d8d ZWd9d!ZXd:d"ZY	 	 	 	 d;d#ZZ G d$ d%e      Z[ G d& d'      Z\ G d( d)e3      Z]	 	 	 	 d<d*Z^	 	 	 	 d=d+Z_d>d,Z`d?d-Za	 	 	 	 	 	 	 	 d@d.ZbdAd/ZcdBd0ZddCd1ZedCd2ZfdCd3ZgdDd4ZhdCd5ZidCd6Zjy# e;$ r	  ed      w xY w# e;$ r 	 d dl>m=Z= n# e;$ r dZ=Y nw xY wY Bw xY w# e;$ r dZ@Y Iw xY w# e;$ r dZAY Pw xY w# e;$ r dZCY Ww xY w# e;$ r dZEY ^w xY w# e;$ r dZGY ew xY w# e;$ r dZIY lw xY w# e;$ r dZKY sw xY w# e;$ r dZMY zw xY w)E    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)OllamaEmbeddingsc                 N    | j                  d      }|rt        |t              sy |S )N_type)get
isinstancestr)
all_paramsai_types     K/root/env/lib/python3.12/site-packages/sentry_sdk/integrations/langchain.py_get_ai_systemr:   n   s$    nnW%G*Wc2N    )frequency_penaltyfunction_call
max_tokenspresence_penaltytemperature
tool_callstop_ktop_pc                 $    t        |       }||S | 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   )content_blockresults     r9   "_transform_langchain_content_blockrG      s     $M2F'6:]:r;   c                     t        | t              r| S t        | t        t        f      rGg }| D ]>  }t        |t              r|j                  t        |             .|j                  |       @ |S | S )zk
    Transform LangChain message content, handling both string content and
    list of content blocks.
    )r5   r6   listtupledictappendrG   )contenttransformedblocks      r9   $_transform_langchain_message_contentrP      sn    
 '3'D%=) 	*E%&""#Ee#LM""5)		*
 Nr;   c                 $   g }| D ]  }|D ]  }|j                   dk(  r6t        |j                  t              r|j	                  |j                         H|j                   dk(  sXt        |j                  t
              ss|j                  D ]}  }t        |t              r|j	                  |       %t        |t              s6|j                  d      dk(  sK|j                  d      }t        |t              sm|j	                  |         
 |S )Nsystemtypetext)rS   r5   rM   r6   rL   rI   rK   r4   )messagessystem_instructionslist_messageiteminstructions         r9   _get_system_instructionsr[      s     D 	DG||x'Jw,L#**7??;)j$.O#OO DD!$,+2248#D$/DHHV4D4N&*hhv&6%k37/66{CD	DD  r;   c                 2    | D cg c]  }d|d	 c}S c c}w )NrT   )rS   rM    )rV   rZ   s     r9   _transform_system_instructionsr^      s.     /
  "	
  s   c            	       J    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y)LangchainIntegration	langchainzauto.ai.Nselfinclude_prompts	max_spansOptional[int]returnc                 ^    || _         || _        |t        j                  dt        d       y y )NzsThe `max_spans` parameter of `LangchainIntegration` is deprecated and will be removed in version 3.0 of sentry-sdk.   )
stacklevel)rc   rd   warningswarnDeprecationWarning)rb   rc   rd   s      r9   __init__zLangchainIntegration.__init__   s6    
  /" MMO"	 !r;   c                     t        t        j                        t        _        t        Dt	        t        j
                        t        _        t        t        j                        t        _        t        t               t        t               t        t               t        t               t        t               t        t               t        t               t        t                y N)_wrap_configurer&   
_configurer)   _wrap_agent_executor_invokeinvoke_wrap_agent_executor_streamstream_patch_embeddings_providerr*   r+   r,   r-   r.   r/   r0   r1   r]   r;   r9   
setup_oncezLangchainIntegration.setup_once   s    ,W-?-?@$#>}?S?S#TM #>}?S?S#TM  	##34"#89"#56"#45"#34"#67"#89"#34r;   )TNrf   N)	__name__
__module____qualname__
identifieroriginboolrm   staticmethodrw   r]   r;   r9   r`   r`      sX    J
|$F !%%)$ # 
	  5 5r;   r`   c                   @    e Zd ZU dZded<   g Zded<   dZeed<   d	dZy)
WatchedSpanNr    spanzList[WatchedSpan]childrenFis_pipelinec                     || _         y ro   )r   )rb   r   s     r9   rm   zWatchedSpan.__init__   s	    	r;   )r   r    rf   N)	ry   rz   r{   r   __annotations__r   r   r~   rm   r]   r;   r9   r   r      s&    D&$&H!&Kr;   r   c                      e Zd ZdZdddeddfdZd!dZd"d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	 	 	 	 	 	 	 	 	 	 d*dZdd ddded	d
ddddfdZdd ded	d
ddddf
dZ	 	 	 	 	 	 	 	 	 	 d+d Zy),SentryLangchainCallbackz+Callback handler that creates Sentry spans.max_span_map_sizere   rc   rf   Nc                 >    t               | _        || _        || _        y ro   )r   span_mapr   rc   )rb   r   rc   s      r9   rm   z SentryLangchainCallback.__init__   s     ;F-!2.r;   c                    | j                   xt        | j                        | j                   kD  rU| j                  j                  d      \  }}| j	                  ||       t        | j                        | j                   kD  rTy y y )NF)last)r   lenr   popitem
_exit_span)rb   run_idwatched_spans      r9   gc_span_mapz#SentryLangchainCallback.gc_span_map   sm    !!-dmm$t'='=='+}}'<'<%'<'H$f5 dmm$t'='== .r;   r   r   r   c                 B   t               5  |r|| j                  vr
	 d d d        y | j                  |   }|j                  }t        |       t	        j
                  ||j                         |j                  d d d        | j                  |= d d d        y # 1 sw Y   y xY wro   )r   r   r   r   
sentry_sdkcapture_exceptionscope__exit__)rb   r   error	span_datar   s        r9   _handle_errorz%SentryLangchainCallback._handle_error  s    (* 	&V4==8	& 	& f-I>>DT"((

;MM$d+f%	& 	& 	&s   BA&BBc                     t        |j                        }|j                  |d}|j                  |j                         |S )NrolerM   )rP   rM   rS   updateadditional_kwargs)rb   rX   transformed_contentparseds       r9   _normalize_langchain_messagez4SentryLangchainCallback._normalize_langchain_message  s7    B7??S!,,3FGg//0r;   rb   kwargsc                 z   d }|r]| j                   j                  |      }|r@t         |j                  j                  di |      }|j
                  j                  |       |t        t        j                  di |      }|j                  j                          || j                   |<   | j                          |S )Nr]   )r   r4   r   r   start_childr   rL   r   
start_span	__enter__r   )rb   r   	parent_idr   r   parent_spans         r9   _create_spanz$SentryLangchainCallback._create_span  s     1537==3D3DY3OK*+G;+;+;+G+G+Q&+QR$$++L9&z'<'<'Fv'FGL##% ,fr;   c                     |j                   rt        d        |j                  j                  d d d        | j                  |= y ro   )r   r   r   r   r   )rb   r   r   s      r9   r   z"SentryLangchainCallback._exit_span0  s7        &dD1MM&!r;   )tagsparent_run_idmetadata
serializedDict[str, Any]c                   t               5  |s
	 d d d        y |j                  di       }|j                  |j                  di              |j                  d      xs( |j                  d      xs |j                  d      xs d}	| j                  ||t        j
                  d|	 j                         t        j                        }
|
j                  }|j                  t        j                  d	       |j                  d
      }|r |j                  t        j                  |       |	r |j                  t        j                  |	       t        |      }|r |j                  t        j                   |       t"        j%                         D ]"  \  }}||v s||   t'        ||||   d       $ t)        ||j                  d             t+               ro| j,                  rc|D cg c]  }t.        j0                  d|dd }}t3        j4                         }t7        |||      }|t'        |t        j8                  |d       d d d        y c c}w # 1 sw Y   y xY w)Ninvocation_paramsr   model
model_namemodel_id ztext_completion opnamer}   text_completionr   FunpacktoolsrT   )rS   rT   r   )r   r4   r   r   r   GEN_AI_TEXT_COMPLETIONstripr`   r}   r   set_datar   GEN_AI_OPERATION_NAMEGEN_AI_FUNCTION_IDGEN_AI_REQUEST_MODELr:   GEN_AI_SYSTEMDATA_FIELDSitemsr   _set_tools_on_spanr   rc   r   USERr   get_current_scoper   GEN_AI_REQUEST_MESSAGES)rb   r   promptsr   r   r   r   r   r7   r   r   r   run_name	ai_systemkey	attributepromptnormalized_messagesr   messages_datas                       r9   on_llm_startz$SentryLangchainCallback.on_llm_start9  sK    )* ?	?	 ?	  $7<JjnnXr:; w' >>,/>>*- 	   ,,,,'w/557+22 - L  $$DMM(88:KLzz&)Hh998D11
 'z2Ih44i@"-"3"3"5 XY*$C)D'iCQVWX tZ^^G%<=&(T-A-A #*'
  != A A,2F#C'# ' #446 >'u! !,' 88%$	u?	 ?	\']?	 ?	s1   IE=IIA	I%IAIIIc          	      Z   t               5  |s
	 ddd       y|j                  di       }|j                  |j                  di              |j                  d      xs( |j                  d      xs |j                  d      xs d}| j                  ||j                  d      t        j
                  d	| j                         t        j                  
      }|j                  }|j                  t        j                  d       |r |j                  t        j                  |       t        |      }	|	r |j                  t        j                  |	       |j                  d      }
t!        |
t"              r'd|
v r#|j                  t        j$                  |
d          |j                  d      }|r |j                  t        j&                  |       t(        j+                         D ]"  \  }}||v s||   t-        ||||   d       $ t/        ||j                  d             t1               r| j2                  rt5        |      }t7        |      dkD  r<|j                  t        j8                  t;        j<                  t?        |                   g }|D ]9  }|D ]2  }|j@                  dk(  r|jC                  | jE                  |             4 ; tG        |      }tI        jJ                         }tM        |||      }|t-        |t        jN                  |d       ddd       y# 1 sw Y   yxY w)z#Run when Chat Model starts running.Nr   r   r   r   r   r   r   zchat r   chatr   lc_agent_namer   Fr   r   r   rR   )(r   r4   r   r   r   GEN_AI_CHATr   r`   r}   r   r   r   r   r   r:   r   r5   rK   GEN_AI_AGENT_NAMEr   r   r   r   r   r   rc   r[   r   GEN_AI_SYSTEM_INSTRUCTIONSjsondumpsr^   rS   rL   r   r
   r   r   r   r   )rb   r   rU   r   r   r7   r   r   r   r   agent_metadatar   r   r   rV   r   rW   rX   r   r   s                       r9   on_chat_model_startz+SentryLangchainCallback.on_chat_model_start  s    )* N	N	 N	  $7<JjnnXr:; w' >>,/>>*- 	   ,,

?+>>UG_**,+22 - L  $$DMM(88&Ah;;UC&z2Ih44i@#ZZ
3N.$/O~4U..0O zz&)H//
 #."3"3"5 XY*$C)D'iCQVWX tZ^^G%<=&(T-A-A&>x&H#*+a/MM ;;

#ABU#VW
 ')#% E#( "<<83$+22 ==gF	 '>>Q&R#"446 >'u! !,' 88%$	SN	 N	 N	s   L!GL!-L!3D%L!!L*c                   t               5  |r|| j                  vr
	 ddd       y| j                  |   }|j                  }t               rY| j                  rMt        |t        j                  |j                  D cg c]  }|D cg c]  }|j                   c} c}}       t        ||       | j                  ||       ddd       yc c}w c c}}w # 1 sw Y   yxY w)z!Run when Chat Model ends running.N)r   r   r   r   rc   r   r   GEN_AI_RESPONSE_TEXTgenerationsrT   _record_token_usager   )rb   responser   r   r   r   rW   xs           r9   on_chat_model_endz)SentryLangchainCallback.on_chat_model_end  s     )* 	/V4==8	/ 	/ f-I>>D&(T-A-A#11:B:N:NOe,aff,O  h/OOIv.	/ 	/ -O	/ 	/s5   CAC;	CCC&CCCCc                "   t               5  |r|| j                  vr
	 ddd       y| j                  |   }|j                  }	 |j                  d   d   }|	 |j
                  j                  j                  d      }| |j                  t        j                  |       	 |j                  j                  d      }|!|j                  t        j                  |g       	 t               rG| j                  r;t!        |j
                  dd      }	|	"|	g k7  rt#        |t        j$                  |	d       t               rY| j                  rMt#        |t        j&                  |j                  D 
cg c]  }
|
D cg c]  }|j(                   c} c}}
       t+        ||       | j-                  ||       ddd       y# t        $ r d}Y sw xY w# t        $ r Y 9w xY w# t        $ r Y 
w xY w# t        $ r Y w xY wc c}w c c}}
w # 1 sw Y   yxY w)zRun when LLM ends running.Nr   r   finish_reasonrA   Fr   )r   r   r   r   
IndexErrorrX   response_metadatar4   r   r   GEN_AI_RESPONSE_MODELAttributeErrorgeneration_infoGEN_AI_RESPONSE_FINISH_REASONSr   rc   getattrr   GEN_AI_RESPONSE_TOOL_CALLSr   rT   r   r   )rb   r   r   r   r   r   
generationresponse_modelr   rA   rW   r   s               r9   
on_llm_endz"SentryLangchainCallback.on_llm_end  s    )* 5	/V4==85	/ 5	/ f-I>>D"%11!4Q7
 %%/%7%7%I%I%M%M$&N &1h&D&DnU$.$>$>$B$B?$SM$0$CC*O.0T5I5I%,Z-?-?t%T
%1jB6F/ $ ( C C *',	 '(T-A-A#11:B:N:NOe,aff,O  h/OOIv.k5	/ 5	/  "!
" &  &  &  -Oc5	/ 5	/s   HHF9HAG>GAG+/:H)	G?2G:G?
&H9GHGH	GHGH	G($H'G((H+	G74H6G77H:G??HHc                (    | j                  ||       y)zRun when LLM errors.Nr   rb   r   r   r   s       r9   on_llm_errorz$SentryLangchainCallback.on_llm_error6       	65)r;   c                (    | j                  ||       y)zRun when Chat Model errors.Nr   r   s       r9   on_chat_model_errorz+SentryLangchainCallback.on_chat_model_error@  r   r;   c                b   t               5  |r|| j                  vr
	 d d d        y | j                  |   }|j                  }t               r?| j                  r3t        |t        j                  |j                  j                                | j                  ||       d d d        y # 1 sw Y   y xY wro   )r   r   r   r   rc   r   r   r   return_valuesr   r   )rb   finishr   r   r   r   s         r9   on_agent_finishz'SentryLangchainCallback.on_agent_finishJ  s     )* 	/V4==8	/ 	/ f-I>>D&(T-A-A#(779M9M9S9S9U OOIv.	/ 	/ 	/s   B%A6B%%B.	input_strc          	         t               5  |s
	 ddd       y|j                  d      xs |j                  d      xs d}| j                  ||j                  d      t        j                  d| j                         t        j                        }|j                  }|j                  t        j                  d       |j                  t        j                  |       |j                  d      }| |j                  t        j                  |       |j                  d	      }	t        |	t              r'd
|	v r#|j                  t        j                   |	d
          |j                  d      }
|
r |j                  t        j"                  |
       t%               r8| j&                  r,t)        |t        j*                  |j                  d|g             ddd       y# 1 sw Y   yxY w)zRun when tool starts running.Nr   r   r   zexecute_tool r   execute_tooldescriptionr   r   inputs)r   r4   r   r   GEN_AI_EXECUTE_TOOLr   r`   r}   r   r   r   r   GEN_AI_TOOL_NAMEGEN_AI_TOOL_DESCRIPTIONr5   rK   r   r   r   rc   r   GEN_AI_TOOL_INPUT)rb   r   r   r   r   	tool_namer   r   tool_descriptionr   r   s              r9   on_tool_startz%SentryLangchainCallback.on_tool_start_  s    )* (	(	 (	 #v.J&**V2DJI,,

?+))$YK0668+22 - L  $$DMM(88.IMM(33Y?)~~m<+h>>@PQ#ZZ
3N.$/O~4U..0O zz&)H//
 '(T-A-A#..JJx)5I(	 (	 (	s   GF6GG outputc                2   t               5  |r|| j                  vr
	 ddd       y| j                  |   }|j                  }t               r'| j                  rt        |t        j                  |       | j                  ||       ddd       y# 1 sw Y   yxY w)zRun when tool ends running.N)	r   r   r   r   rc   r   r   GEN_AI_TOOL_OUTPUTr   )rb   r
  r   r   r   r   s         r9   on_tool_endz#SentryLangchainCallback.on_tool_end  s     )* 
	/V4==8
	/ 
	/ f-I>>D&(T-A-A#D(*E*EvNOOIv.
	/ 
	/ 
	/s   BABBc                (    | j                  ||       y)zRun when tool errors.Nr   )rb   r   r   argsr   s        r9   on_tool_errorz%SentryLangchainCallback.on_tool_error  r   r;   rx   )r   r   r   r   rf   N)rX   r'   rf   r   )
rb   r   r   r   r   zOptional[Any]r   r   rf   r   )rb   r   r   r   r   r   rf   N)rb   r   r   r   r   	List[str]r   r   r   zOptional[List[str]]r   zOptional[UUID]r   Optional[Dict[str, Any]]r   r   rf   r   )rb   r   r   r   rU   List[List[BaseMessage]]r   r   r   r   rf   r   )
rb   r   r   r(   r   r   r   r   rf   r   )
rb   r   r   #Union[Exception, KeyboardInterrupt]r   r   r   r   rf   r   )
rb   r   r   r"   r   r   r   r   rf   r   )
r   r   r  r  r   r   r   r   rf   r   )ry   rz   r{   __doc__r~   rm   r   r   r   r   r   r   r   r   r   r   r   r   r6   r	  r  r  r]   r;   r9   r   r      s   5/!0/CG/	/6&' # 	
 
*"'"4A"KQ"	" '+*./3J'J$J J
 J $J (J -J J 
JXW'W$W ,W
 W W 
Wr/'// 	/
 / 
/2=/'=/=/ 	=/
 =/ 
=/~*'*4* 	*
 * 
**'*4* 	*
 * 
*/'// 	/
 / 
/*1'1$1 1
 1 1 
1f/'/14/AG/SX/	/ *(* 5* 	*
 * 
*r;   r   c                     | syt        | d      xs t        | d      }t        | d      xs t        | d      }t        | d      }|||fS )NNNNprompt_tokensinput_tokenscompletion_tokensoutput_tokenstotal_tokensr   )token_usager  r  r  s       r9   _extract_tokensr    sd     k?; z^@L {,?@ J_EM k>:L44r;   c                     | syd}d}d}| D ]>  }|D ]7  }t        |      }t        |      \  }}}	|||ndz  }|||ndz  }||	|	ndz  }9 @ |dkD  r|nd|dkD  r|nd|dkD  r|fS 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
             r9    _extract_tokens_from_generationsr'    s     KLK K 	KC*3/K8G8T5L-<+C<JK]-FMAML<+C<JK	KK #QD$q(d"Q  -1 r;   c                     d}t        | d      }||D ]  }t        ||      }||c S  t        | d      }||D ]  }t        ||      }||c S  |D ]  }t        | |      }||c S  y)zM
    Check multiple paths to extract token usage from different objects.
    )usager  usage_metadatarX   N
llm_outputr  )objpossible_namesrX   r   r)  r+  s         r9   r!  r!    s     @Ni(G" 	Dw-E 	
 C.J" 	Dz40E 	
  3%L
 r;   c                 >   t        |      }|rt        |      \  }}}nt        |j                        \  }}}| | j	                  t
        j                  |       | | j	                  t
        j                  |       |!| j	                  t
        j                  |       y y ro   )	r!  r  r'  r   r   r   GEN_AI_USAGE_INPUT_TOKENSGEN_AI_USAGE_OUTPUT_TOKENSGEN_AI_USAGE_TOTAL_TOKENS)r   r   r  r  r  r  s         r9   r   r     s    "8,K4CK4P1m\4T  5
1m\ h88,G h99=Ih88,G  r;   c                    t        | dd      }t        |dd      }t        |di       }t        | dd      xs3 t        |dd      xs$ |j                  d      xs |j                  d      }|rt        |      dkD  r|nd}	 d}t        |      dkD  r|d   j                  d	      }||j                  d	      }||fS # t        $ r Y |fS w xY w)
z?
    Get the agent name and available tools for the agent.
    agentNrunnableconfigr   available_toolsr      r   )r   r4   r   	Exception)r,  r  r   r3  r4  runnable_configr   
agent_names           r9   _get_request_datar;    s     C$'Euj$/Hh"5OWd# 	25'4(	2w'	2 01	 
 s5zA~E4E
t9q=aZ0J(,,Z8J   s   ?7B: :	C	C	c           	         | syt        | t        t        f      syg }| D ]  }	 t        |t              rd|v rTt        |d   t              rA|d   }|j	                  d      |j	                  d      d}|d   rf|j                  |       nSd|v r6|j	                  d      |j	                  d      d}|j                  |       n|j	                  d      xs$ |j	                  d      xs |j	                  d      }|r|j                  ||j	                  d      xs |j	                  d      d       nt        |d      rAt        |dd      t        |dd      xs t        |dd      d}|d   rn|j                  |       n\t        |d	      r*|j                  |j                  t        |d
d      d       n&t        |      }|r|dk7  r|j                  |dd        |r|S dS # t        $ r Y w xY w)z/Parse and simplify tools into a cleaner format.Nfunctionr   r  )r   r  r  function_namedescry   r  r   )r5   rI   rJ   rK   r4   rL   hasattrr   ry   r6   r8  )r   simplified_toolstoolfuncsimplified_toolr   tool_strs          r9   _simplify_langchain_toolsrF  $  s	   edE]+ 32	$%%*T*5Et*L
+D $ 0'+xx'>'O 'v.(//@t^ $ 0'+xx'>'O %++O< ( 588K0588O4 
 (//(,/3xx/F 04#'88F#3 v&#D&$7#*4#E $3tVT2#
 #6*$++O<z* '' $'.tY'E t9B$++Xd,STc3j  09T9  		s   F<G))	G65G6c                 `    |,t        |      }|rt        | t        j                  |d       yyy)z9Set available tools data on a span if tools are provided.NFr   )rF  r   r   GEN_AI_REQUEST_AVAILABLE_TOOLS)r   r   rA  s      r9   r   r   e  s:    4U;77 	  r;   c                 V     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   rf   c                    t        j                         j                  t              }| 	| ||g|i |S |xs g }t	        |t
              r|j                  }nKt	        |t              r|g}n7t	        |t              r|}n$t        j                  d|        	| ||g|i |S t	        |t
              r|j                  }nt	        |t              r|}ng }t        d t        j                  ||      D              sqt        |j                  |j                         }t	        |t
              r&|j#                         }g |j                  ||_        nt	        |t              r||g}ng ||} 	| ||g|i |S )NzUnknown callback type: %sc              3   <   K   | ]  }t        |t                y wro   )r5   r   ).0cbs     r9   	<genexpr>z9_wrap_configure.<locals>.new_configure.<locals>.<genexpr>  s       
 r23
s   )r   
get_clientget_integrationr`   r5   r$   handlersr#   rI   r   debugany	itertoolschainr   rd   rc   copy)
rJ  rK  rL  r  r   integrationcallbacks_listinheritable_callbacks_listsentry_handlerfs
            r9   new_configurez&_wrap_configure.<locals>.new_configures  s    !++-==>RS$% 	
   */R o':;,55N)<=-.N.,NLL4oF$% 	
   +-@A)>)G)G&-t4)>&)+& 
oon6PQ
 
 5%%++N /+>?"1"6"6"8,$--,",( O-@A#2N"C"DO"D^"D !
 	

 
 	
r;   )NN)r   rS   )r^  r_  s   ` r9   rp   rp   r  sj    
1X .2'+I
"I
*I
 %I
 	I

 I
 
I
 I
V r;   c                 0     t               d fd       }|S )Nc                    t        j                         j                  t              }| | g|i |S t	        | ||      \  }}t               } |t        j                  |rd| ndt        j                        5 }|r |j                  t        j                  |       |j                  t        j                  d       |j                  t        j                  d       t        ||        | g|i |}|j                  d      }	|	bt!               rX|j"                  rLt%        |	g      }
t        j&                         }t)        |
||      }|t+        |t        j,                  |d       |j                  d      }|1t!               r'|j"                  rt+        |t        j.                  |       |cd d d        S # 1 sw Y   y xY w)Ninvoke_agent invoke_agentr   Finputr   r
  )r   rR  rS  r`   r;  r	   r   GEN_AI_INVOKE_AGENTr}   r   r   r   r   GEN_AI_RESPONSE_STREAMINGr   r4   r   rc   r
   r   r   r   r   r   )rb   r  r   rZ  r   r   start_span_functionr   rF   rd  r   r   r   r
  r^  s                 r9   
new_invokez/_wrap_agent_executor_invoke.<locals>.new_invoke  s    ++-==>RST+D+F+++D$?%57 %%/7=
+^'..
 +	 h998DMM(88.IMM(<<eDtU+ t-d-f-FJJw'E!+-//&=ug&F#"446 >'u! !,' 88%$	 ZZ)F"+-//#D(*G*GPW+	 +	 +	s   ?D5F>>Grb   r   r  r   r   r   rf   r   r   )r^  rh  s   ` r9   rr   rr     s"    
1X3 3j r;   c                 0     t               d fd       }|S )Nc                    t        j                         j                  t               | g|i |S t	        | ||      \  }}t               } |t        j                  |rd| ndt        j                        j                          |r j                  t        j                  |       j                  t        j                  d       j                  t        j                  d       t        |       t!        |      dk\  r|d   j#                  d      nd }|bt%               rXj&                  rLt)        |g      }t        j*                         }t-        ||      }	|	t/        t        j0                  |	d	        | g|i |}
|
dfd
}dfd}t3        t5        |
            dk(  r	 |       }
|
S  |       }
|
S )Nrb  rc  r   Tr7  r   rd  Fr   c               3   v  K   d} 	 D ]  }|  	 j                  d      }|1t               r'j                  rt	        t
        j                  |        j                  |   y # t        $ r d }Y Pw xY w# t        $ r! t        j                         } t                w xY w#  j                  |   w xY wwNr  r
  r4   r8  r   rc   r   r   r   sysexc_infor   r   rp  eventr
  rZ  old_iteratorr   s      r9   new_iteratorzE_wrap_agent_executor_stream.<locals>.new_stream.<locals>.new_iterator-  s     /AH))  EK ""YYx0F
 &/1#33'h.K.KVT x( ! "!F"  <<> & x(sJ   B9A8 A' 3A8 B9'A52A8 4A55A8 8*B""B% %B66B9c                   K   d} 	 2 3 d {   }| 7 
6 	 j                  d      }n# t        $ r d }Y nw xY w|1t               r'j                  rt	        t
        j                  |       n-# t        $ r! t        j                         } t                w xY w j                  |   y #  j                  |   w xY wwrm  rn  rq  s      r9   new_iterator_asynczK_wrap_agent_executor_stream.<locals>.new_stream.<locals>.new_iterator_asyncF  s     /AH)#/    %K <""YYx0F  "!F" &/1#33'h.K.KVT <<> & x(x(sc   CA3 A3 A3 . A3 <A3 <6A3 2B0 3*BB0  C0CCz<class 'async_generator'>)rf   zIterator[Any])rf   zAsyncIterator[Any])r   rR  rS  r`   r;  r	   r   re  r}   r   r   r   r   r   rf  r   r   r4   r   rc   r
   r   r   r   r   r6   rS   )rb   r  r   r   r   rg  rd  r   r   r   rF   rt  rv  rZ  rs  r   r^  s                @@@r9   
new_streamz/_wrap_agent_executor_stream.<locals>.new_stream  s    ++-==>RST+D+F+++D$?%57"%%/7=
+^'..

 	MM(55x@h44nEh88$?4'(+D	QQG$D')++"95'"B002E:#T5M (#44! 	 4)$)&)	)2	)2 tF| ;;')F  "^Fr;   ri  r   )r^  rw  s   ` r9   rt   rt     s$    
1Xf fP r;   c                 <   | yt        | d      rt        | j                        | _        t        | d      rt        | j                        | _        t        | d      rt	        | j
                        | _        t        | d      rt	        | j                        | _        yy)z<Patch an embeddings provider class with monitoring wrappers.Nembed_documentsembed_queryaembed_documentsaembed_query)r@  _wrap_embedding_methodry  rz  _wrap_async_embedding_methodr{  r|  )provider_classs    r9   rv   rv   i  s    ~01)?***
& ~}-%;N<V<V%W"~12*F+++
' ~~.&B'''
# /r;   c                 0     t               d fd       }|S )z>Wrap sync embedding methods (embed_documents and embed_query).c                    t        j                         j                  t              }| 	| g|i |S t	        | dd       xs t	        | dd       }t        j
                  t        j                  |rd| ndt        j                        5 }|j                  t        j                  d       |r |j                  t        j                  |       t               rQ|j                  rEt        |      dkD  r7|d   }t!        |t"              r|n|g}t%        |t        j&                  |d        	| g|i |}|cd d d        S # 1 sw Y   y xY w	Nr   r   zembeddings 
embeddingsr   r   Fr   r   rR  rS  r`   r   r   r   GEN_AI_EMBEDDINGSr}   r   r   r   r   r   rc   r   r5   rI   r   GEN_AI_EMBEDDINGS_INPUT
rb   r  r   rZ  r   r   
input_datatextsrF   r^  s
            r9   new_embedding_methodz4_wrap_embedding_method.<locals>.new_embedding_method  s/    ++-==>RST+D+F++T7D1VWT<QU5V
""##/9;zl+|'..
 	 MM(88,Gh;;ZH ()//IM!!W
&0T&B
#(::E% t-d-f-F/	 	 	s   B+EEri  r   )r^  r  s   ` r9   r}  r}  ~  s#     1X >  r;   c                 @     t               	 	 	 	 	 	 	 	 d fd       }|S )zAWrap async embedding methods (aembed_documents and aembed_query).c                   K   t        j                         j                  t              }| 	| g|i | d {   S t	        | dd       xs t	        | dd       }t        j
                  t        j                  |rd| ndt        j                        5 }|j                  t        j                  d       |r |j                  t        j                  |       t               rQ|j                  rEt        |      dkD  r7|d   }t!        |t"              r|n|g}t%        |t        j&                  |d        	| g|i | d {   }|cd d d        S 7 7 # 1 sw Y   y xY wwr  r  r  s
            r9   new_async_embedding_methodz@_wrap_async_embedding_method.<locals>.new_async_embedding_method  sK     !++-==>RS41$1&111T7D1VWT<QU5V
""##/9;zl+|'..
 	 MM(88,Gh;;ZH ()//IM!!W
&0T&B
#(::E% T3D3F33F/	 	 22 4-	 	s;   9E&EAE&B-EEEE&EE#E&ri  r   )r^  r  s   ` r9   r~  r~    sD     1X!-2	 B &%r;   )r7   r   rf   zOptional[str])rE   r   rf   r   )rM   r   rf   r   )rU   r  rf   r  )rV   r  rf   zList[TextPart])r  r   rf   2tuple[Optional[int], Optional[int], Optional[int]])r   r   rf   r  )r,  r   rf   r  )r   r    r   r   rf   N)r,  r   r  r   r   r   rf   z)tuple[Optional[str], Optional[List[Any]]])r   r   rf   zOptional[List[Any]])r   r    r   r   rf   N)r^  Callable[..., Any]rf   r  )r  r   rf   N)krW  ro  r   rj   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   r:    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   rG   rP   r[   r^   r`   r   r   r  r'  r!  r   r;  rF  r   rp   rr   rt   rv   r}  r~  r]   r;   r9   <module>r     s    
   #     9  + = 4 A @	 	 	 '*21  4061!6</17!;1
 "BB8844 @@6655****	
;#
;
;(,	$		$5; $5N t*1 t*n5595"948H&	%*0:>:B
M`7tjZ
*# L%&_#  2
0
112  2 	  
  ! !
  
  
  
  
  ! !
  s   G +G 2G7 9H  H H! H/ H= I #I GG4G#"G4#G-*G4,G--G43G47HHHHHH!H,+H,/H:9H:=IIIII$#I$