| {%- 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='', is_first_sp=true, is_first_user=true, is_last_user=false) %} | |
| {%- for message in messages %} | |
| {%- if message['role'] == 'system' %} | |
| {%- if ns.is_first_sp %} | |
| {%- set ns.system_prompt = ns.system_prompt + message['content'] %} | |
| {%- set ns.is_first_sp = false %} | |
| {%- else %} | |
| {% set ns.system_prompt = ns.system_prompt + ' | |
| ' + message['content'] %} | |
| {%- endif %} | |
| {%- endif %} | |
| {%- endfor %} | |
| {{- bos_token }} | |
| {{- ns.system_prompt }} | |
| {%- if tools %} | |
| {%- if ns.system_prompt != '' %} | |
| {{- ' | |
| # Tools | |
| You may call one or more functions to assist with the user query.' }} | |
| {%- else %} | |
| {{- '# Tools | |
| You may call one or more functions to assist with the user query.' }} | |
| {%- endif %} | |
| {{- ' | |
| You are provided with function signatures within <tools></tools> XML tags:' }} | |
| {{- ' | |
| <tools> | |
| ' }} | |
| {%- for tool in tools %} | |
| {%- if loop.index0 > 1 %} | |
| {{- ' | |
| ' }} | |
| {%- endif %} | |
| {{- tool | tojson }} | |
| {%- endfor %} | |
| {{- ' | |
| </tools> | |
| ' }} | |
| {{- 'For function call returns, you should first print <tool_calls>' }} | |
| {{- 'For each function call, you should return object like: | |
| ' }} | |
| {{- '<tool_call>function_name | |
| ```json | |
| function_arguments_in_json_format | |
| ```</tool_call>' }} | |
| {{- 'At the end of function call returns, you should print </tool_calls>' }} | |
| {%- endif %} | |
| {%- if ns.system_prompt != '' or tools %} | |
| {{- '<|hy_place▁holder▁no▁3|>' }} | |
| {%- endif %} | |
| {%- for message in messages %} | |
| {%- if message['role'] == 'user' %} | |
| {%- set ns.is_tool = false %} | |
| {%- set ns.is_first = false %} | |
| {%- set ns.is_last_user = true %} | |
| {{- '<|hy_User|>' + message['content'] + '<|hy_Assistant|>' }} | |
| {%- endif %} | |
| {%- if message['role'] == 'assistant' and message['tool_calls'] is defined and message['tool_calls'] is not none %} | |
| {%- set ns.is_last_user = false %} | |
| {%- if ns.is_tool %} | |
| {{- '</tool_responses>' + '<|hy_Assistant|>' }} | |
| {%- endif %} | |
| {%- set ns.is_first = false %} | |
| {%- set ns.is_tool = false %} | |
| {%- set ns.is_output_first = true %} | |
| {%- for tool in message['tool_calls'] %} | |
| {%- set arguments = tool['function']['arguments'] %} | |
| {%- if arguments is not string %} | |
| {%- set arguments = arguments | tojson %} | |
| {%- endif %} | |
| {%- if not ns.is_first %} | |
| {%- if message['content'] is none %} | |
| {{- '<tool_calls><tool_call>' + tool['function']['name'] + ' | |
| ' + '```json' + ' | |
| ' + arguments + ' | |
| ' + '```' + '</tool_call>' }} | |
| {%- else %} | |
| {{- message['content'] + '<tool_calls><tool_call>' + tool['function']['name'] + ' | |
| ' + '```json' + ' | |
| ' + arguments + ' | |
| ' + '```' + '</tool_call>' }} | |
| {%- endif %} | |
| {%- set ns.is_first = true %} | |
| {%- else %} | |
| {{- ' | |
| ' + '<tool_call>' + tool['function']['name'] + ' | |
| ' + '```json' + ' | |
| ' + arguments + ' | |
| ' + '```' + '</tool_call>' }} | |
| {%- endif %} | |
| {%- endfor %} | |
| {{- '</tool_calls>' + eos_token }} | |
| {%- endif %} | |
| {%- if message['role'] == 'assistant' and (message['tool_calls'] is not defined or message['tool_calls'] is none) %} | |
| {%- set content = message['content'] %} | |
| {%- if '<answer>' in content and not loop.last %} | |
| {%- set content = content.split('<answer>')[-1].strip('</answer>').strip() %} | |
| {%- endif %} | |
| {%- set ns.is_last_user = false %} | |
| {%- if ns.is_tool %} | |
| {{- '</tool_responses>' + '<|hy_Assistant|>' + content + eos_token }} | |
| {%- set ns.is_tool = false %} | |
| {%- else %} | |
| {{- content + eos_token }} | |
| {%- endif %} | |
| {%- endif %} | |
| {%- if message['role'] == 'tool' %} | |
| {%- set ns.is_last_user = false %} | |
| {%- set ns.is_tool = true %} | |
| {%- if ns.is_output_first %} | |
| {{- '<|hy_User|>' + '<tool_responses><tool_response>' + message['content'] + '</tool_response>' }} | |
| {%- set ns.is_output_first = false %} | |
| {%- else %} | |
| {{- ' | |
| <tool_response>' + message['content'] + '</tool_response>' }} | |
| {%- endif %} | |
| {%- endif %} | |
| {%- endfor %} | |
| {%- if ns.is_tool %} | |
| {{- '</tool_responses>' + '<|hy_Assistant|>' }} | |
| {%- endif %} | |
| {%- if add_generation_prompt and not ns.is_last_user and not ns.is_tool %} | |
| {{- '<|hy_Assistant|>' }} | |
| {%- endif %} | |
| {%- if enable_thinking is defined and not enable_thinking %} | |
| {{- '<think> | |
| </think> | |
| ' }} | |
| {%- endif %} |