o
    
۾i                     @   s   d 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
 G dd deZded	ee d
edB dedee	dB ef f
ddZdS )z
Harmony-specific streaming delta extraction for chat completions.

This module handles the extraction of DeltaMessage objects from
harmony parser state during streaming chat completions.
    )
NamedTuple)StreamableParser)make_tool_call_id)DeltaFunctionCallDeltaMessageDeltaToolCallc                   @   s.   e Zd ZU edB ed< edB ed< eed< dS )
TokenStateNchannel	recipienttext)__name__
__module____qualname__str__annotations__ r   r   j/home/ubuntu/.local/lib/python3.10/site-packages/vllm/entrypoints/openai/chat_completion/stream_harmony.pyr      s   
 r   harmony_parsertoken_statesprev_recipientNinclude_reasoningreturnc              
   C   s  |sdS d}g }|d j }|d j}|d j}tdt|D ](}	||	 }
|
j |kr4|
j|kr4||
j7 }q|t||| |
j }|
j}|
j}q|t||| d}d}d}g }d}d}| jD ]}|j dksk|j dkrx|jrx|jd	rx|d7 }q_|r|d	r|d }|}n|}d}|D ]}|j d
kr||j7 }d}q|j dks|j dkr|jr|jd	rd}||jkr|j	d	dd }|t
t dt|dd|d d}|j}|d7 }|jr|r|d }n|dur|n|}|t
|t|jdd q|j dkr||j7 }d}q|j dkr|r||j7 }q|s|s|rBi }|r'||d< |r.||d< |r7||d< d}tdi |}||fS d}||fS )a  
    Extract a DeltaMessage from harmony parser state during streaming.

    Args:
        harmony_parser: The StreamableParser instance tracking parse state
        token_states: List of TokenState tuples for each token
        prev_recipient: Previous recipient for detecting tool call transitions
        include_reasoning: Whether to include reasoning content

    Returns:
        A tuple of (DeltaMessage or None, tools_streamed_flag)
    )NFFr      N 
commentaryanalysisz
functions.finalTfunction)name	arguments)idtyper   index)r   )r"   r   content	reasoning
tool_callsr   )r	   r
   r   rangelenappendr   messages
startswithsplitr   r   r   r   )r   r   r   r   tools_streamedgroupscurrent_channelcurrent_recipientcurrent_textistatedelta_messagecombined_contentcombined_reasoningtool_messagescontent_encountered
base_indexmsgnext_tool_indexongoing_tool_indexgroupopened_new_call	tool_nametool_call_indexdelta_kwargsr   r   r   extract_harmony_streaming_delta   s   












rA   )__doc__typingr   openai_harmonyr   vllm.entrypoints.chat_utilsr   'vllm.entrypoints.openai.engine.protocolr   r   r   r   listr   booltuplerA   r   r   r   r   <module>   s"   