o
    .iF                     @   s|   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ er*d dl	m
Z
 d dlmZ eeZG dd	 d	Zed
dd
 dS )    N)Callable)TYPE_CHECKING)init_logger)OffloadingSpec)
VllmConfig)KVCacheConfigc                	   @   sf   e Zd ZU i Zeeeg ee f f e	d< e
dedededdfddZe
d	d
dddefddZdS )OffloadingSpecFactory	_registrynamemodule_path
class_namereturnNc                    s@   || j v rtd| ddtt f fdd}|| j |< dS )z:Register a spec with a lazy-loading module and class name.zConnector 'z' is already registered.r   c                     s   t } t|  S )N)	importlibimport_modulegetattr)moduler   r    W/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/vllm/v1/kv_offload/factory.pyloader   s   

z3OffloadingSpecFactory.register_spec.<locals>.loaderN)r	   
ValueErrortyper   )clsr
   r   r   r   r   r   r   register_spec   s   
z#OffloadingSpecFactory.register_specconfigr   kv_cache_configzKVCacheConfig | Nonec           	      C   s   |j }|d us	J |j}|dd}|| jv r| j|  }n|d}|d u r.td| t|}t||}t|t	s?J t
d| |||S )N	spec_nameCPUOffloadingSpecspec_module_pathzUnsupported spec type: z&Creating offloading spec with name: %s)kv_transfer_configkv_connector_extra_configgetr	   r   r   r   r   
issubclassr   loggerinfo)	r   r   r   r   extra_configr   spec_clsr   spec_moduler   r   r   create_spec    s   




z!OffloadingSpecFactory.create_spec)__name__
__module____qualname__r	   dictstrr   r   r   __annotations__classmethodr   r(   r   r   r   r   r      s   
  r   r   zvllm.v1.kv_offload.cpu)r   collections.abcr   typingr   vllm.loggerr   vllm.v1.kv_offload.specr   vllm.configr   vllm.v1.kv_cache_interfacer   r)   r#   r   r   r   r   r   r   <module>   s   '