feat: add timeout support to browser sendMessage

pull/142/head
Travis Fischer 2022-12-15 01:35:09 -06:00
rodzic 0d09ca965f
commit 8e0f32b444
1 zmienionych plików z 33 dodań i 12 usunięć

Wyświetl plik

@ -1,5 +1,6 @@
import delay from 'delay' import delay from 'delay'
import html2md from 'html-to-md' import html2md from 'html-to-md'
import pTimeout from 'p-timeout'
import type { Browser, HTTPRequest, HTTPResponse, Page } from 'puppeteer' import type { Browser, HTTPRequest, HTTPResponse, Page } from 'puppeteer'
import { getBrowser, getOpenAIAuth } from './openai-auth' import { getBrowser, getOpenAIAuth } from './openai-auth'
@ -275,7 +276,14 @@ export class ChatGPTAPIBrowser {
} }
} }
async sendMessage(message: string): Promise<string> { async sendMessage(
message: string,
opts: {
timeoutMs?: number
} = {}
): Promise<string> {
const { timeoutMs } = opts
const inputBox = await this._getInputBox() const inputBox = await this._getInputBox()
if (!inputBox) throw new Error('not signed in') if (!inputBox) throw new Error('not signed in')
@ -294,19 +302,32 @@ export class ChatGPTAPIBrowser {
} }
} }
do { const responseP = new Promise<string>(async (resolve, reject) => {
await delay(1000) try {
do {
await delay(1000)
// TODO: this logic needs some work because we can have repeat messages... // TODO: this logic needs some work because we can have repeat messages...
const newLastMessage = await this.getLastMessage() const newLastMessage = await this.getLastMessage()
if ( if (
newLastMessage && newLastMessage &&
lastMessage?.toLowerCase() !== newLastMessage?.toLowerCase() lastMessage?.toLowerCase() !== newLastMessage?.toLowerCase()
) { ) {
await delay(5000) return resolve(newLastMessage)
return newLastMessage }
} while (true)
} catch (err) {
return reject(err)
} }
} while (true) })
if (timeoutMs) {
return pTimeout(responseP, {
milliseconds: timeoutMs
})
} else {
return responseP
}
} }
async resetThread() { async resetThread() {