This commit is contained in:
decolua
2026-01-23 17:36:23 +07:00
parent a01526642c
commit d3dd8686fe
+47 -22
View File
@@ -50,23 +50,26 @@ function convertMessages(messages, tools, model) {
if (role === "user") { if (role === "user") {
let finalContent = content; let finalContent = content;
let toolResults = [];
// Check if this user message contains tool_result blocks // Check if this user message contains tool_result blocks
if (Array.isArray(msg.content)) { if (Array.isArray(msg.content)) {
const toolResultBlocks = msg.content.filter(c => c.type === "tool_result"); const toolResultBlocks = msg.content.filter(c => c.type === "tool_result");
if (toolResultBlocks.length > 0) { if (toolResultBlocks.length > 0) {
const toolResults = toolResultBlocks.map(block => ({ toolResults = toolResultBlocks.map(block => {
content: [{ const text = Array.isArray(block.content)
text: Array.isArray(block.content) ? block.content.map(c => c.text || "").join("\n")
? block.content.map(c => c.text || "").join("\n") : (typeof block.content === "string" ? block.content : "");
: (typeof block.content === "string" ? block.content : "")
}], return {
status: "success", toolUseId: block.tool_use_id,
toolUseId: block.tool_use_id status: "success",
})); content: [{ text: text }]
};
});
// JSON stringify tool results and add to content // Set simple content when tool results exist
finalContent = JSON.stringify(toolResults); finalContent = content || "Continue";
} }
} }
@@ -74,10 +77,18 @@ function convertMessages(messages, tools, model) {
userInputMessage: { userInputMessage: {
content: finalContent, content: finalContent,
modelId: "", modelId: "",
origin: "AI_EDITOR"
} }
}; };
// Add tool results to userInputMessageContext
if (toolResults.length > 0) {
if (!userMsg.userInputMessage.userInputMessageContext) {
userMsg.userInputMessage.userInputMessageContext = {};
}
userMsg.userInputMessage.userInputMessageContext.toolResults = toolResults;
}
// Add tools to first user message
if (tools && tools.length > 0 && history.length === 0) { if (tools && tools.length > 0 && history.length === 0) {
if (!userMsg.userInputMessage.userInputMessageContext) { if (!userMsg.userInputMessage.userInputMessageContext) {
userMsg.userInputMessage.userInputMessageContext = {}; userMsg.userInputMessage.userInputMessageContext = {};
@@ -107,18 +118,35 @@ function convertMessages(messages, tools, model) {
} }
if (role === "assistant") { if (role === "assistant") {
// Extract text content and tool uses separately from content array
let textContent = "";
let toolUses = [];
if (Array.isArray(msg.content)) {
const textBlocks = msg.content.filter(c => c.type === "text");
textContent = textBlocks.map(b => b.text).join("\n").trim();
const toolUseBlocks = msg.content.filter(c => c.type === "tool_use");
toolUses = toolUseBlocks;
} else if (typeof msg.content === "string") {
textContent = msg.content.trim();
}
// Fallback for OpenAI tool_calls format
if (msg.tool_calls && msg.tool_calls.length > 0) {
toolUses = msg.tool_calls;
}
const assistantMsg = { const assistantMsg = {
assistantResponseMessage: { assistantResponseMessage: {
content: content content: textContent || "Call tools"
} }
}; };
const toolCallsOrUses = msg.tool_calls ||
(Array.isArray(msg.content) ? msg.content.filter(c => c.type === "tool_use") : []);
if (toolCallsOrUses.length > 0) { if (toolUses.length > 0) {
assistantMsg.assistantResponseMessage.toolUses = toolCallsOrUses.map(tc => { assistantMsg.assistantResponseMessage.toolUses = toolUses.map(tc => {
if (tc.function) { if (tc.function) {
// OpenAI format
return { return {
toolUseId: tc.id || uuidv4(), toolUseId: tc.id || uuidv4(),
name: tc.function.name, name: tc.function.name,
@@ -127,6 +155,7 @@ function convertMessages(messages, tools, model) {
: (tc.function.arguments || {}) : (tc.function.arguments || {})
}; };
} else { } else {
// Anthropic format
return { return {
toolUseId: tc.id || uuidv4(), toolUseId: tc.id || uuidv4(),
name: tc.name, name: tc.name,
@@ -157,10 +186,6 @@ function convertMessages(messages, tools, model) {
// Clean up history for Kiro API compatibility // Clean up history for Kiro API compatibility
history.forEach(item => { history.forEach(item => {
if (item.assistantResponseMessage?.toolUses) {
delete item.assistantResponseMessage.toolUses;
}
if (item.userInputMessage?.userInputMessageContext?.tools) { if (item.userInputMessage?.userInputMessageContext?.tools) {
delete item.userInputMessage.userInputMessageContext.tools; delete item.userInputMessage.userInputMessageContext.tools;
} }