| | 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 start = `Ты генератор рецептов. В этом чате, тебе будут присылать названия блюд или описывать их или присылать название категории, а ты должен будешь написать идеальный, понятный, подробный, лёгкий или сложный рецепт со всеми пропорциями, количествами и этапами готовки (этапы готовки должны быть разделены, например 1.1., 1.2., 2.1., 2.2. (Обязательно со звёздочками, это жирный шрифт) С эмодзи.`; |
| |
|
| | const generateLimiter = rateLimit({ |
| | windowMs: 30 * 1000, |
| | max: 1, |
| | handler: function (req, res) { |
| | return res.status(429).json({ |
| | error: "Слишком много запросов с этого IP, пожалуйста, попробуйте позже. (Лимит 1 генерация в 30 секунд)" |
| | }); |
| | } |
| | }); |
| |
|
| | app.post('/generate', generateLimiter, async (req, res) => { |
| | const prompt = req.body.prompt; |
| |
|
| | if (!prompt) { |
| | return res.status(400).json({ error: 'Требуется параметр "prompt".' }); |
| | } |
| |
|
| | try { |
| | const response = await axios.post('https://api.openai.com/v1/chat/completions', { |
| | messages: [{'role': 'system', 'content': start}, {'role': 'user', 'content': prompt}], |
| | max_tokens: 2000, |
| | model: "gpt-3.5-turbo", |
| | }, { |
| | headers: { |
| | 'Authorization': `Bearer ${openai_key}`, |
| | '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({ error: 'OpenAI не вернул ожидаемых данных.' }); |
| | } |
| | } catch (error) { |
| | console.error(error); |
| | res.status(500).json({ error: 'Произошла ошибка сервера при генерации.' }); |
| | } |
| | }); |
| |
|
| | const port = 7860; |
| | app.listen(port, () => { |
| | console.log(`API сервер запущен на порту ${port}`); |
| | }); |