fix(driveragent): save tool_calls in message history for native tool calling
When using native tool calling, the assistant's tool_calls must be saved in message history. Without this, the model doesn't know it already called a tool and loops indefinitely calling the same tool. This fix saves tool_calls in both startTaskWithNativeTools and continueWithNativeTools methods. Also updates @push.rocks/smartai to v0.13.3 for tool_calls forwarding support.
This commit is contained in:
@@ -517,12 +517,24 @@ Your complete output here
|
||||
this.isInThinkingMode = false;
|
||||
|
||||
// Add assistant response to history
|
||||
const historyMessage: plugins.smartai.ChatMessage = {
|
||||
const historyMessage: any = {
|
||||
role: 'assistant',
|
||||
content: response.message || '',
|
||||
reasoning: response.thinking || response.reasoning,
|
||||
};
|
||||
this.messageHistory.push(historyMessage);
|
||||
|
||||
// CRITICAL: Preserve tool_calls in history for native tool calling
|
||||
// Without this, the model doesn't know it already called a tool and loops forever
|
||||
if (response.toolCalls && response.toolCalls.length > 0) {
|
||||
historyMessage.tool_calls = response.toolCalls.map((tc: any) => ({
|
||||
function: {
|
||||
name: tc.function.name,
|
||||
arguments: tc.function.arguments,
|
||||
},
|
||||
}));
|
||||
}
|
||||
|
||||
this.messageHistory.push(historyMessage as unknown as plugins.smartai.ChatMessage);
|
||||
|
||||
// Convert Ollama tool calls to our format
|
||||
let toolCalls: interfaces.INativeToolCall[] | undefined;
|
||||
@@ -639,11 +651,24 @@ Your complete output here
|
||||
this.isInThinkingMode = false;
|
||||
|
||||
// Add assistant response to history
|
||||
this.messageHistory.push({
|
||||
const historyMessage: any = {
|
||||
role: 'assistant',
|
||||
content: response.message || '',
|
||||
reasoning: response.thinking || response.reasoning,
|
||||
});
|
||||
};
|
||||
|
||||
// CRITICAL: Preserve tool_calls in history for native tool calling
|
||||
// Without this, the model doesn't know it already called a tool and loops forever
|
||||
if (response.toolCalls && response.toolCalls.length > 0) {
|
||||
historyMessage.tool_calls = response.toolCalls.map((tc: any) => ({
|
||||
function: {
|
||||
name: tc.function.name,
|
||||
arguments: tc.function.arguments,
|
||||
},
|
||||
}));
|
||||
}
|
||||
|
||||
this.messageHistory.push(historyMessage as unknown as plugins.smartai.ChatMessage);
|
||||
|
||||
// Convert Ollama tool calls to our format
|
||||
let toolCalls: interfaces.INativeToolCall[] | undefined;
|
||||
|
||||
Reference in New Issue
Block a user