o
    ih                     @   s*   d dl mZmZ d dlZG dd dZdS )    )ListTupleNc                   @   s   e Zd Z	ddededededejdejdefd	d
Zdedeej	ej	f fddZ
defddZdeeej	ej	f  fddZdS )StaticKVCache    
num_layersnum_kv_headsdim_kv_head
batch_sizedevicedtype
max_lengthc              
   C   s2   || _ || _tjd|||||||d| _d| _d S )N   )r
   r   r   )r   r   torchzeroskv_cachecurrent_length)selfr   r   r   r	   r
   r   r    r   Q/home/ubuntu/.local/lib/python3.10/site-packages/voxcpm/modules/minicpm4/cache.py__init__   s   


zStaticKVCache.__init__	layer_idxreturnc                 C   s   | j d|f | j d|f fS )Nr      )r   )r   r   r   r   r   get_layer_cache   s   zStaticKVCache.get_layer_cachec                 C   s,   | j | jkr
td| j }|  j d7  _ |S )NzKV cache is fullr   )r   r   
ValueError)r   retr   r   r   step"   s
   zStaticKVCache.step	kv_cachesc              
   C   s   |d d  d| _| j  t| jD ]2}|| d | jd|d d d d d | jd d f< || d | jd|d d d d d | jd d f< qd S )Nr   r   r   )sizer   r   zero_ranger   )r   r   ir   r   r   fill_caches*   s   
02zStaticKVCache.fill_cachesN)r   )__name__
__module____qualname__intr   r
   r   r   r   Tensorr   r   r   r"   r   r   r   r   r      s(    	
"r   )typingr   r   r   r   r   r   r   r   <module>   s    