Spaces:
Sleeping
Sleeping
Update server.js
Browse files
server.js
CHANGED
@@ -3,60 +3,83 @@ const rateLimit = require('express-rate-limit');
|
|
3 |
const axios = require('axios');
|
4 |
|
5 |
const app = express();
|
6 |
-
app.use(express.json());
|
7 |
|
8 |
const openai_key = process.env.OPENAI_KEY;
|
9 |
|
10 |
const limiter = rateLimit({
|
11 |
-
windowMs: 45 * 1000, //
|
12 |
-
max: 1, // лимит каждые
|
13 |
handler: function (req, res) {
|
14 |
return res.status(429).json({
|
15 |
-
content: '+ошибка+Генерировать
|
16 |
});
|
17 |
},
|
18 |
});
|
19 |
|
20 |
-
// Применение ограничителя скорости перед обработчиком маршрута /generate
|
21 |
app.use('/gen', limiter);
|
22 |
|
23 |
-
const start =
|
24 |
-
|
25 |
-
! Не в коем случае не пиши опасные (например рыба фугу), требующие лицнзии и т.д. рецепты! Только нормальные, правильные и хорошие!
|
26 |
-
|
27 |
-
Ответ должен выглядить ТОЛЬКО так (чтобы потом regexp доставал из него текст):
|
28 |
-
|
29 |
-
"+название+Название рецепта, блюда-название-
|
30 |
-
+время+Примерное время готовки (только время, например: "40 минут", "2 часа" и т.д.)-время-
|
31 |
-
+кат+Категория: На каждый день, Основные блюда, Супы, Десерты и выпечка, Салаты, Несладкая выпечка, Завтраки, Закуски, Напитки, Ресторанные-кат-
|
32 |
-
+ингр+Ингридиенты: В именительном падеже - то есть например: "Яйцо -
|
33 |
-
2 штуки", а не "2 яйца"; Здесь обязательно заменяй ВСЕ новые строки ("
|
34 |
-
") на "_÷_"-ингр-
|
35 |
-
+рец+Рецепт; Здесь обязательно заменяй ВСЕ новые строки ("
|
36 |
-
") на "_÷_"-рец-"
|
37 |
-
Если ты не можешь сгенерировать такой рецепт, то напиши так:
|
38 |
-
"+ошибка+Причина-ошибка-"
|
39 |
-
|
40 |
-
+название+...-название- и другие, это почти как html теги (<div>...</div>)`;
|
41 |
-
|
42 |
-
app.post('/generate', async (req, res) => {
|
43 |
-
res.status(500).json({ content: '+ошибка+❗ Вы используете устаревшую версию АромаАрт. Установите версию 1.3.1 и более.-ошибка-' });
|
44 |
-
});
|
45 |
|
46 |
app.post('/gen', async (req, res) => {
|
47 |
const prompt = req.body.prompt;
|
|
|
48 |
const apiKey = req.body.api || openai_key;
|
|
|
49 |
|
50 |
if (!prompt) {
|
51 |
return res.status(400).json({ error: '❌ Ошибка данн��х, повторите попытку.' });
|
52 |
}
|
53 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
try {
|
55 |
-
const response = await axios.post('https://api.openai.com/v1/chat/completions', {
|
56 |
-
messages: [{'role': 'system', 'content': start}, {'role': 'user', 'content': prompt}],
|
57 |
-
max_tokens: 2000,
|
58 |
-
model: "gpt-3.5-turbo-1106",
|
59 |
-
}, {
|
60 |
headers: {
|
61 |
'Authorization': `Bearer ${apiKey}`,
|
62 |
'Content-Type': 'application/json',
|
@@ -68,7 +91,7 @@ app.post('/gen', async (req, res) => {
|
|
68 |
console.log(content);
|
69 |
res.json({ content });
|
70 |
} else {
|
71 |
-
res.status(500).json({ content: '❌ Не удалось прочитать
|
72 |
}
|
73 |
} catch (error) {
|
74 |
console.error(error);
|
|
|
3 |
const axios = require('axios');
|
4 |
|
5 |
const app = express();
|
6 |
+
app.use(express.json({ limit: '10mb' })); // Увеличение лимита для base64 изображений
|
7 |
|
8 |
const openai_key = process.env.OPENAI_KEY;
|
9 |
|
10 |
const limiter = rateLimit({
|
11 |
+
windowMs: 45 * 1000, // 45 секунд
|
12 |
+
max: 1, // лимит каждые 45 секунд на IP
|
13 |
handler: function (req, res) {
|
14 |
return res.status(429).json({
|
15 |
+
content: '+ошибка+Генерировать можно 1 раз в 45 секунд!-ошибка-'
|
16 |
});
|
17 |
},
|
18 |
});
|
19 |
|
|
|
20 |
app.use('/gen', limiter);
|
21 |
|
22 |
+
const start = "Приветствую тебя! 🌟 Ты - \"Помогатор 1.5\". Твоя миссия - помогать студентам, делая учебный процесс весёлым и интерактивным с помощью стильного общения и эмодзи. 🎓😊 Когда студенты просят помощи, ты подробно объясняешь им материал, используя примеры и аналогии. Но если они просят 'РЕШИТЬ', ты переключаешься в режим решения и предоставляешь точные ответы, делая упор на краткость и точность. 🧮✅ Если тебе присылают фото задания, ты тщательно его анализируешь и решаешь, предоставляя решение в понятной форме и используя дробную черту '/' для записи дробей. 🖼️➗ Твоя цель - не просто дать ответы, но и обучить, однако ты всегда готов решить задачу, когда это необходимо. Приступим? 🚀🌈";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
|
24 |
app.post('/gen', async (req, res) => {
|
25 |
const prompt = req.body.prompt;
|
26 |
+
const img = req.body.img; // Base64 изображение
|
27 |
const apiKey = req.body.api || openai_key;
|
28 |
+
let payload;
|
29 |
|
30 |
if (!prompt) {
|
31 |
return res.status(400).json({ error: '❌ Ошибка данн��х, повторите попытку.' });
|
32 |
}
|
33 |
|
34 |
+
// Создание тела запроса в зависимости от наличия изображения
|
35 |
+
if (img) {
|
36 |
+
// Если изображение предоставлено
|
37 |
+
payload = {
|
38 |
+
"model": "gpt-4-vision-preview",
|
39 |
+
"messages": [
|
40 |
+
{
|
41 |
+
"role": "system",
|
42 |
+
"content": start,
|
43 |
+
},
|
44 |
+
{
|
45 |
+
"role": "user",
|
46 |
+
"content": [
|
47 |
+
{
|
48 |
+
"type": "text",
|
49 |
+
"text": prompt,
|
50 |
+
},
|
51 |
+
{
|
52 |
+
"type": "image_url",
|
53 |
+
"image_url": {
|
54 |
+
"url": `data:image/jpeg;base64,${img}`,
|
55 |
+
"detail": "high",
|
56 |
+
},
|
57 |
+
},
|
58 |
+
],
|
59 |
+
}
|
60 |
+
],
|
61 |
+
"max_tokens": 4095,
|
62 |
+
};
|
63 |
+
} else {
|
64 |
+
// Если изображение не предоставлено
|
65 |
+
payload = {
|
66 |
+
"model": "gpt-4-vision-preview",
|
67 |
+
"messages": [
|
68 |
+
{
|
69 |
+
"role": "system",
|
70 |
+
"content": start,
|
71 |
+
},
|
72 |
+
{
|
73 |
+
"role": "user",
|
74 |
+
"content": prompt,
|
75 |
+
}
|
76 |
+
],
|
77 |
+
"max_tokens": 4095,
|
78 |
+
};
|
79 |
+
}
|
80 |
+
|
81 |
try {
|
82 |
+
const response = await axios.post('https://api.openai.com/v1/chat/completions', payload, {
|
|
|
|
|
|
|
|
|
83 |
headers: {
|
84 |
'Authorization': `Bearer ${apiKey}`,
|
85 |
'Content-Type': 'application/json',
|
|
|
91 |
console.log(content);
|
92 |
res.json({ content });
|
93 |
} else {
|
94 |
+
res.status(500).json({ content: '❌ Не удалось прочитать ответ.' });
|
95 |
}
|
96 |
} catch (error) {
|
97 |
console.error(error);
|