{#- quimmedes -#} {%- set image_count = namespace(value=0) %} {%- set video_count = namespace(value=0) %} {%- macro render_content(content, do_vision_count=false, is_system_content=false) %} {%- if content is string %} {{- content }} {%- elif content is iterable and content is not mapping %} {%- for item in content %} {%- if item is none %} {{- '' }} {%- elif item is string %} {{- item }} {%- elif 'image' in item or 'image_url' in item or item.get('type') == 'image' %} {%- if is_system_content %} {{- raise_exception('System message cannot contain images.') }} {%- endif %} {%- if do_vision_count %} {%- set image_count.value = image_count.value + 1 %} {%- endif %} {%- if add_vision_id|default(false) %} {{- 'Picture ' ~ image_count.value ~ ': ' }} {%- endif %} {{- '<|vision_start|><|image_pad|><|vision_end|>' }} {%- elif 'video' in item or item.get('type') == 'video' %} {%- if is_system_content %} {{- raise_exception('System message cannot contain videos.') }} {%- endif %} {%- if do_vision_count %} {%- set video_count.value = video_count.value + 1 %} {%- endif %} {%- if add_vision_id|default(false) %} {{- 'Video ' ~ video_count.value ~ ': ' }} {%- endif %} {{- '<|vision_start|><|video_pad|><|vision_end|>' }} {%- elif 'text' in item %} {{- item.text }} {%- elif 'content' in item and item.get('type') == 'text' %} {{- item.content }} {%- 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 %} {%- if not messages %} {{- raise_exception('No messages provided.') }} {%- endif %} {# Reasoning effort handling: defaults to low #} {%- set reasoning_instructions = '' %} {%- if enable_thinking is undefined or enable_thinking is true %} {%- set resolved_reasoning_effort = reasoning_effort|default('low') %} {%- if resolved_reasoning_effort not in ('minimal', 'low', 'medium', 'high', 'xhigh', 'ultra', 'max') %} {{- raise_exception('Unexpected reasoning effort ' ~ resolved_reasoning_effort ~ '. Supported types are minimal, low (default), medium, high, xhigh, ultra, and max.') }} {%- endif %} {%- if resolved_reasoning_effort in ('low', 'minimal') %} {%- set reasoning_instructions = 'Reasoning effort is set to ' ~ resolved_reasoning_effort ~ '. Be concise and direct. Conclude your thinking as soon as the answer is reached without unnecessary elaboration.' %} {%- elif resolved_reasoning_effort == 'medium' %} {%- set reasoning_instructions = 'Reasoning effort is set to medium. Think through the problem step-by-step in a clear and linear fashion. Check key assumptions and provide a solid answer without circular deliberation.' %} {%- elif resolved_reasoning_effort == 'high' %} {%- set reasoning_instructions = 'Reasoning effort is set to high. Think thoroughly and systematically through the task. Validate essential assumptions, consider plausible alternative approaches, and verify correctness before concluding.' %} {%- elif resolved_reasoning_effort == 'xhigh' %} {%- set reasoning_instructions = 'Reasoning effort is set to xhigh. Use extensive reasoning. Break down complex aspects of the task, evaluate edge cases, compare viable methods, and ensure high rigor in the final conclusion.' %} {#- quimmedes notes: that is going take a while, good luck with that -#} {%- elif resolved_reasoning_effort in ('max', 'ultra') %} {%- set reasoning_instructions = 'Reasoning effort is set to ' ~ resolved_reasoning_effort ~ '. Use the most rigorous reasoning possible. Exhaustively verify assumptions, explore all critical edge cases, and ensure complete logical consistency and correctness.' %} {%- endif %} {%- endif %} {%- if tools and tools is iterable and tools is not mapping %} {{- '<|im_start|>system\n' }} {%- if reasoning_instructions %} {{- reasoning_instructions + '\n\n' }} {%- endif %} {{- "# Tools\n\nYou have access to the following functions:\n\n" }} {%- for tool in tools %} {{- "\n" }} {{- tool | tojson }} {%- endfor %} {{- "\n" }} {{- '\n\nIf you choose to call a function ONLY reply in the following format with NO suffix:\n\n\n\n\nvalue_1\n\n\nThis is the value for the second parameter\nthat can span\nmultiple lines\n\n\n\n\n\nReminder:\n- Function calls MUST follow the specified format: an inner block must be nested within XML tags\n- Required parameters MUST be specified\n- You may provide optional reasoning for your function call in natural language BEFORE the function call, but NOT after\n- If there is no function call available, answer the question like normal with your current knowledge and do not tell the user about function calls\n' }} {%- if messages[0].role == 'system' %} {%- set content = render_content(messages[0].content, false, true)|trim %} {%- if content %} {{- '\n\n' + content }} {%- endif %} {%- endif %} {{- '<|im_end|>\n' }} {%- else %} {%- if messages[0].role == 'system' %} {%- set content = render_content(messages[0].content, false, true)|trim %} {%- if content %} {{- '<|im_start|>system\n' + (reasoning_instructions + '\n\n' if reasoning_instructions else '') + content + '<|im_end|>\n' }} {%- elif reasoning_instructions %} {{- '<|im_start|>system\n' + reasoning_instructions + '<|im_end|>\n' }} {%- endif %} {%- elif reasoning_instructions %} {{- '<|im_start|>system\n' + reasoning_instructions + '<|im_end|>\n' }} {%- endif %} {%- endif %} {%- set ns = namespace(last_query_index=-1) %} {%- for message in messages[::-1] %} {%- set index = (messages|length - 1) - loop.index0 %} {%- if ns.last_query_index == -1 and message.role == "user" %} {%- set content = render_content(message.content, false)|trim %} {%- if not(content.startswith('') and content.endswith('')) %} {%- set ns.last_query_index = index %} {%- endif %} {%- endif %} {%- endfor %} {%- for message in messages %} {%- set content = render_content(message.content, true)|trim %} {%- if message.role == "system" %} {%- if not loop.first %} {{- raise_exception('System message must be at the beginning.') }} {%- endif %} {%- elif message.role == "user" %} {{- '<|im_start|>' + message.role + '\n' + content + '<|im_end|>\n' }} {%- elif message.role == "assistant" %} {%- set reasoning_content = '' %} {%- if message.reasoning_content is defined and message.reasoning_content is string %} {%- set reasoning_content = message.reasoning_content|trim %} {%- endif %} {{- '<|im_start|>' + message.role }} {%- if reasoning_content and (preserve_thinking|default(true) or (ns.last_query_index != -1 and loop.index0 > ns.last_query_index)) %} {{- '\n\n' + reasoning_content + '\n' }} {%- if content %} {{- '\n\n' + content }} {%- endif %} {%- elif content %} {{- '\n' + content }} {%- endif %} {%- if message.tool_calls and message.tool_calls is iterable and message.tool_calls is not mapping %} {%- for tool_call in message.tool_calls %} {%- if tool_call.function is defined %} {%- set tool_call = tool_call.function %} {%- endif %} {%- if loop.first and not content and not reasoning_content %} {{- '\n\n\n' }} {%- else %} {{- '\n\n\n\n' }} {%- endif %} {%- if tool_call.arguments is defined and tool_call.arguments %} {%- if tool_call.arguments is mapping %} {%- for args_name, args_value in tool_call.arguments.items() %} {{- '\n' }} {%- set args_value = args_value | string if args_value is string else args_value | tojson %} {{- args_value }} {{- '\n\n' }} {%- endfor %} {%- elif tool_call.arguments is string %} {{- tool_call.arguments }} {%- if not tool_call.arguments.endswith('\n') %} {{- '\n' }} {%- endif %} {%- endif %} {%- endif %} {{- '\n' }} {%- endfor %} {%- endif %} {{- '<|im_end|>\n' }} {%- elif message.role == "tool" %} {%- if loop.first or (loop.previtem and loop.previtem.role != "tool") %} {{- '<|im_start|>user' }} {%- endif %} {{- '\n\n' }} {{- content }} {{- '\n' }} {%- if loop.last or (loop.nextitem and loop.nextitem.role != "tool") %} {{- '<|im_end|>\n' }} {%- endif %} {%- else %} {{- raise_exception('Unexpected message role: ' ~ message.role) }} {%- endif %} {%- endfor %} {%- if add_generation_prompt %} {{- '<|im_start|>assistant\n' }} {%- if enable_thinking is defined and enable_thinking is false %} {{- '\n\n\n\n' }} {%- elif enable_thinking is defined and enable_thinking is true %} {{- '\n' }} {%- else %} {{- '\n' }} {%- endif %} {%- endif %} {#- quimmedes -#}