Spaces:
Sleeping
Sleeping
File size: 2,964 Bytes
abed4cc 5d38af1 e6227e8 5669f71 abed4cc 5d38af1 2b785ca df04541 9f5172e 587da90 4bbe8d3 49050b3 4bbe8d3 cc424de 4bbe8d3 9f5172e 49050b3 5743387 587da90 e25c36c 0d0b67b f97d87a 5743387 77079b7 5db491c 9f5172e a97fdfd 5743387 b93decc 5743387 587da90 5d38af1 5743387 5db491c a41e935 5db491c 55cfd98 5db491c f67ae85 52a93ef f67ae85 5743387 3792746 d01b1a6 abed4cc e0c2616 180c75f |
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 |
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: 8, // лимит каждые 60 секунд на IP
handler: function (req, res) {
return res.status(429).json("wait");
},
});
// Применение ограничителя скорости перед обработчиком маршрута /pl и /crebeta
app.use('/pl', limiter);
const start = `${process.env.start}`;
app.post('/update', async (req, res) => {
res.json({ content: `{"error":"", "title":"Требуется обновление", "text":"Текущая версия приложения устарела. Установите новую из нашего телеграм канала: @yufi_ru", "okb":"Обновить", "oklink":"https://t.me/yufi_ru", "cancelable":"false"}` });
});
app.post('/pl', async (req, res) => {
const prompt = req.body.prompt;
const lang = req.body.lang || "ru";
const chatid = req.body.chatid || "";
const apiKey = req.body.api || getRandomApiKey();
if (!prompt) {
return res.status(400).json(`Нет запроса! :${prompt}`); // Не удалось принять данные
}
try {
const response = await axios.post('https://openai-gemini-iota.vercel.app/v1/chat/completions', {
messages: [{'role': 'system', 'content': `Ты врач ${chatid}. ${start}. Отвечай на языке: ${lang}`}],
max_tokens: 4000,
temperature: 0.3,
model: "gemini-1.5-pro-002",
presence_penalty: 0.2,
}, {
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.trim();
console.info(response.data.choices.trim());
res.json({ content });
} else {
res.json({ content: `{"error":"", "title":"Ошибка", "text":"Произошла ошибка на сервере. (Ошибка прочтения)", "okb":"Ок", "oklink":"", "cancelable":"true"}` });
}
} catch (error) {
console.error(error);
res.json({ content: `{"error":"", "title":"Ошибка", "text":"Произошла ошибка на сервере. (Ошибка при генерации)", "okb":"Ок", "oklink":"", "cancelable":"true"}` });
}
});
const port = 7860;
app.listen(port, () => {
console.log(`API сервер запущен на порту ${port}`);
});
|