U
    h                     @   s   d dl mZmZ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 dlmZ d dlmZ G d	d
 d
eZG dd deZdS )    )AnyDictListOptional)CallbackManagerForLLMRun)BaseLLM)
Generation	LLMResult)Field)pre_init)
BaseOpenAI)is_openai_v1c                   @   s  e Zd ZU dZdZeed< dZee	 ed< dZ
ee ed< dZe	ed< d	Ze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Zeed< d	Zeee  ed< dZeed< dZe	ed< d	Zee	 ed< dZeed< d	Zee ed< eedZeee f ed< e ed< e!eedd d!Z"e#eee f d"d#d$Z$d*ee eee  ee% e e&d%d&d'Z'e#ed"d(d)Z(d	S )+VLLMzVLLM language model. model   tensor_parallel_sizeFtrust_remote_codenNbest_ofg        presence_penaltyfrequency_penaltyg      ?temperaturetop_ptop_kuse_beam_searchstop
ignore_eosi   max_new_tokenslogprobsautodtypedownload_dir)default_factoryvllm_kwargsclient)valuesreturnc                 C   sh   zddl m} W n tk
r,   tdY nX |f |d |d |d |d |d d	|d
 |d< |S )z3Validate that python package exists in environment.r   )LLMzPCould not import vllm python package. Please install it with `pip install vllm`.r   r   r   r"   r#   )r   r   r   r"   r#   r%   r&   )vllmr)   ImportError)clsr'   ZVLLModel r-   A/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/llms/vllm.pyvalidate_environmentM   s     

	zVLLM.validate_environmentr(   c                 C   s6   | j | j| j| j| j| j| j| j| j| j	| j
| jdS )z,Get the default parameters for calling vllm.)r   r   Z
max_tokensr   r   r   r   r   r   r   r   r    )r   r   r   r   r   r   r   r   r   r   r   r    selfr-   r-   r.   _default_paramsd   s    zVLLM._default_params)promptsr   run_managerkwargsr(   c                 K   sj   ddl m} | j|d|i}|f |}| j||}g }	|D ]"}
|
jd j}|	t|dg q<t	|	dS )z*Run the LLM on the given prompt and input.r   )SamplingParamsr   )text)generations)
r*   r7   r3   r&   generateoutputsr8   appendr   r	   )r2   r4   r   r5   r6   r7   paramsZsampling_paramsr;   r9   outputr8   r-   r-   r.   	_generatev   s    	
zVLLM._generatec                 C   s   dS )Return type of llm.r*   r-   r1   r-   r-   r.   	_llm_type   s    zVLLM._llm_type)NN))__name__
__module____qualname____doc__r   str__annotations__r   r   intr   boolr   r   r   floatr   r   r   r   r   r   r   r   r   r    r"   r#   r
   dictr%   r   r   r   r/   propertyr3   r   r	   r?   rA   r-   r-   r-   r.   r      sF   
  
r   c                   @   sN   e Zd ZdZeedddZeee	e
f dddZee	dddZd	S )

VLLMOpenAIz!vLLM OpenAI-compatible API clientr0   c                 C   s   dS )NFr-   )r,   r-   r-   r.   is_lc_serializable   s    zVLLMOpenAI.is_lc_serializablec                 C   s4   d| j i| jddi}t s0|| j| jd |S )z,Get the parameters used to invoke the model.r   Z
logit_biasN)Zapi_keyZapi_base)Z
model_namer3   r   updateZopenai_api_keyZopenai_api_base)r2   r=   r-   r-   r.   _invocation_params   s      zVLLMOpenAI._invocation_paramsc                 C   s   dS )r@   zvllm-openair-   r1   r-   r-   r.   rA      s    zVLLMOpenAI._llm_typeN)rB   rC   rD   rE   classmethodrI   rN   rL   r   rF   r   rP   rA   r-   r-   r-   r.   rM      s   rM   N)typingr   r   r   r   Zlangchain_core.callbacksr   Z#langchain_core.language_models.llmsr   Zlangchain_core.outputsr   r	   Zlangchain_core.pydantic_v1r
   Zlangchain_core.utilsr   Zlangchain_community.llms.openair   Z langchain_community.utils.openair   r   rM   r-   r-   r-   r.   <module>   s    