o
    -i                     @   s   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 deZdS )    N)Sequence)Any)PreTrainedTokenizerBase)make_tool_call_id)ChatCompletionRequest)DeltaMessageExtractedToolCallInformationFunctionCallToolCall)init_logger)
ToolParserc                       sz   e Zd ZdZdeddf fddZdededefd	d
Z	dededede
e de
e de
e dededB fddZ  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                    s.   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__ c/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/vllm/tool_parsers/phi4mini_tool_parser.pyr   &   s   
zPhi4MiniJsonToolParser.__init__model_outputrequestc           
   
   C   s   t d| d}t||tj}|st d tdg |dS zGg }zd|d d }t|}t d	t	| W n tj
yT } zt d
t| W Y d}~nd}~ww dd |D }td|dd}	|	W S  tyu   tdg |d Y S 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                 S   sF   g | ]}t t d t|d tjd|v r|d n|d ddddqS )functionname	arguments
parametersF)ensure_ascii)r'   r(   )idtyper&   )r
   r   r	   jsondumps).0raw_function_callr   r   r   
<listcomp>S   s     z=Phi4MiniJsonToolParser.extract_tool_calls.<locals>.<listcomp>T)loggerdebugresearchDOTALLr   groupr-   loadslenJSONDecodeErrorerrorstr	Exception)
r   r   r   patternmatchesfunction_call_arrjson_contenter!   retr   r   r   extract_tool_calls3   sF   


z)Phi4MiniJsonToolParser.extract_tool_callsprevious_textcurrent_text
delta_textprevious_token_idscurrent_token_idsdelta_token_idsc                 C   s   d S )Nr   )r   rE   rF   rG   rH   rI   rJ   r   r   r   r   extract_tool_calls_streamingp   s   
z3Phi4MiniJsonToolParser.extract_tool_calls_streaming)__name__
__module____qualname____doc__r   r   r<   r   r   rD   r   intr   rK   __classcell__r   r   r   r   r      s6    
=	r   )r-   collections.abcr   typingr   regexr4   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   rL   r2   r   r   r   r   r   <module>   s   