a
    dg                     @   s   d dl Z d dlmZmZmZmZ d dlm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 d dlmZ G d	d
 d
ZdS )    N)AnyCallableOptionalcast)CallbackManagerForChainRun)	AIMessageHumanMessage)ChatPromptValueStringPromptValue)ComprehendPII)ComprehendPromptSafety)ComprehendToxicityc                   @   s   e Zd ZdZdeee ee ee ee dddZeedddZ	eeed	d
dZ
eedddZeddddZeedddZdS )BaseModerationzBase class for moderation.N)clientconfigmoderation_callback	unique_idrun_managerc                 C   s6   || _ || _|| _|| _d| _|| _tt | _	d S )Nr   )
r   r   r   r   chat_message_indexr   struuiduuid4chain_id)selfr   r   r   r   r    r   /var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_experimental/comprehend_moderation/base_moderation.py__init__   s    zBaseModeration.__init__)promptreturnc                 C   s   t  }t|tr|j}nvt|t r(|}nft|trz|jd }t|jd | _t|trbt	t |j
}t|trt	t |j
}ntdt| d|S )N   Invalid input type 6. Must be a PromptValue, str, or list of BaseMessages.)r   
isinstancer
   textr	   messageslenr   r   r   contentr   
ValueErrortype)r   r   
input_textmessager   r   r   _convert_prompt_to_text"   s     





z&BaseModeration._convert_prompt_to_text)r   r$   r   c                 C   s   t |trt|dS t |tr"|S t |trt|j}|| j }t |trbt||j|j	d|| j< t |t
rt
||j|j	d|| j< t|dS tdtt dd S )N)r$   )r'   exampleadditional_kwargs)r%   r!   r"   )r#   r
   r   r	   listr%   r   r   r-   r.   r   r(   r)   input)r   r   r$   r%   r+   r   r   r   _convert_text_to_promptF   s.    








z&BaseModeration._convert_text_to_prompt)moderation_classr   c                 C   s   || j | j| j| jdjS )N)r   callbackr   r   )r   r   r   r   validate)r   r2   r   r   r   _moderation_classe   s    z BaseModeration._moderation_class)r+   r   c                 C   s   | j r| j | d S )N)r   Zon_text)r   r+   r   r   r   _log_message_for_verbosem   s    z'BaseModeration._log_message_for_verbosec              
   C   s  ddl m}m}m} ddlm}m}m} z| j|d}t	 }	t
ttd}
| jj}|D ]x}t||rfdnt||rtdnt||rdnd	}||
v rT| d
| d | j|
| d}|	s|n|	}||| d}	qT| j||	dW S  |y } z&| dt	| d |W Y d	}~nd	}~0  |yZ } z&| dt	| d |W Y d	}~npd	}~0  |y } z&| dt	| d |W Y d	}~n2d	}~0  ty } z|W Y d	}~n
d	}~0 0 d	S )zModerate the input prompt.r   )ModerationPiiConfigModerationPromptSafetyConfigModerationToxicityConfig)ModerationPiiErrorModerationPromptSafetyErrorModerationToxicityError)r   )piitoxicityprompt_safetyr=   r>   r?   NzRunning z Validation...
)r2   )Zprompt_valuer   )r   r$   zFound PII content..stopping..

z Found Toxic content..stopping..
z$Found Harmful intention..stopping..
)ZClangchain_experimental.comprehend_moderation.base_moderation_configr7   r8   r9   ZGlangchain_experimental.comprehend_moderation.base_moderation_exceptionsr:   r;   r<   r,   r   r   r   r   r   filtersr#   r6   r5   dictr1   	Exception)r   r   r7   r8   r9   r:   r;   r<   r*   Zoutput_textZfilter_functionsrA   _filterZfilter_nameZvalidation_fner   r   r   moderateq   s^    
zBaseModeration.moderate)NNNN)__name__
__module____qualname____doc__r   r   r   r   r   r,   r1   r   r5   r6   rF   r   r   r   r   r      s"       $r   )r   typingr   r   r   r   Z langchain_core.callbacks.managerr   Zlangchain_core.messagesr   r   Zlangchain_core.prompt_valuesr	   r
   Z0langchain_experimental.comprehend_moderation.piir   Z:langchain_experimental.comprehend_moderation.prompt_safetyr   Z5langchain_experimental.comprehend_moderation.toxicityr   r   r   r   r   r   <module>   s   