{# ───── defaults ───── #} {%- if enable_thinking is not defined -%} {%- set enable_thinking = true -%} {%- endif -%} {# ───── reasoning mode ───── #} {%- if enable_thinking -%} {%- set reasoning_mode = "/think" -%} {%- else -%} {%- set reasoning_mode = "/no_think" -%} {%- endif -%} {# ───── header (system message) ───── #} {{- "<|im_start|>system\n" -}} {%- if messages[0].role == "system" -%} {%- set system_message = messages[0].content -%} {%- if "/no_think" in system_message -%} {%- set reasoning_mode = "/no_think" -%} {%- elif "/think" in system_message -%} {%- set reasoning_mode = "/think" -%} {%- endif -%} {%- set custom_instructions = system_message.replace("/no_think", "").replace("/think", "").rstrip() -%} {%- endif -%} {%- if "/system_override" in system_message -%} {{- custom_instructions.replace("/system_override", "").rstrip() -}} {%- else -%} {{- "## Metadata\n\n" -}} {{- "Knowledge Cutoff Date: June 2025\n" -}} {%- set today = strftime_now("%d %B %Y") -%} {{- "Today Date: " ~ today ~ "\n" -}} {{- "Reasoning Mode: " + reasoning_mode + "\n\n" -}} {{- "## Custom Instructions\n\n" -}} {%- if custom_instructions -%} {{- custom_instructions + "\n\n" -}} {%- elif reasoning_mode == "/think" -%} {{- "You are a helpful AI assistant named SmolLM, trained by Hugging Face.\n\n" -}} {%- else -%} {{- "You are a helpful AI assistant named SmolLM, trained by Hugging Face.\n\n" -}} {%- endif -%} {%- if xml_tools or python_tools or tools -%} {{- "### Tools\n\n" -}} {%- if xml_tools or tools -%} {%- if tools -%} {%- set xml_tools = tools -%} {%- endif -%} {%- set ns = namespace(xml_tool_string="You may call one or more functions to assist with the user query.\nYou are provided with function signatures within XML tags:\n\n\n") -%} {%- for tool in xml_tools[:] -%} {%- set ns.xml_tool_string = ns.xml_tool_string ~ (tool | tojson) ~ "\n" -%} {%- endfor -%} {%- set xml_tool_string = ns.xml_tool_string + "\n\nFor each function call, return a json object with function name and arguments within XML tags:\n\n{\"name\": , \"arguments\": }\n" -%} {{- xml_tool_string -}} {%- endif -%} {%- if python_tools -%} {%- set ns = namespace(python_tool_string="You may call one or more functions as python tools.\n\n") -%} {%- for tool in python_tools[:] -%} {%- set ns.python_tool_string = ns.python_tool_string ~ (tool | string) ~ "\n" -%} {%- endfor -%} {%- set python_tool_string = ns.python_tool_string + "\n\nThe state persists between code executions." -%} {{- python_tool_string -}} {%- endif -%} {{- "\n\n" -}} {%- endif -%} {%- endif -%} {{- "<|im_end|>\n" -}} {# ───── main loop ───── #} {%- for message in messages -%} {%- if message.role == "user" -%} {{ "<|im_start|>user\n" + message.content + "<|im_end|>\n" }} {%- elif message.role == "assistant" -%} {% generation %} {%- if message.tool_calls -%} {%- set ns = namespace(tc_text="") -%} {%- for tc in message.tool_calls -%} {%- set ns.tc_text = ns.tc_text ~ "\n{\"name\": \"" ~ tc.function.name ~ "\", \"arguments\": " ~ tc.function.arguments ~ "}\n" -%} {%- endfor -%} {{ "<|im_start|>assistant\n" ~ (message.content if message.content is string else "") ~ ns.tc_text ~ "<|im_end|>\n" }} {%- else -%} {%- if reasoning_mode == "/think" -%} {{ "<|im_start|>assistant\n\n" ~ (message.content if message.content is string else "") ~ "\n<|im_end|>\n" }} {%- else -%} {{ "<|im_start|>assistant\n" ~ (message.content if message.content is string else "") ~ "<|im_end|>\n" }} {%- endif -%} {%- endif -%} {% endgeneration %} {%- elif message.role == "tool" -%} {{ "<|im_start|>user\n\n" ~ (message.content if message.content is string else "") ~ "\n<|im_end|>\n" }} {%- endif -%} {%- endfor -%} {# ───── generation prompt ───── #} {%- if add_generation_prompt -%} {%- if reasoning_mode == "/think" -%} {{ "<|im_start|>assistant\n\n" }} {%- else -%} {{ "<|im_start|>assistant\n" }} {%- endif -%} {%- endif -%}