mirror of
https://github.com/ikechan8370/chatgpt-plugin.git
synced 2025-12-17 05:47:11 +00:00
fix: 支持了微软稀有的消息拆分cursor
This commit is contained in:
parent
3bdfb15b0d
commit
1c1c2562ae
1 changed files with 35 additions and 26 deletions
|
|
@ -445,17 +445,17 @@ export default class SydneyAIClient {
|
||||||
}
|
}
|
||||||
let apology = false
|
let apology = false
|
||||||
const messagePromise = new Promise((resolve, reject) => {
|
const messagePromise = new Promise((resolve, reject) => {
|
||||||
let replySoFar = ''
|
let replySoFar = ['']
|
||||||
let adaptiveCardsSoFar = null
|
let adaptiveCardsSoFar = null
|
||||||
let suggestedResponsesSoFar = null
|
let suggestedResponsesSoFar = null
|
||||||
let stopTokenFound = false
|
let stopTokenFound = false
|
||||||
|
|
||||||
const messageTimeout = setTimeout(() => {
|
const messageTimeout = setTimeout(() => {
|
||||||
this.cleanupWebSocketConnection(ws)
|
this.cleanupWebSocketConnection(ws)
|
||||||
if (replySoFar) {
|
if (replySoFar[0]) {
|
||||||
let message = {
|
let message = {
|
||||||
adaptiveCards: adaptiveCardsSoFar,
|
adaptiveCards: adaptiveCardsSoFar,
|
||||||
text: replySoFar
|
text: replySoFar.join('')
|
||||||
}
|
}
|
||||||
resolve({
|
resolve({
|
||||||
message
|
message
|
||||||
|
|
@ -465,7 +465,7 @@ export default class SydneyAIClient {
|
||||||
}
|
}
|
||||||
}, timeout)
|
}, timeout)
|
||||||
const firstTimeout = setTimeout(() => {
|
const firstTimeout = setTimeout(() => {
|
||||||
if (!replySoFar) {
|
if (!replySoFar[0]) {
|
||||||
this.cleanupWebSocketConnection(ws)
|
this.cleanupWebSocketConnection(ws)
|
||||||
reject(new Error('等待必应服务器响应超时。请尝试调整超时时间配置或减少设定量以避免此问题。'))
|
reject(new Error('等待必应服务器响应超时。请尝试调整超时时间配置或减少设定量以避免此问题。'))
|
||||||
}
|
}
|
||||||
|
|
@ -476,10 +476,10 @@ export default class SydneyAIClient {
|
||||||
clearTimeout(messageTimeout)
|
clearTimeout(messageTimeout)
|
||||||
clearTimeout(firstTimeout)
|
clearTimeout(firstTimeout)
|
||||||
this.cleanupWebSocketConnection(ws)
|
this.cleanupWebSocketConnection(ws)
|
||||||
if (replySoFar) {
|
if (replySoFar[0]) {
|
||||||
let message = {
|
let message = {
|
||||||
adaptiveCards: adaptiveCardsSoFar,
|
adaptiveCards: adaptiveCardsSoFar,
|
||||||
text: replySoFar
|
text: replySoFar.join('')
|
||||||
}
|
}
|
||||||
resolve({
|
resolve({
|
||||||
message
|
message
|
||||||
|
|
@ -488,6 +488,7 @@ export default class SydneyAIClient {
|
||||||
reject('Request aborted')
|
reject('Request aborted')
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
let cursor = 0
|
||||||
// let apology = false
|
// let apology = false
|
||||||
ws.on('message', (data) => {
|
ws.on('message', (data) => {
|
||||||
const objects = data.toString().split('')
|
const objects = data.toString().split('')
|
||||||
|
|
@ -523,11 +524,11 @@ export default class SydneyAIClient {
|
||||||
? messages[messages.length - 1]
|
? messages[messages.length - 1]
|
||||||
: {
|
: {
|
||||||
adaptiveCards: adaptiveCardsSoFar,
|
adaptiveCards: adaptiveCardsSoFar,
|
||||||
text: replySoFar
|
text: replySoFar.join('')
|
||||||
}
|
}
|
||||||
if (messages[0].contentOrigin === 'Apology') {
|
if (messages[0].contentOrigin === 'Apology') {
|
||||||
console.log('Apology found')
|
console.log('Apology found')
|
||||||
if (!replySoFar) {
|
if (!replySoFar[0]) {
|
||||||
apology = true
|
apology = true
|
||||||
}
|
}
|
||||||
stopTokenFound = true
|
stopTokenFound = true
|
||||||
|
|
@ -537,7 +538,7 @@ export default class SydneyAIClient {
|
||||||
// adaptiveCardsSoFar || (message.adaptiveCards[0].body[0].text = replySoFar)
|
// adaptiveCardsSoFar || (message.adaptiveCards[0].body[0].text = replySoFar)
|
||||||
console.log({ replySoFar, message })
|
console.log({ replySoFar, message })
|
||||||
message.adaptiveCards = adaptiveCardsSoFar
|
message.adaptiveCards = adaptiveCardsSoFar
|
||||||
message.text = replySoFar || message.spokenText
|
message.text = replySoFar.join('') || message.spokenText
|
||||||
message.suggestedResponses = suggestedResponsesSoFar
|
message.suggestedResponses = suggestedResponsesSoFar
|
||||||
// 遇到Apology不发送默认建议回复
|
// 遇到Apology不发送默认建议回复
|
||||||
// message.suggestedResponses = suggestedResponsesSoFar || message.suggestedResponses
|
// message.suggestedResponses = suggestedResponsesSoFar || message.suggestedResponses
|
||||||
|
|
@ -551,19 +552,26 @@ export default class SydneyAIClient {
|
||||||
suggestedResponsesSoFar = message.suggestedResponses
|
suggestedResponsesSoFar = message.suggestedResponses
|
||||||
}
|
}
|
||||||
const updatedText = messages[0].text
|
const updatedText = messages[0].text
|
||||||
if (!updatedText || updatedText === replySoFar) {
|
if (!updatedText || updatedText === replySoFar[cursor]) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// get the difference between the current text and the previous text
|
// get the difference between the current text and the previous text
|
||||||
const difference = updatedText.substring(replySoFar.length)
|
if (replySoFar[cursor] && updatedText.startsWith(replySoFar[cursor])) {
|
||||||
onProgress(difference)
|
if (updatedText.trim().endsWith(stopToken)) {
|
||||||
if (updatedText.trim().endsWith(stopToken)) {
|
// apology = true
|
||||||
// apology = true
|
// remove stop token from updated text
|
||||||
// remove stop token from updated text
|
replySoFar[cursor] = updatedText.replace(stopToken, '').trim()
|
||||||
replySoFar = updatedText.replace(stopToken, '').trim()
|
return
|
||||||
return
|
}
|
||||||
|
replySoFar[cursor] = updatedText
|
||||||
|
} else if (replySoFar[cursor]) {
|
||||||
|
cursor += 1
|
||||||
|
replySoFar.push(updatedText)
|
||||||
|
} else {
|
||||||
|
replySoFar[cursor] = replySoFar[cursor] + updatedText
|
||||||
}
|
}
|
||||||
replySoFar = updatedText
|
|
||||||
|
// onProgress(difference)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
case 2: {
|
case 2: {
|
||||||
|
|
@ -577,14 +585,15 @@ export default class SydneyAIClient {
|
||||||
reject(`${event.item.result.value}: ${event.item.result.message}`)
|
reject(`${event.item.result.value}: ${event.item.result.message}`)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const messages = event.item?.messages || []
|
let messages = event.item?.messages || []
|
||||||
|
// messages = messages.filter(m => m.author === 'bot')
|
||||||
const message = messages.length
|
const message = messages.length
|
||||||
? messages[messages.length - 1]
|
? messages[messages.length - 1]
|
||||||
: {
|
: {
|
||||||
adaptiveCards: adaptiveCardsSoFar,
|
adaptiveCards: adaptiveCardsSoFar,
|
||||||
text: replySoFar
|
text: replySoFar.join('')
|
||||||
}
|
}
|
||||||
|
message.text = messages.filter(m => m.author === 'bot').map(m => m.text).join('')
|
||||||
if (!message) {
|
if (!message) {
|
||||||
reject('No message was generated.')
|
reject('No message was generated.')
|
||||||
return
|
return
|
||||||
|
|
@ -603,7 +612,7 @@ export default class SydneyAIClient {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (message.contentOrigin === 'Apology') {
|
if (message.contentOrigin === 'Apology') {
|
||||||
if (!replySoFar) {
|
if (!replySoFar[0]) {
|
||||||
apology = true
|
apology = true
|
||||||
}
|
}
|
||||||
console.log('Apology found')
|
console.log('Apology found')
|
||||||
|
|
@ -613,7 +622,7 @@ export default class SydneyAIClient {
|
||||||
this.cleanupWebSocketConnection(ws)
|
this.cleanupWebSocketConnection(ws)
|
||||||
// message.adaptiveCards[0].body[0].text = replySoFar || message.spokenText
|
// message.adaptiveCards[0].body[0].text = replySoFar || message.spokenText
|
||||||
message.adaptiveCards = adaptiveCardsSoFar
|
message.adaptiveCards = adaptiveCardsSoFar
|
||||||
message.text = replySoFar || message.spokenText
|
message.text = replySoFar.join('') || message.spokenText
|
||||||
message.suggestedResponses = suggestedResponsesSoFar
|
message.suggestedResponses = suggestedResponsesSoFar
|
||||||
// 遇到Apology不发送默认建议回复
|
// 遇到Apology不发送默认建议回复
|
||||||
// message.suggestedResponses = suggestedResponsesSoFar || message.suggestedResponses
|
// message.suggestedResponses = suggestedResponsesSoFar || message.suggestedResponses
|
||||||
|
|
@ -629,8 +638,8 @@ export default class SydneyAIClient {
|
||||||
console.debug(event.item.result.error)
|
console.debug(event.item.result.error)
|
||||||
console.debug(event.item.result.exception)
|
console.debug(event.item.result.exception)
|
||||||
}
|
}
|
||||||
if (replySoFar) {
|
if (replySoFar[0]) {
|
||||||
message.text = replySoFar
|
message.text = replySoFar.join('')
|
||||||
resolve({
|
resolve({
|
||||||
message,
|
message,
|
||||||
conversationExpiryTime: event?.item?.conversationExpiryTime
|
conversationExpiryTime: event?.item?.conversationExpiryTime
|
||||||
|
|
@ -644,7 +653,7 @@ export default class SydneyAIClient {
|
||||||
if (stopTokenFound || event.item.messages[0].topicChangerText) {
|
if (stopTokenFound || event.item.messages[0].topicChangerText) {
|
||||||
// message.adaptiveCards[0].body[0].text = replySoFar
|
// message.adaptiveCards[0].body[0].text = replySoFar
|
||||||
message.adaptiveCards = adaptiveCardsSoFar
|
message.adaptiveCards = adaptiveCardsSoFar
|
||||||
message.text = replySoFar
|
message.text = replySoFar.join('')
|
||||||
}
|
}
|
||||||
resolve({
|
resolve({
|
||||||
message,
|
message,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue