o
    پi                     @  s   d dl mZ d dlZd dlmZ d dlZd dlmZmZm	Z	m
Z
 er(d dlmZ edd
dZedddZd d ddddZdS )    )annotationsN)TYPE_CHECKING)
cache_onceis_arch_support_pdlload_jitmake_cpp_args)Module	row_bytesintreturnr   c                 C  s4   t | t }tdg|R dgdd| dfgdS )Nkvcachezelementwise/kvcache.cuhstore_cachezStoreKVCacheKernel<z>::run)
cuda_filescuda_wrappers)r   r   r   )r	   args r   M/home/ubuntu/.local/lib/python3.10/site-packages/sglang/jit_kernel/kvcache.py_jit_kvcache_module   s   r   sizeboolc              
   C  sx   t t}| d dkr|d|  d dS zt|  W dS  ty; } z|d|  d|  W Y d }~dS d }~ww )	N   r   zUnsupported row_bytes=z/ for JIT KV-Cache kernel: must be multiple of 4FTz2Failed to load JIT KV-Cache kernel with row_bytes=z: )logging	getLogger__name__warningr   	Exception)r   loggerer   r   r   can_use_store_cache   s    

r   )r	   	num_splitktorch.Tensorvk_cachev_cacheindicesr   Nonec                C  sf   |p
| j d |   }t|}|dkr'|d dkrd}n|d dkr%d}nd}|| ||||| dS )	a  Store key and value tensors into KV cache at specified indices.

    Args:
        k (torch.Tensor): Key tensor of shape (batch_size, H * D).
        v (torch.Tensor): Value tensor of shape (batch_size, H * D).
        k_cache (torch.Tensor): Key cache tensor of shape (num_pages, H * D).
        v_cache (torch.Tensor): Value cache tensor of shape (num_pages, H * D).
        indices (torch.Tensor): Indices tensor of shape (batch_size,).
    r   i   r   i         N)shapeelement_sizer   r   )r    r"   r#   r$   r%   r	   r   moduler   r   r   r   1   s    r   )r	   r
   r   r   )r   r
   r   r   )r    r!   r"   r!   r#   r!   r$   r!   r%   r!   r	   r
   r   r
   r   r&   )
__future__r   r   typingr   torchsglang.jit_kernel.utilsr   r   r   r   tvm_ffi.moduler   r   r   r   r   r   r   r   <module>   s    
