| |
| {%- 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 %} |
| {{- '<think> |
| |
| </think> |
| |
| ' }} |
| {%- endif %} |
| {%- if enable_thinking is not defined or enable_thinking is true %} |
| {{- '<think>' }} |
| {%- endif %} |
| {%- endif %} |
| |