
    ih                     r    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e      Zy	)
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            	           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      Zeed<    ed      ededefd              Zedee
   fd       Zedee
   fd       Zde
dede
fdZ	 ddee
ef   de	e   dee
ef   fdZ	 ddee
ef   de	e   dee
ef   f fdZ x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                 h   t        |dd      }t        |ddd      }	 ddl}||_        |r||_        d	|d
<   	 t	        dd       |d
   r|j                  |d<   |S |j                  |      |d<   |j                  |      |d<   	 |S # t
        $ r d|d
<   Y Sw xY w# t        $ r t        d      w xY 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   )api_keyr   zTCould not import openai python package. Please install it with `pip install openai`.)
r
   r%   r'   organizationr	   
ValueError
ModerationOpenAIAsyncOpenAIImportError)clsr   r   r   r%   s        Y/var/www/html/dev/engine/venv/lib/python3.12/site-packages/langchain/chains/moderation.pyvalidate_environmentz*OpenAIModerationChain.validate_environment+   s     .$&6
 3!!	
	+FN"&9#',F#$0%hEB &'#)#4#4x   $*===#Hx )/););N);)S~&   0+/'(0  	? 	s4   B B B *B BB BB B1c                     | j                   gS )z2Expect input key.

        :meta private:
        )r   selfs    r/   
input_keysz OpenAIModerationChain.input_keysP   s         c                     | j                   gS )z3Return output key.

        :meta private:
        )r   r2   s    r/   output_keysz!OpenAIModerationChain.output_keysX   s       r5   textresultsc                 |    | j                   r|d   }n|j                  }|rd}| j                  rt        |      |S |S )Nflaggedz5Text was found that violates OpenAI's content policy.)r   r;   r   r)   )r3   r8   r9   	condition	error_strs        r/   	_moderatezOpenAIModerationChain._moderate`   sC    	*IIOIzz ++  r5   inputsrun_managerc                 F   || j                      }| j                  r4| j                  j                  |      }| j	                  ||d   d         }nE| j                  j
                  j                  |      }| j	                  ||j                  d         }| j                  |iS )Nr9   r   r   )r   r   r   creater>   moderationsr9   r   )r3   r?   r@   r8   r9   r   s         r/   _callzOpenAIModerationChain._callm   s    
 dnn%kk((.G^^D')*<Q*?@Fkk--4444@G^^D'//!*<=F((r5   c                 2  K   | j                   rt        | 	  ||       d {   S || j                     }| j                  j
                  j                  |       d {   }| j                  ||j                  d         }| j                  |iS 7 n7 3w)N)r@   rB   r   )
r   super_acallr   r   rD   rC   r>   r9   r   )r3   r?   r@   r8   r9   r   	__class__s         r/   rH   zOpenAIModerationChain._acall{   s     
 KHHHdnn%))55<<4<HHgooa&89((	 IHs!   !BB<B!B"2BB)N)!__name__
__module____qualname____doc__r   r   __annotations__r   r   r   strr   boolr   r   r   r   r   r   r   classmethodr   r0   propertyr   r4   r7   r>   r   rE   r   rH   __classcell__)rI   s   @r/   r   r      s    FCL# $J$'E4;IsJ$(NHSM()-#- /ND/(#!$ !3 !  $!F  DI     !T#Y ! !c C C   =A)S#X) 89) 
c3h	)" BF
)S#X
) =>
) 
c3h	
) 
)r5   r   N)rM   typingr   r   r   r   langchain_core.callbacksr   r   langchain_core.utilsr	   r
   pydanticr   r   langchain.chains.baser   r    r5   r/   <module>rZ      s-    / , , M + 'v)E v)r5   