File size: 4,239 Bytes
abed4cc
5d38af1
e6227e8
5669f71
abed4cc
2927323
5d38af1
587da90
 
4bbe8d3
2927323
 
4bbe8d3
 
2927323
4bbe8d3
 
 
 
e542f78
4bbe8d3
2927323
e542f78
 
5d38af1
2927323
7d1620b
2927323
587da90
5d38af1
10fbdf7
5d38af1
587da90
2927323
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
921bc88
 
 
2927323
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5d38af1
2927323
587da90
7d1620b
5d38af1
 
587da90
2b60bab
 
 
 
 
 
2927323
2b60bab
587da90
5d38af1
ea5d932
587da90
 
 
abed4cc
 
5d38af1
abed4cc
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
const express = require('express');
const rateLimit = require('express-rate-limit');
const axios = require('axios');

const app = express();
app.use(express.json({ limit: '10mb' })); // Увеличение лимита для base64 изображений

const openai_key = process.env.OPENAI_KEY;

const limiter = rateLimit({
  windowMs: 45 * 1000, // 45 секунд
  max: 1, // лимит каждые 45 секунд на IP
  handler: function (req, res) {
    return res.status(429).json({
      content: '+ошибка+Генерировать можно 1 раз в 45 секунд!-ошибка-'
    });
  },
});

app.use('/gen', limiter);

const start = "Приветствую тебя! 🌟 Ты - \"Помогатор 1.5\". Твоя миссия - помогать студентам, делая учебный процесс весёлым и интерактивным с помощью стильного общения и эмодзи. 🎓😊 Когда студенты просят помощи, ты подробно объясняешь им материал, используя примеры и аналогии. Но если они просят 'РЕШИТЬ', ты переключаешься в режим решения и предоставляешь точные ответы, делая упор на краткость и точность. 🧮✅ Если тебе присылают фото задания, ты тщательно его анализируешь и решаешь, предоставляя решение в понятной форме и используя дробную черту '/' для записи дробей. 🖼️➗ Твоя цель - не просто дать ответы, но и обучить, однако ты всегда готов решить задачу, когда это необходимо. Приступим? 🚀🌈";

app.post('/gen', async (req, res) => {
  const prompt = req.body.prompt;
  const img = req.body.img; // Base64 изображение
  const apiKey = req.body.api || openai_key;
  let payload;

  if (!prompt) {
    return res.status(400).json({ error: '❌ Ошибка данных, повторите попытку.' });
  }

  // Создание тела запроса в зависимости от наличия изображения
  if (img) {
    // Если изображение предоставлено
    payload = {
      "model": "gpt-4-vision-preview",
      "messages": [
        {
          "role": "system",
          "content": start,
        },
        {
          "role": "user",
          "content": [
            {
              "type": "text",
              "text": prompt,
            },
            {
              "type": "image_url",
              "image_url": {
                "url": `data:image/jpeg;base64,${img}`,
                "detail": "high",
              },
            },
          ],
        }
      ],
      "max_tokens": 4095,
    };
  } else {
    // Если изображение не предоставлено
    payload = {
      "model": "gpt-4-vision-preview",
      "messages": [
        {
          "role": "system",
          "content": start,
        },
        {
          "role": "user",
          "content": prompt,
        }
      ],
      "max_tokens": 4095,
    };
  }

  try {
    const response = await axios.post('https://api.openai.com/v1/chat/completions', payload, {
      headers: {
        'Authorization': `Bearer ${apiKey}`,
        'Content-Type': 'application/json',
      },
    });

    if (response.data.choices && response.data.choices.length > 0 && response.data.choices[0].message) {
      const content = response.data.choices[0].message.content.trim();
      console.log(content);
      res.json({ content });
    } else {
      res.status(500).json({ content: '❌ Не удалось прочитать ответ.' });
    }
  } catch (error) {
    console.error(error);
    res.status(500).json({ content: '❌ Произошла ошибка сервера при генерации.' });
  }
});

const port = 7860;
app.listen(port, () => {
  console.log(`API сервер запущен на порту ${port}`);
});