| {%- set image_count = namespace(value=0) -%} | |
| {%- set video_count = namespace(value=0) -%} | |
| {{- '<|begin_of_sentence|>' }} | |
| {%- for message in messages -%} | |
| {%- if message.role in ['system', 'user'] -%} | |
| {%- if message.role == 'user' -%} | |
| {{- 'User: ' -}} | |
| {%- endif -%} | |
| {%- if message.content is string -%} | |
| {{- message.content -}} | |
| {%- else -%} | |
| {%- for content_item in message.content -%} | |
| {%- if content_item.type == 'text' -%} | |
| {{- content_item.text -}} | |
| {%- elif content_item.type in ['image_url', 'image'] -%} | |
| {%- set image_count.value = image_count.value + 1 -%} | |
| Picture {{ image_count.value }}:<|IMAGE_START|><|IMAGE_PLACEHOLDER|><|IMAGE_END|> | |
| {%- elif content_item.type in ['video_url', 'video'] -%} | |
| {%- set video_count.value = video_count.value + 1 -%} | |
| Video {{ video_count.value }}:<|VIDEO_START|><|VIDEO_PLACEHOLDER|><|VIDEO_END|> | |
| {%- endif -%} | |
| {%- endfor -%} | |
| {%- endif -%} | |
| {%- if message.role == 'system' -%} | |
| {{- ' | |
| ' -}} | |
| {%- endif -%} | |
| {%- elif message.role == 'assistant' -%} | |
| {%- macro extract_text_content(content_field) -%} | |
| {%- if content_field is string -%} | |
| {{- content_field -}} | |
| {%- elif content_field is iterable and content_field is not string -%} | |
| {%- set ns = namespace(text_parts=[]) -%} | |
| {%- set text_parts = [] -%} | |
| {%- for item in content_field -%} | |
| {%- if item.type == 'text' -%} | |
| {%- set ns.text_parts = ns.text_parts + [item.text] -%} | |
| {%- endif -%} | |
| {%- endfor -%} | |
| {{- ns.text_parts | join("") -}} | |
| {%- else -%} | |
| {{- '' -}} | |
| {%- endif -%} | |
| {%- endmacro -%} | |
| {%- set reasoning_content = extract_text_content(message.reasoning_content) -%} | |
| {%- set content = extract_text_content(message.content) -%} | |
| {%- if '</think>' in content %} | |
| {%- set reasoning_content = content.split('</think>')[0].rstrip(' | |
| ').split('<think>')[-1].lstrip(' | |
| ') %} | |
| {%- set content = content.split('</think>')[-1].lstrip(' | |
| ') %} | |
| {%- endif %} | |
| {%- if reasoning_content %} | |
| {{- ' | |
| ' + 'Assistant: ' + '<think> | |
| ' + reasoning_content.strip(' | |
| ') + ' | |
| </think> | |
| ' + content.lstrip(' | |
| ') }} | |
| {%- else %} | |
| {{- ' | |
| ' + 'Assistant: ' + content }} | |
| {%- endif %} | |
| {{- '<|end_of_sentence |>' }} | |
| {%- endif -%} | |
| {%- endfor -%} | |
| {%- if add_generation_prompt is not defined or add_generation_prompt is true %} | |
| {{- ' | |
| Assistant: ' -}} | |
| {%- if (enable_thinking is defined and enable_thinking is false) or enable_thinking is not defined %} | |
| {{- '<think> | |
| </think> | |
| ' }} | |
| {%- endif %} | |
| {%- if enable_thinking is defined and enable_thinking is true %}{{- '<think>' }}{%- endif %} | |
| {%- endif %} |