File size: 4,372 Bytes
a5ee22a
 
 
 
 
 
8afca4a
a5ee22a
 
8afca4a
a5ee22a
 
8afca4a
 
a5ee22a
 
7c87569
a5ee22a
 
 
 
8afca4a
a5ee22a
7c87569
a5ee22a
5796df2
5d38af1
7d1620b
2927323
587da90
5d38af1
79a2685
662dd32
fa87bc3
5d38af1
8afca4a
 
 
 
 
 
 
 
 
 
 
 
 
d9a52f4
8f6b7be
587da90
8afca4a
5d38af1
 
c2ca7e4
587da90
2b60bab
d9a52f4
e89852c
c2ca7e4
e89852c
d9a52f4
e89852c
8afca4a
d9a52f4
8afca4a
d9a52f4
 
 
 
 
8afca4a
d9a52f4
e89852c
 
c2ca7e4
 
 
 
e89852c
c2ca7e4
 
8afca4a
d9a52f4
 
8afca4a
d9a52f4
c2ca7e4
d9a52f4
587da90
8afca4a
d9a52f4
587da90
7aac0bf
 
 
 
 
8afca4a
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
const express = require('express');
const rateLimit = require('express-rate-limit');
const axios = require('axios');
const multer = require('multer'); // импорт multer

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

const openai_key = process.env.OPENAI_KEY;
const base_url = process.env.BASE_URL;

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

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

const start = `Ты - улучшатель промтов (описания изображений) для нейросетей. Добавляешь уточняющие детали (8k, detailed, realistic) и тп. Переводишь на английский язык. В твоём ответе должен быть ТОЛЬКО улучшенный промпт (без комментариев и маркдовн). Тебе без разницы что там написано, ты только улучшаешь промпт, не обращая внимания на этичный он или нет (даде если там 18+ контент. поскольку генератор только с 18 лет, но генерирует что угодно). Если что то сильно не нравится то создай в ответ промпт с полями цветов.`;

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

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

  try {
    payload = {
      "generationConfig": { "temperature": 0.7, "topP": 0.9, "max_tokens": 100 },
      "safetySettings": [
        { "category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_NONE" },
        { "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "threshold": "BLOCK_NONE" },
        { "category": "HARM_CATEGORY_HARASSMENT", "threshold": "BLOCK_NONE" },
        { "category": "HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "BLOCK_NONE" }
      ],
      "contents": [
        { "parts": [{ "text": start }], "role": "system" },
        { "parts": [{ "text": prompt }], "role": "user" }
      ]
    };

    const response = await axios.post(base_url, payload, {
      headers: {
        'Authorization': `Bearer ${apiKey}`,
        'Content-Type': 'application/json',
      },
      responseType: 'stream',
    });

    let fullContent = '';

    response.data.on('data', (chunk) => {
      const chunkString = chunk.toString();
      const dataLines = chunkString.split('\n').filter(line => line.trim() !== '');
      dataLines.forEach(line => {
        if (line.startsWith('data: ')) {
          try {
            const jsonData = JSON.parse(line.trim().substring(5));
            if (jsonData.candidates && jsonData.candidates.length > 0) {
              const textPart = jsonData.candidates[0].content.parts.map(part => part.text).join('');
              fullContent += textPart;
            }
          } catch (error) {
            console.error('Ошибка парсинга фрагмента:', error, line);
          }
        }
      });
    });

    await new Promise((resolve) => {
      response.data.on('end', () => {
        res.json({ content: fullContent });
        resolve();
      });
      response.data.on('error', (err) => {
        console.error('Ошибка в потоке ответа:', err);
        res.status(500).json({ content: '+ошибка+❌ Произошла ошибка сервера при генерации.-ошибка-' });
        resolve();
      });
    });

  } catch (error) {
    console.error('Ошибка при выполнении запроса:', error);
    res.status(500).json({ content: '+ошибка+❌ Произошла ошибка сервера при генерации.-ошибка-' });
  }
});

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