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; }