File size: 4,461 Bytes
abed4cc 5d38af1 e6227e8 5669f71 abed4cc 5d38af1 2b785ca df04541 9f5172e 587da90 4bbe8d3 1cc4d60 4bbe8d3 1cc4d60 4bbe8d3 1cc4d60 9f5172e a97fdfd 5743387 f16210d 587da90 e25c36c 0d0b67b f97d87a 1cc4d60 6771456 587da90 5d38af1 1cc4d60 a97fdfd 1cc4d60 163bf37 332f604 587da90 2b60bab 5743387 1cc4d60 5743387 1cc4d60 5743387 1cc4d60 efaa50c 1cc4d60 efaa50c e25c36c efaa50c 1cc4d60 d01b1a6 587da90 3792746 1cc4d60 3792746 1cc4d60 5743387 1cc4d60 3792746 abed4cc e0c2616 1cc4d60 |
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 |
const express = require('express');
const rateLimit = require('express-rate-limit');
const axios = require('axios');
const app = express();
app.use(express.json());
// Доверие к одному прокси (например, Heroku)
app.set('trust proxy', 1);
const openai_keys = process.env.OPENAI_KEY.split(',');
function getRandomApiKey() {
const randomIndex = Math.floor(Math.random() * openai_keys.length);
return openai_keys[randomIndex];
}
const limiter = rateLimit({
windowMs: 60 * 1000, // 60 секунд
max: 15, // лимит каждые 60 секунд на IP
handler: function (req, res) {
return res.status(429).json({ content: "wait" });
},
});
// Применение ограничителя скорости перед обработчиком маршрута /pl и /plbeta
app.use('/pl', limiter);
app.use('/plbeta', limiter);
const start = `${process.env.start}`;
const startconnect = `${process.env.startconnect}`;
app.post('/update', async (req, res) => {
res.json({ content: `{"error":"", "title":"Требуется обновление", "text":"Текущая версия приложения устарела. Установите новую из нашего телеграм канала: @yufi_ru", "okb":"Обновить", "oklink":"https://t.me/yufi_ru", "cancelable":"false"}` });
});
async function sendRequest(prompt, prs) {
const firstUrl = 'https://text.pollinations.ai/openai';
const secondUrl = 'https://text.pollinations.ai/openai';
try {
const response = await axios.post(firstUrl, {
messages: [{'role': 'system', 'content': prs}, {'role': 'user', 'content': prompt}],
max_tokens: 1200,
temperature: 0.19,
}, {
headers: {
'Content-Type': 'application/json',
},
});
if (response.data.choices && response.data.choices.length > 0 && response.data.choices[0].message) {
return response.data.choices[0].message.content.trim();
} else {
throw new Error("Ошибка прочтения на первой ссылке");
}
} catch (error) {
console.error("Первая попытка не удалась:", error);
// Попытка с другой ссылкой
try {
const response = await axios.post(secondUrl, {
messages: [{'role': 'system', 'content': prs}, {'role': 'user', 'content': prompt}],
max_tokens: 1200,
temperature: 0.19,
}, {
headers: {
'Content-Type': 'application/json',
},
});
if (response.data.choices && response.data.choices.length > 0 && response.data.choices[0].message) {
return response.data.choices[0].message.content.trim();
} else {
throw new Error("Ошибка прочтения на второй ссылке");
}
} catch (secondError) {
console.error("Вторая попытка не удалась:", secondError);
throw new Error("Ошибка при генерации");
}
}
}
app.post('/pl', async (req, res) => {
const prompt = req.body.prompt;
let prs;
if (req.body.mode === "1") {
prs = start;
} else {
prs = startconnect;
}
if (!prompt) {
return res.status(400).json({ content: "wait" }); // Не удалось принять данные
}
try {
const content = await sendRequest(prompt, prs);
res.json({ content });
} catch (error) {
res.json({ content: `{"error":"", "title":"Ошибка", "text":"Произошла ошибка на сервере. (${error.message})", "okb":"Ок", "oklink":"", "cancelable":"true"}` });
}
});
app.post('/plbeta', async (req, res) => {
const prompt = req.body.prompt;
let prs;
if (req.body.mode === "1") {
prs = start;
} else {
prs = startconnect;
}
if (!prompt) {
return res.status(400).json({ content: "wait" }); // Не удалось принять данные
}
try {
const content = await sendRequest(prompt, prs);
console.log(`\n---\nПользователь: ${prompt}\n Ответ:\n ${content}`);
res.json({ content });
} catch (error) {
res.json({ content: `{"error":"", "title":"Ошибка", "text":"Произошла ошибка на сервере. (${error.message})", "okb":"Ок", "oklink":"", "cancelable":"true"}` });
}
});
const port = 7860;
app.listen(port, () => {
console.log(`API сервер запущен на порту ${port}`);
}); |