File size: 4,665 Bytes
a5ee22a
 
 
 
 
 
8f4ee3c
a5ee22a
 
7c87569
a5ee22a
 
7c87569
a5ee22a
 
 
7c87569
a5ee22a
 
 
 
7c87569
a5ee22a
7c87569
a5ee22a
5796df2
5d38af1
7c87569
7d1620b
2927323
587da90
5d38af1
79a2685
662dd32
fa87bc3
7c87569
587da90
5d38af1
d9a52f4
7c87569
d9a52f4
 
 
 
 
 
 
7c87569
d9a52f4
 
 
232e958
d9a52f4
8f6b7be
587da90
d9a52f4
5d38af1
 
c2ca7e4
587da90
2b60bab
d9a52f4
e89852c
c2ca7e4
e89852c
d9a52f4
 
e89852c
d9a52f4
 
 
 
 
 
 
 
 
 
 
e89852c
 
c2ca7e4
 
 
 
e89852c
c2ca7e4
 
d9a52f4
 
 
 
 
c2ca7e4
d9a52f4
587da90
5d38af1
d9a52f4
587da90
7aac0bf
 
 
 
 
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 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, // 40 секунд
  max: 1, // лимит каждые 40 секунд на 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 img = req.body.img; // Проверка на существование файла перед доступом к его пути
  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: {
        'x-goog-api-key': `${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 {
            // Парсим строку как JSON
            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}`);
});