a
    bg                     @   s   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	Z	d dl
mZ d dlmZmZmZmZ G dd deeZG dd	 d	eeZG d
d deZG dd deZdS )    N)Enum)AnyDictListOptionalType)BaseTool)	BaseModelFieldValidationError	validatorc                   @   s(   e Zd ZdZdZdZdZdZdZdZ	dS )	DetectorZallowed_subjectsZbanned_subjectsZprompt_injectionkeywordsZpiiZsecretsZtoxicityN
__name__
__module____qualname__ZALLOWED_TOPICSZBANNED_TOPICSZPROMPT_INJECTIONKEYWORDSZPIIZSECRETSZTOXICITY r   r   u/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/tools/zenguard/tool.pyr   
   s   r   c                   @   s(   e Zd ZdZdZdZdZdZdZdZ	dS )	DetectorAPIzv1/detect/topics/allowedzv1/detect/topics/bannedzv1/detect/prompt_injectionzv1/detect/keywordszv1/detect/piizv1/detect/secretszv1/detect/toxicityNr   r   r   r   r   r      s   r   c                   @   sV   e Zd ZU eddddZee ed< eddddZee	 ed< edd	d
Z
eed< dS )ZenGuardInput.   zPrompt to check)Z
min_lengthdescriptionpromptsz7List of detectors by which you want to check the prompt	detectorsTz@Run prompt detection by the detector in parallel or sequentially)defaultr   in_parallelN)r   r   r   r
   r   r   str__annotations__r   r   r   boolr   r   r   r   r      s   
r   c                   @   s   e Zd ZU dZeed< dZeed< eZe	e
 ed< dZeed< edd	Zee ed
< dZeed< dZeed< ed
ddddeedddZeedddZdee ee eeeef dddZeedddZdS )ZenGuardToolZZenGuardnamezLZenGuard AI integration package. ZenGuard AI - the fastest GenAI guardrails.r   args_schemaTreturn_directN)r   zenguard_api_keyzhttps://api.zenguard.ai/_ZENGUARD_API_URL_ROOTZZENGUARD_API_KEY_ZENGUARD_API_KEY_ENV_NAMEF)prealwaysZcheck_fields)vreturnc                 C   s2   |d u rt | j}|d u r.td| j d|S )NzoThe zenguard_api_key tool option must be set either by passing zenguard_api_key to the tool or by setting the fz environment variable)osgetenvr'   r   )clsr*   r   r   r   set_api_key<   s    zZenGuardTool.set_api_key)r+   c                 C   s    | j d u rtd| j | j S )NzAPI key is required for the ZenGuardTool. Please provide the API key by either:
1. Manually specifying it when initializing the tool: ZenGuardTool(zenguard_api_key='your_api_key')
2. Setting it as an environment variable: )r%   
ValueErrorr'   )selfr   r   r   _api_keyH   s    
zZenGuardTool._api_key)r   r   r   r+   c              
   C   s   zld }d }t |dkr.| |d }d|i}nd}|||d}tj| j| |d| jidd}|  | W S  tjtj	fy } zd	t
|iW  Y d }~S d }~0 0 d S )
Nr   r   messagesz	v1/detect)r3   r   r   z	x-api-key   )jsonheaderstimeouterror)len_convert_detector_to_apirequestspostr&   r2   raise_for_statusr5   	HTTPErrorTimeoutr   )r1   r   r   r   Zpostfixr5   responseer   r   r   _runU   s*    

zZenGuardTool._run)detectorr+   c                 C   s   t |j jS )N)r   r"   value)r1   rC   r   r   r   r:   s   s    z%ZenGuardTool._convert_detector_to_api)T)r   r   r   r"   r   r   r   r   r#   r   r	   r$   r    r
   r%   r   r&   r'   r   r/   propertyr2   r   r   r   r   rB   r:   r   r   r   r   r!   /   s(   

 
r!   )r,   enumr   typingr   r   r   r   r   r;   Zlangchain_core.toolsr   Zpydanticr	   r
   r   r   r   r   r   r   r!   r   r   r   r   <module>   s   

