<|beginoftext|>{%- for message in messages -%} <|startofturn|>{%- if message.role == "system" -%} <|system|> {{ message.content }} {% if tools is defined and tools %} # Tools You may call one or more functions to assist with the user query. You are provided with function signatures within XML tags: {%- for tool in tools %} {{ tool | tojson }} {%- if not loop.last %} {%- endif %} {%- endfor %} Use this exact JSON schema for each tool call: {"properties":{"name":{"title":"Name","type":"string"},"arguments":{"title":"Arguments","type":"object"}},"required":["name","arguments"],"title":"FunctionCall","type":"object"} For each function call return a json object with function name and arguments within XML tags as follows: {"name": , "arguments": } {% endif %} {{- '<|endofturn|>' }}{%- elif message.role == "user" -%} <|user|> {{ message.content }} <|endofturn|>{%- elif message.role == "assistant" -%} <|assistant|> {%- set raw_calls = (message.tool_calls if (message.tool_calls is defined and message.tool_calls) else message.tool_call) %} {%- if raw_calls %} {%- set tool_calls = (raw_calls if (raw_calls is iterable and (raw_calls is not mapping) and (raw_calls is not string)) else [raw_calls]) %} {%- for tc in tool_calls %} {%- set call = (tc.function if tc.function is defined else tc) %} {"name": "{{ call.name }}", "arguments": {{ call.arguments if call.arguments is string else (call.arguments|default({})|tojson) }}} {%- endfor %} {%- endif %} {%- if message.thinking is defined and message.thinking %} {{ '' }} {{ message.thinking }} {{ '' }} {% endif %} {{ message.content }} <|endofturn|>{%- elif message.role == "tool" -%} <|tool|> {{ message.content }} <|endofturn|> {%- endif -%} {%- endfor -%} {%- if add_generation_prompt and enable_thinking %} {{- '<|assistant|>\n' }} {%- elif add_generation_prompt %} {{- '<|assistant|>\n' }} {%- else %} <|endoftext|> {%- endif %}