Skip to content

Commit

Permalink
improve 074b6cc
Browse files Browse the repository at this point in the history
  • Loading branch information
josStorer committed Mar 23, 2024
1 parent 9589509 commit f2bbc86
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 10 deletions.
61 changes: 53 additions & 8 deletions src/services/apis/chatgpt-web.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -91,18 +91,54 @@ export async function getArkoseToken(config) {
return arkoseToken
}

export async function isNeedWebsocket(accessToken) {
return (await request(accessToken, 'GET', '/accounts/check/v4-2023-04-27')).responseText.includes(
'shared_websocket',
)
}

export async function stopWebsocketConversation(accessToken, conversationId, wsRequestId) {
await request(accessToken, 'POST', '/stop_conversation', {
conversation_id: conversationId,
websocket_request_id: wsRequestId,
})
}

/**
* @type {WebSocket}
*/
let websocket
/**
* @type {Date}
*/
let expired_at
let wsCallbacks = []

export async function registerWebsocket(accessToken) {
if (websocket && new Date() < expired_at - 300000) return

const response = JSON.parse(
(await request(accessToken, 'POST', '/register-websocket')).responseText,
)
if (response.wss_url) {
websocket = new WebSocket(response.wss_url)
websocket.onclose = () => {
websocket = null
}
websocket.onmessage = (event) => {
wsCallbacks.forEach((cb) => cb(event))
}
expired_at = new Date(response.expired_at)
}
}

/**
* @param {Runtime.Port} port
* @param {string} question
* @param {Session} session
* @param {string} accessToken
*/
export async function generateAnswersWithChatgptWebApi(port, question, session, accessToken) {
session.messageId = uuidv4()
if (session.parentMessageId == null) {
session.parentMessageId = uuidv4()
}

let ws
const { controller, cleanController } = setAbortController(
port,
Expand All @@ -116,11 +152,16 @@ export async function generateAnswersWithChatgptWebApi(port, question, session,
)

const config = await getUserConfig()
const [models, requirementsToken, arkoseToken] = await Promise.all([
getModels(accessToken).catch(cleanController),
// eslint-disable-next-line no-unused-vars
const [models, requirementsToken, arkoseToken, useWebsocket] = await Promise.all([
getModels(accessToken).catch(cleanController), // don't throw error here
getRequirementsToken(accessToken),
getArkoseToken(config),
])
isNeedWebsocket(accessToken).catch(cleanController), // don't throw error here
]).catch((e) => {
cleanController()
throw e
})
console.debug('models', models)
const selectedModel = Models[session.modelName].value
const usedModel =
Expand Down Expand Up @@ -149,6 +190,10 @@ export async function generateAnswersWithChatgptWebApi(port, question, session,
let wss_url = ''

const url = `${config.customChatGptWebApiUrl}${config.customChatGptWebApiPath}`
session.messageId = uuidv4()
if (session.parentMessageId == null) {
session.parentMessageId = uuidv4()
}
const options = {
method: 'POST',
signal: controller.signal,
Expand Down
8 changes: 6 additions & 2 deletions src/services/apis/shared.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,12 @@ export function setAbortController(port, onStop, onDisconnect) {
port.onDisconnect.addListener(disconnectListener)

const cleanController = () => {
port.onMessage.removeListener(messageListener)
port.onDisconnect.removeListener(disconnectListener)
try {
port.onMessage.removeListener(messageListener)
port.onDisconnect.removeListener(disconnectListener)
} catch (e) {
// ignore
}
}

return { controller, cleanController, messageListener, disconnectListener }
Expand Down

0 comments on commit f2bbc86

Please sign in to comment.