o
    Zh                     @   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                   @   (   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   ^/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/tools/zenguard/tool.pyr   
       r   c                   @   r   )	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      r   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)
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dedefddZedefddZ	ddee dee dedeeef fddZdedef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_keyc                 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_keyr   r   r    c              
   C   s   z6d }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yR } zd	t
|iW  Y d }~S d }~ww )
Nr   r   messagesz	v1/detect)r6   r    r   z	x-api-key   )jsonheaderstimeouterror)len_convert_detector_to_apirequestspostr)   r5   raise_for_statusr8   	HTTPErrorTimeoutr!   )r4   r   r   r    Zpostfixr8   responseer   r   r   _runU   s.   

zZenGuardTool._rundetectorc                 C   s   t |j jS )N)r   r%   value)r4   rF   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   r2   propertyr5   r   r   r   r   rE   r=   r   r   r   r   r$   /   s0   
 


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    

