I’m using the AI Engine Wordpress plugin. I have created a function and also added som filters to my Wordpress theme’s functions.php
When I test the AI Engine chatbot I get this error, and I have tried to edit both the function and the filters but without succes.
THE ERROR:
OpenAI: { "error": { "message": "Invalid schema for function 'get_game_data': In context=('properties', 'requested_columns'), array schema missing items.", "type": "invalid_request_error", "param": "tools[0].function.parameters", "code": "invalid_function_parameters" } }
THE FUNCTION (added to AI Engine’s own Code Engine):
function get_game_data($params) {
// Sikrer, at $params er et array
if (!is_array($params)) {
return ["error" => "Fejl: Modtog ugyldige parametre."];
}
// Logging for debugging
error_log("✅ get_game_data CALLED - Params: " . json_encode($params));
// Filstier til datafiler
$csv_file_path = '/var/www/vhosts/spillegudsrige.dk/httpdocs/paaskespil/csv-filer/spilledata-csvformat.csv';
$excel_file_path = '/var/www/vhosts/spillegudsrige.dk/httpdocs/paaskespil/excelfilen/spilledata.xlsx';
// Validerer at nødvendige parametre er til stede
if (empty($params['lookup_value']) || empty($params['column_name'])) {
error_log("❌ ERROR: Missing required parameters.");
return ["error" => "Fejl: Manglende parametre. Skal inkludere 'lookup_value' og 'column_name'."];
}
$lookup_value = trim($params['lookup_value']);
$column_name = trim($params['column_name']);
// Sikrer, at requested_columns er et array af strenge
$requested_columns = [];
if (!empty($params['requested_columns']) && is_array($params['requested_columns'])) {
$requested_columns = array_map('strval', $params['requested_columns']);
}
// Logging modtagne parametre
error_log("🔍 Lookup Value: $lookup_value | Column Name: $column_name | Requested Columns: " . json_encode($requested_columns));
// **1️⃣ Prøver at læse Excel-filen først**
if (file_exists($excel_file_path)) {
require_once ABSPATH . 'wp-content/plugins/paaskespil/SimpleXLSX.php';
$xlsx = SimpleXLSX::parse($excel_file_path);
if (!$xlsx) {
error_log("❌ ERROR: Failed to read Excel file.");
return ["error" => "Fejl ved læsning af Excel-fil."];
}
$rows = $xlsx->rows();
$headers = array_map('trim', array_shift($rows)); // Fjerner mellemrum fra kolonnenavne
error_log("📄 Excel file loaded successfully.");
}
// **2️⃣ Hvis Excel ikke findes, prøv CSV**
elseif (file_exists($csv_file_path)) {
$rows = array_map('str_getcsv', file($csv_file_path));
$headers = array_map('trim', array_shift($rows)); // Fjerner mellemrum fra kolonnenavne
error_log("📄 CSV file loaded successfully.");
}
// **3️⃣ Ingen datafiler fundet**
else {
error_log("❌ ERROR: No data file found.");
return ["error" => "Fejl: Ingen datafil fundet."];
}
// **4️⃣ Finder kolonneindeks baseret på navn**
$column_index = array_search($column_name, $headers);
if ($column_index === false) {
error_log("❌ ERROR: Column '$column_name' not found.");
return ["error" => "Fejl: Kolonnen '$column_name' findes ikke."];
}
// **5️⃣ Søger efter den rigtige række**
foreach ($rows as $row) {
if (isset($row[$column_index]) && trim($row[$column_index]) == $lookup_value) {
$full_data = array_combine($headers, $row);
error_log("🎯 Data found: " . json_encode($full_data));
// **Filtrer kun de ønskede kolonner, hvis specificeret**
if (!empty($requested_columns)) {
$filtered_data = array_intersect_key($full_data, array_flip($requested_columns));
error_log("🎯 Filtered data: " . json_encode($filtered_data));
return $filtered_data;
}
return $full_data;
}
}
error_log("⚠️ No data found for '$lookup_value' in column '$column_name'.");
return ["error" => "Ingen data fundet for '$lookup_value' i kolonne '$column_name'."];
}
THE FILTERS (added to the Wordpress theme’s functions.php):
add_filter('mwai_functions_list', function ($functions) {
error_log("🔄 Registering AI Engine function: get_game_data"); // Debugging
$functions[] = Meow_MWAI_Query_Function::fromJson([
'id' => 'get_game_data',
'type' => 'manual',
'name' => 'get_game_data',
'desc' => 'Henter data fra CSV eller Excel baseret på en specifik kolonne og værdi.',
'target' => 'server',
'args' => [
['name' => 'lookup_value', 'type' => 'string', 'required' => true, 'desc' => 'Værdien at slå op.'],
['name' => 'column_name', 'type' => 'string', 'required' => true, 'desc' => 'Kolonnenavn at søge i.'],
[
'name' => 'requested_columns',
'type' => 'array',
'required' => false,
'desc' => 'Liste over ønskede kolonner.',
'items' => [
'type' => 'string' // Specificerer, at arrayet indeholder strenge
]
]
]
]);
return $functions;
}, 10, 1);
add_filter('mwai_ai_feedback', function ($value, $needFeedback) {
error_log("🔍 AI Engine prøver at køre mwai_ai_feedback for: " . json_encode($needFeedback));
$function = $needFeedback['function'];
if ($function->id === 'get_game_data') {
$args = $needFeedback['arguments'];
error_log("✅ AI Engine kalder get_game_data med args: " . json_encode($args));
$result = get_game_data($args);
error_log("🎯 get_game_data returnerede: " . json_encode($result));
return json_encode($result);
}
return $value;
}, 10, 2);
add_filter('mwai_ai_function', function ($value, $funcName, $funcArgs) {
error_log("📌 AI Engine forsøger at kalde funktion: " . $funcName . " med parametre: " . json_encode($funcArgs));
if ($funcName === 'get_game_data') {
error_log("✅ AI Engine har genkendt get_game_data! Kører nu funktionen...");
$result = get_game_data($funcArgs);
error_log("📌 Resultat af get_game_data: " . json_encode($result));
return json_encode($result);
}
return $value;
}, 10, 3);