U
    h8                     @   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)Fieldroot_validator)check_package_versionget_from_dict_or_env)Chainc                       s8  e Zd ZU dZeed< 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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()
    clientasync_clientN
model_nameFerrorinput	input_keyoutput
output_keyopenai_api_keyopenai_organizationdefaultopenai_pre_1_0T)pre)valuesreturnc                 C   s   t |dd}t |dddd}z~ddl}||_|r6||_d	|d
< ztddd W n tk
rj   d|d
< Y nX |d
 r|j|d< n| |d< | |d< W n t	k
r   t	dY nX |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   r   zTCould not import openai python package. Please install it with `pip install openai`.)
r   r   Zapi_keyZorganizationr
   
ValueErrorZ
ModerationZOpenAIZAsyncOpenAIImportError)clsr   r   r   r    r#   ?/tmp/pip-unpacked-wheel-bo69hh5q/langchain/chains/moderation.pyvalidate_environment+   s<      
z*OpenAIModerationChain.validate_environment)r   c                 C   s   | j gS )z2Expect input key.

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

        :meta private:
        )r   r&   r#   r#   r$   output_keysW   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   creater.   moderationsr+   r   r'   r/   r0   r*   r+   r   r#   r#   r$   _calll   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)r0   r1   r   )
r   super_acallr   r   r3   r2   r.   r+   r   r4   	__class__r#   r$   r7   z   s    
zOpenAIModerationChain._acall)N)N)__name__
__module____qualname____doc__r   __annotations__r   r   strr   boolr   r   r   r   r   r   r	   r   r%   propertyr   r(   r)   r.   r   r5   r   r7   __classcell__r#   r#   r8   r$   r      s:   
# 

 

r   N)r=   typingr   r   r   r   Zlangchain_core.callbacksr   r   Zlangchain_core.pydantic_v1r   r	   Zlangchain_core.utilsr
   r   Zlangchain.chains.baser   r   r#   r#   r#   r$   <module>   s   