feat: 遇到风控直接返回

This commit is contained in:
ikechan8370 2023-03-08 16:55:45 +08:00
parent 9377d66b47
commit 211ccba00a
2 changed files with 29 additions and 5 deletions

View file

@ -136,6 +136,9 @@ export default class SydneyAIClient {
} catch (err) {
logger.warn(err)
retryTimes--
if (retryTimes === 0) {
throw new Error(err)
}
}
} while (retryTimes > 0)
ws.on('error', console.error)
@ -288,7 +291,9 @@ export default class SydneyAIClient {
conversation.messages.push(userMessage)
const ws = await this.createWebSocketConnection()
if (Config.debug) {
logger.mark('sydney websocket constructed successful')
}
const obj = {
arguments: [
{
@ -369,7 +374,7 @@ export default class SydneyAIClient {
reject('Request aborted')
}
})
let apology = false
ws.on('message', (data) => {
const objects = data.toString().split('')
const events = objects.map((object) => {
@ -385,13 +390,28 @@ export default class SydneyAIClient {
const event = events[0]
switch (event.type) {
case 1: {
if (stopTokenFound) {
if (stopTokenFound || apology) {
return
}
const messages = event?.arguments?.[0]?.messages
if (!messages?.length || messages[0].author !== 'bot') {
return
}
const message = messages.length ? messages[messages.length - 1] : null
if (messages[0].contentOrigin === 'Apology') {
console.log('Apology found')
stopTokenFound = true
clearTimeout(messageTimeout)
clearTimeout(firstTimeout)
this.cleanupWebSocketConnection(ws)
message.adaptiveCards[0].body[0].text = replySoFar
message.text = replySoFar
resolve({
message,
conversationExpiryTime: event?.item?.conversationExpiryTime
})
return
}
const updatedText = messages[0].text
if (!updatedText || updatedText === replySoFar) {
return
@ -400,7 +420,7 @@ export default class SydneyAIClient {
const difference = updatedText.substring(replySoFar.length)
onProgress(difference)
if (updatedText.trim().endsWith(stopToken)) {
stopTokenFound = true
apology = true
// remove stop token from updated text
replySoFar = updatedText.replace(stopToken, '').trim()
return
@ -409,7 +429,11 @@ export default class SydneyAIClient {
return
}
case 2: {
if (apology) {
return
}
clearTimeout(messageTimeout)
clearTimeout(firstTimeout)
this.cleanupWebSocketConnection(ws)
if (event.item?.result?.value === 'InvalidSession') {
reject(`${event.item.result.value}: ${event.item.result.message}`)

View file

@ -55,7 +55,7 @@ const defaultConfig = {
noiseScaleW: 0.668,
lengthScale: 1.2,
initiativeChatGroups: [],
version: 'v2.1.1'
version: 'v2.1.2'
}
const _path = process.cwd()
let config = {}