o
    ˜à·i¬  ã                   @   sŒ   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 d dlmZ dd	lmZ e	eƒZG d
d„ deƒZG dd„ deƒZdS )é    )ÚSequence)ÚPreTrainedTokenizerBase)ÚChatCompletionRequest)ÚDeltaMessage)Úinit_logger)ÚReasoningParser)ÚDeepSeekR1ReasoningParseré   )ÚIdentityReasoningParserc                       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e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 )ÚDeepSeekV3ReasoningParserz“
    V3 parser that delegates to either DeepSeekR1ReasoningParser or
    IdentityReasoningParser based on `thinking` and `separate_reasoning`.
    Ú	tokenizerc                    sŽ   t ƒ j|g|¢R i |¤Ž | di ¡pi }t| dd¡ƒ}t| dd¡ƒ}|p(|}|r9t|g|¢R i |¤Ž| _d S t|g|¢R i |¤Ž| _d S )NÚchat_template_kwargsÚthinkingFÚenable_thinking)ÚsuperÚ__init__ÚgetÚboolr   Ú_parserr
   ©Úselfr   ÚargsÚkwargsÚchat_kwargsr   r   ©Ú	__class__© úa/home/ubuntu/vllm_env/lib/python3.10/site-packages/vllm/reasoning/deepseek_v3_reasoning_parser.pyr      s   z"DeepSeekV3ReasoningParser.__init__Ú	input_idsÚreturnc                 C   ó   | j  |¡S ©N)r   Úis_reasoning_end©r   r   r   r   r   r"   (   ó   z*DeepSeekV3ReasoningParser.is_reasoning_endÚ	delta_idsc                 C   ó   | j  ||¡S r!   )r   Úis_reasoning_end_streaming)r   r   r%   r   r   r   r'   +   ó   z4DeepSeekV3ReasoningParser.is_reasoning_end_streamingc                 C   r    r!   )r   Úextract_content_idsr#   r   r   r   r)   0   r$   z-DeepSeekV3ReasoningParser.extract_content_idsÚmodel_outputÚrequestNc                 C   r&   r!   )r   Úextract_reasoning)r   r*   r+   r   r   r   r,   3   r(   z+DeepSeekV3ReasoningParser.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   8   s   	úz5DeepSeekV3ReasoningParser.extract_reasoning_streaming)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   Úintr   r"   r'   Úlistr)   Ústrr   Útupler,   r   r3   Ú__classcell__r   r   r   r   r      sD    ÿÿ
þÿÿ
þþýüûúùør   c                       s&   e Zd ZdZdef‡ fdd„Z‡  ZS )Ú%DeepSeekV3ReasoningWithThinkingParserzC
    DeepSeekV3ReasoningParser that defaults to thinking mode.
    r   c                    sn   |  di ¡pi }|  dd ¡}|  dd ¡}|d u r(|d u r(d|d< d|d< ||d< tƒ j|g|¢R i |¤Ž d S )Nr   r   r   T)r   r   r   r   r   r   r   r   P   s   z.DeepSeekV3ReasoningWithThinkingParser.__init__)r4   r5   r6   r7   r   r   r<   r   r   r   r   r=   K   s    r=   N)Úcollections.abcr   Útransformersr   Ú0vllm.entrypoints.openai.chat_completion.protocolr   Ú'vllm.entrypoints.openai.engine.protocolr   Úvllm.loggerr   Úvllm.reasoningr   Ú+vllm.reasoning.deepseek_r1_reasoning_parserr   Úidentity_reasoning_parserr
   r4   Úloggerr   r=   r   r   r   r   Ú<module>   s   6