o
    i                     @   s   d dl Z d dl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mZmZ d dlmZ d dlmZ er>d dlmZ eeZd	Zd
d ZG dd deZG dd deZG dd deZdS )    N)ABCabstractmethod)TYPE_CHECKINGAny)"ResponseFunctionToolCallOutputItem)AuthorMessageRoleTextContent)init_logger)random_uuid)ConversationContextz0.0.7c               
   C   s   ddl m} m} ddlm}m} z
|d}||}W n | y&   tdd |y9 } ztd| dd}~ww ||tk rLtdt d	| d
ddS )zp
    Check if the gpt-oss is installed and its version is at least 0.0.7.
    If not, raise an ImportError.
    r   )PackageNotFoundErrorversion)InvalidVersionVersiongpt_ossz#Package 'gpt_oss' is not installed.Nz&Invalid version string for 'gpt_oss': zgpt_oss >= z is required, but z is installed.)importlib.metadatar   r   packaging.versionr   r   ImportErrorMIN_GPT_OSS_VERSION)r   r   r   r   pkg_version_strpkg_versione r   O/home/ubuntu/vllm_env/lib/python3.10/site-packages/vllm/entrypoints/mcp/tool.pyvalidate_gpt_oss_install   s(   
r   c                   @   s8   e Zd ZedddefddZedddefddZdS )	Toolcontextr   returnc                       d S Nr   selfr   r   r   r   
get_result2      zTool.get_resultc                    r    r!   r   r"   r   r   r   get_result_parsable_context6   r%   z Tool.get_result_parsable_contextN)__name__
__module____qualname__r   r   r$   r&   r   r   r   r   r   1   s
    r   c                   @   sJ   e Zd Zdd ZdddefddZdddefdd	Zedefd
dZdS )HarmonyBrowserToolc              
   C   s   d| _ td}|sd| _ td d S zt  ddlm} ddlm	} W n t
yA } zd| _ td| W Y d }~d S d }~ww |d	|d
}||d| _td d S )NTEXA_API_KEYFz,EXA_API_KEY is not set, browsing is disabledr   )SimpleBrowserTool)
ExaBackendz<gpt_oss is not installed properly (%s), browsing is disabledweb)sourceapi_key)backendzBrowser tool initialized)enabledosgetenvloggerwarning_oncer   gpt_oss.tools.simple_browserr,   $gpt_oss.tools.simple_browser.backendr-   r   browser_tool	info_once)r#   exa_api_keyr,   r-   r   browser_backendr   r   r   __init__<   s*   

zHarmonyBrowserTool.__init__r   r   r   c                    T   ddl m} t||sJ |jd }g }| j|2 z3 d H W }|| q6 |S Nr   )HarmonyContext))vllm.entrypoints.openai.responses.contextr@   
isinstancemessagesr9   processappendr#   r   r@   last_msgtool_output_msgsmsgr   r   r   r$   S      
zHarmonyBrowserTool.get_resultc                    s
   t d)NzNot implemented yet)NotImplementedErrorr"   r   r   r   r&   ]   s   z.HarmonyBrowserTool.get_result_parsable_contextc                 C      | j jS r!   )r9   tool_configr#   r   r   r   rN   `      zHarmonyBrowserTool.tool_configN)	r'   r(   r)   r=   r   r$   r&   propertyrN   r   r   r   r   r*   ;   s    
r*   c                   @   sR   e Zd Zdd Zdd Zdddefdd	Zdddefd
dZedefddZ	dS )HarmonyPythonToolc              
   C   sb   d| _ zt  ddlm} W n ty* } zd| _ td| W Y d }~d S d }~ww | | _d S )NTr   )
PythonToolFzDgpt_oss is not installed properly (%s), code interpreter is disabled)r2   r   'gpt_oss.tools.python_docker.docker_toolrS   r   r5   r6   python_tool)r#   rS   r   r   r   r   r=   f   s   zHarmonyPythonTool.__init__c              
      s   | j sd S z4tttjdtddgdddd}g }| j|2 z3 d H W }|| q 6 |d j	d j
d	ks9J W n tyV } zd
| _ td| W Y d }~d S d }~ww td d S )N)rolezprint('Hello, world!')textanalysispythoncodeauthorcontentchannel	recipientcontent_typer   zHello, world!
FzMCode interpreter tool failed to initialize (%s), code interpreter is disabledz!Code interpreter tool initialized)r2   r   r   r	   	ASSISTANTr
   rU   rE   rF   r^   rX   	Exceptionr5   r6   r:   )r#   messagemsgsrJ   r   r   r   r   validatev   s4   

zHarmonyPythonTool.validater   r   r   c                    r>   r?   )rB   r@   rC   rD   rU   rE   rF   rG   r   r   r   r$      rK   zHarmonyPythonTool.get_resultc           	         s   ddl m} t||sJ |jjd }t|j}tt	dddt
|d dgd	d
dd}g }| j|2 z 3 dH W }tdt  ddt  |jd jdd}|| q56 |S )z
        This function converts parsable context types to harmony and
        back so we can use GPTOSS demo python tool
        r   )ParsableContextrA   	assistantN)rV   namer[   rW   rY   rZ   r\   fco_function_call_outputcall_	completed)idtypecall_idoutputstatus)rB   rg   rC   parserresponse_messagesjsonloads	argumentsr   r   r
   rU   rE   r   r   r^   rX   rF   )	r#   r   rg   rH   argslast_msg_harmonyrI   rJ   	processedr   r   r   r&      s0   



	z-HarmonyPythonTool.get_result_parsable_contextc                 C   rM   r!   )rU   rN   rO   r   r   r   rN      rP   zHarmonyPythonTool.tool_configN)
r'   r(   r)   r=   rf   r   r$   r&   rQ   rN   r   r   r   r   rR   e   s    
 rR   )ru   r3   abcr   r   typingr   r   >openai.types.responses.response_function_tool_call_output_itemr   openai_harmonyr   r   r	   r
   vllm.loggerr   
vllm.utilsr   rB   r   r'   r5   r   r   r   r*   rR   r   r   r   r   <module>   s    
*