{%- set ns = namespace(enable_thinking=true) -%} {%- for message in messages -%} {%- set content = message['content'] -%} {%- if message['role'] == 'user' or message['role'] == 'system' -%} {%- if '/think' in content -%} {%- set ns.enable_thinking = true -%} {%- elif '/no_think' in content -%} {%- set ns.enable_thinking = false -%} {%- endif -%} {%- endif -%} {%- endfor -%} {%- if messages[0]['role'] != 'system' -%} {%- set ns.non_tool_system_content = '' -%} {{- 'System ' -}} {%- else -%} {%- set ns.non_tool_system_content = (messages[0]['content'] | default('', true)).replace('/think', '').replace('/no_think', '').strip() -%} {{- 'System ' + ns.non_tool_system_content }} {%- endif -%} {%- if tools -%} {%- if ns.non_tool_system_content is defined and ns.non_tool_system_content != '' -%} {{- ' ' -}} {%- endif -%} {{- 'You can use the following tools to assist the user if required:' -}} {{- ' [' -}} {%- for tool in tools -%} {{- (tool.function if tool.function is defined else tool) | tojson -}} {{- ', ' if not loop.last else '' -}} {%- endfor -%} {{- '] ' -}} {{- 'If you decide to call any tool(s), use the following format: ' -}} {{- '[{{"name": "tool_name1", "arguments": "tool_args1"}}, ' -}} {{- '{{"name": "tool_name2", "arguments": "tool_args2"}}] ' -}} {{- 'The user will execute tool-calls and return responses from tool(s) in this format: ' -}} {{- '[{{"tool_response1"}}, {{"tool_response2"}}] ' -}} {{- 'Based on the tool responses, you can call additional tools if needed, correct tool calls if any errors are found, or just respond to the user.' -}} {%- endif -%} {{- ' ' -}} {%- set messages = messages[1:] if messages[0]['role'] == 'system' else messages -%} {%- if messages[-1]['role'] == 'assistant' -%} {%- set ns.last_turn_assistant_content = (messages[-1]['content'] | default('', true)).strip() -%} {%- set ns.last_turn_assistant_tool_calls = messages[-1]['tool_calls'] if 'tool_calls' in messages[-1] else [] -%} {%- set messages = messages[:-1] -%} {%- endif -%} {%- for message in messages %} {%- set content = message['content'] %} {%- if message['role'] == 'user' -%} {{- 'User ' + (content | default('', true)).replace('/think', '').replace('/no_think', '').strip() + ' ' }} {%- elif message['role'] == 'tool' -%} {%- if loop.first or (messages[loop.index0 - 1].role != 'tool') -%} {{- 'User ' + '[' }} {%- endif -%} {{- message['content'] -}} {{- ', ' if not loop.last and (messages[loop.index0 + 1].role == 'tool') else '' -}} {%- if loop.last or (messages[loop.index0 + 1].role != 'tool') -%} {{- ']' -}} {%- endif -%} {%- elif message['role'] == 'assistant' -%} {%- if content and '' in content -%} {%- set content = (content.split('')[1] | default('', true)).strip() %} {%- endif -%} {{- 'Assistant ' + ((content | default('', true)).strip() if content is not none else '') }} {%- if message.tool_calls -%} {%- if (content | default('', true)).strip() != '' -%} {{- ' ' -}} {%- endif -%} {{- '[' -}} {%- for call in message.tool_calls -%} {%- set fn = call.function if call.function is defined else call -%} {{- '{"name": "' + fn.name + '", "arguments": ' -}} {%- if fn.arguments is string -%} {{- fn.arguments -}} {%- else -%} {{- fn.arguments | tojson -}} {%- endif -%} {{- '}' + (', ' if not loop.last else '') -}} {%- endfor -%} {{- ']' -}} {%- endif -%} {{- ' ' -}} {%- endif -%} {%- endfor -%} {%- if add_generation_prompt -%} {{- 'Assistant ' -}} {%- if ns.enable_thinking is defined and ns.enable_thinking is false -%} {{- '' -}} {%- else -%} {{- ' ' -}} {%- endif -%} {%- if ns.last_turn_assistant_content is defined and ns.last_turn_assistant_content != '' -%} {{- ns.last_turn_assistant_content -}} {%- endif -%} {%- else -%} {%- if ns.last_turn_assistant_content is defined and ns.last_turn_assistant_content != '' -%} {{- 'Assistant ' -}} {%- if ns.enable_thinking is defined and ns.enable_thinking is false -%} {{- '' -}} {%- else -%} {{- ' ' -}} {%- endif -%} {{- ns.last_turn_assistant_content -}} {%- if continue_final_message is defined -%} {%- if continue_final_message is false -%} {{- ' ' -}} {%- endif -%} {%- else -%} {{- ' ' -}} {%- endif -%} {%- endif -%} {%- if ns.last_turn_assistant_tool_calls is defined and ns.last_turn_assistant_tool_calls | length > 0 -%} {{- 'Assistant ' -}} {{- '[' -}} {%- for call in ns.last_turn_assistant_tool_calls -%} {%- set fn = call.function if call.function is defined else call -%} {{- '{"name": "' + fn.name + '", "arguments": ' -}} {%- if fn.arguments is string -%} {{- fn.arguments -}} {%- else -%} {{- fn.arguments | tojson -}} {%- endif -%} {{- '}' + (', ' if not loop.last else '') -}} {%- endfor -%} {{- ']' -}} {{- ' ' -}} {%- endif -%} {%- endif -%}