File size: 6,906 Bytes
abed4cc
5d38af1
e6227e8
ec48534
ec9fc01
5669f71
abed4cc
2927323
5d38af1
587da90
5491496
d59cba8
 
 
 
 
587da90
4bbe8d3
34f6a21
 
4bbe8d3
79a2685
34f6a21
4bbe8d3
 
 
 
dd171b1
60d7c6b
4bbe8d3
205949e
b3f06bc
e542f78
dd171b1
6c8079a
d87b712
cb7383c
d59cba8
5d38af1
d59cba8
7d1620b
2927323
587da90
5d38af1
79a2685
662dd32
fa87bc3
662dd32
79a2685
5d38af1
587da90
2927323
d59cba8
 
2927323
eedf466
2927323
205949e
 
 
 
 
 
 
 
2927323
 
 
 
 
205949e
2927323
 
 
b39ccb4
d59cba8
b39ccb4
2927323
 
 
 
 
 
 
 
eedf466
2927323
 
fa87bc3
2927323
 
 
 
 
 
 
 
 
 
5d38af1
8f6b7be
587da90
7d1620b
5d38af1
 
587da90
2b60bab
 
 
 
 
 
79a2685
2b60bab
587da90
5d38af1
79a2685
587da90
 
 
ec48534
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
const express = require('express');
const rateLimit = require('express-rate-limit');
const axios = require('axios');
const multer = require('multer'); // Импорт multer
const ImageKit = require('imagekit-javascript'); // Импорт ImageKit

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

const openai_key = process.env.OPENAI_KEY;
const base_url = process.env.BASE_URL;
const imagekit = new ImageKit({
  publicKey: process.env.IMAGEKIT_PUBLIC_KEY,
  privateKey: process.env.IMAGEKIT_PRIVATE_KEY,
  urlEndpoint: process.env.IMAGEKIT_URL_ENDPOINT,
});

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

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

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

app.post('/gener', async (req, res) => {
  return res.json({ content: '+ошибка+❗ Проект закрыт и больше не функционирует из-за отсутствия финансирования!-ошибка-' });
});

app.post('/gen', async (req, res) => {
  const prompt = req.body.prompt;
  const imageUrl = req.body.imageUrl;
  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 (imageUrl) {
    // Если изображение предоставляется по URL
    payload = {
      "model": "gpt-4-vision-preview",
      "messages": [
        {
          "role": "user",
          "content": start,
        },
        {
          "role": "assistant",
          "content": "Хорошо 😊",
        },
        {
          "role": "user",
          "content": [
            {
              "type": "text",
              "text": prompt,
            },
            {
              "type": "image_url",
              "image_url": {
                "url": imageUrl,
              },
            },
          ],
        }
      ],
    };
  } else {
    // Если изображение не предоставлено
    payload = {
      "model": "gpt-4-1106-preview",
      "messages": [
        {
          "role": "user",
          "content": start,
        },
        {
          "role": "user",
          "content": prompt,
        }
      ],
    };
  }

  try {
    const response = await axios.post(base_url, 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: '+ошибка+❌ Произошла ошибка сервера при генерации.-ошибка-' });
  }
});

app.post('/translate', async (req, res) => {
  const prompt = req.body.prompt;
  const lang = req.body.lang;
  const apiKey = req.body.api || openai_key;
  let payload;

  if (!prompt) {
    return res.json({ content: '+ошибка+❌ Ошибка данных, повторите попытку.-ошибка-' });
  }
  payload = {
      "model": "gpt-3.5-turbo-16k",
      "messages": [
        {
          "role": "system",
          "content": starttransl,
        },
        {
          "role": "user",
          "content": `На ${lang}: ${prompt}`,
        }
      ],
      "max_tokens": 9000,
    };

  try {
    const response = await axios.post(base_url, 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}`);
});