
     sg                         d dl Z d dlmZmZ d dlmZmZmZ d dlm	Z	 d dl
Z
d dlZddl  G d de      Z G d	 d
e      ZeZ G d de      Zy)    N)ABCabstractmethod)OptionalSequenceTuple)OrderedDict   )*c                       e Zd ZdZddefdZeedefd              Zde	edf   de
e	edf      fdZedee   dd	fd
       Zedee   defd       Zedee   dd	ddfd       Zy)BaseLlamaCachez'Base cache class for a llama.cpp model.capacity_bytesc                     || _         y N)r   )selfr   s     H/var/www/html/venv/lib/python3.12/site-packages/llama_cpp/llama_cache.py__init__zBaseLlamaCache.__init__   s
    ,    returnc                     t         r   NotImplementedErrorr   s    r   
cache_sizezBaseLlamaCache.cache_size   s
     "!r   key.c                      y r    r   r   s     r   _find_longest_prefix_keyz'BaseLlamaCache._find_longest_prefix_key   s     	r   llama_cpp.llama.LlamaStatec                     t         r   r   r   s     r   __getitem__zBaseLlamaCache.__getitem__"       !!r   c                     t         r   r   r   s     r   __contains__zBaseLlamaCache.__contains__&   r"   r   valueNc                     t         r   r   r   r   r%   s      r   __setitem__zBaseLlamaCache.__setitem__*   s
     "!r           )__name__
__module____qualname____doc__intr   propertyr   r   r   r   r   r   r!   boolr$   r(   r   r   r   r   r      s    1-s - "C "  "38_ 
%S/	" "x} "1M " " " "$ " " "C=")E"	" "r   r   c                        e Zd ZdZddef fdZed        Zdeedf   de	eedf      fdZ
dee   dd	fd
Zdee   defdZdee   dd	fdZ xZS )LlamaRAMCachez&Cache for a llama.cpp model using RAM.r   c                 P    t         |   |       || _        t               | _        y r   )superr   r   r   cache_state)r   r   	__class__s     r   r   zLlamaRAMCache.__init__4   s'    (, M 	r   c                     t        | j                  j                         D cg c]  }|j                   c}      S c c}w r   )sumr6   valuesllama_state_size)r   states     r   r   zLlamaRAMCache.cache_size;   s0    8H8H8O8O8QRuE**RSSRs   <r   .r   c                 ~    d}d }fd| j                   j                         D        }|D ]  \  }}||kD  s|}|} |S )Nr   c              3   v   K   | ]0  }|t         j                  j                  j                  |      f 2 y wr   )	llama_cppllamaLlamalongest_token_prefix).0kr   s     r   	<genexpr>z9LlamaRAMCache._find_longest_prefix_key.<locals>.<genexpr>E   s5      
 	%%::1cBC
s   69)r6   keys)r   r   min_lenmin_keyrF   rD   
prefix_lens    `     r   r   z&LlamaRAMCache._find_longest_prefix_key?   s[     
%%**,
 " 	MAzG#$	 r   r   c                     t        |      }| j                  |      }|t        d      | j                  |   }| j                  j	                  |       |S NzKey not found)tupler   KeyErrorr6   move_to_endr   r   _keyr%   s       r   r!   zLlamaRAMCache.__getitem__O   sT    Cj,,S1<?++  &$$T*r   c                 :    | j                  t        |            d uS r   r   rL   r   s     r   r$   zLlamaRAMCache.__contains__X       ,,U3Z8DDr   r%   c                 r   t        |      }|| j                  v r| j                  |= || j                  |<   | j                  | j                  kD  rit	        | j                        dkD  rP| j                  j                  d       | j                  | j                  kD  rt	        | j                        dkD  rNy y y y )Nr   F)last)rL   r6   r   r   lenpopitemr'   s      r   r(   zLlamaRAMCache.__setitem__[   s    Cj$"""  % %oo 3 33D<L<L8MPQ8Q$$%$0 oo 3 33D<L<L8MPQ8Q38Q3r   r)   )r+   r,   r-   r.   r/   r   r0   r   r   r   r   r   r!   r1   r$   r(   __classcell__r7   s   @r   r3   r3   1   s    0s  T T38_ 
%S/	" x} 1M E E$ E1x} 15Q 1r   r3   c                        e Zd ZdZ	 ddedef fdZed        Zde	edf   de
e	edf      fd	Zdee   dd
fdZdee   defdZdee   dd
fdZ xZS )LlamaDiskCachez'Cache for a llama.cpp model using disk.	cache_dirr   c                 X    t         |   |       t        j                  |      | _        y r   )r5   r   	diskcacheCachecache)r   r\   r   r7   s      r   r   zLlamaDiskCache.__init__k   s"     	(__Y/
r   c                 H    t        | j                  j                               S r   )r/   r`   volumer   s    r   r   zLlamaDiskCache.cache_sizeq   s    4::$$&''r   r   .r   c                     d}d }| j                   j                         D ]6  }t        j                  j                  j                  ||      }||kD  s3|}|}8 |S )Nr   )r`   iterkeysr?   r@   rA   rB   )r   r   rG   rH   rD   rI   s         r   r   z'LlamaDiskCache._find_longest_prefix_keyu   s_     -1$$& 	A"..CCAsKJG#$		
 r   r   c                     t        |      }| j                  |      }|t        d      | j                  j	                  |      }|S rK   )rL   r   rM   r`   poprO   s       r   r!   zLlamaDiskCache.__getitem__   sD    Cj,,S1<?++.2jjnnT.B r   c                 :    | j                  t        |            d uS r   rR   r   s     r   r$   zLlamaDiskCache.__contains__   rS   r   r%   c                 b   t        dt        j                         t        |      }|| j                  v r(t        dt        j                         | j                  |= || j                  |<   t        dt        j                         | j
                  | j                  kD  rut        | j                        dkD  r]t        t        | j                              }| j                  |= | j
                  | j                  kD  rt        | j                        dkD  r]t        dt        j                         y )Nz"LlamaDiskCache.__setitem__: called)filez"LlamaDiskCache.__setitem__: deletezLlamaDiskCache.__setitem__: setr   z LlamaDiskCache.__setitem__: trim)
printsysstderrrL   r`   r   r   rV   nextiter)r   r   r%   key_to_removes       r   r(   zLlamaDiskCache.__setitem__   s    2DCj$**6SZZH

3

3/cjjAoo 3 33DJJ!8K djj!12M

=) oo 3 33DJJ!8K 	0szzBr   )z.cache/llama_cacher*   )r+   r,   r-   r.   strr/   r   r0   r   r   r   r   r   r!   r1   r$   r(   rX   rY   s   @r   r[   r[   h   s    1 MT00EH0 ( (38_ 
%S/	"	x} 	1M 	E E$ ECx} C5Q Cr   r[   )rk   abcr   r   typingr   r   r   collectionsr   r^   llama_cpp.llamar?   llama_typesr   r3   
LlamaCacher[   r   r   r   <module>rw      sR    
 # 
 $   "S "@01N 01h 
3C^ 3Cr   