o
    S۷i                     @   sv  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
rd 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 z d dl1m2Z2 d dl3m4Z4m5Z5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z; W n e<y   edw zd dl=m>Z> W n e<y   zd dl?m>Z> W n e<y   dZ>Y nw Y nw zd dl@mAZA W n e<y   dZAY nw zd dl@mBZB W n e<y	   dZBY nw zd dlCmDZD W n e<y   dZDY nw zd dlEmFZF W n e<y3   dZFY nw zd dlGmHZH W n e<yH   dZHY nw zd dlImJZJ W n e<y]   dZJY nw zd dlKmLZL W n e<yr   dZLY nw zd dlMmNZN W n e<y   dZNY nw ejOejPejQejRejSejPejTejUdZV		 	!	 dmd"d#ZWdnd&d'ZXe jYd(dd)ZZd*e[d+< dod.d/Z\dpd0d1Z]dpd2d3Z^dqd7d8Z_	9	6	!	:drd;d<Z`G d=d> d>eZaG d?d@ d@ZbG dAdB dBe4Zc	C	%	!	DdsdEdFZd	G	%	!	DdtdHdIZedudLdMZfdvdQdRZg	J	%	S	%	T	%	!	UdwdVdWZhdxdZd[Zidyd\d]Zjdzd`daZkdzdbdcZldzdddeZmd{dgdhZndzdidjZodzdkdlZpdS )|    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                 C   s   t | }|dur
|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).
    N)r   )r9   result r=   W/home/ubuntu/vllm_env/lib/python3.10/site-packages/sentry_sdk/integrations/langchain.py"_transform_langchain_content_block{   s   	r?   contentr   c                 C   sV   t | tr| S t | ttfr)g }| D ]}t |tr!|t| q|| q|S | S )zk
    Transform LangChain message content, handling both string content and
    list of content blocks.
    )
isinstancestrlisttupledictappendr?   )r@   transformedblockr=   r=   r>   $_transform_langchain_message_content   s   

rI   langchain_agent_stack)defaultz5contextvars.ContextVar[Optional[List[Optional[str]]]]_agent_stack
agent_nameOptional[str]c                 C   s6   t  }|du rg }n| }||  t | dS )z"Push an agent name onto the stack.N)rL   getcopyrF   set)rM   stackr=   r=   r>   _push_agent   s   
rS   c                  C   s.   t  } | r|  } |  }t |  |S dS )z/Pop an agent name from the stack and return it.N)rL   rO   rP   poprQ   )rR   rM   r=   r=   r>   
_pop_agent   s   
rU   c                  C   s   t  } | r
| d S dS )z>Get the current agent name (top of stack) without removing it.N)rL   rO   )rR   r=   r=   r>   _get_current_agent   s   rW   messagesList[List[BaseMessage]]	List[str]c                 C   s   g }| D ]P}|D ]K}|j dkrt|jtr||j q|j dkrSt|jtrS|jD ](}t|tr7|| q*t|trR|ddkrR|d}t|trR|| q*qq|S )Nsystemtypetext)r\   rA   r@   rB   rF   rC   rE   rO   )rX   system_instructionslist_messageiteminstructionr=   r=   r>   _get_system_instructions   s    




rc   r^   List[TextPart]c                 C   s   dd | D S )Nc                 S   s   g | ]}d |dqS )r]   )r\   r@   r=   ).0rb   r=   r=   r>   
<listcomp>   s    z2_transform_system_instructions.<locals>.<listcomp>r=   )r^   r=   r=   r>   _transform_system_instructions   s   rg   c                	   @   sH   e Zd ZdZde Z		ddd deddd	dfd
dZedddZdS )LangchainIntegration	langchainzauto.ai.TNselfinclude_prompts	max_spansOptional[int]r;   c                 C   s,   || _ || _|d urtjdtd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)rk   rl   warningswarnDeprecationWarning)rj   rk   rl   r=   r=   r>   __init__   s   
zLangchainIntegration.__init__c                   C   sp   t tjt_td urt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/   r0   r=   r=   r=   r>   
setup_once   s   zLangchainIntegration.setup_once)TNr;   N)	__name__
__module____qualname__
identifieroriginboolrs   staticmethodr|   r=   r=   r=   r>   rh      s     

rh   c                   @   s<   e Zd ZU dZded< g Zded< dZeed< dd	d
ZdS )WatchedSpanNr   spanzList[WatchedSpan]childrenFis_pipeliner;   c                 C   s
   || _ d S rt   )r   )rj   r   r=   r=   r>   rs     s   
zWatchedSpan.__init__)r   r   r;   N)	r~   r   r   r   __annotations__r   r   r   rs   r=   r=   r=   r>   r     s
   
 r   c                   @   s  e Zd ZdZdddeddfddZdHd	d
ZdIddZdJddZ		 								dKddZ			 						dLddZ
dddd	 	 	!	"	#			$	%	&	'	(	)				dMd*d+Z		 	 	!	,	-						dNd.d/Z		 	0	1						dOd2d3Z		 	0	1						dOd4d5Z		 		6						dPd7d8Z		 		6						dPd9d:Z		 	;	<						dQd=d>Zdd d d!d?eddddddfd@dAZdd dBeddddddf
dCdDZ		 	E	6						dRdFdGZdS )SSentryLangchainCallbackz+Callback handler that creates Sentry spans.max_span_map_sizerm   rk   r;   Nc                 C   s   t  | _|| _|| _d S rt   )r   span_mapr   rk   )rj   r   rk   r=   r=   r>   rs     s   
z SentryLangchainCallback.__init__c                 C   sT   | j d ur&t| j| j kr(| jjdd\}}| || t| j| j ksd S d S d S )NF)last)r   lenr   popitem
_exit_span)rj   run_idwatched_spanr=   r=   r>   gc_span_map  s   
z#SentryLangchainCallback.gc_span_mapr   r   errorr   c                 C   s   t  7 |r|| jvr	 W d    d S | j| }|j}t| t||j |d d d  | j|= W d    d S 1 s=w   Y  d S rt   )r   r   r   r   
sentry_sdkcapture_exceptionscope__exit__)rj   r   r   	span_datar   r=   r=   r>   _handle_error$  s   

"z%SentryLangchainCallback._handle_errorr`   r&   c                 C   s&   t |j}|j|d}||j |S )Nroler@   )rI   r@   r\   updateadditional_kwargs)rj   r`   transformed_contentparsedr=   r=   r>   _normalize_langchain_message2  s   
z4SentryLangchainCallback._normalize_langchain_messagerj   	parent_idOptional[Any]kwargsr   c                 K   sv   d }|r| j |}|rt|jjdi |}|j| |d u r+ttjdi |}|j	  || j |< | 
  |S )Nr=   )r   rO   r   r   start_childr   rF   r   
start_span	__enter__r   )rj   r   r   r   r   parent_spanr=   r=   r>   _create_span9  s   

z$SentryLangchainCallback._create_spanr   c                 C   s*   |j rtd  |jd d d  | j|= d S rt   )r   r   r   r   r   )rj   r   r   r=   r=   r>   r   N  s   z"SentryLangchainCallback._exit_span)tagsparent_run_idmetadata
serializedr:   promptsrZ   r   Optional[List[str]]r   Optional[UUID]r   Optional[Dict[str, Any]]c                K   s  t   |s	 W d   dS |di }||di  |dp.|dp.|dp.d}	| j||tj|dp;d	tjd
}
|
j}|	rL|	t
j|	 |dd}d|v r^|	t
jd nd|v ri|	t
jd t D ]\}}||v r|| durt|||| dd qmt||d t r| jrdd |D }t }t|||}|durt|t
j|dd W d   dS W d   dS W d   dS W d   dS 1 sw   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                 S   s   g | ]}t jd |ddqS )r]   )r\   r]   r   )r   USER)re   promptr=   r=   r>   rf     s    z8SentryLangchainCallback.on_llm_start.<locals>.<listcomp>)r   rO   r   r   r   GEN_AI_PIPELINErh   r   r   set_datar   GEN_AI_REQUEST_MODELGEN_AI_SYSTEMDATA_FIELDSitemsr
   _set_tools_on_spanr   rk   r   get_current_scoper   GEN_AI_REQUEST_MESSAGES)rj   r   r   r   r   r   r   r   
all_paramsr   r   r   ai_typekey	attributenormalized_messagesr   messages_datar=   r=   r>   on_llm_startW  st   
))5"z$SentryLangchainCallback.on_llm_startrX   rY   c                K   sH  t   |s	 W d   dS |di }||di  |dp/|dp/|dp/d}| j||dtjd	|  tjd
}|j	}|
tjd |rW|
tj| |dd}	d|	v ri|
tjd nd|	v rt|
tjd t }
|
r|
tj|
 t D ]\}}||v r|| durt|||| dd qt||d t r| jr	t|}t|dkr|
tjtt| g }|D ]}|D ]}|jdkrq|| | qqt |}t!" }t#|||}|durt|tj$|dd W d   dS W d   dS W d   dS W d   dS 1 s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   rO   r   r   r   GEN_AI_CHATstriprh   r   r   r   r   GEN_AI_OPERATION_NAMEr   r   rW   GEN_AI_AGENT_NAMEr   r   r
   r   r   rk   rc   r   GEN_AI_SYSTEM_INSTRUCTIONSjsondumpsrg   r\   rF   r   r	   r   r   r   r   )rj   r   rX   r   r   r   r   r   r   r   rM   r   r   r^   r   r_   r`   r   r   r=   r=   r>   on_chat_model_start  s   
	


++A$z+SentryLangchainCallback.on_chat_model_startresponser'   c                K   s   t  ? |r|| jvr	 W d   dS | j| }|j}t r/| jr/t|tjdd |jD  t	|| | 
|| W d   dS 1 sEw   Y  dS )z!Run when Chat Model ends running.Nc                 S      g | ]	}d d |D qS )c                 S      g | ]}|j qS r=   r]   re   xr=   r=   r>   rf         zHSentryLangchainCallback.on_chat_model_end.<locals>.<listcomp>.<listcomp>r=   re   r_   r=   r=   r>   rf         z=SentryLangchainCallback.on_chat_model_end.<locals>.<listcomp>)r   r   r   r   rk   r
   r   GEN_AI_RESPONSE_TEXTgenerations_record_token_usager   )rj   r   r   r   r   r   r=   r=   r>   on_chat_model_end  s   

"z)SentryLangchainCallback.on_chat_model_endc          
   	   K   s  t   |r|| jvr	 W d   dS | j| }|j}z	|jd d }W n ty0   d}Y nw |durz|jjd}|durH|t	j
| W n	 tyR   Y nw z|jd}|dure|t	j| W n	 tyo   Y nw z t r| jrt|jdd}	|	dur|	g krt|t	j|	dd W n	 ty   Y nw t r| jrt|t	jdd	 |jD  t|| | || W d   dS 1 sw   Y  dS )
zRun when LLM ends running.Nr   r   finish_reasonr6   Fr   c                 S   r   )c                 S   r   r=   r   r   r=   r=   r>   rf   C  r   zASentryLangchainCallback.on_llm_end.<locals>.<listcomp>.<listcomp>r=   r   r=   r=   r>   rf   C  r   z6SentryLangchainCallback.on_llm_end.<locals>.<listcomp>)r   r   r   r   
IndexErrorr`   response_metadatarO   r   r   GEN_AI_RESPONSE_MODELAttributeErrorgeneration_infoGEN_AI_RESPONSE_FINISH_REASONSr   rk   getattrr
   GEN_AI_RESPONSE_TOOL_CALLSr   r   r   )
rj   r   r   r   r   r   
generationresponse_modelr   r6   r=   r=   r>   
on_llm_end  sn   

"z"SentryLangchainCallback.on_llm_end#Union[Exception, KeyboardInterrupt]c                K      |  || dS )zRun when LLM errors.Nr   rj   r   r   r   r=   r=   r>   on_llm_errorI     z$SentryLangchainCallback.on_llm_errorc                K   r   )zRun when Chat Model errors.Nr   r   r=   r=   r>   on_chat_model_errorS  r   z+SentryLangchainCallback.on_chat_model_errorfinishr!   c                K   s   t  7 |r|| jvr	 W d    d S | j| }|j}t r,| jr,t|tj|j	  | 
|| W d    d S 1 s=w   Y  d S rt   )r   r   r   r   rk   r
   r   r   return_valuesr   r   )rj   r   r   r   r   r   r=   r=   r>   on_agent_finish]  s   
"z'SentryLangchainCallback.on_agent_finish	input_strc          
      K   s   t   |s	 W d   dS |dp|dpd}| j||dtjd|  tjd}|j}|	t
jd |	t
j| |d}|durP|	t
j| t }	|	r\|	t
j|	 t rv| jr~t|t
j|d	|g W d   dS W d   dS W d   dS 1 sw   Y  dS )
zRun when tool starts running.Nr   r   r   zexecute_tool r   execute_tooldescriptioninputs)r   rO   r   r   GEN_AI_EXECUTE_TOOLr   rh   r   r   r   r   r   GEN_AI_TOOL_NAMEGEN_AI_TOOL_DESCRIPTIONrW   r   r   rk   r
   GEN_AI_TOOL_INPUT)
rj   r   r   r   r   	tool_namer   r   tool_descriptionrM   r=   r=   r>   on_tool_startr  s@   	
"z%SentryLangchainCallback.on_tool_startoutputc                K   s   t  4 |r|| jvr	 W d   dS | j| }|j}t r)| jr)t|tj| | || W d   dS 1 s:w   Y  dS )zRun when tool ends running.N)	r   r   r   r   rk   r
   r   GEN_AI_TOOL_OUTPUTr   )rj   r	  r   r   r   r   r=   r=   r>   on_tool_end  s   
"z#SentryLangchainCallback.on_tool_endargsc                O   r   )zRun when tool errors.Nr   )rj   r   r   r  r   r=   r=   r>   on_tool_error  r   z%SentryLangchainCallback.on_tool_errorr}   )r   r   r   r   r;   N)r`   r&   r;   r   )
rj   r   r   r   r   r   r   r   r;   r   )rj   r   r   r   r   r   r;   N)rj   r   r   r:   r   rZ   r   r   r   r   r   r   r   r   r   r   r;   r   )rj   r   r   r:   rX   rY   r   r   r   r   r;   r   )
rj   r   r   r'   r   r   r   r   r;   r   )
rj   r   r   r   r   r   r   r   r;   r   )
rj   r   r   r!   r   r   r   r   r;   r   )
r   r   r  r   r   r   r   r   r;   r   )r~   r   r   __doc__r   rs   r   r   r   r   r   r   r   r   r   r   r   r   rB   r  r  r  r=   r=   r=   r>   r     s:   





	

I
R

>





*
r   token_usage2tuple[Optional[int], Optional[int], Optional[int]]c                 C   sD   | 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  r=   r=   r>   _extract_tokens  s   

r  r   c           
      C   s   | sdS d}d}d}| D ]0}|D ]+}t |}t|\}}}	||dur$|nd7 }||dur.|nd7 }||	dur8|	nd7 }qq|dkrC|nd|dkrJ|nd|dkrR|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  r=   r=   r>    _extract_tokens_from_generations  s&   
r  objr   c                 C   s   d}t | d}|dur|D ]}t ||}|dur|  S qt | d}|dur8|D ]}t ||}|dur7|  S q(|D ]}t | |}|durI|  S q: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#  r=   r=   r>   r    s*   




r  r   r   r   c                 C   sv   t |}|rt|\}}}nt|j\}}}|d ur!| tj| |d ur,| tj| |d ur9| tj| d S d S rt   )	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  r=   r=   r>   r     s   
r   r  r   )tuple[Optional[str], Optional[List[Any]]]c                 C   s   t | dd}t |dd}t |di }t | ddp't |ddp'|dp'|d}|r2t|dkr2|nd}z"d}t|dkrD|d d	}|du rR|d	}W ||fS W ||fS  tyb   Y ||fS w )
z?
    Get the agent name and available tools for the agent.
    agentNrunnableconfigr   available_toolsr      run_name)r   rO   r   	Exception)r   r  r   r)  r*  runnable_configr   rM   r=   r=   r>   _get_request_data  s0   
r1  r   Optional[List[Any]]c              	   C   s  | sdS t | ttfsdS g }| D ]}zt |trtd|v r=t |d tr=|d }|d|dd}|d r<|| n~d|v rR|d|dd}|| ni|dp`|dp`|d}|rs|||dpo|dd nGt|drt|ddt|ddpt|ddd}|d r|| n%t|d	r||jt|d
dd nt	|}|r|dkr||dd W q t
y   Y qw |r|S dS )z/Parse and simplify tools into a cleaner format.Nfunctionr   r   )r   r   r  function_namedescr~   r  r   )rA   rC   rD   rE   rO   rF   hasattrr   r~   rB   r/  )r   simplified_toolstoolfuncsimplified_toolr   tool_strr=   r=   r>   _simplify_langchain_tools.  sp   









r<  c                 C   s2   |durt |}|rt| tj|dd dS dS dS )z9Set available tools data on a span if tools are provided.NFr   )r<  r
   r   GEN_AI_REQUEST_AVAILABLE_TOOLS)r   r   r7  r=   r=   r>   r   o  s   
r   fCallable[..., Any]c                    s8   t  	 	 ddtddddddddddf fd	d
}|S )Ncallback_manager_clsinheritable_callbacksr$   local_callbacksr  r   r   r;   c           	         s>  t  t}|d u r | ||g|R i |S |pg }t|tr%|j}n$t|tr.|g}nt|tr6|}nt	
d|  | ||g|R i |S t|trR|j}n
t|trZ|}ng }tdd t||D st|j|j}t|tr| }g |j||_nt|tr||g}ng ||} | ||g|R i |S )NzUnknown callback type: %sc                 s   s    | ]}t |tV  qd S rt   )rA   r   )re   cbr=   r=   r>   	<genexpr>  s
    
z9_wrap_configure.<locals>.new_configure.<locals>.<genexpr>)r   
get_clientget_integrationrh   rA   r#   handlersr"   rC   r   debugany	itertoolschainr   rl   rk   rP   )	r@  rA  rB  r  r   integrationcallbacks_listinheritable_callbacks_listsentry_handlerr>  r=   r>   new_configure}  sv   



	




z&_wrap_configure.<locals>.new_configure)NN)r   r\   )r>  rQ  r=   rP  r>   ru   |  s"   Kru   c                       t  d fdd}|S )	Nrj   r   r  r   r;   c                    st  t  t}|d u r | g|R i |S t| ||\}}t }|tj|r+d| ndtjd}t	| zu|r@|
tj| |
tjd |
tjd t||  | g|R i |}|d}	|	d urt r|jrt|	g}
t  }t|
||}|d urt|tj|dd |d}|d urt r|jrt|tj| |W t  W  d    S t  w 1 sw   Y  d S )Ninvoke_agent invoke_agentr   Finputr   r	  )r   rE  rF  rh   r1  r   r   GEN_AI_INVOKE_AGENTr   rS   r   r   r   r   GEN_AI_RESPONSE_STREAMINGr   rO   r   rk   r	   r   r   r
   r   r   rU   )rj   r  r   rL  rM   r   start_span_functionr   r<   rU  r   r   r   r	  rP  r=   r>   
new_invoke  sb   



0z/_wrap_agent_executor_invoke.<locals>.new_invokerj   r   r  r   r   r   r;   r   r   )r>  rY  r=   rP  r>   rw     s   :rw   c                    rR  )	Nrj   r   r  r   r;   c                    sv  t  t  d u r| g|R i |S t| ||\}}t }|tj|r+d| ndtjd	  t
| |rBtj| tjd tjd t| t|dkrb|d dnd }|d urt r jrt|g}t  }t||}	|	d urttj|	dd	 | g|R i |}
|
d fdd}d fdd}tt|
dkr| }
|
S | }
|
S )NrS  rT  r   Tr-  r   rU  Fr   r;   Iterator[Any]c                  3   s    d} zJz.D ]}|V  qz| d}W n ty   d }Y nw |d ur1t r1 jr1ttj| W n tyB   t } t	  w W t
  j|   d S t
  j|   w Nr  r	  rO   r/  r   rk   r
   r   r   sysexc_infor   rU   r   r_  eventr	  rL  old_iteratorr   r=   r>   new_iterator>  s6   zE_wrap_agent_executor_stream.<locals>.new_stream.<locals>.new_iteratorAsyncIterator[Any]c                    s   d} zOz32 z	3 d H W }|V  q6 z| d}W n ty$   d }Y nw |d ur6t r6 jr6ttj| W n tyG   t } t	  w W t
  j|   d S t
  j|   w r\  r]  r`  rb  r=   r>   new_iterator_asyncX  s8   zK_wrap_agent_executor_stream.<locals>.new_stream.<locals>.new_iterator_asyncz<class 'async_generator'>)r;   r[  )r;   re  )r   rE  rF  rh   r1  r   r   rV  r   r   rS   r   r   r   r   rW  r   r   rO   r   rk   r	   r   r   r
   r   rB   r\   )rj   r  r   rM   r   rX  rU  r   r   r   r<   rd  rf  rP  rb  r>   
new_stream  sX   

z/_wrap_agent_executor_stream.<locals>.new_streamrZ  r   )r>  rg  r=   rP  r>   ry     s   lry   provider_classc                 C   sl   | du rdS t | drt| j| _t | drt| j| _t | dr't| j| _t | dr4t| j| _dS dS )z<Patch an embeddings provider class with monitoring wrappers.Nembed_documentsembed_queryaembed_documentsaembed_query)r6  _wrap_embedding_methodri  rj  _wrap_async_embedding_methodrk  rl  )rh  r=   r=   r>   r{   |  s"   




r{   c                    s   t  d	 fdd}|S )
z>Wrap sync embedding methods (embed_documents and embed_query).rj   r   r  r   r;   c           	         s
  t  t}|d u r | g|R i |S t| dd p!t| dd }t jtj|r-d| ndtjdH}|	t
jd |rD|	t
j| t rg|jrgt|dkrg|d }t|tr[|n|g}t|t
j|dd  | g|R i |}|W  d    S 1 s~w   Y  d S 	Nr   r   zembeddings 
embeddingsr   r   Fr   r   rE  rF  rh   r   r   r   GEN_AI_EMBEDDINGSr   r   r   r   r   r   rk   r   rA   rC   r
   GEN_AI_EMBEDDINGS_INPUT	rj   r  r   rL  r   r   
input_datatextsr<   rP  r=   r>   new_embedding_method  s4   
$z4_wrap_embedding_method.<locals>.new_embedding_methodNrZ  r   )r>  rw  r=   rP  r>   rm    s   rm  c                    s*   t  								d	 fdd}|S )
zAWrap async embedding methods (aembed_documents and aembed_query).rj   r   r  r   r;   c           	         s  t  t}|d u r | g|R i |I d H S t| dd p%t| dd }t jtj|r1d| ndtjdK}|	t
jd |rH|	t
j| t rk|jrkt|dkrk|d }t|tr_|n|g}t|t
j|dd  | g|R i |I d H }|W  d    S 1 sw   Y  d S ro  rq  rt  rP  r=   r>   new_async_embedding_method  s6   
$z@_wrap_async_embedding_method.<locals>.new_async_embedding_methodNrZ  r   )r>  rx  r=   rP  r>   rn    s   !rn  )r9   r:   r;   r:   )r@   r   r;   r   )rM   rN   r;   N)r;   rN   )rX   rY   r;   rZ   )r^   rZ   r;   rd   )r  r   r;   r  )r   r   r;   r  )r   r   r;   r   )r   r   r   r   r;   N)r   r   r  r   r   r   r;   r(  )r   r   r;   r2  )r   r   r   r   r;   N)r>  r?  r;   r?  )rh  r   r;   N)qcontextvarsrJ  r^  r   rp   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_huggingfacer/   langchain_ollamar0    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?   rI   
ContextVarrL   r   rS   rU   rW   rc   rg   rh   r   r   r  r  r  r   r1  r<  r   ru   rw   ry   r{   rm  rn  r=   r=   r=   r>   <module>   s  
  (
	







'	   &






A

P
?
q
&