{%- set ns = namespace(enable_thinking=false, has_sys_prompt=false, non_tool_system_content='', has_video=false, explicit_think_requested=false) -%} {%- set msg = namespace(content='') -%} {%- for message in messages -%} {%- if message['role'] == 'system' -%} {%- set ns.has_sys_prompt = true -%} {# Extract system content without tool flags #} {%- if message['content'] is string -%} {%- set ns.non_tool_system_content = message['content'].replace('', '<_end_think>').replace('/think', '').replace('/no_think', '').replace('<_end_think>', '').strip() -%} {%- else -%} {%- set ns.non_tool_system_content = '' -%} {%- for content in message['content'] -%} {%- if content['type'] == 'text' -%} {%- set ns.non_tool_system_content = ns.non_tool_system_content + content['text'].replace('', '<_end_think>').replace('/think', '').replace('/no_think', '').replace('<_end_think>', '') -%} {%- endif -%} {%- endfor -%} {%- set ns.non_tool_system_content = ns.non_tool_system_content.strip() -%} {%- endif -%} {%- endif -%} {# Check for video content in all messages #} {%- if message['content'] is not string -%} {%- for content in message['content'] -%} {%- if content['type'] == 'video' or content['type'] == 'video_url' -%} {%- set ns.has_video = true -%} {%- endif -%} {%- endfor -%} {%- endif -%} {%- if message['content'] is string -%} {%- if message['role'] == 'user' or message['role'] == 'system' -%} {%- if '/think' in message['content'].replace('', '') -%} {%- set ns.enable_thinking = true -%} {%- set ns.explicit_think_requested = true -%} {%- elif '/no_think' in message['content'] -%} {%- set ns.enable_thinking = false -%} {%- endif -%} {%- endif -%} {%- else -%} {%- for content in message['content'] -%} {%- if content['type'] == 'text' -%} {%- if message['role'] == 'user' or message['role'] == 'system' -%} {%- if '/think' in content['text'].replace('', '') -%} {%- set ns.enable_thinking = true -%} {%- set ns.explicit_think_requested = true -%} {%- elif '/no_think' in content['text'] -%} {%- set ns.enable_thinking = false -%} {%- endif -%} {%- endif -%} {%- endif -%} {%- endfor -%} {%- endif -%} {%- endfor -%} {# Error out if video is present and reasoning is explicitly requested #} {%- if ns.has_video and ns.explicit_think_requested -%} {{ raise_exception('Video inputs are not supported with reasoning mode. Please remove /think flag or remove video content.') }} {%- endif -%} {# Automatically disable reasoning if video is present (without explicit /think request) #} {%- if ns.has_video and not ns.explicit_think_requested -%} {%- set ns.enable_thinking = false -%} {%- endif -%} {%- if messages[0]['role'] != 'system' -%} {{- 'System\n' -}} {%- else -%} {{- 'System\n' + ns.non_tool_system_content }} {%- endif -%} {%- if tools -%} {%- if ns.non_tool_system_content != '' -%} {{- '\n\n' -}} {%- endif -%} {{- 'You can use the following tools to assist the user if required:\n' -}} {{- '[' -}} {%- for tool in tools -%} {{- (tool.function if tool.function is defined else tool) | tojson -}} {{- ', ' if not loop.last else '' -}} {%- endfor -%} {{- ']\n\n' -}} {{- 'If you decide to call any tool(s), use the following format:\n' -}} {{- '[{"name": "tool_name1", "arguments": "tool_args1"}, ' -}} {{- '{"name": "tool_name2", "arguments": "tool_args2"}]\n\n' -}} {{- 'The user will execute tool-calls and return responses from tool(s) in this format:\n' -}} {{- '[{"response": "tool_response1"}, ' -}} {{- '{"response": "tool_response2"}]\n\n' -}} {{- '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 -%} {{- '\n' -}} {%- set messages = messages[1:] if messages[0]['role'] == 'system' else messages -%} {# Prevent no user or assistant message #} {%- if messages|length == 0 -%} {%- set messages = [{'role': 'user', 'content': ''}] -%} {%- endif -%} {%- for message in messages %} {%- if message['content'] is string -%} {%- set msg.content = message['content'].replace('', '<_end_think>').replace('/think', '').replace('/no_think', '').replace('<_end_think>', '').strip() -%} {%- else -%} {%- set msg.content = '' -%} {%- set mm_content = '' -%} {%- set counters = namespace(images=0, videos=0) -%} {%- for content in message['content'] -%} {%- if content['type'] == 'image' -%} {%- set counters.images = counters.images + 1 -%} {%- elif content['type'] == 'video' -%} {%- set counters.videos = counters.videos + 1 -%} {%- elif content['type'] == 'text' -%} {%- set msg.content = msg.content + content['text'] -%} {%- endif -%} {%- endfor -%} {%- if '' in msg.content -%} {%- set counters.images = 0 -%} {%- endif -%} {%- if '