{%- 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 XML tags:' }}
{{- '
' }}
{%- for tool in tools %}
{%- if loop.index0 > 1 %}
{{- '
' }}
{%- endif %}
{{- tool | tojson }}
{%- endfor %}
{{- '
' }}
{{- 'For function call returns, you should first print ' }}
{{- 'For each function call, you should return object like:
' }}
{{- 'function_name
```json
function_arguments_in_json_format
```' }}
{{- 'At the end of function call returns, you should print ' }}
{%- 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 %}
{{- '' + '<|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['function']['name'] + '
' + '```json' + '
' + arguments + '
' + '```' + '' }}
{%- else %}
{{- message['content'] + '' + tool['function']['name'] + '
' + '```json' + '
' + arguments + '
' + '```' + '' }}
{%- endif %}
{%- set ns.is_first = true %}
{%- else %}
{{- '
' + '' + tool['function']['name'] + '
' + '```json' + '
' + arguments + '
' + '```' + '' }}
{%- endif %}
{%- endfor %}
{{- '' + 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 '' in content and not loop.last %}
{%- set content = content.split('')[-1].strip('').strip() %}
{%- endif %}
{%- set ns.is_last_user = false %}
{%- if ns.is_tool %}
{{- '' + '<|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|>' + '' + message['content'] + '' }}
{%- set ns.is_output_first = false %}
{%- else %}
{{- '
' + message['content'] + '' }}
{%- endif %}
{%- endif %}
{%- endfor %}
{%- if ns.is_tool %}
{{- '' + '<|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 %}
{{- '
' }}
{%- endif %}