Files
chatGPTBox/src/services/apis/poe-web.mjs
T
2023-06-12 23:53:00 +08:00

51 lines
1.4 KiB
JavaScript

import { pushRecord, setAbortController } from './shared.mjs'
import PoeAiClient from '../clients/poe/index.mjs'
/**
* @param {Runtime.Port} port
* @param {string} question
* @param {Session} session
* @param {string} modelName
*/
export async function generateAnswersWithPoeWebApi(port, question, session, modelName) {
const bot = new PoeAiClient(session.poe_chatId)
const { messageListener, disconnectListener } = setAbortController(
port,
() => {
bot.close()
},
() => {
bot.breakMsg()
bot.close()
},
)
let answer = ''
await bot
.ask(
question,
modelName,
(msg) => {
answer += msg
port.postMessage({ answer: answer, done: false, session: null })
},
() => {
if (bot.chatId) session.poe_chatId = bot.chatId
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
})
}