
    Ng!                      0   d dl Z d dlmZmZmZmZmZmZmZ d dl	Z	d dl
mZmZ d dlmZ d dlmZ d dlmZmZ d dlmZ d dlmZ d	Z G d
 de          Zdee         dee         fdZde	j        dee         fdZdedee         fdZdedee         fdZ dS )    N)AnyAsyncIteratorDictIteratorListMappingOptional)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)LLM)GenerationChunk)get_from_dict_or_envpre_init)
ConfigDict)Requestsz$meta-llama/Meta-Llama-3-70B-Instructc                   V   e Zd ZU dZeZeed<   dZ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fd            Zd	efdZd	e
fdZdeded	e
fdZdeded	dfdZ	 	 ddede	ee                  de	e         ded	ef
dZ	 	 ddede	ee                  de	e         ded	ef
dZ	 	 ddede	ee                  de	e         ded	ee          f
dZ!	 	 ddede	ee                  de	e         ded	e"e          f
dZ#ded	dfdZ$dS )	DeepInfraa  DeepInfra models.

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

    Only supports `text-generation` and `text2text-generation` for now.

    Example:
        .. code-block:: python

            from langchain_community.llms import DeepInfra
            di = DeepInfra(model_id="google/flan-t5-xl",
                                deepinfra_api_token="my-api-key")
    model_idNmodel_kwargsdeepinfra_api_tokenforbid)extravaluesreturnc                 2    t          |dd          }||d<   |S )z?Validate that api key and python package exists in environment.r   DEEPINFRA_API_TOKEN)r   )clsr   r   s      ^/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/llms/deepinfra.pyvalidate_environmentzDeepInfra.validate_environment-   s/     3)+@
 
 )<$%    c                 *    i d| j         id| j        iS )zGet the identifying parameters.r   r   )r   r   selfs    r   _identifying_paramszDeepInfra._identifying_params6   s+    
4=)
t01
 	
r    c                     dS )zReturn type of llm.	deepinfra r"   s    r   	_llm_typezDeepInfra._llm_type>   s	     {r    c                     d| j          S )Nz'https://api.deepinfra.com/v1/inference/)r   r"   s    r   _urlzDeepInfra._urlC   s    HHHHr    c                     d| j          ddS )Nzbearer zapplication/json)AuthorizationzContent-Type)r   r"   s    r   _headerszDeepInfra._headersF   s"    At'?AA.
 
 	
r    promptkwargsc                 ,    | j         pi }i ||}d|i|S )Ninput)r   )r#   r.   r/   r   s       r   _bodyzDeepInfra._bodyL   s7    (.B1,1&1 V

 	
r    codetextc                 T   |dk    rt          d|           |dk    rt          d          |dk    rt          d          |dk    rt          d| j                   |dk    rt          d	          |d
k    rt          d|           |dk    rt          d| d|           d S )Ni  zDeepInfra Server: Error i  zDeepInfra Server: Unauthorizedi  i  z"DeepInfra Server: Model not found i  z%DeepInfra Server: Rate limit exceededi  z'DeepInfra received an invalid payload:    z6DeepInfra returned an unexpected response with status z: )	Exceptionr   
ValueError)r#   r3   r4   s      r   _handle_statuszDeepInfra._handle_statusU   s    3;;=t==>>>S[[<===S[[<===S[[PPPQQQS[[CDDDS[[MtMMNNNS[["" "" "   [r    stoprun_managerc                 P   t          |                                           }|                    |                                 |                     ||                    }|                     |j        |j                   |                                }|d         d         d         S )al  Call out to DeepInfra's inference API 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 = di("Tell me a joke.")
        headersurldataresultsr   generated_text)	r   r-   postr*   r2   r9   status_coder4   jsonr#   r.   r:   r;   r/   requestresponserA   s           r   _callzDeepInfra._callh   s    , 4==??333<<DIIKKdjj6P6P<QQH0(-@@@}}Iq!"233r    c                   K   t          |                                           }|                    |                                 |                     ||                    4 d {V 	 }|                     |j        |j                   |                                 d {V }|d         d         d         cd d d           d {V  S # 1 d {V swxY w Y   d S )Nr=   r?   rB   r   rC   )	r   r-   apostr*   r2   r9   statusr4   rF   rG   s           r   _acallzDeepInfra._acall   s`      4==??333==		$**VV"<"< ! 
 
 	8 	8 	8 	8 	8 	8 	8 	8???!((((((D	?1%&67	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s   )AC


CCc           	   +     K   t          |                                           }|                    |                                 |                     |i |ddi                    }|j        }|                     |           |                     |j        |j                   t          |
                                          D ]3}t          |          }	|	r |r|                    |	j                   |	V  4d S Nr=   streamTr?   )r   r-   rD   r*   r2   r4   _handle_body_errorsr9   rE   _parse_stream
iter_lines_handle_sse_lineon_llm_new_token
r#   r.   r:   r;   r/   rH   rI   response_textlinechunks
             r   _streamzDeepInfra._stream   s      4==??333<<		$**V5O5O$5O5O"P"P   
 
 !  ///H0(-@@@!("5"5"7"788 	 	D$T**E  =00<<<	 	r    c           	     v  K   t          |                                           }|                    |                                 |                     |i |ddi                    4 d {V 	 }|                                 d {V }|                     |           |                     |j        |j                   t          |j
                  2 3 d {V }t          |          }	|	r'|r |                    |	j                   d {V  |	W V  @6 	 d d d           d {V  d S # 1 d {V swxY w Y   d S rP   )r   r-   rL   r*   r2   r4   rR   r9   rM   _parse_stream_asynccontentrU   rV   rW   s
             r   _astreamzDeepInfra._astream   s       4==??333==		$**V5O5O$5O5O"P"P ! 
 
 	  	  	  	  	  	  	  	 "*--//111111M$$]333???1(2BCC              d(..  " G)::5:FFFFFFFFFKKKK DC	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   /A$D(D;D((
D25D2bodyc                 *   d|v r	 |                     d          r|t          d          d         }t          j        |          }|                    dd          }t          d|           # t          j        $ r t          d|           w xY wdS )z
        Example error response:
        data: {"error_type": "validation_error",
        "error_message": "ConnectionError: ..."}
        errorzdata:Nerror_messagezUnknown errorzDeepInfra Server Error: zDeepInfra Server: )
startswithlenrF   loadsgetr7   JSONDecodeError)r#   r`   
error_datarc   s       r   rR   zDeepInfra._handle_body_errors   s     d??	=??7++ 0G/D!Z--
 * P P J= J JKKK' = = = ;T ; ;<<<= ?s   A(A. ."B)NN)%__name__
__module____qualname____doc__DEFAULT_MODEL_IDr   str__annotations__r   r	   r   r   r   model_configr   r   propertyr   r   r$   r(   r*   r-   r2   intr9   r   r   rJ   r
   rN   r   r   r[   r   r_   rR   r'   r    r   r   r      s3           %Hc$$$#'L(4.''')-#---:  L $ 4    X 
WS#X%6 
 
 
 X
 3    XIc I I I I
$ 
 
 
 

C 
 
 
 
 
 
3 c d    , %):>	4 44 tCy!4 67	4
 4 
4 4 4 4B %)?C	8 88 tCy!8 ;<	8
 8 
8 8 8 8$ %):>	  tCy! 67	
  
/	"   0 %)?C	     tCy!  ;<	 
   
	'       *= = = = = = = =r    r   rbodyr   c              #   >   K   | D ]}t          |          }||V  d S N_parse_stream_helperrt   rY   _lines      r   rS   rS      s<        $T**KKK r    c                L   K   | 2 3 d {V }t          |          }||W V  6 d S rv   rw   ry   s      r   r]   r]      sV             d$T**KKKK ees   #rY   c                    | r|                      d          rs|                      d          r| t          d          d          } n| t          d          d          } |                                 dk    rd S |                     d          S d S )Ns   data:s   data: s   [DONE]zutf-8)rd   re   stripdecode)rY   s    r   rx   rx      s     ()) (??9%% 	)I(()DDH(D::<<9$$ 4;;w'''4r    c                     	 t          j        |           }t          |                    di                               d                    S # t          $ r Y d S w xY w)Ntokenr4   )r4   )rF   rf   r   rg   r7   )rY   objs     r   rU   rU      sp    j"%%))&11
 
 
 	
    tts   A
A 
AA)!rF   typingr   r   r   r   r   r   r	   aiohttplangchain_core.callbacksr
   r   #langchain_core.language_models.llmsr   langchain_core.outputsr   langchain_core.utilsr   r   pydanticr   &langchain_community.utilities.requestsr   rn   r   bytesro   rS   StreamReaderr]   rx   rU   r'   r    r   <module>r      s    N N N N N N N N N N N N N N N N N N         4 3 3 3 3 3 2 2 2 2 2 2 ? ? ? ? ? ? ? ?       ; ; ; ; ; ;9 |= |= |= |= |= |= |= |=~% Xc]    W%9 mC>P    u #     3 8O#<      r    