| <|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 <tools></tools> XML tags: |
| <tools> |
| {%- for tool in tools %} |
| {{ tool | tojson }} |
| {%- if not loop.last %} |
| {%- endif %} |
| {%- endfor %} |
| </tools> |
| 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 <tool_call></tool_call> XML tags as follows: |
| <tool_call> |
| {"name": <function-name>, "arguments": <args-dict>} |
| </tool_call> |
| {% 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) %} |
| <tool_call> |
| {"name": "{{ call.name }}", "arguments": {{ call.arguments if call.arguments is string else (call.arguments|default({})|tojson) }}} |
| </tool_call> |
| {%- endfor %} |
| {%- endif %} |
| {%- if message.thinking is defined and message.thinking %} |
| {{ '<think>' }} |
| {{ message.thinking }} |
| {{ '</think>' }} |
| {% endif %} |
| {{ message.content }} |
| <|endofturn|>{%- elif message.role == "tool" -%} |
| <|tool|> |
| <tool_response> |
| {{ message.content }} |
| </tool_response><|endofturn|> |
| {%- endif -%} |
| {%- endfor -%} |
| {%- if add_generation_prompt and enable_thinking %} |
| {{- '<|assistant|><think>\n' }} |
| {%- elif add_generation_prompt %} |
| {{- '<|assistant|>\n' }} |
| {%- else %} |
| <|endoftext|> |
| {%- endif %} |