
    7|h                         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 y)    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                      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$y)	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                 *    t        |dd      }||d<   |S )z?Validate that api key and python package exists in environment.r   DEEPINFRA_API_TOKEN)r   )clsr   r   s      a/var/www/html/test/engine/venv/lib/python3.12/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   s0    
4==)
t001
 	
r    c                      y)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    8HHr    c                 &    d| j                    ddS )Nzbearer zapplication/json)AuthorizationzContent-Type)r   r"   s    r   _headerszDeepInfra._headersF   s     &t'?'?&@A.
 	
r    promptkwargsc                 :    | j                   xs i }i ||}d|i|S )Ninput)r   )r#   r.   r/   r   s       r   _bodyzDeepInfra._bodyL   s:    ((.B1,1&1 V

 	
r    codetextc                    |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k7  rt        d| d|       y )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;6tf=>>S[<==S[<==S[@PQQS[CDDS[FtfMNNS[HbQUPVW  r    stoprun_managerc                    t        | j                               }|j                  | j                         | j	                  ||            }| j                  |j                  |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._callg   sq    , 4==?3<<DIIKdjj6P<QH00(--@}}Iq!"233r    c                   K   t        | j                               }|j                  | j                         | j	                  ||            4 d {   }| j                  |j                  |j                         |j                          d {   }|d   d   d   cd d d       d {    S 7 ^7 "7 	# 1 d {  7  sw Y   y xY ww)Nr=   r?   rB   r   rC   )	r   r-   apostr*   r2   r9   statusr4   rF   rG   s           r   _acallzDeepInfra._acall   s      4==?3==		$**VV"< ! 
 	8 	8?!(D	?1%&67	8 	8 	8 )		8 	8 	8 	8sZ   ACB1C:B7B3B7C+B5,C3B75C7C	=C >C	Cc           	   +     K   t        | j                               }|j                  | j                         | j	                  |i |ddi            }|j
                  }| j                  |       | j                  |j                  |j
                         t        |j                               D ]1  }t        |      }	|	s|r|j                  |	j
                         |	 3 y w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<<		$**V5O5O$5O"P   
 !  /H00(--@!("5"5"78 	D$T*E00<	s   B>C%$C%c           	     j  K   t        | j                               }|j                  | j                         | j	                  |i |ddi            4 d {   }|j                          d {   }| j                  |       | j                  |j                  |j
                         t        |j                        2 3 d {   }t        |      }	|	s|r#|j                  |	j
                         d {    |	 B7 7 7 A7 6 d d d       d {  7   y # 1 d {  7  sw Y   y xY wwrP   )r   r-   rL   r*   r2   r4   rR   r9   rM   _parse_stream_asynccontentrU   rV   rW   s
             r   _astreamzDeepInfra._astream   s     4==?3==		$**V5O5O$5O"P ! 
 	  	 "*--/1M$$]3?1(2B2BC    d(.")::5::FFFK	  2  G	 D	  	  	  	  	 s   AD3DD3D0D1ADDDD	D D8D	9
DD3DD	DDD3DD3D0$D'%D0,D3bodyc                     d|v rU	 |j                  d      r|t        d      d }t        j                  |      }|j	                  dd      }t        d|       y# t        j                  $ r t        d|       w xY w)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+G/D!ZZ-
 * P":=/ JKK  '' ="4TF ;<<=s   AA "A=)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      s:     %Hc$#'L(4.')-#-L $ 4   
WS#X%6 
 
 3  Ic I
$ 

C 
 
 
3 c d * %):>	44 tCy!4 67	4
 4 
4B %)?C	88 tCy!8 ;<	8
 8 
8$ %):>	 tCy! 67	
  
/	"0 %)?C	   tCy!  ;<	 
   
	' *= = =r    r   rbodyr   c              #   >   K   | D ]  }t        |      }||  y wN_parse_stream_helperrt   rY   _lines      r   rS   rS      s*      $T*Ks   c                P   K   | 2 3 d {   }t        |      }|| 7 6 y wrv   rw   ry   s      r   r]   r]      s2       d$T*Kes    &$"$&&$&rY   c                     | rd| j                  d      rS| j                  d      r| t        d      d  } n| t        d      d  } | j                         dk(  ry | j                  d      S y )Ns   data:s   data: s   [DONE]zutf-8)rd   re   stripdecode)rY   s    r   rx   rx      sb    )??9%I()DH(D::<9$ ;;w''r    c                     	 t        j                  |       }t        |j                  di       j                  d            S # t        $ r Y y w xY w)Ntokenr4   )r4   )rF   rf   r   rg   r7   )rY   objs     r   rU   rU      sO    jj"%))&1
 	
  s   ?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  4 2 ?  ;9 {= {=|% Xc] W%9%9 mC>P u #  3 8O#< r    