o
    -i
                     @   s   d dl mZ d dlmZmZ d dlmZ d dlm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 neZe
eZG dd deZdS )    )Sequence)TYPE_CHECKINGAny)PreTrainedTokenizerBase)DeltaMessage)init_logger)ReasoningParser)DeepSeekR1ReasoningParser   )IdentityReasoningParser)ChatCompletionRequestc                       s   e Zd ZdZdef fddZdee defddZ	de
e d	e
e defd
dZde
e de
e fddZdedddeedB edB f fddZdedededee dee dee dedB fddZ  ZS )KimiK2ReasoningParsera4  
    Kimi K2 parser that delegates to either DeepSeekR1ReasoningParser or
    IdentityReasoningParser based on `thinking` and `separate_reasoning`.

    Unlike DeepSeekV3ReasoningParser which defaults to NOT thinking,
    KimiK2ReasoningParser defaults to thinking mode (uses DeepSeekR1ReasoningParser).
    	tokenizerc                    sv   t  j|g|R i | |di pi }t|dd}|r-t|g|R i || _d S t|g|R i || _d S )Nchat_template_kwargsthinkingT)super__init__popboolr	   _parserr   )selfr   argskwargschat_kwargsr   	__class__ d/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/vllm/reasoning/kimi_k2_reasoning_parser.pyr   $   s   zKimiK2ReasoningParser.__init__	input_idsreturnc                 C      | j |S N)r   is_reasoning_endr   r   r   r   r   r"   0      z&KimiK2ReasoningParser.is_reasoning_end	delta_idsc                 C      | j ||S r!   )r   is_reasoning_end_streaming)r   r   r%   r   r   r   r'   3      z0KimiK2ReasoningParser.is_reasoning_end_streamingc                 C   r    r!   )r   extract_content_idsr#   r   r   r   r)   8   r$   z)KimiK2ReasoningParser.extract_content_idsmodel_outputrequestr   Nc                 C   r&   r!   )r   extract_reasoning)r   r*   r+   r   r   r   r,   ;   r(   z'KimiK2ReasoningParser.extract_reasoningprevious_textcurrent_text
delta_textprevious_token_idscurrent_token_idsdelta_token_idsc                 C   s   | j ||||||S r!   )r   extract_reasoning_streaming)r   r-   r.   r/   r0   r1   r2   r   r   r   r3   @   s   	z1KimiK2ReasoningParser.extract_reasoning_streaming)__name__
__module____qualname____doc__r   r   r   intr   r"   listr'   r)   strtupler,   r   r3   __classcell__r   r   r   r   r      sD    

r   N)collections.abcr   typingr   r   transformersr   'vllm.entrypoints.openai.engine.protocolr   vllm.loggerr   vllm.reasoningr   +vllm.reasoning.deepseek_r1_reasoning_parserr	   identity_reasoning_parserr   0vllm.entrypoints.openai.chat_completion.protocolr   r4   loggerr   r   r   r   r   <module>   s   