Rooni commited on
Commit
2b60bab
1 Parent(s): f7102bc

Update server.js

Browse files
Files changed (1) hide show
  1. server.js +12 -31
server.js CHANGED
@@ -7,42 +7,18 @@ app.use(express.json());
7
 
8
  const openai_key = process.env.OPENAI_KEY;
9
 
10
- const start = `Ты генератор рецептов. В этом чате, тебе будут присылать названия блюд или описывать их или присылать название категории, а ты должен будешь написать идеальный, понятный, подробный, лёгкий или сложный рецепт со всеми пропорциями, количествами и этапами готовки (этапы готовки должны быть разделены, например 1.1., 1.2., 2.1., 2.2. (Обязательно со звёздочками, это жирный шрифт) С эмодзи.
11
 
12
- Ответ должен выглядить ТОЛЬКО так (чтобы потом regexp его исправил):
13
- "
14
- +название+Название рецепта, блюда-название-
15
- +время+Примерное время готовки (только время, например: "40 минут", "2 часа" и т.д.)-время-
16
-
17
- +кат+Категория: На каждый день, Основные блюда, Супы, Десерты и выпечка, Салаты, Несладкая выпечка, Завтраки, Закуски, Напитки, Ресторанные-кат-
18
-
19
- +ингр+Ингридиенты: В именительном падеже - то есть например: "Яйцо -
20
- 2 штуки", а не "2 яйца"; Здесь обязательно заменяй ВСЕ новые строки ("
21
- ") на "÷"-ингр-
22
-
23
- +рец+Рецепт; Здесь обязательно заменяй ВСЕ новые строки ("
24
- ") на "÷"-рец-
25
-
26
- 📙 Рецепт сгенерирова в приложении АромаАрт (yufi.rf.gd/aromaart)
27
- "
28
-
29
- Если ты не можешь сгенерировать такой рецепт, то напиши так:
30
- "
31
- +ошибка+Причина-ошибка-
32
- "`
33
-
34
- // Определяем лимитер с задержкой 30 секунд на IP
35
  const generateLimiter = rateLimit({
36
  windowMs: 30 * 1000, // 30 секунд
37
  max: 1, // лимит: 1 запрос на IP
38
- handler: function (req, res /*next*/) {
39
  return res.status(429).json({
40
  error: "Слишком много запросов с этого IP, пожалуйста, попробуйте позже. (Лимит 1 генерация в 30 секунд)"
41
  });
42
  }
43
  });
44
 
45
- // Применяем лимитер только к определенному маршруту
46
  app.post('/generate', generateLimiter, async (req, res) => {
47
  const prompt = req.body.prompt;
48
 
@@ -52,18 +28,23 @@ app.post('/generate', generateLimiter, async (req, res) => {
52
 
53
  try {
54
  const response = await axios.post('https://api.openai.com/v1/chat/completions', {
55
- messages: [{'role': 'system', 'content': start}, {'role': 'system', 'content': prompt}],
56
  max_tokens: 2000,
57
- model: "gpt-4-1106-preview",
58
  }, {
59
  headers: {
60
  'Authorization': `Bearer ${openai_key}`,
61
  'Content-Type': 'application/json',
62
  },
63
  });
64
- const data = json.loads(response.text)
65
- console.log(data['choices'][0]['message']['content'].strip());
66
- res.json(data['choices'][0]['message']['content'].strip());
 
 
 
 
 
67
  } catch (error) {
68
  console.error(error);
69
  res.status(500).json({ error: 'Произошла ошибка сервера при генерации.' });
 
7
 
8
  const openai_key = process.env.OPENAI_KEY;
9
 
10
+ const start = `Ты генератор рецептов. В этом чате, тебе будут присылать названия блюд или описывать их или присылать название категории, а ты должен будешь написать идеальный, понятный, подробный, лёгкий или сложный рецепт со всеми пропорциями, количествами и этапами готовки (этапы готовки должны быть разделены, например 1.1., 1.2., 2.1., 2.2. (Обязательно со звёздочками, это жирный шрифт) С эмодзи.`;
11
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  const generateLimiter = rateLimit({
13
  windowMs: 30 * 1000, // 30 секунд
14
  max: 1, // лимит: 1 запрос на IP
15
+ handler: function (req, res) {
16
  return res.status(429).json({
17
  error: "Слишком много запросов с этого IP, пожалуйста, попробуйте позже. (Лимит 1 генерация в 30 секунд)"
18
  });
19
  }
20
  });
21
 
 
22
  app.post('/generate', generateLimiter, async (req, res) => {
23
  const prompt = req.body.prompt;
24
 
 
28
 
29
  try {
30
  const response = await axios.post('https://api.openai.com/v1/chat/completions', {
31
+ messages: [{'role': 'system', 'content': start}, {'role': 'user', 'content': prompt}],
32
  max_tokens: 2000,
33
+ model: "gpt-3.5-turbo",
34
  }, {
35
  headers: {
36
  'Authorization': `Bearer ${openai_key}`,
37
  'Content-Type': 'application/json',
38
  },
39
  });
40
+
41
+ if (response.data.choices && response.data.choices.length > 0 && response.data.choices[0].message) {
42
+ const content = response.data.choices[0].message.content.trim();
43
+ console.log(content);
44
+ res.json({ content });
45
+ } else {
46
+ res.status(500).json({ error: 'OpenAI не вернул ожидаемых данных.' });
47
+ }
48
  } catch (error) {
49
  console.error(error);
50
  res.status(500).json({ error: 'Произошла ошибка сервера при генерации.' });