TESTING / src /server.js
API-Handler's picture
Upload 6 files
567f740 verified
raw
history blame
3.5 kB
const express = require('express');
const axios = require('axios');
class DeepInfraHandler {
constructor() {
this.API_URL = 'https://api.deepinfra.com/v1/openai/chat/completions';
this.headers = {
'Accept': 'text/event-stream',
'Accept-Encoding': 'gzip, deflate, br, zstd',
'Content-Type': 'application/json',
'Connection': 'keep-alive',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36'
};
}
_preparePayload(params) {
return {
model: params.model,
messages: params.messages,
temperature: params.temperature || 0.7,
max_tokens: params.max_tokens || 4096,
top_p: params.top_p || 1.0,
frequency_penalty: params.frequency_penalty || 0.0,
presence_penalty: params.presence_penalty || 0.0,
stop: params.stop || [],
stream: params.stream || false
};
}
async generateCompletion(params) {
const payload = this._preparePayload(params);
if (payload.stream) {
const response = await axios({
method: 'post',
url: this.API_URL,
data: payload,
headers: this.headers,
responseType: 'stream'
});
return response.data;
} else {
const response = await axios.post(this.API_URL, payload, {
headers: this.headers
});
return response.data;
}
}
}
const app = express();
const PORT = process.env.PORT || 7860;
const apiHandler = new DeepInfraHandler();
app.use(express.json());
app.post('/chat/completions', async (req, res) => {
try {
if (req.body.stream) {
res.setHeader('Content-Type', 'text/event-stream');
res.setHeader('Cache-Control', 'no-cache');
res.setHeader('Connection', 'keep-alive');
const stream = await apiHandler.generateCompletion(req.body);
stream.on('data', chunk => {
const lines = chunk.toString().split('\n');
for (const line of lines) {
if (line.startsWith('data: ')) {
try {
const content = JSON.parse(line.slice(6));
if (content === '[DONE]') {
res.write('data: [DONE]\n\n');
continue;
}
res.write(line + '\n\n');
} catch (error) {
continue;
}
}
}
});
stream.on('end', () => {
res.end();
});
stream.on('error', (error) => {
console.error('Stream error:', error);
res.end();
});
} else {
const response = await apiHandler.generateCompletion(req.body);
res.json(response);
}
} catch (error) {
console.error('Error:', error);
res.status(500).json({ error: error.message });
}
});
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});