Files
math_model/chat_template.jinja
ModelHub XC 46be6c05d5 初始化项目,由ModelHub XC社区提供模型
Model: cs-552-2026-4neurons/math_model
Source: Original Platform
2026-06-13 09:38:16 +08:00

94 lines
5.8 KiB
Django/Jinja

{%- set enable_thinking = true %}
{%- set default_system_prompt = "You are a rigorous competition-math solver. Solve problems from prealgebra, algebra, number theory, combinatorics, probability, geometry, precalculus, and calculus.\n\nUse only information stated in the problem. Do not invent missing facts, hidden diagram properties, extra assumptions, or numerical values. \n\nWork carefully and verify each important step. Prefer exact symbolic reasoning over decimal approximations. Keep track of definitions, constraints, and edge cases.\n\nFor geometry, justify angle, length, arc, parallel, cyclic, and similarity claims before using them.\nFor counting and probability, avoid double-counting and check whether cases are disjoint and exhaustive.\nFor algebra, check domains and discard extraneous solutions.\n\nIf there are multiple plausible approaches, choose the most reliable one and complete it. If you are uncertain, give the best-supported answer from your derivation rather than making up unsupported facts.\n\nYour response may include concise reasoning, but the final answer must appear at the very end in LaTeX boxed format: \\\\boxed{answer}. Do not write anything after the final \\\\boxed{answer}.\nExamples: If the answer is 42, write \\\\boxed{42}, if the answer is p-q, write \\\\boxed{p - q}.\nFor polynomials, the answer should first display the higher order and be reduced as much as possible. Example \\\\boxed{x^3 - 300x^2 + 30000x - 999900} instead of \\\\boxed{- 999900 + x^3 - 300x^2 + 30000x } (incorrect order) or \\\\boxed{x^3 - 300x^2 + 30000x - 1000000 + 100} (not reduced)" %}
{%- if messages[0]['role'] != 'system' %}
{%- set messages = [{'role': 'system', 'content': default_system_prompt}] + messages %}
{%- endif %}
{%- if tools %}
{{- '<|im_start|>system\n' }}
{%- if messages[0].role == 'system' %}
{{- messages[0].content + '\n\n' }}
{%- endif %}
{{- "# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within <tools></tools> XML tags:\n<tools>" }}
{%- for tool in tools %}
{{- "\n" }}
{{- tool | tojson }}
{%- endfor %}
{{- "\n</tools>\n\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\n<tool_call>\n{\"name\": <function-name>, \"arguments\": <args-json-object>}\n</tool_call><|im_end|>\n" }}
{%- else %}
{%- if messages[0].role == 'system' %}
{{- '<|im_start|>system\n' + messages[0].content + '<|im_end|>\n' }}
{%- endif %}
{%- endif %}
{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}
{%- for message in messages[::-1] %}
{%- set index = (messages|length - 1) - loop.index0 %}
{%- if ns.multi_step_tool and message.role == "user" and message.content is string and not(message.content.startswith('<tool_response>') and message.content.endswith('</tool_response>')) %}
{%- set ns.multi_step_tool = false %}
{%- set ns.last_query_index = index %}
{%- endif %}
{%- endfor %}
{%- for message in messages %}
{%- if message.content is string %}
{%- set content = message.content %}
{%- else %}
{%- set content = '' %}
{%- endif %}
{%- if (message.role == "user") or (message.role == "system" and not loop.first) %}
{{- '<|im_start|>' + message.role + '\n' + content + '<|im_end|>' + '\n' }}
{%- elif message.role == "assistant" %}
{%- set reasoning_content = '' %}
{%- if message.reasoning_content is string %}
{%- set reasoning_content = message.reasoning_content %}
{%- else %}
{%- if '</think>' in content %}
{%- set reasoning_content = content.split('</think>')[0].rstrip('\n').split('<think>')[-1].lstrip('\n') %}
{%- set content = content.split('</think>')[-1].lstrip('\n') %}
{%- endif %}
{%- endif %}
{%- if loop.index0 > ns.last_query_index %}
{%- if loop.last or (not loop.last and reasoning_content) %}
{{- '<|im_start|>' + message.role + '\n<think>\n' + reasoning_content.strip('\n') + '\n</think>\n\n' + content.lstrip('\n') }}
{%- else %}
{{- '<|im_start|>' + message.role + '\n' + content }}
{%- endif %}
{%- else %}
{{- '<|im_start|>' + message.role + '\n' + content }}
{%- endif %}
{%- if message.tool_calls %}
{%- for tool_call in message.tool_calls %}
{%- if (loop.first and content) or (not loop.first) %}
{{- '\n' }}
{%- endif %}
{%- if tool_call.function %}
{%- set tool_call = tool_call.function %}
{%- endif %}
{{- '<tool_call>\n{"name": "' }}
{{- tool_call.name }}
{{- '", "arguments": ' }}
{%- if tool_call.arguments is string %}
{{- tool_call.arguments }}
{%- else %}
{{- tool_call.arguments | tojson }}
{%- endif %}
{{- '}\n</tool_call>' }}
{%- endfor %}
{%- endif %}
{{- '<|im_end|>\n' }}
{%- elif message.role == "tool" %}
{%- if loop.first or (messages[loop.index0 - 1].role != "tool") %}
{{- '<|im_start|>user' }}
{%- endif %}
{{- '\n<tool_response>\n' }}
{{- content }}
{{- '\n</tool_response>' }}
{%- if loop.last or (messages[loop.index0 + 1].role != "tool") %}
{{- '<|im_end|>\n' }}
{%- endif %}
{%- endif %}
{%- endfor %}
{%- if add_generation_prompt %}
{{- '<|im_start|>assistant\n' }}
{%- if enable_thinking is defined and enable_thinking is false %}
{{- '<think>\n\n</think>\n\n' }}
{%- endif %}
{%- endif %}