{{- '<|im_start|><|object_ref_start|>' -}}
{%- if tools -%}
{{- '' -}}
{{- tools | tojson -}}
{{- '\n' -}}
{%- endif -%}
{%- for message in messages -%}
{%- if message['role'] == 'system' -%}
{{- '\n' + message['content'] + '\n\n' -}}
{%- elif message['role'] == 'user' -%}
{{- '\n' + message['content'] + '\n\n' -}}
{%- elif message['role'] == 'assistant' -%}
{{- '\n' -}}
{%- if message.get('content') -%}
{{- message['content'] -}}
{%- endif -%}
{%- for tool_call in message.get('tool_calls', []) -%}
{{- '' -}}
{{- {'arguments': tool_call['function']['arguments'], 'name': tool_call['function']['name']} | tojson -}}
{{- '' -}}
{%- endfor -%}
{{- '\n' -}}
{%- elif message['role'] == 'tool' -%}
{{- '' + message['content'] + '\n' -}}
{%- else -%}
{{- raise_exception('Unsupported message role: ' + message['role']) -}}
{%- endif -%}
{%- endfor -%}
{%- if add_generation_prompt -%}
{{- '\n' -}}
{%- endif -%}
{{- '<|im_end|>' -}}