U
    h                     @   s   d dl Z d dlmZ d dlmZmZmZmZ d dlZd dl	m
Z
mZmZmZ d dl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)	BaseModelFieldValidationError	validator)BaseToolc                   @   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_INJECTIONZKEYWORDSZPIIZSECRETSZTOXICITY r   r   K/tmp/pip-unpacked-wheel-9gdii04g/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                   @   sX   e Zd ZU ed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_itemsZ
min_lengthdescriptionpromptsz7List of detectors by which you want to check the prompt)r   r   	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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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   T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 krt | j}|d k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   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k
r } zd	t
|i W Y S d }~X Y nX d S )
Nr   r   messagesz	v1/detect)r.   r   r   z	x-api-key   )jsonheaderstimeouterror)len_convert_detector_to_apirequestspostr$   r#   raise_for_statusr0   	HTTPErrorTimeoutr   )selfr   r   r   Zpostfixr0   responseer   r   r   _runI   s*    

zZenGuardTool._run)detectorr)   c                 C   s   t |j jS )N)r   r!   value)r;   r?   r   r   r   r5   g   s    z%ZenGuardTool._convert_detector_to_api)T)r   r   r   r!   r   r   r   r   Zargs_schemar"   r   r   r#   r   r$   r%   r
   r-   r   r   r   r   r>   r5   r   r   r   r   r    0   s$   

 
r    )r*   enumr   typingr   r   r   r   r6   Zlangchain_core.pydantic_v1r   r   r	   r
   Zlangchain_core.toolsr   r   r   r   r   r    r   r   r   r   <module>   s   

