Initial working commit
parent
a605a3f7be
commit
2821bf0b1b
16
index.js
16
index.js
|
@ -18,7 +18,7 @@ client.addListener('message', async (from, to, message) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
// function that calls the chatgpt streaming api (with server send events) and calls the callback function for each line
|
// function that calls the chatgpt streaming api (with server send events) and calls the callback function for each line
|
||||||
function chatgpt(query, callback) {
|
async function chatgpt(query, callback) {
|
||||||
const apiUrl = 'https://api.openai.com/v1/chat/completions';
|
const apiUrl = 'https://api.openai.com/v1/chat/completions';
|
||||||
|
|
||||||
const response = await axios.post(apiUrl, {
|
const response = await axios.post(apiUrl, {
|
||||||
|
@ -40,17 +40,19 @@ function chatgpt(query, callback) {
|
||||||
// parse if starts with data:
|
// parse if starts with data:
|
||||||
for(part of parts) {
|
for(part of parts) {
|
||||||
if(part === 'data: [DONE]') {
|
if(part === 'data: [DONE]') {
|
||||||
process.stdout.write('\n');
|
callback(line);
|
||||||
|
line = '';
|
||||||
} else if(part.startsWith('data: ')) {
|
} else if(part.startsWith('data: ')) {
|
||||||
let jsonString = part.slice(part.indexOf('{'), part.lastIndexOf('}') + 1);
|
let jsonString = part.slice(part.indexOf('{'), part.lastIndexOf('}') + 1);
|
||||||
try {
|
try {
|
||||||
let json = JSON.parse(jsonString);
|
let json = JSON.parse(jsonString);
|
||||||
let chunk = json.choices[0].delta.content;
|
let chunk = json.choices[0].delta.content;
|
||||||
|
if(!chunk) { return; }
|
||||||
//split the chunk into lines leaving the delimiter in the array
|
//split the chunk into lines leaving the delimiter in the array
|
||||||
const lines = str.split(/\r?\n/); // split by new lines
|
const lines = chunk.split(/\r?\n/); // split by new lines
|
||||||
|
|
||||||
let hasStartNewline = str.startsWith("\n");
|
let hasStartNewline = chunk.startsWith("\n");
|
||||||
let hasEndNewline = str.endsWith("\n");
|
let hasEndNewline = chunk.endsWith("\n");
|
||||||
|
|
||||||
if(hasStartNewline) {
|
if(hasStartNewline) {
|
||||||
callback(line);
|
callback(line);
|
||||||
|
@ -58,7 +60,7 @@ function chatgpt(query, callback) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let i = 0; i < lines.length - 1; i++) {
|
for (let i = 0; i < lines.length - 1; i++) {
|
||||||
callback(lines[i]);
|
callback(line+lines[i]);
|
||||||
line = '';
|
line = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,4 +77,4 @@ function chatgpt(query, callback) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue