Spaces:
Sleeping
Sleeping
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}`);
});
|