
    .`iw!                         d dl Z d dlZd dlmZ d dlmZ d dlZd dlm	Z	m
Z
 d dlmZmZmZmZmZ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dS )    N)Sequence)Any)ChatCompletionRequestChatCompletionToolsParam)DeltaFunctionCallDeltaMessageDeltaToolCallExtractedToolCallInformationFunctionCallToolCall)init_logger)TokenizerLike)
ToolParserc                        e Zd Zdef fdZdedef fdZdededefdZ	ded	ed
ede
e         de
e         de
e         dededz  fdZ xZS )Glm4MoeModelToolParser	tokenizerc                 X   t                                          |           d| _        g | _        d| _        g | _        d| _        d| _        | j        | _        t          j
        dt          j                  | _        t          j
        dt          j                  | _        t          j
        dt          j                  | _        | j        st!          d          | j                            | j                  | _        | j                            | j                  | _        d	| _        d S )
NFz<tool_call>z</tool_call>z<tool_call>.*?</tool_call>z%<tool_call>([^\n]*)\n(.*)</tool_call>z7<arg_key>(.*?)</arg_key>\s*<arg_value>(.*?)</arg_value>zUThe model tokenizer must be passed to the ToolParser constructor during construction. )super__init__current_tool_name_sentprev_tool_call_arrcurrent_tool_idstreamed_args_for_tooltool_call_start_tokentool_call_end_tokentool_calls_start_tokenrecompileDOTALLfunc_call_regexfunc_detail_regexfunc_arg_regexmodel_tokenizer
ValueErrorvocabgettool_call_start_token_idtool_call_end_token_id_buffer)selfr   	__class__s     z/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/tool_parsers/glm4_moe_tool_parser.pyr   zGlm4MoeModelToolParser.__init__!   s   ###&+#.0!13#%2"#1 &*&@#!z*GSS!#4bi"
 "
 !jF	
 
 # 	3  
 )-
t7Q(R(R%&*jnnT5M&N&N#    requestreturnc                 |    t                                          |          }|j        r|j        dk    rd|_        |S )zy
        Adjust request parameters to ensure tool call tokens are not skipped
        during tokenizer decoding.
        noneF)r   adjust_requesttoolstool_choiceskip_special_tokens)r,   r0   r-   s     r.   r4   z%Glm4MoeModelToolParser.adjust_request=   sB    
 ''((11= 	0W0F::
 +0G'r/   model_outputc                    dt           dt           dt          t                   d z  dt          fd}dt           dt          fd}| j                            |          }t                              d|           	 g }|D ]:}| j	        
                    |          }|st                              d	|           ;|                    d
          }	|                    d          }
|
r| j                            |
          ng }i }|D ]k\  }}|                                }|                                } ||	||j                  s ||          }t                              d||           |||<   l|                    t#          dt%          |	t'          j        |d                                         <	 t+          |          dk    r4|d |                    | j                           }t1          d||          S t1          dg |          S # t2          $ r/ t                              d           t1          dg |          cY S w xY w)N	tool_namearg_namer5   r1   c                 ,   |dS |D ]q}|j         j        | k    r_|j         j         dS |j         j                            di                               |i                               dd           }|dk    c S rt                              d|            dS )NF
propertiestypestringzNo tool named '%s'.)functionname
parametersr(   loggerdebug)r:   r;   r5   toolarg_types        r.   _is_string_typezBGlm4MoeModelToolParser.extract_tool_calls.<locals>._is_string_typeP   s    
 }u 	0 	0=%22}/7$uu044\2FFXr**VT** 
 $x//// 3 LL.	:::5r/   valuec                     	 t          j        |           S # t          $ r Y nw xY w	 t          j        |           S # t          $ r Y nw xY w| S )N)jsonloads	Exceptionastliteral_eval)rH   s    r.   _deserializez?Glm4MoeModelToolParser.extract_tool_calls.<locals>._deserialized   sr    z%(((   '...   Ls    
##; 
AAzmodel_output: %sz*Failed to parse tool call details from: %s      zarg_key = %s, arg_val = %sr@   F)ensure_asciirA   	arguments)r>   r@   r   T)tools_called
tool_callscontentz Failed to extract tool call spec)strlistr   boolr   r"   findallrC   rD   r#   searchwarninggroupr$   stripr5   appendr   r   rJ   dumpslenfindr   r
   rL   	exception)r,   r8   r0   rG   rO   matched_tool_callsrV   match	tc_detailtc_nametc_argspairsarg_dctkeyrH   arg_keyarg_valrW   s                     r.   extract_tool_callsz)Glm4MoeModelToolParser.extract_tool_callsK   s   
			 01D8	 		 	 	 	(
	 
	 
	 
	 
	 
	 "199,GG'666+	J+   299%@@	  NND   #//!,,#//!,,@GO+33G<<<R"' / /JC!iikkG#kkmmG*?7GW]KK 8".,w"7"7LL!=wPPP'.GG$$!!'!-!(&*ju&M&M&M" " "     'D :""&'W):):4;V)W)W'WX3!%*g    0"r<     	 	 	?@@@/"r<     	s   7E H 6I
	I
previous_textcurrent_text
delta_textprevious_token_idscurrent_token_idsdelta_token_idsNc                    | xj         |z  c_         | j         }|                    | j                  }	|	dk    r$d| _         | j        dk    rd}t	          |          S t
                              d|           |                    | j                  }
|
dk    r| j        dk    rd| _        g | _        g | _	        t          | j                  | j        k    r7| j                            i            t          | j                  | j        k    7t          | j	                  | j        k    r7| j	                            d           t          | j	                  | j        k    7|                     |d |
t          | j                  z            |          }t          |j                  dk    rt
                              d           d S |j        d         }|j        j        t#          j        |j        j                  d| j        | j        <   |j        j        | j	        | j        <   t	          |j        t+          | j        |j        |j        t1          |j        j        |j        j                            g	          }| xj        d
z  c_        ||
t          | j                  z   d          | _         |S ||	d          | _         t	          |d |	                   S )Nr   r   r   )rW   zcur_text = %sz!Failed to extract any tool calls.rS   )indexidr>   r@   )rW   rV   rP   )r+   rc   r   r   r   rC   rD   r   r   r   rb   r`   ro   rV   r]   r@   rA   rJ   rK   rT   rW   r	   rx   r>   r   )r,   rp   rq   rr   rs   rt   ru   r0   cur_text	start_idxend_idxextracted_tool_calls	tool_calldeltas                 r.   extract_tool_calls_streamingz3Glm4MoeModelToolParser.extract_tool_calls_streaming   s    	
"<MM$"<==	??DL#a''1111_h///-- 899b==#r))'($*,'.0+d-..$2FFF'..r222 d-..$2FFFd122d6JJJ+222666 d122d6JJJ $(#:#:B7S)A%B%BBBCW$ $  '233q88BCCCt,7:I!*/!Z	(:(DEE= =D#D$89
 ", '(<= !,4!"2$<&^!2!*!3!8&/&8&B" " "	  
  E   A%  #Gc$2J.K.K$K$M$MNDLL	

+HZiZ$89999r/   )__name__
__module____qualname__r   r   r   r4   rX   r
   ro   r   intr   r   __classcell__)r-   s   @r.   r   r       s-       -      8&; @U      RR 'R 
&	R R R Rh@:@: @: 	@:
 %SM@: $C=@: "#@: '@: 
	@: @: @: @: @: @: @: @:r/   r   )rM   rJ   collections.abcr   typingr   regexr   0vllm.entrypoints.openai.chat_completion.protocolr   r   'vllm.entrypoints.openai.engine.protocolr   r   r	   r
   r   r   vllm.loggerr   vllm.tokenizersr   &vllm.tool_parsers.abstract_tool_parserr   r   rC   r    r/   r.   <module>r      sT   


  $ $ $ $ $ $                                 $ # # # # # ) ) ) ) ) )      
X		: : : : :Z : : : : :r/   