| {%- if not add_generation_prompt is defined -%} |
| {%- set add_generation_prompt = false -%} |
| {%- endif -%} |
| {%- set ns = namespace(is_first=false, is_tool=false, is_output_first=true, system_prompt="") -%} |
| {%- for message in messages -%} |
| {%- if message["role"] == "system" -%} |
| {%- set ns.system_prompt = message["content"] -%} |
| {%- endif -%} |
| {%- endfor -%} |
| {{- bos_token -}} |
| {{- ns.system_prompt -}} |
| {%- for message in messages -%} |
| {%- if message["role"] == "user" -%} |
| {%- set ns.is_tool = false -%} |
| {{- "<|User|>" + message["content"] -}} |
| {%- endif -%} |
| |
| {%- if message["role"] == "assistant" and message["content"] is none -%} |
| {%- set ns.is_tool = false -%} |
| {%- for tool in message["tool_calls"] -%} |
| {%- if not ns.is_first -%} |
| {{- "<|Assistant|><|tool▁calls▁begin|><|tool▁call▁begin|>" + tool["type"] + "<|tool▁sep|>" + tool["function"]["name"] + "\n" + "```json" + "\n" + tool["function"]["arguments"] + "\n" + "```" + "<|tool▁call▁end|>" -}} |
| {%- set ns.is_first = true -%} |
| {%- else -%} |
| {{- "\n" + "<|tool▁call▁begin|>" + tool["type"] + "<|tool▁sep|>" + tool["function"]["name"] + "\n" + "```json" + "\n" + tool["function"]["arguments"] + "\n" + "```" + "<|tool▁call▁end|>" -}} |
| {{- "<|tool▁calls▁end|><|end▁of▁sentence|>" -}} |
| {%- endif -%} |
| {%- endfor -%} |
| {%- endif -%} |
| |
| {%- if message["role"] == "assistant" and message["content"] is not none -%} |
| {%- if ns.is_tool -%} |
| {{- "<|tool▁outputs▁end|>" + message["content"] + "<|end▁of▁sentence|>" -}} |
| {%- set ns.is_tool = false -%} |
| {%- else -%} |
| {%- set content = message["content"] -%} |
| {%- if "</think>" in content -%} |
| {%- set content = content.split("</think>")[-1] -%} |
| {%- endif -%} |
| {% generation %} |
| {{- "<|Assistant|>" + content + "<|end▁of▁sentence|>" -}} |
| {% endgeneration %} |
| {%- endif -%} |
| {%- endif -%} |
| |
| {%- if message["role"] == "tool" -%} |
| {%- set ns.is_tool = true -%} |
| {%- if ns.is_output_first -%} |
| {{- "<|tool▁outputs▁begin|><|tool▁output▁begin|>" + message["content"] + "<|tool▁output▁end|>" -}} |
| {%- set ns.is_output_first = false -%} |
| {%- else -%} |
| {{- "\n<|tool▁output▁begin|>" + message["content"] + "<|tool▁output▁end|>" -}} |
| {%- endif -%} |
| {%- endif -%} |
| {%- endfor -%} |
| |
| {%- if ns.is_tool -%} |
| {{- "<|tool▁outputs▁end|>" -}} |
| {%- endif -%} |
| |
| {%- if add_generation_prompt and not ns.is_tool -%} |
| {% generation %} |
| {{- "<|Assistant|><think>\n" -}} |
| {% endgeneration %} |
| {%- endif -%} |