umlim-openai / src /server.js
API-Handler's picture
Update src/server.js
8a2ae45 verified
raw
history blame
3.96 kB
// ==========================================
// SERVER WITH ENDPOINTS
// ==========================================
require('dotenv').config();
const express = require('express');
const app = express();
const port = process.env.PORT || 7860;
const apiHandler = require('./apiHandler');
const bodyParser = require('body-parser');
const fs = require('fs');
// Middleware to parse JSON bodies
app.use(bodyParser.json());
// Middleware to parse multipart/form-data for file uploads
const multer = require('multer');
const upload = multer({ dest: 'uploads/' });
// ------------------------------------------
// Chat Completions Endpoint
// ------------------------------------------
app.post('/v2/chat/completions', (req, res) => {
if (req.body.stream) {
// For streaming, the apiHandler manages the response and error handling
apiHandler.createChatCompletion(req.body, res);
} else {
// Non-streaming
apiHandler
.createChatCompletion(req.body)
.then((data) => {
res.json(data);
})
.catch((error) => {
res.status(500).json(error);
});
}
});
// ------------------------------------------
// Image Generation Endpoint
// ------------------------------------------
app.post('/v2/images/generations', async (req, res) => {
try {
const data = await apiHandler.createImage(req.body);
res.json(data);
} catch (error) {
res.status(500).json(error);
}
});
// ------------------------------------------
// Image Editing Endpoint
// ------------------------------------------
app.post('/v2/images/edits', upload.fields([{ name: 'image' }, { name: 'mask' }]), async (req, res) => {
try {
// Add file paths to request body
req.body.image = req.files['image'][0].path;
req.body.mask = req.files['mask'][0].path;
const data = await apiHandler.createImageEdit(req.body);
res.json(data);
// Clean up uploaded files
fs.unlinkSync(req.body.image);
fs.unlinkSync(req.body.mask);
} catch (error) {
res.status(500).json(error);
}
});
// ------------------------------------------
// Image Variations Endpoint
// ------------------------------------------
app.post('/v2/images/variations', upload.single('image'), async (req, res) => {
try {
// Add file path to request body
req.body.image = req.file.path;
const data = await apiHandler.createImageVariation(req.body);
res.json(data);
// Clean up uploaded file
fs.unlinkSync(req.body.image);
} catch (error) {
res.status(500).json(error);
}
});
// ------------------------------------------
// Audio Transcription Endpoint
// ------------------------------------------
app.post('/v2/audio/transcriptions', upload.single('file'), async (req, res) => {
try {
// Add file path to request body
req.body.file = req.file.path;
const data = await apiHandler.createTranscription(req.body);
res.json(data);
// Clean up uploaded file
fs.unlinkSync(req.body.file);
} catch (error) {
res.status(500).json(error);
}
});
// ------------------------------------------
// Text to Speech Endpoint
// ------------------------------------------
app.post('/v2/audio/speech', async (req, res) => {
try {
await apiHandler.createSpeech(req.body, res);
} catch (error) {
if (!res.headersSent) {
res.status(500).json(error);
} else {
console.error('Error after headers sent:', error);
}
}
});
// ------------------------------------------
// Vision Endpoint
// ------------------------------------------
app.post('/v2/vision', async (req, res) => {
try {
const data = await apiHandler.createVisionAnalysis(req.body);
res.json(data);
} catch (error) {
res.status(500).json(error);
}
});
// ------------------------------------------
// Start the Server
// ------------------------------------------
app.listen(port, () => {
console.log(`Server running on port ${port}`);
});