TESTING / src /deepinfra_handler.js
API-Handler's picture
Upload 6 files
567f740 verified
raw
history blame
2.57 kB
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);
try {
if (payload.stream) {
return this._handleStreamingResponse(payload);
} else {
return this._handleRegularResponse(payload);
}
} catch (error) {
throw new Error(`API request failed: ${error.message}`);
}
}
async _handleRegularResponse(payload) {
const response = await axios.post(this.API_URL, payload, {
headers: this.headers
});
return response.data;
}
async* _handleStreamingResponse(payload) {
const response = await axios.post(this.API_URL, payload, {
headers: this.headers,
responseType: 'stream'
});
for await (const chunk of response.data) {
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]') continue;
const deltaContent = content?.choices?.[0]?.delta?.content;
if (deltaContent) yield deltaContent;
} catch (error) {
continue;
}
}
}
}
}
}
module.exports = { DeepInfraHandler };