
    .`iq`                         d dl Z d dlmZ d dlmZmZmZ d dlZd dl	m
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  ee          Z G d de          ZdS )    N)Sequence)AnyOptionalUnion)ChatCompletionRequest)make_tool_call_id)DeltaFunctionCallDeltaMessageDeltaToolCallExtractedToolCallInformationFunctionCallToolCall)
ToolParser)init_logger)TokenizerLike)random_uuidc                        e Zd Zdef fdZdedeee         e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edf         fdZ xZS )xLAMToolParser	tokenizerc                     t                                          |           g | _        d| _        d| _        g | _        g | _        g | _        g d| _        d| _	        dg g d| _
        d S )NF)z```(?:json)?\s*([\s\S]*?)```z \[TOOL_CALLS\]([\s\S]*?)(?=\n|$)z!<tool_call>([\s\S]*?)</tool_call>z</think>([\s\S]*)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json_code_block_patternsthinking_tag_patternstreaming_state)selfr   	__class__s     v/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/tool_parsers/xlam_tool_parser.pyr   zxLAMToolParser.__init__    s    ### ,.!&+#(* /1 #%)
 )
 )
%
 %9! #%0
 0
    model_outputreturnc                    t          j        | j        |          }|r|d|                                t	          d          z                                            }|                    d                                          }	 t          j        |           ||fS # t          j	        $ r\ | j
        D ]Q}t          j        ||          }|r8|D ]5}	 t          j        |           ||fc c cY S # t          j	        $ r Y 2w xY wRY nw xY w| j
        D ]w}t          j        ||          }|r^|D ][}	 t          j        |           t          j        |d|                                          }||fc c S # t          j	        $ r Y Xw xY wx|                                                    d          r@	 t          j        |           d|fS # t          j	        $ r d|v rd|v r
d|v rd|fcY S Y nw xY w|dfS )	z
        Preprocess the model output to extract content and potential tool calls.
        Returns:
            Tuple of (content, potential_tool_calls_json)
        Nz</think>    [{name	arguments)researchr%   startlenstripgroupjsonloadsJSONDecodeErrorr$   findallsub
startswith)r'   r+   thinking_matchcontentthinking_contentjson_patternjson_matchesjson_strs           r)   preprocess_model_outputz&xLAMToolParser.preprocess_model_output>   s    4#<lKK 	)"#M^%9%9%;%;c*oo%M#MNTTVVG-33A66<<>>)
+,,, 000' 
) 
) 
)$($A ) )L#%:l<L#M#ML# )(4 ) )H) $
8 4 4 4'.'8 8 8 8 8 8 8 8#'#7 ) ) ) ()) )
) !9 
	! 
	!L:lLAAL ! , ! !H!
8,,,"$&r<"H"H"N"N"P"P&000000/ ! ! ! ! **3// 	.
.
<(((\))' . . . <'',..#|33----. T!!sZ   B 3DC-&D-C?	<D>C?	?DD.?E22FF0G G,+G,requestc                    	 |                      |          \  }}|s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| dt                       d	t          |d         t	          |d         t                    rt          j        |d                   n|d         
                    }	|                    |	           t          t          |          dk    ||          S # t           $ rD}
t                              dt%          |
                     t          dg |          cY d}
~
S d}
~
ww xY w)zB
        Extract tool calls from a complete model output.
        F)tools_called
tool_callsrA   zTool calls data is not an arrayr2   r3   z$Invalid tool call format at index %dcall__function)r2   r3   )idtyperM   r   zError extracting tool calls: %sN)rF   r   r:   r;   
isinstancelistloggerdebug	enumeratedictr   r   r   dumpsappendr7   	Exception	exceptionstr)r'   r+   rG   rA   potential_tool_callstool_calls_datarJ   idxcall	tool_calles              r)   extract_tool_callsz!xLAMToolParser.extract_tool_callsz   s;   8	,0,H,H,V,V)G)' 3!&2w   
 #j)=>>O ot44 >???3!&!#3|    *,J&77 - -	T"4..T))"$..LL!GMMM$4s44[]]44#)!&\  *${*;TBB3DJtK'8999!%k!2    	 !!),,,,/ __q0%     	 	 	>AGGG/"r<        	s*   +F AF C;F 
G9G
G
Gprevious_textcurrent_text
delta_textprevious_token_idscurrent_token_idsdelta_token_idsNc           
         |                                 }|                     |          \  }	}
d|v pd|v pd|v pd|v }|                    d          p;|                    d          p&|                    d          pd|v p|
dup	|od|v od	|v }|st          |
          S 	 t	          | d          sdg g d| _        	 |
r|
n|}t          j        |          }t          |t                    r|| _
        n# t          j        $ r Y nw xY wt	          | d          r<t          | j                  dk    r#t          | j                  dk    r
| j        d         du rd}t          j        ||          }|r|                    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 |
r|
n|}|
s_|r]t          j        d|          }|rF|                    d                                           }|                    d          r
d|v rd	|v r|}d}t          t          j        ||                    }t          |          }|dk    r*d}t          t          j        ||                    }|rdS dS 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     >| j        d         }|dk    s
||dz
  k     r$|dz   }||k     r| j        d         |         d         s|| j        d<   || _        |}||                             d          }d!| d"t3                       }|| 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k    r||k     rd#}t          j        ||          }|rQ|                                dk    r8d} t9          |          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 'd)}"t          t          j        |"|                    }#|t          |#          k     r@|#|                             d          }$||dz
  k    }%|dk    r	 t          j        |          }t          |t                    r|t          |          k     rn||         }&t          |&                    d*          t<                    rt          j        |&d*                   }$n#tA          |&                    d*d%                    }$n"# t          j        tB          tD          f$ r Y nw xY w| 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 # tH          $ r7})tJ          &                    d-|)            t          |
          cY d})~)S d})~)ww xY w).z8
        Extract tool calls for streaming mode.
        z```jsonz```
[z[TOOL_CALLS]z<tool_call>r0   z	</think>[Nz"name"z"arguments")rA   r&   r   r   r"   r   r.   Fz"name"\s*:\s*"([^"]+)"rM   )r2   T)exclude_none)indexrO   rN   rM   )rJ   r   r   r/   )	sent_namesent_arguments_prefixsent_argumentsrk   z"```(?:json)?\s*([\s\S]*?)(?:```|$)z"name"\s*:\s*"([^"]*)r   rK   rL   z4"name"\s*:\s*"[^"]+"\s*,\s*"arguments"\s*:\s*\{\s*\}rl   z{}rm   )r3   )rj   rM   zL"name"\s*:\s*"[^"]+"\s*,\s*"arguments"\s*:\s*(\{(?:[^{}]|(?:\{[^{}]*\}))*\})r3   r1   }zError in streaming tool calls: )'r8   rF   r?   r
   hasattrr&   r:   r;   rP   rQ   r#   r<   r7   r"   r4   r5   r9   r   r   r	   
model_dumpr   rW   r    finditerr   r!   r6   rangegetrU   rV   rZ   KeyError
IndexErrorendswithrX   rR   rY   )*r'   rb   rc   rd   re   rf   rg   rG   stripped_textpreprocessed_contentpreprocessed_tool_callshas_potential_json_blockis_tool_call_blocktool_calls_textparsed_toolsname_pattern
name_matchfunction_nametool_iddeltasearch_text
json_matchpotential_jsonname_matches
tool_countpartial_name_patternpartial_matchescurrent_idxnext_idx	tool_nameempty_args_patternempty_args_matchempty_args_tool_idxiargs_patternargs_matches	args_textis_last_toolcurrent_tool	sent_args	args_diffr`   s*                                             r)   extract_tool_calls_streamingz+xLAMToolParser.extract_tool_calls_streaming   s    %**,,8<8T8T9
 9
55 % -<'--- ,	 	! $$S)) ''66''77
 L( $4/ ) 2,2!\1 	& " 	4
3333A	44!233 *, ""$( ($ 0GX++L    $z/::lD11 ;.:D+'    233,%/00144 /00A55/2e;; $=L!#<!F!FJ!  %(2(8(8(;(; #4"5"5 , -*+)3'.->-:.& .& .&&0jdj&C&C!" !" !"	(! ! ! 48&//0,EF,-ABt3LABBaGG 0>EE15=B68!" !"    RVD0>qA+N6:3$
 ,CT'' 
 + 5/G 5Y9< 
  5%/%5%5a%8%8%>%>%@%@N%0055 5 N22}7V7V&4 5LL+ F FGGL\**J Q'?$"&r{3G'U'U"V"V"  4  4 d*<899JFF$\299%*16*,    d*<899JFF d*:677*DD$Z077=== d*:677*DD ./CDK b  K*q.$@$@&? z)) 0>xHU * BJD()=>+3D("*K !-[ 9 ? ? B BI DkCCKMMCCGDKD(4[A()&1%/#*):	)J)J)J)U)U15 *V *" *"	  	$  E TXD(6{CKP26D/ d011[@@*11"555 d011[@@ !L aK*$<$< L # $&9-?#M#M  $ (-(8(>(>(@(@1(D(D*+'":.. %- %-++#'#7#Ek#R 7$ "- %) !% 4\ B; O$;!"
 %) !% 4\ B; O$4!"
 '*$*<&=&=&L&L$($6$=$=b$A$A$A '*$*<&=&=&L&L $ 2; ? ? ?4 G ? ? ?(4(52=5F:>6. 6. 6..8jdj.K.K	)* )* )*0&	)" 	)" 	)" $/a#?#?$($89M$N$N$NRS$S$N$N$N;?;O(<<&D$8 (-  o#BKk$J$JKK\!2!222 ,[ 9 ? ? B BI $/*q.#@L "A~~!+/:k+B+BL),== Y+PS ,Q Q C C 0<K/H#-l.>.>{.K.KT#R#R !Y04
<;T0U0UII03L4D4D[RV4W4W0X0XI $ 4h
K ! ! ! D!
 !% 4\ B; O(!I
  /=kJ/ %#..s33%
 ! ,\:;G3
   ,\:;G,
 "$"455DD .55b999 "$"455DD*;7773>777 , -*5->25.& .& .&&0jdj&C&C	!" !" !"(	! 	! 	!  % !++I66 )$-c)nn.>.>$?	$ ) !* !0>{K 0
 #&d&8"9"9["H"H $ 2 9 9" = = = #&d&8"9"9["H"H .{;;;yH;;;$0$1.91B6?2* 2* 2**4*$**G*G	%& %& %&,"	% 	% 	%E $)L !))#.. 9	3I3I&a77 01EFFF!KFFF373G 44D0
 4 	4 	4 	4BqBBCCC
333333333	4s   !h =6C4 3h 4Dh DEh Ch  G<h E6h A$h 9B*^$ #h $_ h _Dh C&h Ah 
i,iii)__name__
__module____qualname__r   r   rZ   tupler   rF   r   r   ra   r   intr   r
   r   __classcell__)r(   s   @r)   r   r      s0       
- 
 
 
 
 
 
<:":"	x}hsm+	,:" :" :" :"x>>*?>	%> > > >@s4s4 s4 	s4
 %SMs4 $C=s4 "#s4 's4 
|T!	"s4 s4 s4 s4 s4 s4 s4 s4r*   r   )r:   collections.abcr   typingr   r   r   regexr4   0vllm.entrypoints.openai.chat_completion.protocolr   vllm.entrypoints.chat_utilsr   'vllm.entrypoints.openai.engine.protocolr	   r
   r   r   r   r   &vllm.tool_parsers.abstract_tool_parserr   vllm.loggerr   vllm.tokenizersr   
vllm.utilsr   r   rR   r    r*   r)   <module>r      sq    $ $ $ $ $ $ ' ' ' ' ' ' ' ' ' '          : 9 9 9 9 9                     $ # # # # # ) ) ) ) ) ) " " " " " "	X		N4 N4 N4 N4 N4Z N4 N4 N4 N4 N4r*   