Spaces:
Running
Running
File size: 4,501 Bytes
abed4cc 5d38af1 e6227e8 5669f71 abed4cc 5d38af1 587da90 4bbe8d3 4b443e2 4bbe8d3 4b443e2 4bbe8d3 e542f78 4bbe8d3 12ec664 16a3f07 a3fc701 10fbdf7 a3fc701 16a3f07 a3fc701 16a3f07 a3fc701 16a3f07 587da90 4bbe8d3 e542f78 5d38af1 7d1620b 587da90 5d38af1 10fbdf7 5d38af1 587da90 5d38af1 a726a71 2b60bab 7135754 a726a71 587da90 7d1620b 5d38af1 587da90 2b60bab ea5d932 2b60bab 587da90 5d38af1 ea5d932 587da90 abed4cc 5d38af1 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 |
const express = require('express');
const rateLimit = require('express-rate-limit');
const axios = require('axios');
const app = express();
app.use(express.json());
const openai_key = process.env.OPENAI_KEY;
const limiter = rateLimit({
windowMs: 45 * 1000, // 30 секунд
max: 1, // лимит каждые 30 секунд на IP
handler: function (req, res) {
return res.status(429).json({
content: '+ошибка+Генерировать рецепт можно 1 раз в 45 секунд!-ошибка-'
});
},
});
// Применение ограничителя скорости перед обработчиком маршрута /generate
app.use('/gen', limiter);
const start = `Ты генератор рецептов. В этом чате, тебе будут присылать названия блюд или описывать их или присылать название категории, а ты должен будешь написать идеальный, понятный, подробный, лёгкий или сложный рецепт со всеми пропорциями, количествами и этапами готовки (этапы готовки должны быть разделены, например *1.1.*, *1.2.*, *2.1.*, *2.2.* (Обязательно со звёздочками, это жирный шрифт) С эмодзи.
! Не в коем случае не пиши опасные (например рыба фугу), требующие лицнзии и т.д. рецепты! Только нормальные, правильные и хорошие!
Ответ должен выглядить ТОЛЬКО так (чтобы потом regexp доставал из него текст):
"+название+Название рецепта, блюда-название-
+время+Примерное время готовки (только время, например: "40 минут", "2 часа" и т.д.)-время-
+кат+Категория: На каждый день, Основные блюда, Супы, Десерты и выпечка, Салаты, Несладкая выпечка, Завтраки, Закуски, Напитки, Ресторанные-кат-
+ингр+Ингридиенты: В именительном падеже - то есть например: "Яйцо -
2 штуки", а не "2 яйца"; Здесь обязательно заменяй ВСЕ новые строки ("
") на "_÷_"-ингр-
+рец+Рецепт; Здесь обязательно заменяй ВСЕ новые строки ("
") на "_÷_"-рец-"
Если ты не можешь сгенерировать такой рецепт, то напиши так:
"+ошибка+Причина-ошибка-"
+название+...-название- и другие, это почти как html теги (<div>...</div>)`;
app.post('/generate', async (req, res) => {
res.status(500).json({ content: '+ошибка+❗ Вы используете устаревшую версию АромаАрт. Установите версию 1.3.1 и более.-ошибка-' });
});
app.post('/gen', async (req, res) => {
const prompt = req.body.prompt;
const apiKey = req.body.api || openai_key;
if (!prompt) {
return res.status(400).json({ error: '❌ Ошибка данных, повторите попытку.' });
}
try {
const response = await axios.post('https://geminiyufi.vercel.app/v1/chat/completions', {
messages: [{'role': 'system', 'content': start}, {'role': 'user', 'content': prompt}],
max_tokens: 2000,
model: "gemini-1.5-pro-latest",
}, {
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[0].message.content.trim();
console.log(content);
res.json({ content });
} else {
res.status(500).json({ content: '❌ Не удалось прочитать рецепт.' });
}
} catch (error) {
console.error(error);
res.status(500).json({ content: '❌ Произошла ошибка сервера при генерации.' });
}
});
const port = 7860;
app.listen(port, () => {
console.log(`API сервер запущен на порту ${port}`);
}); |