"I didn't catch that. Could you repeat?"]); exit; } try { // 1. Fetch Knowledge Base (FAQs) $stmt = db()->query("SELECT keywords, answer FROM faqs"); $faqs = $stmt->fetchAll(PDO::FETCH_ASSOC); $knowledgeBase = "Here is the knowledge base for this website:\n\n"; foreach ($faqs as $faq) { $knowledgeBase .= "Q: " . $faq['keywords'] . "\nA: " . $faq['answer'] . "\n---\n"; } // 2. Construct Prompt for AI $systemPrompt = "You are a helpful, friendly AI assistant for this website. " . "Use the provided Knowledge Base to answer user questions accurately. " . "If the answer is found in the Knowledge Base, rephrase it naturally. " . "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. " . "Keep answers concise and professional.\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' => "I'm having trouble connecting to my brain right now. Please try again later."]); } } catch (Exception $e) { error_log("Chat Error: " . $e->getMessage()); echo json_encode(['reply' => "An internal error occurred."]); }