{%- macro render_content(content) -%} {%- if content is string -%} {{- content -}} {%- elif content is iterable and content is not mapping -%} {%- for item in content -%} {%- if 'image' in item or 'image_url' in item or item.type == 'image' -%} {{- '<|vision_start|><|image_pad|><|vision_end|>' -}} {%- elif 'video' in item or 'video_url' in item or item.type == 'video' -%} {{- '<|vision_start|><|video_pad|><|vision_end|>' -}} {%- elif 'text' in item -%} {{- item.text -}} {%- else -%} {{- raise_exception('Unexpected item type in content.') -}} {%- endif -%} {%- endfor -%} {%- elif content is none or content is undefined -%} {{- '' -}} {%- else -%} {{- raise_exception('Unexpected content type.') -}} {%- endif -%} {%- endmacro -%} A chat between a user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the user's questions. {%- set merged = namespace(user='', asst='') -%} {%- for message in messages -%} {%- set raw_role = message['role'] -%} {%- set role = 'user' if raw_role in ['user','system'] else 'assistant' -%} {%- set content = render_content(message['content']) -%} {%- if role == 'user' -%} {%- set merged.user = merged.user + ('\n\n' if merged.user else '') + content -%} {%- else -%} {%- set merged.asst = merged.asst + ('\n\n' if merged.asst else '') + content -%} {%- endif -%} {%- set next_role = role -%} {%- if not loop.last -%} {%- set next_raw = messages[loop.index0+1]['role'] -%} {%- set next_role = 'user' if next_raw in ['user','system'] else 'assistant' -%} {%- endif -%} {%- if loop.last or next_role != role -%} {%- if role == 'user' -%} {{- '\n<|User|>\n' + merged.user + '\n<|Assistant|>\n' -}} {%- set merged.user = '' -%} {%- else -%} {{- merged.asst + '<|endoftext|>' -}} {%- set merged.asst = '' -%} {%- endif -%} {%- endif -%} {%- endfor -%}