From 22baebaf8c49f81bb22c39a7753ac6695d515166 Mon Sep 17 00:00:00 2001 From: H0llyW00dzZ Date: Wed, 21 Feb 2024 04:19:12 +0700 Subject: [PATCH 1/9] [Cherry Pick] Fix [Utils] Regex trimTopic - [+] fix(utils.ts): update regular expressions in trimTopic function to handle asterisks --- app/utils.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/utils.ts b/app/utils.ts index 33b8eccd2..b502eab36 100644 --- a/app/utils.ts +++ b/app/utils.ts @@ -9,8 +9,9 @@ export function trimTopic(topic: string) { // This will remove the specified punctuation from the end of the string // and also trim quotes from both the start and end if they exist. return topic - .replace(/^["“”]+|["“”]+$/g, "") - .replace(/[,。!?”“"、,.!?]*$/, ""); + // fix for gemini + .replace(/^["“”*]+|["“”*]+$/g, "") + .replace(/[,。!?”“"、,.!?*]*$/, ""); } export async function copyToClipboard(text: string) { From 08fa22749aea8f497811f684bd9c7ef68d698666 Mon Sep 17 00:00:00 2001 From: fred-bf <157469842+fred-bf@users.noreply.github.com> Date: Tue, 27 Feb 2024 17:28:01 +0800 Subject: [PATCH 2/9] fix: add max_tokens when using vision model (#4157) --- app/client/platforms/openai.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/client/platforms/openai.ts b/app/client/platforms/openai.ts index 919716bfb..437aff582 100644 --- a/app/client/platforms/openai.ts +++ b/app/client/platforms/openai.ts @@ -110,6 +110,16 @@ export class ChatGPTApi implements LLMApi { // Please do not ask me why not send max_tokens, no reason, this param is just shit, I dont want to explain anymore. }; + // add max_tokens to vision model + if (visionModel) { + Object.defineProperty(requestPayload, "max_tokens", { + enumerable: true, + configurable: true, + writable: true, + value: Math.max(modelConfig.max_tokens, 4096), + }); + } + console.log("[Request] openai payload: ", requestPayload); const shouldStream = !!options.config.stream; From 43e5dc22920c60bf87fc1b78bf95c441356bb1d8 Mon Sep 17 00:00:00 2001 From: Fred Date: Wed, 28 Feb 2024 11:33:43 +0800 Subject: [PATCH 3/9] fix: fix the method to detect vision model --- app/client/platforms/openai.ts | 2 +- app/utils.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/client/platforms/openai.ts b/app/client/platforms/openai.ts index 437aff582..629158843 100644 --- a/app/client/platforms/openai.ts +++ b/app/client/platforms/openai.ts @@ -116,7 +116,7 @@ export class ChatGPTApi implements LLMApi { enumerable: true, configurable: true, writable: true, - value: Math.max(modelConfig.max_tokens, 4096), + value: modelConfig.max_tokens, }); } diff --git a/app/utils.ts b/app/utils.ts index 33b8eccd2..0436a128a 100644 --- a/app/utils.ts +++ b/app/utils.ts @@ -292,8 +292,8 @@ export function getMessageImages(message: RequestMessage): string[] { export function isVisionModel(model: string) { return ( - model.startsWith("gpt-4-vision") || - model.startsWith("gemini-pro-vision") || - !DEFAULT_MODELS.find((m) => m.name == model) + // model.startsWith("gpt-4-vision") || + // model.startsWith("gemini-pro-vision") || + model.includes("vision") ); } From bd19e97cf84755e4ac20c731bae292c2a09b76b7 Mon Sep 17 00:00:00 2001 From: Snow Kawashiro Date: Wed, 28 Feb 2024 20:05:13 +0800 Subject: [PATCH 4/9] add_image_pasting --- app/components/chat.tsx | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/app/components/chat.tsx b/app/components/chat.tsx index 9144f9a5f..22acb8e4f 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -1100,6 +1100,45 @@ function _Chat() { }; // eslint-disable-next-line react-hooks/exhaustive-deps }, []); + + const handlePaste = useCallback( + async (event: React.ClipboardEvent) => { + const items = (event.clipboardData || window.clipboardData).items; + for (const item of items) { + if (item.kind === "file" && item.type.startsWith("image/")) { + event.preventDefault(); + const file = item.getAsFile(); + if (file) { + const images: string[] = []; + images.push(...attachImages); + images.push( + ...(await new Promise((res, rej) => { + setUploading(true); + const imagesData: string[] = []; + compressImage(file, 256 * 1024) + .then((dataUrl) => { + imagesData.push(dataUrl); + setUploading(false); + res(imagesData); + }) + .catch((e) => { + setUploading(false); + rej(e); + }); + })), + ); + const imagesLength = images.length; + + if (imagesLength > 3) { + images.splice(3, imagesLength - 3); + } + setAttachImages(images); + } + } + } + }, + [attachImages], + ); async function uploadImage() { const images: string[] = []; @@ -1449,6 +1488,7 @@ function _Chat() { onKeyDown={onInputKeyDown} onFocus={scrollToBottom} onClick={scrollToBottom} + onPaste={handlePaste} rows={inputRows} autoFocus={autoFocus} style={{ From e7051353eb8aff0e89a5e0a5da13cfcc5bcb4b6f Mon Sep 17 00:00:00 2001 From: Snow Kawashiro Date: Wed, 28 Feb 2024 20:38:00 +0800 Subject: [PATCH 5/9] vision_model_only --- app/components/chat.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/components/chat.tsx b/app/components/chat.tsx index 22acb8e4f..d730a4a10 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -1102,6 +1102,8 @@ function _Chat() { }, []); const handlePaste = useCallback( + const currentModel = chatStore.currentSession().mask.modelConfig.model; + if(!isVisionModel(currentModel)){return;} async (event: React.ClipboardEvent) => { const items = (event.clipboardData || window.clipboardData).items; for (const item of items) { @@ -1137,7 +1139,7 @@ function _Chat() { } } }, - [attachImages], + [attachImages, chatStore], ); async function uploadImage() { From 9775660da7a7fd6b9edc616c42def0dc69b534d4 Mon Sep 17 00:00:00 2001 From: Snow Kawashiro Date: Wed, 28 Feb 2024 20:45:42 +0800 Subject: [PATCH 6/9] Update chat.tsx --- app/components/chat.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/components/chat.tsx b/app/components/chat.tsx index d730a4a10..bcd0e605d 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -1102,9 +1102,9 @@ function _Chat() { }, []); const handlePaste = useCallback( - const currentModel = chatStore.currentSession().mask.modelConfig.model; - if(!isVisionModel(currentModel)){return;} async (event: React.ClipboardEvent) => { + const currentModel = chatStore.currentSession().mask.modelConfig.model; + if(!isVisionModel(currentModel)){return;} const items = (event.clipboardData || window.clipboardData).items; for (const item of items) { if (item.kind === "file" && item.type.startsWith("image/")) { From 86ae4b2a75b421dbaa05e33579a55f33d7c88a76 Mon Sep 17 00:00:00 2001 From: aliceric27 Date: Sat, 2 Mar 2024 23:58:23 +0800 Subject: [PATCH 7/9] slightly polishes the tw text. --- app/locales/tw.ts | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/app/locales/tw.ts b/app/locales/tw.ts index 80e1b054f..89e1879bb 100644 --- a/app/locales/tw.ts +++ b/app/locales/tw.ts @@ -7,8 +7,8 @@ const tw = { WIP: "該功能仍在開發中……", Error: { Unauthorized: isApp - ? "檢測到無效 API Key,請前往[設定](/#/settings)頁檢查 API Key 是否配置正確。" - : "訪問密碼不正確或為空,請前往[登錄](/#/auth)頁輸入正確的訪問密碼,或者在[設定](/#/settings)頁填入你自己的 OpenAI API Key。", + ? "檢測到無效 API Key,請前往[設定](/#/settings)頁檢查 API Key 是否設定正確。" + : "訪問密碼不正確或為空,請前往[登入](/#/auth)頁輸入正確的訪問密碼,或者在[設定](/#/settings)頁填入你自己的 OpenAI API Key。", }, Auth: { @@ -17,7 +17,7 @@ const tw = { SubTips: "或者輸入你的 OpenAI 或 Google API 密鑰", Input: "在此處填寫訪問碼", Confirm: "確認", - Later: "稍後再說", + Later: "稍候再說", }, ChatItem: { ChatItemCount: (count: number) => `${count} 則對話`, @@ -53,8 +53,8 @@ const tw = { del: "刪除聊天", }, InputActions: { - Stop: "停止響應", - ToBottom: "滾到最新", + Stop: "停止回應", + ToBottom: "移至最新", Theme: { auto: "自動主題", light: "亮色模式", @@ -107,7 +107,7 @@ const tw = { }, }, Select: { - Search: "搜索消息", + Search: "查詢消息", All: "選取全部", Latest: "最近幾條", Clear: "清除選中", @@ -133,15 +133,15 @@ const tw = { Danger: { Reset: { Title: "重置所有設定", - SubTitle: "重置所有設定項回默認值", + SubTitle: "重置所有設定項回預設值", Action: "立即重置", Confirm: "確認重置所有設定?", }, Clear: { - Title: "清除所有數據", - SubTitle: "清除所有聊天、設定數據", + Title: "清除所有資料", + SubTitle: "清除所有聊天、設定資料", Action: "立即清除", - Confirm: "確認清除所有聊天、設定數據?", + Confirm: "確認清除所有聊天、設定資料?", }, }, Lang: { @@ -182,14 +182,14 @@ const tw = { SubTitle: "根據對話內容生成合適的標題", }, Sync: { - CloudState: "雲端數據", + CloudState: "雲端資料", NotSyncYet: "還沒有進行過同步", Success: "同步成功", Fail: "同步失敗", Config: { Modal: { - Title: "配置雲端同步", + Title: "設定雲端同步", Check: "檢查可用性", }, SyncType: { @@ -218,7 +218,7 @@ const tw = { }, }, - LocalState: "本地數據", + LocalState: "本地資料", Overview: (overview: any) => { return `${overview.chat} 次對話,${overview.message} 條消息,${overview.prompt} 條提示詞,${overview.mask} 個面具`; }, @@ -440,8 +440,8 @@ const tw = { More: "搜尋更多", }, URLCommand: { - Code: "檢測到鏈接中已經包含訪問碼,是否自動填入?", - Settings: "檢測到鏈接中包含了預制設置,是否自動填入?", + Code: "檢測到連結中已經包含訪問碼,是否自動填入?", + Settings: "檢測到連結中包含了預設設定,是否自動填入?", }, UI: { Confirm: "確認", @@ -452,7 +452,7 @@ const tw = { Export: "導出", Import: "導入", Sync: "同步", - Config: "配置", + Config: "設定", }, Exporter: { Description: { From e1066434d06ce8a12f7219a0604c1d65fd40e0fb Mon Sep 17 00:00:00 2001 From: aliceric27 Date: Sun, 3 Mar 2024 00:23:00 +0800 Subject: [PATCH 8/9] fix some text --- app/locales/tw.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/locales/tw.ts b/app/locales/tw.ts index 89e1879bb..b20ff6c80 100644 --- a/app/locales/tw.ts +++ b/app/locales/tw.ts @@ -385,7 +385,7 @@ const tw = { Edit: "前置上下文和歷史記憶", Add: "新增一條", Clear: "上下文已清除", - Revert: "恢覆上下文", + Revert: "恢復上下文", }, Plugin: { Name: "外掛" }, FineTuned: { Sysmessage: "你是一個助手" }, From e71094d4a8f3650265789c580b301218c4ade7d3 Mon Sep 17 00:00:00 2001 From: fred-bf <157469842+fred-bf@users.noreply.github.com> Date: Tue, 5 Mar 2024 17:36:52 +0800 Subject: [PATCH 9/9] chore: update GTM_ID definition, close #4217 --- app/config/server.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/config/server.ts b/app/config/server.ts index c455d0b73..dffc2563e 100644 --- a/app/config/server.ts +++ b/app/config/server.ts @@ -30,6 +30,9 @@ declare global { // google only GOOGLE_API_KEY?: string; GOOGLE_URL?: string; + + // google tag manager + GTM_ID?: string; } } }