
     sgkO                   (
   d dl 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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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" ddl#m$Z$ ddl%m&Z&m'Z' d	Z(d
Z)dZ*dZ+d
Z,dZ-dZ.dZ/ G d de      Z0 G d de1      Z2 G d de'      Z3ddZ4ddZ5ejl                   G d d             Z7 G d de      Z8 G d de8      Z9	 	 	 	 ddZ:	 	 	 	 ddZ;	 	 	 	 dd Z<	 d	 	 	 	 	 dd"Z=	 	 	 	 	 	 dd#Z>	 	 	 	 dd$Z?	 	 	 	 dd%Z@	 	 	 	 dd&ZA	 d	 	 	 	 	 dd'ZB	 d	 	 	 	 	 dd(ZCdd)ZD	 	 	 	 dd*ZE	 	 	 	 	 	 dd+ZF	 	 	 	 	 	 	 	 	 	 dd,ZG	 	 	 	 	 	 	 	 dd-ZH	 	 	 	 	 	 	 	 	 	 dd.ZI	 	 	 	 	 	 	 	 dd/ZJ	 	 	 	 	 	 	 	 dd0ZK	 	 	 	 	 	 	 	 dd1ZL	 	 	 	 	 	 	 	 dd2ZMddd3ZN	 d	 	 	 	 	 dd4ZO	 d	 	 	 dd5ZPdd6ZQ eQd7      	 	 	 	 	 	 dd8       ZR eQd9      	 	 	 	 	 	 dd:       ZS eQd;      	 	 	 	 	 	 dd<       ZT eQd=      	 	 	 	 	 	 dd>       ZU eQd?      	 	 	 	 	 	 dd@       ZV eQdA      	 	 	 	 	 	 ddB       ZW eQdC      	 	 	 	 	 	 ddD       ZX eQdE      	 	 	 	 	 	 ddF       ZY eQdG      	 	 	 	 	 	 ddH       ZZ eQdI      	 	 	 	 	 	 ddJ       Z[ eQdK      	 	 	 	 	 	 ddL       Z\ eQdM      	 	 	 	 	 	 ddN       Z] eQdO      	 	 	 	 	 	 ddP       Z^ eQdQ      	 	 	 	 	 	 ddR       Z_ eQdS      	 	 	 	 	 	 ddT       Z` eQdU      	 	 	 	 	 	 ddV       Za eQdW      	 	 	 	 	 	 ddX       Zb eQdY      	 	 	 	 	 	 ddZ       Zc eQd[      	 	 	 	 	 	 dd\       Zd eQd]      	 	 	 	 	 	 dd^       Ze eQd_      	 	 	 	 	 	 dd`       Zf eQda      	 	 	 	 	 	 ddb       Zg eQdc      	 	 	 	 	 	 ddd       Zh e5de      dddddfdgdhdidjd!g dddkdkdldjd dmdndddf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddo       Zi e5dp       e5dq      dddddfdgdhdidjd!g dddkdkdldjd dmdndddf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddr              Zj G ds dt      Zk G du dvek      Zl G dw dxek      Zm G dy dzek      Zn G d{ d|ek      Zo G d} d~ek      ZpepZq G d dek      Zr e5d      dddddfdgdhdidjd!g dddkdkdldjd dmdndddddf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd       Zsy)    )annotationsN)	ExitStack)
AnyDictIteratorListLiteralOptionalTupleUnionProtocolcast)ImmutableSandboxedEnvironment   )logger)suppress_stdout_stderr	Singletonz{% for message in messages %}{{'<|im_start|>' + message['role'] + '
' + message['content'] + '<|im_end|>' + '
'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant
' }}{% endif %}<s>
<|im_end|>a  {{ bos_token }}{% for message in messages %}{% if (message['role'] == 'user') != (loop.index0 % 2 == 0) %}{{ raise_exception('Conversation roles must alternate user/assistant/user/assistant/...') }}{% endif %}{% if message['role'] == 'user' %}{{ '[INST] ' + message['content'] + ' [/INST]' }}{% elif message['role'] == 'assistant' %}{{ message['content'] + eos_token + ' ' }}{% else %}{{ raise_exception('Only user and assistant roles are supported!') }}{% endif %}{% endfor %}</s>a  {{ bos_token }}{% for message in messages %}{% if (message['role'] == 'user') != (loop.index0 % 2 == 0) %}{{ raise_exception('Conversation roles must alternate user/assistant/user/assistant/...') }}{% endif %}{% if message['role'] == 'user' %}{{ '[INST] ' + message['content'] + ' [/INST]' }}{% elif message['role'] == 'assistant' %}{{ message['content'] + eos_token}}{% else %}{{ raise_exception('Only user and assistant roles are supported!') }}{% endif %}{% endfor %}a  {% set loop_messages = messages %}{% for message in loop_messages %}{% set content = '<|start_header_id|>' + message['role'] + '<|end_header_id|>

'+ message['content'] | trim + '<|eot_id|>' %}{% if loop.index0 == 0 %}{% set content = bos_token + content %}{% endif %}{{ content }}{% endfor %}{% if add_generation_prompt %}{{ '<|start_header_id|>assistant<|end_header_id|>

' }}{% endif %}c                      e Zd ZdZddddddddg ddddddddd	d
d
dddddddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZy)LlamaChatCompletionHandlera  Base Protocol for a llama chat completion handler.

    Very generic protocol that can be used to implement any chat format.
    The only hard requirement is that it must return a ChatCompletion when
    stream=False and an iterator of ChatCompletionChunks when stream=True.N皙?ffffff?(   F        皙?皙?      ?r         @皙?)	functionsfunction_calltoolstool_choicetemperaturetop_ptop_kstreamstopseedresponse_format
max_tokenspresence_penaltyfrequency_penaltyrepeat_penaltymodel
logit_biasmin_p	typical_ptfs_zmirostat_modemirostat_taumirostat_etalogits_processorgrammarlogprobstop_logprobsc                    y N )selfllamamessagesr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   kwargss                                  N/var/www/html/venv/lib/python3.12/site-packages/llama_cpp/llama_chat_format.py__call__z#LlamaChatCompletionHandler.__call__B   s    R     )<rA   llama.LlamarB   .List[llama_types.ChatCompletionRequestMessage]r"   2Optional[List[llama_types.ChatCompletionFunction]]r#   7Optional[llama_types.ChatCompletionRequestFunctionCall]r$   .Optional[List[llama_types.ChatCompletionTool]]r%   4Optional[llama_types.ChatCompletionToolChoiceOption]r&   floatr'   rM   r(   intr)   boolr*   Optional[Union[str, List[str]]]r+   Optional[int]r,   9Optional[llama_types.ChatCompletionRequestResponseFormat]r-   rQ   r.   rM   r/   rM   r0   rM   r1   Optional[str]r2   Optional[Dict[str, float]]r3   rM   r4   rM   r5   rM   r6   rN   r7   rM   r8   rM   r9   #Optional[llama.LogitsProcessorList]r:   Optional[llama.LlamaGrammar]r;   Optional[bool]r<   rQ   returniUnion[llama_types.CreateChatCompletionResponse, Iterator[llama_types.CreateChatCompletionStreamResponse]]__name__
__module____qualname____doc__rE   r?   rF   rD   r   r   ;   s   N IMQU@DLP 02" $("%#& ##15!!@D04#'&*I) 	) A) F) O) >) J) ) ) ) ) .)  !)"
#)( "))*  +), !-). /)0 1)2 /3)6 7)8 9): ;)< =)> ?)@ A)B >C)D .E)F !G)H $I)L
M)rF   r   c                      e Zd Zy)+LlamaChatCompletionHandlerNotFoundExceptionN)r[   r\   r]   r?   rF   rD   r`   r`   n   s    rF   r`   c                  J    e Zd ZU i Zded<   	 d	 	 	 	 	 ddZd	dZ	 	 	 	 d
dZy)"LlamaChatCompletionHandlerRegistryz%Dict[str, LlamaChatCompletionHandler]_chat_handlersc                `    |s|| j                   v rt        d| d      || j                   |<   y )NzFormatter with name 'z>' is already registered. Use `overwrite=True` to overwrite it.rc   
ValueError)r@   namechat_handler	overwrites       rD    register_chat_completion_handlerzCLlamaChatCompletionHandlerRegistry.register_chat_completion_handleru   s@     TT%8%88'v-kl  %1D!rF   c                X    || j                   v r| j                   |= y t        d| d      )Nz(No formatter registered under the name 'z'.re   )r@   rg   s     rD   unregister_chat_handlerz:LlamaChatCompletionHandlerRegistry.unregister_chat_handler   s3    4&&&##D)GvRPQQrF   c           
         	 | j                   |   }|S # t        $ r4 t        d| dt        | j                   j	                                d      w xY w)NzInvalid chat handler: z (valid formats: ))rc   KeyErrorr`   listkeys)r@   rg   rh   s      rD   #get_chat_completion_handler_by_namezFLlamaChatCompletionHandlerRegistry.get_chat_completion_handler_by_name   sb    	..t4L 	=(.?TEXEXE]E]E_@`?aabc 	s	    =ANF)rg   strrh   r   ri   rO   rg   rt   rg   rt   rX   r   )r[   r\   r]   rc   __annotations__rj   rl   rr   r?   rF   rD   rb   rb   r   sN    <>N9>  	
1
1 1
1 	
1R			#	rF   rb   c                4    t               j                  |       S r>   )rb   rr   )rg   s    rD   get_chat_completion_handlerry      s    -/SS rF   c                     d fd}|S )Nc                <    t               j                  |        | S r>   )rb   rj   )frg   s    rD   	decoratorz3register_chat_completion_handler.<locals>.decorator   s    *,MMdTUVrF   )r|   r   r?   rg   r}   s   ` rD   rj   rj      s     rF   c                  F    e Zd ZU dZded<   dZded<   dZded<   d	Zd
ed<   y)ChatFormatterResponsea  Dataclass that stores completion parameters for a given chat format and
    create_chat_completion request.

    prompt contains the formatted prompt generated from the chat format and messages.
    stop contains the stop token or list of stop tokens to use for the chat format.rt   promptNrP   r*   z$Optional[llama.StoppingCriteriaList]stopping_criteriaFrO   added_special)r[   r\   r]   r^   rw   r*   r   r   r?   rF   rD   r   r      s0    W K,0D
)0>B;BM4rF   r   c                  $    e Zd ZdZ	 	 	 	 	 	 ddZy)ChatFormattera  Base Protocol for a chat formatter. A chat formatter is a function that
    takes a list of messages and returns a chat format response which can be used
    to generate a completion. The response can also include a stop token or list
    of stop tokens to use for the completion.c                    y r>   r?   )r@   rB   rC   s      rD   rE   zChatFormatter.__call__   s    
 !$rF   NrB   rH   rC   r   rX   r   rZ   r?   rF   rD   r   r      s+    1
$ A$ 	$
 
$rF   r   c                  b    e Zd Z	 	 d	 	 	 	 	 	 	 	 	 ddZddddd	 	 	 	 	 	 	 	 	 	 	 	 	 ddZd	dZy)
Jinja2ChatFormatterNc                    || _         || _        || _        || _        |t	        |      nd| _        t        t        j                         dd      j                  | j                         | _
        y)zAA chat formatter that uses jinja2 templates to format the prompt.NT)loadertrim_blockslstrip_blocks)template	eos_token	bos_tokenadd_generation_promptsetstop_token_idsr   jinja2
BaseLoaderfrom_string_environment)r@   r   r   r   r   r   s         rD   __init__zJinja2ChatFormatter.__init__   sl     !""%:"#1#=C4 	 :$$&
 +dmm
$	 	rF   )r"   r#   r$   r%   c               $    dd} j                   j                  | j                   j                  | j                  ||||	      }d }	 j
                  "	 	 	 	 	 	 d fd}
t        j                  |
g      }	t        | j                  g|	d      S )Nc                    t        |       r>   )rf   )messages    rD   raise_exceptionz5Jinja2ChatFormatter.__call__.<locals>.raise_exception   s    W%%rF   )	rB   r   r   r   r   r"   r#   r$   r%   c                &    | d   j                   v S )N)r   )tokenslogitsr@   s     rD   stop_on_last_tokenz8Jinja2ChatFormatter.__call__.<locals>.stop_on_last_token   s     bzT%8%888rF   T)r   r*   r   r   )r   rt   )r   znpt.NDArray[np.intc]r   znpt.NDArray[np.single]rX   rO   )	r   renderr   r   r   r   rA   StoppingCriteriaListr   )r@   rB   r"   r#   r$   r%   rC   r   r   r   r   s   `          rD   rE   zJinja2ChatFormatter.__call__   s    	& ""))nnnn+"&"<"<'# * 

 !*9,96L99
 !& : :<N;O P$..!/	
 	
rF   c                    t        |       S r>   ))chat_formatter_to_chat_completion_handlerr@   s    rD   to_chat_handlerz#Jinja2ChatFormatter.to_chat_handler  s    8>>rF   )TN)
r   rt   r   rt   r   rt   r   rO   r   zOptional[List[int]])rB   rH   r"   rI   r#   rJ   r$   rK   r%   rL   rC   r   rX   r   )rX   r   )r[   r\   r]   r   rE   r   r?   rF   rD   r   r      s     '+.2%% % 	%
  $% ,%6 IMQU@DLP(
 A(
 F	(

 O(
 >(
 J(
 (
 
(
T?rF   r   c                    | y t        | d   | d   | d         D cg c]2  \  }}}|d ||j                         D cg c]  \  }}||d d c}}d4 c}}}}}d dS c c}}w c c}}}}}w )Nr   token_logprobsr<   )tokenlogprobbytes)r   r   r   r<   )contentrefusal)zipitems)r;   r   r   r<   	top_tokentop_logprobs         rD   )_convert_text_completion_logprobs_to_chatr     s       588JHUeLfhpq  iA  5B
 
 15'< " 3?2D2D2F! /	;	 "+#.!%!	
 ! !
s   A'A!A'!A'c           
         d| v sJ d| d   z   d| d   | d   dd| d	   d   d
   dt        | d	   d   d         | d	   d   d   dg| d   dS )Nusagechatidchat.completioncreatedr1   r   	assistantchoicestextroler   r;   finish_reasonindexr   r;   r   r   objectr   r1   r   r   r   )
completions    rD    _convert_text_completion_to_chatr     s     j   z$''#i(G$ '))4Q7? FjQZF[\]F^_iFjk!+I!6q!9/!J

 G$! rF   c              #    K   t        |       D ]w  \  }}|dk(  rd|d   z   |d   |d   ddddid d d	gd
 d|d   z   |d   |d   dd|d   d   d   d|d   d   d   ini t        |d   d   d         |d   d   d   d	gd
 y y w)Nr   r   r   r1   r   chat.completion.chunkr   r   r   deltar;   r   r   r1   r   r   r   r   r   r   r   r;   )	enumerater   )chunksichunks      rD   '_convert_text_completion_chunks_to_chatr   7  s     f% %
56uT{*w +1 "#"K" %))-	 " 5;&7^Y'- 
 !+A.?G &uY'7':6'B   I%PYJZ[\J]^hJi j%*9%5a%8%I
 	
%%
s   BB	Fc                :    |r| }t        |      S | }t        |      S r>   )r   r   )completion_or_chunksr)   r   r   s       rD   _convert_completion_to_chatr   b  s'     G[6v>>-A
/
;;rF   c                    |sj|}d|v sJ d z   dz   |d   z   }d|d   z   d|d   |d   d	d
d  |d   d	   d   d|d |d   d	   d   ddgdt        |d   d	   d         ddg|d   d}|S |}	 	 	 	 d fd} ||      S )Nr   call__0__r   r   r   r   r1   r   r   r   r   rg   	argumentsfunctionr   typer   r   r   r#   
tool_callsr;   r   r   r   c              3  ,  K   d}d }d }d }d }| D ]  }|rd|d   z   }|d   }|d   }dz   dz   |d   z   }|d||d	d d d
d d d ddgd d|d   z   d|d   |d   d	d t        |d   d	   d         d d |d   d	   d   dd	|d|d   d	   d   ddgddgd d}|J d|d   z   d|d   |d   d	d t        |d   d	   d         d d |d   d	   d   dd	|d|d   d	   d   ddgddgd  ||||d||d	dd d d d d ddgd y y y y w)NTr   r   r   r1   r   r   r   r   r   r   r   r   r;   r   r   r   r   r1   r   r   r;   r   r   r   r   r   r   r   Fr   r   )r   firstid_r   r1   tool_idr   	tool_names          rD   #_stream_response_to_function_streamzQ_convert_completion_to_chat_function.<locals>._stream_response_to_function_stream  ss     ECGEG ] 5;.C#I.G!'NE-	9C?%+MG!"9#*!& *+15,0,7/35926	*"	
$ ( %uT{2"9#(#3!&w *+15,UV[\eVfghVijtVu,v,0/3095:95Ea5H5P6& 67294>8A=B9=Ma=P4:>29.	
)*3&*"	$! !D "E*** 5;.5$Y/"7^ &'-1(QRWXaRbcdRefpRq(r(,+/,516y1A!1DV1L2" 23.50:4=9>y9I!9LV9T5*	%&
/"&	  }]~ 7#65;L5&" &'-9(,(,+/15.2	&	
   <M#6s   DD)r   4Iterator[llama_types.CreateCompletionStreamResponse]rX   z8Iterator[llama_types.CreateChatCompletionStreamResponse]r   )r   r   r)   r   r   chat_completionr   r   s   `       rD   $_convert_completion_to_chat_functionr   s  s    ;O
*$$$!I-3j6FF :d++'!),(  +#'$-)3I)>q)A&)I* '.(2,51;I1Fq1I&1Q-"	' $ !J*U^J_`aJbcmJn o%1+2  (=E
@ G[{	H{	E{	z 36::rF   c                     d d d d ddddddg d d d ddddd	d
dd d d d d d d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fd}|S )Nr   r   r   r   r   Fr   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r3   r4   r)   r*   r+   r,   r-   r.   r/   r0   r5   r6   r7   r8   r1   r9   r:   r2   r;   r<   c                z  (  )|||||      } | j                   |j                  j                  d      |j                   d      }|j                  Q|g nt        |t              r|gn|}t        |j                  t              r|j                  n|j                  g} || z   }d }!|j                  |j                  }!||d   dk(  rt        || j                        }||D "cg c]  }"d|"d		 }}"|:t        |t              r|d
k(  s|dk(  r|}t        |t              rd|v r
dd|d   id	}d }#|t        |t              rw|u|d   d   (t        (fd|D        d       }#|#t        d( d      |#d   d   }$	 t        j                  j!                  t#        j$                  |$      | j                        } | j2                  d*i d|d|d|d|d|	d|
d|r|nd d|d|d|d|d|d|d|d |d!|d"|d#|d$|d%|d&|!d'|d(|}&|#|#d   d   }'t5        |'|&|      S t7        |&|)      S c c}"w # t&        $ rs}%| j                  r$t)        t        |%      t*        j,                         t        j                  j/                  t        j0                  | j                        }Y d }%~%d }%~%ww xY w)+N)rB   r"   r#   r$   r%   zutf-8Tadd_bosspecialr   json_objectverboser   r   r   noneautorg   c              3  :   K   | ]  }|d    d   k(  s|  ywr   rg   Nr?   .0trg   s     rD   	<genexpr>z]chat_formatter_to_chat_completion_handler.<locals>.chat_completion_handler.<locals>.<genexpr>  !     KqQz]6-Bd-JK   Tool choice '' not found in tools.
parametersfiler   r&   r'   r(   r3   r4   r;   r)   r*   r+   r-   r.   r/   r0   r5   r6   r7   r8   r1   r9   r   r:   r2   r)   r?   )tokenizer   encoder   r*   
isinstancert   rp   r   _grammar_for_response_formatr   dictnextrf   llama_grammarLlamaGrammarfrom_json_schemajsondumps	Exceptionprintsysstderrr   	JSON_GBNFcreate_completionr   r   )*rA   rB   r"   r#   r$   r%   r&   r'   r(   r3   r4   r)   r*   r+   r,   r-   r.   r/   r0   r5   r6   r7   r8   r1   r9   r:   r2   r;   r<   rC   resultr   rstopr   r   toolschemaer   r   rg   chat_formatters*                                           @rD   chat_completion_handlerzJchat_formatter_to_chat_completion_handler.<locals>.chat_completion_handler'  s   L  '#
  MM  ),,,

 ;;"2Zc5JD6PTD#-fkk4#@FKKv{{mE%<D ##/ & 8 8&?6+Bm+S2G
   !*
  ' (E  $--'=F+B+-.6]3J&f 5! #;-!z*62DKEKTRD| =6K!LMM*%l3F
'44EEJJv& F   7u66  
 
# 
  
 	 

  
   
 &.\4 
  
  
  
 " 
 . 
 0 
 * 
  
  (! 
" &# 
$ &% 
& ' 
( .) 
* 0+ 
, - 
. "/ 
2 Z(0I7/  ++?OOWL  ==#a&szz2'44@@!++U]] A s   'H9>>H> >	J:A)J55J:<rA   rG   rB   rH   r"   rI   r#   rJ   r$   rK   r%   rL   r&   rM   r'   rM   r(   rN   r3   rM   r4   rM   r)   rO   r*   rP   r+   rQ   r,   rR   r-   rQ   r.   rM   r/   rM   r0   rM   r5   rM   r6   rN   r7   rM   r8   rM   r1   rS   r9   rU   r:   rV   r2   rT   r;   rW   r<   rQ   rX   rY   r?   )r  r  s   ` rD   r   r   $  s    IMQU@DLP 02" $("%#& #!!#@D0415#'&*AMPMP AMP F	MP
 OMP >MP JMP MP MP MP MP MP MP .MP MP 
!MP& "'MP(  )MP* !+MP, -MP. /MP0 1MP2 3MP4 5MP6 7MP8 >9MP: .;MP< /=MP> !?MP@ $AMPD
EMP^ #"rF   c                N    ddl m} |j                  |       	 	 	 	 	 	 dfd}|S )Nr   AutoTokenizerc                    d_         j                  | d      }t        |t              sJ t	        |j
                  d      S )NFr  Tr   r*   r   )use_default_system_promptapply_chat_templater  rt   r   r   )rB   rC   r   	tokenizers      rD   format_autotokenizerz@hf_autotokenizer_to_chat_formatter.<locals>.format_autotokenizer  sL     /4	+33Hu3M&#&&&$	 3 34
 	
rF   r   )transformersr  from_pretrained)pretrained_model_name_or_pathr  r&  r%  s      @rD   "hf_autotokenizer_to_chat_formatterr*    s@     +--.KLI

@



 


  rF   c                .    t        |       }t        |      S r>   )r*  r   )r)  r  s     rD   +hf_autotokenizer_to_chat_completion_handlerr,    s     88UVN4^DDrF   c                H   t        | t              sJ d| v sJ t        | d   t              sJ | d   }d| v sJ t        | d   t              sJ | d   d| v sJ t        | d   t              sJ | d   t        dd      j	                  |      	 	 	 	 	 	 dfd}|S )Nchat_templater   r   Tr   r   c                    rg | t        j                  dd      } j                  |       }t        |gd      S )Nr    r   )rB   r   r   Tr"  )llama_types%ChatCompletionRequestAssistantMessager   r   )rB   rC   r   r   r   envr   s      rD   format_tokenizer_configzFhf_tokenizer_config_to_chat_formatter.<locals>.format_tokenizer_config  sh     !AA$bH   

 %I 6d
 	
rF   r   )r  r  rt   r   r   )tokenizer_configr   r.  r5  r   r4  r   s    `  @@@rD   %hf_tokenizer_config_to_chat_formatterr7    s     &---....&7===$_5M****&{3S999 -I****&{3S999 -I
' k-  

@

 

 
, #"rF   c                2    t        | |      }t        |      S )N)r   )r7  r   )r6  r   r  s      rD   .hf_tokenizer_config_to_chat_completion_handlerr9  	  s!     ;0EN 5^DDrF   c                t    d| vry | d   t         k(  ry| d   t        k(  s| d   t        k(  ry| d   t        k(  ryy )Nztokenizer.chat_templatechatmlmistral-instructllama-3)CHATML_CHAT_TEMPLATEMISTRAL_INSTRUCT_CHAT_TEMPLATEMIXTRAL_INSTRUCT_CHAT_TEMPLATELLAMA3_INSTRUCT_CHAT_TEMPLATE)metadatas    rD   $guess_chat_format_from_gguf_metadatarC    sW     0)*.BB 	*+/MM-.2PP!)*.KKrF   c                8    | D ]  }|d   dk(  s|d   xs dc S  y)zGet the first system message.r   systemr   r1  r?   )rB   r   s     rD   _get_system_messagerF  *  s4      ,6?h&9%++, rF   c                    g }| D ]<  }|d   }||v st        |d   t              r|d   nd}|j                  ||   |f       > |S )zMap the message roles.r   r   N)r  rt   append)rB   role_mapoutputr   r   r   s         rD   
_map_rolesrK  4  sd    
 /1F 5v8&01CS&I	"t  MM8D>7345 MrF   c                    ||g}| |z   }t        |      D ]C  \  }\  }}| r|dk(  r|xs d}	||	||dz     z   z  }%|r|||z   dz   ||dz     z   z  }<||dz   z  }E |S )z(Format the prompt with the llama2 style.r   r1      r   )
system_messagerB   sepsep2sepsretr   r   r   ms
             rD   _format_llama2rV  D  s     ;D
3
C'1 ?D'a1f2A1tAE{?"C4'>C'$q1u+55C4#:C JrF   c                V    | |z   }|D ]  \  }}|r||dz   |z   |z   z  }||dz   z  }  |S )z2Format the prompt with the add-colon-single style.: :r?   rP  rB   rQ  rT  r   r   s         rD   _format_add_colon_singler[  U  sQ     3
C! g4$;(3..C4#:C	
 JrF   c                    ||g}| |d   z   }t        |      D ]'  \  }\  }}|r||dz   |z   ||dz     z   z  } ||dz   z  }) |S )z/Format the prompt with the add-colon-two style.r   rX  rM  rY  rO  )	rP  rB   rQ  rR  rS  rT  r   r   r   s	            rD   _format_add_colon_twor]  b  sp     ;D
47
"C'1 ?D'4$;(4A;66C4#:C	
 JrF   c                D    | }|D ]  \  }}|r|||z   |z   z  }||z  } |S )z1Format the prompt with the no-colon-single style.r?   rZ  s         rD   _format_no_colon_singler_  p  sB     C! g4'>C''C4KC	
 JrF   c                V    | |z   }|D ]  \  }}|r||dz   |z   |z   z  }||dz   z  }  |S )z8Format the prompt with the add-colon-space-single style.rX  r?   rZ  s         rD   _format_add_colon_space_singlera  }  sQ     3
C! g4$;(3..C4$;C	
 JrF   c                p    | dk(  rdn| |z   dz   }|D ]!  \  }}|r||dz   |z   |z   dz   z  }||dz   z  }# |S )z(Format the prompt with the chatml style.r1  
r?   rZ  s         rD   _format_chatmlrd    sd     "$".3*>*EC! g4$;(3.55C4$;C	
 JrF   c                X    d}| r|| z  }|D ]  \  }}|r||dz   dz   |z   z  }||z  } |S )z*Format the prompt with the chatglm3 style.r1  rc  rN  r?   rZ  s         rD   _format_chatglm3rf    sT     C~! g4$;$w..C4KC	
 JrF   c                `    t         j                  j                  t         j                  |       S Nr   )r
  r  r   r  r   s    rD   _grammar_for_jsonri    s+    %%11 2  rF   c                    	 t         j                  j                  | |      S # t        $ r}|rt	        |      cY d }~S |d }~ww xY wrh  )r
  r  r  r  ri  )r  r   fallback_to_jsonr  s       rD   _grammar_for_json_schemarl    sF    ))::67:SS $W55G	s    # 	AAAAAc                z    | d   dk7  ry d| v r#t        t        j                  | d         |      S t        |      S )Nr   r   r  r   )rl  r  r  ri  )r,   r   s     rD   r  r    sI     v-/?"'JJx017
 	
 !11rF   c                     d fd}|S )Nc                R    t        |       }t               j                  |       | S r>   )r   rb   rj   )r|   r  rg   s     rD   r}   z'register_chat_format.<locals>.decorator  s,    "KA"N*,MM)	
 rF   )r|   r   r?   r~   s   ` rD   register_chat_formatrp    s     rF   zllama-2c                    d}t        dd      }t        | |      }t        |       }|r|j                  |      }t	        ||dd      dz   }t        |      S )	Nz([INST] <<SYS>>
{system_message}
<</SYS>>z	<s>[INST]z[/INST]userr   rP  rN  r   r   )r  rK  rF  formatrV  r   )rB   rC   _system_template_roles	_messagesrP  _prompts          rD   format_llama2r{    sc    
 D{i8F8V,I(2N)000O^YVDyPG 00rF   r=  c                    t        ddd      }d}t        | |      }|j                  |d   d f       t        d||      }t	        ||      S )	Nz,<|start_header_id|>system<|end_header_id|>

z*<|start_header_id|>user<|end_header_id|>

z/<|start_header_id|>assistant<|end_header_id|>

)rE  rs  r   z
<|eot_id|>r   r1  r   r*   )r  rK  rH  r_  r   )rB   rC   rx  _sepry  rz  s         rD   format_llama3r    s]    
 ?;EF
 D8V,If[)401%b)T:G d;;rF   alpacac                    t        dd      }d}d}t        |       }t        | |      }t        ||||      }t	        |      S )Nz### Instruction### Responserr  

r   ru  )r  rF  rK  r]  r   )rB   rC   rx  r~  _sep2rP  ry  rz  s           rD   format_alpacar    sL    
 (NCFDE(2N8V,I#NItUKG 00rF   qwenc                    t        dd      }t        |       xs d}d}|j                  |      }t        | |      }|j	                  |d   d f       d}t        |||      }d	}t        ||
      S )N<|im_start|>user<|im_start|>assistantrr  You are a helpful assistant.#<|im_start|>system
{system_message}rt  r   r   z<|endoftext|>r}  )r  rF  rv  rK  rH  rd  r   )	rB   rC   rx  rP  system_templatery  r~  rz  r  s	            rD   format_qwenr    s    
 )5LMF(2T6TN<O$++>+JN8V,If[)401D^Y=GE e<<rF   vicunac                    d}t        dd      }d}d}|}t        | |      }|j                  |d   d f       t        ||||      }t	        |      S )	NzA chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the user's questions.USER	ASSISTANTrr  rN  r   r   ru  )r  rK  rH  r]  r   )	rB   rC   _system_messagerx  r~  r  rP  ry  rz  s	            rD   rv  rv    sd    
 sOv5FDE$N8V,If[)401#NItUKG 00rF   oasst_llamac                    d}t        dd      }d}t        |       }|j                  |      }t        | |      }|j	                  |d   d f       t        |||      }t        |      S )	Nz*[INST] <<SYS>>
{system_message}
<</SYS>>

<|prompter|><|assistant|>rr  r   rt  r   ru  r  rF  rv  rK  rH  r_  r   rB   rC   rw  rx  r~  rP  ry  rz  s           rD   format_oasst_llamar  (  sv    
 H~AFD(2N%,,N,KN8V,If[)401%niFG 00rF   z
baichuan-2c                    d}t        dd      }d}t        |       }|j                  |      }t        | |      }|j	                  |d   d f       t        |||      }t        |      S )	N{system_message}z<reserved_106>z<reserved_107>rr  r1  rt  r   ru  r  r  s           rD   format_baichuan2r  8  w    
 *'3CDFD(2N%,,N,KN8V,If[)401%niFG 00rF   baichuanc                    d}t        dd      }d}t        |       }|j                  |      }t        | |      }|j	                  |d   d f       t        |||      }t        |      S )	Nr  z<reserved_102>z<reserved_103>rr  r1  rt  r   ru  r  r  s           rD   format_baichuanr  H  r  rF   	openbuddyc                    d}t        dd      }d}|}t        | |      }|j                  |d   d f       t        |||      }t	        |      S )Na  You are a helpful, respectful and honest INTP-T AI Assistant named Buddy. You are talking to a human User.
Always answer as helpfully and logically as possible, while being safe. Your answers should not include any harmful, political, religious, unethical, racist, sexist, toxic, dangerous, or illegal content. Please ensure that your responses are socially unbiased and positive in nature.
If a question does not make any sense, or is not factually coherent, explain why instead of answering something not correct. If you don't know the answer to a question, please don't share false information.
You can speak fluently in many languages, for example: English, Chinese.
You cannot access the internet, but you have vast knowledge, cutoff: 2021-09.
You are trained by OpenBuddy team, (https://openbuddy.ai, https://github.com/OpenBuddy/OpenBuddy), you are based on LLaMA and Falcon transformers model, not related to GPT or OpenAI.

User	Assistantrr  rc  r   ru  r  rK  rH  r[  r   )rB   rC   r  rx  r~  rP  ry  rz  s           rD   format_openbuddyr  X  s^    
O v5FD$N8V,If[)401&~y$GG 00rF   zredpajama-incitec                    t        |       }t        dd      }d}d}|}t        | |      }|j                  |d   d f       t	        |||      }t        ||      S )Nz<human>z<bot>rr  rc  r   r}  )rF  r  rK  rH  r[  r   )	rB   rC   r  rx  r~  _stoprP  ry  rz  s	            rD   format_redpajama_inciter  n  sh    
 *(3OyG4FDE$N8V,If[)401&~y$GG e<<rF   snoozyc                    d}d}t        |       }|dk7  r|n|}|j                  |      }t        dd      }d}d	}|}t        | |      }	|	j	                  |d
   d f       t        ||	|      }
t        |
|      S )Nz!### Instruction:
{system_message}zThe prompt below is a question to answer, a task to complete, or a conversation to respond to; decide which and write an appropriate response.r1  rt  z
### Promptr  rr  rc  z###r   r}  )rF  rv  r  rK  rH  r[  r   )rB   rC   r  default_system_messager  rP  rx  r~  r  ry  rz  s              rD   format_snoozyr  ~  s    
 ;O n)(3O*b06L  %++?+KN|~>FDE$N8V,If[)401&~y$GG e<<rF   phindc                    t        dd      }d}d}t        | |      }|j                  |d   d f       t        |||      }t	        |      S )Nz### User Messagez### Assistantrr  r  z?### System Prompt
You are an intelligent programming assistant.r   ru  r  rB   rC   rx  r~  r  ry  rz  s          rD   format_phindr    sX    
 )_EFDXO8V,If[)401&	4HG 00rF   intelc                    t        dd      }d}d}t        | |      }|j                  |d   d f       t        |||      }t	        |      S )Nz	### User:z### Assistant:rr  rc  z### System:
{system_message}r   ru  r  r  s          rD   format_intelr    sX    
 {.>?FD5O8V,If[)401&	4HG 00rF   z	open-orcac           	         d}d}d}d}d}|j                  |      }t        | t        t        ||                  }|j	                  |d   d f       t        |||      }t        ||      S )	Nr  a  You are a helpful assistant. Please answer truthfully and write out your thinking step by step to be sure you get the right answer. If you make a mistake or encounter an error in your thinking, say so out loud and attempt to correct it. If you don't know or aren't sure about something, say so clearly. You will act as a professional logician, mathematician, and physicist. You will also act as the most appropriate type of expert to answer any particular question or solve the relevant problem; state which expert type your are, if so. Also think of any particular named expert that would be ideal to answer the relevant question or solve the relevant problem; name and act as them, if appropriate.)r  r  z<|end_of_turn|>
r  rt  r   r}  )rv  rK  r  r   rH  ra  r   )	rB   rC   r  rP  rolesrQ  stop_strry  rz  s	            rD   format_open_orcar    s    
 )O	B  "E
CH$++>+JN8T#eU*;%<=IeAh%&,^YLG h??rF   mistrallitec                    t        dd      }d}d}t        |       }|j                  |      }t        | |      }|j	                  |d   d f       t        |||      }t        |      S )	Nr  z</s>
<|assistant|>rr  rN  z<|system|>{system_message}</s>rt  r   ru  r  )rB   rC   rx  r~  r  rP  ry  rz  s           rD   format_mistralliter    su    
 ~1FGFD:O(2N$++>+JN8V,If[)401%niFG 00rF   zephyrc                    d}t        |       }|j                  |      }t        dd      }d}t        | |      }|j	                  |d   d f       t        |||      }t        ||      S )	N<|system|>
{system_message}rt  z	<|user|>
z<|assistant|>
rr  r   r   r}  rF  rv  r  rK  rH  rd  r   rB   rC   r  rP  rx  r~  ry  rz  s           rD   format_zephyrr    sw    
O(2N$++>+JN|/@AFD8V,If[)401^Y=G d;;rF   	pygmalionc                    d}t        |       }|j                  |      }t        dd      }d}t        | |      }|j	                  |d   d f       t        |||      }t        ||      S )	Nz<|system|>{system_message}rt  <|user|>z	<|model|>rr  rc  r   r}  r  r  s           rD   format_pygmalionr    sv    
 7O(2N$++>+JNz[9FD8V,If[)401^Y=G d;;rF   r;  c                    d}t        |       }|j                  |      }t        dd      }d}t        | |      }|j	                  |d   d f       t        |||      }t        ||      S )	Nr  rt  r  r  rr  r   r   r}  r  r  s           rD   format_chatmlr    sx    
O(2N$++>+JN)5LMFD8V,If[)401^Y=G d;;rF   r<  c                    d}|}d}| D ]K  }|d   dk(  r$|d   t        |d   t              r|d|d   z   z  }/|d   dk(  s8|d   >|d|d   z   |z   z  }M |dz  }t        ||	      S )
Nr   r1  r   rs  r   z[INST] r   z [/INST]r}  )r  rt   r   )rB   rC   eosr*   r   r   s         rD   format_mistral_instructr    s    
 CDF <FOv%	".79-s3i')"444FV_+	0B0Nj79#55;;F< jF T::rF   chatglm3c                    d}t        |       }|j                  |      }t        dd      }d}t        | |      }|j	                  |d   d f       t        |||      }t        ||      S )	Nr  rt  r  r  rr  r   r   r}  )rF  rv  r  rK  rH  rf  r   r  s           rD   format_chatglm3r  "  sv    
O(2N$++>+JNz_=FD8V,If[)401~y$?G d;;rF   openchatc                    d}t        |       }|j                  |      }t        dd      }d}t        | |      }|j	                  |d   d f       t        |||      }t        ||      S )	Nz{system_message}<|end_of_turn|>rt  zGPT4 Correct User: z'<|end_of_turn|>GPT4 Correct Assistant: rr  z<|end_of_turn|>r   r}  r  r  s           rD   format_openchatr  3  s|    
 8O(2N$++>+JN".WF D8V,If[)401^Y=G d;;rF   saigac                    d}t        ddd      }t        | |      }d}|D ]'  \  }}|r||j                  ||      z  }|d| d	z  }) |d
z  }t        |j	                               S )Nz<s>{role}
{content}</s>rs  botrE  )rs  r  rE  r1  r   r   rc  z<s>botru  )r  rK  rv  r   strip)rB   rC   _message_templaterx  ry  rz  r   r   s           rD   format_saigar  G  s    
 3v5:F8V,IG" &g(//T7/KKGTF"~%G	& xG 88rF   gemmac                    t        |       }|dk7  rt        j                  d       t        dd      }d}t	        | |      }|j                  |d   d f       t        d||      }t        ||	      S )
Nr1  zB`role='system'` messages are not allowed on Google's Gemma models.z<start_of_turn>user
z<start_of_turn>model
rr  z<end_of_turn>
r   )rP  rB   rQ  r}  )rF  r   debugr  rK  rH  r_  r   )rB   rC   rP  rx  r~  ry  rz  s          rD   format_gemmar  ]  sz    
 )2NP	
 .:RSFD8V,If[)401%R)QUVG d;;rF   functionaryr   r   r   r   r   r   r   r    r!   c                  %&'( d%	 	 	 	 	 	 d<(fd(d=(fd'd>d?'(fd&	 	 d@	 	 	 	 	 dA%&fd}||D cg c]  }|d   dk(  s|d    }}|t        |t              r|n|d   } ||||      }|k|t        |      dk(  r[ | j                  dBi d	|d
z   d|d|d|d|	d|
d|dddgd|d|d|d|d|d|d|d|d|d|d|}t	        ||      S |t        |t              rG|d k(  rBd!} | j                  ||d"#      }|d$   d   d%   }|j                  d&      d'   d d' }||z   |z   } nBt        |t              r|d(k7  r|d
z   } n't        |t              r|d)|d*    d
z   } |d*   }n|d
z   } d }!|xs g D ]  }"|"d*   |k(  s|"d+   }! n |xs g D ]   }|d   dk(  s|d   d*   |k(  s|d   d+   }! n |!	 t        | j                  ,      5  t        j                  t        j                  |!            }#t        j                  j                  t        j                  t        j                  |!            | j                  -      }t        |#       d d d        nXt        | j                  ,      5  t        j                  j                  t        j"                  | j                  -      }d d d         | j                  dBi d	| dddgdd"d|d|d|d|d|d|	d|
d|d|d|d|d|d|d|d|d|}d/|v sJ t        |t              sJ |d"u sJ | j                  rt        |        t        |d$   d   d%          t%        j&                  d0|d1   z   d2|d3   |d   dd4d ||d$   d   d%   d5|d||d$   d   d%   d5d6gd7t)        |d$   d   d8         d9d:g|d/   ;      S c c}w # 1 sw Y   `xY w# t         $ r}$| j                  rt        d.       t        |$       t        | j                  ,      5  t        j                  j                  t        j"                  | j                  -      }d d d        n# 1 sw Y   nxY wY d }$~$d }$~$ww xY w# 1 sw Y   xY w)CNA chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the user's questions. The assistant calls functions with appropriate input when necessaryc                   d|z  }d| v r| d   j                  d      d   }|S | j                  d      dk(  r%| j                  di       } ||dz   |      }d	| d
S | j                  d      dk(  rQ| j                  di       }d}|j                         D ]   \  }	}
 |
|dz   |      }|| d|	 d| dz  }" ||dz   z  }|S d| v r&dj                  | d   D cg c]  }d| d
 c}      S | j                  dd      S c c}w N  z$ref/r   r   arrayr   r   zArray<>r   
propertiesz{
rX  ,
}enum | "anysplitgetr   joinparamindent_levelshared_defsindentref_namer   	item_typer  nested_schemanested_param_namenested_paramnested_param_type
enum_valuegenerate_type_definitions                rD   r  z:functionary_chat_handler.<locals>.generate_type_definition  Z    $U?V}**3/H OYYv')IIgr*E0q8H+VII;a((YYv(*<4J!M3=3C3C3E /!<$< ,"2K%! hb!2 326G5HL	 Vc\)M  u_::5=QZ:,a0QRR 99VU++ R   C>c           
        d|z  }d}| j                         D ]d  \  }}|| d| dz  }|j                  d      dk(  r| |||       z  }n-d|v r)|dj                  |d   D cg c]  }d	| d	
 c}      z  }|d
z  }f |S c c}w Nr  r1  type z = r   r   r  r  r  z;
r   r  r  r  r  r  shared_definitionsdef_namedef_propertiesr  r  s          rD   generate_shared_definitionsz=functionary_chat_handler.<locals>.generate_shared_definitions      $(3(9(9(; 	($HnVHE(3"??!!&)X5"&>"L+' " >)"ejj9G9OP:qA&P' " %'	( "! Q   #Bc           	     N   d}|d| dz  }i }| D ]5  }|j                  di       }|j                  |j                  di              7 | |d      z  }| D ]  }|d   }|j                  dd	      }|j                  di       }|j                  d
g       }|d| dz  }|d| dz  }|j                  di       j                         D ]@  \  }	}
|
j                  dd	      } |
d|      }|	|v rd	nd}|d| dz  }|d|	 | d| dz  }B |dz  } |dj                  |      z  }|S )NH// Supported function definitions that should be called when necessary.

namespace  {

r   $defsr   rg   descriptionr1  requiredz  // rc  z  type 	 = (_: {
r  rM  ?z    // z    rX  r  z  }) => any;

z}} // namespace {}
r  updater   rv  r"   	namespacer  r  r   r   function_namer  required_params
param_namer  param_description
param_typeoptional_indicatorr  r  s                 rD   generate_schema_from_functionsz@functionary_chat_handler.<locals>.generate_schema_from_functions  s   W 	 	Jyk11  ! 	CH!lB7J%%jnnWb&AB	C 	-.@!DD! 	)H$V,M",,}b9K!lB7J(nnZ<Ok]"--Fk::F%/^^L"%E%K%K%M S!
E$)IImR$@!5eQ@RS
+5+HRc"G$5#6b99D-?,@:,cRRS ((F	)" 	(//	::rF   c                x   g }|,|j                  t        j                  d 	|                   |E|j                  t        j                  d 	|D cg c]  }|d   dk(  r|d    c}                   |j                  t        j                  d             | D ]?  }|d   dk(  rd|v rd|d    |d<   d|v rd|d   d    |d   d<   |j                  |       A |j                  t        j                  d	d              dd
}dj	                  |D cg c]
  } ||       c}      S c c}w c c}w )NrE  r   r   r   r   rg   
functions.r#   r   c                D   | d   dk(  r	d| d    dS | d   dk(  rd| v rd| d    d	| d    dS | d   dk(  rd
| v rd| d
   d    d	| d
   d    dS | d   dk(  r| d   d| d    d	| d    dS d| d    dS | d   dk(  r| d   yd| d    dS | d   dk(  r| d   d
| v rd| d    d| d
   d    d	| d
   d    dS d
| v rd| d
   d    d	| d
   d    dS d| v r/t        | d         dkD  r| d   D ]  }d|d    d	|d   d    dc S  y | d   yd| d    dS t        d| d          )Nr   rE  zsystem:
r   rc  r   rg   zfunction name=:
r#   r   r  tool_call_idrs  zuser:
</s></s>
z
user:
</s>z</s>
r   assistant:
z
assistant to=zassistant to=r   r   r   zUnsupported role: )lenrf   )msg	tool_calls     rD   message_to_strzXfunctionary_chat_handler.<locals>.prepare_messages_for_inference.<locals>.message_to_str  sE   6{h&"3y>"2"55V
*v}'F}CI7GrJJV
*#/E'O(<V(D'ES_I]^iIjHkkmnnV&y>-+C,?+@C	NCSSUVV+C,?+@CCV&y>).(Y(8??V+y>-/S2H)#i.)9_I]^dIeHffijmn}j~  @K  kL  jM  MS  T  T$+*3+?+G*HCP_L`alLmKnntuu!S(S\1B-Ca-G%($& n	 "/y.?s9ZCXYdCeBfflmmn ^+&)#i.)9<< #5c&k]!CDDrF   r1  )r$  z(llama_types.ChatCompletionRequestMessage)rH  r2  "ChatCompletionRequestSystemMessager3  r  )
rB   r"   r$   all_messagesr  r   r&  r$  SYSTEM_MESSAGEr  s
           rD   prepare_messages_for_inferencez@functionary_chat_handler.<locals>.prepare_messages_for_inference  s   
 HJ >>!+I)+T >>!: ). $#F|z9 !,	 	::~	
   		)Gv*,71B$.wv.?"@') !!9&!A BC ( (		) 	== $	
!	EF ww|Ds+DEEGF Es   D2D7r   r   r   r   r   r&   r'   r(   r3   r4   r)   r*   zuser:r   r-   r.   r/   r0   r5   r6   r7   r8   r1   r9   r:   r  r   rc  F)r   r*   r)   r   r   .r   r   z to=functions.rg   r   disabler   MFailed to parse function body as JSON schema, falling back to default grammarr   r   r   r   r   r   r   r   r   r;   r   r   r   r  zDict[str, llama_types.JsonType]r  rN   rX   rt   r  rN   rX   rt   r"   rX   rt   NN)rB   rH   r"   3Optional[List[llama_types.ChatCompletionFunctions]]r$   rK   r?   )r  rt   r#  r  r   r  r  r   r   r
  json_schema_to_gbnfr  r  r  r   r  r  r  r2  CreateChatCompletionResponser   ))rA   rB   r"   r#   r$   r%   r&   r'   r(   r3   r4   r)   r*   r,   r-   r.   r/   r0   r5   r6   r7   r8   r1   r9   r:   rC   r*  r  r   completion_or_completion_chunksr   completion_text
new_promptfunction_bodyr   grammar_textr  r)  r  r  r  s)                                        @@@@rD   functionary_chat_handlerr<  r  s<   : zN,.,>A,	,B"" H JN@DUF@UFFUF >UFn 27V$4<:;UT*%V	V%k37K[=T 	 ,HiGF)"3s9~7J*A%*A*A +
E>+
#+
 +
 	+

 +
  +
 +
 6"+
 "+
 .+
 0+
 *+
 +
 (+
 &+
  &!+
" #+
$ .%+
& '+
'* ++JSYZZ=#&=F+B-DU-D-DU.

 %Y/26:'--c226s;o-4
	M3	'MV,Ce^
	M4	(}V/D.ESII
%f-e^
MO F},$\2M  <:%$z*:6*Bm*S ,\:M
  	'> $,@@JJ}-  (44@@!55djj6OP!MM A  l#$* $EMM: 	#00<<'' = G	
 *A)@)@ **v* * 	*
 *  * * * * * ** ,* &* * $*  "!*" "#*$ %*& *'*J, j   mS)))U??}}jj#A&v./ 33Jt$$ 9%! '# -%/	%:1%=f%E& #0$.(5-7	-B1-Ef-M)	#$ FjQZF[\]F^_iFjk!-+
2 != s W@$ $  
	}}c a'> '44@@!++!MM A   
		 	s`   N4N4 O BN9O ::Q$9O>O 	Q!8Q:Q
	Q
Q	QQ!$Q.zfunctionary-v1zfunctionary-v2c                   	
456789:;<=> d8 j                   }t        |d      sJ d       ddlm} d|j                  j
                  v rd>d}d	}d
}d}d} d}!n
d>d6d5d7d4	 	 	 	 	 	 dV<fd<dW<fd;dXdY;<fd:	 	 	 dZ	 	 	 	 	 	 	 	 	 	 	 d[8:fd}"D #cg c]  }#|#d   dk(  s|#d    c}#|t        |t              r|n|d   }n|nd} |"||>|      }$|dk(  st              dk(  r>dk(  r}n7}|$dz  }$  j                  d\i d|$dddd	d 
d!d"|d#d$d%d&d'd(d)d*d+d,d-|}%d.u r"|%d/   d   d0   j                         |%d/   d   d0<   t        |%1      S  fd2= 	
fd39d4}&g g }(}'d})45679=>fd5}*d.ur |*||$6      S >dk(  r_t        |t              r
|dk(  rd7g}+nDt        |t              r.|$  |d8    d9z  }$!}+|d8   }|'j                  |        =|      }n|$}$d7g}+ 9|$|+|:      },|,d/   d   d0   }-|)|,d;   d<   z  }) |$vr| |-vr|)|,d;   d<<   t        |,1      S | |$vr| |-v r|$|-j                  |  d=|       d7z   z  }$|'j                  |-j                  |       d>   d d> j!                                 =|'d>         } 9|$!|:      },|)|,d;   d<   z  })|(j                  |,d/   d   d0   j!                                n|(j                  |-j!                                n}t        |t              rq|$|d8    d74 z  }$|d8   }|'j                  |        =|      }75g}+ 9|$|+|:      },|,d/   d   d0   }-|)|,d;   d<   z  })|(j                  |-j!                                nt        |t              r|dk(  r	 d }4}+ 9|$|+|:      },|,d/   d   d0   }-|)|,d;   d<   z  })|-j!                         }.|.d?k(  r|$dz  }$n1|-j!                         }|$| d@z  }$|'j                  |        =|      }67g}+ 9|$|+|:      },|,d/   d   d0   }-|)|,d;   d<   z  })|.d?k(  r|-j#                  dA      r|&|-d t        dA        z  }&|-j#                  dB      r|&|-t        dB          z  }&n|&|-z  }&|&j                         }&dC|-v sdD|-v rw|-j#                  dA      r|-d t        dA        j!                         }/n?|-j#                  dB      r|-t        dB          j!                         }/n|-j!                         }/|$|/ dEz  }$nlnm|(j                  |-j!                                |$|-j!                         z  }$d } 9|$|+|:      },|)|,d;   d<   z  })dC|,d/   d   d0   v sdD|,d/   d   d0   v r|$dEz  }$nnd;,v sJ t        |'      t        |(      k(  sJ g }0t%        |'|(      D ]x  \  }}1|0j                  dFd4j'                  t)        dG      D 2cg c]6  }2t+        j,                  t.        j0                  t.        j2                  z         8 c}2      z   d||1dHdI       z i }3t        |0      dkD  r"|0|3dJ<   n|0d   d   d8   |0d   d   dK   dH|3dL<   |)|,d;   d<<   t5        j6                  dM|,dN   z   dO|,dP   |,d+   dt9        |,d/   d   dQ         dR|&d4k(  rd n|&dS|3t        |0      dkD  rdJnd"dTg|,d;   U      S c c}#w c c}2w )]Nr  hf_tokenizerznPlease provide a valid hf_tokenizer_path from https://huggingface.co/meetkai when initializing the Llama classr   r  z<|START_OF_FUNCTION_CALL|>v1z<|END_OF_SYSTEM|>z<|END_OF_USER|>z<|END_OF_ASSISTANT|>z<|END_OF_FUNCTION_RESULT|>z<|END_OF_FUNCTION_CALL|>v2z<|recipient|>z<|from|>z<|stop|>z<|content|>c                   d|z  }d| v r| d   j                  d      d   }|S | j                  d      dk(  r%| j                  di       } ||dz   |      }d	| d
S | j                  d      dk(  rQ| j                  di       }d}|j                         D ]   \  }	}
 |
|dz   |      }|| d|	 d| dz  }" ||dz   z  }|S d| v r&dj                  | d   D cg c]  }d| d
 c}      S | j                  dd      S c c}w r  r  r  s                rD   r  z@functionary_v1_v2_chat_handler.<locals>.generate_type_definition  r  r  c           
        d|z  }d}| j                         D ]d  \  }}|| d| dz  }|j                  d      dk(  r| |||       z  }n-d|v r)|dj                  |d   D cg c]  }d	| d	
 c}      z  }|d
z  }f |S c c}w r  r  r  s          rD   r  zCfunctionary_v1_v2_chat_handler.<locals>.generate_shared_definitions.  r  r  c                L   d}|d| dz  }i }| D ]5  }|j                  di       }|j                  |j                  di              7 | |d      z  }| D ]  }|d   }|j                  dd	      }|j                  di       }|j                  d
g       }|d| dz  }|d| dz  }|j                  di       j                         D ]?  \  }	}
|
j                  dd	      } |
d|      }|	|v rd	nd}|d| dz  }||	 | d| dz  }A |dz  } |dj                  |      z  }|S )Nr
  r  r  r   r  r   rg   r  r1  r  z// rc  r   r  r  rM  r  rX  r  z}) => any;

z}} // namespace {}r  r  s                 rD   r  zFfunctionary_v1_v2_chat_handler.<locals>.generate_schema_from_functions?  s   W 	 	Jyk11  ! 	CH!lB7J%%jnnWb&AB	C 	-.@!DD! 	'H$V,M",,}b9K!lB7J(nnZ<OK=++Fm_K88F%/^^L"%E%K%K%M O!
E$)IImR$@!5eQ@RS
+5+HRc"C 12"55ZL);(<Bzl#NNO &&F	'" 	&--i88rF   r   c                   g }|dk(  r-|j                  t        j                  d g                    n{|-|j                  t        j                  d |                   nL|J|dk7  rE|j                  t        j                  d |D cg c]  }|d   dk(  r|d    c}                   |j                  t        j                  d
             | D ]?  }|d   dk(  rd|v rd|d    |d<   d	|v rd|d	   d    |d	   d<   |j                  |       A |d
k(  rd}	nd}	|j                  j	                  |d      |	z   S c c}w )Nr   rE  r   r   r   r   rg   r  r#   r?  r"  z<|from|>assistant
<|recipient|>Fr!  )rH  r2  r'  r>  r$  )rB   r%  versionr"   r$   r%   r(  r  r   suffixr)  r  s             rD   r*  zFfunctionary_v1_v2_chat_handler.<locals>.prepare_messages_for_inferencea  s    HJ& >>!+I"+M $##BB%/Mi/X
 "{f'<##BB% > -2$(#'<:#= !%Z 0!	 	::~	
   		)Gv*,71B$.wv.?"@') !!9&!A BC ( (		) d?#F7F ""66|e6T	
?s   Er   r   r   all
<|content|>r   r&   r'   r(   r3   r4   r)   r*   r-   r.   r/   r0   r5   r6   r7   r8   r1   r9   r:   Fr   r   r  c                   d }xs g D ]  }|d   | k(  s|d   } n 	xs g D ]   }|d   dk(  s|d   d   | k(  s|d   d   } n 	 t        j                        5  t        j                  t	        j
                  |            }t        j                  j                  t        j                  t	        j
                  |                  }t        |       d d d        |S # 1 sw Y   S xY w# t        $ r}j                  rt        d       t        |       t        j                        5  t        j                  j                  t        j                  j                        }d d d        n# 1 sw Y   nxY wY d }~S d }~ww xY w)Nrg   r   r   r   r,  r.  r   )r   r   r
  r5  r  r  r  r   r  r  r  )
r#   r:  r   r  r;  r:   r  r"   rA   r$   s
          rD   get_grammarz3functionary_v1_v2_chat_handler.<locals>.get_grammar  s|   !R 	H=0 ( 6	 KR 	DF|z)d:.>v.F-.W $Z 0 >	
	'> $,@@JJ}-  (44@@!55djj6OP l#$& '$&   		}}c a'> '44@@!++U]] A   
 		sO   C. A9C!C. !C+&C. +C. .	F	78F/:E2)	F2E;	7FF	c           	         t        t        j                   j                  di d| ddddddd|d	d
dddd
dd	ddd|      }|S )Nr   r&   r'   r(   r3   r4   r)   r*   r-   r.   r/   r0   r5   r6   r7   r8   r1   r9   r:   r?   )r   r2  
Completionr  )r   r*   r:   r   r/   rA   r9   r-   r3   r8   r6   r7   r1   r.   r0   r)   r&   r5   r(   r'   r4   s       rD   r  z9functionary_v1_v2_chat_handler.<locals>.create_completion  s    ""#E## '  	
  $   & "2 #4  .  , *  *!" #$ "2%&  '

2 rF   r1  c              3  V  K   dk(  sJ d       d\  }}t        |t              r||d    d z  } |d         }g}dj                  t        d      D cg c]6  }t	        j
                  t        j                  t        j                  z         8 c}      }	 |||      }
d}d	}|
D ]  }|rT| d
dd|	z   d|d   dddgi}n
d|d   ddi}t        j                  d|d   z   d|d   |d   dd d d d|dg       d}| (d
dd|	z   dd |d   d   d   j                         ddgi}ndd |d   d   d   j                         di}t        |d   d   d   j                               dkD  st        j                  d|d   z   d|d   |d   dt        |d   d   d         d d d|dg        t        j                  dd   z   d|d   |d   d| d
ndd d d d d ddg       y t        |t              r|dk(  rd}	 d }} |||      }
d}|
D ]  }||d   d   d   z  } |d   }|d   }|j                         }|d k(  r1|d!z  }t        j                  d|z   d   |ddd"ddd d d#g$       n|| d%z  } |      }dj                  t        d      D cg c]6  }t	        j
                  t        j                  t        j                  z         8 c}      }	| d
|d|	z   d|dddgi}nd|ddi}t        j                  d|z   d|d   dt        |d   d   d         d"d d|dg       g} |||      }
|d k(  rbd}d&g d}}}t!        |
      D ]  \  }}||d   d   d   z  }|r|j#                  |d   d   d   j                  d'             |j%                  dj                  |            ra|j'                          t        |      dkD  rZt        j                  d|z   d||d   dt        |d   d   d         d"|j'                  d      ddg       t        |      dkD  rZd}n;|d   d   d   dk(  r-d	}|j#                  |d   d   d   j                  d'             t        |      dk(  s't        |d   d   d         dkD  s@t        j                  d|z   d||d   dt        |d   d   d         d"|dkD  r|d   d   d   n|d   d   d   j)                         ddg        d(|v sd)|v rx|j+                  d*      r|d t        d*        j                         }n?|j+                  d+      r|d t        d+        j                         }n|j                         }|| d&z  }n~t        j                  d|z   |d   |ddi d d,d#g$       y d}|
D ]  }||d   d   d   z  }t        |d   d   d   j                               dkD  s7| (d
|d	z   dd |d   d   d   j                         ddgi}ndd |d   d   d   j                         di}t        j                  d|z   d||d   dt        |d   d   d         d d d|dg        ||j                         z  }d } |||      }
|dj                  |
D cg c]  }|d   d   d    c}      z  }d(|v sd)|v r| |d&z  }|d-z  }n2t        j                  d|z   d|d   d| d
ndd d d d d ddg       y 
y y c c}w c c}w c c}w w).Nr@  z!Streaming for v1 is not supportedr3  rg   rc  r1     r   r*   r:   Tr   r   call_r   r   r   r#   r   r   r   r   r1   r   )r   r;   r   r   Fr   r   r;   r   r   r   allrG  r   r   r   
<|content|> 
<|from|>assistant
<|recipient|>rN  <|from|> assistant<|from|>assistant
<|from|>assistant

<|from|> assistant
r*   r   )r  r  r  rangerandomchoicestringascii_lettersdigitsr2  "CreateChatCompletionStreamResponserstripr#  r   rt   r  r   rH  
startswithpoplstripendswith)r$   r"   r#   r   chunk_idchunk_createdr:   stopsr   r   r   r8  r   r   func_call_dict
tool_indexr  stop_sequencebufferis_endr   cleaned_completion_textCONTENT_TOKEN
FROM_TOKENRECIPIENT_TOKEN
STOP_TOKENr  rI  rE  s                         rD   generate_streamingz:functionary_v1_v2_chat_handler.<locals>.generate_streaming  si
    $C CC",- mT*v./r-AAF!-"78G,EggNSTViXv33fmmCDXG +&ugVJ OE# P((-.*1G*;,60=f0E571&	!"
+* ,(5f(=-/.* &HH!E$K/6 %i 0#Gn *+,0,0/3*" '5*"
! " "E$$)*&-&7(2,016y1A!1DV1L1S1S1U-"	
'&N ($().y)9!)<V)D)K)K)M*&N uY'*6299;<q@%HH!E$K/6 %i 0#Gn *+,UV[\eVfghVijtVu,v,0/3*" '5*"
! APd @@E$K'.i(Gn "#,1,=L?$($('+-1*.	" , s+0GJ%.!w
 #%' CE#uY'7':6'BBOC#$T{H ($))$4M / 5 5 7 E)00F%HH!H,#Gn -6 *+2=")M,015	!  }==F)-8G gg &+2Y ! #MM&*>*>*NOG ((-7*1G*;,60=571&	!"
+* ,mRT-U* &HH!H,6 -#Gn *+,UV[\eVfghVijtVu,v,7/3*" '5*"
! $ )*5.!w
 !E)&(O< ,26M
 %.j$9 55'5+;A+>v+FF!"MM%	*:1*=f*E*K*KC*PQ,77H ( &

&)&kAo*5*X*X+1H+</F0=.3Gn :;<efklufvwxfy  {E  gF  =G<G?Ezz!}:2-.	1*+& %& '*&kAo" */"9-a08D@%)F"MM%	*:1*=f*E*K*KC*PQ$v;!+E)4DQ4G4O0PST0T"-"P"P#)H#4'>(5&+Gn 234]^cdm^nop^qr|^}4~4? 45q5 16i0@0CF0K5:95Ea5H4:6228&(	2*%&)"# A5p -?./A*334KL6E ?3'>#?"?7#eg 4 -556NO6E @3'?#@"@7#eg 4 7F6K6K6M3%<$==_"`` *LL%0"'.$1#: ./-/045;	!"%   ')O!+ ,'5+;A+>v+FFuY/26:AACDqH$0$05?29G2C4>8<=B9=Ma=P4:>228&(	9.	
)*3&2"" %4045:95Ea5H,26**0&(	6&2" #."P"P#)H#4'>(5&+Gn 234]^cdm^nop^qr|^}4~487;2* /=2*%&
)"# 9,Z o3355F"G!2%E7"J $rwwBLMy)!,V4M( O -?./A+"FF"a
 *LL%0#:$1"'. ./ ,1+< )5-<0404379=6:	.&!"% . O  1H+[ YfD NsO   A\);\C\)5D;\)0;\+E\)A\)\)2E	\)<B8\)4\$
A#\))r$   r"   r#   r   rc  rg   r   rN  r   completion_tokensrN  r   rP  rQ  rU  rV  rS  rT  rR  rO  rM  r   r   r   r   r#   r   r   r   r   r;   r   r   )r   r;   r   r   r   r/  r0  r1  r2  )NNr   )rB   rH   r%  r  rE  zLiteral['v1', 'v2']r"   r4  r$   rK   r%   zUnion[Dict, str]r?   )
tokenizer_hasattrr'  r  r>  additional_special_tokensr  rt   r#  r  ra  r   r  rH  replacer  r  rb  r   r  rW  rX  rY  rZ  r[  r\  r2  r6  r   )?rA   rB   r"   r#   r$   r%   r&   r'   r(   r3   r4   r)   r*   r,   r-   r.   r/   r0   r5   r6   r7   r8   r1   r9   r:   rC   r%  r  END_SYSTEM_TOKENEND_USER_TOKENEND_ASSISTANT_TOKENEND_FUNCTION_RESULT_TOKENSTART_FUNCTION_CALL_TOKENEND_FUNCTION_CALL_TOKENr*  r  r   r7  r   function_callsfunction_bodiesrq  rp  re  r   r8  r  rk  r   r:  r   function_call_dictrl  rm  rn  ro  r)  r  r  r  r  rI  rE  s?   ` ` ` ``````  ``````````                            @@@@@@@@@@@rD   functionary_v1_v2_chat_handlerr    s	   < zN  I> xwx  +#y'='='W'WW.*4$@!$@!"<)

%,.,>A,	,B"" L JN@D(.=
@=
 =
 %=
 G	=

 >=
 &=
~ 27V$4<:;UT*%V	%k37K[=T 	 
	"+)WiF
 )"3s9~7Jd?&DD((F*A%*A*A +
+
#+
 +
 	+

 +
  +
 +
 +
 "+
 .+
 0+
 *+
 +
 (+
 &+
  &!+
" #+
$ .%+
& '+
'* U?/	:1=fELLN ,I6q9&A ++JSYZZB  8 G&("ONA AF U!9MRX
 	
 d?---62I23M4067f8M7NcRR/ -f 5%%m4%m423*&ugVJ(3A6v>OG!45H!II *7-_D;L
7#$782:fMM *7-@#++45Q79R  %%#))*CDRH"MSSU &nR&89.!(?
 "Z%89L%MM!&&z)'<Q'?'G'M'M'OP  &&'<'<'>? -.]6232m_EE -f 5%%m4%m4#Z0.!w
 #-Y"7":6"B!Z%89L%MM!&&'<'<'>?M3/MV4K"G)E!2%E7"J '1&;A&>v&FO%G)<=P)QQ%$3$9$9$;M$-"44(7(=(=(?]O="AA&--m<"-m"<,j9E!2%E7"J '1&;A&>v&FO%G)<=P)QQ%$-*334KL#7V#>U:V9V'WWG*334LM#<T8U7U'VVG#6G").."2 1OC2oE.778OP:I$Cs+B'C&C;""'%' !8 "1!9!9:R!S:I%()A%B$B;""'%' !8 ;J:O:O:Q 7")@(AAc&ddF!'../D/D/FG/"7"7"99"&%6#)w&
 *Z-@AT-UU)0Jy4I!4LV4TT2j6KA6Nv6VV"&JJF!C F *$$$>"c/&::::FH
,/,P 	(M=!gg &+2Y ! #MM&*>*>*NO ' -%2!	2  	 z?Q 3="<0 'qM*5f=!+Az!:;!G7"?3 4E
7/077
4(($y)W%  I*U^J_`aJbcmJn o ++2b=4g  - 
 69_q5H\f	 W%#
 	
M WPs   -[2;[2	;[7c                  ^   e Zd ZU dZded<   dZdddZddZdddZddddd	d
ddddg ddddddddddddddddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ	e
dd       Ze
d d       Ze
d!d       Ze	 	 	 d"	 	 	 	 	 	 	 	 	 	 	 	 	 d#d       Zy)$Llava15ChatHandlerzA chat between a curious human and an artificial intelligence assistant.  The assistant gives helpful, detailed, and polite answers to the human's questions.rS   DEFAULT_SYSTEM_MESSAGEa%  {% for message in messages %}{% if message.role == 'system' %}{{ message.content }}{% endif %}{% if message.role == 'user' %}{% if message.content is string %}
USER: {{ message.content }}{% endif %}{% if message.content is iterable %}
USER: {% for content in message.content %}{% if content.type == 'image_url' and content.image_url is string %}{{ content.image_url }}{% endif %}{% if content.type == 'image_url' and content.image_url is mapping %}{{ content.image_url.url }}{% endif %}{% endfor %}{% for content in message.content %}{% if content.type == 'text' %}{{ content.text }}{% endif %}{% endfor %}{% endif %}{% endif %}{% if message.role == 'assistant' and message.content is not none %}
ASSISTANT: {{ message.content }}{% endif %}{% endfor %}{% if add_generation_prompt %}
ASSISTANT: {% endif %}c                <    dd l m} | _        | _        | _        t                _        d  _        d  _        t        j                  j                  |      st        d|       t         j                        5   j                  j                   j                  j                         d      }|t        d|       | _         fd} j                  j#                  |       d d d         fd} j                  j#                  |       y # 1 sw Y   *xY w)Nr   z Clip model path does not exist: r,  zFailed to load clip model: c                     t         j                        5   j                  j                   j                         d d d        y # 1 sw Y   y xY wNr,  )r   r   
_llava_cpp	clip_freeclip_ctxr   s   rD   r  z.Llava15ChatHandler.__init__.<locals>.clip_free
  s:    +DLLA =OO--dmm<= = =s   &AAc                     t         j                        5   j                  , j                  j	                   j                         d  _        d d d        y # 1 sw Y   y xY wr  )r   r   _last_image_embedr  llava_image_embed_freer   s   rD   last_image_embed_freez:Llava15ChatHandler.__init__.<locals>.last_image_embed_free
  sP    '= 2))5OO::4;Q;QR-1D*2 2 2s   9AA#)llama_cpp.llava_cpp	llava_cppclip_model_pathr   r  r   _exit_stackr  _last_image_hashospathexistsrf   r   clip_model_loadr  r  callback)r@   r  r   r  r  r  r  s   `      rD   r   zLlava15ChatHandler.__init__
  s    /.#$;  	 04ww~~o.??PQRR#DLL9 	166t7K7K7R7R7TVWXH #>>O!PQQ$DM= %%i0	1	2 	!!"78)	1 	1s   =A,DDc                $    | j                  |      S r>   )_load_image)r@   	image_urls     rD   
load_imagezLlava15ChatHandler.load_image
  s    	**rF   c           
     H   | j                   0| j                  $t        |      | j                  k(  r| j                   S t        | j                        5  | j                   3| j
                  j                  | j                          d | _         d | _        | j
                  j                  | j                  |t        j                  t        |      z  j                  t        |            t        |            }|| _         t        |      | _        |cd d d        S # 1 sw Y   y xY wr  )r  r  hashr   r   r  r  !llava_image_embed_make_with_bytesr  ctypesc_uint8r#  from_buffer	bytearray)r@   image_bytesn_threads_batchembeds       rD   _embed_image_bytesz%Llava15ChatHandler._embed_image_bytes
  s    "".%%1[!T%:%::)))#DLL9 	%%166t7M7MN)-&(,%OOEE#k"22??k* K E &+D"$($5D!!	 	 	s   B;DD!Nr   r   r   r   r   Fr   r   r   r    r!   r   c          	     
  2 | j                   J t        |      }|dk(  r1| j                  %t        j                  d| j                        g|z   }| j                  |      } t        dd      j                  | j                        }!|!j                  |d |j                   |j                         g       |j                   |j                         g            }"| j                  |"|       }#| j                  rt        |"t         j"                          |j$                          |j&                  j)                          |#D ]  \  }$}%|$dk(  r |j*                  |%j-                  d	      d
d      }&|j.                  t1        |&      z    |j2                         kD  r6t5        d|j.                  t1        |&      z    d |j2                                 |j6                  |&       | j9                  |%      }'| j;                  |'|j<                  j>                        }(|j.                  |(j@                  jB                  z    |j2                         kD  rAt5        d|j.                  |(j@                  jB                  z    d |j2                                tE        jF                  |j.                        })tE        jH                  |)      }*tK        | j                        5  | jL                  jO                  |jP                  |(|jR                  |*       d d d        d|jT                  |j.                  |)jV                   |)jV                  |_         |jT                  d |j.                   jY                         }+||d   dk(  rt[        |      }||D ,cg c]  },d|,d	 }},|:t]        |t^              r|dk(  s|dk(  r|}t]        |t`              rd|v r
dd|d   id}d }-|t]        |t`              rw|u|d   d   2tc        2fd|D        d       }-|-t5        d2 d      |-d   d   }.	 td        jf                  ji                  tk        jl                  |.      |j                        } |jr                  d3i d|+d|d|d|	d |
d!|d"|r|nd d#|d$|d%|d&|d'|d(|d)|d*|d+|d,|d-|d.|d/|d0|d1|}0|-|-d   d   }1tu        |1|0|      S tw        |0|2      S # 1 sw Y   xY wc c},w # tn        $ rt}/|j                  r$t        t_        |/      t         j"                         td        jf                  j                  td        jp                  |j                        }Y d }/~/d }/~/ww xY w)4Nr1  rE  r   Tr/  )rB   r   r   r   r  r   utf8Fr   zPrompt exceeds n_ctx: z > r,  r   r   r   r   r   r   r   rg   c              3  :   K   | ]  }|d    d   k(  s|  ywr   r?   r   s     rD   r   z.Llava15ChatHandler.__call__.<locals>.<genexpr>N  r   r   r   r   r   r   r   r&   r'   r(   r3   r4   r;   r)   r*   r+   r-   r.   r/   r0   r5   r6   r7   r8   r1   r9   r:   r2   r  r?   )<r  rF  r  r2  r'  get_image_urlsr   r   CHAT_FORMATr   
detokenize	token_eos	token_bossplit_text_on_image_urlsr   r  r  r  reset_ctxkv_cache_clearr  r  n_tokensr#  n_ctxrf   evalr  r  context_paramsr  contentsn_image_posr  c_intpointerr   r  llava_eval_image_embedctxn_batch	input_idsvaluetolistr  r  rt   r  r	  r
  r  r  r  r  r  r  r  r   r   )3r@   rA   rB   r"   r#   r$   r%   r&   r'   r(   r3   r4   r)   r*   r+   r,   r-   r.   r/   r0   r5   r6   r7   r8   r1   r9   r:   r2   r;   r<   rC   system_prompt
image_urlsr   r   
split_texttype_r  r   r  r  n_pastn_past_pr   r   r  r  r  r   r   rg   s3                                                     @rD   rE   zLlava15ChatHandler.__call__
  s   N }}(((+H5B4#>#>#J>>!4+F+F 	H ((2
0
 +d&&
' 	 "&&e&&(9':;&e&&(9':;	  
 224D
<<$SZZ( 	

!!#& 	.LE5'LL(% >>CK/+%++-?$0#f+1M0NcR]RWR]R]R_Q`a  

6""ooe4//U=Q=Q=a=ab>>ENN$>$>>N$0%..B\B\1\0]]`alafalalan`op   enn5!>>&1+DLLA OO::		 	 BD>!'9	.> !15>>299;&?6+Bm+S2?CG   !*
  ' (E  $--'=F+B+-.6]3J&f 5! #;-!z*62DKEKTRD| =6K!LMM*%l3F
'44EEJJv& F   7u66  
 
# 
  
 	 

  
   
 &.\4 
  
  
  
 " 
 . 
 0 
 * 
  
  (! 
" &# 
$ &% 
& ' 
( .) 
* + 
, "- 
0 Z(0I7/  ++?OO{ &L  ==#a&szz2'44@@!++U]] A s+   3S S-(>S2  S*	2	U/;A)U**U/c                   | j                  d      r)dd l}|j                  | j                  d      d         }|S dd l}|j
                  j                  |       5 }|j                         }|cd d d        S # 1 sw Y   y xY w)Nzdata:r   ,r   )r_  base64	b64decoder  urllib.requestrequesturlopenread)r  r  r  urllibr|   s        rD   r  zLlava15ChatHandler._load_image}  ss     ( **9??3+?+BCK!''	2 #affh"# # #s   A66A?c                   g }| D ]  }|d   dk(  s|d   |d   D ]g  }t        |t              sd|v s|d   dk(  s"t        |d   t              rd|d   v r|j                  |d   d          T|j                  |d          i  |S )Nr   rs  r   r   r  url)r  r  rH  )rB   r  r   r   s       rD   r  z!Llava15ChatHandler.get_image_urls  s     "
 	HGv&(9%-&y1 	HG!'40Vw5F"6?k9 *7;+? F$)W[-A$A * 1 1'+2Fu2M N * 1 1'+2F G	H		H rF   c                    dd}g }| }|rn |||      \  }}|H|F|dkD  r|j                  d|d | f       |j                  d||   f       ||t        ||         z   d  }n|j                  d|f       d}|rn|S )Nc                b    t        |      D ]!  \  }}| j                  |      }|dk7  s||fc S  y)Nr   r3  )r   find)ssubstrsr   substrposs        rD   
find_firstz?Llava15ChatHandler.split_text_on_image_urls.<locals>.find_first  s<    &w/ "	6ffVn"96M" rF   r   r   r  r1  )r  rt   r  	List[str])rH  r#  )r   r  r  r  	remainingr  r   s          rD   r  z+Llava15ChatHandler.split_text_on_image_urls  s    	 FH
		:6FC1=7%%vy#&?@!!;
1">?%cC
1,>&>&@A	!!69"56	  rF   c                   dd l }ddlm} 	 ddlm}	m}
 ddlm}  ||        |
       }|j                  |      D cg c]  }t        |t              r|d   n| }}g }|D ]3  } ||      j                  |      }|j                  t        |             5 |D cg c]  }|j                  ||      s| }}t        |      dk(  r't!        d| d| d	t#        j$                  |             t        |      d
kD  r't!        d| d| d	t#        j$                  |             |\  }t         ||      j&                        } ||      j(                  } |	|||t+        t,        t        |d f   |      |t+        t,        t        |d f   |             |( |	|||||t+        t,        t        |d f   |      d      }n t.        j0                  j3                  ||      } | dd|i|S # t        $ r t        d      w xY wc c}w c c}w )Nr   )Path)hf_hub_downloadHfFileSystem)validate_repo_idzrLlama.from_pretrained requires the huggingface-hub package. You can install it with `pip install huggingface-hub`.rg   zNo file found in z that match z

Available Files:
r   zMultiple files found in z
 matching )repo_idfilename	subfolder	local_dirlocal_dir_use_symlinks	cache_dirT)r  r  r  r  r  r  local_files_onlyr  r?   )fnmatchpathlibr  huggingface_hubr  r  huggingface_hub.utilsr  ImportErrorlsr  r  relative_torH  rt   r#  rf   r  r  parentrg   r   r   r  r  r  )clsr  r  r  r  r  rC   r  r  r  r  r  hffsr  files	file_listrel_pathmatching_filesmatching_filer  
model_paths                        rD   r(  z"Llava15ChatHandler.from_pretrained  sL    	 	E> 	!~ (
 'tT2DL<
 
  "	 	,DDz--g6HS]+	, ,5X4h8W$XX~!##G9L
 C%%)ZZ	%:$;= 
 ~"*7):hZ H%%)ZZ%6$79 
 *]+223	&++ 	5dD19=#95dD19=	
 (!##'=uS$_5yA!%J i:J 
&

 	
  	I 	
 Ys   G% G=H2H%G:T)r  rt   r   rO   )r  rt   rX   r   )r   )r  r   r  rN   r  )rB   rH   )r   rt   r  r  )Nr   N)r  rt   r  rS   r  &Optional[Union[str, os.PathLike[str]]]r  zUnion[bool, Literal['auto']]r  r  rC   r   rX   z'Llava15ChatHandler')r[   r\   r]   r  rw   r  r   r  r  rE   staticmethodr  r  r  classmethodr(  r?   rF   rD   r  r  \
  s    	h M 
	 F$9L+< IMQU@DLP 02" $("%#& #!!#@D0415#'&*CuP uP A	uP
 FuP OuP >uP JuP uP uP uP uP uP uP .uP  !uP"
#uP( ")uP*  +uP, !-uP. /uP0 1uP2 3uP4 5uP6 7uP8 9uP: >;uP< .=uP> /?uP@ !AuPB $CuPF
GuPn # #  $  . 
 =A?E<@Q
Q
  Q
 :	Q

 !=Q
 :Q
 Q
 
Q
 Q
rF   r  c                      e Zd ZdZy)ObsidianChatHandlera<  {% for message in messages %}{% if message.role == 'system' %}<|im_start|>system
{{ message.content }}
###
{% endif %}{% if message.role == 'user' %}<|im_start|>user
{% if message.content is string %}{{ message.content }}{% endif %}{% if message.content is iterable %}{% for content in message.content %}{% if content.type == 'image_url' and content.image_url is string %}{{ content.image_url }}{% endif %}{% if content.type == 'image_url' and content.image_url is mapping %}{{ content.image_url.url }}{% endif %}{% endfor %}{% for content in message.content %}{% if content.type == 'text' %}{{ content.text }}{% endif %}{% endfor %}{% endif %}###
{% endif %}{% if message.role == 'assistant' %}<|im_start|>assistant
{{ message.content }}###
{% endif %}{% endfor %}{% if add_generation_prompt %}<|im_start|>assistant
{% endif %}Nr[   r\   r]   r  r?   rF   rD   r  r    s    (	 rF   r  c                      e Zd ZdZy)MoondreamChatHandlera  {% for message in messages %}{% if message.role == 'user' %}{% if message.content is iterable %}{% for content in message.content %}{% if content.type == 'image_url' %}{% if content.image_url is string %}{{ content.image_url }}

{% endif %}{% if content.image_url is mapping %}{{ content.image_url.url }}

{% endif %}{% endif %}{% endfor %}{% for content in message.content %}{% if content.type == 'text' %}Question: {{ content.text }}

{% endif %}{% endfor %}{% endif %}{% if message.content is string %}Question: {{ message.content }}

{% endif %}{% endif %}{% if message.role == 'assistant' %}Answer:{{ message.content }}

{% endif %}{% endfor %}{% if add_generation_prompt %}Answer:{% endif %}Nr  r?   rF   rD   r  r  D  s    "	 rF   r  c                      e Zd ZdZdZy)Llava16ChatHandlerzA chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions. a  {% for message in messages %}{% if message.role == 'system' %}{{ message.content }}{% endif %}{% if message.role == 'user' %}{% if message.content is iterable %}{% for content in message.content %}{% if content.type == 'image_url' %}{% if content.image_url is string %}{{ content.image_url }}
{% endif %}{% if content.image_url is mapping %}{{ content.image_url.url }}
{% endif %}{% endif %}{% endfor %}{% for content in message.content %}{% if content.type == 'text' %}{{ content.text }}{% endif %}{% endfor %}{% endif %}{% if message.content is string %}{{ message.content }}{% endif %}{% endif %}{% if message.role == 'assistant' %}{{ message.content }}{% endif %}{% endfor %}{% if add_generation_prompt %}Answer:{% endif %}Nr[   r\   r]   r  r  r?   rF   rD   r  r  n  s     }%	 rF   r  c                      e Zd ZdZdZy)NanoLlavaChatHandlerzAnswer the questionaM  {% for message in messages %}{% if message.role == 'system' %}<|im_start|>system
{{ message.content }}<|im_end|>{% endif %}{% if message.role == 'user' %}<|im_start|>user
{% if message.content is string %}{{ message.content }}{% endif %}{% if message.content is iterable %}{% for content in message.content %}{% if content.type == 'image_url' and content.image_url is string %}{{ content.image_url }}{% endif %}{% if content.type == 'image_url' and content.image_url is mapping %}{{ content.image_url.url }}{% endif %}{% endfor %}{% for content in message.content %}{% if content.type == 'text' %}{{ content.text }}{% endif %}{% endfor %}{% endif %}<|im_end|>{% endif %}{% if message.role == 'assistant' %}<|im_start|>assistant
{{ message.content }}<|im_end|>{% endif %}{% endfor %}{% if add_generation_prompt %}<|im_start|>assistant
{% endif %}Nr  r?   rF   rD   r  r    s     3(	 rF   r  c                      e Zd ZdZdZy)Llama3VisionAlphaChatHandlerNa  {% for message in messages %}<|start_header_id|>{% if message.role == 'user' %}user<|end_header_id|>

{% if message.content is iterable %}{% for content in message.content %}{% if content.type == 'image_url' %}{% if content.image_url is string %}{{ content.image_url }}{% endif %}{% if content.image_url is mapping %}{{ content.image_url.url }}{% endif %}{% endif %}{% endfor %}{% for content in message.content %}{% if content.type == 'text' %}{{ content.text }}{% endif %}{% endfor %}{% endif %}{% if message.content is string %}{{ message.content }}{% endif %}{% endif %}{% if message.role == 'assistant' %}assistant<|end_header_id|>

{{ message.content }}{% endif %}<|eot_id|>{% endfor %}{% if add_generation_prompt %}<|start_header_id|>assistant<|end_header_id|>

{% endif %}r  r?   rF   rD   r  r    s     "&	 rF   r  c                      e Zd ZdZdZy)MiniCPMv26ChatHandlerr  a  {% for message in messages %}{% if loop.first and messages[0]['role'] != 'system' %}<|im_start|>system
You are a helpful assistant.<|im_end|>
{% endif %}<|im_start|>{{ message['role'] }}
{% if message['content'] is iterable %}{% for content in message['content'] %}{% if content.type == 'image_url' %}{% if content.image_url is string %}{{ content.image_url }}{% endif %}{% if content.image_url is mapping %}{{ content.image_url.url }}{% endif %}{% endif %}{% endfor %}{% for content in message['content'] %}{% if content.type == 'text' %}{{ content.text }}{% endif %}{% endfor %}{% endif %}{% if message['content'] is string %}{{ message['content'] }}{% endif %}<|im_end|>
{% endfor %}{% if add_generation_prompt %}<|im_start|>assistant
{% endif %}Nr  r?   rF   rD   r  r  
  s    ;	 rF   r  zchatml-function-callingc                  - d}t        t        j                  ddg      t        j                        j	                  |      }||D cg c]  }d|d	 }}|:t        |t              r|dk(  s|dk(  r|}t        |t              rd	|v r
dd	|d	   id}t        |t              r|d
gn
|r|d
gz   nd
g}|%t        |t              r|dk(  s|t        |      dk(  r|j                  |g d d      }||d   dk(  rt        |      }t         | j                  dOi d|d|d|d|d|	d|
d|d|d|d|d|d|d|d|d|d|d |d!|d"|d#|r|nd |$      S t        |t              r|d   d	   -t        -fd%|D        d       } | t        d&- d'      |j                  ||dd      }|d(- d)z  }	 t        j                   j#                  t%        j&                  | d   d*         | j(                  +      } | j                  dOi d|d|d|d|d|	d|
d|d|d|d|d|d|d|d|d|d|d |d!|d"|}"t1        -|"|      S t        |t              r|dk(  sJ d-j3                  |D  cg c]  } d.| d   d	    d/ c}       }#d0|# d1}$d2|# d1}%|j                  ||dd      } | j                  dOi d|ddd|d|d|	d|
dd3dd4gdd d|d|d|d|d|d|d|d |d!|d"t        j                   j	                  |$| j(                  +      }"|"}&|&d5   d   d6   }'d7|'v rt         | j                  dOi d|d8z   d|d|d|d|	d|
d|dd
gd#|r|nd dd d|d|d|d|d|d|d|d |d!|d"t        j                   j	                  |%| j(                  +      |$      S |'t        d(      d  -t        -fd9|D        d       } |sg }(g })| |d(- d)z  }	 t        j                   j#                  t%        j&                  | d   d*         | j(                  +      } | j                  dOi d|d|d|d|d|	d|
dd3d|dd d|d|d|d|d|d|d|d |d!|d"|}"t5        t6        j8                  |"      }"|(j;                  |"       |)j;                  -       ||"d5   d   d6   z  }|d1z  } | j                  dOi d|d|d|d|d|	d|
dd3d|dd d|d|d|d|d|d|d|d |d!|d"t        j                   j	                  |%| j(                  +      }*t5        t6        j8                  |*      }*|*d5   d   d6   t        d(      d  -t        -fd:|D        d       } | t        |(      d;k(  rd<-|(d   d5   d   d6   d=ini }+d>|&d?   z   d@|&dA   |&d    dBdt=        |&d5   d   d#         dCd t?        tA        |)|(            D ,-&cg c]-  \  },\  }-}&dDdE|, dEz   |-z   dEz   |&d?   z   d|-|&d5   d   d6   d=dF/ c}&}-},dG|+dHgtC        dI |(D              tC        dJ |(D              tC        dK |(D              dLdMS t        dN      c c}w # t*        $ rf}!t        j                   j	                  t        j,                  | j(                  +      }| j(                  rt/        d,       t/        |!       Y d }!~!d }!~!ww xY wc c} w # t*        $ rf}!t        j                   j	                  t        j,                  | j(                  +      }| j(                  rt/        d,       t/        |!       Y d }!~!d }!~!ww xY wc c}&}-},w )PNa  {% for message in messages %}<|im_start|>{{ message.role }}
{% if message.role == 'system' %}{{ message.content }}{% if tool_calls %}

You have access to the following functions:
{% for tool in tools %}
functions.{{ tool.function.name }}:
{{ tool.function.parameters | tojson }}
{% endfor %}

You can respond to users messages with either a single message or one or more function calls.

To respond with a message begin the message with 'message:', use the following format:

message:
<message>

To respond with one or more function calls begin the message with 'functions.<function_name>:', use the following format:

functions.<function_name>:
{ "arg1": "value1", "arg2": "value2" }
functions.<function_name>:
{ "arg1": "value1", "arg2": "value2" }{% endif %}<|im_end|>
{% endif %}{% if message.role == 'user' %}{{ message.content }}<|im_end|>
{% endif %}{% if message.role == 'assistant' %}{% if message.content and message.content | length > 0 %}{% if tool_calls %}message:
{% endif %}{{ message.content }}<|im_end|>
{% endif %}{% if 'tool_calls' in message %}{% for tool_call in message.tool_calls %}functions.{{ tool_call.function.name }}:
{{ tool_call.function.arguments }}{% endfor %}<|im_end|>
{% endif %}{% endif %}{% endfor %}{% if add_generation_prompt %}<|im_start|>assistant
{% endif %}htmlxml)
autoescape	undefinedr   r   r   r   rg   r   r   T)rB   r$   r   r   r   r   r   r&   r'   r(   r3   r4   r)   r*   r-   r.   r/   r0   r5   r6   r7   r8   r1   r9   r:   r;   r  c              3  :   K   | ]  }|d    d   k(  s|  ywr   r?   r   r  r   s     rD   r   z*chatml_function_calling.<locals>.<genexpr>  s"     MdtJ'7'?9'LTMr   zTool with name 'z' not found in toolsr  r   r   r   r.  r  z"functions.z:"z0root   ::= functions | "message:"
functions ::= rc  z2root   ::= functions | "<|im_end|>"
functions ::= FrY  r   r   r   z	message:
c              3  :   K   | ]  }|d    d   k(  s|  ywr   r?   r  s     rD   r   z*chatml_function_calling.<locals>.<genexpr>S  "     Q$4
+;F+Cy+PQr   c              3  :   K   | ]  }|d    d   k(  s|  ywr   r?   r  s     rD   r   z*chatml_function_calling.<locals>.<genexpr>  r  r   r   r#   r   r   r   r   r   r   r   rO  r   r   )r   r   r   )r   r   r;   r   c              3  8   K   | ]  }d |v r|d    d   nd  yw)r   rq  r   Nr?   r   r   s     rD   r   z*chatml_function_calling.<locals>.<genexpr>  s7      ) # #j0 #7+,?@)   c              3  8   K   | ]  }d |v r|d    d   nd  yw)r   prompt_tokensr   Nr?   r  s     rD   r   z*chatml_function_calling.<locals>.<genexpr>  s0      %" =Dz<QJw'8WXX%r  c              3  8   K   | ]  }d |v r|d    d   nd  yw)r   total_tokensr   Nr?   r  s     rD   r   z*chatml_function_calling.<locals>.<genexpr>  s0      $" <Cj;PJw'7VWW$r  )rq  r  r  r   z0Automatic streaming tool choice is not supportedr?   )"r   r   select_autoescapeStrictUndefinedr   r  rt   r  r#  r   r  r   r  r	  rf   r
  r  r  r  r  r   r  r  r  r   r  r   r2  CreateCompletionResponserH  r   r   r   sum).rA   rB   r"   r#   r$   r%   r&   r'   r(   r3   r4   r)   r*   r,   r-   r.   r/   r0   r5   r6   r7   r8   r1   r9   r:   r;   r<   rC   function_calling_templatetemplate_rendererr   r   r  r  r   function_namesinitial_gbnf_tool_grammarfollow_up_gbnf_tool_grammarr   r   completionscompletions_tool_nameresponser~  r   r   s.                                                `rD   chatml_function_callingr&  0  s   F0	K f 6++VUO<(( k+,   &

  #$
 
  mS)V#}'>'KmT*v/F"M&1K dC  
|&*T\N" 	 	{C([F-B=u:?"))"&	 * 
 &?6+Bm+S2?CG*#E## '  	
  $   & "2 #4  .  , *  *!" #$ "2%&  '( *2t), /
 	
6 +t$
+F3	MeMt
 </	{:NOPP"))"&	 * 
 	Jyk--	#00AA

4
+L9:EMM B G  7u66  
 
# 
  
 	 

  
   
  
  
 " 
 . 
 0 
 * 
  
 ( 
 & 
  &! 
" # 
$ .% 
& ' 
* 4+V
 	

 k3'K6,AAAZZDIJD[j)&12"	7JN	)*"	0 
	)*"	0   %%"	 & F 3522   	
    U  * , &  $ "  "!" #$ *%& **66%u}} 7 
'. 8LJi #F+DD*#E## ,'  	
  $  #^ *2t   "2 #4  .  ,  *!" *#$ %& "2'( &22>>/ ? )0 3
 	
: S&()IQ%QSWXDBD+-
9+S11F'44EEJJtJ/=> F  $;5#:#: $$'$ $ 	$
 $ $$ $ $  $ "2$ #4$  .$ $ ,$ *$  *!$" #$$ "2%$&  '$ * $(446J$  34!((3*95a8@@FdNF.u.. '  	
  $     "2 #4  .  , *  *!" #$ "2%& &22>>/ ? 'H. K@@(KH +A.v6s<7H7JKIQ%QSWDM p ;1$  %!,Q	!:1!=f!E"  	" :d++'!),( &2 I*U^J_`aJbcmJn o +#' ?H #$9; G?' ' !;#:Iz '.$%aS('+"+', #&'& #-T"2	'3
 )3,51;I1Fq1I&1Q-"' ( -) 	< &) ) '2) & "% %&1% " !$ $&1$ !E4
 4	
l G
HHy

t  	#00<<'' = G }}c a	J 	Kd  '44@@!++U]] A  ==g !HD'sF   	Y4;AY9 ;[+9A[0 42]"9	[(A[##[(0	]9A]]rv   ru   )r;   z(Optional[llama_types.CompletionLogprobs]rX   z"llama_types.ChatCompletionLogprobs)r   zllama_types.CompletionrX   zllama_types.ChatCompletion)r   r   rX   z)Iterator[llama_types.ChatCompletionChunk]rs   )r   aUnion[llama_types.CreateCompletionResponse, Iterator[llama_types.CreateCompletionStreamResponse]]r)   rO   rX   zZUnion[llama_types.CreateChatCompletionResponse, Iterator[llama_types.ChatCompletionChunk]])r   rt   r   r'  r)   rO   )r  r   rX   r   )r)  Union[str, os.PathLike[str]]rX   r   )r)  r(  rX   r   r  )r6  Dict[str, Any]r   rO   rX   r   )r6  r)  r   rO   rX   r   )rB  Dict[str, str]rX   rS   )rB   rH   rX   rt   )rB   rH   rI  r*  rX   List[Tuple[str, Optional[str]]])
rP  rt   rB   r+  rQ  rt   rR  rt   rX   rt   )rP  rt   rB   r+  rQ  rt   rX   rt   )r   rO   )FT)r  rt   r   rO   rk  rO   )r,   z/llama_types.ChatCompletionRequestResponseFormatr   rO   r   )rB   z.list[llama_types.ChatCompletionRequestMessage]rC   r   rX   r   )4rA   rG   rB   rH   r"   rI   r#   rJ   r$   rK   r%   rL   r&   rM   r'   rM   r(   rN   r3   rM   r4   rM   r)   rO   r*   rP   r,   rR   r-   rQ   r.   rM   r/   rM   r0   rM   r5   rM   r6   rN   r7   rM   r8   rM   r1   rS   r9   rU   r:   rV   rX   zLUnion[llama_types.ChatCompletion, Iterator[llama_types.ChatCompletionChunk]])8rA   rG   rB   rH   r"   rI   r#   rJ   r$   rK   r%   rL   r&   rM   r'   rM   r(   rN   r3   rM   r4   rM   r)   rO   r*   rP   r,   rR   r-   rQ   r.   rM   r/   rM   r0   rM   r5   rM   r6   rN   r7   rM   r8   rM   r1   rS   r9   rU   r:   rV   r;   rW   r<   rQ   rX   rY   )t
__future__r   r  r  r  r  dataclassesrX  rZ  
contextlibr   typingr   r   r   r   r	   r
   r   r   r   r   r   jinja2.sandboxr   numpynpnumpy.typingnptllama_cpp.llamarA   llama_cpp.llama_typesr2  llama_cpp.llama_grammarr
  _loggerr   _utilsr   r   r>  CHATML_BOS_TOKENCHATML_EOS_TOKENr?  MISTRAL_INSTRUCT_BOS_TOKENMISTRAL_INSTRUCT_EOS_TOKENr@  rA  r   r  r`   rb   ry   rj   	dataclassr   r   r   r   r   r   r   r   r   r*  r,  r7  r9  rC  rF  rK  rV  r[  r]  r_  ra  rd  rf  ri  rl  r  rp  r{  r  r  r  rv  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  Llama3VisionAlphar  r&  r?   rF   rD   <module>r@     s   " 	 
           8    + /  5
 a    "A " #  "z  !l 
0 0f	) 	 B 
  
  
 $H $C?- C?L6'2&0(
@(
.(
` <<
 <<"n;n;n; n;bR#!R#R#j #?  2E#?EE #'-#$-#-# -#d #'E$EE  E.<< % #BILTW"

#B
IL

#BILTW

#B
IL



#B
IL



#B
IL

#BIL BF			:>	 2D22$ i 1<11 1 !1  i <<<< < !<  h
1<
1
1 
1  
1 f=<== = =  h1<11 1  1 m$1<11 1 %1 l#1<11 1 $1 j!1<11 1 "1 k"1<11 1 #1* ()=<== = *= h=<== =  =* g
1<
1
1 
1 
1 g
1<
1
1 
1 
1 k"@<@@ @ #@4 m$1<11 1 %1 h<<<< <  <  k"<<<< < #< h<<<< <  <  ();<;; ; *;( j!<<<< < "<  j!<<<< < "<& g9<99 9 9* g<<<< < <( "-0 EIMQ<@HL,.QU $!"<@,03bb<b Bb K	b
 :b Fb b b b b b b *b Ob b  !b" #b$ %b& 'b( )b* +b, -b. /b0 :1b2 *3b6 R7b 1bJ ""23!"23 EIMQ<@HL,.QU $!"<@,03

<
 B
 K	

 :
 F
 
 
 
 
 
 
 *
 O
 
  !
" #
$ %
& '
( )
* +
, -
. /
0 :1
2 *3
6 R7
 4 4
Dm
 m
`5, 5p'- 'T-+ -`4- 4n.#5 .d 1 #. #L "";< EIMQ<@HL,.QU $!"<@,0#"&7wIwI<wI BwI K	wI
 :wI FwI wI wI wI wI wI wI *wI OwI wI  !wI" #wI$ %wI& 'wI( )wI* +wI, -wI. /wI0 :1wI2 *3wI4 5wI6  7wI:;wI =wIrF   