Spaces:
Runtime error
Runtime error
import json | |
import jinja2 | |
from llama_cpp import ( | |
ChatCompletionRequestUserMessage, | |
) | |
import llama_cpp.llama_types as llama_types | |
import llama_cpp.llama_chat_format as llama_chat_format | |
from llama_cpp.llama_chat_format import hf_tokenizer_config_to_chat_formatter | |
def test_mistral_instruct(): | |
chat_template = "{{ 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 %}" | |
chat_formatter = jinja2.Template(chat_template) | |
messages = [ | |
llama_types.ChatCompletionRequestUserMessage(role="user", content="Instruction"), | |
llama_types.ChatCompletionRequestAssistantMessage(role="assistant", content="Model answer"), | |
llama_types.ChatCompletionRequestUserMessage(role="user", content="Follow-up instruction"), | |
] | |
response = llama_chat_format.format_mistral_instruct( | |
messages=messages, | |
) | |
reference = chat_formatter.render( | |
messages=messages, | |
bos_token="<s>", | |
eos_token="</s>", | |
) | |
assert response.prompt == reference | |
mistral_7b_tokenizer_config = """{ | |
"add_bos_token": true, | |
"add_eos_token": false, | |
"added_tokens_decoder": { | |
"0": { | |
"content": "<unk>", | |
"lstrip": false, | |
"normalized": false, | |
"rstrip": false, | |
"single_word": false, | |
"special": true | |
}, | |
"1": { | |
"content": "<s>", | |
"lstrip": false, | |
"normalized": false, | |
"rstrip": false, | |
"single_word": false, | |
"special": true | |
}, | |
"2": { | |
"content": "</s>", | |
"lstrip": false, | |
"normalized": false, | |
"rstrip": false, | |
"single_word": false, | |
"special": true | |
} | |
}, | |
"additional_special_tokens": [], | |
"bos_token": "<s>", | |
"clean_up_tokenization_spaces": false, | |
"eos_token": "</s>", | |
"legacy": true, | |
"model_max_length": 1000000000000000019884624838656, | |
"pad_token": null, | |
"sp_model_kwargs": {}, | |
"spaces_between_special_tokens": false, | |
"tokenizer_class": "LlamaTokenizer", | |
"unk_token": "<unk>", | |
"use_default_system_prompt": false, | |
"chat_template": "{{ 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 %}" | |
}""" | |
def test_hf_tokenizer_config_str_to_chat_formatter(): | |
tokenizer_config = json.loads(mistral_7b_tokenizer_config) | |
chat_formatter = hf_tokenizer_config_to_chat_formatter( | |
tokenizer_config | |
) | |
chat_formatter_respoonse = chat_formatter( | |
messages=[ | |
ChatCompletionRequestUserMessage(role="user", content="Hello, world!"), | |
] | |
) | |
assert chat_formatter_respoonse.prompt == ("<s>[INST] Hello, world! [/INST]</s>" "") | |