date('c'), 'username' => (string) $username, 'ipAddress' => (string) ($ipAddress ?? ($_SERVER['REMOTE_ADDR'] ?? '')), 'chat' => is_array($chatMessages) ? $chatMessages : [$chatMessages], 'result' => $resultPayload ]; $payload = json_encode($entries, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); return $payload !== false && file_put_contents($auditPath, $payload . PHP_EOL) !== false; } // 1. Handle fetching available models if (isset($_GET['action']) && $_GET['action'] === 'models') { $ch = curl_init(OLLAMA_URL . '/api/tags'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); if (curl_errno($ch)) { echo json_encode(['error' => 'Could not connect to Ollama server.']); } else { echo $response; } curl_close($ch); exit; } // 2. Handle sending chat messages if ($_SERVER['REQUEST_METHOD'] === 'POST') { $input = json_decode(file_get_contents('php://input'), true); $model = isset($input['model']) && trim((string) $input['model']) !== '' ? (string) $input['model'] : getConfiguredDefaultModel(); $messages = $input['messages'] ?? []; $username = ''; if (!empty($_SESSION['auth_user']['username'])) { $username = sanitizeUsername($_SESSION['auth_user']['username']); } $payload = json_encode([ 'model' => $model, 'messages' => $messages, 'stream' => false ]); $ch = curl_init(OLLAMA_URL . '/api/chat'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); $response = curl_exec($ch); $resultPayload = null; if (curl_errno($ch)) { $resultPayload = ['error' => 'Error communicating with remote Ollama: ' . curl_error($ch)]; echo json_encode($resultPayload); } else { $decodedResponse = json_decode($response, true); $resultPayload = $decodedResponse !== null ? $decodedResponse : $response; echo $response; } curl_close($ch); appendChatAuditEntry($username, $messages, $resultPayload, $_SERVER['REMOTE_ADDR'] ?? ''); exit; } echo json_encode(['error' => 'Invalid request']);