~/tools / Fichiers de modèle et chat templates / Ollama Template Tester

Ollama Template Tester — Exécutez un TEMPLATE Ollama et voyez le prompt exact

Collez le TEMPLATE d'un modèle Ollama (issu de ollama show --template ou de votre Modelfile), ajoutez une conversation, des outils ou un prompt, et voyez le texte exact qu'Ollama remet au modèle : tokens spéciaux, retours à la ligne et tout le reste. L'outil exécute le modèle de prompt comme le fait Ollama, avec les règles des templates de Go, les données d'Ollama (messages, tool calls, outils, think) et ses trois façons d'exécuter un template. Il indique aussi si Ollama utilisera votre TEMPLATE ou le chat template contenu dans le fichier GGUF, et quand Ollama refuse une requête avec des outils ou du thinking. Rien ne quitte votre navigateur.

Exemples

ollama show --template <model> affiche le template d'un modèle que vous avez. Le texte entre les triples guillemets après TEMPLATE dans un Modelfile convient aussi.

Requête

La même forme que /api/chat : role, content et, en option, thinking, tool_calls, tool_name et images.

La même forme que tools dans /api/chat. Laissez vide pour ne pas utiliser d'outils.

Avancé : le SYSTEM du modèle et son chat template GGUF

La ligne SYSTEM du Modelfile. Ollama l'ajoute quand le premier message n'est pas un message système (dans /api/generate, quand system est vide).

Collez-le pour voir si Ollama utilise TEMPLATE ou celui-ci. GGUF Metadata Viewer l'affiche.

Ce que reçoit le modèle

<|im_start|>system
You are a helpful assistant.

# Tools

You may call one or more functions to assist with the user query.

You are provided with function signatures within <tools></tools> XML tags:
<tools>
{"type": "function", "function": {get_weather Get the current weather for a city {object <nil> <nil> [city] {"city":{"type":"string","description":"City name"}}}}}
</tools>

For each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:
<tool_call>
{"name": <function-name>, "arguments": <args-json-object>}
</tool_call><|im_end|>
<|im_start|>user
What is the weather in Tokyo?<|im_end|>
<|im_start|>assistant
<tool_call>
{"name": "get_weather", "arguments": {"city":"Tokyo"}}
</tool_call><|im_end|>
<|im_start|>user
<tool_response>
{"temperature": 20}
</tool_response><|im_end|>
<|im_start|>assistant
It is 20°C in Tokyo.<|im_end|>
<|im_start|>user
Thanks!<|im_end|>
<|im_start|>assistant
954 caractères, 955 octets

À propos de ce template

Comment Ollama l'a exécuté
Une fois, avec toute la conversation dans .Messages
Noms utilisés
$, $i, $last, arguments, content, function, messages, name, prompt, response, role, system, toolcalls, tools
Ce qu'il prend en charge (pour Ollama)
outils

Vérifier avec votre propre Ollama

Remplacez MODEL par le nom de votre modèle. _debug_render_only est une option de débogage du code source d'Ollama, pas de la documentation de l'API, elle peut donc changer. La réponse contient le prompt dans _debug_info.rendered_template.

curl -s http://localhost:11434/api/chat -d '{"model":"MODEL","messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"What is the weather in Tokyo?"},{"role":"assistant","content":"","tool_calls":[{"function":{"name":"get_weather","arguments":{"city":"Tokyo"}}}]},{"role":"tool","content":"{\"temperature\": 20}","tool_name":"get_weather"},{"role":"assistant","content":"It is 20°C in Tokyo."},{"role":"user","content":"Thanks!"}],"tools":[{"type":"function","function":{"name":"get_weather","description":"Get the current weather for a city","parameters":{"type":"object","properties":{"city":{"type":"string","description":"City name"}},"required":["city"]}}}],"stream":false,"_debug_render_only":true}'

Les modèles avec une ligne RENDERER ou PARSER dans le Modelfile, et gpt-oss, utilisent des moteurs de rendu intégrés à Ollama, pas TEMPLATE.

Quand la conversation est plus longue que le contexte (num_ctx), Ollama écarte les messages les plus anciens mais garde les messages système et le dernier message. Cet outil ne compte pas les tokens, il montre donc toujours la conversation entière.

Pour les modèles qwen3 et deepseek-r1, Ollama retire <think>…</think> des messages de l'assistant situés avant le dernier message de l'utilisateur. Cet outil ne le fait pas.

Afficher un message entier ou {{ .Messages }} montre dans Ollama des adresses mémoire (0xc…), qui changent à chaque fois. L'outil affiche un espace réservé.

currentDate et yesterdayDate utilisent la date du jour de votre ordinateur. Ollama utilise la date du serveur.

Vérifié le 2026-11-09 d'après le code source d'Ollama (v0.40.15), le text/template de Go et Ollama 0.40.11 : Ollama: Template · template.go

Tout s'exécute dans votre navigateur. Rien n'est envoyé nulle part.

Ollama transforme une conversation en le texte que lit un modèle grâce au TEMPLATE du modèle, écrit dans le langage de templates de Go : {{ range .Messages }}, {{ .Role }}, {{ .Content }}, {{ if .Tools }} et ainsi de suite. Une petite erreur, comme un retour à la ligne manquant, un {{- qui coupe trop ou un nom de champ qui n'existe pas, change ce que voit le modèle ou fait échouer toutes les requêtes. Cet outil exécute votre template comme le fait Ollama. Il suit les règles de text/template de Go (marqueurs de coupe, variables, range, with, comparaisons, printf, messages d'erreur), transmet les mêmes données qu'Ollama (System, Messages avec Role, Content, Thinking, ToolCalls, ToolName et ToolCallID, Tools, Think, ThinkLevel, IsThinkSet, Prompt, Suffix, Response) et dispose des fonctions supplémentaires d'Ollama (json, currentDate, yesterdayDate, toTypeScriptType). Il reproduit aussi la façon dont Ollama prépare les données : les messages système sont réunis dans .System, les messages consécutifs du même rôle sont réunis avec une ligne vide, le SYSTEM du modèle est ajouté quand le premier message n'est pas un message système, et les images deviennent [img-0], [img-1] et ainsi de suite. Un template qui n'utilise jamais .Messages s'exécute à l'ancienne, une fois par tour avec .Prompt et .Response, et Ollama ajoute {{ .Response }} à un template qui n'utilise ni l'un ni l'autre. Depuis Ollama 0.40, un modèle peut aussi embarquer un chat template dans son fichier GGUF (tokenizer.chat_template), et Ollama choisit l'un des deux selon ce que chacun sait faire : outils, thinking et fill-in-the-middle. Collez le chat template du GGUF sous Avancé et l'outil vous dit lequel Ollama utilisera. Nous avons vérifié l'outil de trois façons : avec le text/template de Go lui-même (Go 1.26.6) exécutant le code de templates d'Ollama sur 243 cas, dont les 20 templates intégrés d'Ollama, dont il reproduit les sorties de test ; avec Ollama 0.40.11 sur cet ordinateur, avec 330 requêtes à /api/generate ; et avec 49 requêtes à /api/chat vers qwen2.5:7b et vers des modèles que nous avons créés avec nos propres TEMPLATE. La sortie et les messages d'erreur concordaient.

Le cœur de cet outil est open source, sous licence MIT. github.com/seigo5555/toolkitbox-lib/src/ollama-template.ts

Cas d'usage

  • Vérifier un TEMPLATE que vous écrivez pour un Modelfile avant d'exécuter ollama create : retours à la ligne, tokens spéciaux, message système, tool calls et leurs résultats
  • Comprendre pourquoi modifier TEMPLATE n'a aucun effet, et si Ollama utilise ce TEMPLATE ou le chat template du fichier GGUF
  • Voir exactement ce que reçoit un modèle dans une longue conversation avec des outils, pour déboguer des tool calls erronés ou manquants

Utilisation

  1. Collez un template dans la zone (ollama show --template <model> affiche le template d'un modèle que vous avez), ou partez d'un des exemples.
  2. Choisissez /api/chat et modifiez les messages et les outils en JSON, dans la même forme que l'API, ou choisissez /api/generate et remplissez prompt, system et suffix. Définissez think si vous l'utilisez.
  3. Lisez le résultat, avec les espaces visibles si besoin. Pour comparer avec votre propre Ollama, exécutez la commande curl en bas avec le nom de votre modèle.

FAQ

J'ai modifié TEMPLATE, mais la sortie n'a pas changé. Pourquoi ?

Depuis Ollama 0.40, un modèle peut avoir deux templates : le TEMPLATE du Modelfile et le chat template contenu dans le fichier GGUF. Ollama choisit celui qui sait faire le plus (outils, thinking, fill-in-the-middle). Dans notre test avec Ollama 0.40.11, un TEMPLATE sans outils a été ignoré dans un modèle créé à partir de qwen2.5:7b, parce que le chat template GGUF de qwen2.5:7b prend en charge les outils. Le journal du serveur indique le choix dans la ligne "template selection" (selected=go_template ou selected=gguf_chat_template), et définir OLLAMA_GO_TEMPLATE=1 pour le serveur fait qu'Ollama utilise TEMPLATE dès qu'un modèle en a un.

Comment voir le prompt que mon Ollama construit réellement ?

Le code source d'Ollama a une option de débogage, _debug_render_only, qui renvoie le prompt au lieu d'exécuter le modèle (sous la forme _debug_info.rendered_template). Nous l'avons utilisée pour vérifier cet outil. Elle ne figure pas dans la documentation de l'API, elle peut donc changer. L'outil construit la commande curl pour vous.

Quelle est la différence entre les templates avec .Messages et ceux avec .Prompt ?

Si le template utilise .Messages, Ollama l'exécute une fois avec toute la conversation. Sinon, Ollama l'exécute une fois par tour avec .System, .Prompt et .Response, et pour le dernier tour il coupe le template après {{ .Response }}, si bien que le modèle continue à partir de là. L'outil montre quelle façon a été utilisée.

Pourquoi Ollama répond-il "does not support tools" ou "does not support thinking" ?

Ollama refuse une requête avec des outils quand le template qu'il utilise ne prend pas en charge les outils (un TEMPLATE les prend en charge quand il utilise .Tools), et une requête avec think à true ou avec un niveau quand le template n'a pas de partie thinking. Pour un template qui a du thinking, Ollama active think quand la requête ne le définit pas. L'outil montre les deux cas.

Les outils de mon prompt ne ressemblent pas à du JSON. Est-ce un bug de l'outil ?

Probablement pas. Dans les templates de Go, une valeur ne s'affiche en JSON que si son type le prévoit. .Tools d'Ollama, un outil entier et .Function.Arguments s'affichent en JSON, mais .Function s'affiche dans le format propre à Go. Dans notre test, le template de qwen2.5:7b utilise {{ .Function }}, et Ollama 0.40.11 a envoyé au modèle un texte comme {get_weather Get the weather {object <nil> <nil> [city] {…}}}. Utilisez {{ json .Function }} si vous voulez du JSON.

Mon template est-il envoyé quelque part ?

Non. Tout s'exécute dans votre navigateur.

Voir aussi