65 lines
2.5 KiB
PHP
65 lines
2.5 KiB
PHP
<?php
|
|
header('Content-Type: application/json');
|
|
require_once __DIR__ . '/../db/config.php';
|
|
require_once __DIR__ . '/../ai/LocalAIApi.php';
|
|
|
|
$input = json_decode(file_get_contents('php://input'), true);
|
|
$message = $input['message'] ?? '';
|
|
|
|
if (empty($message)) {
|
|
echo json_encode(['reply' => "Je n'ai pas bien compris. Pouvez-vous répéter ?"]);
|
|
exit;
|
|
}
|
|
|
|
try {
|
|
// 1. Fetch Knowledge Base (FAQs)
|
|
$stmt = db()->query("SELECT keywords, answer FROM faqs");
|
|
$faqs = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
|
|
$knowledgeBase = "Voici la base de connaissances pour ce site Web :\n\n";
|
|
foreach ($faqs as $faq) {
|
|
$knowledgeBase .= "Q: " . $faq['keywords'] . "\nA: " . $faq['answer'] . "\n---\n";
|
|
}
|
|
|
|
// 2. Construct Prompt for AI
|
|
$systemPrompt = "Vous êtes un assistant IA utile et amical pour ce site Web. " .
|
|
"Utilisez la base de connaissances fournie pour répondre avec précision aux questions des utilisateurs. " .
|
|
"Si la réponse se trouve dans la base de connaissances, reformulez-la naturellement. " .
|
|
"If the answer is NOT in the Knowledge Base, use your general knowledge to help, " .
|
|
"but politely mention that you don't have specific information about that if it seems like a site-specific question. " .
|
|
"Gardez les réponses concises et professionnelles. RÉPONDEZ TOUJOURS EN FRANÇAIS.\n\n" .
|
|
$knowledgeBase;
|
|
|
|
// 3. Call AI API
|
|
$response = LocalAIApi::createResponse([
|
|
'model' => 'gpt-4o-mini',
|
|
'input' => [
|
|
['role' => 'system', 'content' => $systemPrompt],
|
|
['role' => 'user', 'content' => $message],
|
|
]
|
|
]);
|
|
|
|
if (!empty($response['success'])) {
|
|
$aiReply = LocalAIApi::extractText($response);
|
|
|
|
// 4. Save to Database
|
|
try {
|
|
$stmt = db()->prepare("INSERT INTO messages (user_message, ai_response) VALUES (?, ?)");
|
|
$stmt->execute([$message, $aiReply]);
|
|
} catch (Exception $e) {
|
|
error_log("DB Save Error: " . $e->getMessage());
|
|
// Continue even if save fails, so the user still gets a reply
|
|
}
|
|
|
|
echo json_encode(['reply' => $aiReply]);
|
|
} else {
|
|
// Fallback if AI fails
|
|
error_log("AI Error: " . ($response['error'] ?? 'Unknown'));
|
|
echo json_encode(['reply' => "J'ai du mal à me connecter à mon cerveau pour le moment. Veuillez réessayer plus tard."]);
|
|
}
|
|
|
|
} catch (Exception $e) {
|
|
error_log("Chat Error: " . $e->getMessage());
|
|
echo json_encode(['reply' => "Une erreur interne est survenue."]);
|
|
}
|