§
    .`ƒi·*  ã                   ó0  — d dl Z d dlZd dlZd dlmZmZmZmZm	Z	 d dl
mZ  G d„ d¦  «        Z ed¬¦  «        ded	ej        d
ej        dededededej        dej        fd„¦   «         Z ed¬¦  «        dej        dededededej        fd„¦   «         ZdS )é    N)Úget_num_threadsÚjitÚnjitÚprangeÚset_num_threads)Ú
VllmConfigc                   ó  — e Zd Zdefd„Zdededej        dej        deee                  f
d„Z		 dd
eee                  dej        dej        de
eej        f         ee
eej        f                  z  d	z  deee                  f
d„Zd„ Zd	S )ÚNgramProposerÚvllm_configc                 óþ  — |j         €J ‚|j         j        €J ‚|j         j        €J ‚|j         j        | _        |j         j        | _        |j         j        | _        |j        j        | _        |j	        j
        }t          j        || j        ft          j        ¬¦  «        | _        t          j        |t          j        ¬¦  «        | _        d| _        |j        j        }t'          j        ¦   «         }|r)t+          d|dz  ¦  «        | _        | xj        |z  c_        nd| _        |                      g gdz  t          j        dt          j        ¬¦  «        t          j        d| j        ft          j        ¬¦  «        ¦  «         d S )N©Údtypei    é   é   i   )Úspeculative_configÚprompt_lookup_minÚprompt_lookup_maxÚmin_nÚmax_nÚnum_speculative_tokensÚkÚmodel_configÚmax_model_lenÚscheduler_configÚmax_num_seqsÚnpÚzerosÚint32Úvalid_ngram_draftÚvalid_ngram_num_draftsÚnum_tokens_thresholdÚparallel_configÚtensor_parallel_sizeÚosÚ	cpu_countÚminÚnum_numba_thread_availableÚpropose)Úselfr   r   Útp_sizer%   s        úv/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/v1/spec_decode/ngram_proposer.pyÚ__init__zNgramProposer.__init__   sp  € ØÔ-Ð9Ð9Ð9ØÔ-Ô?ÐKÐKÐKØÔ-Ô?ÐKÐKÐKð !Ô3ÔEˆŒ
à Ô3ÔEˆŒ
ð Ô/ÔFˆŒà(Ô5ÔCˆÔð #Ô3Ô@ˆÝ!#¤¨<¸¼Ð*@ÍÌÐ!QÑ!QÔ!QˆÔÝ&(¤h°ÅRÄXÐ&NÑ&NÔ&NˆÔ#ð %)ˆÔ!ØÔ-ÔBˆÝ”L‘N”Nˆ	àð 	0õ /2°!°iÀ1±nÑ.FÔ.FˆDÔ+ð Ð+Ô+°Ñ7Ð+Ô+Ð+à./ˆDÔ+ð 	ŠØˆD4‰KÝŒHT¥¤Ð*Ñ*Ô*ÝŒHd˜DÔ.Ð/µr´xÐ@Ñ@Ô@ñ	
ô 	
ð 	
ð 	
ð 	
ó    Únum_requestsÚvalid_ngram_requestsÚnum_tokens_no_specÚtoken_ids_cpuÚreturnc                 óŽ  — g }t          |¦  «        x}r³t          ¦   «         }t          j        |¦  «        }|| j        k    r3t          dt          | j        |¦  «        ¦  «        }	t          |	¦  «         nt          d¦  «         t          |||| j
        | j        | j        | j        | j        | j        ¦	  «	         t          |¦  «         t!          |¦  «        D ]n}
|
|v rS| j        |
         dk    rB|                     | j        |
d| j        |
         …f                              ¦   «         ¦  «         ŒY|                     g ¦  «         Œo|S )a°  Batch version of ngram proposer using numba for acceleration.

        Args:
            valid_ngram_requests:
                Set of indices of requests that need ngram proposals.
            num_tokens_no_spec:
                Numpy array of shape (batch_size,) representing the number
                of tokens without speculative tokens for each request.
            token_ids_cpu:
                Numpy array of shape (batch_size, max_model_len)
                representing the token IDs for each request.

        Returns:
            list[list[int]]:
                A list where each element is a list of proposed
                token IDs for the corresponding request.
        r   r   N)Úlenr   r   Úsumr!   Úmaxr&   r'   r   Úbatch_propose_numbar   r   r   r   r   r    ÚrangeÚappendÚtolist)r)   r.   r/   r0   r1   Údraft_token_idsÚnum_ngram_requestsÚoriginal_num_numba_threadsÚtotal_tokensÚfinal_num_threadsÚis              r+   Úbatch_proposezNgramProposer.batch_propose?   s{  € ð0 ,.ˆõ
 "%Ð%9Ñ!:Ô!:Ð:Ðð 	8Ý)8Ñ):Ô):Ð&õ œ6Ð"4Ñ5Ô5ˆLØ˜tÔ8Ò8Ð8Ý$'Ø•s˜4Ô:Ð<NÑOÔOñ%ô %Ð!õ  Ð 1Ñ2Ô2Ð2Ð2å Ñ"Ô"Ð"åØ$Ø"ØØ”
Ø”
ØÔ"Ø”ØÔ&ØÔ+ñ
ô 
ð 
õ Ð6Ñ7Ô7Ð7å|Ñ$Ô$ð 	+ð 	+ˆAØÐ(Ð(Ð(¨TÔ-HÈÔ-KÈaÒ-OÐ-OØ×&Ò&ØÔ*¨1Ð.N°Ô0KÈAÔ0NÐ.NÐ+NÔO×VÒVÑXÔXñô ð ð ð  ×&Ò& rÑ*Ô*Ð*Ð*àÐr-   NÚsampled_token_idsÚslot_mappingsc                 óô   — g }t          |¦  «        D ]@\  }}t          |¦  «        }|sŒ||         }	|	| j        k    rŒ+|                     |¦  «         ŒA|                      t          |¦  «        |||¦  «        }
|
S ©N)Ú	enumerater4   r   r9   rA   )r)   rB   r0   r1   rC   r/   r@   Úsampled_idsÚnum_sampled_idsÚ
num_tokensr;   s              r+   r(   zNgramProposer.proposeƒ   s¢   € ð  "ÐÝ'Ð(9Ñ:Ô:ð 	+ð 	+‰NˆAˆ{Ý! +Ñ.Ô.ˆOØ"ð àà+¨AÔ.ˆJØ˜TÔ/Ò/Ð/àà ×'Ò'¨Ñ*Ô*Ð*Ð*à×,Ò,ÝÐ!Ñ"Ô"Ø ØØñ	
ô 
ˆð Ðr-   c                 ó   — d S rE   © )r)   ÚargsÚkwargss      r+   Ú
load_modelzNgramProposer.load_model¤   s   € àˆr-   rE   )Ú__name__Ú
__module__Ú__qualname__r   r,   ÚintÚlistr   ÚndarrayrA   ÚdictÚstrÚtorchÚTensorr(   rN   rK   r-   r+   r
   r
      s)  € € € € € ð0
 Jð 0
ð 0
ð 0
ð 0
ðdBàðBð #ðBð œJð	Bð
 ”zðBð 
ˆd3ŒiŒðBð Bð Bð BðV ðð à  S¤	œ?ðð œJðð ”zð	ð
 ˜C ¤Ð-Ô.Ø
ˆtC˜œÐ%Ô&Ô
'ñ(à
ñðð 
ˆd3ŒiŒðð ð ð ðBð ð ð ð r-   r
   T)Úparallelr/   r0   r1   r   r   r   r   r   r    c	                 ó
  — t          t          | ¦  «        ¦  «        D ]e}	| |	         }
||
         }||
d |…f         }t          |||||¬¦  «        }|j        d         ||
<   t          |¦  «        r|||
d |j        d         …f<   Œfd S )N)Úorigin_tokensÚ	min_ngramÚ	max_ngramr   r   r   )r   r4   Ú._find_longest_matched_ngram_and_propose_tokensÚshape)r/   r0   r1   r   r   r   r   r   r    r@   ÚidxrI   Úcontext_token_idsÚdrafter_outputs                 r+   r7   r7   ©   sÂ   € õ •CÐ,Ñ-Ô-Ñ.Ô.ð Oð OˆØ" 1Ô%ˆØ'¨Ô,ˆ
Ø)¨#¨{°
¨{Ð*:Ô;ÐÝGØ+ØØØ'Øð
ñ 
ô 
ˆð '5Ô&:¸1Ô&=Ð˜sÑ#Ýˆ~ÑÔð 	OØ@NÐ˜cÐ#< ^Ô%9¸!Ô%<Ð#<Ð<Ñ=øðOð Or-   )Únopythonr[   r\   r]   r2   c                 ó  — | j         d         }||k     rt          j        d| j        ¬¦  «        S t	          |||z
  ¦  «        }|dk    rt          j        d| j        ¬¦  «        S | ddd…         }t          j        |t          j        ¬¦  «        }d}d}	d}
d}||k     r`||
         ||         k    r1|
dz  }
|
|k    r|
}|}	||k     r|
||<   |
|k    r||dz
           }
|dz  }n|
dk    r||
dz
           }
n|dz  }||k     °`||k     rt          j        d| j        ¬¦  «        S |dz
  |	z
  |z   }t	          |||z
  ¦  «        }| |||z   …         S )zÍ
    Find the longest n-gram which matches the suffix of the given tokens
    whose length is within [min_ngram, max_ngram] (inclusive).

    If found, we will extract k right after the matched ngram.
    r   )r   r   Néÿÿÿÿr   )r_   r   Úemptyr   r&   r   r   )r[   r\   r]   r   r   Útotal_tokenÚtokensÚlpsÚlongest_ngramÚpositionÚprev_lpsr@   Ústart_positions                r+   r^   r^   Æ   s¸  € ð  Ô% aÔ(€KØYÒÐÝŒx˜ MÔ$7Ð8Ñ8Ô8Ð8õ 	ˆAˆ}˜{Ñ*Ñ+Ô+€AØˆA‚v€vÝŒx˜ MÔ$7Ð8Ñ8Ô8Ð8ð
 ˜4˜4˜R˜4Ô €Fõ Œ(9¥B¤HÐ
-Ñ
-Ô
-€Cà€MØ€Hð €HØ	€AØ
ˆkŠ/ˆ/à(Ô˜v aœyÒ(Ð(ð ˜‰MˆHð ˜=Ò(Ð(Ø (ØØ9Š}ˆ}à!A‘Ø˜9Ò$Ð$ð ˜y¨1™}Ô-Ø‰FˆAˆAØ˜Š]ˆ]ð ˜8 a™<Ô(ˆHˆHð ‰FˆAðA ˆkŠ/ˆ/ðD yÒ Ð åŒx˜ MÔ$7Ð8Ñ8Ô8Ð8ð ! 1‘_ xÑ/°-Ñ?€NÝˆAˆ{˜^Ñ+Ñ,Ô,€AØ˜¨.¸1Ñ*<Ð<Ô=Ð=r-   )r$   Únumpyr   rW   Únumbar   r   r   r   r   Úvllm.configr   r
   rS   rT   rR   r7   r^   rK   r-   r+   ú<module>rq      s«  ðð 
€	€	€	à Ð Ð Ð Ø €€€Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ Eà "Ð "Ð "Ð "Ð "Ð "ðZð Zð Zð Zð Zñ Zô Zð Zðz €ˆtÐÑÔðOØðOàœ
ðOð ”:ðOð ð	Oð
 ðOð ðOð ðOð ”zðOð œJðOð Oð Oñ ÔðOð8 €ˆdÐÑÔðV>Ø”:ðV>àðV>ð ðV>ð ð	V>ð
 ðV>ð „ZðV>ð V>ð V>ñ ÔðV>ð V>ð V>r-   