This commit is contained in:
2026-09-12 11:12:31 +02:00
parent 09ab527a93
commit bb0bf658ed
6 changed files with 208 additions and 107 deletions
+42 -9
View File
@@ -82,12 +82,19 @@ function fociz_ai_enforce_privacy_firewall(array &$messages): array {
* @return array
*/
function fociz_ai_chat_gemini(array $messages, array $options, array $aiSettings): array {
$apiKey = $aiSettings['ai_api_key'];
$model = !empty($aiSettings['ai_model']) ? $aiSettings['ai_model'] : 'gemini-1.5-pro';
$apiKey = trim((string)($aiSettings['ai_api_key'] ?? ''));
$model = !empty($aiSettings['ai_model']) ? trim((string)$aiSettings['ai_model']) : 'gemini-1.5-pro';
$temperature = $options['temperature'] ?? 0.3;
$maxTokens = $options['max_tokens'] ?? 2048;
$jsonMode = !empty($options['json_mode']);
if (empty($apiKey)) {
return [
'success' => false,
'error' => 'Geen Google Gemini API-sleutel ingevuld of geconfigureerd.',
];
}
// Google Generative Language API structuur opbouwen
$systemInstructions = [];
$contents = [];
@@ -131,7 +138,8 @@ function fociz_ai_chat_gemini(array $messages, array $options, array $aiSettings
$payload['generationConfig']['responseMimeType'] = 'application/json';
}
$endpoint = "https://generativelanguage.googleapis.com/v1beta/models/{$model}:generateContent";
// Geef de sleutel zowel in de URL (?key=) als in de x-goog-api-key header mee voor proxy-ondersteuning
$endpoint = "https://generativelanguage.googleapis.com/v1beta/models/{$model}:generateContent?key=" . urlencode($apiKey);
$response = fociz_http_request($endpoint, [
'method' => 'POST',
@@ -140,11 +148,20 @@ function fociz_ai_chat_gemini(array $messages, array $options, array $aiSettings
'x-goog-api-key' => $apiKey,
],
'body' => $payload,
'timeout' => 45,
'timeout' => 20,
]);
if ($response['status'] !== 200 || empty($response['json']['candidates'][0]['content']['parts'][0]['text'])) {
$errMsg = $response['json']['error']['message'] ?? ($response['error'] ?? "Gemini API aanroep mislukt (HTTP {$response['status']})");
$errMsg = null;
if (!empty($response['json']['error']['message'])) {
$errMsg = $response['json']['error']['message'];
} elseif (!empty($response['error'])) {
$errMsg = $response['error'];
} elseif (!empty($response['body'])) {
$errMsg = "Gemini fout (HTTP {$response['status']}): " . strip_tags(substr((string)$response['body'], 0, 200));
} else {
$errMsg = "Gemini API aanroep mislukt (HTTP {$response['status']})";
}
error_log("fociz_ai_chat_gemini fout: {$errMsg}");
return [
'success' => false,
@@ -188,12 +205,19 @@ function fociz_ai_chat_gemini(array $messages, array $options, array $aiSettings
* @return array
*/
function fociz_ai_chat_openai(array $messages, array $options, array $aiSettings): array {
$apiKey = $aiSettings['ai_api_key'];
$model = !empty($aiSettings['ai_model']) ? $aiSettings['ai_model'] : 'gpt-4o-mini';
$apiKey = trim((string)($aiSettings['ai_api_key'] ?? ''));
$model = !empty($aiSettings['ai_model']) ? trim((string)$aiSettings['ai_model']) : 'gpt-4o-mini';
$temperature = $options['temperature'] ?? 0.3;
$maxTokens = $options['max_tokens'] ?? 1500;
$jsonMode = !empty($options['json_mode']);
if (empty($apiKey)) {
return [
'success' => false,
'error' => 'Geen OpenAI API-sleutel ingevuld of geconfigureerd.',
];
}
$payload = [
'model' => $model,
'messages' => $messages,
@@ -212,11 +236,20 @@ function fociz_ai_chat_openai(array $messages, array $options, array $aiSettings
'Content-Type' => 'application/json',
],
'body' => $payload,
'timeout' => 35,
'timeout' => 20,
]);
if ($response['status'] !== 200 || empty($response['json']['choices'][0]['message']['content'])) {
$errMsg = $response['json']['error']['message'] ?? ($response['error'] ?? "OpenAI aanroep mislukt (HTTP {$response['status']})");
$errMsg = null;
if (!empty($response['json']['error']['message'])) {
$errMsg = $response['json']['error']['message'];
} elseif (!empty($response['error'])) {
$errMsg = $response['error'];
} elseif (!empty($response['body'])) {
$errMsg = "OpenAI fout (HTTP {$response['status']}): " . strip_tags(substr((string)$response['body'], 0, 200));
} else {
$errMsg = "OpenAI API aanroep mislukt (HTTP {$response['status']})";
}
error_log("fociz_ai_chat_openai fout: {$errMsg}");
return [
'success' => false,