{%- macro render_value(value) -%} {%- if value is string -%} {{- value -}} {%- else -%} {{- value | tojson(ensure_ascii=False) -}} {%- endif -%} {%- endmacro -%} {%- macro render_content(message_content) -%} {%- if message_content is string -%} {{- message_content -}} {%- elif message_content is iterable -%} {%- for part in message_content -%} {%- if part is not mapping -%} {{- part -}} {%- elif part['type'] == 'image' or 'image' in part or 'image_url' in part -%} {{- '<|vision_start|><|image_pad|><|vision_end|>' -}} {%- elif part['type'] == 'audio' or part['type'] == 'input_audio' or 'audio' in part or 'audio_url' in part or 'input_audio' in part -%} {{- '<|mimo_audio_start|><|audio_pad|><|mimo_audio_end|>' -}} {%- elif part['type'] == 'video' or 'video' in part or 'video_url' in part -%} {{- '<|vision_start|><|video_pad|><|vision_end|>' -}} {%- elif 'text' in part -%} {{- part['text'] -}} {%- endif -%} {%- endfor -%} {%- endif -%} {%- endmacro -%} {%- macro render_tools(tools) -%} {{- 'You are provided with the following tools:\n\n' -}} {%- for tool in tools -%} {{- '\n' ~ (tool | tojson(ensure_ascii=False)) -}} {%- endfor -%} {{- '\n' -}} {%- endmacro -%} {%- macro render_tool_calls(tool_calls) -%} {%- for tool_call in tool_calls -%} {%- if tool_call.function is defined -%} {%- set tool_call = tool_call.function -%} {%- elif tool_call.custom is defined -%} {%- set tool_call = tool_call.custom -%} {%- endif -%} {{- '' -}} {%- if tool_call.input is defined and tool_call.input is string -%} {{- tool_call.input -}} {%- elif tool_call.arguments -%} {%- if tool_call.arguments is string -%} {{- tool_call.arguments -}} {%- else -%} {%- for args_name, args_value in tool_call.arguments | items -%} {{- '' ~ render_value(args_value) ~ '' -}} {%- endfor -%} {%- endif -%} {%- endif -%} {{- '' -}} {%- endfor -%} {%- endmacro -%} {%- macro render_assistant_message(message) -%} {%- set content = render_content(message.content) -%} {%- set reasoning = message.reasoning_content if message.reasoning_content is string else '' -%} {{- '<|im_start|>assistant\n' ~ reasoning ~ '' ~ content -}} {%- if message.tool_calls is defined and message.tool_calls is iterable and message.tool_calls | length > 0 -%} {{- render_tool_calls(message.tool_calls) -}} {%- endif -%} {{- '<|im_end|>' -}} {%- endmacro -%} {%- if tools is defined and tools is iterable and tools | length > 0 -%} {{- '<|im_start|>system\n' ~ render_tools(tools) ~ '<|im_end|>' -}} {%- endif -%} {%- for message in messages -%} {%- if message.role == 'assistant' -%} {{- render_assistant_message(message) -}} {%- else -%} {%- set body = render_content(message.content) -%} {{- '<|im_start|>' ~ message.role ~ '\n' ~ body -}} {%- if message.tools is defined and message.tools is iterable and message.tools | length > 0 -%} {%- if body -%} {{- '\n\n' -}} {%- endif -%} {{- render_tools(message.tools) -}} {%- endif -%} {{- '<|im_end|>' -}} {%- endif -%} {%- endfor -%} {%- if add_generation_prompt -%} {{- '<|im_start|>assistant\n' -}} {%- if enable_thinking is false -%} {{- '' -}} {%- endif -%} {%- endif -%}