o
    JjgK                     @   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}zAd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 | |d< | |d< W |S  t	yZ   t	dw )z?Validate that api key and python package exists in environment.r   OPENAI_API_KEYr   OPENAI_ORGANIZATION r   r   NFr   openaiz1.0)gte_versionTr   r   zTCould not import openai python package. Please install it with `pip install openai`.)
r	   r"   api_keyorganizationr   
ValueError
ModerationOpenAIAsyncOpenAIImportError)clsr   r   r   r"    r,   S/var/www/html/zoom/venv/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   r0   r,   r,   r-   output_keysX   r3   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   r7   r   r&   )r1   r5   r6   	condition	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 )Nr6   r   r   )r   r   r   creater:   moderationsr6   r   r1   r;   r<   r5   r6   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)r<   r=   r   )
r   super_acallr   r   r?   r>   r:   r6   r   r@   	__class__r,   r-   rC   {   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   r2   r4   r:   r   rA   r   rC   __classcell__r,   r,   rD   r-   r      sJ   
 #




r   N)rI   typingr   r   r   r   langchain_core.callbacksr   r   langchain_core.utilsr   r	   pydanticr
   r   langchain.chains.baser   r   r,   r,   r,   r-   <module>   s    