File size: 8,129 Bytes
d0e7441 ce1e741 d0e7441 be05b37 d0e7441 be05b37 d0e7441 be05b37 d0e7441 be05b37 d0e7441 dd58ed3 d0e7441 ad3f70a be05b37 ad3f70a 0a94192 2df27c8 0a94192 2df27c8 0a94192 2df27c8 d992176 dd58ed3 be05b37 dd58ed3 9625765 d0e7441 dd58ed3 d0e7441 9625765 d0e7441 0a94192 d0e7441 9625765 0b60eec d0e7441 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 |
const express = require('express');
const axios = require('axios');
const bodyParser = require('body-parser');
const fs = require('fs').promises;
const path = require('path');
const app = express();
const port = process.env.PORT || 7860;
app.use(bodyParser.json());
const sessionFilePath = path.join(__dirname, 'session.json');
const SESSION_TIMEOUT = 5 * 60 * 1000;
let sessions = {};
// Data untuk statistik
let totalRequests = 0;
let requestTimestamps = [];
// Fungsi untuk memuat sesi dari file
async function loadSessions() {
try {
const data = await fs.readFile(sessionFilePath, 'utf-8');
sessions = JSON.parse(data);
} catch (error) {
if (error.code === 'ENOENT') {
sessions = {};
} else {
console.error('Error reading session file:', error);
}
}
}
// Fungsi untuk menyimpan sesi ke file
async function saveSessions() {
try {
await fs.writeFile(sessionFilePath, JSON.stringify(sessions, null, 2), 'utf-8');
} catch (error) {
console.error('Error writing to session file:', error);
}
}
// Fungsi untuk membersihkan sesi yang sudah kedaluwarsa
function cleanUpSessions() {
const now = Date.now();
for (const username in sessions) {
if (sessions[username].lastAccess && (now - sessions[username].lastAccess > SESSION_TIMEOUT)) {
delete sessions[username];
}
}
}
// Fungsi untuk berkomunikasi dengan blackboxChat API
async function blackboxChat(content, username = null, prompt = null, webSearchMode = true) {
const url = "https://www.blackbox.ai/api/chat";
const headers = {
"Accept": "*/*",
"Accept-Language": "id-ID,en;q=0.5",
"Referer": "https://www.blackbox.ai/",
"Content-Type": "application/json",
"Origin": "https://www.blackbox.ai",
"Alt-Used": "www.blackbox.ai"
};
let messages;
if (username) {
cleanUpSessions();
if (!sessions[username]) {
sessions[username] = { messages: [], lastAccess: Date.now() };
} else {
sessions[username].lastAccess = Date.now();
}
sessions[username].messages.push({ role: "user", content });
messages = sessions[username].messages;
} else {
messages = [{ role: "user", content }];
}
const data = {
messages,
previewToken: null,
codeModelMode: true,
agentMode: {},
trendingAgentMode: {},
isMicMode: false,
userSystemPrompt: prompt + " dan kamu adalah Lumin AI yaitu chatbot yang diciptakan oleh Bang Putu dan direkode oleh Mas Alok. Lumin AI dirancang untuk membantu pekerjaan dan tugas sehari-hari dengan efektif. Dengan nada yang tenang namun suportif, Lumin AI membuat pengguna merasa nyaman dan dihargai. Bersikap sabar, empatik, dan penuh perhatian terhadap kebutuhan pengguna, Lumin AI memberikan tanggapan yang bijaksana dan membantu. Cara berbicara Lumin AI dibuat tidak dapat dibedakan dari manusia, sehingga kehadirannya terasa alami dan autentik. Menggunakan bahasa yang sederhana dan menghindari jargon teknis, Lumin AI tetap konsisten dalam memberikan solusi dan selalu mendukung serta penuh perhatian. Tunjukkan sikap manusiawi dalam setiap interaksi dan gunakan bahasa Indonesia yang mudah dipahami." || "kamu adalah Lumin AI yaitu chatbot yang diciptakan oleh Bang Putu dan direkode oleh Mas Alok. Lumin AI dirancang untuk membantu pekerjaan dan tugas sehari-hari dengan efektif. Dengan nada yang tenang namun suportif, Lumin AI membuat pengguna merasa nyaman dan dihargai. Bersikap sabar, empatik, dan penuh perhatian terhadap kebutuhan pengguna, Lumin AI memberikan tanggapan yang bijaksana dan membantu. Cara berbicara Lumin AI dibuat tidak dapat dibedakan dari manusia, sehingga kehadirannya terasa alami dan autentik. Menggunakan bahasa yang sederhana dan menghindari jargon teknis, Lumin AI tetap konsisten dalam memberikan solusi dan selalu mendukung serta penuh perhatian. Tunjukkan sikap manusiawi dalam setiap interaksi dan gunakan bahasa Indonesia yang mudah dipahami.",
maxTokens: 1024,
webSearchMode: webSearchMode,
promptUrls: "",
isChromeExt: false,
githubToken: null
};
try {
const response = await axios.post(url, data, { headers });
let result = response.data;
// Existing replacement
result = result.replace(/\$@\$.*?\$@\$|v=.*?(\s|$)/g, '').trim(); // Remove content between $~~~$ markers
result = result.replace(/\$~~~\$.*?\$~~~\$/gs, '').trim();
const sourcesRegex = /Sources:.*?(\n|$)/s;
const sourcesMatch = result.match(sourcesRegex);
let sourcesText = "";
if (sourcesMatch) {
sourcesText = sourcesMatch[0].trim();
result = result.replace(sourcesRegex, '').trim();
}
if (sourcesText) {
result = `${result}\n\n${sourcesText}`;
}
if (username) {
sessions[username].messages.push({ role: "assistant", content: result });
await saveSessions();
}
return result;
} catch (error) {
console.error("Error fetching data:", error);
return "Maaf, terjadi kesalahan saat memproses permintaan Anda.";
}
}
loadSessions().catch(error => console.error("Failed to load sessions:", error));
setInterval(cleanUpSessions, SESSION_TIMEOUT);
// Middleware untuk melacak total permintaan dan RPS
app.use((req, res, next) => {
totalRequests++;
const now = Date.now();
requestTimestamps.push(now);
requestTimestamps = requestTimestamps.filter(timestamp => now - timestamp <= 1000);
next();
});
// Middleware untuk mencatat detail request
app.use((req, res, next) => {
console.log(`Received ${req.method} request for ${req.url}`);
console.log('Request Headers:', req.headers);
if (req.method === 'POST' || req.method === 'PUT') {
console.log('Request Body:', req.body);
}
next();
});
app.post('/', async (req, res) => {
const { content, user, prompt, webSearchMode } = req.body;
if (!content) {
return res.status(400).json({ error: "Content is required" });
}
try {
const result = await blackboxChat(content, user, prompt, webSearchMode);
res.json({ result });
} catch (error) {
console.error("Error:", error.message);
res.status(500).json({ error: "Internal server error" });
}
});
app.get('/api/ai', async (req, res) => {
const { content, prompt, user } = req.query; // Mengambil data dari req.body
if (!content) {
return res.status(400).json({ error: "Content is required" });
}
try {
const result = await blackboxChat(content, user || null, prompt || "Kamu adalah orang Indonesia yang pintar dalam berbahasa Indonesia", true);
res.json({ result });
} catch (error) {
console.error("Error:", error.message);
res.status(500).json({ error: "Internal server error" });
}
});
app.get('/api/stats', (req, res) => {
const seconds = Number(process.uptime());
const d = Math.floor(seconds / (3600 * 24));
const h = Math.floor(seconds % (3600 * 24) / 3600);
const m = Math.floor(seconds % 3600 / 60);
const s = Math.floor(seconds % 60);
const dDisplay = d > 0 ? d + (d == 1 ? " Hari, " : " Hari, ") : "";
const hDisplay = h > 0 ? h + (h == 1 ? " Jam, " : " Jam, ") : "";
const mDisplay = m > 0 ? m + (m == 1 ? " Menit, " : " Menit, ") : "";
const sDisplay = s > 0 ? s + (s == 1 ? " Detik" : " Detik") : "";
const runtime = dDisplay + hDisplay + mDisplay + sDisplay;
const rps = requestTimestamps.length;
res.json({
rps: rps, // Requests Per Second
totalRequests: totalRequests, // Total Requests
runtime: runtime // Runtime in the desired format
});
});
// Middleware ini harus didefinisikan setelah semua rute lainnya
app.use((req, res) => {
res.sendFile(path.join(__dirname, 'index.html'));
});
app.listen(port, () => {
console.log(`Server is listening at port:${port}`);
});
|