import { transformInput } from '$lib/utils/transformInput';
import { Template } from '@huggingface/jinja';
const variations = {
variation1_qwen_xml_style: {
description:
"This variation reflects how Qwen-like models might structure tool definitions in the system message using XML-like tags and how tool responses are often wrapped. The assistant's tool invocation uses a standard `tool_calls` array which the template would then format into the model's expected string.",
example: {
messages: [
{
role: 'system',
content:
'You are a helpful assistant that can use tools to get information for the user.\n\n# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within XML tags:\n\n{"name": "get_weather", "description": "Get current weather information for a location", "parameters": {"type": "object", "properties": {"location": {"type": "string", "description": "The city and state, e.g. San Francisco, CA"}, "unit": {"type": "string", "enum": ["celsius", "fahrenheit"], "description": "The unit of temperature to use"}}, "required": ["location"]}}\n\n\nFor each function call, return a json object with function name and arguments within XML tags.'
},
{
role: 'user',
content: "What's the weather like in New York?"
},
{
role: 'assistant',
content:
"\nThe user is asking about the weather in New York. I should use the weather tool to get this information.\n\nI'll check the current weather in New York for you.",
tool_calls: [
{
function: {
name: 'get_weather',
arguments: {
location: 'New York',
unit: 'celsius'
}
}
}
]
},
{
role: 'user',
content:
'\n{"temperature": 22, "condition": "Sunny", "humidity": 45, "wind_speed": 10}\n'
},
{
role: 'assistant',
content:
"The weather in New York is currently sunny with a temperature of 22°C. The humidity is at 45% with a wind speed of 10 km/h. It's a great day to be outside!"
},
{
role: 'user',
content: 'Thanks! What about Boston?'
}
],
tools: [
{
name: 'get_weather',
description: 'Get current weather information for a location',
parameters: {
type: 'object',
properties: {
location: {
type: 'string',
description: 'The city and state, e.g. San Francisco, CA'
},
unit: {
type: 'string',
enum: ['celsius', 'fahrenheit'],
description: 'The unit of temperature to use'
}
},
required: ['location']
}
}
],
add_generation_prompt: true
}
},
variation3_deepseek_special_tags_style: {
description:
'This variation reflects DeepSeek-like models using specialized tags for tool calls. The `tool_calls` array in the assistant message would contain arguments as a JSON string, which the template then formats with specific tags and markdown.',
example: {
messages: [
{
role: 'system',
content: 'You are a helpful assistant.'
},
{
role: 'user',
content: "What's the weather like in New York?"
},
{
role: 'assistant',
content:
"\nThe user is asking about the weather in New York. I should use the weather tool to get this information.\n\nI'll check the current weather in New York for you.",
tool_calls: [
{
type: 'function',
function: {
name: 'get_weather',
arguments: '{"location": "New York", "unit": "celsius"}'
}
}
]
},
{
role: 'tool',
content: '{"temperature": 22, "condition": "Sunny", "humidity": 45, "wind_speed": 10}'
},
{
role: 'assistant',
content:
"The weather in New York is currently sunny with a temperature of 22°C. The humidity is at 45% with a wind speed of 10 km/h. It's a great day to be outside!"
},
{
role: 'user',
content: 'Thanks! What about Boston?'
}
],
tools: [
{
name: 'get_weather',
description: 'Get current weather information for a location',
parameters: {
type: 'object',
properties: {
location: {
type: 'string',
description: 'The city and state, e.g. San Francisco, CA'
},
unit: {
type: 'string',
enum: ['celsius', 'fahrenheit'],
description: 'The unit of temperature to use'
}
},
required: ['location']
}
}
],
add_generation_prompt: true
}
},
variation4_mistral_tags_style: {
description:
"This variation demonstrates the Mistral-like approach using `[AVAILABLE_TOOLS]` (implicitly handled by the template from the 'tools' array), `[TOOL_CALLS]` with IDs, and `[TOOL_RESULTS]`.",
example: {
messages: [
{
role: 'system',
content: 'You are a helpful assistant that can use tools to get information for the user.'
},
{
role: 'user',
content: "What's the weather like in New York?"
},
{
role: 'assistant',
content:
"\nThe user is asking about the weather in New York. I should use the weather tool to get this information.\n\nI'll check the current weather in New York for you.",
tool_calls: [
{
id: 'call_weather_nyc_001',
function: {
name: 'get_weather',
arguments: {
location: 'New York',
unit: 'celsius'
}
}
}
]
},
{
role: 'tool',
tool_call_id: 'call_weather_nyc_001',
content: '{"temperature": 22, "condition": "Sunny", "humidity": 45, "wind_speed": 10}'
},
{
role: 'assistant',
content:
"The weather in New York is currently sunny with a temperature of 22°C. The humidity is at 45% with a wind speed of 10 km/h. It's a great day to be outside!"
},
{
role: 'user',
content: 'Thanks! What about Boston?'
}
],
tools: [
{
name: 'get_weather',
description: 'Get current weather information for a location',
parameters: {
type: 'object',
properties: {
location: {
type: 'string',
description: 'The city and state, e.g. San Francisco, CA'
},
unit: {
type: 'string',
enum: ['celsius', 'fahrenheit'],
description: 'The unit of temperature to use'
}
},
required: ['location']
}
}
],
add_generation_prompt: true
}
},
variation5_generic_openai_anthropic_style: {
description:
'This is the generic style, often compatible with OpenAI and Anthropic models, similar to your provided example. It serves as a baseline.',
example: {
messages: [
{
role: 'system',
content: 'You are a helpful assistant that can use tools to get information for the user.'
},
{
role: 'user',
content: "What's the weather like in New York?"
},
{
role: 'assistant',
content:
"\nThe user is asking about the weather in New York. I should use the weather tool to get this information.\n\nI'll check the current weather in New York for you.",
tool_calls: [
{
function: {
name: 'get_weather',
arguments: {
location: 'New York',
unit: 'celsius'
}
}
}
]
},
{
role: 'tool',
content: '{"temperature": 22, "condition": "Sunny", "humidity": 45, "wind_speed": 10}'
},
{
role: 'assistant',
content:
"The weather in New York is currently sunny with a temperature of 22°C. The humidity is at 45% with a wind speed of 10 km/h. It's a great day to be outside!"
},
{
role: 'user',
content: 'Thanks! What about Boston?'
}
],
tools: [
{
name: 'get_weather',
description: 'Get current weather information for a location',
parameters: {
type: 'object',
properties: {
location: {
type: 'string',
description: 'The city and state, e.g. San Francisco, CA'
},
unit: {
type: 'string',
enum: ['celsius', 'fahrenheit'],
description: 'The unit of temperature to use'
}
},
required: ['location']
}
}
],
add_generation_prompt: true
}
},
variation6_granite_style: {
description:
"This variation reflects Granite-like models where the tool call might be embedded directly in the assistant's content string, prefixed by a special tag like `<|tool_call|>`. The `available_tools` would be passed to the template engine.",
example: {
messages: [
{
role: 'system',
content:
"You are Granite, developed by IBM. You are a helpful assistant with access to the following tools. When a tool is required to answer the user's query, respond only with <|tool_call|> followed by a JSON list of tools used."
},
{
role: 'user',
content: "What's the weather like in New York?"
},
{
role: 'assistant',
content:
'\nThe user is asking about the weather in New York. I should use the weather tool to get this information.\n\nI\'ll check the current weather in New York for you.\n<|tool_call|>[{"name": "get_weather", "arguments": {"location": "New York", "unit": "celsius"}}]'
},
{
role: 'tool',
content: '{"temperature": 22, "condition": "Sunny", "humidity": 45, "wind_speed": 10}'
},
{
role: 'assistant',
content:
"The weather in New York is currently sunny with a temperature of 22°C. The humidity is at 45% with a wind speed of 10 km/h. It's a great day to be outside!"
},
{
role: 'user',
content: 'Thanks! What about Boston?'
}
],
tools: [
{
name: 'get_weather',
description: 'Get current weather information for a location',
parameters: {
type: 'object',
properties: {
location: {
type: 'string',
description: 'The city and state, e.g. San Francisco, CA'
},
unit: {
type: 'string',
enum: ['celsius', 'fahrenheit'],
description: 'The unit of temperature to use'
}
},
required: ['location']
}
}
],
add_generation_prompt: true
}
},
variation2_llama3_style: {
description:
"This variation shows how Llama-3.1-like models might handle tool definitions passed within the first user message. The assistant's invocation uses a standard `tool_calls` array.",
example: {
messages: [
{
role: 'system',
content:
'Environment: ipython\nCutting Knowledge Date: December 2023\nToday Date: 2025-05-14\n\nYou are a helpful assistant.'
},
{
role: 'user',
content:
'Given the following functions, please respond with a JSON for a function call with its proper arguments that best answers the given prompt.\n\nRespond in the format {"name": function name, "parameters": dictionary of argument name and its value}.\nDo not use variables.\n\n[\n {\n "name": "get_weather",\n "description": "Get current weather information for a location",\n "parameters": {\n "type": "object",\n "properties": {\n "location": {\n "type": "string",\n "description": "The city and state, e.g. San Francisco, CA"\n },\n "unit": {\n "type": "string",\n "enum": ["celsius", "fahrenheit"],\n "description": "The unit of temperature to use"\n }\n },\n "required": ["location"]\n }\n }\n]\n\nWhat\'s the weather like in New York?'
},
{
role: 'assistant',
content:
"\nThe user is asking about the weather in New York. I should use the weather tool to get this information.\n\nI'll check the current weather in New York for you.",
tool_calls: [
{
function: {
name: 'get_weather',
arguments: {
location: 'New York',
unit: 'celsius'
}
}
}
]
},
{
role: 'tool',
content: '{"temperature": 22, "condition": "Sunny", "humidity": 45, "wind_speed": 10}'
},
{
role: 'assistant',
content:
"The weather in New York is currently sunny with a temperature of 22°C. The humidity is at 45% with a wind speed of 10 km/h. It's a great day to be outside!"
},
{
role: 'user',
content: 'Thanks! What about Boston?'
}
],
tools: null,
add_generation_prompt: true
}
}
};
export function getExampleToolUsage(templateStr: string): Record | undefined {
const template = new Template(templateStr);
for (const variation of Object.values(variations)) {
try {
const variationRendered = template.render(transformInput(variation.example, templateStr));
if (variationRendered.includes('get_weather')) {
return variation.example;
}
} catch (e) {
console.error(e);
}
}
return undefined;
}