~/tools / Fichiers de modèle et chat templates / Hugging Face Chat Template Tester
Hugging Face Chat Template Tester — Rendez un chat template Hugging Face et voyez le prompt exact
Collez un chat template de Hugging Face (Jinja) ou le tokenizer_config.json complet d'un modèle, ajoutez messages et tools, et voyez le texte exact du prompt que produit apply_chat_template(..., tokenize=False) de transformers. L'outil exécute Jinja2 avec les mêmes réglages de sandbox que transformers : le texte, les erreurs et leurs numéros de ligne sont donc les mêmes qu'en Python. Rien ne quitte votre navigateur.
Collez le template Jinja (chat_template.jinja), ou le tokenizer_config.json ou chat_template.json complet issu des fichiers du modèle sur Hugging Face.
Une liste JSON de messages, la même liste que vous passez à apply_chat_template.
Une liste JSON de définitions d'outils (JSON Schema). Laissez-la vide pour n'avoir aucun outil.
Ajoute à la fin le début d'un tour de l'assistant, pour que le modèle écrive une réponse (si le template le permet).
Laisse le dernier message ouvert pour que le modèle le poursuive (prefill). Impossible à utiliser avec add_generation_prompt.
D'autres valeurs passées à apply_chat_template comme arguments nommés, sous forme d'objet JSON, comme {"enable_thinking": false}. Les variables que lit le template sont listées sous la sortie.
Plus d'options
transformers passe au template les tokens spéciaux du tokenizer. Ils sont remplis quand vous collez tokenizer_config.json.
Pour les templates qui prennent en charge documents (RAG) : une liste JSON d'objets comme {"title": "…", "text": "…"}.
L'heure que renvoie strftime_now(). Laissez vide pour utiliser l'heure actuelle.
Texte du prompt
<|im_start|>system
You are a helpful assistant.
# Tools
You can call these functions:
<tools>
{"type": "function", "function": {"name": "get_weather", "description": "Get the current weather in a city.", "parameters": {"type": "object", "properties": {"city": {"type": "string", "description": "City name"}}, "required": ["city"]}}}
</tools>
To call one, reply with JSON inside <tool_call></tool_call>.<|im_end|>
<|im_start|>user
What's the weather in Paris?<|im_end|>
<|im_start|>assistant
<tool_call>
{"name": "get_weather", "arguments": {"city": "Paris"}}
</tool_call><|im_end|>
<|im_start|>user
<tool_response>
{"temperature": 22}
</tool_response><|im_end|>
<|im_start|>assistant
À propos de ce template
- Variables qu'il lit
- Définies par apply_chat_template : add_generation_prompt, messages, toolsTokens spéciaux : aucuneAutres : aucune
- Utilise {% generation %}
- Non
Vérifier en Python
Exécutez ceci pour comparer avec transformers. Remplacez MODEL_ID par le modèle, ou passez votre template avec chat_template=.
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("MODEL_ID")
messages = [
{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'user', 'content': "What's the weather in Paris?"},
{'role': 'assistant', 'content': '', 'tool_calls': [{'type': 'function', 'function': {'name': 'get_weather', 'arguments': {'city': 'Paris'}}}]},
{'role': 'tool', 'name': 'get_weather', 'content': '{"temperature": 22}'},
]
tools = [
{'type': 'function', 'function': {'name': 'get_weather', 'description': 'Get the current weather in a city.', 'parameters': {'type': 'object', 'properties': {'city': {'type': 'string', 'description': 'City name'}}, 'required': ['city']}}},
]
text = tokenizer.apply_chat_template(
messages,
tools=tools,
add_generation_prompt=True,
tokenize=False,
)
print(text)La sortie est le texte avant la tokenisation. transformers le tokenise ensuite avec add_special_tokens=False : les tokens spéciaux n'apparaissent donc que là où le template les écrit.
Quand des tools sont fournis et que le modèle a un template nommé tool_use, transformers utilise celui-là. Vous pouvez aussi choisir un template par son nom.
messages, tools et documents sont lus comme le module json de Python : les nombres entiers deviennent int et les nombres avec une virgule décimale deviennent float, ce qui peut changer la façon dont le template les affiche.
Vérifié le 2026-11-09 avec transformers 5.22.2 et Jinja2 3.1.6 (Python 3.14). transformers : chat templates · Code source de transformers
Tout s'exécute dans votre navigateur. Rien de ce que vous collez n'est envoyé ni enregistré.
La plupart des modèles ouverts de Hugging Face fournissent un chat template : un petit programme Jinja qui transforme une liste de messages en texte que le modèle lit réellement. Une espace manquante, un BOS en double ou un prompt de génération erroné change ce que voit le modèle, et le template est difficile à lire sans l'exécuter. Cet outil l'exécute comme le fait transformers. Nous avons porté Jinja2 3.1.6 en JavaScript : son analyseur lexical, son analyseur syntaxique, les règles sur les variables visibles et à quel endroit, le pliage des constantes, le sandbox qu'utilise transformers et tous les filtres et tests intégrés, ainsi que le comportement propre à Python pour les chaînes, les nombres, le tri et les messages d'erreur. Par-dessus, il suit apply_chat_template de transformers 5.22.2 : tokens spéciaux comme bos_token, le template tool_use quand des tools sont fournis, add_generation_prompt, continue_final_message, documents, reasoning_content et les portions {% generation %}. Nous avons rendu les chat templates de 39 modèles ouverts (Qwen, Llama, Mistral, Gemma, Phi, DeepSeek, gpt-oss et d'autres) avec 15 types de conversations, et les 585 résultats correspondaient à transformers. Plus de 20 000 autres templates de test correspondaient aussi, erreurs et numéros de ligne compris, sauf quelques-uns qui utilisent le filtre random, dont le résultat est aussi aléatoire en Python.
Cas d'usage
- Voir le prompt exact que reçoit un modèle avant de le fine-tuner ou de le servir : tokens BOS et EOS, espaces, retours à la ligne et prompt de génération
- Trouver les commutateurs qu'un template lit, comme enable_thinking, et voir ce qu'ils changent
- Déboguer un chat template que vous écrivez, avec les erreurs et les numéros de ligne, tools, documents et continue_final_message
Utilisation
- Collez un chat template, ou le tokenizer_config.json ou chat_template.json complet d'un modèle, ou choisissez un exemple.
- Modifiez messages et tools (les mêmes listes JSON que vous passez en Python) et réglez add_generation_prompt et les autres options.
- Lisez le texte du prompt et les variables que le template utilise, et copiez le code Python pour vérifier la même entrée dans transformers.
FAQ
Le résultat est-il le même que celui d'apply_chat_template ?
C'est le même que celui d'apply_chat_template(..., tokenize=False), le texte avant la tokenisation. Les tokens spéciaux, add_generation_prompt, continue_final_message, tools et documents sont traités comme dans transformers 5.22.2. L'outil ne convertit pas le texte en token IDs.
D'où viennent bos_token et eos_token ?
En Python, ils viennent du tokenizer. Quand vous collez tokenizer_config.json, l'outil les y lit. Sinon, saisissez-les dans Plus d'options.
À quoi sert {% generation %} ?
Certains templates entourent les réponses de l'assistant de {% generation %} … {% endgeneration %}. transformers utilise ces portions pour return_assistant_tokens_mask, par exemple pour entraîner uniquement sur les tokens de l'assistant. L'outil les met en évidence dans la sortie.
vLLM, llama.cpp ou d'autres serveurs donneront-ils le même texte ?
D'autres logiciels peuvent rendre le même template avec un autre moteur ou d'autres réglages, et leur sortie peut donc différer. Cet outil suit transformers.
Pourquoi une variable comme enable_thinking est-elle listée sous Autres ?
Le template la lit, mais apply_chat_template ne la définit pas. Passez-la comme variable supplémentaire (par exemple {"enable_thinking": false}) pour changer la sortie, comme vous passeriez enable_thinking=False en Python.
Mon template est-il envoyé quelque part ?
Non. Tout s'exécute dans votre navigateur.