diff --git a/utils/SydneyAIClient.js b/utils/SydneyAIClient.js index d68193c..57ade8e 100644 --- a/utils/SydneyAIClient.js +++ b/utils/SydneyAIClient.js @@ -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}`) diff --git a/utils/config.js b/utils/config.js index 3018b9e..a4be56f 100644 --- a/utils/config.js +++ b/utils/config.js @@ -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 = {}