File size: 5,565 Bytes
abed4cc
5d38af1
e6227e8
5669f71
abed4cc
2927323
5d38af1
587da90
 
4bbe8d3
604e08e
2927323
4bbe8d3
79a2685
cb7383c
4bbe8d3
 
 
 
e542f78
4bbe8d3
4b353ac
e542f78
cb7383c
 
 
 
e542f78
5d38af1
2927323
7d1620b
2927323
587da90
5d38af1
79a2685
662dd32
 
 
79a2685
5d38af1
587da90
2927323
 
 
 
eedf466
2927323
 
 
 
 
 
 
 
 
 
 
 
 
 
921bc88
 
 
2927323
 
 
 
 
 
 
 
 
 
eedf466
2927323
 
 
 
 
 
 
 
 
 
 
 
 
 
5d38af1
2927323
587da90
7d1620b
5d38af1
 
587da90
2b60bab
 
 
 
 
 
79a2685
2b60bab
587da90
5d38af1
79a2685
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
106
107
108
109
110
111
112
113
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: 80 * 1000, // 45 секунд
  max: 1, // лимит каждые 45 секунд на IP
  handler: function (req, res) {
    return res.json({
      content: '+ошибка+Генерировать можно только 1 раз в 80 секунд! YUFI-ошибка-'
    });
  },
});

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

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

app.post('/gener', async (req, res) => {
  return res.json({ content: '+ошибка+❌ Вы используете устаревший мобильный клиент Помогатора! Обновить до версии 1.1.6 можете здесь: https://smartlearn.rf.gd/pomogator-d-ошибка-' });
}

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.json({ content: '+ошибка+❌ Ошибка данных, повторите попытку.-ошибка-' });
  }
  
  if (prompt.replace(/[\s\n]/g, '').length > 250) {
    return res.json({ content: '+ошибка+❌ Максимум символов: 250-ошибка-' });
  }

  // Создание тела запроса в зависимости от наличия изображения
  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-1106-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.json({ content: '+ошибка+❌ Не удалось прочитать ответ.-ошибка-' });
    }
  } catch (error) {
    console.error(error);
    res.json({ content: '+ошибка+❌ Произошла ошибка сервера при генерации.-ошибка-' });
  }
});

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