Custom Chat Template (Jinja2)
Bir dil modelinin system / user / assistant / tool mesajlarını doğru ayırt edebilmesi ve tool-calling (function calling) çağrılarını beklenen formatta üretebilmesi için yazdığım ChatML tarzı Jinja2 sohbet şablonu.
Dosyalar
| Dosya | Görev |
|---|---|
chat_template.jinja |
Asıl şablon. Rolleri ve araç çağrılarını sarmalar. |
render_demo.py |
Şablonu örnek bir konuşma ile render edip ham çıktıyı basar. |
Şablon ne yapıyor?
- Roller:
system,user,assistant,tool— her biri<|im_start|>rol ... <|im_end|>bloğuna sarılır (ChatML). - Tool calling:
toolsverildiğinde araç tanımları (JSON şema) system mesajının içine gömülür. Modelin araç çağrısı<tool_call>{...}</tool_call>, aracın dönen sonucu<tool_response>...</tool_response>bloğuna yazılır. add_generation_prompt:Trueise sona<|im_start|>assistant\neklenir; model buradan devam eder.
Çalıştırma
pip install -r requirements.txt
python render_demo.py
Örnek çıktı (kısaltılmış):
<|im_start|>system
Sen ML dünyasındaki güncel trendleri takip eden bir asistansın.
# Araçlar
...
<|im_end|>
<|im_start|>user
Bugün Hugging Face'te trend olan 2 modeli söyler misin?<|im_end|>
<|im_start|>assistant
<tool_call>
{"name": "get_hf_trending", "arguments": {"kind": "model", "limit": 2}}
</tool_call><|im_end|>
<|im_start|>tool
<tool_response>
[{"id": "meta-llama/Llama-3.3-70B-Instruct", "likes": 1893}, ...]
</tool_response>
<|im_end|>
<|im_start|>assistant
Bugün trend olan iki model: ...<|im_end|>
<|im_start|>assistant
Bir tokenizer'a bağlama
from transformers import AutoTokenizer
tok = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-0.5B-Instruct")
tok.chat_template = open("chat_template.jinja", encoding="utf-8").read()
text = tok.apply_chat_template(
messages, # {"role": ..., "content": ...} listesi
tools=TOOLS, # OpenAI uyumlu function tanımları
add_generation_prompt=True,
tokenize=False,
)
Notlar
- Şablon Hugging Face chat template dökümantasyonundaki ChatML yaklaşımını temel alıyor, üzerine tool-calling ekledim.
render_demo.pyiçinde Jinja2'nin yerleşiktojsonfiltresi HTML-escape yaptığı için (<→<), transformers ile aynı davranışı vermesi adına filtreyi düzjson.dumpsile değiştirdim.apply_chat_templatekullanırken buna gerek yok.
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support
