
    7|hh                         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y)    )AnyDictListOptionalcastN)CallbackManagerForLLMRun)LLM)convert_to_secret_strget_from_dict_or_envpre_init)	BaseModel
ConfigDict	SecretStrc                   f    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	<   y
)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        \/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/llms/ai21.pyr   r   
   sC    +E3N## $$ND!d!M4r    r   c                      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$y)#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                 <    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   s+     - H
 ".~r    c           
      "   | j                   | j                  | j                  | 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   sp      ++II#3388: --224 $ 5 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7DJJ'@4+?+?@@r    c                      y)zReturn type of llm.ai21r   r=   s    r!   	_llm_typezAI21._llm_typeh   s     r    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                  j                          i||d	|
      }|j                  dk7  r:|j                         j                  d      }t        d|j                   d|       |j                         }	|	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.")
        z2`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   sW   * 99 T%5QRRYY"99D\D==$}}Hzz44H;3D((3F3 D,=,=>==*Adjj\3$0A0A0R0R0T/U&VW"TDVD

 3&&mmo11':O>x?S?S>T U,-/  !]+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'8O_8$$3$5L/57(7(9o9;J;,0IxS%Z()0D(,L(9%, $D(49
$"Hhsm"?L $ 4   
c3h 
 
 AT#s(^ A A 3   %):>	0?0? tCy!0? 67	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  = 3 V V 5 5i H?3 H?r    