|
{%- 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 %} |