
    .`iz                         d dl Z 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ZdZdef fdZdefdZd Z	ded	e
e         d
z  ded
z  fdZdede
e         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 )SeedOssToolParserz<seed:tool_call>z</seed:tool_call>	tokenizerc                 R   t                                          |           |                                  g | _        | j        | _        | j        | _        d| _        d| _	        d| _
        d| _        d| _        d| _        d| _        d| _        d| _        |                                  | j                            | j                  | _        | j                            | j                  | _        | j                            | j                  | _        | j        | j        t-          d	          t/          j        | j                  }t/          j        | j                  }t/          j        | d
| t.          j                  | _        t/          j        | d
| d| dt.          j                  | _        t/          j        dt.          j                  | _        t/          j        dt.          j                  | _        t>                               d| j!        j"                   d S )Nz
<function=z</function>z<parameter=z</parameter>z<seed:think>z</seed:think>Fr   zSSeed_Oss XML parser: tokenizer did not include <seed:tool_call> or its closing tag.z(.*?)|z(.*?)$z*<function=(.*?)</function>|<function=(.*)$z.<parameter=(.*?)</parameter>|<parameter=(.*?)$z*vLLM Seed-Oss XML tool parser loaded (%s).)#super__init___reset_streaming_stateprev_tool_call_arrTOOL_CALL_STARTtool_call_start_tokenTOOL_CALL_ENDtool_call_end_tokentool_call_prefixfunction_end_tokenparameter_prefixparameter_end_tokenthink_start_tokenthink_end_tokenis_tool_call_startedis_thinking_endfailed_countvocabgettool_call_start_token_idtool_call_end_token_idthink_end_token_idRuntimeErrorreescapecompileDOTALLtool_call_complete_regextool_call_regextool_call_function_regextool_call_parameter_regexloggerinfo	__class____name__)selfr   tool_start_retool_end_rer6   s       z/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/tool_parsers/seed_oss_tool_parser.pyr   zSeedOssToolParser.__init__'   s   ### 	##%%%.0*.*>"(,(: %1'4%2(6 &4$3*/!%*!"##%%%(,
t7Q(R(R%&*jnnT5M&N&N#"&*..1E"F"F(0D4O4W7  
 	$"<==i 899(*
11K1129)
 )
%  "zGGKGG-GGG 
  
 )+
929)
 )
% *,=ry*
 *
& 	8$.:Q	
 	
 	
 	
 	
    returnc                 H    dt          j                    j        dd          S )zGenerate a unique tool call ID.call_N   )uuiduuid4hexr8   s    r;   _generate_tool_call_idz(SeedOssToolParser._generate_tool_call_id[   s"    .tz||',...r<   c                     d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _	        d| _
        d| _        d| _        dS )zReset all streaming state.r   FN )current_tool_indexr#   header_sentcurrent_tool_idcurrent_function_namecurrent_param_namecurrent_param_valueparam_countin_paramin_functionaccumulated_textjson_startedjson_closedrD   s    r;   r   z(SeedOssToolParser._reset_streaming_state_   so    "#$)! !%)""&#%   "! r<   function_call_strtoolsNc           
         dt           dt          ffd}dt           dt           dt          dt           dt          f
d}|                    d          }|d |         } ||          }||d	z   d          }i }	| j                            |          D ]}
|
d
         r|
d
         n|
d	         }|                    d          }|d |         }t          ||d	z   d                    }|                    d          r
|d	d          }|                    d          r
|d d         } |||||          |	|<   t          dt          |t          j        |	d                              S )N	func_namer=   c                    i S D ]}t          |d          r%t          |d          rt          |j        d          s8|j        dk    ru|j        j        | k    ret          |j        d          si c S |j        j        }t          |t                    rd|v r
|d         c S t          |t                    r|c S i c S t                              d|            i S )Ntypefunctionname
parameters
propertiesz+Tool '%s' is not defined in the tools list.)	hasattrr[   rZ   r\   r]   
isinstancedictr4   warning)rX   configparamsrV   s      r;   get_arguments_configzHSeedOssToolParser._parse_xml_function_call.<locals>.get_arguments_configr   s   }	 " "vv.. FJ//4;FOV4T4T ;*,,1E1R1R"6?LAA "!			#_7F!&$// "LF4J4J%l3333#FD11 "%!			NNH)TTTIr<   param_value
param_nameparam_configc                    |                                  dk    rd S ||vr$|i k    rt                              d||           | S t          ||         t                    rJd||         v r@t          ||         d                                                                                    }nd}|dv r| S |                    d          sT|                    d          s?|                    d          s*|                    d	          s|                    d
          rG	 t          |           } n4# t          t          f$ r  t                              d| ||           Y nw xY w| S |                    d          s|                    d          rn	 t          |           }|t          |          z
  dk    r|nt          |          } n4# t          t          f$ r  t                              d| ||           Y nw xY w| S |dv r;|                                  } | dvrt                              d| ||           | dk    S |dk    s|                    d          rV	 t          j        |           } | S # t          t          t          j        f$ r  t                              d| ||           Y nw xY w	 t          j        |           } n4# t          t"          f$ r  t                              d| ||           Y nw xY w| S )NnullzoParsed parameter '%s' is not defined in the tool parameters for tool '%s', directly returning the string value.rZ   string)rk   strtextvarcharcharenumintuintlongshortunsignedz[Parsed value '%s' of parameter '%s' is not an integer in tool '%s', degenerating to string.numfloatr   zXParsed value '%s' of parameter '%s' is not a float in tool '%s', degenerating to string.)booleanboolbinary)truefalsezmParsed value '%s' of parameter '%s' is not a boolean (`true` of `false`) in tool '%s', degenerating to false.r{   objectra   zpParsed value '%s' of parameter '%s' is not a valid JSON object in tool '%s', will try other methods to parse it.z}Parsed value '%s' of parameter '%s' cannot be converted via Python `ast.literal_eval()` in tool '%s', degenerating to string.)lowerr4   rb   r`   ra   rl   strip
startswithrq   
ValueError	TypeErrorrw   jsonloadsJSONDecodeErrorastliteral_evalSyntaxError)rf   rg   rh   rX   
param_typefloat_param_values         r;   convert_param_valuezGSeedOssToolParser._parse_xml_function_call.<locals>.convert_param_value   s      ""f,,t--2%%NN? #!   #" <
3T::&l:666 j!9&!ABBHHJJPPRR

%
QQQ""%%e,,E#((00E# ((00E# ((11	E#
 ((44E#	"%k"2"2KK"I.   NN8#"!     #"&&u-- 3#1F1Fw1O1O 3#(-k(:(:% -s3D/E/EEJJ *) !233  K
 #I.   NN8#"!     #"<<<)//11&777NNS#"!   #f,,))Z-B-B6-J-J)
&*j&=&=**&	43GH   W'&%    	"%"2;"?"?KK"K0   NN\#"!     #"sH   D* *.EE6G .G32G3I) )9J%$J%)J> >.K/.K/>   r   
rG   r[   F)ensure_asciir\   	arguments)rZ   r[   )rl   ra   r   indexr3   findallr   endswithr   r   r   dumps)r8   rU   rV   re   r   	end_indexfunction_namerh   r]   
param_dictmatch
match_textidxrg   rf   s     `            r;   _parse_xml_function_callz*SeedOssToolParser._parse_xml_function_callo   s   	C 	D 	 	 	 	 	 	*`	#`	#*-`	#=A`	#NQ`	#`	# `	# `	# `	#F &++C00	)*9*5++M::&y1}7

3;;JGG 	 	E%*1X;q58J""3''C#DSD)Jjq344K%%d++ .)!""o##D)) /)#2#.%8%8Z}& &Jz"" !"djRW.X.X.X  
 
 
 	
r<   model_outputc                     | j                             |          }d |D             }t          |          dk    r|g}g }|D ]/}|                    | j                            |                     0d |D             }|S )Nc                 >    g | ]}|d          r|d          n|d         S r   r    .0r   s     r;   
<listcomp>z9SeedOssToolParser._get_function_calls.<locals>.<listcomp>  :     
 
 
38a.E!HHeAh
 
 
r<   r   c                 >    g | ]}|d          r|d          n|d         S r   r   r   s     r;   r   z9SeedOssToolParser._get_function_calls.<locals>.<listcomp>  r   r<   )r1   r   lenextendr2   )r8   r   matched_rangesraw_tool_callsraw_function_calls	tool_callfunction_callss          r;   _get_function_callsz%SeedOssToolParser._get_function_calls  s    -55lCC
 
<J
 
 

 ~!##*^N' 	X 	XI%%d&C&K&KI&V&VWWWW
 
<N
 
 
 r<   requestc                 ~     j         |vrt          dg |          S  j        |v rM j        |v rD|                     j                  t           j                  z   }||d          }|d |         }nd}|}	                      |          }t          |          dk    rt          dg |          S  fd|D             } j                                         |D ]5}|r1 j        	                    |j
        j        |j
        j        d           6|                     j                  }	|	dk    r|	n|                     j                   }	||d |	         z   }
t          t          |          dk    ||
r|
nd           S # t          $ r/ t                              d           t          dg |          cY S w xY w)NF)tools_called
tool_callscontentrH   r   c                 F    g | ]}                     |j                  S r   )r   rV   )r   rU   r   r8   s     r;   r   z8SeedOssToolParser.extract_tool_calls.<locals>.<listcomp>:  s<       % --.?OO  r<   r   z,Error in extracting tool call from response.)r   r
   r!   r"   findr   r   r   clearappendr[   r\   r   r   	Exceptionr4   	exception)r8   r   r   think_end_indexresult_contentthinking_contentr   r   r   tool_call_start_indexr   s   ` `        r;   extract_tool_callsz$SeedOssToolParser.extract_tool_calls  s{     44/"r<    "l22$44 +//0DEE$I I O */*:*:;N+,<_,<=!)N*	!55nEEN>""a''3!&2|       )7  J #))+++'  	 +22$-$6$;)2);)E    %3$7$78R$S$S! )A-- &%#(()>?? "
 '8N9N8N)OOG/!*oo1%#*4     	 	 	KLLL/"r<     	s   99F 3CF 6F<;F<previous_textcurrent_text
delta_textprevious_token_idscurrent_token_idsdelta_token_idsc           
      ,    |s|r j         |vrt           j                            |                    }|dk    rdt           j                  dk    rL|                     j                  |                     j                  z
  }	|	dk    rt          d          S n j	        s|rt          d          S d S |s 
                                 | _         j        r j        s}|                     j                  }
|
 j        k    rX xj        dz  c_        d _        d _        d _        d _         j        |                     j                  k    rd _	        d S  j        s j        |v s	 j        |v rd _         j        st          |          S  j	        s j        |v s	 j        |v rFd _	         j        |v r4|d |                     j                           }|rt          |          S d S |                                                     j                  r|                                dk    rd S t          |          S |                     j                  } j        |k    rd S  j        |v r/|                     j                  t           j                  z   nd}g }|}	 |                     j        |          }|dk    rn-|                    |           |t           j                  z  }O j        t          |          k    rd S | j                 }|                     j        |          }|dk    r||d          }n|||t           j                  z            } j        s j        |v r|                     j                  t           j                  z   }|                    d|          }|dk    r|||          _                                          _        d _        d _        tA           fd	 j        D                       }|s" j                             j        d
d           t          tC           j         j        tE           j        d          d          g          S d S  j        r j        sC j#        |vr:d _        t          tC           j        tE          d                    g          S  j        sd _         j        sV j$        |v rLd _        |                     j                  t           j                  z   }|                     j$        |          }|dk    r|||         }	  %                    ||r|j&        nd           }|rYtO           j                  D ]D\  }}|(                    d          |j)        j*        k    r|j)        j+         j        |         d<    nEn,# tX          $ r tZ          .                    dd           Y nw xY wt          tC           j        tE          d                    g          }d _        d _        |S |                     j/                  } j0        s j        |k     rg }d}	 |                     j#        |          }|dk    rn-|                    |           |t           j#                  z  }Ot          |           j        k    rz| j                 }|t           j#                  z   }||d          } d| v rG|                     d          }!| d |!          _1        ||!z   dz   }"||"d          }#|#2                    d          r
|#dd          }#|#                     j/                  }$|$dk    r|#d |$         }%|%                    d          r
|%d d         }% j        dk    r.d j1        z   dz   tg          j4        |%          dd         z   dz   }&n-d j1        z   dz   tg          j4        |%          dd         z   dz   }& xj        dz  c_        t          tC           j        tE          |&                    g          S  j0        r* j/        |v r"|                     j/                  }'|d |'         }( j5        s&d|(v r"|(                    d          })|(|)dz   d          }( j5        s|(2                    d          r
|(dd          }( j5        |(z   }* j5        r!tg          j4         j5                  dd         nd}+tg          j4        |*          dd         },|,t          |+          d          }-d _0        d _5        t          tC           j        tE          |-dz                       g          S |}( j5        s&d|(v r"|(                    d          })|(|)dz   d          }( j5        s|(2                    d          r
|(dd          }(|(r j5        r!tg          j4         j5                  dd         nd}+ xj5        |(z  c_5        tg          j4         j5                  dd         },|,t          |+          d          }-|-r3t          tC           j        tE          |-                    g          S d S )Nr   rH   )r   r   FTrG   r   c              3   T   K   | ]"}|                     d           j        k    V  #dS )r\   N)r'   rL   )r   toolr8   s     r;   	<genexpr>zASeedOssToolParser.extract_tool_calls_streaming.<locals>.<genexpr>  sK       ( (  ((D,FF( ( ( ( ( (r<   z{}r   r[   )r   idr[   rZ   )r   {)r   )r   r[   r\   r   z0Failed to parse tool arguments during streaming.)exc_info}r   "z": "z, ")6r)   r   r0   r   r   countr   r   r   r#   r   rR   rT   rQ   rI   rJ   rO   rS   r$   r*   r"   r(   r   rstripr   r   r   r   r   rL   rE   rK   anyr	   r   r   r   r   rV   	enumerater'   r[   r\   r   r   r4   rb   r    rP   rM   r   r   r   rN   ).r8   r   r   r   r   r   r   r   complete_calls
open_calls	tool_endscontent_beforetool_starts_countr   tool_startsr   tool_start_idxtool_end_idx	tool_text
func_startfunc_endalready_addedfunc_content_endfunc_contentparsed_toolir   resultcomplete_paramsparam_starts	param_idxparam_start	remainingname_endvalue_start
value_textparam_end_idxrf   json_fragmentend_idxvalue_chunkgt_idx
full_valueprev_escapedfull_escapeddelta_escapeds.   `                                             r;   extract_tool_calls_streamingz.SeedOssToolParser.extract_tool_calls_streaming_  s6     	  44#>o#U#U!$199,GG" "
 "A%%#d.E*F*F*J*J!-!3!32" "$**4+CDD"EJ "Q+B7777 ' 2 4| 4'33334  	*''))) !-  	D$4 	$**4+CDDI4222''1,''#( #$ $)!#(  *l.@.@./ /   16D-t # 	(#66#z11#'D  # 	4
3333 ( 	8 -@@-;;,0)-;;%/F***4+EFFF&N & D+NCCCCt !''))2243KLL "((**b00  4#J7777 )..t/IJJ"&7774 #|33 d233c$:N6O6OOO 	
 "$	3##D$>DDCbyys###3t1222C	3 "c+&6&6664$T%<=#(()A>RR2$^__5II$D4L0M0M!MMI
  )	$	11&^^D,ABBS)F F 
 %>>#z::r>>1::h;N1OD.+/+F+F+H+HD('+D$'+D$ %( ( ( ( ($($;( ( ( % %M ) /66(,(B-1    ()&*&=#'#7):)-)Cr*" *" *" &0  	$    4  P	$ 	)>j)P)P$(!#%"&"9%6%E%E%E       $ )$(! # ,(?9(L(L#'  '^^D,ABBS)F F 
 $->>$2I:#V#V #r))#,Z8H-H#IL&*&C&C(7*L'--' ' ' *+4T5L+M+M * *4#'88F#3#3{7K7P#P#P(3(<(F %)$;A$>{$K %*E	 $Q
 %   N%) '      &%"&"9%6%E%E%E      $) #'  (ood.FGGO = BT%5%G%G  "6#..)>DDCbyy '',,,3t4555C6 |$$t'777 ,T-= >I"+c$2G.H.H"HK )+,, 7Ii''#,>>##6#62;IXI2F/ '2H&<q&@%.{||%<
%0066 8)3ABBJ )38P(Q(Q(B..*4^m^*DK*33D99 ?.9#2#.>  $/144$'&*&=%>&,%- '+j&=&=ad&C%D '*	%* !. %*&*&=%>&,%- '+j&=&=ad&C%D '*	%* !. !,,1,,#/$1.2.E1B6C2* 2* 2*%& %& %&,"	$ 	$ 	$ 	 } F+z99(ood.FGGG",XgX"6K  3 @{8J8J!,!1!1#!6!6&1&1*,,&?3 68N8Nt8T8T 6&1!""o "&!9K!GJ  3 
4#;<<QrTBB !
 $(:j#9#9!B$#?L$0\1B1B1D1D$EM$)DM/1D,')&*&=):.;c.A*" *" *"  $	 	 	 	 #-K  3 @{8J8J!,!1!1#!6!6&1&1*,,&?3 68N8Nt8T8T 6&1!""o"   $7$DJt'?@@2FF!# %
 00K?00'+z$2J'K'KAbD'Q(4S5F5F5H5H(I( 
#/$1.2.E1B6C2* 2* 2*%& %& %&,"	$ 	$ 	$ 	 ts   #A:W &XX)r7   
__module____qualname__r   r   r   r   rl   rE   r   listr   r   r   r   r   r
   r   r   rq   r   r   __classcell__)r6   s   @r;   r   r   #   s       (O'M2
- 2
 2
 2
 2
 2
 2
h/ / / / /! ! ! S
!$S
-12J-Kd-RS
	DS
 S
 S
 S
j S	    (EE 'E 
&	E E E ENKK K 	K
 %SMK $C=K "#K 'K 
	K K K K K K K Kr<   r   )r   r   rA   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   r7   r4   r   r   r<   r;   <module>r     s]   


   $ $ $ $ $ $                                 $ # # # # # ) ) ) ) ) )      
X		G G G G G
 G G G G Gr<   