
    .`ie                         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
e          Z G d de          ZdS )    )Sequence)ChatCompletionRequest)DeltaMessage)ResponsesRequest)init_logger)ReasoningParser)BaseThinkingReasoningParser)TokenizerLikec                       e Zd ZdZedefd            Zedefd            Zdedededee	         d	ee	         d
ee	         de
dz  fdZdS )MiniMaxM2ReasoningParserz
    Reasoning parser for MiniMax M2 model.

    MiniMax M2 models don't generate <think> start token, only </think> end
    token. All content before </think> is reasoning, content after is the
    actual response.
    returnc                     dS )z(The token that starts reasoning content.<think> selfs    ~/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/reasoning/minimax_m2_reasoning_parser.pystart_tokenz$MiniMaxM2ReasoningParser.start_token    s	     y    c                     dS )z&The token that ends reasoning content.</think>r   r   s    r   	end_tokenz"MiniMaxM2ReasoningParser.end_token%   s	     zr   previous_textcurrent_text
delta_textprevious_token_idscurrent_token_idsdelta_token_idsNc                 j   t          |          dk    r|d         | j        k    rdS | j        |v rt          |          S | j        |v r\|                    | j                  }|d|         }||t          | j                  z   d         }	t          |r|nd|	r|	nd          S t          |          S )z
        Extract reasoning content from a delta message for streaming.

        MiniMax M2 models don't generate <think> start token, so we assume
        all content is reasoning until we encounter the </think> end token.
           r   Ncontent)	reasoningr"   )r#   )lenend_token_idr   findr   )
r   r   r   r   r   r   r   	end_indexr#   r"   s
             r   extract_reasoning_streamingz4MiniMaxM2ReasoningParser.extract_reasoning_streaming*   s      1$$);t?P)P)P4  222
3333 //"77I":I:.I S-@-@!@!B!BCG'0:))d#*4    j1111r   )__name__
__module____qualname____doc__propertystrr   r   r   intr   r(   r   r   r   r   r      s          S    X 3    X%2%2 %2 	%2
 %SM%2 $C=%2 "#%2 
	%2 %2 %2 %2 %2 %2r   r   c                        e Zd ZdZdef fdZdee         defdZ	de
e         de
e         fdZded	ed
edee         dee         dee         dedz  fdZdedeez  deedz  edz  f         fdZ xZS )#MiniMaxM2AppendThinkReasoningParserz0
    Reasoning parser for MiniMax M2 model.
    	tokenizerc                      t                      j        |g|R i | | j                            d          | _        d S )Nr   )super__init__vocabgetr%   )r   r2   argskwargs	__class__s       r   r5   z,MiniMaxM2AppendThinkReasoningParser.__init__W   sF    4T444V444 JNN:66r   	input_idsr   c                 b    | j         t          fdt          |          D                       S )Nc              3   $   K   | ]
}|k    V  d S Nr   ).0input_idr%   s     r   	<genexpr>zGMiniMaxM2AppendThinkReasoningParser.is_reasoning_end.<locals>.<genexpr>]   s(      PP8|+PPPPPPr   )r%   anyreversed)r   r;   r%   s     @r   is_reasoning_endz4MiniMaxM2AppendThinkReasoningParser.is_reasoning_end[   s6    (PPPPHY<O<OPPPPPPr   c                     |S r>   r   )r   r;   s     r   extract_content_idsz7MiniMaxM2AppendThinkReasoningParser.extract_content_ids_   s    r   r   r   r   r   r   r   Nc                 R    t          |          dk    rd|z   }t          |          S )Nr   r   r!   )r$   r   )r   r   r   r   r   r   r   s          r   r(   z?MiniMaxM2AppendThinkReasoningParser.extract_reasoning_streamingb   s3     !""a''"Z/JJ////r   model_outputrequestc                     d d|z   fS )Nr   r   )r   rH   rI   s      r   extract_reasoningz5MiniMaxM2AppendThinkReasoningParser.extract_reasoningo   s     Y---r   )r)   r*   r+   r,   r
   r5   r   r/   boolrD   listrF   r.   r   r(   r   r   tuplerK   __classcell__)r:   s   @r   r1   r1   R   sQ        7- 7 7 7 7 7 7Q(3- QD Q Q Q QT#Y 49    00 0 	0
 %SM0 $C=0 "#0 
	0 0 0 0..*?BR*R.	sTz3:%	&. . . . . . . .r   r1   N)collections.abcr   0vllm.entrypoints.openai.chat_completion.protocolr   'vllm.entrypoints.openai.engine.protocolr   *vllm.entrypoints.openai.responses.protocolr   vllm.loggerr   $vllm.reasoning.abs_reasoning_parsersr   vllm.reasoning.basic_parsersr	   vllm.tokenizersr
   r)   loggerr   r1   r   r   r   <module>rY      s,   % $ $ $ $ $                $ # # # # # @ @ @ @ @ @ D D D D D D ) ) ) ) ) )	X		82 82 82 82 82: 82 82 82v .  .  .  .  ./  .  .  .  .  .r   