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

View file

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