o
    i2                     @   s  d dl mZ d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ G dd deZdS )    )
isfunction)Any)Optional)core)	COMPONENT)get_argument_value)AGENT_MANIFEST)DISPATCH_ON_TOOL_CALL)INPUT_VALUE)METADATA)
MODEL_NAME)MODEL_PROVIDER)NAME)OUTPUT_VALUE)	SPAN_KIND)BaseLLMIntegration)&extract_message_from_part_google_genai) extract_messages_from_adk_events)	_get_attr)	safe_json)Spanc                   @   s*  e Zd ZdZ	ddedee dee ddfddZ			dded
ee de	e
ef dee de
ddfddZded
ee de	e
ef dee ddf
ddZ	dded
ee de	e
ef dee ddf
ddZdede	e
ef deddfddZ	dded
ee de	e
ef dee ddf
ddZdd ZdS )GoogleAdkIntegration
google_adkNspanmodelproviderreturnc                 K   s6   | t| j |r|d| |r|d| d S d S )Ngoogle_adk.request.modelgoogle_adk.request.provider)_set_tag_strr   _integration_nameset_tag)selfr   r   r   kwargs r$   [/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/llmobs/_integrations/google_adk.py_set_base_span_tags   s   z(GoogleAdkIntegration._set_base_span_tags argsr#   response	operationc              
   C   sz   |dkr|  |||| n|dkr| |||| n|dkr&| |||| |t|t|dp1dt|dp8di d S )Nagenttoolcode_executer   r'   r   )_llmobs_set_tags_agent_llmobs_set_tags_tool_llmobs_set_tags_code_execute_set_ctx_itemsr   r   get_tagr   )r"   r   r(   r#   r)   r*   r$   r$   r%   _llmobs_set_tags%   s   z%GoogleAdkIntegration._llmobs_set_tagsc                 C   s   | dd }t|dd }| ||| t||ddddpg }t|dg }t|dd	}	d	}
|D ]}|
t||	 d
d	7 }
q.t|}|t|pFdt|
t	|i d S )Ninstancenamer   new_messageT)optionalpartsroler'   contentzGoogle ADK Agent)
getgetattr_tag_agent_manifestr   r   r   r1   r   r
   r   )r"   r   r(   r#   r)   agent_instance
agent_namer6   new_message_partsnew_message_rolemessagepartresultr$   r$   r%   r.   <   s    z+GoogleAdkIntegration._llmobs_set_tags_agentc           
      C   s   t ||dd}t ||dd}t|di dd}|t| t|dd}t|d	d}	|t|td	|	it|i |rHt	
t|t|d
||f d S d S )Nr   r,      r(   tool_contextfunction_call_idr'   r5   descriptionfunction)r   r<   r;   _set_ctx_itemr   r1   r   r   r
   r   dispatchr	   r   )
r"   r   r(   r#   r)   r,   	tool_argstool_call_id	tool_nametool_descriptionr$   r$   r%   r/   S   s.   z*GoogleAdkIntegration._llmobs_set_tags_toolr+   c                 C   s   |sd S i }d|d< t |dd|d< t t |dddd|d< t |dd|d< t |dd|d< tt |d	d|d
< |dd|ddd|d< | t |dg |d< |t| d S )Nz
Google ADK	frameworkr5   r'   r   rH   instructioninstructionsmodel_configmodel_configuration
session_iduser_id)rU   rV   session_managementtools)r<   r   r;   _get_agent_toolsrJ   r   )r"   r   r#   r+   manifestr$   r$   r%   r=   r   s   


z(GoogleAdkIntegration._tag_agent_manifestc           	   	   C   sh   t |dd }t |dd }d}|r||7 }|r|d| 7 }t||dd}|tdtt |ddt|i d S )	Nstdoutstderrr'   z/nrE   code_execution_inputzGoogle ADK Code Executecode)r<   r   r1   r   r
   r   )	r"   r   r(   r#   r)   r[   r\   output
code_inputr$   r$   r%   r0      s   z2GoogleAdkIntegration._llmobs_set_tags_code_executec                 C   sf   |rt |ts	g S g }|D ]#}t|r|j}|jpd}nt|dd}t|dd}|||d q|S )Nr'   r5   z
Agent ToolrH   )r5   rH   )
isinstancelistr   __name____doc__r   append)r"   rX   agent_toolsr,   rN   rO   r$   r$   r%   rY      s   z%GoogleAdkIntegration._get_agent_tools)NN)Nr'   )N)rc   
__module____qualname__r    r   r   r   r&   rb   dictstrr3   r.   r/   r=   r0   rY   r$   r$   r$   r%   r      s    






"

r   N) inspectr   typingr   r   ddtrace.internalr   ddtrace.internal.constantsr   ddtrace.internal.utilsr   ddtrace.llmobs._constantsr   r	   r
   r   r   r   r   r   r   !ddtrace.llmobs._integrations.baser   )ddtrace.llmobs._integrations.google_utilsr   r   ddtrace.llmobs._utilsr   r   ddtrace.tracer   r   r$   r$   r$   r%   <module>   s,    