const express = require('express'); const proxy = require('express-http-proxy'); const bodyParser = require('body-parser'); const app = express(); const targetUrl = 'https://api.openai.com'; const openai_key = process.env.OPENAI_KEY; app.use(bodyParser.json()); // Middleware to parse JSON body // Route to handle GPT-4 generation requests app.post('/generate', proxy(targetUrl, { proxyReqPathResolver: () => '/v1/engines/gpt-4-1106-preview/completions', // Path for GPT-4 requests proxyReqOptDecorator: (proxyReqOpts, srcReq) => { // Ensure the model is GPT-4 if (srcReq.body.model !== 'gpt-4-1106-preview') { throw new Error('Only gpt-4-1106-preview model is supported'); } // Modify the request headers proxyReqOpts.headers['Authorization'] = `Bearer ${openai_key}`; proxyReqOpts.headers['Content-Type'] = 'application/json'; // Forward the JSON body as-is proxyReqOpts.bodyContent = JSON.stringify(srcReq.body); return proxyReqOpts; }, userResDecorator: (proxyRes, proxyResData, userReq, userRes) => { // Check for non-200 status code if (proxyRes.statusCode !== 200) { throw new Error('Request to OpenAI failed'); } // Forward the OpenAI response return proxyResData; }, })); // All other requests are not allowed app.use('*', (req, res) => { res.status(403).send('Access Denied'); }); const port = 7860; app.listen(port, () => { console.log(`Reverse proxy server listening on port ${port}`); });