
    .`ilA                         d dl Z d dlmZ d dlmZ d dlZd dl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 d d	lmZ d d
lmZ  ee          Z G d de          ZdS )    N)Sequence)Any)ChatCompletionRequest)DeltaFunctionCallDeltaMessageDeltaToolCallExtractedToolCallInformationFunctionCallToolCall)init_logger)TokenizerLike)
ToolParser)consume_space)random_uuidc                        e Zd Zdef fdZdedeedz  edz  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d
efdZd
efdZdefdZdedefdZd
ededefdZ xZS )HunyuanA13BToolParser	tokenizerc                    t                                          |           g | _        d| _        d| _        g | _        g | _        g | _        t          j	        dt          j
                  | _        t          j	        d          | _        t          j	        d          | _        t          j	        d          | _        d| _        dg g d| _        d S )	NFz#<tool_calls>([\s\S]*?)</tool_calls>z"name"\s*:\s*"([^"]+)"z4"name"\s*:\s*"[^"]+"\s*,\s*"arguments"\s*:\s*\{\s*\}zL"name"\s*:\s*"[^"]+"\s*,\s*"arguments"\s*:\s*(\{(?:[^{}]|(?:\{[^{}]*\}))*\})z<tool_calls>)current_tool_indextool_ids
sent_tools)super__init__prev_tool_callscurrent_tool_idcurrent_tool_name_sentstreamed_argscurrent_tools_sentprev_tool_call_arrrecompileDOTALLanswer_tool_calls_patterntool_name_regtool_empty_arg_regtool_non_empty_arg_reg
bot_stringstreaming_state)selfr   	__class__s     ~/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/tool_parsers/hunyuan_a13b_tool_parser.pyr   zHunyuanA13BToolParser.__init__"   s    ### ,.!&+#(* /1 #% *,2BI*
 *
&  Z(ABB"$*C#
 #

 ')j['
 '
# ) #%0
 0
    model_outputreturnNc                    | j                             |          D ]}|                                \  d t          j        d|t          j                  D             }t          fd|D                       }|s\|d          }|                    d                                          }	 t          j	        |           ||fc S # t          $ r Y w xY w|d fS )Nc                 ^    g | ]*}|                                 |                                f+S  )startend).0ms     r,   
<listcomp>zAHunyuanA13BToolParser.preprocess_model_output.<locals>.<listcomp>Q   s=        AEEGG$  r-   z<think>(.*?)</think>)flagsc              3   6   K   | ]\  }}|k    o|k     V  d S Nr2   )r5   t_startt_endr4   r3   s      r,   	<genexpr>z@HunyuanA13BToolParser.preprocess_model_output.<locals>.<genexpr>W   sE        4BGU/C%K     r-      )r$   finditerspanr!   r#   anygroupstripjsonloads	Exception)	r*   r.   matchthink_regionsin_thinkcontenttool_calls_contentr4   r3   s	          @@r,   preprocess_model_outputz-HunyuanA13BToolParser.preprocess_model_outputJ   s9    3<<\JJ 	 	EJE3 +\    M      FS    H  &vv.%*[[^^%9%9%;%;"J1222"$66666    H T!!s   1C
CCrequestc                    	 |                      |          \  }}|s+|r|                    ddd          }t          dg |          S t          j        |          }t          |t                    s.t                              d           t          dg |p|          S g }t          |          D ]\  }}t          |t                    rd|vsd|vr#t          d	t                       d
t          |d         t          |d         t                    rt          j        |d                   n|d                             }	|                    |	           |r%t!          |                                          dk    rd}t          t!          |          dk    ||          S # t$          $ r t          dg |          cY S w xY w)zB
        Extract tool calls from a complete model output.
        u	   助手： r>   F)tools_called
tool_callsrJ   zTool calls data is not an arrayname	argumentscall_function)rR   rS   )idtyperU   r   N)rL   replacer	   rD   rE   
isinstancelistloggerdebug	enumeratedictr   r   r
   dumpsappendlenrC   rF   )
r*   r.   rM   rJ   potential_tool_callstool_calls_datarQ   idxcall	tool_calls
             r,   extract_tool_callsz(HunyuanA13BToolParser.extract_tool_callsd   s5   >	,0,H,H,V,V)G)'   B%ook2qAAG3!&2w   
 #j)=>>O ot44 >???3!&!#3|    *,J&77 - -	T"4..T))"$..$.{}}..#)!&\  *${*;TBB3DJtK'8999!%k!2    	 !!),,,, c'--//22a77/ __q0%     	 	 	/"r<     	s    AF% AF% DF% %GGprevious_textcurrent_text
delta_textprevious_token_idscurrent_token_idsdelta_token_idsc                    t          d|          }||d                             | j                  r%t          |t          | j                  z   |          }|r|t          |          k    s||         dk    rt	          |          S |                     ||d                    |                     |          }	|	r|	S t          | j        	                    |                    }
t          |
          }|dk    rdS | 
                    |           | j        d         }|                     |||
          }|r|S |                     |||          }|r|S dS )z8
        Extract tool calls for streaming mode.
        r   N[)rJ   r   )r   
startswithr(   ra   r   _try_parse_json_tools_handle_test_compatibilityrZ   r%   r?   _ensure_state_arraysr)   _handle_tool_name_streaming_handle_tool_args_streaming)r*   rh   ri   rj   rk   rl   rm   rM   	start_idx
test_deltaname_matches
tool_countcurrent_idx
name_delta
args_deltas                  r,   extract_tool_calls_streamingz2HunyuanA13BToolParser.extract_tool_calls_streaming   s    "!\22		

#..t?? 	V%i#do2F2F&FUUI	4C----I&#--
3333""<	

#;<<<44\BB
 	D.77EEFF&&
??4!!*---*+?@55\
 

  	55+z
 

  	tr-   c                     	 t          j        |          }t          |t                    r	|| _        d S d S # t           j        $ r Y d S w xY wr:   )rD   rE   rY   rZ   r    JSONDecodeError)r*   ri   parsed_toolss      r,   rq   z+HunyuanA13BToolParser._try_parse_json_tools   se    	:l33L,-- 7*6'''7 7# 	 	 	DD	s   06 A	A	c           
         t          | j                  dk    r*t          | j                  dk    r| j        d         du r| j                            |          }|r|                    d          }dt                       }t          t          dd|t          |          	                    d          	          g
          }dg| _        d| _
        d| j        d<   t          | j        d                   dk    r%| j        d                             dddd           nd| j        d         d         d<   d| _        |S d S )Nr   r>   Fzchatcmpl-tool-rU   rR   Texclude_noneindexrW   rV   rU   rQ   r   r   rO   	sent_namesent_arguments_prefixsent_argumentsr   )ra   r   r%   searchrB   r   r   r   r   
model_dumpr   r)   r`   r   )r*   ri   
name_matchfunction_nametool_iddeltas         r,   rr   z0HunyuanA13BToolParser._handle_test_compatibility   s}   t&''!++D+,,11+A.%77!/66|DD
 !$.$4$4Q$7$7M>{}}>>G()&'%/#*):)6*" *" *"",*$*"?"?  	$  E 04fD++,D(ABD()=>4/=>>!CC,\:AA-19>24     NR,\:1=kJ26D/ Ltr-   ry   c                    t          | j        d                   |k     rB| j        d                             dddd           t          | j        d                   |k     Bt          | j        d                   |k     r@| j        d                             d            t          | j        d                   |k     >d S d S )Nr   FrO   r   r   )ra   r)   r`   )r*   ry   s     r,   rs   z*HunyuanA13BToolParser._ensure_state_arrays  s    $&|455
BB .55!&-2&(    $&|455
BB $&z233j@@ ,33D999 $&z233j@@@@@@r-   rz   c           
      n   |dk    s
||dz
  k     r$|dz   }||k     r| j         d         |         d         s|| j         d<   || _        |}||                             d          }d| dt                       }|| j         d         |<   t	          t          |d	|t          |
                              d                    g          }d| j         d         |         d<   d| _        t          | j
                  |k    r2| j
                            d           t          | j
                  |k    2|S d S )Nr   r>   r   r   r   rT   _r   rU   r   Tr   r   r   rO   )r)   r   rB   r   r   r   r   r   r   ra   r   r`   )r*   rz   ry   rx   next_idx	tool_namer   r   s           r,   rt   z1HunyuanA13BToolParser._handle_tool_name_streaming  sy    "j1n < <"QH:%%,\:8D[Q & >F$%9:'/$&(5;;A>>	?+????@G$Z0=$%"-!+&%6I%F%F%F%Q%Q-1 &R & &	  	    PT$\2;?L.2+$,--<<&--b111 $,--<<tr-   c           	      X	   |dk    r||k     r| j                             |          }|rO|                                dk    r6t          |          D ]%}||k    r| j        d         |         d         sd| j        d         |         d<   d| j        d         |         d<   t          | j                  |k    r2| j                            d           t          | j                  |k    2| j        |xx         dz  cc<   t          t          |t          d                              d	          
          g          }||dz
  k     r'| j        dxx         dz  cc<   | j        d         | _        |c S 't          | j                            |                    }|t          |          k     r||                             d          }||dz
  k    }	|	s|                    d||                                                   }
|
dk    rR|
dz   }|||                                         |                             d          d                                         }| j        d         |         d         }| j        d         |         d         s|                    d          rd| j        d         |         d<   d| j        d         |         d<   t          | j                  |k    r2| j                            d           t          | j                  |k    2| j        |xx         dz  cc<   t          t          |t          d                              d	          
          g          }|S |                    |          r|t          |          d          }|r|| j        d         |         d<   t          | j                  |k    r2| j                            d           t          | j                  |k    2| j        |xx         |z  cc<   t          t          |t          |                              d	          
          g          }|S |                    d          r6||k    r0||dz
  k     r'| j        dxx         dz  cc<   | j        d         | _        d S )Nr   r   r   Tz{}r   rO   )rS   r   )r   rU   r   r>   r   z},{r   z"arguments":{})r&   r   r3   ranger)   ra   r   r`   r   r   r   r   r   rZ   r'   r?   rB   findsplitrC   rp   endswith)r*   ri   rz   ry   empty_args_matchir   args_matches	args_textis_last_toolnext_tool_posargs_end_pos	sent_args	args_diffs                 r,   ru   z1HunyuanA13BToolParser._handle_tool_args_streaming:  s    !j 8 8#6==lKK )$4$:$:$<$<q$@$@z** ) )AK''#3LA+N3  )
 !% !0>{K 7
 !% !0>{K 0 #&d&8"9"9["H"H $ 2 9 9" = = = #&d&8"9"9["H"H .{;;;tC;;;$0$1.91B6:2* 2* 2**4*$**G*G	%& %& %&,"	% 	% 	%E  +Z!^;; $ 45I J J Ja O J J J7;7K$88" 4 $)LLL ; D D\ R RSSLS....(5;;A>>	*j1n<# $0$5$5|K8>>@@% %M %**'4q'8( ,[ 9 ? ? A AL P #U>2216 #UWW " !0>{K$	 +L9+F+ !**3//!
  (6{C/
  (6{C( d011[@@*11"555 d011[@@&{333s:333()&1):S)I)I)I)T)T15 *U *" *"  $	 	 	E !L''	22 % )#i..*:*: ;I  % & ,\:;G, "$"455DD .55b999 "$"455DD*;7779D777 , -*5->2;.& .& .&&0jdj&C&C	!" !" !"(	! 	! 	!  %%%c** yI/E/E"Z!^33,-ABBBaGBBB/3/C00, tr-   )__name__
__module____qualname__r   r   strtuplerL   r   r	   rg   r   intr   r}   rq   rr   rs   rt   ru   __classcell__)r+   s   @r,   r   r   !   s       &
- &
 &
 &
 &
 &
 &
P""	sTz3:%	&" " " "4DD*?D	%D D D DL11 1 	1
 %SM1 $C=1 "#1 '1 
	1 1 1 1f#    %s % % % %N
:s 
: 
: 
: 
:  ,/       Dll.1l?Bl l l l l l l lr-   r   )rD   collections.abcr   typingr   regexr!   0vllm.entrypoints.openai.chat_completion.protocolr   'vllm.entrypoints.openai.engine.protocolr   r   r   r	   r
   r   vllm.loggerr   vllm.tokenizersr   &vllm.tool_parsers.abstract_tool_parserr   vllm.tool_parsers.utilsr   
vllm.utilsr   r   r[   r   r2   r-   r,   <module>r      se  
  $ $ $ $ $ $                               $ # # # # # ) ) ) ) ) )      2 1 1 1 1 1 " " " " " "	X		E E E E EJ E E E E Er-   