fix Poe AI "Clear Context" (#349)

This commit is contained in:
josc146
2023-06-12 23:53:00 +08:00
parent 4f162d2678
commit 802d87ef93
9 changed files with 39 additions and 13 deletions
+3 -1
View File
@@ -10,7 +10,7 @@ import { isEmpty } from 'lodash-es'
* @param {Session} session
*/
export async function generateAnswersWithAzureOpenaiApi(port, question, session) {
const { controller, messageListener } = setAbortController(port)
const { controller, messageListener, disconnectListener } = setAbortController(port)
const config = await getUserConfig()
const prompt = getConversationPairs(
@@ -60,9 +60,11 @@ export async function generateAnswersWithAzureOpenaiApi(port, question, session)
async onStart() {},
async onEnd() {
port.onMessage.removeListener(messageListener)
port.onDisconnect.removeListener(disconnectListener)
},
async onError(resp) {
port.onMessage.removeListener(messageListener)
port.onDisconnect.removeListener(disconnectListener)
if (resp instanceof Error) throw resp
const error = await resp.json().catch(() => ({}))
throw new Error(
+3 -1
View File
@@ -8,7 +8,7 @@ import Bard from '../clients/bard'
* @param {string} cookies
*/
export async function generateAnswersWithBardWebApi(port, question, session, cookies) {
// const { controller, messageListener } = setAbortController(port)
// const { controller, messageListener, disconnectListener } = setAbortController(port)
const bot = new Bard(cookies)
// eslint-disable-next-line
@@ -18,9 +18,11 @@ export async function generateAnswersWithBardWebApi(port, question, session, coo
pushRecord(session, question, answer)
console.debug('conversation history', { content: session.conversationRecords })
// port.onMessage.removeListener(messageListener)
// port.onDisconnect.removeListener(disconnectListener)
port.postMessage({ answer: answer, done: true, session: session })
} catch (err) {
// port.onMessage.removeListener(messageListener)
// port.onDisconnect.removeListener(disconnectListener)
throw err
}
}
+3 -1
View File
@@ -16,7 +16,7 @@ export async function generateAnswersWithBingWebApi(
accessToken,
sydneyMode = false,
) {
const { controller, messageListener } = setAbortController(port)
const { controller, messageListener, disconnectListener } = setAbortController(port)
const config = await getUserConfig()
let modelMode
if (session.modelName.includes('-')) modelMode = session.modelName.split('-')[1]
@@ -59,6 +59,7 @@ export async function generateAnswersWithBingWebApi(
})
.catch((err) => {
port.onMessage.removeListener(messageListener)
port.onDisconnect.removeListener(disconnectListener)
throw err
})
@@ -87,5 +88,6 @@ export async function generateAnswersWithBingWebApi(
pushRecord(session, question, answer)
console.debug('conversation history', { content: session.conversationRecords })
port.onMessage.removeListener(messageListener)
port.onDisconnect.removeListener(disconnectListener)
port.postMessage({ answer: answer, done: true, session: session })
}
+4 -1
View File
@@ -60,12 +60,13 @@ export async function generateAnswersWithChatgptWebApi(port, question, session,
session.parentMessageId = uuidv4()
}
const { controller, messageListener } = setAbortController(port, null, () => {
const { controller, messageListener, disconnectListener } = setAbortController(port, null, () => {
if (session.autoClean) deleteConversation(accessToken, session.conversationId)
})
const models = await getModels(accessToken).catch(() => {
port.onMessage.removeListener(messageListener)
port.onDisconnect.removeListener(disconnectListener)
})
console.debug('models', models)
const config = await getUserConfig()
@@ -141,9 +142,11 @@ export async function generateAnswersWithChatgptWebApi(port, question, session,
},
async onEnd() {
port.onMessage.removeListener(messageListener)
port.onDisconnect.removeListener(disconnectListener)
},
async onError(resp) {
port.onMessage.removeListener(messageListener)
port.onDisconnect.removeListener(disconnectListener)
if (resp instanceof Error) throw resp
if (resp.status === 403) {
throw new Error('CLOUDFLARE')
+3 -1
View File
@@ -19,7 +19,7 @@ import { getCustomApiPromptBase, pushRecord, setAbortController } from './shared
* @param {string} modelName
*/
export async function generateAnswersWithCustomApi(port, question, session, apiKey, modelName) {
const { controller, messageListener } = setAbortController(port)
const { controller, messageListener, disconnectListener } = setAbortController(port)
const config = await getUserConfig()
const prompt = getConversationPairs(
@@ -73,9 +73,11 @@ export async function generateAnswersWithCustomApi(port, question, session, apiK
async onStart() {},
async onEnd() {
port.onMessage.removeListener(messageListener)
port.onDisconnect.removeListener(disconnectListener)
},
async onError(resp) {
port.onMessage.removeListener(messageListener)
port.onDisconnect.removeListener(disconnectListener)
if (resp instanceof Error) throw resp
const error = await resp.json().catch(() => ({}))
throw new Error(!isEmpty(error) ? JSON.stringify(error) : `${resp.status} ${resp.statusText}`)
+6 -2
View File
@@ -25,7 +25,7 @@ export async function generateAnswersWithGptCompletionApi(
apiKey,
modelName,
) {
const { controller, messageListener } = setAbortController(port)
const { controller, messageListener, disconnectListener } = setAbortController(port)
const config = await getUserConfig()
const prompt =
@@ -74,9 +74,11 @@ export async function generateAnswersWithGptCompletionApi(
async onStart() {},
async onEnd() {
port.onMessage.removeListener(messageListener)
port.onDisconnect.removeListener(disconnectListener)
},
async onError(resp) {
port.onMessage.removeListener(messageListener)
port.onDisconnect.removeListener(disconnectListener)
if (resp instanceof Error) throw resp
const error = await resp.json().catch(() => ({}))
throw new Error(!isEmpty(error) ? JSON.stringify(error) : `${resp.status} ${resp.statusText}`)
@@ -92,7 +94,7 @@ export async function generateAnswersWithGptCompletionApi(
* @param {string} modelName
*/
export async function generateAnswersWithChatgptApi(port, question, session, apiKey, modelName) {
const { controller, messageListener } = setAbortController(port)
const { controller, messageListener, disconnectListener } = setAbortController(port)
const config = await getUserConfig()
const prompt = getConversationPairs(
@@ -143,9 +145,11 @@ export async function generateAnswersWithChatgptApi(port, question, session, api
async onStart() {},
async onEnd() {
port.onMessage.removeListener(messageListener)
port.onDisconnect.removeListener(disconnectListener)
},
async onError(resp) {
port.onMessage.removeListener(messageListener)
port.onDisconnect.removeListener(disconnectListener)
if (resp instanceof Error) throw resp
const error = await resp.json().catch(() => ({}))
throw new Error(!isEmpty(error) ? JSON.stringify(error) : `${resp.status} ${resp.statusText}`)
+13 -4
View File
@@ -9,10 +9,16 @@ import PoeAiClient from '../clients/poe/index.mjs'
*/
export async function generateAnswersWithPoeWebApi(port, question, session, modelName) {
const bot = new PoeAiClient(session.poe_chatId)
const { messageListener } = setAbortController(port, () => {
bot.breakMsg()
bot.close()
})
const { messageListener, disconnectListener } = setAbortController(
port,
() => {
bot.close()
},
() => {
bot.breakMsg()
bot.close()
},
)
let answer = ''
await bot
@@ -29,12 +35,15 @@ export async function generateAnswersWithPoeWebApi(port, question, session, mode
pushRecord(session, question, answer)
console.debug('conversation history', { content: session.conversationRecords })
port.onMessage.removeListener(messageListener)
if (session.conversationRecords.length > 1)
port.onDisconnect.removeListener(disconnectListener)
port.postMessage({ answer: answer, done: true, session: session })
bot.close()
},
)
.catch((err) => {
port.onMessage.removeListener(messageListener)
port.onDisconnect.removeListener(disconnectListener)
bot.close()
throw err
})
+1 -1
View File
@@ -36,7 +36,7 @@ export function setAbortController(port, onStop, onDisconnect) {
}
port.onDisconnect.addListener(disconnectListener)
return { controller, messageListener }
return { controller, messageListener, disconnectListener }
}
export function pushRecord(session, question, answer) {
+3 -1
View File
@@ -9,7 +9,7 @@ import { isEmpty } from 'lodash-es'
* @param {Session} session
*/
export async function generateAnswersWithWaylaidwandererApi(port, question, session) {
const { controller, messageListener } = setAbortController(port)
const { controller, messageListener, disconnectListener } = setAbortController(port)
const config = await getUserConfig()
@@ -65,9 +65,11 @@ export async function generateAnswersWithWaylaidwandererApi(port, question, sess
async onStart() {},
async onEnd() {
port.onMessage.removeListener(messageListener)
port.onDisconnect.removeListener(disconnectListener)
},
async onError(resp) {
port.onMessage.removeListener(messageListener)
port.onDisconnect.removeListener(disconnectListener)
if (resp instanceof Error) throw resp
const error = await resp.json().catch(() => ({}))
throw new Error(!isEmpty(error) ? JSON.stringify(error) : `${resp.status} ${resp.statusText}`)