o
    i                     @   s   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 d dlmZ er=d d	lmZ neZeeZG d
d deZdS )    N)Sequence)TYPE_CHECKING)ChatCompletionRequest)DeltaMessageExtractedToolCallInformationFunctionCallToolCall)parse_output_into_messages)init_logger)
ToolParser)TokenizerLikec                       s~   e Zd Zd fddZ	ddededee dB 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 )OpenAIToolParser	tokenizerr   c                    s   t  | d S N)super__init__)selfr   	__class__ Z/home/ubuntu/vllm_env/lib/python3.10/site-packages/vllm/tool_parsers/openai_tool_parser.pyr      s   zOpenAIToolParser.__init__Nmodel_outputrequest	token_idsreturnc              	   C   sL  |d u rt dt|}g }d }d }t|jdkr|jD ]e}t|jdk r&q|jd j}	|jro|jdro|jr=d|jv rYz
t	
t	|	}
W n t	jyX   td |	}
Y nw |	}
|tdt|jdd |
dd	 q|jd
krw|	}q|jdkr|js|	}q|jr|jd
kr|j}n|jdkr|js|j}tt|dk||p|dS )NzOOpenAIToolParser requires token IDs and does not support text-based extraction.r      z
functions.jsonz,Error decoding JSON tool call from response.function)name	arguments)typer   final
commentary)tools_called
tool_callscontent)NotImplementedErrorr	   lenmessagesr%   text	recipient
startswithcontent_typer   dumpsloadsJSONDecodeErrorlogger	exceptionappendr   r   splitchannelcurrent_contentcurrent_channelcurrent_recipientr   )r   r   r   r   parserr$   final_contentcommentary_contentmsgmsg_text	tool_argsr   r   r   extract_tool_calls"   s`   

	

z#OpenAIToolParser.extract_tool_callsprevious_textcurrent_text
delta_textprevious_token_idscurrent_token_idsdelta_token_idsc                 C   s   t d)Nz1Not being used, manual parsing in serving_chat.py)r&   )r   r?   r@   rA   rB   rC   rD   r   r   r   r   extract_tool_calls_streaminge   s   
z-OpenAIToolParser.extract_tool_calls_streaming)r   r   r   )__name__
__module____qualname__r   strr   r   intr   r>   r   rE   __classcell__r   r   r   r   r      s:    

C	r   )r   collections.abcr   typingr   0vllm.entrypoints.openai.chat_completion.protocolr   'vllm.entrypoints.openai.engine.protocolr   r   r   r   ,vllm.entrypoints.openai.parser.harmony_utilsr	   vllm.loggerr
   &vllm.tool_parsers.abstract_tool_parserr   vllm.tokenizersr   objectrF   r0   r   r   r   r   r   <module>   s   