Rooni commited on
Commit
2927323
1 Parent(s): e542f78

Update server.js

Browse files
Files changed (1) hide show
  1. server.js +56 -33
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, // 30 секунд
12
- max: 1, // лимит каждые 30 секунд на IP
13
  handler: function (req, res) {
14
  return res.status(429).json({
15
- content: '+ошибка+Генерировать рецепт можно 1 раз в 45 секунд!-ошибка-'
16
  });
17
  },
18
  });
19
 
20
- // Применение ограничителя скорости перед обработчиком маршрута /generate
21
  app.use('/gen', limiter);
22
 
23
- const start = `Ты генератор рецептов. В этом чате, тебе будут присылать названия блюд или описывать их или присылать название категории, а ты должен будешь написать идеальный, понятный, подробный, лёгкий или сложный рецепт со всеми пропорциями, количествами и этапами готовки (этапы готовки должны быть разделены, например *1.1.*, *1.2.*, *2.1.*, *2.2.* (Обязательно со звёздочками, это жирный шрифт) С эмодзи.
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);