
    .`it.              	       
   d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
mZmZmZ d dlmZ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mZ d dlmZ  ee          Z  G d d          Z!dej"        fde#de#dede
fdZ$dS )    )Lock)defaultdict)
HTTPStatus)EngineClient)	ErrorInfoErrorResponse	ModelCard	ModelListModelPermission)BaseModelPathLoRAModulePath)LoadLoRAAdapterRequestUnloadLoRAAdapterRequest)sanitize_message)init_logger)LoRARequest)LoRAResolverLoRAResolverRegistry)AtomicCounterc                       e Zd ZdZdddedee         dee         dz  f fdZd Z	d	e
fd
Zddedz  d	efdZd	efdZ	 ddededz  d	eez  fdZded	eez  fdZded	edz  fdZded	edz  fdZded	eez  fdZ xZS )OpenAIServingModelszShared instance to hold data about the loaded base model(s) and adapters.

    Handles the routes:
    - /v1/models
    - /v1/load_lora_adapter
    - /v1/unload_lora_adapter
    N)lora_modulesengine_clientbase_model_pathsr   c                   t                                                       || _        || _        || _        i | _        t          d          | _        g | _        t          j
                    D ].}| j                            t          j        |                     /t          t                    | _        | j        j        | _        | j        j        | _        | j        j        | _        | j        j        | _        | j        j        | _        d S )Nr   )super__init__r   r   static_lora_moduleslora_requestsr   lora_id_counterlora_resolversr   get_supported_resolversappendget_resolverr   r   lora_resolver_lockinput_processorio_processorrenderermodel_configmax_model_len)selfr   r   r   lora_resolver_name	__class__s        z/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/entrypoints/openai/models/serving.pyr   zOpenAIServingModels.__init__'   s     	* 0#/ 57,Q//24"6"N"P"P 	 	&&$12DEE    4?t3D3D#1A .;*3 .;!.<    c                   K   | j         dS | j         D ]m}t          |j        |j                  }|                     ||j                   d{V }t          |t                    rt          |j	        j
                  ndS )zALoads all static LoRA modules.
        Raises if any fail to loadN)	lora_path	lora_name)requestbase_model_name)r   r   pathnameload_lora_adapterr4   
isinstancer   
ValueErrorerrormessage)r+   loraload_requestload_results       r.   init_static_lorasz%OpenAIServingModels.init_static_lorasD   s       #+F, 	< 	<D1)ty  L !% 6 6$d6J !7 ! !      K +}55 < !2!:;;;<	< 	<r/   returnc                 D    t          fd| j        D                       S )Nc              3   .   K   | ]}|j         k    V  d S N)r6   ).0model
model_names     r.   	<genexpr>z4OpenAIServingModels.is_base_model.<locals>.<genexpr>T   s*      OO5:+OOOOOOr/   )anyr   )r+   rF   s    `r.   is_base_modelz!OpenAIServingModels.is_base_modelS   s)    OOOO9NOOOOOOr/   lora_requestc                 8    ||j         S | j        d         j        S )a&  Returns the appropriate model name depending on the availability
        and support of the LoRA or base model.
        Parameters:
        - lora: LoRARequest that contain a base_model_name.
        Returns:
        - str: The name of the base model or the first available model path.
        Nr   )r2   r   r6   )r+   rJ   s     r.   rF   zOpenAIServingModels.model_nameV   s$     #))$Q',,r/   c                     K    fd j         D             } fd j                                        D             }|                    |           t	          |          S )zLShow available models. This includes the base model and all
        adaptersc           	      n    g | ]1}t          |j        j        |j        t	                      g           2S ))idr*   root
permission)r	   r6   r*   
model_pathr   )rD   
base_modelr+   s     r.   
<listcomp>z=OpenAIServingModels.show_available_models.<locals>.<listcomp>e   sW     
 
 
  ?"0*+--.	  
 
 
r/   c           	          g | ]J}t          |j        |j        |j        r|j        nj        d          j        t                      g          KS )r   )rN   rO   parentrP   )r	   r2   r5   r4   r   r6   r   )rD   r<   r+   s     r.   rS   z=OpenAIServingModels.show_available_models.<locals>.<listcomp>n   sq     

 

 

  >Y'3t++*1-2+--.  

 

 

r/   )data)r   r   valuesextendr
   )r+   model_cards
lora_cardss   `  r.   show_available_modelsz)OpenAIServingModels.show_available_modelsb   s      
 
 
 
 #3
 
 


 

 

 

 *1133

 

 


 	:&&&k****r/   r3   r4   c                 R  K   |j         }| j        |         4 d {V  |                     |           d {V }||cd d d           d {V  S |j        }|| j        v r| j        |         j        n| j                            d          }t          ||||j	                  }|| 
                    |          r||_        	 | j                            |           d {V  nu# t          $ rh}d}	t          j        }
dt#          |          v rd}	t          j        }
t'          t#          |          |	|
          cY d }~cd d d           d {V  S d }~ww xY w|| j        |<   t(                              d||           d| d	cd d d           d {V  S # 1 d {V swxY w Y   d S )
N   )r2   lora_int_idr1   load_inplaceBadRequestErrorzNo adapter foundNotFoundErrorr;   err_typestatus_codez-Loaded new LoRA adapter: name '%s', path '%s'Success: LoRA adapter 'z' added successfully.)r2   r%    _check_load_lora_adapter_requestr1   r   r^   r    incr   r_   rI   r4   r   add_lora	Exceptionr   BAD_REQUESTstr	NOT_FOUNDcreate_error_responseloggerinfo)r+   r3   r4   r2   error_check_retr1   r^   rJ   e
error_typerd   s              r.   r7   z%OpenAIServingModels.load_lora_adapter|   sY      %	 *95 '	N '	N '	N '	N '	N '	N '	N '	N$($I$I'$R$RRRRRRRO*&'	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N
  )I  222 "9-99)--a00 
 '#'#$1	  L *t/A/A//R/R*/>,(11,?????????? 	 	 	.
(4%Q//!0J","6K,FFZ[       ?'	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N0	 -9Dy)KK?I   NYMMMO'	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	NsI   FA2F C#"F#
E-AE8E9FE.F
F #F c                 :  K   |j         }| j        |         4 d {V  |                     |           d {V }||cd d d           d {V  S | j        |= t                              d|           d| dcd d d           d {V  S # 1 d {V swxY w Y   d S )NzRemoved LoRA adapter: name '%s're   z' removed successfully.)r2   r%   "_check_unload_lora_adapter_requestr   rn   ro   )r+   r3   r2   rp   s       r.   unload_lora_adapterz'OpenAIServingModels.unload_lora_adapter   s      %	 *95 	P 	P 	P 	P 	P 	P 	P 	P$($K$KG$T$TTTTTTTO*&	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P "9-KK99EEEOYOOO	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	Ps   B
(B


BBc                    K   |j         r|j        st          ddt          j                  S |j        s3|j         | j        v r%t          d|j          ddt          j                  S d S )Nz2Both 'lora_name' and 'lora_path' must be provided.InvalidUserInputrb   The lora adapter 'z`' has already been loaded. If you want to load the adapter in place, set 'load_inplace' to True.)r2   r1   rm   r   rj   r_   r   r+   r3   s     r.   rf   z4OpenAIServingModels._check_load_lora_adapter_request   s         	(9 	(L+&2    # 	(9T=O(O(O(W->    ,&2    tr/   c                    K   |j         st          ddt          j                  S |j         | j        vr%t          d|j          ddt          j                  S d S )Nz:'lora_name' needs to be provided to unload a LoRA adapter.rw   rb   rx   z' cannot be found.ra   )r2   rm   r   rj   r   rl   ry   s     r.   rt   z6OpenAIServingModels._check_unload_lora_adapter_request   s         	(T+&2    D$666(RW->RRR(&0    tr/   r2   c           	      l  K   | j         |         4 d{V  || j        v r| j        |         cddd          d{V  S | j        j        }| j                            d          }d}| j        D ]}|                    ||           d{V }|d}||_        	 | j	        
                    |           d{V  || j        |<   t                              d||j        j                   |c cddd          d{V  S # t          $ r1}t                              d||j        j        |           Y d}~d}~ww xY w|r2t#          d| dd	t$          j        
          cddd          d{V  S t#          d| ddt$          j        
          cddd          d{V  S # 1 d{V swxY w Y   dS )ad  Attempt to resolve a LoRA adapter using available resolvers.

        Args:
            lora_name: Name/identifier of the LoRA adapter

        Returns:
            LoRARequest if found and loaded successfully.
            ErrorResponse (404) if no resolver finds the adapter.
            ErrorResponse (400) if adapter(s) are found but none load.
        Nr]   FTz.Resolved and loaded LoRA adapter '%s' using %szBFailed to load LoRA '%s' resolved by %s: %s. Trying next resolver.zLoRA adapter 'z$' was found but could not be loaded.r`   rb   zLoRA adapter z does not existra   )r%   r   r)   rE   r    rg   r!   resolve_lorar^   r   rh   rn   ro   r-   __name__BaseExceptionwarningrm   r   rj   rl   )r+   r2   r4   	unique_idfound_adapterresolverrJ   rq   s           r.   r|   z OpenAIServingModels.resolve_lora   s^      *95 3	 3	 3	 3	 3	 3	 3	 3	D...))43	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	
 #/5O,0033I!M !/ ! !%-%:%:?I%V%VVVVVVV+$(M/8L,!"099,GGGGGGGGG8D*95L%$.7  
  ,++33	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	4 ) ! ! !4%$.7   !! ,.  ,XXXX. * 6  M3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	^ -FIFFF, * 4  _3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	 3	sH   F#AF#AC>)F#>
D9'D4/F#4D99%F#1F##
F-0F-rC   )r}   
__module____qualname____doc__r   listr   r   r   r?   boolrI   r   rk   rF   r
   r[   r   r   r7   r   ru   rf   rt   r|   __classcell__)r-   s   @r.   r   r      s         59= = =#= }-=
 >*T1= = = = = =:< < <P4 P P P P
- 
-{T'9 
-S 
- 
- 
- 
-+Y + + + +6 NR-N -N--N@Cd
-N		-N -N -N -N^P/P		P P P P -		   0/		   *>C >K-4O > > > > > > > >r/   r   r`   r;   rc   rd   r@   c                 f    t          t          t          |           ||j                            S )N)r;   typecode)r:   )r   r   r   valuerb   s      r.   rm   rm   )  sA    
 $W--"
 
 
   r/   N)%asyncior   collectionsr   httpr   vllm.engine.protocolr   'vllm.entrypoints.openai.engine.protocolr   r   r	   r
   r   'vllm.entrypoints.openai.models.protocolr   r   $vllm.entrypoints.serve.lora.protocolr   r   vllm.entrypoints.utilsr   vllm.loggerr   vllm.lora.requestr   vllm.lora.resolverr   r   vllm.utils.counterr   r}   rn   r   rj   rk   rm    r/   r.   <module>r      s         # # # # # #       - - - - - -              R Q Q Q Q Q Q Q        4 3 3 3 3 3 # # # # # # ) ) ) ) ) ) A A A A A A A A , , , , , ,	X		H H H H H H H HZ &(4   	     r/   