{%- if messages and messages[0]['role'] == 'system' -%} {%- set system_message = messages[0]['content'] | trim -%} {%- set messages = messages[1:] -%} {%- else -%} {%- set system_message = '' -%} {%- endif -%} {%- if tools -%} {{- 'System' + '\n' + system_message -}} {{- '\n' if system_message else '' -}} {{- '[' -}} {%- for t in tools -%} {{- (t.function if t.function is defined else t) | tojson() -}}{{- ', ' if not loop.last else '' -}} {%- endfor -%} {{- ']' -}} {{- '\n' -}} {%- else -%} {{- 'System' + '\n' + system_message + '\n' -}} {%- endif -%} {%- for message in messages -%} {%- if (message['role'] in ['user', 'tool']) != (loop.index0 % 2 == 0) -%} {{- raise_exception('Conversation roles must alternate between user/tool and assistant') -}} {%- elif message['role'] == 'user' -%} {{- 'User' + '\n' + message['content'] | trim + '\n' -}} {%- elif message['role'] == 'tool' -%} {%- set tool_response = '[' + message['content'] | trim + ']' -%} {{- 'User' + '\n' + tool_response + '\n' -}} {%- elif message['role'] == 'assistant' and message.get('tool_calls') is not none -%} {%- set tool_calls = message['tool_calls'] -%} {{- 'Assistant' + '\n' + '[' -}} {%- for tool_call in tool_calls -%} {{ {"name": tool_call.function.name, "arguments": tool_call.function.arguments} | tojson }} {%- if not loop.last -%}{{ ', ' }}{%- else -%}{{ ']' + '\n' }}{%- endif -%} {%- endfor -%} {%- elif message['role'] == 'assistant' -%} {{- 'Assistant' + '\n' + message['content'] | trim + '\n' -}} {%- endif -%} {%- endfor -%} {%- if add_generation_prompt -%} {{ 'Assistant' + '\n' }} {%- endif -%}