From b886d7e944c8e717409c5bbb8cdf124d57a2d216 Mon Sep 17 00:00:00 2001 From: josc146 Date: Mon, 8 May 2023 21:46:35 +0800 Subject: [PATCH] feat: support for non-streamed responses (#294) --- src/services/apis/openai-api.mjs | 10 ++++++---- src/utils/fetch-sse.mjs | 12 +++++++++++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/services/apis/openai-api.mjs b/src/services/apis/openai-api.mjs index 92daf1b..bba9450 100644 --- a/src/services/apis/openai-api.mjs +++ b/src/services/apis/openai-api.mjs @@ -132,10 +132,12 @@ export async function generateAnswersWithChatgptApi(port, question, session, api console.debug('json error', error) return } - if ('content' in data.choices[0].delta) { - answer += data.choices[0].delta.content - port.postMessage({ answer: answer, done: false, session: null }) - } + answer += + data.choices[0]?.delta?.content || + data.choices[0]?.message?.content || + data.choices[0]?.text || + '' + port.postMessage({ answer: answer, done: false, session: null }) }, async onStart() {}, async onEnd() { diff --git a/src/utils/fetch-sse.mjs b/src/utils/fetch-sse.mjs index dec7109..a212859 100644 --- a/src/utils/fetch-sse.mjs +++ b/src/utils/fetch-sse.mjs @@ -19,7 +19,17 @@ export async function fetchSSE(resource, options) { let hasStarted = false for await (const chunk of streamAsyncIterable(resp.body)) { const str = new TextDecoder().decode(chunk) - parser.feed(str) + if (!str.startsWith('{') && !str.startsWith('"{')) { + parser.feed(str) + } else { + const formattedStr = + 'data: ' + + JSON.stringify( + JSON.parse(str.replace(/^"|"$/g, '').replaceAll('\\"', '"').replaceAll('\\\\u', '\\u')), + ).replaceAll('\\\\n', '\\n') + + '\n\ndata: [DONE]\n\n' + parser.feed(formattedStr) + } if (!hasStarted) { hasStarted = true