o
    |qi                     @   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   n/home/app/PaddleOCR-VL/.venv_paddleocr/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)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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)r5   r   r   z	x-api-key   )jsonheaderstimeouterror)len_convert_detector_to_apirequestspostr(   r4   raise_for_statusr7   	HTTPErrorTimeoutr    )r3   r   r   r   Zpostfixr7   responseer   r   r   _runU   s.   

zZenGuardTool._rundetectorc                 C   s   t |j jS )N)r   r$   value)r3   rE   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   r1   propertyr4   r   r   r   r   rD   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    

