nirkyy commited on
Commit
1d7766f
·
verified ·
1 Parent(s): ad32e6f

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +29 -43
Dockerfile CHANGED
@@ -65,7 +65,7 @@ const parseApiResponse = (data) => {
65
  return { answer: data, sources: [] };
66
  };
67
 
68
- const createPayload = (prompt, system, web, asyncMode = false) => {
69
  const newUserMessage = { role: 'user', content: prompt, id: generateId() };
70
  const messagesForPayload = [newUserMessage];
71
 
@@ -110,13 +110,7 @@ const createPayload = (prompt, system, web, asyncMode = false) => {
110
  domains: null,
111
  vscodeClient: false,
112
  codeInterpreterMode: false,
113
- customProfile: {
114
- name: '',
115
- occupation: '',
116
- traits: [],
117
- additionalInfo: '',
118
- enableNewChats: false,
119
- },
120
  webSearchModeOption,
121
  session: {
122
  user: randomUser,
@@ -124,17 +118,12 @@ const createPayload = (prompt, system, web, asyncMode = false) => {
124
  isNewUser: Math.random() < 0.1,
125
  },
126
  isPremium: false,
127
- subscriptionCache: {
128
- status: 'FREE',
129
- expiryTimestamp: null,
130
- lastChecked: Date.now(),
131
- isTrialSubscription: false,
132
- },
133
  beastMode: false,
134
  reasoningMode: false,
135
  designerMode: false,
136
  workspaceId: '',
137
- asyncMode,
138
  integrations: {},
139
  isTaskPersistent: false,
140
  selectedElement: null,
@@ -146,23 +135,21 @@ app.use(express.json());
146
 
147
  const chatApiUrl = 'https://www.blackbox.ai/api/chat';
148
  const headers = {
149
- Accept: '*/*',
150
  'Content-Type': 'application/json',
151
- Origin: 'https://www.blackbox.ai',
152
- Referer: 'https://www.blackbox.ai/',
153
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36',
154
  };
155
 
156
  app.post('/api/generate', async (req, res) => {
157
  const { prompt, system, web } = req.body;
158
- if (!prompt) {
159
- return res.status(400).json({ error: 'Request body harus menyertakan "prompt"' });
160
- }
161
  try {
162
- const payload = createPayload(prompt, system, web, false);
163
  const chatResponse = await axios.post(chatApiUrl, payload, { headers });
164
- const assistantRawResponse = chatResponse.data;
165
- const parsedResult = parseApiResponse(assistantRawResponse);
166
  res.send(parsedResult.answer);
167
  } catch (error) {
168
  console.error("Error pada /api/generate:", error.message);
@@ -170,36 +157,35 @@ app.post('/api/generate', async (req, res) => {
170
  }
171
  });
172
 
 
 
 
 
 
 
 
 
 
173
  app.post('/api/stream', async (req, res) => {
174
  const { prompt, system, web } = req.body;
175
- if (!prompt) {
176
- return res.status(400).json({ error: 'Request body harus menyertakan "prompt"' });
177
- }
178
  try {
179
- const payload = createPayload(prompt, system, web, true);
180
- const chatResponse = await axios.post(chatApiUrl, payload, {
181
- headers,
182
- responseType: 'stream'
183
- });
184
 
185
  res.setHeader('Content-Type', 'text/plain; charset=utf-8');
186
  res.setHeader('Cache-Control', 'no-cache');
187
  res.setHeader('Connection', 'keep-alive');
188
-
189
- chatResponse.data.pipe(res);
190
 
191
- chatResponse.data.on('error', (err) => {
192
- console.error("Stream error:", err.message);
193
- if (!res.headersSent) {
194
- res.status(500).send("Terjadi kesalahan pada stream.");
195
- }
196
- res.end();
197
- });
198
 
199
  } catch (error) {
200
  console.error("Error pada /api/stream:", error.message);
201
  if (!res.headersSent) {
202
- res.status(500).send("Terjadi kesalahan pada server saat memulai stream.");
203
  }
204
  }
205
  });
@@ -208,7 +194,7 @@ app.listen(PORT, () => {
208
  console.log(`Server berjalan di http://localhost:${PORT}`);
209
  console.log('Endpoints tersedia:');
210
  console.log(' - POST /api/generate (non-streaming)');
211
- console.log(' - POST /api/stream (streaming)');
212
  });
213
  EOF
214
 
 
65
  return { answer: data, sources: [] };
66
  };
67
 
68
+ const createPayload = (prompt, system, web) => {
69
  const newUserMessage = { role: 'user', content: prompt, id: generateId() };
70
  const messagesForPayload = [newUserMessage];
71
 
 
110
  domains: null,
111
  vscodeClient: false,
112
  codeInterpreterMode: false,
113
+ customProfile: { name: '', occupation: '', traits: [], additionalInfo: '', enableNewChats: false },
 
 
 
 
 
 
114
  webSearchModeOption,
115
  session: {
116
  user: randomUser,
 
118
  isNewUser: Math.random() < 0.1,
119
  },
120
  isPremium: false,
121
+ subscriptionCache: { status: 'FREE', expiryTimestamp: null, lastChecked: Date.now(), isTrialSubscription: false },
 
 
 
 
 
122
  beastMode: false,
123
  reasoningMode: false,
124
  designerMode: false,
125
  workspaceId: '',
126
+ asyncMode: false,
127
  integrations: {},
128
  isTaskPersistent: false,
129
  selectedElement: null,
 
135
 
136
  const chatApiUrl = 'https://www.blackbox.ai/api/chat';
137
  const headers = {
138
+ 'Accept': '*/*',
139
  'Content-Type': 'application/json',
140
+ 'Origin': 'https://www.blackbox.ai',
141
+ 'Referer': 'https://www.blackbox.ai/',
142
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36',
143
  };
144
 
145
  app.post('/api/generate', async (req, res) => {
146
  const { prompt, system, web } = req.body;
147
+ if (!prompt) return res.status(400).json({ error: 'Request body harus menyertakan "prompt"' });
148
+
 
149
  try {
150
+ const payload = createPayload(prompt, system, web);
151
  const chatResponse = await axios.post(chatApiUrl, payload, { headers });
152
+ const parsedResult = parseApiResponse(chatResponse.data);
 
153
  res.send(parsedResult.answer);
154
  } catch (error) {
155
  console.error("Error pada /api/generate:", error.message);
 
157
  }
158
  });
159
 
160
+ const streamResponseByWord = async (res, text, delay = 50) => {
161
+ const words = text.split(' ');
162
+ for (const word of words) {
163
+ res.write(word + ' ');
164
+ await new Promise(resolve => setTimeout(resolve, delay));
165
+ }
166
+ res.end();
167
+ };
168
+
169
  app.post('/api/stream', async (req, res) => {
170
  const { prompt, system, web } = req.body;
171
+ if (!prompt) return res.status(400).json({ error: 'Request body harus menyertakan "prompt"' });
172
+
 
173
  try {
174
+ const payload = createPayload(prompt, system, web);
175
+ const chatResponse = await axios.post(chatApiUrl, payload, { headers });
176
+ const parsedResult = parseApiResponse(chatResponse.data);
177
+ const fullAnswer = parsedResult.answer;
 
178
 
179
  res.setHeader('Content-Type', 'text/plain; charset=utf-8');
180
  res.setHeader('Cache-Control', 'no-cache');
181
  res.setHeader('Connection', 'keep-alive');
 
 
182
 
183
+ await streamResponseByWord(res, fullAnswer);
 
 
 
 
 
 
184
 
185
  } catch (error) {
186
  console.error("Error pada /api/stream:", error.message);
187
  if (!res.headersSent) {
188
+ res.status(500).send("Terjadi kesalahan pada server saat memproses permintaan.");
189
  }
190
  }
191
  });
 
194
  console.log(`Server berjalan di http://localhost:${PORT}`);
195
  console.log('Endpoints tersedia:');
196
  console.log(' - POST /api/generate (non-streaming)');
197
+ console.log(' - POST /api/stream (simulated streaming)');
198
  });
199
  EOF
200