
    .`i#                         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	 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 d d
lmZ  ee          Z G d de          ZdS )    N)Sequence)Allow)make_tool_call_id)ChatCompletionRequest)DeltaFunctionCallDeltaMessageDeltaToolCallExtractedToolCallInformationFunctionCallToolCall)init_logger)TokenizerLike)
ToolParser)extract_intermediate_diffc                        e Zd Zdef fdZdedef fdZ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dededefdZ xZS )Internlm2ToolParser	tokenizerc                 X    t                                          |           d| _        d S )Nr   )super__init__position)selfr   	__class__s     {/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/tool_parsers/internlm2_tool_parser.pyr   zInternlm2ToolParser.__init__!   s&    ###    requestreturnc                 |    t                                          |          }|j        r|j        dk    rd|_        |S )NnoneF)r   adjust_requesttoolstool_choiceskip_special_tokens)r   r   r   s     r   r    z"Internlm2ToolParser.adjust_request%   s@    ''((11= 	0W0F:: +0G'r   c                 j    d|v r|                     d          S d|v r|                     d          S d S )N
parameters	arguments)get)r   objs     r   get_argumentsz!Internlm2ToolParser.get_arguments.   sA    377<(((C77;'''tr   previous_textcurrent_text
delta_textprevious_token_idscurrent_token_idsdelta_token_idsNc           
      t   d|vr$t          |          | _        t          |          S | j        dk    rt          d          S | j        }d||d          vrd S ||d          }	|	                    d          \  }
}t          |
          dk    r,| j        t          |
          z   | _        t          |
          S |                                }|                    d                                          d         }| j        rt          j        nt          j        t          j	         z  }	 |}	 t          j        ||          }n:# t          j        j        j        $ r t                              d           Y d S w xY w| j        s|                    d          }|r| j        d	z   | _        t          t%          | j        d
t'                      t)          |                              d                    g          }d| _        | j                            d           nd }n|                     | j        | j                           }|                     |          }|s|sd }nl|s |rt                              d           d }nJ|r|st7          j        |d          }|d |                    |          t          |          z            }t          t%          | j        t)          |                              d                    g          }| j        | j        xx         |z  cc<   n|r|rt7          j        |d          }t7          j        |d          }t=          ||          }t          t%          | j        t)          |                              d                    g          }| j        | j        xx         |z  cc<   |                     |          |d<   |g| _        |S # t>          $ r8 t                               d           t                              d           Y d S w xY w)Nz<|action_start|>)contentr    <|action_start|><|plugin|><|action_end|>z(not enough tokens to parse into JSON yetname   function)r5   T)exclude_none)indextypeidr7   )
tool_callsz<INVARIANT - impossible to have arguments reset mid-argumentsFensure_ascii)r&   )r9   r7   r&   z+Error trying to handle streaming tool call.z=Skipping chunk as a result of tool streaming extraction error)!lenr   r   current_tool_idsplitstripcurrent_tool_name_sentr   ALLSTRpartial_json_parserloadscore
exceptionsMalformedJSONloggerdebugr'   r	   r   r   
model_dumpstreamed_args_for_toolappendr)   prev_tool_call_arrerrorjsondumpsr9   r   	Exception	exception)r   r*   r+   r,   r-   r.   r/   r   last_pos	new_deltatextactionflagsparsable_arrtool_call_arrfunction_namedeltaprev_argumentscur_argumentscur_arguments_jsonarguments_deltacur_args_jsonprev_args_jsonargument_diffs                           r   extract_tool_calls_streamingz0Internlm2ToolParser.extract_tool_calls_streaming5   s    \11--DM
3333 !##++++='|HII/FFF4 +	 'CDDft99q== MCII5DM----.446677: "8T		ei59*>Td	!L&9&?e&T&T&+6D   GHHHtt . JW - 1 1& 9 9  !+/+?!+CD(()&*&:%/#4#6#6):)6*" *" *"",*$*"?"?  	$  E 37D//66r:::: EE "&!3!3+D,@A" " !% 2 2= A A % -W^ -W EE& *W> *WLLV   !EE" $W> $W)-MPU)V)V)V&&8P,22:>>ZPP'O ))&*&:):.=*" *" *"",*$*"?"?	  $	 	 	E /0DEEEXEEEE" W~ W$(J}5$Q$Q$QM%)ZU%S%S%SN$=%~% %M ))&*&:):.;*" *" *"",*$*"?"?	  $	 	 	E /0DEEEVEEE
 *.););M)J)JM+&'4oD#L 	 	 	JKKKLLO   44	s7   )O5 ,E O5 3E95O5 8E99I;O5 5>P76P7model_outputc           
         |}|j         }d|v r%|                    d          \  }}|                    d                                          d         }||                    d          d          }t	          j        |          }|d         t	          j        |                    d|                    di                     d	          }}|r|d
 |D             vrt          dg |           t          t          ||                    g}	t          d|	t          |          dk    r|nd           S t          dg |          S )Nr3   r4   r   {r5   r%   r&   Fr=   c                 &    g | ]}|j         j        S  )r7   r5   ).0ts     r   
<listcomp>z:Internlm2ToolParser.extract_tool_calls.<locals>.<listcomp>   s    (H(H(HQ(H(H(Hr   )tools_calledr<   r1   )r5   r&   )r7   T)r!   rA   rB   findrR   rG   rS   r'   r
   r   r   r?   )
r   rg   r   rX   r!   rY   action_dictr5   r%   r<   s
             r   extract_tool_callsz&Internlm2ToolParser.extract_tool_calls   s}   
 '4//::&BCCLD&\\"2"8"8":":;;A>FFKK,,../F*V,,KF#
OOL+//+r2R2RSS!&   D  D(H(H%(H(H(HHH,!&2t   
 ,DJ"O"O"OPPPJ 0!% #D		A4    ,2t
 
 
 	
r   )__name__
__module____qualname__r   r   r   r    r)   strr   intr   rf   r
   rr   __classcell__)r   s   @r   r   r       s1       -      &; @U        JJ J 	J
 %SMJ $C=J "#J 'J 
	J J J JX$
$
 '$
 
&	$
 $
 $
 $
 $
 $
 $
 $
r   r   )rR   collections.abcr   rF    partial_json_parser.core.optionsr   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   vllm.tool_parsers.utilsr   rs   rK   r   rk   r   r   <module>r      se    $ $ $ $ $ $     2 2 2 2 2 2 9 9 9 9 9 9                     $ # # # # # ) ) ) ) ) )      > = = = = =	X		E
 E
 E
 E
 E
* E
 E
 E
 E
 E
r   