Skip to content

Commit 32a706c

Browse files
committed
feat: support gpt3.5-turbo-16k and gpt4
1 parent cb2d221 commit 32a706c

File tree

9 files changed

+117
-87
lines changed

9 files changed

+117
-87
lines changed

packages/SummarAI-chromium.zip

209 Bytes
Binary file not shown.

packages/chromium/options.js

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23938,6 +23938,28 @@ https://www.viki.com
2393823938
function getExtensionVersion() {
2393923939
return import_webextension_polyfill2.default.runtime.getManifest().version;
2394023940
}
23941+
var availableModels = [
23942+
{
23943+
name: "gpt-3.5-turbo",
23944+
maxTokens: 4096
23945+
},
23946+
{
23947+
name: "gpt-3.5-turbo-16k",
23948+
maxTokens: 16384
23949+
},
23950+
{
23951+
name: "gpt-4",
23952+
maxTokens: 8192
23953+
},
23954+
{
23955+
name: "gpt-4-32k",
23956+
maxTokens: 32768
23957+
},
23958+
{
23959+
name: "text-davinci-003",
23960+
maxTokens: 4097
23961+
}
23962+
];
2394123963

2394223964
// node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js
2394323965
init_preact_module();
@@ -24065,15 +24087,7 @@ https://www.viki.com
2406524087
const [config] = await Promise.all([getProviderConfigs()]);
2406624088
return { config };
2406724089
});
24068-
const models = [
24069-
"gpt-3.5-turbo",
24070-
"gpt-3.5-turbo-0301",
24071-
"text-davinci-003"
24072-
// 'text-curie-001',
24073-
// 'text-babbage-001',
24074-
// 'text-ada-001',
24075-
// 'text-chat-davinci-002-20221122',
24076-
];
24090+
const models = availableModels.map((model) => model.name);
2407724091
if (query.isLoading) {
2407824092
return /* @__PURE__ */ o3(spinner_default2, {});
2407924093
}
@@ -24087,13 +24101,13 @@ https://www.viki.com
2408724101
// src/options/components/Header.tsx
2408824102
function Header() {
2408924103
return /* @__PURE__ */ o3(k, { children: /* @__PURE__ */ o3("nav", { className: "glarity--flex glarity--flex-row glarity--justify-between glarity--items-center glarity--mt-5 glarity--px-2", children: [
24090-
/* @__PURE__ */ o3("div", { className: "glarity--flex glarity--flex-row glarity--items-center glarity--gap-2", children: /* @__PURE__ */ o3("a", { href: "https://glarity.app/", target: "_blank", rel: "noreferrer", children: [
24104+
/* @__PURE__ */ o3("div", { className: "glarity--flex glarity--flex-row glarity--items-center glarity--gap-2", children: /* @__PURE__ */ o3("a", { href: "https://github.com/zhangferry/SummarAI", target: "_blank", rel: "noreferrer", children: [
2409124105
/* @__PURE__ */ o3(
2409224106
"img",
2409324107
{
2409424108
src: logo_default,
2409524109
className: "glarity--w-10 glarity--h-10 glarity--rounded-lg",
24096-
style: { "vertical-align": "middle" }
24110+
style: { verticalAlign: "middle" }
2409724111
}
2409824112
),
2409924113
/* @__PURE__ */ o3("span", { className: "font-semibold", children: [

packages/chromium/popup.js

Lines changed: 46 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -28226,13 +28226,46 @@
2822628226

2822728227
// src/config/index.ts
2822828228
var import_webextension_polyfill = __toESM(require_browser_polyfill());
28229+
async function getProviderConfigs() {
28230+
const { provider = "chatgpt" /* ChatGPT */ } = await import_webextension_polyfill.default.storage.local.get("provider");
28231+
const configKey = `provider:${"gpt3" /* GPT3 */}`;
28232+
const result = await import_webextension_polyfill.default.storage.local.get(configKey);
28233+
return {
28234+
provider,
28235+
configs: {
28236+
["gpt3" /* GPT3 */]: result[configKey]
28237+
}
28238+
};
28239+
}
2822928240
var BASE_URL = "https://chat.openai.com";
2823028241

2823128242
// src/utils/utils.ts
2823228243
var import_webextension_polyfill2 = __toESM(require_browser_polyfill());
2823328244
var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
2823428245
var isFirefox = navigator.userAgent.indexOf("Firefox") != -1;
2823528246
var isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent);
28247+
var availableModels = [
28248+
{
28249+
name: "gpt-3.5-turbo",
28250+
maxTokens: 4096
28251+
},
28252+
{
28253+
name: "gpt-3.5-turbo-16k",
28254+
maxTokens: 16384
28255+
},
28256+
{
28257+
name: "gpt-4",
28258+
maxTokens: 8192
28259+
},
28260+
{
28261+
name: "gpt-4-32k",
28262+
maxTokens: 32768
28263+
},
28264+
{
28265+
name: "text-davinci-003",
28266+
maxTokens: 4097
28267+
}
28268+
];
2823628269
async function* streamAsyncIterable(stream) {
2823728270
const reader = stream.getReader();
2823828271
try {
@@ -28542,20 +28575,19 @@ ${replylanguagePrompt("zh-CN")}
2854228575
// src/popup/popup.ts
2854328576
var import_parser = __toESM(require_mercury());
2854428577
document.addEventListener("DOMContentLoaded", () => {
28545-
const tokenLimit = 4096;
28578+
const defaultTokenLimit = 4096;
2854628579
async function fetchData(response, promptType) {
2854728580
const loadingElement = document.getElementById("loading");
2854828581
loadingElement.style.display = "block";
2854928582
const result = await import_parser.default.parse(response.url, { contentType: "text" });
2855028583
console.log(`extract content: ${result.content}`);
28551-
const question = truncateText(result.content, tokenLimit);
2855228584
try {
2855328585
const promptTemplate = promptType === 0 /* Summary */ ? summerDefaultPrompt : zettelkastenPrompt;
2855428586
const combinedPrompt = articlePrompt({
28555-
content: question,
28587+
content: result.content,
2855628588
prompt: promptTemplate
2855728589
});
28558-
await getContentBasedOnType(combinedPrompt, displayAnswer);
28590+
await requestSummary(combinedPrompt, displayAnswer);
2855928591
} catch (error) {
2856028592
displayError(error.message);
2856128593
} finally {
@@ -28587,32 +28619,26 @@ ${replylanguagePrompt("zh-CN")}
2858728619
}
2858828620
return truncatedText;
2858928621
}
28590-
async function getContentBasedOnType(prompt, callback) {
28622+
async function requestSummary(content, callback) {
2859128623
const controller = new AbortController();
28592-
let allValue = await import_webextension_polyfill4.default.storage.local.get(null);
28593-
console.log(`allvalue: ${JSON.stringify(allValue)}`);
28594-
const providerKey = "provider";
28595-
let providerValue = await import_webextension_polyfill4.default.storage.local.get(providerKey);
28596-
providerValue = providerValue[providerKey];
28597-
const configKey = `${providerKey}:` + providerValue;
28598-
let providerConfig = await import_webextension_polyfill4.default.storage.local.get(configKey);
28599-
providerConfig = providerConfig[configKey];
28600-
console.log(JSON.stringify(providerConfig));
28624+
const providerConfigs = await getProviderConfigs();
28625+
console.log(`providerConfigs: ${JSON.stringify(providerConfigs)}`);
28626+
let prompt;
2860128627
let provider;
28602-
if (`${providerValue}` == "gpt3") {
28603-
const apiKey = providerConfig["apiKey"];
28628+
if (providerConfigs.provider == "gpt3" /* GPT3 */) {
28629+
const { apiKey, model } = providerConfigs.configs["gpt3" /* GPT3 */];
2860428630
if (!apiKey) {
2860528631
throw new Error(`You should config API Key first`);
2860628632
}
28607-
var model = "gpt-3.5-turbo";
28608-
if (providerConfig["model"]) {
28609-
model = providerConfig["model"];
28610-
}
28633+
const currentModel = availableModels.find((theModel) => theModel.name === model);
28634+
prompt = truncateText(content, currentModel.maxTokens);
2861128635
provider = new OpenAIProvider(apiKey, model);
2861228636
} else {
28637+
prompt = truncateText(content, defaultTokenLimit);
2861328638
const token = await getChatGPTAccessToken();
2861428639
provider = new ChatGPTProvider(token);
2861528640
}
28641+
console.log(`prompt content: ${prompt}`);
2861628642
const { cleanup } = await provider.generateAnswer({
2861728643
prompt,
2861828644
signal: controller.signal,
@@ -28648,7 +28674,6 @@ ${replylanguagePrompt("zh-CN")}
2864828674
await import_webextension_polyfill4.default.scripting.executeScript({ target: { tabId: tabs[0].id }, files: ["content.js"] });
2864928675
const results = await import_webextension_polyfill4.default.tabs.sendMessage(tabs[0].id, { action: "getTextContent" });
2865028676
const response = results && results.textContent ? results.textContent : "";
28651-
console.log(JSON.stringify(response));
2865228677
await fetchData(response, type);
2865328678
}
2865428679
function setupEventListeners() {

src/options/ProviderSelect.tsx

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import useSWR from 'swr'
44
import { getProviderConfigs, ProviderConfigs, ProviderType, saveProviderConfigs } from '@/config'
55
import { Select as Aselect } from 'antd'
66
const { Option } = Aselect
7-
import { isSafari } from '@/utils/utils'
7+
import { isSafari, availableModels } from '@/utils/utils'
88

99
interface ConfigProps {
1010
config: ProviderConfigs
@@ -137,15 +137,7 @@ function ProviderSelect() {
137137
return { config }
138138
})
139139

140-
const models = [
141-
'gpt-3.5-turbo',
142-
'gpt-3.5-turbo-0301',
143-
'text-davinci-003',
144-
// 'text-curie-001',
145-
// 'text-babbage-001',
146-
// 'text-ada-001',
147-
// 'text-chat-davinci-002-20221122',
148-
]
140+
const models = availableModels.map(model => model.name)
149141

150142
if (query.isLoading) {
151143
return <Spinner />

src/options/components/CustomizePrompt.tsx

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,6 @@ import {
1212
customizePrompt,
1313
customizePromptSearch,
1414
customizePrompt1,
15-
customizePromptClickbait,
16-
customizePromptPage,
17-
customizePromptComment,
18-
customizePromptCommentAmazon,
19-
customizePromptCommentYoutube,
2015
} from '@/utils/prompt'
2116

2217
interface Props {

src/options/components/EnableGlarity.tsx

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import React from 'react'
22
import { useCallback, useEffect, useState } from 'preact/hooks'
3-
import { SearchEngine } from '@/content-script/search-engine-configs'
43
import { Text, Card, Button, Spacer, useToasts, Checkbox } from '@geist-ui/core'
54
import { updateUserConfig } from '@/config'
65
import { changeToast, isIOS } from '@/utils/utils'
@@ -9,11 +8,10 @@ interface Props {
98
enableSites: string[]
109
setEnableSites: (site: string[]) => void
1110
allSites: string[]
12-
supportSites: Record<string, SearchEngine>
1311
}
1412

1513
function EnableGlarity(props: Props) {
16-
const { enableSites, setEnableSites, allSites, supportSites } = props
14+
const { enableSites, setEnableSites, allSites } = props
1715
const { setToast } = useToasts()
1816
const [allSelect, setAllSelect] = useState(true)
1917

@@ -60,13 +58,6 @@ function EnableGlarity(props: Props) {
6058
onChange={onChangeSites}
6159
className="glarity--support__sites"
6260
>
63-
{Object.entries(supportSites).map(([k, v]) => {
64-
return (
65-
<Checkbox key={k} value={v.siteValue} className="glarity--support__sites--item">
66-
{v.siteName}
67-
</Checkbox>
68-
)
69-
})}
7061
</Checkbox.Group>
7162
</Card.Content>
7263
<Card.Footer>

src/options/components/Header.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ function Header() {
66
<>
77
<nav className="glarity--flex glarity--flex-row glarity--justify-between glarity--items-center glarity--mt-5 glarity--px-2">
88
<div className="glarity--flex glarity--flex-row glarity--items-center glarity--gap-2">
9-
<a href="https://glarity.app/" target="_blank" rel="noreferrer">
9+
<a href="https://github.com/zhangferry/SummarAI" target="_blank" rel="noreferrer">
1010
<img
1111
src={logo}
1212
className="glarity--w-10 glarity--h-10 glarity--rounded-lg"
13-
style={{ 'vertical-align': 'middle' }}
13+
style={{ verticalAlign: 'middle' }}
1414
/>
1515
<span className="font-semibold">
1616
{AppName} (v

src/popup/popup.ts

Lines changed: 17 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,16 @@ import { Answer, Provider } from './types'
44
import { OpenAIProvider } from './OpenAIProvider'
55
import { articlePrompt, summerDefaultPrompt, zettelkastenPrompt } from './prompt'
66
import Parser from "@postlight/parser"
7+
import { availableModels } from '@/utils/utils'
8+
import { ProviderType, getProviderConfigs } from '@/config'
79

810
enum PromptType {
911
Summary,
1012
Zettelkasten
1113
}
1214

1315
document.addEventListener("DOMContentLoaded", () => {
14-
const tokenLimit = 4096 // for gpt-3.5-turbo
16+
const defaultTokenLimit = 4096 // for gpt-3.5-turbo
1517

1618
async function fetchData(response, promptType: PromptType) {
1719

@@ -20,17 +22,14 @@ document.addEventListener("DOMContentLoaded", () => {
2022

2123
const result = await Parser.parse(response.url, { contentType: "text" });
2224
console.log(`extract content: ${result.content}`)
23-
const question = truncateText(result.content, tokenLimit)
2425

2526
try {
26-
2727
const promptTemplate = promptType === PromptType.Summary ? summerDefaultPrompt : zettelkastenPrompt
28-
2928
const combinedPrompt = articlePrompt({
30-
content: question,
29+
content: result.content,
3130
prompt: promptTemplate})
3231

33-
await getContentBasedOnType(combinedPrompt, displayAnswer)
32+
await requestSummary(combinedPrompt, displayAnswer)
3433
} catch (error) {
3534
displayError(error.message)
3635
} finally {
@@ -74,40 +73,31 @@ document.addEventListener("DOMContentLoaded", () => {
7473
truncatedText += char
7574
tokenCount += charTokenCount
7675
}
77-
7876
return truncatedText
7977
}
8078

81-
async function getContentBasedOnType(prompt: string, callback) {
82-
79+
async function requestSummary(content: string, callback) {
8380
const controller = new AbortController()
8481

85-
let allValue = await Browser.storage.local.get(null)
86-
console.log(`allvalue: ${JSON.stringify(allValue)}`)
87-
88-
const providerKey = "provider"
89-
let providerValue = await Browser.storage.local.get(providerKey)
90-
providerValue = providerValue[providerKey]
91-
const configKey = `${providerKey}:` + providerValue
92-
let providerConfig = await Browser.storage.local.get(configKey)
93-
providerConfig = providerConfig[configKey]
94-
console.log(JSON.stringify(providerConfig))
95-
82+
const providerConfigs = await getProviderConfigs()
83+
console.log(`providerConfigs: ${JSON.stringify(providerConfigs)}`)
84+
85+
let prompt: string
9686
let provider: Provider
97-
if (`${providerValue}` == "gpt3") {
98-
const apiKey = providerConfig["apiKey"]
87+
if (providerConfigs.provider == ProviderType.GPT3) {
88+
const { apiKey, model } = providerConfigs.configs[ProviderType.GPT3]
9989
if (!apiKey) {
10090
throw new Error(`You should config API Key first`)
10191
}
102-
var model = "gpt-3.5-turbo" // default model
103-
if (providerConfig["model"]) {
104-
model = providerConfig["model"]
105-
}
92+
const currentModel = availableModels.find(theModel => theModel.name === model);
93+
prompt = truncateText(content, currentModel.maxTokens)
10694
provider = new OpenAIProvider(apiKey, model)
10795
} else {
96+
prompt = truncateText(content, defaultTokenLimit)
10897
const token = await getChatGPTAccessToken()
10998
provider = new ChatGPTProvider(token)
11099
}
100+
console.log(`prompt content: ${prompt}`)
111101
const { cleanup } = await provider.generateAnswer({
112102
prompt: prompt,
113103
signal: controller.signal,
@@ -118,7 +108,6 @@ document.addEventListener("DOMContentLoaded", () => {
118108
callback(event.data)
119109
}
120110
})
121-
122111
cleanup?.()
123112
}
124113

@@ -149,7 +138,7 @@ document.addEventListener("DOMContentLoaded", () => {
149138
await Browser.scripting.executeScript({target: {tabId: tabs[0].id}, files: ['content.js']})
150139
const results = await Browser.tabs.sendMessage(tabs[0].id, {action: "getTextContent"})
151140
const response = results && results.textContent ? results.textContent : ""
152-
console.log(JSON.stringify(response))
141+
// console.log(JSON.stringify(response))
153142
await fetchData(response, type)
154143
}
155144

0 commit comments

Comments
 (0)