| {%- set tool_choice = tool_choice | default('auto') %} |
| {%- set ns = namespace(rounds = 0, tool_types = [], last_query_index = -1) %} |
| |
| {%- if tools and tool_choice != 'none' %} |
| {{- "# Tools |
| " }} |
| {{- "You have access to the following tools: |
| |
| " }} |
| {%- for tool in tools %} |
| {%- if tool.type in ['code_interpreter', 'function'] %} |
| {%- if tool.type not in ns.tool_types %} |
| {%- set ns.tool_types = ns.tool_types + [tool.type] %} |
| {{- "## Tool namespace: " ~ tool.type ~ " |
| |
| " }} |
| {%- endif %} |
| {%- if tool.type == 'code_interpreter' %} |
| {%- set tool = {"type":"code_interpreter","function":{"name":"code_interpreter_preview","description":"The code will be executed in a stateful Jupyter notebook sandbox environment, only supports local computation, data processing, and file operations. |
| Code sandbox environment (network isolated) Any external network requests or online API calls are prohibited. |
| If online functionality is needed, please use other permitted tools. |
| Code will respond with the output of the execution or time out after 60.0 seconds. ","parameters":{"type":"object","properties":{"language":{"type":"string","description":"The programming language of the code to be executed. Available values: python (Default), java, go, js, ts, c, c++."},"code":{"type":"string","description":"Python code to be executed must not include the following: |
| - Importing network libraries such as requests, httplib, etc. |
| - Any form of HTTP requests. |
| - External API calls. |
| - Network port operations. Example: ```python |
| import pandas as pd |
| pd.DataFrame({'A':[1,2]}) |
| ```"},"timeout":{"type":"number","description":"The maximum execution time of the code, in seconds. Default is 60.0."}}},"required":["code"]}} %} |
| {%- endif %} |
| {{- "### Tool name: " + tool.function.name + " |
| |
| " }} |
| {{- "Description: " + tool.function.description + " |
| |
| " }} |
| {{- "InputSchema: |
| " + tool.function.parameters | tojson(indent=2) + " |
| |
| " }} |
| {%- endif %} |
| {%- endfor %} |
| {{- '**Note**: For each function call, return a json object with function name and arguments within <longcat_tool_call></longcat_tool_call> XML tags as follows: |
| <longcat_tool_call> |
| {"name": <function-name>, "arguments": <args-dict>} |
| </longcat_tool_call> |
| ' }} |
| {{- 'When multiple functions need to be called simultaneously, each function call should be wrapped in its own <longcat_tool_call> tag and placed consecutively. For example: |
| <longcat_tool_call> |
| {"name": <function-name>, "arguments": <args-dict>} |
| </longcat_tool_call><longcat_tool_call> |
| {"name": <function-name>, "arguments": <args-dict>} |
| </longcat_tool_call> |
| |
| ' }} |
| {{- "# Messages |
| " }} |
| |
| {%- for idx in range(messages|length - 1) %} |
| {%- set msg = messages[idx] %} |
| {%- if msg.role == 'assistant' and not msg.tool_calls %} |
| {%- set ns.last_query_index = idx %} |
| {%- endif %} |
| {%- endfor%} |
| {%- endif %} |
| |
| {%- for msg in messages %} |
| {%- if msg.role == "system" %} |
| {{- "SYSTEM:" + msg.content }} |
| {%- elif msg.role == "user" %} |
| {%- if loop.first %} |
| {{- "[Round " ~ (ns.rounds) ~ "] USER:" }} |
| {%- else %} |
| {{- " [Round " ~ (ns.rounds) ~ "] USER:"}} |
| {%- endif %} |
| {%- set ns.rounds = ns.rounds + 1 %} |
| {%- if msg["files"] %} |
| {{- '<longcat_files> |
| ' ~ msg.files | tojson(indent=2) ~ ' |
| </longcat_files>' }} |
| {%- endif %} |
| {{- msg.content }} |
| {%- elif msg.role == "assistant" %} |
| {{- " ASSISTANT:" }} |
| {%- if enable_thinking == true and msg.reasoning_content and ns.tool_types != [] and loop.index0 > ns.last_query_index %} |
| {{- " |
| <longcat_think> |
| " ~ msg.reasoning_content ~ " |
| </longcat_think> |
| " }} |
| {%- endif %} |
| {%- if msg.content%} |
| {{- msg.content }} |
| {%- endif %} |
| {%- if msg.tool_calls %} |
| {%- for tool_call in msg.tool_calls -%} |
| {{- "<longcat_tool_call> |
| " -}} |
| {%- if tool_call.function.arguments is string -%} |
| {"name": "{{ tool_call.function.name}}", "arguments": {{tool_call.function.arguments}}} |
| {%- else -%} |
| {"name": "{{ tool_call.function.name}}", "arguments": {{tool_call.function.arguments | tojson}}} |
| {%- endif -%} |
| {{- " |
| </longcat_tool_call>" }} |
| {%- endfor %} |
| {%- endif %} |
| {{- "</longcat_s>" -}} |
| {%- elif msg.role == "tool" %} |
| {{- " TOOL:" -}} |
| {%- if msg.name -%} |
| {"name": {{msg.name | tojson}}, "content": {{msg.content | tojson}}} |
| {%- else -%} |
| {"content": {{msg.content | tojson}}} |
| {%- endif -%} |
| {%- endif %} |
| {%- endfor %} |
| {%- if add_generation_prompt %} |
| {%- if enable_thinking == true %} |
| {{- " /think_on" }} |
| {%- if thinking_budget %} |
| {%- if thinking_budget < 1024 %} |
| {%- set thinking_budget = 1024 %} |
| {%- endif%} |
| {{- " |
| thinking_budget: < " ~ thinking_budget ~ "."}} |
| {%- endif %} |
| {{- " ASSISTANT:<longcat_think> |
| "}} |
| {%- elif enable_thinking == false %} |
| {{- " /think_off ASSISTANT:<longcat_think> |
| |
| </longcat_think> |
| " }} |
| {%- else %} |
| {{- " ASSISTANT:" }} |
| {%- endif %} |
| {%- endif %} |