o
    iu                     @   s   d dl 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
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ed	ejZed
ejZedejZG dd deZdS )    N)Sequence)make_tool_call_id)ChatCompletionRequest)DeltaFunctionCallDeltaMessageDeltaToolCallExtractedToolCallInformationFunctionCallToolCall)init_logger)TokenizerLike)
ToolParserz(function call(?:<\|role_sep\|>\n)?(\{.*)z"name"\s*:\s*"([^"]*)"z"arguments"\s*:\s*(.*)c                       sr   e Zd Zde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 )GigaChat3ToolParser	tokenizerc                    s4   t  | d| _d| _d | _g | _d| _d| _d S )NF zfunction call{)super__init__tool_startedtool_name_senttool_idprev_tool_call_arrcontent_buffertrigger_start)selfr   	__class__ ]/home/ubuntu/vllm_env/lib/python3.10/site-packages/vllm/tool_parsers/gigachat3_tool_parser.pyr   ,   s   
zGigaChat3ToolParser.__init__model_outputrequestreturnc                 C   s   t |}|stdg |dS |d }zt|}W n tjy-   tdg |d Y S w t|t	r;d|v r;d|v sBtdg |dS |d }|d }t|t
sVtj|dd}tdt||dd	g}|d |  }	|	rs|	 rs|	 nd }
td
||
dS )NF)tools_called
tool_callscontent   name	arguments)ensure_asciifunction)r%   r&   )typer(   T)REGEX_FUNCTION_CALLsearchr   groupstripjsonloadsJSONDecodeError
isinstancedictstrdumpsr
   r	   startrstrip)r   r   r   matchjson_candidatedatar%   argsr"   prefixr#   r   r   r   extract_tool_calls5   sT   


	z&GigaChat3ToolParser.extract_tool_callsprevious_textcurrent_text
delta_textprevious_token_idscurrent_token_idsdelta_token_idsNc                 C   s  d }d }	| j s>t|}
|
rd| _ d| _n)|  j|7  _| j }| j|}|| j}|s1|r3d S | j}d| _t|dS t|}
|
sGd S |
d	 }t
|}|rZ|d}t|}|r|d	 }	|	drz|	d d 	 }t| |}	W n
 tjy   Y nw | js| ji  | js|sd S d| _t | _|| jd d< ttd| jd	t|d
jdddgd dS |	d u rd S | jd dd}|s|	}n|	|r|	t|d  }nd S |sd S |	| jd d< ttdt|djdddgd dS )NTr   )r#   r$   }r   r%   r(   )r%   )exclude_none)indexidr)   r(   )r"   r#   r&   )r&   )rF   r(   )r   r*   r+   r   lstripr   
startswithr   r,   r-   
NAME_REGEX
ARGS_REGEXendswithr.   r/   r0   r   appendr   r   r   r   r   
model_dumpgetlen)r   r=   r>   r?   r@   rA   rB   r   	func_namecur_argsr7   clean_buffer	is_prefixstarts_with_trigger
flush_text	json_tail
name_match
args_match	candidate	prev_args
delta_argsr   r   r   extract_tool_calls_streamingg   s   











z0GigaChat3ToolParser.extract_tool_calls_streaming)__name__
__module____qualname__r   r   r3   r   r   r<   r   intr   r]   __classcell__r   r   r   r   r   +   s4    	
2	r   )r.   collections.abcr   regexrevllm.entrypoints.chat_utilsr   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   r^   loggercompileDOTALLr*   rJ   rK   r   r   r   r   r   <module>   s.    