35890-vm/api/chat.php
2025-11-21 21:40:28 +00:00

101 lines
4.1 KiB
PHP

<?php
session_start();
header('Content-Type: application/json');
require_once __DIR__ . '/../db/config.php';
require_once __DIR__ . '/../ai/LocalAIApi.php';
if (!isset($_SESSION['user_id'])) {
http_response_code(401);
echo json_encode(['success' => false, 'error' => 'Unauthorized']);
exit;
}
try {
$pdo = db();
$user_id = $_SESSION['user_id'];
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$input = json_decode(file_get_contents('php://input'), true);
$message = $input['message'] ?? '';
$context = $input['context'] ?? null; // New: get context
if (empty(trim($message))) {
echo json_encode(['success' => false, 'error' => 'Message cannot be empty.']);
exit;
}
// New: Handle simulation context
if ($context === 'vpn' || $context === 'antivirus') {
$ai_input = [['role' => 'user', 'content' => $message]];
$ai_response = LocalAIApi::createResponse(['input' => $ai_input]);
$ai_message = LocalAIApi::extractText($ai_response);
if (!empty($ai_message)) {
echo json_encode(['success' => true, 'data' => $ai_message]);
} else {
echo json_encode(['success' => false, 'error' => 'Failed to get AI response.']);
}
exit; // Stop execution for simulations
}
// --- Existing Chat Logic ---
$personality = $input['personality'] ?? '';
$stmt = $pdo->prepare("INSERT INTO messages (user_id, message) VALUES (?, ?)");
$stmt->execute([$user_id, $message]);
// --- AI CONTEXT PREPARATION ---
// 1. Prepare the system prompt (personality)
$final_ai_input = [];
if (!empty(trim($personality))) {
$final_ai_input[] = ['role' => 'system', 'content' => $personality];
}
// 2. Get last 5 messages for conversation history
$stmt = $pdo->query("SELECT m.message, u.username FROM messages m JOIN users u ON m.user_id = u.id ORDER BY m.created_at DESC LIMIT 5");
$recent_messages = $stmt->fetchAll(PDO::FETCH_ASSOC);
$conversation_history = array_map(function($msg) {
return ['role' => $msg['username'] === 'AI' ? 'assistant' : 'user', 'content' => $msg['message']];
}, array_reverse($recent_messages));
// 3. Combine system prompt with conversation history
$final_ai_input = array_merge($final_ai_input, $conversation_history);
// --- CALL THE AI ---
$ai_response = LocalAIApi::createResponse(['input' => $final_ai_input]);
$ai_message = LocalAIApi::extractText($ai_response);
if (!empty($ai_message)) {
$stmt = $pdo->prepare("SELECT id FROM users WHERE username = 'AI'");
$stmt->execute();
$ai_user = $stmt->fetch(PDO::FETCH_ASSOC);
if ($ai_user) {
$stmt = $pdo->prepare("INSERT INTO messages (user_id, message) VALUES (?, ?)");
$stmt->execute([$ai_user['id'], $ai_message]);
}
}
echo json_encode(['success' => true, 'message' => 'Message saved.']);
} elseif ($_SERVER['REQUEST_METHOD'] === 'GET') {
if (isset($_GET['action']) && $_GET['action'] === 'reset') {
// Truncate the messages table to reset the chat
$pdo->query("TRUNCATE TABLE messages");
echo json_encode(['success' => true, 'message' => 'Chat history has been cleared.']);
} else {
$stmt = $pdo->query("SELECT m.id, m.message, m.created_at, u.username, LEFT(u.username, 1) as user_initial FROM messages m JOIN users u ON m.user_id = u.id ORDER BY m.created_at ASC");
$messages = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode(['success' => true, 'messages' => $messages, 'currentUser' => $_SESSION['username']]);
}
} else {
http_response_code(405);
echo json_encode(['success' => false, 'error' => 'Method Not Allowed']);
}
} catch (PDOException $e) {
http_response_code(500);
echo json_encode(['success' => false, 'error' => 'Database error: ' . $e->getMessage()]);
}
?>