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