prepare("INSERT INTO chat_sessions (user_id, client_id) VALUES (?, ?)"); $stmt->execute([$user_id, $client_id]); $session_id = db()->lastInsertId(); $_SESSION['chat_session_id'] = $session_id; } // Load conversation history $stmt = db()->prepare("SELECT sender, message FROM chat_messages WHERE session_id = ? ORDER BY created_at ASC"); $stmt->execute([$session_id]); $history = $stmt->fetchAll(PDO::FETCH_ASSOC); function search_kb($message) { $terms = explode(' ', $message); $sql = "SELECT * FROM kb_documents WHERE is_active = 1 AND ("; $conditions = []; foreach ($terms as $term) { $conditions[] = "title LIKE ? OR content LIKE ?"; } $sql .= implode(' OR ', $conditions) . ") LIMIT 3"; $stmt = db()->prepare($sql); $params = []; foreach ($terms as $term) { $params[] = '%' . $term . '%'; $params[] = '%' . $term . '%'; } $stmt->execute($params); return $stmt->fetchAll(); } $input = json_decode(file_get_contents('php://input'), true); $message = $input['message'] ?? ''; if (empty($message)) { echo json_encode(['reply' => 'Please enter a message.']); exit; } // Save user message $stmt = db()->prepare("INSERT INTO chat_messages (session_id, sender, message) VALUES (?, 'user', ?)"); $stmt->execute([$session_id, $message]); $kb_documents = search_kb($message); $prompt = "You are a helpful assistant for Extrading, a company that sells construction materials. Please answer in ' . ($lang ?? 'en') . ' language. Answer the user\'s questions based on the provided context. If the answer is not in the context, say you don\'t know.\n\n"; if (!empty($kb_documents)) { $prompt .= "Context from knowledge base:\n"; foreach ($kb_documents as $doc) { $prompt .= "- Title: " . $doc['title'] . "\n"; $prompt .= " Content: " . $doc['content'] . "\n"; } $prompt .= "\n"; } $prompt .= "Conversation history:\n"; foreach ($history as $msg) { $prompt .= $msg['sender'] . ": " . $msg['message'] . "\n"; } $prompt .= "user: " . $message . "\n"; $prompt .= "assistant:"; $response = LocalAIApi::createResponse([ 'input' => [ ['role' => 'system', 'content' => $prompt] ] ]); if (!empty($response['success'])) { $reply = LocalAIApi::extractText($response); } else { $reply = 'Sorry, I am having trouble connecting to the AI service. Please try again later.'; error_log('AI API Error: ' . ($response['error'] ?? 'Unknown error')); } // Save assistant message $stmt = db()->prepare("INSERT INTO chat_messages (session_id, sender, message) VALUES (?, 'assistant', ?)"); $stmt->execute([$session_id, $reply]); echo json_encode(['reply' => $reply]);