{%- 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 = '' 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 -%}