makeToolCalls method
Implementation
@override
Future<List<ToolResultMessage>> makeToolCalls({required List<Tool> tools, required List toolCalls}) async {
// Log the tool calls
logRequest({'tool_calls': toolCalls});
final List<ToolResultMessage> toolCallResults = [];
for (final toolCall in toolCalls) {
final function = toolCall['function'];
final arguments = function['arguments'] is String ? jsonDecode(function['arguments']) : function['arguments'];
final tool = tools.firstWhere((tool) => tool.name == function['name']);
try {
final value = await tool.call(arguments);
final resultMessage = ToolResultMessage(
id: toolCall['id'],
content: buildPrompt(
prompt: '',
contexts: [Context(name: tool.name, value: value)],
),
);
toolCallResults.add(resultMessage);
// Log successful tool result
logResponse({'id': toolCall['id'], 'result': value});
} catch (e) {
// Log tool error
logError(e);
// Still need to add a result even if there's an error
toolCallResults.add(
ToolResultMessage(
id: toolCall['id'],
content: 'Error: ${e.toString()}',
),
);
}
}
return toolCallResults;
}