@ai-sdk-tool/parser 3.0.0-canary.3 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-DFOXAWP6.js +1 -0
- package/dist/chunk-DFOXAWP6.js.map +1 -0
- package/dist/chunk-NOYHOQOL.js +2489 -0
- package/dist/chunk-NOYHOQOL.js.map +1 -0
- package/dist/chunk-QPJA5CS6.js +1289 -0
- package/dist/chunk-QPJA5CS6.js.map +1 -0
- package/dist/community.cjs +2665 -2513
- package/dist/community.cjs.map +1 -1
- package/dist/community.js +5 -2
- package/dist/community.js.map +1 -1
- package/dist/index.cjs +2690 -2504
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +25 -132
- package/dist/index.d.ts +25 -132
- package/dist/index.js +19 -8
- package/dist/tool-call-protocol-Bn2CBcD-.d.cts +84 -0
- package/dist/tool-call-protocol-Bn2CBcD-.d.ts +84 -0
- package/dist/v5.cjs +2816 -0
- package/dist/v5.cjs.map +1 -0
- package/dist/v5.d.cts +14 -0
- package/dist/v5.d.ts +14 -0
- package/dist/v5.js +476 -0
- package/dist/v5.js.map +1 -0
- package/dist/{chunk-2B2YNKXY.js → v6.cjs} +1198 -1087
- package/dist/v6.cjs.map +1 -0
- package/dist/v6.d.cts +16 -0
- package/dist/v6.d.ts +16 -0
- package/dist/v6.js +16 -0
- package/dist/v6.js.map +1 -0
- package/package.json +23 -8
- package/dist/chunk-2B2YNKXY.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/protocols/yaml-xml-protocol.ts","../src/v6/generate-handler.ts","../src/v6/stream-handler.ts","../src/v6/transform-handler.ts","../src/v6/tool-call-middleware.ts","../src/v6/index.ts"],"sourcesContent":["import { unwrapJsonSchema, stringify as xmlStringify } from \"@ai-sdk-tool/rxml\";\nimport YAML from \"yaml\";\nimport type {\n TCMCoreContentPart,\n TCMCoreStreamPart,\n TCMCoreToolCall,\n TCMCoreToolResult,\n} from \"../types\";\nimport { generateId } from \"../utils/id\";\nimport type { ToolCallProtocol } from \"./tool-call-protocol\";\n\nexport interface YamlXmlProtocolOptions {\n /**\n * Whether to include a system prompt example showing YAML multiline syntax.\n * @default true\n */\n includeMultilineExample?: boolean;\n}\n\ninterface ParserOptions {\n onError?: (message: string, metadata?: Record<string, unknown>) => void;\n}\n\nconst NAME_CHAR_RE = /[A-Za-z0-9_:-]/;\nconst WHITESPACE_REGEX = /\\s/;\nconst LEADING_WHITESPACE_RE = /^(\\s*)/;\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: XML tag parsing with nested tag tracking inherently requires complex state management\nfunction findClosingTagEnd(\n text: string,\n contentStart: number,\n toolName: string\n): number {\n let pos = contentStart;\n let depth = 1;\n\n while (pos < text.length) {\n const ltIdx = text.indexOf(\"<\", pos);\n if (ltIdx === -1) {\n break;\n }\n\n const next = text[ltIdx + 1];\n if (next === \"/\") {\n const gtIdx = text.indexOf(\">\", ltIdx);\n if (gtIdx === -1) {\n break;\n }\n\n let p = ltIdx + 2;\n while (p < gtIdx && WHITESPACE_REGEX.test(text[p])) {\n p++;\n }\n const nameStart = p;\n while (p < gtIdx && NAME_CHAR_RE.test(text.charAt(p))) {\n p++;\n }\n const name = text.slice(nameStart, p);\n\n if (name === toolName) {\n depth--;\n if (depth === 0) {\n return gtIdx + 1;\n }\n }\n pos = gtIdx + 1;\n } else if (next === \"!\" || next === \"?\") {\n const gtIdx = text.indexOf(\">\", ltIdx);\n pos = gtIdx === -1 ? text.length : gtIdx + 1;\n } else {\n let p = ltIdx + 1;\n while (p < text.length && WHITESPACE_REGEX.test(text[p])) {\n p++;\n }\n const nameStart = p;\n while (p < text.length && NAME_CHAR_RE.test(text.charAt(p))) {\n p++;\n }\n const name = text.slice(nameStart, p);\n\n const gtIdx = text.indexOf(\">\", p);\n if (gtIdx === -1) {\n break;\n }\n\n let r = gtIdx - 1;\n while (r >= nameStart && WHITESPACE_REGEX.test(text[r])) {\n r--;\n }\n const selfClosing = text[r] === \"/\";\n\n if (name === toolName && !selfClosing) {\n depth++;\n }\n pos = gtIdx + 1;\n }\n }\n\n return -1;\n}\n\nfunction findEarliestTagPosition(\n openIdx: number,\n selfIdx: number\n): { tagStart: number; isSelfClosing: boolean } {\n const hasSelf = selfIdx !== -1;\n const hasOpen = openIdx !== -1;\n\n if (hasSelf && (!hasOpen || selfIdx < openIdx)) {\n return { tagStart: selfIdx, isSelfClosing: true };\n }\n return { tagStart: openIdx, isSelfClosing: false };\n}\n\n/**\n * Find all tool calls in the text for the given tool names.\n */\ninterface ToolCallMatch {\n toolName: string;\n startIndex: number;\n endIndex: number;\n content: string;\n}\n\nfunction collectToolCallsForName(\n text: string,\n toolName: string\n): ToolCallMatch[] {\n const toolCalls: ToolCallMatch[] = [];\n let searchIndex = 0;\n const selfTagRegex = new RegExp(`<${toolName}\\\\s*/>`, \"g\");\n\n while (searchIndex < text.length) {\n const startTag = `<${toolName}>`;\n const openIdx = text.indexOf(startTag, searchIndex);\n\n selfTagRegex.lastIndex = searchIndex;\n const selfMatch = selfTagRegex.exec(text);\n const selfIdx = selfMatch ? selfMatch.index : -1;\n const selfTagLength = selfMatch ? selfMatch[0].length : 0;\n\n if (openIdx === -1 && selfIdx === -1) {\n break;\n }\n\n const { tagStart, isSelfClosing } = findEarliestTagPosition(\n openIdx,\n selfIdx\n );\n\n if (isSelfClosing) {\n const endIndex = tagStart + selfTagLength;\n toolCalls.push({\n toolName,\n startIndex: tagStart,\n endIndex,\n content: \"\",\n });\n searchIndex = endIndex;\n continue;\n }\n\n const contentStart = tagStart + startTag.length;\n const fullTagEnd = findClosingTagEnd(text, contentStart, toolName);\n if (fullTagEnd !== -1 && fullTagEnd > contentStart) {\n const endTag = `</${toolName}>`;\n const endTagStart = fullTagEnd - endTag.length;\n const content = text.substring(contentStart, endTagStart);\n toolCalls.push({\n toolName,\n startIndex: tagStart,\n endIndex: fullTagEnd,\n content,\n });\n searchIndex = fullTagEnd;\n } else {\n searchIndex = contentStart;\n }\n }\n\n return toolCalls;\n}\n\nfunction findToolCalls(text: string, toolNames: string[]): ToolCallMatch[] {\n const toolCalls = toolNames.flatMap((toolName) =>\n collectToolCallsForName(text, toolName)\n );\n return toolCalls.sort((a, b) => a.startIndex - b.startIndex);\n}\n\n/**\n * Parse YAML content from inside an XML tag.\n * Handles common LLM output issues like inconsistent indentation.\n */\nfunction parseYamlContent(\n yamlContent: string,\n options?: ParserOptions\n): Record<string, unknown> | null {\n let normalized = yamlContent;\n if (normalized.startsWith(\"\\n\")) {\n normalized = normalized.slice(1);\n }\n\n const lines = normalized.split(\"\\n\");\n const nonEmptyLines = lines.filter((line) => line.trim().length > 0);\n\n if (nonEmptyLines.length === 0) {\n return {};\n }\n\n const minIndent = Math.min(\n ...nonEmptyLines.map((line) => {\n const match = line.match(LEADING_WHITESPACE_RE);\n return match ? match[1].length : 0;\n })\n );\n if (minIndent > 0) {\n normalized = lines.map((line) => line.slice(minIndent)).join(\"\\n\");\n }\n\n try {\n const doc = YAML.parseDocument(normalized);\n\n if (doc.errors && doc.errors.length > 0) {\n options?.onError?.(\"YAML parse error\", {\n errors: doc.errors.map((e: { message: string }) => e.message),\n });\n return null;\n }\n\n const result = doc.toJSON();\n\n if (result === null) {\n return {};\n }\n\n if (typeof result !== \"object\" || Array.isArray(result)) {\n options?.onError?.(\"YAML content must be a key-value mapping\", {\n got: typeof result,\n });\n return null;\n }\n\n return result as Record<string, unknown>;\n } catch (error) {\n options?.onError?.(\"Failed to parse YAML content\", { error });\n return null;\n }\n}\n\nfunction appendTextPart(\n processedElements: TCMCoreContentPart[],\n textPart: string\n) {\n if (textPart.trim()) {\n processedElements.push({\n type: \"text\",\n text: textPart,\n });\n }\n}\n\nfunction processToolCallMatch(\n text: string,\n tc: ToolCallMatch,\n currentIndex: number,\n processedElements: TCMCoreContentPart[],\n options?: ParserOptions\n): number {\n if (tc.startIndex < currentIndex) {\n return currentIndex;\n }\n\n appendTextPart(\n processedElements,\n text.substring(currentIndex, tc.startIndex)\n );\n\n const parsedArgs = parseYamlContent(tc.content, options);\n if (parsedArgs !== null) {\n processedElements.push({\n type: \"tool-call\",\n toolCallId: generateId(),\n toolName: tc.toolName,\n input: JSON.stringify(parsedArgs),\n });\n } else {\n const originalText = text.substring(tc.startIndex, tc.endIndex);\n options?.onError?.(\"Could not parse YAML tool call\", {\n toolCall: originalText,\n });\n processedElements.push({ type: \"text\", text: originalText });\n }\n\n return tc.endIndex;\n}\n\nfunction createFlushTextHandler(\n getCurrentTextId: () => string | null,\n setCurrentTextId: (id: string | null) => void,\n getHasEmittedTextStart: () => boolean,\n setHasEmittedTextStart: (value: boolean) => void\n) {\n return (\n controller: TransformStreamDefaultController<TCMCoreStreamPart>,\n text?: string\n ) => {\n const content = text;\n if (content) {\n if (!getCurrentTextId()) {\n const newId = generateId();\n setCurrentTextId(newId);\n controller.enqueue({\n type: \"text-start\",\n id: newId,\n });\n setHasEmittedTextStart(true);\n }\n controller.enqueue({\n type: \"text-delta\",\n id: getCurrentTextId() as string,\n textDelta: content,\n delta: content,\n });\n }\n\n const currentTextId = getCurrentTextId();\n if (currentTextId && !text) {\n if (getHasEmittedTextStart()) {\n controller.enqueue({\n type: \"text-end\",\n id: currentTextId,\n });\n setHasEmittedTextStart(false);\n }\n setCurrentTextId(null);\n }\n };\n}\n\nfunction findEarliestToolTag(\n buffer: string,\n toolNames: string[]\n): { index: number; name: string; selfClosing: boolean; tagLength: number } {\n let bestIndex = -1;\n let bestName = \"\";\n let bestSelfClosing = false;\n let bestTagLength = 0;\n\n for (const name of toolNames) {\n const openTag = `<${name}>`;\n const selfTagRegex = new RegExp(`<${name}\\\\s*/>`);\n const idxOpen = buffer.indexOf(openTag);\n const selfMatch = selfTagRegex.exec(buffer);\n const idxSelf = selfMatch ? selfMatch.index : -1;\n\n if (idxOpen !== -1 && (bestIndex === -1 || idxOpen < bestIndex)) {\n bestIndex = idxOpen;\n bestName = name;\n bestSelfClosing = false;\n bestTagLength = openTag.length;\n }\n if (idxSelf !== -1 && (bestIndex === -1 || idxSelf < bestIndex)) {\n bestIndex = idxSelf;\n bestName = name;\n bestSelfClosing = true;\n bestTagLength = selfMatch ? selfMatch[0].length : 0;\n }\n }\n\n return {\n index: bestIndex,\n name: bestName,\n selfClosing: bestSelfClosing,\n tagLength: bestTagLength,\n };\n}\n\nexport const yamlXmlProtocol = (\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- reserved for future extensibility\n _protocolOptions?: YamlXmlProtocolOptions\n): ToolCallProtocol => {\n return {\n formatTools({ tools, toolSystemPromptTemplate }) {\n const toolsForPrompt = (tools || []).map((tool) => ({\n name: tool.name,\n description: tool.description,\n parameters: unwrapJsonSchema(tool.inputSchema),\n }));\n return toolSystemPromptTemplate(JSON.stringify(toolsForPrompt));\n },\n\n formatToolCall(toolCall: TCMCoreToolCall): string {\n let args: Record<string, unknown> = {};\n try {\n args = JSON.parse(toolCall.input) as Record<string, unknown>;\n } catch {\n args = { value: toolCall.input };\n }\n const yamlContent = YAML.stringify(args);\n return `<${toolCall.toolName}>\\n${yamlContent}</${toolCall.toolName}>`;\n },\n\n formatToolResponse(toolResult: TCMCoreToolResult): string {\n let result = toolResult.result;\n\n if (\n result &&\n typeof result === \"object\" &&\n \"type\" in result &&\n (result as { type: unknown }).type === \"json\" &&\n \"value\" in result\n ) {\n result = (result as { value: unknown }).value;\n }\n\n const xml = xmlStringify(\n \"tool_response\",\n {\n tool_name: toolResult.toolName,\n result,\n },\n { declaration: false }\n );\n return xml;\n },\n\n parseGeneratedText({ text, tools, options }) {\n const toolNames = tools.map((t) => t.name).filter(Boolean) as string[];\n if (toolNames.length === 0) {\n return [{ type: \"text\", text }];\n }\n\n const processedElements: TCMCoreContentPart[] = [];\n let currentIndex = 0;\n\n const toolCalls = findToolCalls(text, toolNames);\n\n for (const tc of toolCalls) {\n currentIndex = processToolCallMatch(\n text,\n tc,\n currentIndex,\n processedElements,\n options\n );\n }\n\n if (currentIndex < text.length) {\n appendTextPart(processedElements, text.substring(currentIndex));\n }\n\n return processedElements;\n },\n\n createStreamParser({ tools, options }) {\n const toolNames = tools.map((t) => t.name).filter(Boolean) as string[];\n let buffer = \"\";\n let currentToolCall: { name: string; content: string } | null = null;\n let currentTextId: string | null = null;\n let hasEmittedTextStart = false;\n\n const flushText = createFlushTextHandler(\n () => currentTextId,\n (newId: string | null) => {\n currentTextId = newId;\n },\n () => hasEmittedTextStart,\n (value: boolean) => {\n hasEmittedTextStart = value;\n }\n );\n\n const processToolCallEnd = (\n controller: TransformStreamDefaultController<TCMCoreStreamPart>,\n toolContent: string,\n toolName: string\n ) => {\n const parsedArgs = parseYamlContent(toolContent, options);\n flushText(controller);\n\n if (parsedArgs !== null) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: generateId(),\n toolName,\n input: JSON.stringify(parsedArgs),\n });\n } else {\n const original = `<${toolName}>${toolContent}</${toolName}>`;\n options?.onError?.(\"Could not parse streaming YAML tool call\", {\n toolCall: original,\n });\n flushText(controller, original);\n }\n };\n\n const handlePendingToolCall = (\n controller: TransformStreamDefaultController<TCMCoreStreamPart>,\n endTag: string,\n toolName: string\n ): boolean => {\n const endIdx = buffer.indexOf(endTag);\n if (endIdx === -1) {\n return false;\n }\n\n const content = buffer.substring(0, endIdx);\n buffer = buffer.substring(endIdx + endTag.length);\n processToolCallEnd(controller, content, toolName);\n currentToolCall = null;\n return true;\n };\n\n const flushSafeText = (\n controller: TransformStreamDefaultController<TCMCoreStreamPart>\n ): void => {\n const maxTagLen = toolNames.length\n ? Math.max(...toolNames.map((n) => `<${n} />`.length))\n : 0;\n const tail = Math.max(0, maxTagLen - 1);\n const safeLen = Math.max(0, buffer.length - tail);\n if (safeLen > 0) {\n flushText(controller, buffer.slice(0, safeLen));\n buffer = buffer.slice(safeLen);\n }\n };\n\n const handleNewToolTag = (\n controller: TransformStreamDefaultController<TCMCoreStreamPart>,\n tagIndex: number,\n tagName: string,\n selfClosing: boolean,\n tagLength: number\n ): void => {\n if (tagIndex > 0) {\n flushText(controller, buffer.substring(0, tagIndex));\n }\n\n if (selfClosing) {\n buffer = buffer.substring(tagIndex + tagLength);\n processToolCallEnd(controller, \"\", tagName);\n } else {\n const startTag = `<${tagName}>`;\n buffer = buffer.substring(tagIndex + startTag.length);\n currentToolCall = { name: tagName, content: \"\" };\n }\n };\n\n const processBuffer = (\n controller: TransformStreamDefaultController<TCMCoreStreamPart>\n ) => {\n while (true) {\n if (currentToolCall) {\n const toolName = currentToolCall.name;\n const endTag = `</${toolName}>`;\n if (!handlePendingToolCall(controller, endTag, toolName)) {\n break;\n }\n } else {\n const { index, name, selfClosing, tagLength } = findEarliestToolTag(\n buffer,\n toolNames\n );\n\n if (index === -1) {\n flushSafeText(controller);\n break;\n }\n\n handleNewToolTag(controller, index, name, selfClosing, tagLength);\n }\n }\n };\n\n return new TransformStream({\n transform(chunk, controller) {\n if (chunk.type !== \"text-delta\") {\n if (buffer) {\n flushText(controller, buffer);\n buffer = \"\";\n }\n controller.enqueue(chunk);\n return;\n }\n\n const textContent =\n chunk.textDelta ??\n (chunk as unknown as { delta?: string }).delta ??\n \"\";\n buffer += textContent;\n processBuffer(controller);\n },\n flush(controller) {\n if (currentToolCall) {\n const unfinishedContent = `<${currentToolCall.name}>${buffer}`;\n flushText(controller, unfinishedContent);\n buffer = \"\";\n currentToolCall = null;\n } else if (buffer) {\n flushText(controller, buffer);\n buffer = \"\";\n }\n if (currentTextId && hasEmittedTextStart) {\n controller.enqueue({\n type: \"text-end\",\n id: currentTextId,\n });\n hasEmittedTextStart = false;\n currentTextId = null;\n }\n },\n });\n },\n\n extractToolCallSegments({ text, tools }) {\n const toolNames = tools.map((t) => t.name).filter(Boolean) as string[];\n if (toolNames.length === 0) {\n return [];\n }\n\n return findToolCalls(text, toolNames).map(\n (tc) => `<${tc.toolName}>${tc.content}</${tc.toolName}>`\n );\n },\n };\n};\n\n/**\n * Default system prompt template for Orchestrator-style YAML+XML tool calling.\n */\nexport function orchestratorSystemPromptTemplate(\n tools: string,\n includeMultilineExample = true\n): string {\n const multilineExample = includeMultilineExample\n ? `\n\nFor multiline values, use YAML's literal block syntax:\n<write_file>\nfile_path: /tmp/example.txt\ncontents: |\n First line\n Second line\n Third line\n</write_file>`\n : \"\";\n\n return `# 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>${tools}</tools>\n\n# Format\n\nUse exactly one XML element whose tag name is the function name.\nInside the XML element, specify parameters using YAML syntax (key: value pairs).\n\n# Example\n<get_weather>\nlocation: New York\nunit: celsius\n</get_weather>${multilineExample}\n\n# Rules\n- Parameter names and values must follow the schema exactly.\n- Use proper YAML syntax for values (strings, numbers, booleans, arrays, objects).\n- Each required parameter must appear once.\n- Do not add functions or parameters not in the schema.\n- After calling a tool, you will receive a response. Use this result to answer the user.\n- Do NOT ask clarifying questions. Use reasonable defaults for optional parameters.\n- If a task requires multiple function calls, make ALL of them at once.`;\n}\n","import type {\n LanguageModelV3,\n LanguageModelV3Content,\n LanguageModelV3FunctionTool,\n LanguageModelV3ToolCall,\n} from \"@ai-sdk/provider\";\nimport { generateId } from \"@ai-sdk/provider-utils\";\nimport { coerceBySchema } from \"@ai-sdk-tool/rxml\";\n\nimport type { ToolCallProtocol } from \"../core/protocols/tool-call-protocol\";\nimport {\n getDebugLevel,\n logParsedChunk,\n logParsedSummary,\n logRawChunk,\n} from \"../core/utils/debug\";\nimport { extractOnErrorOption } from \"../core/utils/on-error\";\nimport {\n isToolChoiceActive,\n originalToolsSchema,\n type ToolCallMiddlewareProviderOptions,\n} from \"../core/utils/provider-options\";\n\nfunction parseToolChoiceJson(\n text: string,\n providerOptions?: ToolCallMiddlewareProviderOptions\n): { name?: string; arguments?: Record<string, unknown> } {\n try {\n return JSON.parse(text);\n } catch (error) {\n const options = extractOnErrorOption(providerOptions);\n options?.onError?.(\n \"Failed to parse toolChoice JSON from generated model output\",\n {\n text,\n error: error instanceof Error ? error.message : String(error),\n }\n );\n return {};\n }\n}\n\nfunction logDebugSummary(\n debugSummary: { originalText?: string; toolCalls?: string } | undefined,\n toolCall: LanguageModelV3ToolCall,\n originText: string\n) {\n if (debugSummary) {\n debugSummary.originalText = originText;\n try {\n debugSummary.toolCalls = JSON.stringify([\n { toolName: toolCall.toolName, input: toolCall.input },\n ]);\n } catch {\n // ignore\n }\n } else if (getDebugLevel() === \"parse\") {\n logParsedSummary({ toolCalls: [toolCall], originalText: originText });\n }\n}\n\nasync function handleToolChoice(\n doGenerate: () => ReturnType<LanguageModelV3[\"doGenerate\"]>,\n params: { providerOptions?: ToolCallMiddlewareProviderOptions }\n) {\n const result = await doGenerate();\n const first = result.content?.[0];\n\n let parsed: { name?: string; arguments?: Record<string, unknown> } = {};\n if (first && first.type === \"text\") {\n if (getDebugLevel() === \"parse\") {\n logRawChunk(first.text);\n }\n parsed = parseToolChoiceJson(first.text, params.providerOptions);\n }\n\n const toolCall: LanguageModelV3ToolCall = {\n type: \"tool-call\",\n toolCallId: generateId(),\n toolName: parsed.name || \"unknown\",\n input: JSON.stringify(parsed.arguments || {}),\n };\n\n const originText = first && first.type === \"text\" ? first.text : \"\";\n const debugSummary = params.providerOptions?.toolCallMiddleware?.debugSummary;\n logDebugSummary(debugSummary, toolCall, originText);\n\n return {\n ...result,\n content: [toolCall],\n };\n}\n\nfunction parseContent(\n content: LanguageModelV3Content[],\n protocol: ToolCallProtocol,\n tools: LanguageModelV3FunctionTool[],\n providerOptions?: ToolCallMiddlewareProviderOptions\n): LanguageModelV3Content[] {\n const parsed = content.flatMap((contentItem): LanguageModelV3Content[] => {\n if (contentItem.type !== \"text\") {\n return [contentItem];\n }\n if (getDebugLevel() === \"stream\") {\n logRawChunk(contentItem.text);\n }\n return protocol.parseGeneratedText({\n text: contentItem.text,\n tools,\n options: {\n ...extractOnErrorOption(providerOptions),\n ...((providerOptions as { toolCallMiddleware?: unknown } | undefined)\n ?.toolCallMiddleware as Record<string, unknown>),\n },\n }) as LanguageModelV3Content[];\n });\n\n return parsed.map((part) =>\n fixToolCallWithSchema(part as LanguageModelV3Content, tools)\n );\n}\n\nfunction logParsedContent(content: LanguageModelV3Content[]) {\n if (getDebugLevel() === \"stream\") {\n for (const part of content) {\n logParsedChunk(part);\n }\n }\n}\n\nfunction computeDebugSummary(options: {\n result: { content: LanguageModelV3Content[] };\n newContent: LanguageModelV3Content[];\n protocol: ToolCallProtocol;\n tools: LanguageModelV3FunctionTool[];\n providerOptions?: ToolCallMiddlewareProviderOptions;\n}) {\n const { result, newContent, protocol, tools, providerOptions } = options;\n const allText = result.content\n .filter(\n (c): c is Extract<LanguageModelV3Content, { type: \"text\" }> =>\n c.type === \"text\"\n )\n .map((c) => c.text)\n .join(\"\\n\\n\");\n\n const segments = protocol.extractToolCallSegments\n ? protocol.extractToolCallSegments({ text: allText, tools })\n : [];\n const originalText = segments.join(\"\\n\\n\");\n\n const toolCalls = newContent.filter(\n (p): p is Extract<LanguageModelV3Content, { type: \"tool-call\" }> =>\n (p as LanguageModelV3Content).type === \"tool-call\"\n );\n\n const dbg = providerOptions?.toolCallMiddleware?.debugSummary;\n if (dbg) {\n dbg.originalText = originalText;\n try {\n dbg.toolCalls = JSON.stringify(\n toolCalls.map((tc) => ({\n toolName: tc.toolName,\n input: tc.input as unknown,\n }))\n );\n } catch {\n // ignore JSON failure\n }\n } else if (getDebugLevel() === \"parse\") {\n logParsedSummary({ toolCalls, originalText });\n }\n}\n\nexport async function wrapGenerate({\n protocol,\n doGenerate,\n params,\n}: {\n protocol: ToolCallProtocol;\n doGenerate: () => ReturnType<LanguageModelV3[\"doGenerate\"]>;\n params: {\n providerOptions?: ToolCallMiddlewareProviderOptions;\n };\n}) {\n if (isToolChoiceActive(params)) {\n return handleToolChoice(doGenerate, params);\n }\n\n const tools = originalToolsSchema.decode(\n params.providerOptions?.toolCallMiddleware?.originalTools\n );\n\n const result = await doGenerate();\n\n if (result.content.length === 0) {\n return result;\n }\n\n const newContent = parseContent(\n result.content,\n protocol,\n tools,\n params.providerOptions\n );\n\n logParsedContent(newContent);\n computeDebugSummary({\n result,\n newContent,\n protocol,\n tools,\n providerOptions: params.providerOptions,\n });\n\n return {\n ...result,\n content: newContent,\n };\n}\n\nfunction fixToolCallWithSchema(\n part: LanguageModelV3Content,\n tools: LanguageModelV3FunctionTool[]\n): LanguageModelV3Content {\n if ((part as { type?: string }).type !== \"tool-call\") {\n return part;\n }\n const tc = part as unknown as { toolName: string; input: unknown };\n let args: unknown = {};\n if (typeof tc.input === \"string\") {\n try {\n args = JSON.parse(tc.input);\n } catch {\n return part;\n }\n } else if (tc.input && typeof tc.input === \"object\") {\n args = tc.input;\n }\n const schema = tools.find((t) => t.name === tc.toolName)\n ?.inputSchema as unknown;\n const coerced = coerceBySchema(args, schema);\n return {\n ...(part as Record<string, unknown>),\n input: JSON.stringify(coerced ?? {}),\n } as LanguageModelV3Content;\n}\n","import type {\n LanguageModelV3,\n LanguageModelV3StreamPart,\n} from \"@ai-sdk/provider\";\nimport { generateId } from \"@ai-sdk/provider-utils\";\n\nimport type { ToolCallProtocol } from \"../core/protocols/tool-call-protocol\";\nimport type { TCMCoreStreamPart } from \"../core/types\";\nimport {\n getDebugLevel,\n logParsedChunk,\n logRawChunk,\n} from \"../core/utils/debug\";\nimport { extractOnErrorOption } from \"../core/utils/on-error\";\nimport {\n isToolChoiceActive,\n originalToolsSchema,\n type ToolCallMiddlewareProviderOptions,\n} from \"../core/utils/provider-options\";\n\nfunction mapCorePartToV3(part: TCMCoreStreamPart): LanguageModelV3StreamPart {\n switch (part.type) {\n case \"text-delta\":\n return {\n type: \"text-delta\",\n id: part.id || generateId(),\n delta: part.textDelta,\n } as LanguageModelV3StreamPart;\n case \"tool-call\":\n return {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n input: part.input,\n } as LanguageModelV3StreamPart;\n case \"tool-call-delta\":\n return {\n type: \"tool-call-delta\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n argsTextDelta: part.argsTextDelta,\n } as unknown as LanguageModelV3StreamPart;\n case \"finish\":\n return {\n type: \"finish\",\n finishReason: part.finishReason,\n usage: part.usage,\n } as unknown as LanguageModelV3StreamPart;\n case \"error\":\n return {\n type: \"error\",\n error: part.error,\n } as LanguageModelV3StreamPart;\n default:\n return part as LanguageModelV3StreamPart;\n }\n}\n\nfunction mapV3PartToCore(part: LanguageModelV3StreamPart): TCMCoreStreamPart {\n const p = part as Record<string, unknown>;\n switch (p.type) {\n case \"text-delta\":\n return {\n type: \"text-delta\",\n id: p.id as string | undefined,\n textDelta: ((p.delta || p.textDelta) as string) || \"\",\n };\n case \"tool-call\":\n return {\n type: \"tool-call\",\n toolCallId: p.toolCallId as string,\n toolName: p.toolName as string,\n input: p.input as string,\n };\n case \"finish\": {\n const finishReason = p.finishReason as\n | { unified?: string }\n | string\n | undefined;\n return {\n type: \"finish\",\n finishReason:\n (typeof finishReason === \"object\"\n ? finishReason?.unified\n : finishReason) || \"stop\",\n usage: p.usage as\n | { promptTokens: number; completionTokens: number }\n | undefined,\n };\n }\n default:\n return p as TCMCoreStreamPart;\n }\n}\n\nexport async function wrapStream({\n protocol,\n doStream,\n doGenerate,\n params,\n}: {\n protocol: ToolCallProtocol;\n doStream: () => ReturnType<LanguageModelV3[\"doStream\"]>;\n doGenerate: () => ReturnType<LanguageModelV3[\"doGenerate\"]>;\n params: {\n providerOptions?: ToolCallMiddlewareProviderOptions;\n };\n}) {\n if (isToolChoiceActive(params)) {\n return toolChoiceStream({\n doGenerate,\n options: extractOnErrorOption(params.providerOptions),\n });\n }\n\n const { stream, ...rest } = await doStream();\n const debugLevel = getDebugLevel();\n const tools = originalToolsSchema.decode(\n params.providerOptions?.toolCallMiddleware?.originalTools\n );\n const options = {\n ...extractOnErrorOption(params.providerOptions),\n ...((params.providerOptions as Record<string, unknown>)\n ?.toolCallMiddleware || {}),\n };\n\n const coreStream = stream\n .pipeThrough(\n new TransformStream<LanguageModelV3StreamPart, TCMCoreStreamPart>({\n transform(part, controller) {\n if (debugLevel === \"stream\") {\n logRawChunk(part);\n }\n controller.enqueue(mapV3PartToCore(part));\n },\n })\n )\n .pipeThrough(protocol.createStreamParser({ tools, options }));\n\n const v3Stream = coreStream.pipeThrough(\n new TransformStream<TCMCoreStreamPart, LanguageModelV3StreamPart>({\n transform(part, controller) {\n const v3Part = mapCorePartToV3(part);\n if (debugLevel === \"stream\") {\n logParsedChunk(v3Part);\n }\n controller.enqueue(v3Part);\n },\n })\n );\n\n return {\n ...rest,\n stream: v3Stream,\n };\n}\n\nexport async function toolChoiceStream({\n doGenerate,\n options,\n}: {\n doGenerate: () => ReturnType<LanguageModelV3[\"doGenerate\"]>;\n options?: {\n onError?: (message: string, metadata?: Record<string, unknown>) => void;\n };\n}) {\n const result = await doGenerate();\n let toolJson: { name?: string; arguments?: Record<string, unknown> } = {};\n if (\n result?.content &&\n result.content.length > 0 &&\n result.content[0]?.type === \"text\"\n ) {\n try {\n toolJson = JSON.parse(result.content[0].text);\n } catch (error) {\n options?.onError?.(\n \"Failed to parse toolChoice JSON from streamed model output\",\n {\n text: result.content[0].text,\n error: error instanceof Error ? error.message : String(error),\n }\n );\n toolJson = {};\n }\n }\n\n const stream = new ReadableStream<LanguageModelV3StreamPart>({\n start(controller) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: generateId(),\n toolName: toolJson.name || \"unknown\",\n input: JSON.stringify(toolJson.arguments || {}),\n });\n controller.enqueue({\n type: \"finish\",\n usage: result?.usage || {\n inputTokens: 0,\n outputTokens: 0,\n },\n finishReason: \"tool-calls\",\n } as unknown as LanguageModelV3StreamPart);\n controller.close();\n },\n });\n\n return {\n request: result?.request || {},\n response: result?.response || {},\n stream,\n };\n}\n","import type {\n JSONSchema7,\n LanguageModelV3Content,\n LanguageModelV3FilePart,\n LanguageModelV3FunctionTool,\n LanguageModelV3Prompt,\n LanguageModelV3ReasoningPart,\n LanguageModelV3TextPart,\n LanguageModelV3ToolCallPart,\n LanguageModelV3ToolResultPart,\n SharedV3ProviderOptions,\n} from \"@ai-sdk/provider\";\n\nimport {\n isProtocolFactory,\n type ToolCallProtocol,\n} from \"../core/protocols/tool-call-protocol\";\nimport { createDynamicIfThenElseSchema } from \"../core/utils/dynamic-tool-schema\";\nimport { extractOnErrorOption } from \"../core/utils/on-error\";\nimport { originalToolsSchema } from \"../core/utils/provider-options\";\nimport { isToolCallContent } from \"../core/utils/type-guards\";\n\n/**\n * Build final prompt by merging system prompt with existing prompt\n */\nfunction buildFinalPrompt(\n systemPrompt: string,\n processedPrompt: LanguageModelV3Prompt,\n placement: \"first\" | \"last\"\n): LanguageModelV3Prompt {\n const systemIndex = processedPrompt.findIndex((m) => m.role === \"system\");\n if (systemIndex !== -1) {\n const existing = processedPrompt[systemIndex].content as unknown;\n let existingText = \"\";\n if (typeof existing === \"string\") {\n existingText = existing;\n } else if (Array.isArray(existing)) {\n existingText = (existing as { type?: string; text?: string }[])\n .map((p) => (p?.type === \"text\" ? (p.text ?? \"\") : \"\"))\n .filter(Boolean)\n .join(\"\\n\");\n } else {\n existingText = String(existing ?? \"\");\n }\n\n const mergedContent =\n placement === \"first\"\n ? `${systemPrompt}\\n\\n${existingText}`\n : `${existingText}\\n\\n${systemPrompt}`;\n\n return processedPrompt.map((m, idx) =>\n idx === systemIndex\n ? {\n ...m,\n content: mergedContent,\n }\n : m\n ) as LanguageModelV3Prompt;\n }\n if (placement === \"first\") {\n return [\n {\n role: \"system\",\n content: systemPrompt,\n },\n ...processedPrompt,\n ];\n }\n // placement === 'last'\n return [\n ...processedPrompt,\n {\n role: \"system\",\n content: systemPrompt,\n },\n ];\n}\n\n/**\n * Build base return parameters with middleware options\n */\nfunction buildBaseReturnParams(\n params: {\n prompt?: LanguageModelV3Prompt;\n tools?: Array<LanguageModelV3FunctionTool | { type: string }>;\n providerOptions?: unknown;\n toolChoice?: { type: string; toolName?: string };\n },\n finalPrompt: LanguageModelV3Prompt,\n functionTools: LanguageModelV3FunctionTool[]\n) {\n return {\n ...params,\n prompt: finalPrompt,\n tools: [] as never[],\n toolChoice: undefined,\n providerOptions: {\n ...(params.providerOptions || {}),\n toolCallMiddleware: {\n ...((params.providerOptions &&\n typeof params.providerOptions === \"object\" &&\n (params.providerOptions as { toolCallMiddleware?: unknown })\n .toolCallMiddleware) ||\n {}),\n originalTools: originalToolsSchema.encode(functionTools),\n },\n } as unknown as SharedV3ProviderOptions,\n };\n}\n\n/**\n * Find provider-defined tool matching the selected tool name\n */\nfunction findProviderDefinedTool(\n tools: Array<LanguageModelV3FunctionTool | { type: string }>,\n selectedToolName: string\n) {\n return tools.find((t) => {\n if (t.type === \"function\") {\n return false;\n }\n const anyTool = t as unknown as { id?: string; name?: string };\n return anyTool.id === selectedToolName || anyTool.name === selectedToolName;\n });\n}\n\n/**\n * Handle tool choice type 'tool'\n */\nfunction handleToolChoiceTool(\n params: {\n tools?: Array<LanguageModelV3FunctionTool | { type: string }>;\n toolChoice?: { type: string; toolName?: string };\n },\n baseReturnParams: ReturnType<typeof buildBaseReturnParams>\n) {\n const selectedToolName = params.toolChoice?.toolName;\n if (!selectedToolName) {\n throw new Error(\"Tool name is required for 'tool' toolChoice type.\");\n }\n\n const providerDefinedMatch = findProviderDefinedTool(\n params.tools ?? [],\n selectedToolName\n );\n if (providerDefinedMatch) {\n throw new Error(\n \"Provider-defined tools are not supported by this middleware. Please use custom tools.\"\n );\n }\n\n const selectedTool = (params.tools ?? []).find(\n (t): t is LanguageModelV3FunctionTool =>\n t.type === \"function\" &&\n (t as LanguageModelV3FunctionTool).name === selectedToolName\n );\n\n if (!selectedTool) {\n throw new Error(\n `Tool with name '${selectedToolName}' not found in params.tools.`\n );\n }\n\n return {\n ...baseReturnParams,\n responseFormat: {\n type: \"json\" as const,\n schema: {\n type: \"object\",\n properties: {\n name: {\n const: selectedTool.name,\n },\n arguments: selectedTool.inputSchema,\n },\n required: [\"name\", \"arguments\"],\n } as JSONSchema7,\n name: selectedTool.name,\n description:\n typeof selectedTool.description === \"string\"\n ? selectedTool.description\n : undefined,\n },\n providerOptions: {\n ...(baseReturnParams.providerOptions || {}),\n toolCallMiddleware: {\n ...((baseReturnParams.providerOptions &&\n typeof baseReturnParams.providerOptions === \"object\" &&\n (\n baseReturnParams.providerOptions as {\n toolCallMiddleware?: unknown;\n }\n ).toolCallMiddleware) ||\n {}),\n ...(params.toolChoice ? { toolChoice: params.toolChoice } : {}),\n },\n },\n };\n}\n\n/**\n * Handle tool choice type 'required'\n */\nfunction handleToolChoiceRequired(\n params: {\n tools?: Array<LanguageModelV3FunctionTool | { type: string }>;\n toolChoice?: { type: string; toolName?: string };\n },\n baseReturnParams: ReturnType<typeof buildBaseReturnParams>,\n functionTools: LanguageModelV3FunctionTool[]\n) {\n if (!params.tools || params.tools.length === 0) {\n throw new Error(\n \"Tool choice type 'required' is set, but no tools are provided in params.tools.\"\n );\n }\n\n return {\n ...baseReturnParams,\n responseFormat: {\n type: \"json\" as const,\n schema: createDynamicIfThenElseSchema(functionTools),\n },\n providerOptions: {\n ...(baseReturnParams.providerOptions || {}),\n toolCallMiddleware: {\n ...((baseReturnParams.providerOptions &&\n typeof baseReturnParams.providerOptions === \"object\" &&\n (\n baseReturnParams.providerOptions as {\n toolCallMiddleware?: unknown;\n }\n ).toolCallMiddleware) ||\n {}),\n toolChoice: { type: \"required\" as const },\n },\n },\n };\n}\n\nexport function transformParams({\n params,\n protocol,\n toolSystemPromptTemplate,\n placement = \"first\",\n}: {\n params: {\n prompt?: LanguageModelV3Prompt;\n tools?: Array<LanguageModelV3FunctionTool | { type: string }>;\n providerOptions?: {\n toolCallMiddleware?: {\n toolChoice?: { type: string };\n };\n };\n toolChoice?: { type: string; toolName?: string };\n };\n protocol: ToolCallProtocol | (() => ToolCallProtocol);\n toolSystemPromptTemplate: (tools: string) => string;\n placement?: \"first\" | \"last\";\n}) {\n const resolvedProtocol = isProtocolFactory(protocol) ? protocol() : protocol;\n\n const functionTools = (params.tools ?? []).filter(\n (t): t is LanguageModelV3FunctionTool => t.type === \"function\"\n );\n\n const systemPrompt = resolvedProtocol.formatTools({\n tools: functionTools,\n toolSystemPromptTemplate,\n });\n\n const processedPrompt = convertToolPrompt(\n params.prompt ?? [],\n resolvedProtocol,\n extractOnErrorOption(params.providerOptions)\n );\n\n const finalPrompt = buildFinalPrompt(\n systemPrompt,\n processedPrompt,\n placement\n );\n const baseReturnParams = buildBaseReturnParams(\n params,\n finalPrompt,\n functionTools\n );\n\n if (params.toolChoice?.type === \"none\") {\n throw new Error(\n \"The 'none' toolChoice type is not supported by this middleware. Please use 'auto', 'required', or specify a tool name.\"\n );\n }\n\n if (params.toolChoice?.type === \"tool\") {\n return handleToolChoiceTool(params, baseReturnParams);\n }\n\n if (params.toolChoice?.type === \"required\") {\n return handleToolChoiceRequired(params, baseReturnParams, functionTools);\n }\n\n return baseReturnParams;\n}\n\n/**\n * Process assistant message content\n */\nfunction processAssistantContent(\n content: LanguageModelV3Content[],\n resolvedProtocol: ToolCallProtocol,\n providerOptions?: {\n onError?: (message: string, metadata?: Record<string, unknown>) => void;\n }\n): LanguageModelV3Content[] {\n const newContent: LanguageModelV3Content[] = [];\n for (const item of content) {\n if (isToolCallContent(item)) {\n newContent.push({\n type: \"text\",\n text: resolvedProtocol.formatToolCall(item),\n });\n } else if ((item as { type?: string }).type === \"text\") {\n newContent.push(item as LanguageModelV3Content);\n } else if ((item as { type?: string }).type === \"reasoning\") {\n newContent.push(item as LanguageModelV3Content);\n } else {\n const options = extractOnErrorOption(providerOptions);\n options?.onError?.(\n \"tool-call-middleware: unknown assistant content; stringifying for provider compatibility\",\n { content: item }\n );\n newContent.push({\n type: \"text\",\n text: JSON.stringify(item),\n });\n }\n }\n\n // Condense if all content is text\n const onlyText = newContent.every((c) => c.type === \"text\");\n return onlyText\n ? [\n {\n type: \"text\" as const,\n text: newContent.map((c) => (c as { text: string }).text).join(\"\\n\"),\n },\n ]\n : newContent;\n}\n\n/**\n * Process tool message content\n */\nfunction processToolMessage(\n content: LanguageModelV3ToolResultPart[],\n resolvedProtocol: ToolCallProtocol\n): LanguageModelV3Prompt[number] {\n return {\n role: \"user\" as const,\n content: [\n {\n type: \"text\" as const,\n text: content\n .map((toolResult) => {\n const tr = toolResult as unknown as Record<string, unknown>;\n return resolvedProtocol.formatToolResponse({\n ...toolResult,\n result: tr.result ?? tr.content ?? tr.output,\n });\n })\n .join(\"\\n\"),\n },\n ],\n };\n}\n\n/**\n * Process a single message in the prompt\n */\nfunction processMessage(\n message: LanguageModelV3Prompt[number],\n resolvedProtocol: ToolCallProtocol,\n providerOptions?: {\n onError?: (message: string, metadata?: Record<string, unknown>) => void;\n }\n): LanguageModelV3Prompt[number] {\n if (message.role === \"assistant\") {\n const condensedContent = processAssistantContent(\n message.content as LanguageModelV3Content[],\n resolvedProtocol,\n providerOptions\n );\n return {\n role: \"assistant\" as const,\n content: condensedContent as Array<\n | LanguageModelV3TextPart\n | LanguageModelV3FilePart\n | LanguageModelV3ReasoningPart\n | LanguageModelV3ToolCallPart\n | LanguageModelV3ToolResultPart\n >,\n };\n }\n if (message.role === \"tool\") {\n // Filter out approval response parts - only process tool result parts\n const toolResultParts = message.content.filter(\n (part): part is LanguageModelV3ToolResultPart =>\n part.type === \"tool-result\"\n );\n return processToolMessage(toolResultParts, resolvedProtocol);\n }\n return message;\n}\n\n/**\n * Check if all content parts are text\n */\nfunction isAllTextContent(content: unknown): boolean {\n if (!Array.isArray(content)) {\n return false;\n }\n return (content as { type: string }[]).every(\n (c: { type: string }) => c?.type === \"text\"\n );\n}\n\n/**\n * Join text content parts into a single string\n */\nfunction joinTextContent(content: { text: string }[]): string {\n return content.map((c) => c.text).join(\"\\n\");\n}\n\n/**\n * Create condensed message based on role\n */\nfunction createCondensedMessage(role: string, joinedText: string) {\n if (role === \"system\") {\n return {\n role: \"system\" as const,\n content: joinedText,\n };\n }\n\n return {\n role: role as \"assistant\" | \"user\",\n content: [\n {\n type: \"text\" as const,\n text: joinedText,\n },\n ],\n };\n}\n\n/**\n * Condense multi-part text content into single text part\n */\nfunction condenseTextContent(\n processedPrompt: LanguageModelV3Prompt\n): LanguageModelV3Prompt {\n for (let i = 0; i < processedPrompt.length; i += 1) {\n const msg = processedPrompt[i] as unknown as {\n role: string;\n content: unknown;\n };\n\n if (!Array.isArray(msg.content)) {\n continue;\n }\n\n const shouldCondense =\n isAllTextContent(msg.content) && msg.content.length > 1;\n if (shouldCondense) {\n const joinedText = joinTextContent(msg.content as { text: string }[]);\n processedPrompt[i] = createCondensedMessage(msg.role, joinedText);\n }\n }\n return processedPrompt;\n}\n\n/**\n * Merge consecutive user messages\n */\nfunction mergeConsecutiveUserMessages(\n processedPrompt: LanguageModelV3Prompt\n): LanguageModelV3Prompt {\n for (let i = processedPrompt.length - 1; i > 0; i -= 1) {\n const current = processedPrompt[i];\n const prev = processedPrompt[i - 1];\n if (current.role === \"user\" && prev.role === \"user\") {\n const prevContent = prev.content\n .map((c) => (c.type === \"text\" ? c.text : \"\"))\n .join(\"\\n\");\n const currentContent = current.content\n .map((c) => (c.type === \"text\" ? c.text : \"\"))\n .join(\"\\n\");\n processedPrompt[i - 1] = {\n role: \"user\",\n content: [{ type: \"text\", text: `${prevContent}\\n${currentContent}` }],\n };\n processedPrompt.splice(i, 1);\n }\n }\n return processedPrompt;\n}\n\nfunction convertToolPrompt(\n prompt: LanguageModelV3Prompt,\n resolvedProtocol: ToolCallProtocol,\n providerOptions?: {\n onError?: (message: string, metadata?: Record<string, unknown>) => void;\n }\n): LanguageModelV3Prompt {\n let processedPrompt = prompt.map((message) =>\n processMessage(message, resolvedProtocol, providerOptions)\n );\n\n processedPrompt = condenseTextContent(processedPrompt);\n processedPrompt = mergeConsecutiveUserMessages(processedPrompt);\n return processedPrompt as LanguageModelV3Prompt;\n}\n","import type {\n LanguageModelV3CallOptions,\n LanguageModelV3Middleware,\n} from \"@ai-sdk/provider\";\nimport {\n isProtocolFactory,\n type ToolCallProtocol,\n} from \"../core/protocols/tool-call-protocol\";\nimport { extractOnErrorOption } from \"../core/utils/on-error\";\nimport { isToolChoiceActive } from \"../core/utils/provider-options\";\nimport { wrapGenerate as wrapGenerateHandler } from \"./generate-handler\";\nimport {\n toolChoiceStream,\n wrapStream as wrapStreamHandler,\n} from \"./stream-handler\";\nimport { transformParams } from \"./transform-handler\";\n\nexport function createToolMiddleware({\n protocol,\n toolSystemPromptTemplate,\n placement = \"last\",\n}: {\n protocol: ToolCallProtocol | (() => ToolCallProtocol);\n toolSystemPromptTemplate: (tools: string) => string;\n placement?: \"first\" | \"last\";\n}): LanguageModelV3Middleware {\n const resolvedProtocol = isProtocolFactory(protocol) ? protocol() : protocol;\n\n return {\n specificationVersion: \"v3\",\n wrapStream: ({ doStream, doGenerate, params }) => {\n if (isToolChoiceActive(params)) {\n return toolChoiceStream({\n doGenerate,\n options: extractOnErrorOption(params.providerOptions),\n });\n }\n return wrapStreamHandler({\n protocol: resolvedProtocol,\n doStream,\n doGenerate,\n params,\n });\n },\n wrapGenerate: async ({ doGenerate, params }) =>\n wrapGenerateHandler({\n protocol: resolvedProtocol,\n doGenerate,\n params,\n }),\n transformParams: async ({ params }): Promise<LanguageModelV3CallOptions> =>\n transformParams({\n protocol: resolvedProtocol,\n toolSystemPromptTemplate,\n placement,\n params,\n }),\n };\n}\n","// biome-ignore-all lint/performance/noBarrelFile: intentional public API surface\nimport { jsonMixProtocol } from \"../core/protocols/json-mix-protocol\";\nimport { morphXmlProtocol } from \"../core/protocols/morph-xml-protocol\";\nimport {\n orchestratorSystemPromptTemplate,\n yamlXmlProtocol,\n} from \"../core/protocols/yaml-xml-protocol\";\nimport { createToolMiddleware } from \"./tool-call-middleware\";\n\nexport const gemmaToolMiddleware = createToolMiddleware({\n protocol: jsonMixProtocol({\n toolCallStart: \"```tool_call\\n\",\n toolCallEnd: \"\\n```\",\n toolResponseStart: \"```tool_response\\n\",\n toolResponseEnd: \"\\n```\",\n }),\n toolSystemPromptTemplate(tools) {\n return `You have access to functions. If you decide to invoke any of the function(s),\nyou MUST put it in the format of markdown code fence block with the language name of tool_call , e.g.\n\\`\\`\\`tool_call\n{'name': <function-name>, 'arguments': <args-dict>}\n\\`\\`\\`\nYou SHOULD NOT include any other text in the response if you call a function\n${tools}`;\n },\n});\n\nexport const hermesToolMiddleware = createToolMiddleware({\n protocol: jsonMixProtocol,\n toolSystemPromptTemplate(tools) {\n return `You are a function calling AI model.\nYou are provided with function signatures within <tools></tools> XML tags.\nYou may call one or more functions to assist with the user query.\nDon't make assumptions about what values to plug into functions.\nHere are the available tools: <tools>${tools}</tools>\nUse the following pydantic model json schema for each tool call you will make: {\"title\": \"FunctionCall\", \"type\": \"object\", \"properties\": {\"arguments\": {\"title\": \"Arguments\", \"type\": \"object\"}, \"name\": {\"title\": \"Name\", \"type\": \"string\"}}, \"required\": [\"arguments\", \"name\"]}\nFor each function call return a json object with function name and arguments within <tool_call></tool_call> XML tags as follows:\n<tool_call>\n{\"name\": \"<function-name>\", \"arguments\": <args-dict>}\n</tool_call>`;\n },\n});\n\nexport const morphXmlToolMiddleware = createToolMiddleware({\n protocol: morphXmlProtocol,\n placement: \"first\",\n toolSystemPromptTemplate(tools: string) {\n return `# 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>${tools}</tools>\n\n# Rules\n- Use exactly one XML element whose tag name is the function name.\n- Put each parameter as a child element.\n- Values must follow the schema exactly (numbers, arrays, objects, enums → copy as-is).\n- Do not add or remove functions or parameters.\n- Each required parameter must appear once.\n- Output nothing before or after the function call.\n- After calling a tool, you will receive a response in the format: <tool_response><tool_name>NAME</tool_name><result>RESULT</result></tool_response>. Use this result to answer the user.\n\n# Example\n<get_weather>\n <location>New York</location>\n <unit>celsius</unit>\n</get_weather>`;\n },\n});\n\nexport const orchestratorToolMiddleware = createToolMiddleware({\n protocol: yamlXmlProtocol(),\n placement: \"first\",\n toolSystemPromptTemplate: orchestratorSystemPromptTemplate,\n});\n\nexport { createToolMiddleware } from \"./tool-call-middleware\";\n"],"mappings":"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","names":["generateId","generateId","generateId","generateId"]}
|