| {%- set user_messages = messages | selectattr('role', 'equalto', 'user') | list %} | |
| {%- macro output_available_tools(tools, message) %} | |
| {%- if tools and (message == user_messages[-1]) %} | |
| {{- '<|available_tools|>[' }} | |
| {%- for tool in tools %} | |
| {%- set tool = tool.function %} | |
| {{- "{" }} | |
| {%- for key, val in tool.items() if key != "return" %} | |
| {%- if val is string %} | |
| {{- "'" + key + "': '" + val + "'" }} | |
| {%- else %} | |
| {{- "'" + key + "': " + val|string }} | |
| {%- endif %} | |
| {%- if not loop.last %} | |
| {{- ", " }} | |
| {%- endif %} | |
| {%- endfor %} | |
| {{- "}" }} | |
| {%- if not loop.last %} | |
| {{- ", " }} | |
| {%- else %} | |
| {{- "]" }} | |
| {%- endif %} | |
| {%- endfor %} | |
| {{- eos_token -}} | |
| {%- endif %} | |
| {%- endmacro %} | |
| {%- macro output_tool_results(tool_results) %} | |
| {{- '<|tool_results|>[' }} | |
| {%- for tool_result in tool_results %} | |
| {{- "{'content': " + tool_result.content|string + ", 'call_id': '" + tool_result.call_id + "'}" }} | |
| {%- endfor %} | |
| {{- ']' }} | |
| {{- eos_token -}} | |
| {%- endmacro %} | |
| {%- macro output_tool_calls(tool_calls) %} | |
| {{- '<|tool_calls|>[' }} | |
| {%- for tool_call in tool_calls %} | |
| {{- "{'id': '" + tool_call.id + "', 'name': '" + tool_call.name + "', 'arguments': " + tool_call.arguments|string + '}' }} | |
| {%- endfor %} | |
| {{- ']' }} | |
| {%- endmacro %} | |
| {%- for message in messages %} | |
| {%- if message['role'] == 'user' %} | |
| {%- if tools is defined %} | |
| {{- output_available_tools(tools, message) }} | |
| {%- endif %} | |
| {{- '<|user|>' + message['content'] + eos_token -}} | |
| {%- elif message['role'] == 'system' %} | |
| {{- '<|system|>' + message['content'] + eos_token -}} | |
| {%- elif message['role'] == 'assistant' %} | |
| {% set assistant_content = "" %} | |
| {%- if message.content is defined %} | |
| {% set assistant_content = message.content %} | |
| {%- endif %} | |
| {%- if message.tool_calls is defined and message.tool_calls -%} | |
| {{- '<|assistant|>' + assistant_content + output_tool_calls(message['tool_calls']) + eos_token -}} | |
| {%- else %} | |
| {{- '<|assistant|>' + assistant_content + eos_token }} | |
| {%- endif %} | |
| {%- elif message['role'] == 'tool_results' %} | |
| {{- output_tool_results(message.tool_results) }} | |
| {%- endif %} | |
| {%- if loop.last and add_generation_prompt -%} | |
| {{- '<|assistant|>' -}} | |
| {%- endif -%} | |
| {%- endfor %} | |