Commit 8e0f32b4 authored by Travis Fischer's avatar Travis Fischer

feat: add timeout support to browser sendMessage

parent 0d09ca96
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 { ...@@ -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 { ...@@ -294,19 +302,32 @@ export class ChatGPTAPIBrowser {
} }
} }
do { const responseP = new Promise<string>(async (resolve, reject) => {
await delay(1000) try {
do {
// TODO: this logic needs some work because we can have repeat messages... await delay(1000)
const newLastMessage = await this.getLastMessage()
if ( // TODO: this logic needs some work because we can have repeat messages...
newLastMessage && const newLastMessage = await this.getLastMessage()
lastMessage?.toLowerCase() !== newLastMessage?.toLowerCase() if (
) { newLastMessage &&
await delay(5000) lastMessage?.toLowerCase() !== newLastMessage?.toLowerCase()
return newLastMessage ) {
return resolve(newLastMessage)
}
} while (true)
} catch (err) {
return reject(err)
} }
} while (true) })
if (timeoutMs) {
return pTimeout(responseP, {
milliseconds: timeoutMs
})
} else {
return responseP
}
} }
async resetThread() { async resetThread() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment