
    .`i5                         d dl Z d dlmZ d dl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 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)MistralTokenizer)
ToolParser)extract_intermediate_diffc                        e Zd Zdef fdZde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 )JambaToolParser	tokenizerc                 L   t                                          |           t          | j        t                    rt          d          d| _        g | _        d| _        g | _	        d| _
        d| _        t          j        | j
         d| j         t          j                  | _        | j        st          d          | j                            | j
                  | _        | j                            | j                  | _        | j        | j        t)          d          d S )	Nz>Detected a MistralTokenizer tokenizer when using a Jamba modelFz<tool_calls>z</tool_calls>z(.*?)zUThe model tokenizer must be passed to the ToolParser constructor during construction.zPJamba Tool parser could not locate tool calls start/end tokens in the tokenizer!)super__init__
isinstancemodel_tokenizerr   
ValueErrorcurrent_tool_name_sentprev_tool_call_arrcurrent_tool_idstreamed_args_for_tooltool_calls_start_tokentool_calls_end_tokenrecompileDOTALLtool_calls_regexvocabgettool_calls_start_token_idtool_calls_end_token_idRuntimeError)selfr   	__class__s     w/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/tool_parsers/jamba_tool_parser.pyr   zJambaToolParser.__init__!   s7   ###d*,<== 	P   -2#.0$&  	# ,:#)8! "
+MM$2KMMry!
 !
 # 	3   *.8S)T)T&'+z~~d6O'P'P$*2+3+   43    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-   r3   zJambaToolParser.adjust_requestG   s@    ''((11= 	0W0F:: +0G'r.   model_outputc                    | j         |vrt          dg |          S 	 | j                            |          d         }t	          j        |          }d |D             }|d |                    | j                            }t          d|t          |          dk    r|dk    r|nd           S # t          $ r/ t          
                    d           t          dg |          cY S w xY w)NF)tools_called
tool_callscontentr   c                     g | ]B}t          d t          |d         t          j        |d         d                              CS )functionname	argumentsFensure_ascii)r>   r?   )typer=   )r   r   jsondumps).0function_calls     r-   
<listcomp>z6JambaToolParser.extract_tool_calls.<locals>.<listcomp>a   st        & '!-!.v!6&*j -k :' ' '" " "	 	 	  r.   T z,Error in extracting tool call from response.)r    r
   r%   findallrC   loadsfindlen	Exceptionlogger	exception)r+   r7   r/   function_callsraw_function_callsr:   r;   s          r-   extract_tool_callsz"JambaToolParser.extract_tool_callsP   s<    &l::/"r<   
 !%!6!>!>|!L!LQ!O &*Z%?%?"  *<  
 ''W):):4;V)W)W'WX3!%)(+Gq(8(8W^^GGRV         !OPPP3!&2|     s   BB, ,6C%$C%previous_textcurrent_text
delta_textprevious_token_idscurrent_token_idsdelta_token_idsNc           
      
   | j         |vrt          |          S | j        |v rt          |          dk    rd S | j        rt
          j        nt
          j        t
          j         z  }	 |                    | j                   d                             | j	                  d         }		 t          j        |	|          }
n:# t          j        j        j        $ r t                              d           Y d S w xY wt          |
          dk    r|
| j                 ni }t          |
          dk    rd S t          |
          dk    r9t          |
          | j        dz   k    r| j        dk    r|                    d          }|rt'          j        |d                              | j        | j                 d	          }t          t/          | j        t1          |
                              d                    g          }| j        | j        xx         |z  cc<   nd }nd }t          |
          dz
  | _        d| _        | j                            d	           t                              d| j                   |S | j        sy|                    d          }|r^t          t/          | j        dt7                      t1          |                              d                    g          }d| _        n9d }n5| j        | j                                     d          }|                    d          }|                    dd          }|s|sd }n|s |rt                              d           d }n|r|st'          j        |d          }t                              d||           |d |                    |          t          |          z            }t                              d|           t          t/          | j        t1          |
                              d                    g          }| j        | j        xx         |z  cc<   n|r|rt'          j        |d          }t'          j        |d          }t                              d||           t?          ||          }t                              d|           t          t/          | j        t1          |
                              d                    g          }| j        | j        xx         |z  cc<   nd }|
| _        |S # t@          $ r8 t          !                    d           t                              d           Y d S w xY w)N)r;      r   r   z(not enough tokens to parse into JSON yetr?   Fr@    )r?   T)exclude_none)indexr=   )r:   zstarting on new tool %dr>   r=   )r>   )r]   rB   idr=   '"z<INVARIANT - impossible to have arguments reset mid-argumentszfinding %s in %sz&First tokens in arguments received: %sz!Searching for diff between 
%s
%szgot arguments diff: %sz+Error trying to handle streaming tool call.z=Skipping chunk as a result of tool streaming extraction error)"r    r   r(   rL   r   r   ALLSTRsplitr!   partial_json_parserrJ   core
exceptionsMalformedJSONrN   debugr   r'   rC   rD   replacer   r	   r   
model_dumpappendr   r   errorr]   r   rM   rO   )r+   rS   rT   rU   rV   rW   rX   r/   flagsparsable_arrtool_call_arrcurrent_tool_calldiffdeltafunction_nameprev_argumentscur_argumentsnew_textcur_arguments_jsonarguments_deltacur_args_jsonprev_args_jsonargument_diffs                          r-   extract_tool_calls_streamingz,JambaToolParser.extract_tool_calls_streaming|   sW    &l::
3333 *o==O$$)) 4 "8T		ei59*>Th	'--d.IJJ2NTT) L,?,E %- - '+6D   GHHHtt 8;=7I7IA7M7Md233SU  =!!Q&&t
 M""Q&&3}+=+=@TWX@X+X+X '1,,'8'<'<['I'ID %#z$UCCCKK 78LMr    !- -*.*>->26.& .& .&&0jdj&C&C	!" !" !"(	! 	! 	! 3D4HIIITQIIII $ E'*='9'9A'=$.3++22266668LMMM . V! 1 5 5f = =  !()&*&:%/#4#6#6):)6*" *" *"",*$*"?"?  	$  E 37D// EE
 "&!89M!N!R!R" " !2 5 5k B B%--c377$ 9!^ 9! EE& 7!> 7!LLV   !EE" 2!> 2!)-MPU)V)V)V&LL!3X?QRRR&8L,228<<s8}}LL'O LL@/   ))&*&:):.=*" *" *"",*$*"?"?	  $	 	 	E /0DEEEXEEEE" !~ !$(J}5$Q$Q$QM%)ZU%S%S%SNLL=%&   %>%~% %M LL!9=III()&*&:):.;*" *" *"",*$*"?"?	  $	 	 	E /0DEEEVEEEE
 !E
 '4D#L 	 	 	JKKKLLO   44	sD   &>T7 %B; :T7 ;3C2.T7 1C228T7 ,ET7 9J=T7 7>U98U9)__name__
__module____qualname__r   r   r   r3   strr
   rR   r   intr   r|   __classcell__)r,   s   @r-   r   r       s#       $- $ $ $ $ $ $L&; @U      ***?*	%* * * *XII I 	I
 %SMI $C=I "#I 'I 
	I I I I I I I Ir.   r   ) rC   collections.abcr   rd   regexr"    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.tokenizers.mistralr   vllm.tool_parsersr   vllm.tool_parsers.utilsr   r}   rN   r    r.   r-   <module>r      su    $ $ $ $ $ $         2 2 2 2 2 2 9 9 9 9 9 9                     $ # # # # # ) ) ) ) ) ) 4 4 4 4 4 4 ( ( ( ( ( ( = = = = = =	X		e e e e ej e e e e er.   