Spaces:
Sleeping
Sleeping
| 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}`); | |
| }); |