o
    Zhf                     @   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)pre_init)Field)
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< 	 d	Z!e ed< e"ded efd!d"Z#e$d eee f fd#d$Z%				d,d%ee deee  d&ee& d'e d e'f
d(d)Z(e$d ef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   sb   zddl m} W n ty   tdw |d|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&   N )vllmr)   ImportError)clsr'   ZVLLModelr*   r*   T/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/llms/vllm.pyvalidate_environmentM   s"   
	zVLLM.validate_environmentc                 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promptsrun_managerkwargsc                    s   ddl m} |dd}i | j|d|i}|j  |di  fdd| D }|r8| jj|||d}	n| j||}	g }
|	D ]}|j	d j
}|
t|d	g qCt|
d
S )z*Run the LLM on the given prompt and input.r   )SamplingParamslora_requestNr   c                    s   i | ]\}}| v r||qS r*   r*   ).0kvZ
known_keysr*   r.   
<dictcomp>   s    z"VLLM._generate.<locals>.<dictcomp>)r7   )text)generationsr*   )r+   r6   popr2   __annotations__keysitemsr&   generateoutputsr=   appendr   r	   )r1   r3   r   r4   r5   r6   r7   paramsZsample_paramsrD   r>   outputr=   r*   r;   r.   	_generatev   s"   

zVLLM._generatec                 C      dS )Return type of llm.r+   r*   r0   r*   r*   r.   	_llm_type      zVLLM._llm_type)NN)*__name__
__module____qualname____doc__r   strr@   r   r   intr   boolr   r   r   floatr   r   r   r   r   r   r   r   r   r    r"   r#   r   dictr%   r   r   r&   r
   r/   propertyr2   r   r	   rH   rK   r*   r*   r*   r.   r      st   
 

$r   c                   @   sN   e Zd ZdZedefddZedee	e
f fddZede	fddZd	S )

VLLMOpenAIz!vLLM OpenAI-compatible API clientr(   c                 C   rI   )NFr*   )r-   r*   r*   r.   is_lc_serializable   s   zVLLMOpenAI.is_lc_serializablec                 C   s6   d| j i| jddi}t s|| j| jd |S )z,Get the parameters used to invoke the model.r   Z
logit_biasN)Zapi_keyZapi_base)Z
model_namer2   r   updateZopenai_api_keyZopenai_api_base)r1   rF   r*   r*   r.   _invocation_params   s   zVLLMOpenAI._invocation_paramsc                 C   rI   )rJ   zvllm-openair*   r0   r*   r*   r.   rK      rL   zVLLMOpenAI._llm_typeN)rM   rN   rO   rP   classmethodrS   rX   rV   r   rQ   r   rZ   rK   r*   r*   r*   r.   rW      s    rW   N)typingr   r   r   r   Zlangchain_core.callbacksr   Z#langchain_core.language_models.llmsr   Zlangchain_core.outputsr   r	   Zlangchain_core.utilsr
   Zpydanticr   Zlangchain_community.llms.openair   Z langchain_community.utils.openair   r   rW   r*   r*   r*   r.   <module>   s     