| 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 <tools></tools> XML tags:\n<tools>\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</tools>\n\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags.' | |
| }, | |
| { | |
| role: 'user', | |
| content: "What's the weather like in New York?" | |
| }, | |
| { | |
| role: 'assistant', | |
| content: | |
| "<think>\nThe user is asking about the weather in New York. I should use the weather tool to get this information.\n</think>\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: | |
| '<tool_response>\n{"temperature": 22, "condition": "Sunny", "humidity": 45, "wind_speed": 10}\n</tool_response>' | |
| }, | |
| { | |
| 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: | |
| "<think>\nThe user is asking about the weather in New York. I should use the weather tool to get this information.\n</think>\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: | |
| "<think>\nThe user is asking about the weather in New York. I should use the weather tool to get this information.\n</think>\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: | |
| "<think>\nThe user is asking about the weather in New York. I should use the weather tool to get this information.\n</think>\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: | |
| '<think>\nThe user is asking about the weather in New York. I should use the weather tool to get this information.\n</think>\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: | |
| "<think>\nThe user is asking about the weather in New York. I should use the weather tool to get this information.\n</think>\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<string, unknown> | 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; | |
| } | |