
    .`ibW                     ,   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	 d dl
Z
d dlZ
d dlZ
d dlZ
d dl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mZmZmZmZ d dlmZmZ d d	l m!Z! d d
l"m#Z# d dl$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/          Z0 e1e2e3e4f         e3dz  f                     Z5	 de&de4de3dz  fdZ6de&de3dz  de7e1e3ef                  dz  ddde3dz  f
dZ8de
j9        j:        de3de4fdZ;de
j9        j:        de3de3de4fdZ<	 d<de
j9        j:        de3de3dz  de4fdZ=d e
j9        j:        de3fd!Z>d e
j9        j:        fd"Z?d e
j9        j:        fd#Z@de3de
j9        jA        dz  fd$ZB ed%&          de3d'edefd(            ZCde3dz  de7e1e3ef                  dz  de&dddef
d)ZDede3dz  d*ed+efd,            ZEde3dz  de7e1e3ef                  dz  d*ede&dddefd-ZF G d. d/e
jG        jH                  ZIde3dee3         fd0ZJ eeJ          ZKedeLe3         fd1            ZM	 d=de&de3d3e1e3ef         d4e4de1e3ef         f
d5ZNddd2d6ddde&d7e7e         de7e1e3ef                  dz  de3dz  d8e4de3e7eO         z  fd9ZP G d: d;e.          ZQdS )>    N)deque)Set)	lru_cache)Anycast)ModelConfig)
ChatCompletionMessageParamChatTemplateContentFormatChatTemplateContentFormatOptionChatTemplateResolutionErrorConversationMessage build_video_prompts_from_mm_dataload_chat_templateparse_chat_messagesparse_chat_messages_asyncrebuild_mm_uuids_from_mm_data)
TextPromptTokensPrompt)init_logger)cached_get_tokenizer)CachedHfTokenizerHfTokenizer)get_chat_template_fallback_path)cached_get_processor)supports_kw   )RendererLike	tokenizertrust_remote_codereturnc                r   | j         |f}|t          v rt          |         S ddlm}m}m} 	 t          | j         |||f|          }t          ||          r%t          |d          r|j	        x}|t          |<   |S n2# t          $ r% t                              d| j         d           Y nw xY wd t          |<   d S )Nr   )PreTrainedTokenizerPreTrainedTokenizerFastProcessorMixin)processor_clsr   chat_templatez1Failed to load AutoProcessor chat template for %sTexc_info)name_or_path_PROCESSOR_CHAT_TEMPLATEStransformersr"   r#   r$   r   
isinstancehasattrr&   	Exceptionloggerdebug)r   r   	cache_keyr"   r#   r$   	processorr&   s           e/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/renderers/hf.py _try_get_processor_chat_templater4   3   s3   
 '):;I---(33         
("#'
 0
 
 
	 y.11	!	?33	! #,"99F3@%i0   
 
 
?" 	 	
 	
 	
 	
 	

 ,0i(4s   AA; ;,B*)B*r&   toolsmodel_configr   c                   ||S |t          | |j                  }||S 	 |                     ||          S # t          $ r% t                              d| j        d           Y nw xY wt          |j        j	        | j                  }|0t          
                    d| j                   t          |          }n t                              d| j                   |S )	N)r   )r5   z1Failed to load AutoTokenizer chat template for %sTr'   )
model_typetokenizer_name_or_pathzKLoading chat template fallback for %s as there isn't one defined on HF Hub.z)There is no chat template fallback for %s)r4   r   get_chat_templater.   r/   r0   r)   r   	hf_configr8   	info_oncer   
debug_once)r   r&   r5   r6   paths        r3   resolve_chat_templater?   ^   s5      }8*<
 
 
 $  
**=*FFF 
 
 
?" 	 	
 	
 	
 	
 	

 +)4(5  D !"	
 	
 	

 +40079O	
 	
 	
 s   9 ,A('A(nodevarnamec                 p    t          | t          j        j                  r| j        dk    o
| j        |k    S dS )NloadF)r,   jinja2nodesNamectxname)r@   rA   s     r3   _is_var_accessrI      s7    $)** ;x6!:di7&::5    keyc                 T   t          | t          j        j                  rIt	          | j        |          o3t          | j        t          j        j                  o| j        j        |k    S t          | t          j        j	                  r t	          | j        |          o
| j
        |k    S dS )NF)r,   rD   rE   GetitemrI   r@   argConstvalueGetattrattrr@   rA   rK   s      r3   _is_attr_accessrT      s    $,-- 
49g.. &48V\%788&#%	
 $,-- Gdi11Fdi36FF5rJ   c                    t          | t          j        j                  r| j        d uot          | j        ||          S t          | t          j        j                  rt          | j        ||          S t          | t          j        j                  r:t          | j        t          j        j	                  rt          | j        ||          S |rt          | ||          nt          | |          S N)r,   rD   rE   Filterr@   _is_var_or_elems_accessTestrM   rN   SlicerT   rI   rS   s      r3   rX   rX      s    
 $+,, 
y$ 
)@Iw*
 *
 	
 $)** @&ty'3???$,-- @*&,$3 3 @ 'ty'3???25X?4#...>$PW;X;XXrJ   rootc              #     K   | |fV  t          |g          }|r|                                }|                     t          j        j                  D ]q}|j        }|j        }t          ||          rQt          |t          j        j
                  sJ ||j        fV  |j        |k    r|                    |j                   r|d S d S rV   )r   popleftfind_allrD   rE   Assigntargetr@   rX   r,   rF   rH   append)r[   rA   related_varnamesrelated_varname
assign_astlhsrhss          r3   _iter_nodes_assign_var_or_elemsrg      s      
- gY''
 6*2244--(;<< 
	6 
	6J#C/C&sO<< 6!#v|'899999 #(**** 8..$++CH555  6 6 6 6 6rJ   c              #   .  K   d t          | d          D             }|                     t          j        j                  D ]S}|j        }|j        }|D ]@}t          ||          r.t          |t          j        j	                  sJ ||j
        fV   nATd S )Nc                     g | ]\  }}|S  rj   .0_rA   s      r3   
<listcomp>z4_iter_nodes_assign_messages_item.<locals>.<listcomp>   s)       Aw  rJ   messages)rg   r^   rD   rE   Foriterr`   rX   r,   rF   rH   )r[   messages_varnamesloop_ast	loop_iterloop_targetrA   s         r3    _iter_nodes_assign_messages_itemrv      s       "A$
"S"S  
 MM&,"233  M	o( 	 	G&y':: !+v|/@AAAAA 00000 rJ   c              #   .  K   d t          |           D             }|                     t          j        j                  D ]T}|j        }|j        }|D ]A}t          ||d          r.t          |t          j        j	                  sJ ||j
        fV   nBUd S )Nc                     g | ]\  }}|S rj   rj   rk   s      r3   rn   z3_iter_nodes_assign_content_item.<locals>.<listcomp>   s)       Aw  rJ   content)rv   r^   rD   rE   rp   rq   r`   rX   r,   rF   rH   )r[   message_varnamesrs   rt   ru   rA   s         r3   _iter_nodes_assign_content_itemr{      s       "B4"H"H  
 MM&,"233  M	o' 	 	G&y'9EE !+v|/@AAAAA 00000 rJ   c                     dd l mc m} 	 |                    |           }|j                            |           S # t          $ r t                              d           Y d S w xY w)Nr   z#Error when compiling Jinja template)	&transformers.utils.chat_template_utilsutilschat_template_utils_compile_jinja_templateenvironmentparser.   r/   	exception)r&   hf_chat_utilsjinja_compileds      r3   _try_extract_astr      s    BBBBBBBBB&>>}MM)//>>>   >???tts   .: $A"!A"    )maxsizedefaultc                    t          |           }||S 	 t          t          |                     dS # t          $ r Y dS t          $ r t
                              d           |cY S w xY w)Nopenaistringz(Error when parsing AST of Jinja template)r   nextr{   StopIterationr.   r/   r   )r&   r   	jinja_asts      r3   _detect_content_formatr      s     !//I,Y77888 x    xx   CDDDs   3 
A( %A('A(c                    t          || ||          }t          |t                    r|nt          | d          }|dnt	          |d          }|S )Nr&   r5   r6   T)
is_literalr   )r   )r?   r,   strr   r   )r&   r5   r   r6   resolved_chat_template
jinja_textdetected_formats          r3   %_resolve_chat_template_content_formatr     s     3#!	   ,c22	@$???   	#JAAA  rJ   given_formatr   c                     t                               d|           |dk    r$||k    r t                               d||           d S d S d S )NztDetected the chat template content format to be '%s'. You can set `--chat-template-content-format` to override this.autoa  You specified `--chat-template-content-format %s` which is different from the detected format '%s'. If our automatic detection is incorrect, please consider opening a GitHub issue so that we can improve it: https://github.com/vllm-project/vllm/issues/new/choose)r/   infowarning)r&   r   r   s      r3   !_log_chat_template_content_formatr   0  sv     KK	I   v,/"A"AE
 	
 	
 	
 	
 	
 "A"ArJ   c                `    |dk    r|S t          | |||          }t          | ||           |S )Nr   )r6   )r   r   )r   r   )r&   r5   r   r   r6   r   s         r3   $resolve_chat_template_content_formatr   H  s_     v;!	  O &!'    rJ   c                   L    e Zd ZdhZdej        j        dej        j        fdZ	dS )AssistantTracker
generationparserr    c                     t          |j                  j        }|                    dd          }|                     d          }t
          j                            |g g |          }|                    |          S )N)zname:endgenerationT)drop_needle_generation_support)	r   streamlinenoparse_statementscall_methodrD   rE   	CallBlock
set_lineno)selfr   r   bodycall
call_blocks         r3   r   zAssistantTracker.parseh  sp    fm$$+&&'>D&QQ 566\++D"b$??
$$V,,,rJ   N)
__name__
__module____qualname__tagsrD   r   ParserrE   Noder   rj   rJ   r3   r   r   e  sG        >D-FM0 -V\5F - - - - - -rJ   r   c                     t           j                            ddt          t           j        j        g          }|                    |           }t           j                            |          }|S )NT)trim_blockslstrip_blocks
extensions)	rD   sandboxImmutableSandboxedEnvironmentr   extloopcontrolsr   metafind_undeclared_variables)r&   envparsed_contenttemplate_varss       r3   _resolve_chat_template_kwargsr   p  s_    
.
6
6$fj&=> 7  C
 YY}--NK99.IIMrJ   c                      ddl m}  t          j        | j                  }t          d |j                                        D                       S )Nr   )r"   c              3   v   K   | ]4}|j         t          j        j        t          j        j        fv+|j        V  5d S rV   )kindinspect	ParameterVAR_KEYWORDVAR_POSITIONALrH   )rl   ps     r3   	<genexpr>z4_get_hf_base_chat_template_params.<locals>.<genexpr>  sa        6!-w/@/OPQ Q 	
Q Q Q Q rJ   )r+   r"   r   	signatureapply_chat_template	frozenset
parametersvalues)r"   base_sigs     r3   !_get_hf_base_chat_template_paramsr   ~  si    000000  !4!HIIH   $++--     rJ   Tchat_template_kwargsraise_on_unexpectedc                    	 ddh}|r+||                                 z  x}rt          d|            fd|D             }t          |          }t                      }||z  |z  |z
  		fd|                                D             S )Nr&   tokenizez4Found unexpected chat template kwargs from request: c                 B    h | ]}t          j        |d           |S )F)allow_var_kwargs)r   r   )rl   kr   s     r3   	<setcomp>z/resolve_chat_template_kwargs.<locals>.<setcomp>  sA       y4a%PPP	  rJ   c                 $    i | ]\  }}|v 	||S rj   rj   )rl   r   vaccept_varss      r3   
<dictcomp>z0resolve_chat_template_kwargs.<locals>.<dictcomp>  s)    NNNTQQ+=M=MAq=M=M=MrJ   )keys
ValueError$_cached_resolve_chat_template_kwargsr   items)
r   r&   r   r   unexpected_varsunexpected_in_kwargsfn_kwr   hf_base_paramsr   s
   `        @r3   resolve_chat_template_kwargsr     s     '
3O 
 /2F2K2K2M2M MM
 &#& &
 
 	

   %  E
 9GGM 788N=(>9_LKNNNN17799NNNNrJ   )r5   r&   r   conversationr   c                &   t          ||||           }|t          d          t          |||          }	  |j        d||||d|S # t          $ r<}t
                              d           t          t          |                    |d }~ww xY w)Nr   zAs of transformers v4.44, default chat template is no longer allowed, so you must provide a chat template if the tokenizer does not define one.)r   r&   r   )r   r5   r&   r   z@An error occurred in `transformers` while applying chat templaterj   )	r?   r   r   r   r.   r/   r   r   r   )	r6   r   r   r5   r&   r   kwargsresolved_kwargses	            r3   safe_apply_chat_templater     s     *#!	  M )#
 
 	
 3##  O(,y, 
%'	
 

 
 
 	
  ( ( ( 	N	
 	
 	
 Q  a'(s   A
 

B7BBc            
       *    e Zd Zededeeef         ddfd            Zdedeeef         ddf fdZ	e
dedz  fd            Zdefd	Z	 ddee         dedeee         eez  f         fdZ	 ddee         dedeee         eez  f         fdZ xZS )
HfRendererconfigtokenizer_kwargsr    r   c                      | ||          S rV   rj   )clsr   r   s      r3   from_configzHfRenderer.from_config  s     s6+,,,rJ   Nc                     t                                                       || _        |j        rd }n&t	          t
          t          ddt          i|          }|| _        d S )Ntokenizer_clsrj   )	super__init__r   skip_tokenizer_initr   r   r   r   
_tokenizer)r   r   r   r   	__class__s       r3   r   zHfRenderer.__init__  su    
 	% 		II$  "3&  I $rJ   c                     | j         S rV   )r   )r   s    r3   r   zHfRenderer.tokenizer  s
    rJ   c                 6    | j         }|t          d          |S )Nz7Tokenizer not available when `skip_tokenizer_init=True`)r   r   )r   r   s     r3   get_tokenizerzHfRenderer.get_tokenizer  s$    N	VWWWrJ   r   ro   chat_template_content_formatc                    | j         }|                                 }t          ||t          |                    d          |                    d          |||                    \  }}}t          |||fi |}	t          |j        dd          r||t          ||          }t          |j        dd           }
|
rt          |	t                    rt          |          |	                    |
          t                    t                    dz   k    rHd	                    fd
t          t                              D                       }	|	d         z  }	n9t                               dt                    dz
  t                               t          |	t                    rt%          |	          nt'          |	          }|||d<   |||d<   ||fS )Nr&   r5   r&   r5   r   r   r6   content_formatuse_unified_vision_chunkFvideo_placeholderr    c                 2    g | ]}|         |         z   S rj   rj   rl   iprompt_raw_partsvideo_promptss     r3   rn   z.HfRenderer.render_messages.<locals>.<listcomp><  8        ! -Q/-2BB  rJ   VNumber of video placeholders (%d) does not match number of videos (%d) in the request.promptprompt_token_idsmulti_modal_datamulti_modal_uuids)r   r  r   r   getr   getattrr;   r   r,   r   r   splitlenjoinranger/   r   r   r   r   ro   r  r   r6   r   r   mm_datamm_uuids
prompt_rawr  r  r  r  s               @@r3   render_messageszHfRenderer.render_messages  sS    {&&((	*=?$jj99jj))9#)  
+
 
+
 
+
'gx .
 
 	
 

 L*,FNN	$#4XwGGH !(&(;T! ! ! Z
C%@%@  @ I I $.#3#34E#F#F '((C,>,>,BBB!#    %*3}+=+=%>%>  " "J "22"66JJNN@,--1M**	   *c**;Jj))))z::: 	
 )0F%&*2F&'V##rJ   c                   K   | j         }|                                 }t          ||t          |                    d          |                    d          |||                     d {V \  }}}t          |||fi |}	t          |j        dd          r||t          ||          }t          |j        dd           }
|
rt          |	t                    rt          |          |	                    |
          t                    t                    dz   k    rHd	                    fd
t          t                              D                       }	|	d         z  }	n9t                               dt                    dz
  t                               t          |	t                    rt%          |	          nt'          |	          }|||d<   |||d<   ||fS )Nr&   r5   r  r  r  Fr  r   r	  c                 2    g | ]}|         |         z   S rj   rj   r  s     r3   rn   z4HfRenderer.render_messages_async.<locals>.<listcomp>  r  rJ   r  r  r  r  r  r  )r   r  r   r   r  r   r  r;   r   r,   r   r   r  r  r  r  r/   r   r   r   r  s               @@r3   render_messages_asyncz HfRenderer.render_messages_asyncV  su      {&&((	0I?$jj99jj))9#)  
1
 
1
 
1
 
+
 
+
 
+
 
+
 
+
 
+
'gx .
 
 	
 

 L*,FNN	$#4XwGGH !(&(;T! ! ! Z
C%@%@  @ I I $.#3#34E#F#F '((C,>,>,BBB!#    %*3}+=+=%>%>  " "J "22"66JJNN@,--1M**	   *c**;Jj))))z::: 	
 )0F%&*2F&'V##rJ   )r   )r   r   r   classmethodr   dictr   r   r   r   propertyr   r   r  listr	   r   tupler   r   r   r"  r%  __classcell__)r   s   @r3   r   r     s       -- sCx.- 
	- - - [-$$ sCx.$ 
	$ $ $ $ $ $, ;-    X{     IOH$ H$12H$ 'FH$
 
t'(*|*CC	DH$ H$ H$ H$Z IOH$ H$12H$ 'FH$
 
t'(*|*CC	DH$ H$ H$ H$ H$ H$ H$ H$rJ   r   rV   )T)Rr   collectionsr   collections.abcr   	functoolsr   typingr   r   rD   
jinja2.extjinja2.metajinja2.nodesjinja2.parserjinja2.sandboxvllm.configr   vllm.entrypoints.chat_utilsr	   r
   r   r   r   r   r   r   r   r   vllm.inputsr   r   vllm.loggerr   vllm.tokenizersr   vllm.tokenizers.hfr   r   &vllm.transformers_utils.chat_templatesr   !vllm.transformers_utils.processorr   vllm.utils.func_utilsr   protocolr   r   r/   r'  r*  r   boolr*   r4   r)  r?   rE   r   rI   rT   rX   rg   rv   r{   Templater   r   r   r   r   r   	Extensionr   r   r   r   r   r   intr   r   rj   rJ   r3   <module>rC     s                                                   # # # # # #                        1 0 0 0 0 0 0 0 # # # # # # 0 0 0 0 0 0 = = = = = = = = R R R R R R B B B B B B - - - - - - " " " " " "	X		 ?DsDy!13:!=>@@ (( ( 	4Z	( ( ( (V//:/ S#X$&/
  / 	4Z/ / / /d* S T    &,+ c      " Y Y
,
YY 
tY 
	Y Y Y Y(6&,*; 6c 6 6 6 606<+<    "&,*;    "C FL,AD,H     2 ' 	   (:S#X$& 
      : 
:
1
 5
 
 
 
.:S#X$& 2 	      :- - - - -vz+ - - - S     (1y1N'O'O $ 9S>    0 !%	O OOO sCx.O 	O
 
#s(^O O O OH *. $-( -( -(-(-( *+-(
 S#X$&-( :-( -( 	49_-( -( -( -(`|$ |$ |$ |$ |$ |$ |$ |$ |$ |$rJ   