Skip to content

Commit c1129f9

Browse files
committed
feat: support New Bing (GPT-4) (#49, #90)
1 parent d7c066f commit c1129f9

File tree

12 files changed

+672
-37
lines changed

12 files changed

+672
-37
lines changed

package-lock.json

Lines changed: 0 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@
4545
"remark-breaks": "^3.0.2",
4646
"remark-gfm": "^3.0.1",
4747
"remark-math": "^5.1.1",
48-
"uuid": "^9.0.0",
4948
"webextension-polyfill": "^0.10.0"
5049
},
5150
"devDependencies": {

src/background/apis/bing-web.mjs

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import BingAIClient from '../clients/BingAIClient'
2+
3+
/**
4+
* @param {Runtime.Port} port
5+
* @param {string} question
6+
* @param {Session} session
7+
* @param {string} accessToken
8+
* @param {string} modelName
9+
*/
10+
export async function generateAnswersWithBingWebApi(
11+
port,
12+
question,
13+
session,
14+
accessToken,
15+
// eslint-disable-next-line
16+
modelName,
17+
) {
18+
const controller = new AbortController()
19+
const stopListener = (msg) => {
20+
if (msg.stop) {
21+
console.debug('stop generating')
22+
port.postMessage({ done: true })
23+
controller.abort()
24+
port.onMessage.removeListener(stopListener)
25+
}
26+
}
27+
port.onMessage.addListener(stopListener)
28+
port.onDisconnect.addListener(() => {
29+
console.debug('port disconnected')
30+
controller.abort()
31+
})
32+
33+
const bingAIClient = new BingAIClient({ userToken: accessToken })
34+
35+
let answer = ''
36+
const response = await bingAIClient
37+
.sendMessage(question, {
38+
...(session.bingWeb.conversationId
39+
? {
40+
conversationId: session.bingWeb.conversationId,
41+
conversationSignature: session.bingWeb.conversationSignature,
42+
clientId: session.bingWeb.clientId,
43+
invocationId: session.bingWeb.invocationId,
44+
}
45+
: {}),
46+
onProgress: (token) => {
47+
answer += token
48+
port.postMessage({ answer: answer, done: false, session: session })
49+
},
50+
})
51+
.catch((err) => {
52+
port.onMessage.removeListener(stopListener)
53+
throw err
54+
})
55+
56+
session.bingWeb.conversationSignature = response.conversationSignature
57+
session.bingWeb.conversationId = response.conversationId
58+
session.bingWeb.clientId = response.clientId
59+
session.bingWeb.invocationId = response.invocationId
60+
61+
port.onMessage.removeListener(stopListener)
62+
port.postMessage({ answer: response.response, done: true, session: session })
63+
}

src/background/apis/chatgpt-web.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,8 @@ export async function generateAnswersWithChatgptWebApi(port, question, session,
132132
port.onMessage.removeListener(stopListener)
133133
},
134134
async onError(resp) {
135-
if (resp instanceof Error) throw resp
136135
port.onMessage.removeListener(stopListener)
136+
if (resp instanceof Error) throw resp
137137
if (resp.status === 403) {
138138
throw new Error('CLOUDFLARE')
139139
}

src/background/apis/custom-api.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,8 @@ export async function generateAnswersWithCustomApi(port, question, session, apiK
7979
port.onMessage.removeListener(stopListener)
8080
},
8181
async onError(resp) {
82-
if (resp instanceof Error) throw resp
8382
port.onMessage.removeListener(stopListener)
83+
if (resp instanceof Error) throw resp
8484
if (resp.status === 403) {
8585
throw new Error('CLOUDFLARE')
8686
}

src/background/apis/openai-api.mjs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@ export async function generateAnswersWithGptCompletionApi(
9292
port.onMessage.removeListener(stopListener)
9393
},
9494
async onError(resp) {
95-
if (resp instanceof Error) throw resp
9695
port.onMessage.removeListener(stopListener)
96+
if (resp instanceof Error) throw resp
9797
if (resp.status === 403) {
9898
throw new Error('CLOUDFLARE')
9999
}
@@ -168,8 +168,8 @@ export async function generateAnswersWithChatgptApi(port, question, session, api
168168
port.onMessage.removeListener(stopListener)
169169
},
170170
async onError(resp) {
171-
if (resp instanceof Error) throw resp
172171
port.onMessage.removeListener(stopListener)
172+
if (resp instanceof Error) throw resp
173173
if (resp.status === 403) {
174174
throw new Error('CLOUDFLARE')
175175
}

0 commit comments

Comments
 (0)