a
    ag                     @   sl   d Z ddlmZmZmZmZ ddlmZmZ ddl	m
Z
mZ ddlmZmZ ddlmZ G dd deZd	S )
z)Pass input through a moderation endpoint.    )AnyDictListOptional)AsyncCallbackManagerForChainRunCallbackManagerForChainRun)check_package_versionget_from_dict_or_env)Fieldmodel_validator)Chainc                       sD  e Zd ZU dZdZeed< dZeed< dZe	e
 ed< dZeed< dZe
ed	< d
Ze
ed< dZe	e
 ed< dZe	e
 ed< eddZeed< eddeeedddZeee
 dddZeee
 dddZe
ee
dddZd"ee
ef e	e ee
ef dddZd#ee
ef e	e ee
ef d fd d!Z  Z S )$OpenAIModerationChaina  Pass input through a moderation endpoint.

    To use, you should have the ``openai`` python package installed, and the
    environment variable ``OPENAI_API_KEY`` set with your API key.

    Any parameters that are valid to be passed to the openai.create call can be passed
    in, even if not explicitly saved on this class.

    Example:
        .. code-block:: python

            from langchain.chains import OpenAIModerationChain
            moderation = OpenAIModerationChain()
    Nclientasync_client
model_nameFerrorinput	input_keyoutput
output_keyopenai_api_keyopenai_organizationdefaultopenai_pre_1_0before)mode)valuesreturnc                 C   s   t |dd}t |dddd}zddl}||_|r6||_d	|d
< ztddd W n tyh   d|d
< Y n0 |d
 r~|j|d< n |j|d|d< |j|d|d< W n t	y   t	dY n0 |S )z?Validate that api key and python package exists in environment.r   ZOPENAI_API_KEYr   ZOPENAI_ORGANIZATION r   r   NFr   openaiz1.0)Zgte_versionTr   )api_keyr   zTCould not import openai python package. Please install it with `pip install openai`.)
r	   r    r!   Zorganizationr   
ValueErrorZ
ModerationZOpenAIZAsyncOpenAIImportError)clsr   r   r   r     r%   i/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain/chains/moderation.pyvalidate_environment+   s8    
z*OpenAIModerationChain.validate_environment)r   c                 C   s   | j gS )z2Expect input key.

        :meta private:
        )r   selfr%   r%   r&   
input_keysP   s    z OpenAIModerationChain.input_keysc                 C   s   | j gS )z3Return output key.

        :meta private:
        )r   r(   r%   r%   r&   output_keysX   s    z!OpenAIModerationChain.output_keys)textresultsr   c                 C   s6   | j r|d }n|j}|r2d}| jr.t|n|S |S )Nflaggedz5Text was found that violates OpenAI's content policy.)r   r.   r   r"   )r)   r,   r-   	conditionZ	error_strr%   r%   r&   	_moderate`   s    

zOpenAIModerationChain._moderate)inputsrun_managerr   c                 C   s^   || j  }| jr2| j|}| ||d d }n"| jjj|d}| ||jd }| j|iS )Nr-   r   r   )r   r   r   creater0   moderationsr-   r   r)   r1   r2   r,   r-   r   r%   r%   r&   _callm   s    
zOpenAIModerationChain._callc                    sX   | j rt j||dI d H S || j }| jjj|dI d H }| ||jd }| j	|iS )N)r2   r3   r   )
r   super_acallr   r   r5   r4   r0   r-   r   r6   	__class__r%   r&   r9   {   s    
zOpenAIModerationChain._acall)N)N)!__name__
__module____qualname____doc__r   r   __annotations__r   r   r   strr   boolr   r   r   r   r
   r   r   classmethodr   r'   propertyr   r*   r+   r0   r   r7   r   r9   __classcell__r%   r%   r:   r&   r      s<   
# 

 

r   N)r?   typingr   r   r   r   Zlangchain_core.callbacksr   r   Zlangchain_core.utilsr   r	   Zpydanticr
   r   Zlangchain.chains.baser   r   r%   r%   r%   r&   <module>   s   