o
    Zh                     @   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                	       sZ  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dedefddZedee
 fddZedee
 fddZde
dede
fddZ	d$dee
ef de	e dee
ef fd d!Z	d$dee
ef de	e dee
ef f 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}zEddl}||_|r||_d	|d
< ztddd W n ty4   d|d
< Y nw |d
 rA|j|d< W |S |j|d|d< |j|d|d< W |S  t	y^   t	dw )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%   R/var/www/html/lang_env/lib/python3.10/site-packages/langchain/chains/moderation.pyvalidate_environment+   s>   
z*OpenAIModerationChain.validate_environmentc                 C      | j gS )z2Expect input key.

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

        :meta private:
        )r   r)   r%   r%   r&   output_keysX   r,   z!OpenAIModerationChain.output_keystextresultsc                 C   s4   | j r|d }n|j}|rd}| jrt||S |S )Nflaggedz5Text was found that violates OpenAI's content policy.)r   r0   r   r"   )r*   r.   r/   	conditionZ	error_strr%   r%   r&   	_moderate`   s   
zOpenAIModerationChain._moderateinputsrun_managerc                 C   s^   || j  }| jr| j|}| ||d d }n| jjj|d}| ||jd }| j|iS )Nr/   r   r   )r   r   r   creater2   moderationsr/   r   r*   r3   r4   r.   r/   r   r%   r%   r&   _callm   s   

zOpenAIModerationChain._callc                    sZ   | j rt j||dI d H S || j }| jjj|dI d H }| ||jd }| j	|iS )N)r4   r5   r   )
r   super_acallr   r   r7   r6   r2   r/   r   r8   	__class__r%   r&   r;   {   s   

zOpenAIModerationChain._acall)N)!__name__
__module____qualname____doc__r   r   __annotations__r   r   r   strr   boolr   r   r   r   r
   r   r   classmethodr   r'   propertyr   r+   r-   r2   r   r9   r   r;   __classcell__r%   r%   r<   r&   r      sJ   
 #




r   N)rA   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    