
    Ngh                         d dl mZmZmZmZmZ d dlZd dlmZ d dl	m
Z
 d dlmZmZmZ d dlmZmZmZ  G d de          Z G d	 d
e
          ZdS )    )AnyDictListOptionalcastN)CallbackManagerForLLMRun)LLM)convert_to_secret_strget_from_dict_or_envpre_init)	BaseModel
ConfigDict	SecretStrc                   h    e Zd ZU dZdZeed<   dZeed<   dZ	eed<   dZ
eed<   dZeed<   dZeed	<   d
S )AI21PenaltyDataz!Parameters for AI21 penalty data.r   scaleTapplyToWhitespacesapplyToPunctuationsapplyToNumbersapplyToStopwordsapplyToEmojisN)__name__
__module____qualname____doc__r   int__annotations__r   boolr   r   r   r        Y/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/llms/ai21.pyr   r   
   sx         ++E3NNN#### $$$$ND!d!!!M4r    r   c                   N   e Zd ZU dZdZeed<   	 dZeed<   	 dZ	e
ed<   	 dZe
ed	<   	 d
Zeed<   	  e            Zeed<   	  e            Zeed<   	  e            Zeed<   	 dZe
ed<   	 dZeeeef                  ed<   	 dZee         ed<   dZeee                  ed<   dZee         ed<   	  ed          Zededefd            Zedeeef         fd            Z edeeef         fd            Z!edefd            Z"	 	 d"dedeee                  dee#         d edef
d!Z$dS )#AI21ag  AI21 large language models.

    To use, you should have the environment variable ``AI21_API_KEY``
    set with your API key or pass it as a named parameter to the constructor.

    Example:
        .. code-block:: python

            from langchain_community.llms import AI21
            ai21 = AI21(ai21_api_key="my-api-key", model="j2-jumbo-instruct")
    zj2-jumbo-instructmodelgffffff?temperature   	maxTokensr   	minTokensg      ?topPpresencePenaltycountPenaltyfrequencyPenalty   
numResultsN	logitBiasai21_api_keystopbase_urlforbid)extravaluesreturnc                 L    t          t          |dd                    }||d<   |S )z,Validate that api key exists in environment.r0   AI21_API_KEY)r
   r   )clsr5   r0   s      r!   validate_environmentzAI21.validate_environmentK   s3     - HH
 
 ".~r    c           
          | j         | j        | j        | j        | j                                        | j                                        | j                                        | j        | j	        d	S )z0Get the default parameters for calling AI21 API.)	r%   r'   r(   r)   r*   r+   r,   r.   r/   )
r%   r'   r(   r)   r*   dictr+   r,   r.   r/   selfs    r!   _default_paramszAI21._default_paramsT   sh      +I#388:: -2244 $ 5 : : < </

 

 
	
r    c                 &    i d| j         i| j        S )zGet the identifying parameters.r$   )r$   r?   r=   s    r!   _identifying_paramszAI21._identifying_paramsc   s     A7DJ'@4+?@@r    c                     dS )zReturn type of llm.ai21r   r=   s    r!   	_llm_typezAI21._llm_typeh   s	     vr    promptrun_managerkwargsc                 `   | j         |t          d          | j         | j         }n|g }| j        | j        }n| j        dv rd}nd}i | j        |}t          t          | j                  | _        t          j	        | d| j         ddd	| j        
                                 i||d
|          }|j        dk    rA|                                                    d          }t          d|j         d|           |                                }	|	d         d         d         d         S )ad  Call out to AI21's complete endpoint.

        Args:
            prompt: The prompt to pass into the model.
            stop: Optional list of stop words to use when generating.

        Returns:
            The string generated by the model.

        Example:
            .. code-block:: python

                response = ai21("Tell me a joke.")
        Nz2`stop` found in both the input and default params.)zj1-grande-instructz+https://api.ai21.com/studio/v1/experimentalzhttps://api.ai21.com/studio/v1/z	/completeAuthorizationzBearer )rE   stopSequences)urlheadersjson   errorz,AI21 /complete call failed with status code z. Details: completionsr   datatext)r1   
ValueErrorr2   r$   r?   r   r   r0   requestspostget_secret_valuestatus_coderN   get)
r>   rE   r1   rF   rG   r2   paramsresponseoptional_detailresponse_jsons
             r!   _callz
AI21._callm   sp   * 9 T%5QRRRY"9DD\D=$}HHz444H;3D(3F3 D,=>>=33dj333$&V0A0R0R0T0T&V&VW"TDDVD
 
 

 3&&&mmoo11'::O/x?S / /,/ /   !]+A.v6v>>r    )NN)%r   r   r   r   r$   strr   r%   floatr'   r   r(   r)   r   r*   r+   r,   r.   r/   r   r   r0   r   r1   r   r2   r   model_configr   r:   propertyr   r?   rA   rD   r   r^   r   r    r!   r#   r#      s}        
 
 %E3$$$K+IsEIsED%D'6'8'8O_888$$3O$5$5L/5557(7(9(9o999;J;,0IxS%Z()000D(,L(9%,,, $D(49
$$$"Hhsm"""?:  L $ 4    X 
c3h 
 
 
 X
 AT#s(^ A A A XA 3    X %):>	0? 0?0? tCy!0? 67	0?
 0? 
0? 0? 0? 0? 0? 0?r    r#   )typingr   r   r   r   r   rU   langchain_core.callbacksr   #langchain_core.language_models.llmsr	   langchain_core.utilsr
   r   r   pydanticr   r   r   r   r#   r   r    r!   <module>rh      s    2 2 2 2 2 2 2 2 2 2 2 2 2 2  = = = = = = 3 3 3 3 3 3 V V V V V V V V V V 5 5 5 5 5 5 5 5 5 5    i   H? H? H? H? H?3 H? H? H? H? H?r    