{%- if messages and messages[0]['role'] == 'system' -%}
    {%- set system_message = messages[0]['content'] -%}
    {%- set messages = messages[1:] -%}
{%- else -%}
    {%- set system_message = '' -%}
{%- endif -%}
{{- system_message -}}
{%- if system_message %}{{ '\\n' }}{%- endif -%}
{%- for message in messages -%}
    {%- if message['role'] == 'user' -%}
        {%- set role_prefix = '<|User|>:\n' -%}
    {%- elif message['role'] == 'assistant' -%}
        {%- set role_prefix = '<|Assistant|>:\n' -%}
    {%- else -%}
        {%- set role_prefix = '<|' ~ message['role']|capitalize ~ '|>:\n' -%}
    {%- endif -%}

    {%- if message['content'] is string -%}
        {{- role_prefix + message['content'].rstrip() -}}
    {%- else -%}
        {%- set ns = namespace(prefix_printed=False, last_was_image=False) -%}
        {%- for content in message['content'] -%}
            {%- set is_image = content.get('type') in ['image', 'image_pil', 'image_url'] -%}
            {%- set content_text = '<image>' if is_image else content.get('text', '').rstrip() -%}
            {%- if ns.last_was_image and not is_image %}{{ '\\n' }}{%- endif -%}
            {%- if not ns.prefix_printed and (message['role'] == 'user' or not is_image) -%}
                {{- role_prefix -}}
                {%- set ns.prefix_printed = True -%}
            {%- endif -%}
            {{- content_text -}}
            {%- set ns.last_was_image = is_image -%}
        {%- endfor -%}
    {%- endif -%}
    {%- if not loop.last %}{{ '\\n' }}{%- endif -%}
{%- endfor -%}
{%- if messages and messages|length > 0 and messages[messages|length - 1]['role'] == 'assistant' -%}
    {{- eos_token|default('') -}}
{%- elif add_generation_prompt -%}
    {%- if messages %}{{ '\\n' }}{%- endif -%}
    {{- '<|Assistant|>:\n' -}}
{%- endif -%}
