
    .`i>                        U d dl Z d dlZd dlmZ d dlZdZdZee	d<   dZ
ee	d<   dZee	d	<   d
Zee	d<   dZee	d<   dZee	d<   dZee	d<   dZee	d<   dZdZee	d<   dZee	d<   dZdZee	d<   dedefdZd Zd  Zd! Zd"eeef         defd#Zd$ed%eeeeef         f         deeef         fd&Zd'eeeeeeef         z  f                  defd(Zd)eeeef                  de fd*Z!d+e d)eeeef                  d,edefd-Z"	 d:d)eeeef                  d.e dz  deeeef                  fd/Z#	 	 	 d;d)eeeef                  d,ed1eeeef                  dz  d2e$d3e$defd4Z%d+e d5ed6ee         dee edez  f         fd7Z&d+e d5efd8Z'd5ed,efd9Z(dS )<    N)Anya  ## Tools
You have access to a set of tools you can use to answer the user's question.
You can invoke functions by writing a "<{dsml_token}function_calls>" block like the following as part of your reply to the user:
<{dsml_token}function_calls>
<{dsml_token}invoke name="$FUNCTION_NAME">
<{dsml_token}parameter name="$PARAMETER_NAME" string="true|false">$PARAMETER_VALUE</{dsml_token}parameter>
...
</{dsml_token}invoke>
<{dsml_token}invoke name="$FUNCTION_NAME2">
...
</{dsml_token}invoke>
</{dsml_token}function_calls>
String and scalar parameters should be specified as is without any escaping or quotes, while lists and objects should use JSON format. The "string" attribute should be set to "true" for string type parameters and "false" for other types (numbers, booleans, arrays, objects).
If the thinking_mode is enabled, then after function results you should strongly consider outputting a thinking block. Here is an example:
<{dsml_token}function_calls>
...
</{dsml_token}function_calls>
<function_results>
...
</function_results>
{thinking_start_token}...thinking about results{thinking_end_token}
Here are the functions available in JSONSchema format:
<functions>
{tool_schemas}
</functions>
u   <｜begin▁of▁sentence｜>	bos_tokenu   <｜end▁of▁sentence｜>	eos_tokenz<think>thinking_start_tokenz</think>thinking_end_tokenu
   ｜DSML｜
dsml_tokenz	{content}system_msg_templateu&   <｜User｜>{content}<｜Assistant｜>user_msg_templateu;   {reasoning}{content}{tool_calls}<｜end▁of▁sentence｜>assistant_msg_templatez{reasoning_content}zX## Response Format:

You MUST strictly adhere to the following schema to reply:
{schema}response_format_templatezD<{dsml_token}invoke name="{name}">
{arguments}
</{dsml_token}invoke>tool_call_templatezG<{dsml_token}function_calls>
{tool_calls}
</{dsml_token}function_calls>z
<result>{content}</result>tool_output_templatevaluereturnc                 |    	 t          j        | d          S # t          $ r t          j        | d          cY S w xY w)NF)ensure_asciiT)jsondumps	Exception)r   s    y/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/tokenizers/deepseek_v32_encoding.pyto_jsonr   =   sR    4z%e4444 4 4 4z%d3333334s     ;;c                     d | D             S )Nc                     g | ]
}|d          S )function ).0tools     r   
<listcomp>z,tools_from_openai_format.<locals>.<listcomp>E   s    ///D///    r   )toolss    r   tools_from_openai_formatr!   D   s    //////r   c                     d | D             S )Nc                 H    g | ]}|d          d         |d          d         d S )r   name	argumentsr$   r%   r   r   	tool_calls     r   r   z1tool_calls_from_openai_format.<locals>.<listcomp>I   sK       
  j)&1":.{;	
 	
  r   r   
tool_callss    r   tool_calls_from_openai_formatr+   H   s%     
 $   r   c                     d | D             S )Nc                 6    g | ]}d |d         |d         ddS )r   r$   r%   r&   )typer   r   r'   s     r   r   z/tool_calls_to_openai_format.<locals>.<listcomp>S   sN     	 	 	  !&)&{3 	
 	
	 	 	r   r   r)   s    r   tool_calls_to_openai_formatr/   R   s%    	 	 $	 	 	 	r   r(   c           
         d}g }t          | d         t                    rt          j        | d                   }n| d         }|                                D ]s\  }}|                    t          |t          |t                    rdndt          |t                    r|nt          |                    }|                    |           td	                    |          S )NzU<{dsml_token}parameter name="{key}" string="{is_str}">{value}</{dsml_token}parameter>r%   truefalse)r   keyis_strr   
)

isinstancestrr   loadsitemsformatr   r   appendjoin)r(   p_dsml_templateP_dsml_strsr%   kv
p_dsml_strs          r   encode_arguments_to_dsmlrB   _   s    qOK)K(#.. +Jy566		k*	!! ' '1$++!'3//<66W!!S))9!!wqzz	 , 
 

 	:&&&&99[!!!r   	tool_name	tool_argsc                     dt           dt           dt           fddd                    fd|                                D                       z   dz   }t          | |	          S )
Nr3   r   stringc                 T    |dk    rt          |          }t          |            d| S )Nr1   z: r   )r3   r   rF   s      r   _decode_valuez/decode_dsml_to_arguments.<locals>._decode_valuew   s2    VENNE#,,))%)))r   {z, c                 8    g | ]\  }\  }} |||           S ))rF   r   )r   r?   r@   r4   rI   s       r   r   z,decode_dsml_to_arguments.<locals>.<listcomp>   s2    XXXNA{6]]1a///XXXr   }r&   )r7   r<   r9   dict)rC   rD   tool_args_jsonrI   s      @r   decode_dsml_to_argumentsrO   t   s    *3 *s *C * * * * 	
))XXXXiooFWFWXXX
 
	
 		  Y.9999r   r    c                     d | D             }t                               d                    |          t          t          t
                    S )Nc                 ,    g | ]}t          |          S r   rH   )r   ts     r   r   z render_tools.<locals>.<listcomp>   s    ,,,'!**,,,r   r5   )tool_schemasr   r   r   )TOOLS_SYSTEM_TEMPLATEr:   r<   r   r   r   )r    
tools_jsons     r   render_toolsrV      sJ    ,,e,,,J ''YYz**1-	 (   r   messagesc                     d}t          t          |           dz
  dd          D ]#}| |                             d          dv r|} n$|S )N   role)user	developer)rangelenget)rW   last_user_indexidxs      r   find_last_user_indexrc      sb    OS]]Q&B//  C=V$$(===!OE > r   indexthinking_modec                 	   d| cxk    rt          |          k     s$n t          d|  dt          |                     |dvrt          d| d          d}||          }t          |          }|                    d          }|                    d	          }|                    d
          }|                    d          }	|                    d          }
|                    d          p|                    d          }|                    dd          }|rt	          |          }|
rt          |
          }
|dk    ri|t                              |pd          z  }|r|dt          |          z   z  }|	r.|dt                              t          |	                    z   z  }n(|dk    r|st          d| d|           d}|r|dt          |          z   z  }|	r.|dt                              t          |	                    z   z  }|d                    |          z  }|t                              |          z  }| |k    r|dk    r|t          z  }nt|t          z  }nh|dk    rB|t                              |          z  }| |k    r|dk    r|t          z  }n,|t          z  }n |dk    r9| dz
  }||         }|dk    rE|                    d          dk    r,|dz  }||         }|dk    r|                    d          dk    ,| dk    s4|dk    r|                    d          dk    st          d|  d|           | |z
  }|                    d          }|rt          |          |k    st          d           |dk    r|d!z  }|t                              |          z  }|t          |          k    r,|d"z  }| |k    r|dk    r|dt          z   z  }n|dt          z   z  }n|dk    r| }d}d}|
rFd# |
D             }
|dt                              t           d$                    |
          %          z   z  }|pd}|dk    rE| |k    r?|s|
st          d&| d'| d(          t$                              |pd)          t          z   }|
s|r||z  }n3|t&                              |||*          z  }nt)          d+|           |S ),Nr   zIndex z* out of range for messages list of length )chatthinkingzInvalid thinking_mode `` r[   contentr    response_formatr*   	reasoningreasoning_contentprefixFsystem)rk   z

)schemar]   zInvalid message for role `z`: z

# The user's message is: {}rh   r\   r   rZ   	assistantzInvalid messages at z:
z#No tool calls but found tool outputz

<function_results>z
</function_results>c           	          g | ]D}t                               t          |                    d           t	          |                    ES )r$   )r   r$   r%   )r   r:   r   r`   rB   r'   s     r   r   z"render_message.<locals>.<listcomp>  s\         #)))"v..6yAA *    r   r5   )r   r*   zThinkingMode: z8, invalid message without reasoning_content/tool_calls `z` after last user message)rn   )rm   rk   r*   zUnknown role: )r_   
ValueErrorrc   r`   r!   r+   r	   r:   rV   r   r   r
   r   r   r   tool_calls_templater   r<   thinking_templater   NotImplementedError)rd   rW   re   promptmsglast_user_idxr[   rk   r    rl   r*   rn   	is_prefixcontent_developerprev_assistant_idxassistant_msgtool_call_orderassistant_tool_callsthinking_parttool_calls_contentsummary_contents                        r   render_messager      sC    &&&&X&&&&UUUUc(mmUU
 
 	
 000C=CCCDDDF
5/C(22M776??Dggi  GGGGEgg/00O&&J,,L8K0L0L%((I 0(// ?2:>>
x%,,W],CCC 	3f|E2222F 	f7>>//  ?      F 
		 	JH$HH3HHIII 	>,u*=*=!== 	*B*I*I// +J + + "  	>EEgNNN#**3D*EEEM!!mz&A&A**FF((FF	#**7*;;;M!!mz&A&A**FF((FF	"QY !34 A%%-*;*;F*C*Cv*M*M!#$%78M !A%%-*;*;F*C*Cv*M*M
 QJJ!Q&&!!&))[88MEMMmMMNNN"44,00>>$ 	D-A)B)Bo)U)UBCCCa..F&--g->>>c"67777--F%%-:*E*E&#777&#555			" 	  ",  J &+>+E+E%$))J2G2G ,F , , #  "-RJ&&5=+@+@%    K]  K  Klo  K  K  K   "((;L;RPR(SS$% 
  	i 	o%FF,33''- 4   FF ""94"9"9:::Mr   rz   c                 z   g }|t          |           n|}t          |           D ]\  }}|                    d          }|dv s||k    r|                    |           :|dk    rUt	          j        |          }|                    dd            |                    dd            |                    |           |S )Nr[   )r\   rp   r   rr   rn   rm   )rc   	enumerater`   r;   copypop)rW   rz   messages_wo_thinkingrb   ry   r[   msg_wo_thinkings          r   drop_thinking_messagesr   '  s     24*7*?X&&&]  h'' 
9 
9Swwv---1E1E '',,,[  "innO 3T:::T222 ''888r   Tcontextdrop_thinkingadd_default_bos_tokenc                    |r|ng }|| z   }|rt          |          dk    rt          nd}|dk    r|rt          |          }t          t          |                     D ]'}|t	          |t          |          z   ||          z  }(|S )Nr   rj   rh   )re   )r_   r   r   r^   r   )rW   re   r   r   r   full_messagesrx   rb   s           r   encode_messagesr   =  s     !(ggbGh&M/MCLLA4E4EYY2F
""}".}==S]]## 
 
.#g,,]
 
 
 	
 Mr   textstopc                     t          |          }d }|D ](}|                    ||           }|dk    r
||k     r|}|})|r|| |         }|t          |          z   ||fS || d          }t          |          |d fS )NrY   )r_   find)rd   r   r   min_posmatched_stopsposrk   s           r   _read_until_stopr   T  s     $iiGL  ii5!!"99wGL (uW}%\***G\AAuvv,4yy'4''r   c                    g }d }dt            d}| t          |          k     rt          | |dt            d|g          \  } }}|dk    rt          d          ||k    rn|t          d          t          | |dt            ddt            dg          \  } }}t	          j        d	|t          j        
          }t          |          dk    rt          d          |d         }i }	|dt            dk    rt          | |dt            dg          \  } }
}t	          j        d|
t          j        
          }t          |          dk    rt          d          |d         \  }}}||	v rt          d          ||f|	|<   t          | |dt            ddt            dg          \  } }}|dk    rt          d          |dt            dk    t          ||	          }|                    |           | t          |          k     | ||fS )Nz</zfunction_calls><invokez>
zTool call format errorzMissing special token	parameterz^\s*name="(.*?)">\n$)flagsrZ   zTool name format errorr   /z,^ name="(.*?)" string="(true|false)">(.*?)<$zParameter format errorzDuplicate parameter name)rC   rD   )	r   r_   r   RuntimeErrorrefindallDOTALLrO   r;   )rd   r   r*   
stop_tokentool_calls_end_token_tool_name_contentp_tool_namerC   rD   param_contentparam_kv
param_namerF   param_valuerk   r(   s                    r   parse_tool_callsr   h  s   ')JJ;
;;;
#d))

/40j0002FG 
  
q* ::7888---6777/?43j3335L*5L5L5LM0
 0
, * j#%6bi
 
 
 {q  7888N	02	5
55555/?t7*77780 0,E=* z?i  H
 8}}!!"#;<<<.6qk+JY&&"#=>>>%0&$9Ij!)9t7*7779Pj9P9P9PQ* *&E7J %"#;<<<- 5
555550 -yIVVV	)$$$e #d))

h *j((r   c                    ddg }}}d\  }}dt            d}|dk    d}	}|r8t          || t          |g          \  }}
}|
}|t          k    rt          d          t          || t          |g          \  }}
}|
}||k    rd}	n|t          k    rt          d	          |	r@t          ||           \  }}}t          || t          g          \  }}}|rt          d
          t          |           |k    r|t          d fv st          d          t          t          t          t          t           fD ]}||v s||v rt          d          d|||t          |          dS )Nrj   )r   Nz

<function_callsrh   FzInvalid thinking formatTzInvalid summary formatz#Unexpected content after tool callszUnexpected content at endz#Unexpected special token in contentrr   )r[   rk   rn   rm   r*   )
r   r   r   r   r   r   r_   r   r   r/   )r   re   r   rn   r*   rd   r   tool_calls_start_tokenis_thinkingis_tool_callingcontent_deltatool_ends_textsp_tokens                r   "parse_message_from_completion_textr     s   57R
&OE:?Z???#0J#>K :+;4,.DE,
 ,
(}j *+++8999'7ti!78( ($E=* $O+++""7888 F(8(E(E%z:,<UD9+,V,V)~z 	FDEEEII:)T1B#B#B6777 	 F F &&(6G*G*GDEEE +H ".&1*==  r   )N)NTT))r   r   typingr   regexr   rT   r   r7   __annotations__r   r   r   r   r	   r
   r   rv   r   r   ru   r   r   r!   r+   r/   rM   rB   tuplerO   listrV   intrc   r   r   boolr   r   r   r   r   r   r   <module>r      s               6 1	3 0 0 0.	3 . . .% c % % %$ C $ $ $
C   & S & & &A 3 A A A[  [ [ [)  } # } } }L C    P  ; c : : :43 43 4 4 4 40 0 0  
 
 
"S#X "3 " " " "*::#CsCx$89:	#s(^: : : :$T#sT#s(^';";<= #    4S#X#7 C    JJtCH~.J?BJJ J J J\ AE   4S>" 36: 	$sCx.       2 ,0"& 4S>" $sCx.!D( 	
   	   .(((!%c(
3TCZ ( ( ( ((9)C 9)s 9) 9) 9) 9)~3S 3 3 3 3 3 3 3r   