feat: stop generating answers

This commit is contained in:
josc146
2023-03-16 11:20:21 +08:00
parent 91d47a2970
commit 0f97840d23
7 changed files with 79 additions and 9 deletions
+17 -2
View File
@@ -53,13 +53,24 @@ export async function generateAnswersWithChatgptWebApi(port, question, session,
}
const controller = new AbortController()
const stopListener = (msg) => {
if (msg.stop) {
console.debug('stop generating')
port.postMessage({ done: true })
controller.abort()
port.onMessage.removeListener(stopListener)
}
}
port.onMessage.addListener(stopListener)
port.onDisconnect.addListener(() => {
console.debug('port disconnected')
controller.abort()
deleteConversation()
})
const models = await getModels(accessToken).catch(() => {})
const models = await getModels(accessToken).catch(() => {
port.onMessage.removeListener(stopListener)
})
const config = await getUserConfig()
let answer = ''
@@ -112,8 +123,12 @@ export async function generateAnswersWithChatgptWebApi(port, question, session,
async onStart() {
// sendModerations(accessToken, question, session.conversationId, session.messageId)
},
async onEnd() {},
async onEnd() {
port.onMessage.removeListener(stopListener)
},
async onError(resp) {
if (resp instanceof Error) throw resp
port.onMessage.removeListener(stopListener)
if (resp.status === 403) {
throw new Error('CLOUDFLARE')
}
+28 -2
View File
@@ -35,6 +35,15 @@ export async function generateAnswersWithGptCompletionApi(
modelName,
) {
const controller = new AbortController()
const stopListener = (msg) => {
if (msg.stop) {
console.debug('stop generating')
port.postMessage({ done: true })
controller.abort()
port.onMessage.removeListener(stopListener)
}
}
port.onMessage.addListener(stopListener)
port.onDisconnect.addListener(() => {
console.debug('port disconnected')
controller.abort()
@@ -79,8 +88,12 @@ export async function generateAnswersWithGptCompletionApi(
port.postMessage({ answer: answer, done: false, session: null })
},
async onStart() {},
async onEnd() {},
async onEnd() {
port.onMessage.removeListener(stopListener)
},
async onError(resp) {
if (resp instanceof Error) throw resp
port.onMessage.removeListener(stopListener)
if (resp.status === 403) {
throw new Error('CLOUDFLARE')
}
@@ -99,6 +112,15 @@ export async function generateAnswersWithGptCompletionApi(
*/
export async function generateAnswersWithChatgptApi(port, question, session, apiKey, modelName) {
const controller = new AbortController()
const stopListener = (msg) => {
if (msg.stop) {
console.debug('stop generating')
port.postMessage({ done: true })
controller.abort()
port.onMessage.removeListener(stopListener)
}
}
port.onMessage.addListener(stopListener)
port.onDisconnect.addListener(() => {
console.debug('port disconnected')
controller.abort()
@@ -142,8 +164,12 @@ export async function generateAnswersWithChatgptApi(port, question, session, api
port.postMessage({ answer: answer, done: false, session: null })
},
async onStart() {},
async onEnd() {},
async onEnd() {
port.onMessage.removeListener(stopListener)
},
async onError(resp) {
if (resp instanceof Error) throw resp
port.onMessage.removeListener(stopListener)
if (resp.status === 403) {
throw new Error('CLOUDFLARE')
}
+6 -3
View File
@@ -51,8 +51,9 @@ Browser.runtime.onConnect.addListener((port) => {
console.debug('connected')
port.onMessage.addListener(async (msg) => {
console.debug('received msg', msg)
const config = await getUserConfig()
const session = msg.session
if (!session) return
const config = await getUserConfig()
if (session.useApiKey == null) {
session.useApiKey = isUsingApiKey(config)
}
@@ -84,8 +85,10 @@ Browser.runtime.onConnect.addListener((port) => {
}
} catch (err) {
console.error(err)
port.postMessage({ error: err.message })
cache.delete(KEY_ACCESS_TOKEN)
if (!err.message.includes('aborted')) {
port.postMessage({ error: err.message })
cache.delete(KEY_ACCESS_TOKEN)
}
}
})
})