ChatTemplate / main.py
menesnas's picture
Upload folder using huggingface_hub
5a4ba7f verified
Raw
History Blame Contribute Delete
4.45 kB
import json
import jinja2
def tojson_filter(val, indent=None):
if indent is not None:
return json.dumps(val, ensure_ascii=False, indent=indent)
return json.dumps(val, ensure_ascii=False)
def render_with_jinja(template_path, messages, tools=None, add_generation_prompt=False):
with open(template_path, "r", encoding="utf-8") as f:
template_content = f.read()
env = jinja2.Environment(trim_blocks=True, lstrip_blocks=True)
env.filters["tojson"] = tojson_filter
template = env.from_string(template_content)
return template.render(
messages=messages,
tools=tools,
add_generation_prompt=add_generation_prompt
)
def render_with_huggingface(template_path, messages, tools=None, add_generation_prompt=False):
try:
from transformers import AutoTokenizer
with open(template_path, "r", encoding="utf-8") as f:
template_content = f.read()
tokenizer = AutoTokenizer.from_pretrained("gpt2")
tokenizer.chat_template = template_content
return tokenizer.apply_chat_template(
messages,
tools=tools,
add_generation_prompt=add_generation_prompt,
tokenize=False
)
except Exception as e:
return f"[HuggingFace Error / Not Available]: {e}"
if __name__ == "__main__":
template_file = "chat_template.jinja"
print("=" * 60)
print(" 1. Standart Sohbet Senaryosu (PPSF v1.0)")
print("=" * 60)
messages_1 = [
{
"role": "system",
"content": "Sen uzman bir eczacı yapay zekâsısın."
},
{
"role": "user",
"content": "Boğazım ağrıyor."
}
]
print("\n--- [Jinja2 Output] ---")
print(render_with_jinja(template_file, messages_1, add_generation_prompt=True))
print("--- [HuggingFace apply_chat_template Output] ---")
print(render_with_huggingface(template_file, messages_1, add_generation_prompt=True))
print("=" * 60)
print(" 2. Tool Calling & Tool Response Senaryosu")
print("=" * 60)
messages_2 = [
{
"role": "system",
"content": "Sen uzman bir eczacı yapay zekâsısın."
},
{
"role": "user",
"content": "Parol ne işe yarar?"
},
{
"role": "assistant",
"content": None,
"tool_calls": [
{
"function": {
"name": "search_drug",
"arguments": {"drug": "Parol"}
}
}
]
},
{
"role": "tool",
"content": '{"drug": "Parol", "active_ingredient": "Parasetamol", "usage": "Ağrı kesici ve ateş düşürücü"}'
}
]
tools_2 = [
{
"name": "search_drug",
"description": "Verilen ilaç hakkında detaylı bilgi arar.",
"parameters": {
"type": "object",
"properties": {
"drug": {"type": "string", "description": "İlaç adı"}
},
"required": ["drug"]
}
}
]
print("\n--- [Jinja2 Output] ---")
print(render_with_jinja(template_file, messages_2, tools=tools_2, add_generation_prompt=True))
print("=" * 60)
print(" 3. PPSF v1.1 Gelecek Uyumlu Metadata (@THOUGHT & @REFERENCE)")
print("=" * 60)
messages_3 = [
{
"role": "system",
"content": "Sen uzman bir eczacı yapay zekâsısın."
},
{
"role": "user",
"content": "Grip için hangi ilacı kullanmalıyım?",
"metadata": {
"reference": "[Kılavuz Doc #42]: Parasetamol 500mg hafif ağrı ve ateş durumlarında tercih edilir."
}
},
{
"role": "assistant",
"content": "Ateş ve hafif ağrınız varsa doktor veya eczacınıza danışarak Parasetamol içerikli ilaçlar tercih edebilirsiniz.",
"metadata": {
"thought": "Kullanıcının semptomları grip kaynaklı ateş ve hafif ağrı belirtilerine uymaktadır. Referans doküman #42 incelenerek Parasetamol tavsiye edildi."
}
}
]
print("\n--- [Jinja2 Output] ---")
print(render_with_jinja(template_file, messages_3, add_generation_prompt=False))