UNPKG

@copilotkit/runtime

Version:

<img src="https://github.com/user-attachments/assets/0a6b64d9-e193-4940-a3f6-60334ac34084" alt="banner" style="border-radius: 12px; border: 2px solid #d6d4fa;" />

142 lines (140 loc) 4.43 kB
require("reflect-metadata"); //#region src/service-adapters/anthropic/utils.ts function limitMessagesToTokenCount(messages, tools, model, maxTokens) { maxTokens ||= MAX_TOKENS; const result = []; const toolsNumTokens = countToolsTokens(model, tools); if (toolsNumTokens > maxTokens) throw new Error(`Too many tokens in function definitions: ${toolsNumTokens} > ${maxTokens}`); maxTokens -= toolsNumTokens; for (const message of messages) if (message.role === "system") { const numTokens = countMessageTokens(model, message); maxTokens -= numTokens; if (maxTokens < 0) throw new Error("Not enough tokens for system message."); } let cutoff = false; const reversedMessages = [...messages].toReversed(); for (const message of reversedMessages) { if (message.role === "system") { result.unshift(message); continue; } else if (cutoff) continue; let numTokens = countMessageTokens(model, message); if (maxTokens < numTokens) { cutoff = true; continue; } result.unshift(message); maxTokens -= numTokens; } const toolUseIds = /* @__PURE__ */ new Set(); for (const msg of result) if (msg.role === "assistant" && Array.isArray(msg.content)) { for (const block of msg.content) if (block.type === "tool_use") toolUseIds.add(block.id); } const toolResultIds = /* @__PURE__ */ new Set(); for (const msg of result) if (msg.role === "user" && Array.isArray(msg.content)) { for (const block of msg.content) if (block.type === "tool_result") toolResultIds.add(block.tool_use_id); } const filtered = []; for (const msg of result) if (msg.role === "user" && Array.isArray(msg.content)) { const remaining = msg.content.filter((block) => block.type !== "tool_result" || toolUseIds.has(block.tool_use_id)); if (remaining.length === 0) continue; if (remaining.length !== msg.content.length) filtered.push({ ...msg, content: remaining }); else filtered.push(msg); } else if (msg.role === "assistant" && Array.isArray(msg.content)) { const remaining = msg.content.filter((block) => block.type !== "tool_use" || toolResultIds.has(block.id)); if (remaining.length === 0) continue; if (remaining.length !== msg.content.length) filtered.push({ ...msg, content: remaining }); else filtered.push(msg); } else filtered.push(msg); return filtered; } const MAX_TOKENS = 128e3; function countToolsTokens(model, tools) { if (tools.length === 0) return 0; return countTokens(model, JSON.stringify(tools)); } function countMessageTokens(model, message) { return countTokens(model, JSON.stringify(message.content) || ""); } function countTokens(model, text) { return text.length / 3; } function convertActionInputToAnthropicTool(action) { return { name: action.name, description: action.description, input_schema: JSON.parse(action.jsonSchema) }; } function convertMessageToAnthropicMessage(message) { if (message.isTextMessage()) if (message.role === "system") return { role: "assistant", content: [{ type: "text", text: "THE FOLLOWING MESSAGE IS A SYSTEM MESSAGE: " + message.content }] }; else return { role: message.role === "user" ? "user" : "assistant", content: [{ type: "text", text: message.content }] }; else if (message.isImageMessage()) { let mediaType; switch (message.format) { case "jpeg": mediaType = "image/jpeg"; break; case "png": mediaType = "image/png"; break; case "webp": mediaType = "image/webp"; break; case "gif": mediaType = "image/gif"; break; default: throw new Error(`Unsupported image format: ${message.format}`); } return { role: "user", content: [{ type: "image", source: { type: "base64", media_type: mediaType, data: message.bytes } }] }; } else if (message.isActionExecutionMessage()) return { role: "assistant", content: [{ id: message.id, type: "tool_use", input: message.arguments, name: message.name }] }; else if (message.isResultMessage()) return { role: "user", content: [{ type: "tool_result", content: message.result || "Action completed successfully", tool_use_id: message.actionExecutionId }] }; } //#endregion exports.convertActionInputToAnthropicTool = convertActionInputToAnthropicTool; exports.convertMessageToAnthropicMessage = convertMessageToAnthropicMessage; exports.limitMessagesToTokenCount = limitMessagesToTokenCount; //# sourceMappingURL=utils.cjs.map