
    .`i                          d dl Z d dlmZ d dl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 G d d	e          ZdS )
    N)Sequence)ChatCompletionRequest)DeltaFunctionCallDeltaMessageDeltaToolCallExtractedToolCallInformationFunctionCallToolCall)init_logger)TokenizerLike)
ToolParserc                        e Zd Zdef fdZdededef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 xZS )Ernie45ToolParser	tokenizerc                 R   t                                          |           d| _        g | _        d| _        g | _        d| _        d| _        d| _        d| _	        d| _
        | j	        | _        d| _        t          j        d	t          j                  | _        | j        st%          d
          | j                            | j                  | _        | j                            | j                  | _        | j                            | j                  | _        | j                            | j	                  | _        | j                            | j
                  | _        | j                            | j                  | _        | j        | j        | j        g| _        d| _        dS )zc
        Ernie thinking model format:
        abc
</think>


<tool_call>
def
</tool_call>

        Fz</think>z
<response>z</response>z<tool_call>z</tool_call>z<0x0A>z.<tool_call>\s*(?P<json>\{.*?\})\s*</tool_call>zUThe model tokenizer must be passed to the ToolParser constructor during construction. N)super__init__current_tool_name_sentprev_tool_call_arrcurrent_tool_idstreamed_args_for_toolthink_end_tokenresponse_start_tokenresponse_end_tokentool_call_start_tokentool_call_end_tokentool_calls_start_tokennewline_tokenrecompileDOTALLtool_call_regexmodel_tokenizer
ValueErrorvocabgetthink_end_token_idresponse_start_token_idresponse_end_token_idtool_call_start_token_idtool_call_end_token_idnewline_token_idparser_token_ids_buffer)selfr   	__class__s     y/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/tool_parsers/ernie45_tool_parser.pyr   zErnie45ToolParser.__init__   sx   
 	###&+#.0!13#))5!'4%2"#1 &*&@#"*!z=ry 
  
 # 	3  
 #'*..1E"F"F'+z~~d6O'P'P$%)Z^^D4K%L%L"(,
t7Q(R(R%&*jnnT5M&N&N# $
t/A B B#(&!
     model_outputrequestreturnc                    | j         |vrt          dg |          S 	 | j                            |          }g }|D ]}t	          j        |          }t	          j        |                    di           d          }|                    t          dt          |                    dd          |          	                     |d |                    | j                                                d
          }t          d||r|nd           S # t          $ r/ t                              d           t          dg |          cY S w xY w)NF)tools_called
tool_callscontent	arguments)ensure_asciifunctionnamer   r?   r<   )typer>   
Tz,Error in extracting tool call from response.)r   r   r$   findalljsonloadsdumpsr(   appendr
   r	   findrstrip	Exceptionlogger	exception)	r1   r5   r6   tool_call_json_listr:   tool_call_jsontool_call_dictargs_strr;   s	            r3   extract_tool_callsz$Ernie45ToolParser.extract_tool_callsH   s    &l::/"r<   
 &*&:&B&B<&P&P#
&9  N%)Z%?%?N#z&**;;;%     H %% !+%1%3%7%7%C%C*2& & &      'Dl''(CDDD&,,  4!%)'.8GGD         !OPPP3!&2|     s   C0D 6EEprevious_textcurrent_text
delta_textprevious_token_idscurrent_token_idsdelta_token_idsNc                      xj         |z  c_          j         }|                     j                  }	|	dk    rod _          j        dk    rd} j        dk    r0t	           fd|D                       r|                    d          }|}
 j        |v ry|
                    d          }
|
                     j                  }|
|t           j                  z   d          }
|

                     j                  }|dk    r
|
d |         }
n- j        |v r$|

                     j                  }|
d |         }
t          |          dk    rH|d          j        v r9t          |          dk    r&|d          j        k    r|
                    d          }
t          |
r|
nd           S t                               d|           |                     j                  }|dk    r j        dk    rd _        g  _        g  _        t           j                   j        k    r7 j                            i            t           j                   j        k    7t           j                   j        k    r7 j                            d           t           j                   j        k    7                     |d |t           j                  z            |          }t          |j                  dk    rt                               d           d S |j        d         }|j        j        t7          j        |j        j                  d	 j         j        <   |j        j         j         j        <   t          |j        t?           j        |j         |j!        tE          |j        j        |j        j        	          
          g          } xj        dz  c_        ||t           j                  z   d           _         |S ||	d           _         |d |	         #                    d          }
t          |
r|
nd           S )Nr   r   r   c              3   .   K   | ]}|j         k    V  d S )N)r.   ).0token_idr1   s     r3   	<genexpr>zAErnie45ToolParser.extract_tool_calls_streaming.<locals>.<genexpr>   s<       2 26>D112 2 2 2 2 2r4   rB   )r;   zcur_text = %sz!Failed to extract any tool calls.r@   )indexidrA   r>   )r;   r:      )$r0   rH   r   r   allstripr*   lstripr   lenrfindr   r+   r/   r.   r   rK   debugr   r   r   rG   rQ   r:   warningr>   r?   rD   rE   r<   r;   r   r^   rA   r   rI   )r1   rR   rS   rT   rU   rV   rW   r6   cur_text	start_idxr;   response_start_idxresponse_end_idxend_idxextracted_tool_calls	tool_calldeltas   `                r3   extract_tool_calls_streamingz.Ernie45ToolParser.extract_tool_calls_streamingv   s    	
"<MM$"<==	??DL#a''#r))c 2 2 2 2BT2 2 2 / /) $>>$// G+>>!....%,\\$2K%L%L"!"4s4;T7U7U"U"W"WX#*==1H#I#I #r))%&7'7&78G+>>#*==1H#I#I !"3#3"34 &''!++&r*d.CCCO$$q((_Q-?4CX-X-X!....7(DEEEE_h///-- 899b==#r))'($*,'.0+d-..$2FFF'..r222 d-..$2FFFd122d6JJJ+222666 d122d6JJJ $(#:#:B7S)A%B%BBBCW$ $  '233q88BCCCt,7:I!*/!Z	(:(DEE= =D#D$89
 ", '(<= !,4!"2$<&^!2!*!3!8&/&8&B" " "	  
  E   A%  #Gc$2J.K.K$K$M$MNDLL	

+:I:&--d33w$@GGDAAAAr4   )__name__
__module____qualname__r   r   strr   r   rQ   r   intr   ro   __classcell__)r2   s   @r3   r   r      s	       (- ( ( ( ( ( (T,, ', 
&	, , , ,\^B^B ^B 	^B
 %SM^B $C=^B "#^B '^B 
	^B ^B ^B ^B ^B ^B ^B ^Br4   r   )rD   collections.abcr   regexr!   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   rp   rK   r    r4   r3   <module>r~      s9    $ $ $ $ $ $                         $ # # # # # ) ) ) ) ) )      
X		wB wB wB wB wB
 wB wB wB wB wBr4   