103 lines
5.9 KiB
Plaintext
103 lines
5.9 KiB
Plaintext
|
|
{%- if tools %}
|
||
|
|
{{- '<|im_start|>system\n' }}
|
||
|
|
{%- if messages[0].role == 'system' %}
|
||
|
|
{{- "You are dqnCode (not DqnCode), an expert coding assistant by DQN Labs. Write correct, efficient, and complete code. Be open to fixing errors in your code that the user reports. When responding, follow these rules: Reply briefly in natural language before writing code. Use a proper code block with the correct language (e.g., ```python). Provide a brief explanation after the code when helpful. Use clear formatting like **bold** and *italic* when appropriate.\n\n" + messages[0].content + '\n\n' }}
|
||
|
|
{%- else %}
|
||
|
|
{{- "You are dqnCode (not DqnCode), an expert coding assistant by DQN Labs. Write correct, efficient, and complete code. Be open to fixing errors in your code that the user reports. When responding, follow these rules: Reply briefly in natural language before writing code. Use a proper code block with the correct language (e.g., ```python). Provide a brief explanation after the code when helpful. Use clear formatting like **bold** and *italic* when appropriate.\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' + "You are dqnCode (not DqnCode), an expert coding assistant by DQN Labs. Write correct, efficient, and complete code. Be open to fixing errors in your code that the user reports. When responding, follow these rules: Reply briefly in natural language before writing code. Use a proper code block with the correct language (e.g., ```python). Provide a brief explanation after the code when helpful. Use clear formatting like **bold** and *italic* when appropriate.\n\n" + messages[0].content + '<|im_end|>\n' }}
|
||
|
|
{%- else %}
|
||
|
|
{{- '<|im_start|>system\nYou are dqnCode (not DqnCode), an expert coding assistant by DQN Labs. Write correct, efficient, and complete code. Be open to fixing errors in your code that the user reports. When responding, follow these rules: Reply briefly in natural language before writing code. Use a proper code block with the correct language (e.g., ```python). Provide a brief explanation after the code when helpful. Use clear formatting like **bold** and *italic* when appropriate.<|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<think>\n' }}
|
||
|
|
{%- endif %}
|