
    Ng.              
       2   d Z ddlmZmZmZmZmZmZ ddlm	Z	m
Z
 ddlmZmZmZ ddlmZmZmZ ddlmZmZ ddlmZmZmZ ddlmZ d	Zd
Zdee         deeef         deeef         ddfdZdedee         deee f         dedef
dZ! G d de          Z"dS )z Wrapper around Anyscale Endpoint    )AnyDictListMappingOptionalSet)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)
GenerationGenerationChunk	LLMResult)convert_to_secret_strget_from_dict_or_envpre_init)Field	SecretStr)
BaseOpenAIacompletion_with_retrycompletion_with_retry)is_openai_v1z%https://api.endpoints.anyscale.com/v1z$mistralai/Mixtral-8x7B-Instruct-v0.1keysresponsetoken_usagereturnNc                     |                      |d                   }|D ]4}||vr|d         |         ||<   ||xx         |d         |         z  cc<   5dS )zUpdate token usage.usageN)intersection)r   r   r   _keys_to_use_keys        ]/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/llms/anyscale.pyupdate_token_usager!      s     $$Xg%677L 9 9{"" ( 1$ 7K'!24!88	9 9    choicesprompts
model_namec                 8   g }t          |          D ]s\  }}| |         }|                    t          |d         d         t          |                    d          |                    d                              g           t||d}t          ||          S )	z2Create the LLMResult from the choices and prompts.messagecontentfinish_reasonlogprobs)r)   r*   )textgeneration_info)r   r%   )generations
llm_output)	enumerateappendr   dictgetr   )	r#   r$   r   r%   r-   i_choicer.   s	            r    create_llm_resultr6   +   s     K'"" 
 
1	*95$(&,jj&A&A!'J!7!7% % %  
	
 
	
 
	
 
	
 "-JGGJDDDDr"   c                       e Zd ZU dZ	  ee          Zeed<    e e	d                    Z
e	ed<    ee          Zeed<    ee          Zeed<   ed	efd
            Zeded	efd            Zed	eeef         f fd            Zed	eeef         f fd            Zed	efd            Z	 	 ddee         deee                  dee         ded	ef
dZ	 	 ddee         deee                  dee          ded	ef
dZ! xZ"S )Anyscalea  Anyscale large language models.

    To use, you should have the environment variable ``ANYSCALE_API_KEY``set with your
    Anyscale Endpoint, or pass it as a named parameter to the constructor.
    To use with Anyscale Private Endpoint, please also set ``ANYSCALE_BASE_URL``.

    Example:
        .. code-block:: python
            from langchain.llms import Anyscale
            anyscalellm = Anyscale(anyscale_api_key="ANYSCALE_API_KEY")
            # To leverage Ray for parallel processing
            @ray.remote(num_cpus=1)
            def send_query(llm, text):
                resp = llm.invoke(text)
                return resp
            futures = [send_query.remote(anyscalellm, text) for text in texts]
            results = ray.get(futures)
    defaultanyscale_api_base anyscale_api_keyr%   )default_factoryprefix_messagesr   c                     dS )NF )clss    r    is_lc_serializablezAnyscale.is_lc_serializable\   s    ur"   valuesc                    t          |ddt                    |d<   t          t          |dd                    |d<   t          |ddt                    |d<   	 dd	l}t                      rx|d                                         |d         d
}|                    d          s |j        di |j	        |d<   |                    d          s |j
        di |j	        |d<   n2|d         |d<   |d                                         |d<   |j        |d<   n# t          $ r t          d          w xY w|d         r|d         dk    rt          d          |d         r|d         dk    rt          d          |S )z?Validate that api key and python package exists in environment.r;   ANYSCALE_API_BASEr9   r=   ANYSCALE_API_KEYr%   
MODEL_NAMEr   N)api_keybase_urlclientasync_clientopenai_api_baseopenai_api_keyzTCould not import openai python package. Please install it with `pip install openai`.	streamingn   z!Cannot stream results when n > 1.best_ofz'Cannot stream results when best_of > 1.rA   )r   DEFAULT_BASE_URLr   DEFAULT_MODELopenair   get_secret_valuer2   OpenAIcompletionsAsyncOpenAI
CompletionImportError
ValueError)rB   rD   rU   client_paramss       r    validate_environmentzAnyscale.validate_environment`   s     ';$	'
 '
 '
"# &; );=OPP&
 &
!"  4!	 
  
  
|	MMM~~ 5%&89JJLL &': ;
! 
! zz(++ R'4v}'E'E}'E'E'QF8$zz.11 "-?V-? . .'. .! >* -33F,G()+12D+E+V+V+X+X'(#)#4x  	 	 	?  	
 + 	B6#;??@AAA+ 	H6)#4q#8#8FGGGs   B<D D0c                 @    i d| j         it                      j        S )zGet the identifying parameters.r%   )r%   super_identifying_params)self	__class__s    r    ra   zAnyscale._identifying_params   s+    
T_-
gg)
 	
r"   c                     d| j         i}t                      s4|                    | j                                        | j        d           i |t                      j        S )z,Get the parameters used to invoke the model.model)rI   api_base)r%   r   updater=   rV   r;   r`   _invocation_params)rb   openai_credsrc   s     r    rh   zAnyscale._invocation_params   st     T_(
 ~~ 	#4EEGG $ 6    >,=%''"<==r"   c                     dS )zReturn type of llm.zAnyscale LLMrA   )rb   s    r    	_llm_typezAnyscale._llm_type   s	     ~r"   Nr$   stoprun_managerkwargsc                 
   | j         }i ||}|                     |||          }g }i }h d}	d}
|D ]8}| j        rt          |          dk    rt	          d          d} | j        |d         ||fi |D ]}||}||z  }|J |                    |j        |j        r|j        	                    d          nd|j        r|j        	                    d          ndd           t          | f|d         |d	|}t          |t                    s|                                }|                    |d
                    t          |	||           |
s|	                    d          }
:|                     |||||
          S )at  Call out to OpenAI's endpoint with k unique prompts.

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

        Returns:
            The full LLM output.

        Example:
            .. code-block:: python

                response = openai.generate(["Tell me a joke."])
           total_tokensprompt_tokenscompletion_tokensNrQ   ,Cannot stream results with multiple prompts.r   r)   r*   r+   r)   r*   promptrm   r#   system_fingerprintrx   )rh   get_sub_promptsrO   lenr\   _streamr0   r+   r,   r2   r   
isinstancer1   extendr!   r6   rb   r$   rl   rm   rn   paramssub_promptsr#   r   _keysrx   _prompts
generationchunkr   s                  r    	_generatezAnyscale._generate   s   , (%F%f%**67DAA&( GFF,0# '	L '	LH~ &Lx==1$$$%STTT8<
)T\(1+t[SSFSS , ,E!)%*

"e+

!--- *%5*")C)G)G)X)X)X!%5%"J$>$B$B:$N$N$N! 
 
 
 
 1 $A; +	 
   "(D11 /  (}}Hx	2333"5(K@@@) L)16J)K)K&%%1 & 
 
 	
r"   c                   K   | j         }i ||}|                     |||          }g }i }h d}	d}
|D ]-}| j        rt          |          dk    rt	          d          d} | j        |d         ||fi |2 3 d{V }||}||z  }6 |J |                    |j        |j        r|j        	                    d          nd|j        r|j        	                    d          ndd           t          | f|d         |d	| d{V }t          |t                    s|                                }|                    |d
                    t          |	||           /|                     |||||
          S )z:Call out to OpenAI's endpoint async with k unique prompts.rp   NrQ   rt   r   r)   r*   ru   rv   r#   ry   )rh   rz   rO   r{   r\   _astreamr0   r+   r,   r2   r   r}   r1   r~   r!   r6   r   s                  r    
_ageneratezAnyscale._agenerate  sN      (%F%f%**67DAA&( GFF,0# $	A $	AH~ #Ax==1$$$%STTT8<
#04=QK{$ $6<$ $ , , , , , , ,% ")%*

"e+

$ "--- *%5*")C)G)G)X)X)X!%5%"J$>$B$B:$N$N$N! 
 
 
 
 "8" $A; +	" "
 " "       "(D11 /'}}Hx	2333"5(K@@@@%%1 & 
 
 	
s   7B	)NN)#__name__
__module____qualname____doc__r   rS   r;   str__annotations__r   r=   rT   r%   listr?   r   classmethodboolrC   r   r   r^   propertyr   r   ra   rh   rk   r   r
   r   r   r	   r   __classcell__)rc   s   @r    r8   r8   A   sp         & 3"U+;<<<s<<<"'%		"">">">i>>>eM222J222!E$777OT7774    [ 5$ 54 5 5 5 X5n 
WS#X%6 
 
 
 
 
 X
 >DcN > > > > > X> 3    X %):>	M
 M
cM
 tCy!M
 67	M

 M
 
M
 M
 M
 M
d %)?C	<
 <
c<
 tCy!<
 ;<	<

 <
 
<
 <
 <
 <
 <
 <
 <
 <
r"   r8   )#r   typingr   r   r   r   r   r   langchain_core.callbacksr	   r
   langchain_core.outputsr   r   r   langchain_core.utilsr   r   r   pydanticr   r   langchain_community.llms.openair   r   r    langchain_community.utils.openair   rS   rT   r   r!   intr6   r8   rA   r"   r    <module>r      s   & &                       J I I I I I I I I I V V V V V V V V V V % % % % % % % %         
 : 9 9 9 9 9: 6	9
c(	9"38n	9;?S>	9		9 	9 	9 	9EE9E37S>EOREE E E E,~
 ~
 ~
 ~
 ~
z ~
 ~
 ~
 ~
 ~
r"   