
    .`i                         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
 d dlmZ d dlmZmZmZ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)PreTrainedTokenizerBase)make_tool_call_id)ChatCompletionRequest)DeltaMessageExtractedToolCallInformationFunctionCallToolCall)init_logger)
ToolParserc                        e Zd ZdZdedd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 )Phi4MiniJsonToolParserz
    Tool call parser for phi-4-mini models intended for use with the
    examples/tool_chat_template_llama.jinja template.

    Used when --enable-auto-tool-choice --tool-call-parser phi4_mini_json
    are all set
    	tokenizerreturnNc                     t                                          |           g | _        d| _        d| _        g | _        d| _        d S )NF	functools)super__init__prev_tool_call_arrcurrent_tool_idcurrent_tool_name_sentstreamed_args_for_tool	bot_token)selfr   	__class__s     z/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/tool_parsers/phi4mini_tool_parser.pyr   zPhi4MiniJsonToolParser.__init__&   sO    ### 9;$&,1#  	# *    model_outputrequestc                    t                               d|           d}t          j        ||t          j                  }|s,t                               d           t          dg |          S 	 g }	 d|                    d          z   dz   }t          j        |          }t                               d	t          |                     nD# t          j
        $ r2}t                               d
t          |                     Y d}~nd}~ww xY wd |D             }t          d|d          }	|	S # t          $ r t          dg |          cY S w xY w)zH
        Extract the tool calls from a complete model response.
        zModel output: %szfunctools\[(.*?)\]zNo function calls foundF)tools_called
tool_callscontent[   ]z(Successfully extracted %d function callsz;Failed to parse function calls from model output. Error: %sNc                     g | ][}t          t                      d t          |d         t          j        d|v r|d         n|d         d                              \S )functionname	arguments
parametersF)ensure_ascii)r+   r,   )idtyper*   )r   r   r
   jsondumps).0raw_function_calls     r   
<listcomp>z=Phi4MiniJsonToolParser.extract_tool_calls.<locals>.<listcomp>S   s     * * * & (**#).v6"&**.??? .k::!2<!@).	# # #	 	 	  * * *r   T)loggerdebugresearchDOTALLr	   groupr1   loadslenJSONDecodeErrorerrorstr	Exception)
r   r    r!   patternmatchesfunction_call_arrjson_contenter$   rets
             r   extract_tool_callsz)Phi4MiniJsonToolParser.extract_tool_calls3   s    	'666')G\29== 	LL2333/"r<   *	68"W]]1%5%55;$(J|$<$<!>DU@V@V    '   QFF       * * *;* * *J& /!j$  C J 	 	 	/"r<     	s=   -D, 0AC D, D	(D?D, D		"D, ,E
Eprevious_textcurrent_text
delta_textprevious_token_idscurrent_token_idsdelta_token_idsc                     d S )N )r   rI   rJ   rK   rL   rM   rN   r!   s           r   extract_tool_calls_streamingz3Phi4MiniJsonToolParser.extract_tool_calls_streamingp   s	     tr   )__name__
__module____qualname____doc__r   r   r@   r   r	   rH   r   intr   rQ   __classcell__)r   s   @r   r   r      s         *"9 *d * * * * * *;;*?;	%; ; ; ;z

 
 	

 %SM
 $C=
 "#
 '
 
	
 
 
 
 
 
 
 
r   r   )r1   collections.abcr   typingr   regexr8   transformersr   vllm.entrypoints.chat_utilsr   0vllm.entrypoints.openai.chat_completion.protocolr   'vllm.entrypoints.openai.engine.protocolr   r	   r
   r   vllm.loggerr   &vllm.tool_parsers.abstract_tool_parserr   rR   r6   r   rP   r   r   <module>ra      s?    $ $ $ $ $ $           0 0 0 0 0 0 9 9 9 9 9 9                 $ # # # # #      
X		] ] ] ] ]Z ] ] ] ] ]r   