From 74fa065266687921e83446358018d7d84ab6fd78 Mon Sep 17 00:00:00 2001 From: Marcus Schiesser Date: Wed, 5 Jul 2023 00:07:26 +0700 Subject: [PATCH 01/17] feat: add setting to hide builtin masks --- app/components/settings.tsx | 22 ++++++++++++++++++++-- app/locales/ar.ts | 10 ++++++++-- app/locales/cn.ts | 10 ++++++++-- app/locales/cs.ts | 10 ++++++++-- app/locales/de.ts | 10 ++++++++-- app/locales/en.ts | 10 ++++++++-- app/locales/es.ts | 10 ++++++++-- app/locales/fr.ts | 12 +++++++++--- app/locales/it.ts | 10 ++++++++-- app/locales/jp.ts | 10 ++++++++-- app/locales/ko.ts | 10 ++++++++-- app/locales/ru.ts | 10 ++++++++-- app/locales/tr.ts | 10 ++++++++-- app/locales/tw.ts | 10 ++++++++-- app/locales/vi.ts | 10 ++++++++-- app/store/config.ts | 1 + app/store/mask.ts | 1 + 17 files changed, 135 insertions(+), 31 deletions(-) diff --git a/app/components/settings.tsx b/app/components/settings.tsx index 1ee7316ad..465b34ccc 100644 --- a/app/components/settings.tsx +++ b/app/components/settings.tsx @@ -538,10 +538,12 @@ export function Settings() { } > + + + + + + updateConfig( + (config) => + (config.dontAddBuiltinMasks = !e.currentTarget.checked), + ) + } + > + diff --git a/app/locales/ar.ts b/app/locales/ar.ts index 6ece142b4..dfdca9d78 100644 --- a/app/locales/ar.ts +++ b/app/locales/ar.ts @@ -130,8 +130,14 @@ const ar: PartialLocaleType = { SubTitle: "معاينة Markdown في فقاعة", }, Mask: { - Title: "شاشة تظهر الأقنعة", - SubTitle: "عرض شاشة تظهر الأقنعة قبل بدء الدردشة الجديدة", + Splash: { + Title: "شاشة تظهر الأقنعة", + SubTitle: "عرض شاشة تظهر الأقنعة قبل بدء الدردشة الجديدة", + }, + Builtin: { + Title: "Show Builtin Masks", + SubTitle: "Show builtin masks in mask list", + }, }, Prompt: { Disable: { diff --git a/app/locales/cn.ts b/app/locales/cn.ts index b8fa82163..c1a21da34 100644 --- a/app/locales/cn.ts +++ b/app/locales/cn.ts @@ -156,8 +156,14 @@ const cn = { SubTitle: "在预览气泡中预览 Markdown 内容", }, Mask: { - Title: "面具启动页", - SubTitle: "新建聊天时,展示面具启动页", + Splash: { + Title: "面具启动页", + SubTitle: "新建聊天时,展示面具启动页", + }, + Builtin: { + Title: "Show Builtin Masks", + SubTitle: "Show builtin masks in mask list", + }, }, Prompt: { Disable: { diff --git a/app/locales/cs.ts b/app/locales/cs.ts index 9f9afab05..d4d5e055f 100644 --- a/app/locales/cs.ts +++ b/app/locales/cs.ts @@ -87,8 +87,14 @@ const cs: PartialLocaleType = { SubTitle: "Zobrazit v náhledu bubliny", }, Mask: { - Title: "Úvodní obrazovka Masek", - SubTitle: "Před zahájením nového chatu zobrazte úvodní obrazovku Masek", + Splash: { + Title: "Úvodní obrazovka Masek", + SubTitle: "Před zahájením nového chatu zobrazte úvodní obrazovku Masek", + }, + Builtin: { + Title: "Show Builtin Masks", + SubTitle: "Show builtin masks in mask list", + }, }, Prompt: { Disable: { diff --git a/app/locales/de.ts b/app/locales/de.ts index b8158c12f..708fe3ec0 100644 --- a/app/locales/de.ts +++ b/app/locales/de.ts @@ -87,8 +87,14 @@ const de: PartialLocaleType = { SubTitle: "Preview markdown in bubble", }, Mask: { - Title: "Mask Splash Screen", - SubTitle: "Show a mask splash screen before starting new chat", + Splash: { + Title: "Mask Splash Screen", + SubTitle: "Show a mask splash screen before starting new chat", + }, + Builtin: { + Title: "Show Builtin Masks", + SubTitle: "Show builtin masks in mask list", + }, }, Prompt: { Disable: { diff --git a/app/locales/en.ts b/app/locales/en.ts index bf2557a6c..930b9f443 100644 --- a/app/locales/en.ts +++ b/app/locales/en.ts @@ -157,8 +157,14 @@ const en: LocaleType = { SubTitle: "Preview markdown in bubble", }, Mask: { - Title: "Mask Splash Screen", - SubTitle: "Show a mask splash screen before starting new chat", + Splash: { + Title: "Mask Splash Screen", + SubTitle: "Show a mask splash screen before starting new chat", + }, + Builtin: { + Title: "Show Builtin Masks", + SubTitle: "Show builtin masks in mask list", + }, }, Prompt: { Disable: { diff --git a/app/locales/es.ts b/app/locales/es.ts index e7f8cca4c..d578c3e70 100644 --- a/app/locales/es.ts +++ b/app/locales/es.ts @@ -87,8 +87,14 @@ const es: PartialLocaleType = { SubTitle: "Preview markdown in bubble", }, Mask: { - Title: "Mask Splash Screen", - SubTitle: "Show a mask splash screen before starting new chat", + Splash: { + Title: "Mask Splash Screen", + SubTitle: "Show a mask splash screen before starting new chat", + }, + Builtin: { + Title: "Show Builtin Masks", + SubTitle: "Show builtin masks in mask list", + }, }, Prompt: { Disable: { diff --git a/app/locales/fr.ts b/app/locales/fr.ts index b6b8c0321..57f114063 100644 --- a/app/locales/fr.ts +++ b/app/locales/fr.ts @@ -88,9 +88,15 @@ const fr: PartialLocaleType = { SubTitle: "Aperçu du Markdown dans une bulle", }, Mask: { - Title: "Écran de masque", - SubTitle: - "Afficher un écran de masque avant de démarrer une nouvelle discussion", + Splash: { + Title: "Écran de masque", + SubTitle: + "Afficher un écran de masque avant de démarrer une nouvelle discussion", + }, + Builtin: { + Title: "Show Builtin Masks", + SubTitle: "Show builtin masks in mask list", + }, }, Prompt: { Disable: { diff --git a/app/locales/it.ts b/app/locales/it.ts index 8962968a5..dafb5cce4 100644 --- a/app/locales/it.ts +++ b/app/locales/it.ts @@ -87,8 +87,14 @@ const it: PartialLocaleType = { SubTitle: "Preview markdown in bubble", }, Mask: { - Title: "Mask Splash Screen", - SubTitle: "Show a mask splash screen before starting new chat", + Splash: { + Title: "Mask Splash Screen", + SubTitle: "Show a mask splash screen before starting new chat", + }, + Builtin: { + Title: "Show Builtin Masks", + SubTitle: "Show builtin masks in mask list", + }, }, Prompt: { Disable: { diff --git a/app/locales/jp.ts b/app/locales/jp.ts index d2feca4d8..42ec6aaba 100644 --- a/app/locales/jp.ts +++ b/app/locales/jp.ts @@ -104,8 +104,14 @@ const jp: PartialLocaleType = { SubTitle: "プレビューバブルでマークダウンコンテンツをプレビュー", }, Mask: { - Title: "キャラクターページ", - SubTitle: "新規チャット作成時にキャラクターページを表示する", + Splash: { + Title: "キャラクターページ", + SubTitle: "新規チャット作成時にキャラクターページを表示する", + }, + Builtin: { + Title: "Show Builtin Masks", + SubTitle: "Show builtin masks in mask list", + }, }, Prompt: { Disable: { diff --git a/app/locales/ko.ts b/app/locales/ko.ts index a3a5f73dc..0a3ec8230 100644 --- a/app/locales/ko.ts +++ b/app/locales/ko.ts @@ -87,8 +87,14 @@ const ko: PartialLocaleType = { SubTitle: "버블에서 마크다운 미리 보기", }, Mask: { - Title: "마스크 시작 화면", - SubTitle: "새로운 채팅 시작 전에 마스크 시작 화면 표시", + Splash: { + Title: "마스크 시작 화면", + SubTitle: "새로운 채팅 시작 전에 마스크 시작 화면 표시", + }, + Builtin: { + Title: "Show Builtin Masks", + SubTitle: "Show builtin masks in mask list", + }, }, Prompt: { Disable: { diff --git a/app/locales/ru.ts b/app/locales/ru.ts index 9121e2782..f3398d685 100644 --- a/app/locales/ru.ts +++ b/app/locales/ru.ts @@ -87,8 +87,14 @@ const ru: PartialLocaleType = { SubTitle: "Предварительный просмотр markdown в пузыре", }, Mask: { - Title: "Экран заставки маски", - SubTitle: "Показывать экран заставки маски перед началом нового чата", + Splash: { + Title: "Экран заставки маски", + SubTitle: "Показывать экран заставки маски перед началом нового чата", + }, + Builtin: { + Title: "Show Builtin Masks", + SubTitle: "Show builtin masks in mask list", + }, }, Prompt: { Disable: { diff --git a/app/locales/tr.ts b/app/locales/tr.ts index e199f115f..e1a0c4d76 100644 --- a/app/locales/tr.ts +++ b/app/locales/tr.ts @@ -87,8 +87,14 @@ const tr: PartialLocaleType = { SubTitle: "Preview markdown in bubble", }, Mask: { - Title: "Mask Splash Screen", - SubTitle: "Show a mask splash screen before starting new chat", + Splash: { + Title: "Mask Splash Screen", + SubTitle: "Show a mask splash screen before starting new chat", + }, + Builtin: { + Title: "Show Builtin Masks", + SubTitle: "Show builtin masks in mask list", + }, }, Prompt: { Disable: { diff --git a/app/locales/tw.ts b/app/locales/tw.ts index cb92a81d8..9282acd53 100644 --- a/app/locales/tw.ts +++ b/app/locales/tw.ts @@ -85,8 +85,14 @@ const tw: PartialLocaleType = { SubTitle: "在预览气泡中预览 Markdown 内容", }, Mask: { - Title: "面具启动页", - SubTitle: "新建聊天时,展示面具启动页", + Splash: { + Title: "面具启动页", + SubTitle: "新建聊天时,展示面具启动页", + }, + Builtin: { + Title: "Show Builtin Masks", + SubTitle: "Show builtin masks in mask list", + }, }, Prompt: { Disable: { diff --git a/app/locales/vi.ts b/app/locales/vi.ts index cc0178b1f..f345d8c73 100644 --- a/app/locales/vi.ts +++ b/app/locales/vi.ts @@ -87,8 +87,14 @@ const vi: PartialLocaleType = { SubTitle: "Xem trước nội dung markdown bằng bong bóng", }, Mask: { - Title: "Mask Splash Screen", - SubTitle: "Chớp màn hình khi bắt đầu cuộc trò chuyện mới", + Splash: { + Title: "Mask Splash Screen", + SubTitle: "Chớp màn hình khi bắt đầu cuộc trò chuyện mới", + }, + Builtin: { + Title: "Show Builtin Masks", + SubTitle: "Show builtin masks in mask list", + }, }, Prompt: { Disable: { diff --git a/app/store/config.ts b/app/store/config.ts index 68e299150..3939d114e 100644 --- a/app/store/config.ts +++ b/app/store/config.ts @@ -29,6 +29,7 @@ export const DEFAULT_CONFIG = { disablePromptHint: false, dontShowMaskSplashScreen: false, // dont show splash screen when create chat + dontAddBuiltinMasks: false, // dont add builtin masks modelConfig: { model: "gpt-3.5-turbo" as ModelType, diff --git a/app/store/mask.ts b/app/store/mask.ts index 6d6377c37..57e1b6676 100644 --- a/app/store/mask.ts +++ b/app/store/mask.ts @@ -90,6 +90,7 @@ export const useMaskStore = create()( (a, b) => b.id - a.id, ); const config = useAppConfig.getState(); + if (config.dontAddBuiltinMasks) return userMasks; const buildinMasks = BUILTIN_MASKS.map( (m) => ({ From 089e3b894626fd2e3695dc61f40a486879c030d4 Mon Sep 17 00:00:00 2001 From: sunls233 Date: Wed, 5 Jul 2023 14:27:37 +0800 Subject: [PATCH 02/17] fix summarize don't send --- app/store/chat.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/store/chat.ts b/app/store/chat.ts index 4c466a295..222b29c94 100644 --- a/app/store/chat.ts +++ b/app/store/chat.ts @@ -420,7 +420,7 @@ export const useChatStore = create()( modelConfig.sendMemory && session.memoryPrompt && session.memoryPrompt.length > 0 && - session.lastSummarizeIndex <= clearContextIndex; + session.lastSummarizeIndex > clearContextIndex; const longTermMemoryPrompts = shouldSendLongTermMemory ? [get().getMemoryPrompt()] : []; From 54bd07702c5b8e61dc52524cdc8aa3bc82a97170 Mon Sep 17 00:00:00 2001 From: Yidadaa Date: Wed, 5 Jul 2023 22:39:25 +0800 Subject: [PATCH 03/17] refactor: #2256 hide builtin masks --- app/components/settings.tsx | 4 ++-- app/locales/ar.ts | 4 ---- app/locales/cn.ts | 4 ++-- app/locales/cs.ts | 4 ---- app/locales/de.ts | 4 ---- app/locales/en.ts | 4 ++-- app/locales/es.ts | 4 ---- app/locales/fr.ts | 4 ---- app/locales/it.ts | 4 ---- app/locales/jp.ts | 4 ---- app/locales/ko.ts | 4 ---- app/locales/ru.ts | 4 ---- app/locales/tr.ts | 4 ---- app/locales/tw.ts | 4 ---- app/locales/vi.ts | 4 ---- app/store/config.ts | 7 ++++--- app/store/mask.ts | 2 +- 17 files changed, 11 insertions(+), 58 deletions(-) diff --git a/app/components/settings.tsx b/app/components/settings.tsx index ca9713099..5980a34ef 100644 --- a/app/components/settings.tsx +++ b/app/components/settings.tsx @@ -568,11 +568,11 @@ export function Settings() { > updateConfig( (config) => - (config.dontAddBuiltinMasks = !e.currentTarget.checked), + (config.hideBuiltinMasks = e.currentTarget.checked), ) } > diff --git a/app/locales/ar.ts b/app/locales/ar.ts index dfdca9d78..b3b5c0216 100644 --- a/app/locales/ar.ts +++ b/app/locales/ar.ts @@ -134,10 +134,6 @@ const ar: PartialLocaleType = { Title: "شاشة تظهر الأقنعة", SubTitle: "عرض شاشة تظهر الأقنعة قبل بدء الدردشة الجديدة", }, - Builtin: { - Title: "Show Builtin Masks", - SubTitle: "Show builtin masks in mask list", - }, }, Prompt: { Disable: { diff --git a/app/locales/cn.ts b/app/locales/cn.ts index c1a21da34..6c8b6c0a1 100644 --- a/app/locales/cn.ts +++ b/app/locales/cn.ts @@ -161,8 +161,8 @@ const cn = { SubTitle: "新建聊天时,展示面具启动页", }, Builtin: { - Title: "Show Builtin Masks", - SubTitle: "Show builtin masks in mask list", + Title: "隐藏内置面具", + SubTitle: "在所有面具列表中隐藏内置面具", }, }, Prompt: { diff --git a/app/locales/cs.ts b/app/locales/cs.ts index d4d5e055f..348e16afc 100644 --- a/app/locales/cs.ts +++ b/app/locales/cs.ts @@ -91,10 +91,6 @@ const cs: PartialLocaleType = { Title: "Úvodní obrazovka Masek", SubTitle: "Před zahájením nového chatu zobrazte úvodní obrazovku Masek", }, - Builtin: { - Title: "Show Builtin Masks", - SubTitle: "Show builtin masks in mask list", - }, }, Prompt: { Disable: { diff --git a/app/locales/de.ts b/app/locales/de.ts index 708fe3ec0..d7e88cc8b 100644 --- a/app/locales/de.ts +++ b/app/locales/de.ts @@ -91,10 +91,6 @@ const de: PartialLocaleType = { Title: "Mask Splash Screen", SubTitle: "Show a mask splash screen before starting new chat", }, - Builtin: { - Title: "Show Builtin Masks", - SubTitle: "Show builtin masks in mask list", - }, }, Prompt: { Disable: { diff --git a/app/locales/en.ts b/app/locales/en.ts index 930b9f443..ab489c25c 100644 --- a/app/locales/en.ts +++ b/app/locales/en.ts @@ -162,8 +162,8 @@ const en: LocaleType = { SubTitle: "Show a mask splash screen before starting new chat", }, Builtin: { - Title: "Show Builtin Masks", - SubTitle: "Show builtin masks in mask list", + Title: "Hide Builtin Masks", + SubTitle: "Hide builtin masks in mask list", }, }, Prompt: { diff --git a/app/locales/es.ts b/app/locales/es.ts index d578c3e70..0971f05c5 100644 --- a/app/locales/es.ts +++ b/app/locales/es.ts @@ -91,10 +91,6 @@ const es: PartialLocaleType = { Title: "Mask Splash Screen", SubTitle: "Show a mask splash screen before starting new chat", }, - Builtin: { - Title: "Show Builtin Masks", - SubTitle: "Show builtin masks in mask list", - }, }, Prompt: { Disable: { diff --git a/app/locales/fr.ts b/app/locales/fr.ts index 57f114063..72be76e1c 100644 --- a/app/locales/fr.ts +++ b/app/locales/fr.ts @@ -93,10 +93,6 @@ const fr: PartialLocaleType = { SubTitle: "Afficher un écran de masque avant de démarrer une nouvelle discussion", }, - Builtin: { - Title: "Show Builtin Masks", - SubTitle: "Show builtin masks in mask list", - }, }, Prompt: { Disable: { diff --git a/app/locales/it.ts b/app/locales/it.ts index dafb5cce4..acd3a7e93 100644 --- a/app/locales/it.ts +++ b/app/locales/it.ts @@ -91,10 +91,6 @@ const it: PartialLocaleType = { Title: "Mask Splash Screen", SubTitle: "Show a mask splash screen before starting new chat", }, - Builtin: { - Title: "Show Builtin Masks", - SubTitle: "Show builtin masks in mask list", - }, }, Prompt: { Disable: { diff --git a/app/locales/jp.ts b/app/locales/jp.ts index 42ec6aaba..090a428fa 100644 --- a/app/locales/jp.ts +++ b/app/locales/jp.ts @@ -108,10 +108,6 @@ const jp: PartialLocaleType = { Title: "キャラクターページ", SubTitle: "新規チャット作成時にキャラクターページを表示する", }, - Builtin: { - Title: "Show Builtin Masks", - SubTitle: "Show builtin masks in mask list", - }, }, Prompt: { Disable: { diff --git a/app/locales/ko.ts b/app/locales/ko.ts index 0a3ec8230..6f5ec7a9a 100644 --- a/app/locales/ko.ts +++ b/app/locales/ko.ts @@ -91,10 +91,6 @@ const ko: PartialLocaleType = { Title: "마스크 시작 화면", SubTitle: "새로운 채팅 시작 전에 마스크 시작 화면 표시", }, - Builtin: { - Title: "Show Builtin Masks", - SubTitle: "Show builtin masks in mask list", - }, }, Prompt: { Disable: { diff --git a/app/locales/ru.ts b/app/locales/ru.ts index f3398d685..06c945859 100644 --- a/app/locales/ru.ts +++ b/app/locales/ru.ts @@ -91,10 +91,6 @@ const ru: PartialLocaleType = { Title: "Экран заставки маски", SubTitle: "Показывать экран заставки маски перед началом нового чата", }, - Builtin: { - Title: "Show Builtin Masks", - SubTitle: "Show builtin masks in mask list", - }, }, Prompt: { Disable: { diff --git a/app/locales/tr.ts b/app/locales/tr.ts index e1a0c4d76..2383a5494 100644 --- a/app/locales/tr.ts +++ b/app/locales/tr.ts @@ -91,10 +91,6 @@ const tr: PartialLocaleType = { Title: "Mask Splash Screen", SubTitle: "Show a mask splash screen before starting new chat", }, - Builtin: { - Title: "Show Builtin Masks", - SubTitle: "Show builtin masks in mask list", - }, }, Prompt: { Disable: { diff --git a/app/locales/tw.ts b/app/locales/tw.ts index 9282acd53..1afb0eb71 100644 --- a/app/locales/tw.ts +++ b/app/locales/tw.ts @@ -89,10 +89,6 @@ const tw: PartialLocaleType = { Title: "面具启动页", SubTitle: "新建聊天时,展示面具启动页", }, - Builtin: { - Title: "Show Builtin Masks", - SubTitle: "Show builtin masks in mask list", - }, }, Prompt: { Disable: { diff --git a/app/locales/vi.ts b/app/locales/vi.ts index f345d8c73..428f93857 100644 --- a/app/locales/vi.ts +++ b/app/locales/vi.ts @@ -91,10 +91,6 @@ const vi: PartialLocaleType = { Title: "Mask Splash Screen", SubTitle: "Chớp màn hình khi bắt đầu cuộc trò chuyện mới", }, - Builtin: { - Title: "Show Builtin Masks", - SubTitle: "Show builtin masks in mask list", - }, }, Prompt: { Disable: { diff --git a/app/store/config.ts b/app/store/config.ts index 493a36879..fee009c09 100644 --- a/app/store/config.ts +++ b/app/store/config.ts @@ -32,7 +32,7 @@ export const DEFAULT_CONFIG = { disablePromptHint: false, dontShowMaskSplashScreen: false, // dont show splash screen when create chat - dontAddBuiltinMasks: false, // dont add builtin masks + hideBuiltinMasks: false, // dont add builtin masks models: DEFAULT_MODELS as any as LLMModel[], @@ -137,9 +137,9 @@ export const useAppConfig = create()( }), { name: StoreKey.Config, - version: 3.3, + version: 3.4, migrate(persistedState, version) { - if (version === 3.3) return persistedState as any; + if (version === 3.4) return persistedState as any; const state = persistedState as ChatConfig; state.modelConfig.sendMemory = true; @@ -149,6 +149,7 @@ export const useAppConfig = create()( state.modelConfig.top_p = 1; state.modelConfig.template = DEFAULT_INPUT_TEMPLATE; state.dontShowMaskSplashScreen = false; + state.hideBuiltinMasks = false; return state; }, diff --git a/app/store/mask.ts b/app/store/mask.ts index 57e1b6676..d55400522 100644 --- a/app/store/mask.ts +++ b/app/store/mask.ts @@ -90,7 +90,7 @@ export const useMaskStore = create()( (a, b) => b.id - a.id, ); const config = useAppConfig.getState(); - if (config.dontAddBuiltinMasks) return userMasks; + if (config.hideBuiltinMasks) return userMasks; const buildinMasks = BUILTIN_MASKS.map( (m) => ({ From 3863cfe78648885163c8326d9fb47db5658ca751 Mon Sep 17 00:00:00 2001 From: Yidadaa Date: Wed, 5 Jul 2023 22:41:10 +0800 Subject: [PATCH 04/17] fix: #2261 default enable gpt-4 models --- app/constant.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/constant.ts b/app/constant.ts index 6cf3e645b..df2bc52a5 100644 --- a/app/constant.ts +++ b/app/constant.ts @@ -66,27 +66,27 @@ Current time: {{time}}`; export const DEFAULT_MODELS = [ { name: "gpt-4", - available: false, + available: true, }, { name: "gpt-4-0314", - available: false, + available: true, }, { name: "gpt-4-0613", - available: false, + available: true, }, { name: "gpt-4-32k", - available: false, + available: true, }, { name: "gpt-4-32k-0314", - available: false, + available: true, }, { name: "gpt-4-32k-0613", - available: false, + available: true, }, { name: "gpt-3.5-turbo", From 1197521921f98e92e7c89b91dbcbb6b981908ec6 Mon Sep 17 00:00:00 2001 From: Yidadaa Date: Wed, 5 Jul 2023 22:50:12 +0800 Subject: [PATCH 05/17] fix: #2252 polyfill composing for old safari browsers --- app/components/chat.tsx | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/app/components/chat.tsx b/app/components/chat.tsx index 74c872dee..267161506 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -172,10 +172,29 @@ function PromptToast(props: { function useSubmitHandler() { const config = useAppConfig(); const submitKey = config.submitKey; + const isComposing = useRef(false); + + useEffect(() => { + const onCompositionStart = () => { + isComposing.current = true; + }; + const onCompositionEnd = () => { + isComposing.current = false; + }; + + window.addEventListener("compositionstart", onCompositionStart); + window.addEventListener("compositionend", onCompositionEnd); + + return () => { + window.removeEventListener("compositionstart", onCompositionStart); + window.removeEventListener("compositionend", onCompositionEnd); + }; + }, []); const shouldSubmit = (e: React.KeyboardEvent) => { if (e.key !== "Enter") return false; - if (e.key === "Enter" && e.nativeEvent.isComposing) return false; + if (e.key === "Enter" && (e.nativeEvent.isComposing || isComposing.current)) + return false; return ( (config.submitKey === SubmitKey.AltEnter && e.altKey) || (config.submitKey === SubmitKey.CtrlEnter && e.ctrlKey) || From 5c8be2a8f68d74ae1cb72c51beb5b0d46f73ea77 Mon Sep 17 00:00:00 2001 From: Yidadaa Date: Wed, 5 Jul 2023 23:19:54 +0800 Subject: [PATCH 06/17] feat: close #1072 share mask as link --- app/command.ts | 28 +++++++++++++++------------- app/components/mask.tsx | 21 ++++++++++++++++++++- app/components/new-chat.tsx | 10 +++++++--- app/locales/cn.ts | 5 +++++ app/locales/en.ts | 5 +++++ 5 files changed, 52 insertions(+), 17 deletions(-) diff --git a/app/command.ts b/app/command.ts index ba3bb6538..9330d4ff5 100644 --- a/app/command.ts +++ b/app/command.ts @@ -1,3 +1,4 @@ +import { useEffect } from "react"; import { useSearchParams } from "react-router-dom"; import Locale from "./locales"; @@ -11,21 +12,22 @@ interface Commands { export function useCommand(commands: Commands = {}) { const [searchParams, setSearchParams] = useSearchParams(); - if (commands === undefined) return; + useEffect(() => { + let shouldUpdate = false; + searchParams.forEach((param, name) => { + const commandName = name as keyof Commands; + if (typeof commands[commandName] === "function") { + commands[commandName]!(param); + searchParams.delete(name); + shouldUpdate = true; + } + }); - let shouldUpdate = false; - searchParams.forEach((param, name) => { - const commandName = name as keyof Commands; - if (typeof commands[commandName] === "function") { - commands[commandName]!(param); - searchParams.delete(name); - shouldUpdate = true; + if (shouldUpdate) { + setSearchParams(searchParams); } - }); - - if (shouldUpdate) { - setSearchParams(searchParams); - } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [searchParams, commands]); } interface ChatCommands { diff --git a/app/components/mask.tsx b/app/components/mask.tsx index ea7cf3a53..be68c00ed 100644 --- a/app/components/mask.tsx +++ b/app/components/mask.tsx @@ -30,7 +30,7 @@ import { useNavigate } from "react-router-dom"; import chatStyle from "./chat.module.scss"; import { useEffect, useState } from "react"; -import { downloadAs, readFromFile } from "../utils"; +import { copyToClipboard, downloadAs, readFromFile } from "../utils"; import { Updater } from "../typing"; import { ModelConfigList } from "./model-config"; import { FileName, Path } from "../constant"; @@ -65,6 +65,11 @@ export function MaskConfig(props: { }); }; + const copyMaskLink = () => { + const maskLink = `${location.protocol}//${location.host}/#${Path.NewChat}?mask=${props.mask.id}`; + copyToClipboard(maskLink); + }; + const globalConfig = useAppConfig(); return ( @@ -125,6 +130,20 @@ export function MaskConfig(props: { }} > + + {!props.shouldSyncFromGlobal ? ( + + } + text={Locale.Mask.Config.Share.Action} + onClick={copyMaskLink} + /> + + ) : null} + {props.shouldSyncFromGlobal ? ( { - chatStore.newSession(mask); - setTimeout(() => navigate(Path.Chat), 1); + setTimeout(() => { + chatStore.newSession(mask); + navigate(Path.Chat); + }, 10); }; useCommand({ mask: (id) => { try { - const mask = maskStore.get(parseInt(id)); + const intId = parseInt(id); + const mask = maskStore.get(intId) ?? BUILTIN_MASK_STORE.get(intId); startChat(mask ?? undefined); } catch { console.error("[New Chat] failed to create chat from mask id=", id); diff --git a/app/locales/cn.ts b/app/locales/cn.ts index 6c8b6c0a1..cb0cbbb17 100644 --- a/app/locales/cn.ts +++ b/app/locales/cn.ts @@ -297,6 +297,11 @@ const cn = { Title: "隐藏预设对话", SubTitle: "隐藏后预设对话不会出现在聊天界面", }, + Share: { + Title: "分享此面具", + SubTitle: "生成此面具的直达链接", + Action: "复制链接", + }, }, }, NewChat: { diff --git a/app/locales/en.ts b/app/locales/en.ts index ab489c25c..11b8b1572 100644 --- a/app/locales/en.ts +++ b/app/locales/en.ts @@ -301,6 +301,11 @@ const en: LocaleType = { Title: "Hide Context Prompts", SubTitle: "Do not show in-context prompts in chat", }, + Share: { + Title: "Share This Mask", + SubTitle: "Generate a link to this mask", + Action: "Copy Link", + }, }, }, NewChat: { From 9e6617e3ca251260943ce0ebc15f2fff1022df26 Mon Sep 17 00:00:00 2001 From: Yidadaa Date: Thu, 6 Jul 2023 01:11:50 +0800 Subject: [PATCH 07/17] feat: add max icon for modals --- app/components/exporter.module.scss | 2 +- app/components/ui-lib.module.scss | 29 +++++++++++++++++++++++++---- app/components/ui-lib.tsx | 25 ++++++++++++++++++++++--- 3 files changed, 48 insertions(+), 8 deletions(-) diff --git a/app/components/exporter.module.scss b/app/components/exporter.module.scss index 3fde363f0..c2046ffc0 100644 --- a/app/components/exporter.module.scss +++ b/app/components/exporter.module.scss @@ -186,7 +186,7 @@ box-shadow: var(--card-shadow); border: var(--border-in-light); - * { + *:not(li) { overflow: hidden; } } diff --git a/app/components/ui-lib.module.scss b/app/components/ui-lib.module.scss index d2ddb7df8..86b467e53 100644 --- a/app/components/ui-lib.module.scss +++ b/app/components/ui-lib.module.scss @@ -79,6 +79,19 @@ --modal-padding: 20px; + &-max { + width: 95vw; + max-width: unset; + height: 95vh; + display: flex; + flex-direction: column; + + .modal-content { + max-height: unset !important; + flex-grow: 1; + } + } + .modal-header { padding: var(--modal-padding); display: flex; @@ -91,11 +104,19 @@ font-size: 16px; } - .modal-close-btn { - cursor: pointer; + .modal-header-actions { + display: flex; - &:hover { - filter: brightness(1.2); + .modal-header-action { + cursor: pointer; + + &:not(:last-child) { + margin-right: 20px; + } + + &:hover { + filter: brightness(1.2); + } } } } diff --git a/app/components/ui-lib.tsx b/app/components/ui-lib.tsx index e02051c01..5e6a50dc7 100644 --- a/app/components/ui-lib.tsx +++ b/app/components/ui-lib.tsx @@ -6,6 +6,8 @@ import EyeOffIcon from "../icons/eye-off.svg"; import DownIcon from "../icons/down.svg"; import ConfirmIcon from "../icons/confirm.svg"; import CancelIcon from "../icons/cancel.svg"; +import MaxIcon from "../icons/max.svg"; +import MinIcon from "../icons/min.svg"; import Locale from "../locales"; @@ -111,13 +113,30 @@ export function Modal(props: ModalProps) { // eslint-disable-next-line react-hooks/exhaustive-deps }, []); + const [isMax, setMax] = useState(false); + return ( -
+
{props.title}
-
- +
+
setMax(!isMax)} + > + {isMax ? : } +
+
+ +
From 6c6a2d08db4b8f74ded430c93125ffbc8f1d0eaf Mon Sep 17 00:00:00 2001 From: Yidadaa Date: Thu, 6 Jul 2023 01:26:06 +0800 Subject: [PATCH 08/17] feat: close #2267 display a modal to export image --- app/components/exporter.tsx | 31 +++++++++++++++++++++++++------ app/components/ui-lib.tsx | 3 ++- app/locales/cn.ts | 4 ++++ app/locales/en.ts | 4 ++++ 4 files changed, 35 insertions(+), 7 deletions(-) diff --git a/app/components/exporter.tsx b/app/components/exporter.tsx index 7765b77aa..f26b3a7d2 100644 --- a/app/components/exporter.tsx +++ b/app/components/exporter.tsx @@ -1,7 +1,8 @@ +/* eslint-disable @next/next/no-img-element */ import { ChatMessage, useAppConfig, useChatStore } from "../store"; import Locale from "../locales"; import styles from "./exporter.module.scss"; -import { List, ListItem, Modal, Select, showToast } from "./ui-lib"; +import { List, ListItem, Modal, Select, showModal, showToast } from "./ui-lib"; import { IconButton } from "./button"; import { copyToClipboard, downloadAs, useMobileScreen } from "../utils"; @@ -23,6 +24,7 @@ import { DEFAULT_MASK_AVATAR } from "../store/mask"; import { api } from "../client/api"; import { prettyObject } from "../utils/format"; import { EXPORT_MESSAGE_CLASS_NAME } from "../constant"; +import { getClientConfig } from "../config/client"; const Markdown = dynamic(async () => (await import("./markdown")).Markdown, { loading: () => , @@ -357,6 +359,24 @@ function ExportAvatar(props: { avatar: string }) { return ; } +export function showImageModal(img: string) { + showModal({ + title: Locale.Export.Image.Modal, + children: ( +
+ preview +
+ ), + defaultMax: true, + }); +} + export function ImagePreviewer(props: { messages: ChatMessage[]; topic: string; @@ -369,6 +389,7 @@ export function ImagePreviewer(props: { const previewRef = useRef(null); const copy = () => { + showToast(Locale.Export.Image.Toast); const dom = previewRef.current; if (!dom) return; toBlob(dom).then((blob) => { @@ -393,17 +414,15 @@ export function ImagePreviewer(props: { const isMobile = useMobileScreen(); const download = () => { + showToast(Locale.Export.Image.Toast); const dom = previewRef.current; if (!dom) return; toPng(dom) .then((blob) => { if (!blob) return; - if (isMobile) { - const image = new Image(); - image.src = blob; - const win = window.open(""); - win?.document.write(image.outerHTML); + if (isMobile || getClientConfig()?.isApp) { + showImageModal(blob); } else { const link = document.createElement("a"); link.download = `${props.topic}.png`; diff --git a/app/components/ui-lib.tsx b/app/components/ui-lib.tsx index 5e6a50dc7..da520bd84 100644 --- a/app/components/ui-lib.tsx +++ b/app/components/ui-lib.tsx @@ -95,6 +95,7 @@ interface ModalProps { title: string; children?: any; actions?: JSX.Element[]; + defaultMax?: boolean; onClose?: () => void; } export function Modal(props: ModalProps) { @@ -113,7 +114,7 @@ export function Modal(props: ModalProps) { // eslint-disable-next-line react-hooks/exhaustive-deps }, []); - const [isMax, setMax] = useState(false); + const [isMax, setMax] = useState(!!props.defaultMax); return (
Date: Wed, 5 Jul 2023 23:31:45 +0600 Subject: [PATCH 09/17] Added support for Bangla language --- app/locales/bn.ts | 284 +++++++++++++++++++++++++++++++++++++++++++ app/locales/index.ts | 3 + 2 files changed, 287 insertions(+) create mode 100644 app/locales/bn.ts diff --git a/app/locales/bn.ts b/app/locales/bn.ts new file mode 100644 index 000000000..e6d204868 --- /dev/null +++ b/app/locales/bn.ts @@ -0,0 +1,284 @@ +import { SubmitKey } from "../store/config"; +import { RequiredLocaleType } from "./index"; + +const bn: RequiredLocaleType = { + WIP: "শীঘ্রই আসছে...", + Error: { + Unauthorized: + "অননুমোদিত অ্যাক্সেস, দয়া করে [অথোরিটি](/#/auth) পৃষ্ঠায় অ্যাক্সেস কোড ইনপুট করুন।", + }, + Auth: { + Title: "অ্যাক্সেস কোড প্রয়োজন", + Tips: "নীচে অ্যাক্সেস কোড ইনপুট করুন", + Input: "অ্যাক্সেস কোড", + Confirm: "কনফার্ম", + Later: "পরে", + }, + ChatItem: { + ChatItemCount: (count: number) => `${count} মেসেজ`, + }, + Chat: { + SubTitle: (count: number) => `${count} মেসেজ ChatGPT সঙ্গে`, + Actions: { + ChatList: "চ্যাট লিস্টে যান", + CompressedHistory: "সংক্ষিপ্ত ইতিহাস মেমোরি প্রম্পট", + Export: "সমস্ত মেসেজ মার্কডাউন হিসাবে এক্সপোর্ট করুন", + Copy: "অনুলিপি", + Stop: "বন্ধ করুন", + Retry: "পুনরায় চেষ্টা করুন", + Delete: "মুছে ফেলুন", + }, + InputActions: { + Stop: "বন্ধ করুন", + ToBottom: "সর্বশেষে যান", + Theme: { + auto: "স্বয়ংক্রিয়", + light: "হালকা থিম", + dark: "ডার্ক থিম", + }, + Prompt: "প্রম্পট", + Masks: "মাস্ক", + Clear: "সংকেত সাফ করুন", + Settings: "সেটিংস", + }, + Rename: "চ্যাটের নাম পরিবর্তন করুন", + Typing: "টাইপ হচ্ছে...", + Input: (submitKey: string) => { + var inputHints = `${submitKey} পাঠানোর জন্য`; + if (submitKey === String(SubmitKey.Enter)) { + inputHints += ", ওয়ার্প করার জন্য Shift + Enter"; + } + return inputHints + ", / প্রম্পট অনুসন্ধান করতে"; + }, + Send: "পাঠান", + Config: { + Reset: "ডিফল্টে পুনরায় সেট করুন", + SaveAs: "মাস্ক হিসাবে সংরক্ষণ করুন", + }, + }, + Export: { + Title: "মেসেজ এক্সপোর্ট করুন", + Copy: "সমস্ত অনুলিপি করুন", + Download: "ডাউনলোড করুন", + MessageFromYou: "আপনার মেসেজ", + MessageFromChatGPT: "TheChatGPT থেকে মেসেজ", + Share: "কিয়াস্ক শেয়ার এ শেয়ার করুন", + Format: { + Title: "এক্সপোর্ট ফর্ম্যাট", + SubTitle: "মার্কডাউন বা পিএনজি ইমেজ", + }, + IncludeContext: { + Title: "সংশ্লিষ্ট প্রম্পট অন্তর্ভুক্ত করুন", + SubTitle: "মাস্কে সংশ্লিষ্ট প্রম্পট নির্যাতন করুন কিনা", + }, + Steps: { + Select: "নির্বাচন করুন", + Preview: "পূর্বরূপ", + }, + }, + Select: { + Search: "অনুসন্ধান করুন", + All: "সব নির্বাচন করুন", + Latest: "সর্বশেষ নির্বাচন করুন", + Clear: "সাফ করুন", + }, + Memory: { + Title: "মেমোরি প্রম্পট", + EmptyContent: "এখনও কিছুই নেই।", + Send: "মেমোরি পাঠান", + Copy: "মেমোরি অনুলিপি করুন", + Reset: "সেশন পুনরায় সেট করুন", + ResetConfirm: + "রিসেট করলে বর্তমান চ্যাট ইতিহাস এবং ঐতিহাসিক মেমোরি সাফ হয়ে যাবে। আপনি কি নিশ্চিত যে আপনি রিসেট করতে চান?", + }, + Home: { + NewChat: "নতুন চ্যাট", + DeleteChat: "নির্বাচিত কনভার্সেশন মুছতে নিশ্চিত করুন?", + DeleteToast: "চ্যাট মুছে ফেলা হয়েছে", + Revert: "পূর্ববর্তী অবস্থানে ফিরে যান", + }, + Settings: { + Title: "সেটিংস", + SubTitle: "সমস্ত সেটিংস", + Actions: { + ClearAll: "সমস্ত ডেটা সাফ করুন", + ResetAll: "সমস্ত সেটিংস পুনরায় সেট করুন", + Close: "বন্ধ করুন", + ConfirmResetAll: "আপনি কি নিশ্চিত যে আপনি সমস্ত কনফিগারেশন পুনরায় সেট করতে চান?", + ConfirmClearAll: "আপনি কি নিশ্চিত যে আপনি সমস্ত ডেটা পুনরায় সেট করতে চান?", + }, + Lang: { + Name: "Bangla", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language` + All: "সমস্ত ভাষা", + }, + Avatar: "অবতার", + FontSize: { + Title: "ফন্ট সাইজ", + SubTitle: "চ্যাটের সন্তুষ্টির ফন্ট সাইজ সংযোজন করুন", + }, + Update: { + Version: (x: string) => `সংস্করণ: ${x}`, + IsLatest: "সর্বশেষ সংস্করণ", + CheckUpdate: "আপডেট চেক করুন", + IsChecking: "চেক করা হচ্ছে...", + FoundUpdate: (x: string) => `নতুন সংস্করণ পাওয়া গেছে: ${x}`, + GoToUpdate: "আপডেট করুন", + }, + SendKey: "কী পাঠান", + Theme: "থিম", + TightBorder: "সঙ্গতিহীন বর্ডার", + SendPreviewBubble: { + Title: "পূর্বরূপ বুদ্ধিমান বুদ্ধি", + SubTitle: "বুড়ি মধ্যে মার্কডাউন পূর্বরূপ প্রদর্শন করুন", + }, + Mask: { + Title: "মাস্ক স্প্ল্যাশ স্ক্রিন", + SubTitle: "নতুন চ্যাট শুরু করার আগে একটি মাস্ক স্প্ল্যাশ স্ক্রিন দেখান", + }, + Prompt: { + Disable: { + Title: "অটো-সম্পূর্ণতা অক্ষম করুন", + SubTitle: "অটো-সম্পূর্ণতা চালু করতে / ইনপুট করুন", + }, + List: "প্রম্পট তালিকা", + ListCount: (builtin: number, custom: number) => + `${builtin} অভিন্নতম, ${custom} ব্যবহারকারী নির্ধারিত`, + Edit: "সম্পাদন করুন", + Modal: { + Title: "প্রম্পট তালিকা", + Add: "একটি যোগ করুন", + Search: "প্রম্পট অনুসন্ধান করুন", + }, + EditModal: { + Title: "প্রম্পট সম্পাদনা করুন", + }, + }, + HistoryCount: { + Title: "সংযুক্ত মেসেজ সংখ্যা", + SubTitle: "প্রতি অনুরোধে প্রেরিত মেসেজের সংখ্যা", + }, + CompressThreshold: { + Title: "ইতিহাস সংক্ষিপ্ত করার সীমা", + SubTitle: + "যদি অসংক্ষিপ্ত মেসেজের দৈর্ঘ্য এই মানের চেয়ে বেশি হয়", + }, + Token: { + Title: "API কী", + SubTitle: "অ্যাক্সেস কোড সীমা উপেক্ষা করতে আপনার কী ব্যবহার করুন", + Placeholder: "অপেনএআই এপিআই কী", + }, + Usage: { + Title: "অ্যাকাউন্ট ব্যালেন্স", + SubTitle(used: any, total: any) { + return `মাসে ব্যবহৃত $${used}, সাবস্ক্রিপশন $${total}`; + }, + IsChecking: "চেক করা হচ্ছে...", + Check: "চেক করুন", + NoAccess: "ব্যালেন্স চেক করতে API কী প্রবেশ করুন", + }, + AccessCode: { + Title: "অ্যাক্সেস কোড", + SubTitle: "অ্যাক্সেস নিয়ন্ত্রণ সক্ষম", + Placeholder: "অ্যাক্সেস কোড প্রয়োজন", + }, + Endpoint: { + Title: "এন্ডপয়েন্ট", + SubTitle: "কাস্টম এন্ডপয়েন্ট একটি http(s):// দিয়ে শুরু হতে হবে", + }, + Model: "মডেল", + Temperature: { + Title: "তাপমাত্রা", + SubTitle: "বড় মান বেশি একটি যিনির্দিষ্ট আউটপুট তৈরি করে", + }, + MaxTokens: { + Title: "সর্বাধিক টোকেন", + SubTitle: "ইনপুট টোকেন এবং জেনারেট টোকেনের সর্বাধিক দৈর্ঘ্য", + }, + PresencePenalty: { + Title: "উপস্থিতির জরিমানা", + SubTitle: "বড় মান নতুন বিষয় সম্পর্কে কথা বলার সম্ভাবনা বাড়ায়", + }, + }, + Store: { + DefaultTopic: "নতুন কনভার্সেশন", + BotHello: "হ্যালো! আমি আপনাকে কিভাবে সাহায্য করতে পারি?", + Error: "কিছু ভুল হয়েছে, দয়া করে পরে আবার চেষ্টা করুন।", + Prompt: { + History: (content: string) => + "এটি একটি চ্যাট ইতিহাসের সংক্ষিপ্ত সংক্ষেপণ হিসাবে: " + content, + Topic: + "অনুগ্রহ করে আমাদের কথোপকথনটির সংক্ষেপের জন্য একটি চার থেকে পাঁচ শব্দের শিরোনাম তৈরি করুন যাতে কোনো প্রবেশদ্বার, বিরামচিহ্ন, উদ্ধৃতি চিহ্ন, পূর্ণবিরাম, প্রতীক অথবা অতিরিক্ত লেখা না থাকে। আবর্তনযোগ্য উদ্ধৃতি চিহ্ন সরান।", + Summarize: + "আসলে আলোচনাটি সংক্ষেপে সংক্ষিপ্তসারে বর্ণনা করুন, যা ভবিষ্যতে প্রম্পট হিসাবে ব্যবহার করা যাবে।", + }, + }, + Copy: { + Success: "ক্লিপবোর্ডে কপি করা হয়েছে", + Failed: "কপি ব্যর্থ হয়েছে, দয়া করে ক্লিপবোর্ডে অ্যাক্সেসের অনুমতি প্রদান করুন", + }, + Context: { + Toast: (x: any) => `${x} সংযুক্তকালীন প্রম্পটসহ`, + Edit: "সংযুক্তকালীন এবং মেমোরি প্রম্পটসমূহ", + Add: "একটি প্রম্পট যোগ করুন", + Clear: "সংকেত সাফ করুন", + Revert: "পূর্ববর্তী অবস্থানে ফিরে যান", + }, + Plugin: { + Name: "প্লাগিন", + }, + Mask: { + Name: "মাস্ক", + Page: { + Title: "প্রম্পট টেমপ্লেট", + SubTitle: (count: number) => `${count} প্রম্পট টেমপ্লেট`, + Search: "টেমপ্লেট অনুসন্ধান করুন", + Create: "তৈরি করুন", + }, + Item: { + Info: (count: number) => `${count} প্রম্পট`, + Chat: "চ্যাট", + View: "দেখুন", + Edit: "সম্পাদন করুন", + Delete: "মুছে ফেলুন", + DeleteConfirm: "মুছে ফেলতে নিশ্চিত করুন?", + }, + EditModal: { + Title: (readonly: boolean) => + `প্রম্পট টেমপ্লেট সম্পাদনা করুন ${readonly ? "(পঠনযোগ্য)" : ""}`, + Download: "ডাউনলোড করুন", + Clone: "ক্লোন করুন", + }, + Config: { + Avatar: "বট অবতার", + Name: "বটের নাম", + Sync: { + Title: "গ্লোবাল কনফিগ ব্যবহার করুন", + SubTitle: "এই চ্যাটে গ্লোবাল কনফিগ ব্যবহার করুন", + Confirm: "কাস্টম কনফিগগুলি গ্লোবাল কনফিগের সাথে পরিবর্তন করতে নিশ্চিত করুন?", + }, + HideContext: { + Title: "সংশ্লিষ্ট প্রম্পট লুকান", + SubTitle: "চ্যাটে সংশ্লিষ্ট প্রম্পট দেখান না", + }, + }, + }, + NewChat: { + Return: "ফিরে যান", + Skip: "শুধুমাত্র শুরু করুন", + Title: "একটি মাস্ক নির্বাচন করুন", + SubTitle: "মাস্কের পিছনে মনের চ্যাট করুন", + More: "আরও খুঁজুন", + NotShow: "আর প্রদর্শন করবেন না", + ConfirmNoShow: "নিষ্ক্রিয় করতে নিশ্চিত করুন? পরে সেটিংসে এটি চালু করতে পারবেন।", + }, + + UI: { + Confirm: "কনফার্ম", + Cancel: "বাতিল", + Close: "বন্ধ করুন", + Create: "তৈরি করুন", + Edit: "সম্পাদন করুন", + }, +}; + +export default bn; \ No newline at end of file diff --git a/app/locales/index.ts b/app/locales/index.ts index abdb4eaab..7ece45838 100644 --- a/app/locales/index.ts +++ b/app/locales/index.ts @@ -13,6 +13,7 @@ import no from "./no"; import cs from "./cs"; import ko from "./ko"; import ar from "./ar"; +import bn from "./bn"; import { merge } from "../utils/merge"; import type { LocaleType } from "./cn"; @@ -34,6 +35,7 @@ const ALL_LANGS = { cs, no, ar, + bn, }; export type Lang = keyof typeof ALL_LANGS; @@ -56,6 +58,7 @@ export const ALL_LANG_OPTIONS: Record = { cs: "Čeština", no: "Nynorsk", ar: "العربية", + bn: "বাংলা", }; const LANG_KEY = "lang"; From b718285125879382aaa5fe6508b7809186f6b906 Mon Sep 17 00:00:00 2001 From: Yidadaa Date: Thu, 6 Jul 2023 01:33:30 +0800 Subject: [PATCH 10/17] feat: improve svg viewer --- app/components/exporter.tsx | 28 +++++++++------------------- app/components/markdown.tsx | 13 ++++++++----- app/components/ui-lib.tsx | 18 ++++++++++++++++++ 3 files changed, 35 insertions(+), 24 deletions(-) diff --git a/app/components/exporter.tsx b/app/components/exporter.tsx index f26b3a7d2..f9d86a552 100644 --- a/app/components/exporter.tsx +++ b/app/components/exporter.tsx @@ -2,7 +2,15 @@ import { ChatMessage, useAppConfig, useChatStore } from "../store"; import Locale from "../locales"; import styles from "./exporter.module.scss"; -import { List, ListItem, Modal, Select, showModal, showToast } from "./ui-lib"; +import { + List, + ListItem, + Modal, + Select, + showImageModal, + showModal, + showToast, +} from "./ui-lib"; import { IconButton } from "./button"; import { copyToClipboard, downloadAs, useMobileScreen } from "../utils"; @@ -359,24 +367,6 @@ function ExportAvatar(props: { avatar: string }) { return ; } -export function showImageModal(img: string) { - showModal({ - title: Locale.Export.Image.Modal, - children: ( -
- preview -
- ), - defaultMax: true, - }); -} - export function ImagePreviewer(props: { messages: ChatMessage[]; topic: string; diff --git a/app/components/markdown.tsx b/app/components/markdown.tsx index 4db5f573b..3168641c7 100644 --- a/app/components/markdown.tsx +++ b/app/components/markdown.tsx @@ -12,6 +12,7 @@ import mermaid from "mermaid"; import LoadingIcon from "../icons/three-dots.svg"; import React from "react"; import { useDebouncedCallback, useThrottledCallback } from "use-debounce"; +import { showImageModal } from "./ui-lib"; export function Mermaid(props: { code: string }) { const ref = useRef(null); @@ -37,11 +38,13 @@ export function Mermaid(props: { code: string }) { if (!svg) return; const text = new XMLSerializer().serializeToString(svg); const blob = new Blob([text], { type: "image/svg+xml" }); - const url = URL.createObjectURL(blob); - const win = window.open(url); - if (win) { - win.onload = () => URL.revokeObjectURL(url); - } + console.log(blob); + // const url = URL.createObjectURL(blob); + // const win = window.open(url); + // if (win) { + // win.onload = () => URL.revokeObjectURL(url); + // } + showImageModal(URL.createObjectURL(blob)); } if (hasError) { diff --git a/app/components/ui-lib.tsx b/app/components/ui-lib.tsx index da520bd84..512044dca 100644 --- a/app/components/ui-lib.tsx +++ b/app/components/ui-lib.tsx @@ -1,3 +1,4 @@ +/* eslint-disable @next/next/no-img-element */ import styles from "./ui-lib.module.scss"; import LoadingIcon from "../icons/three-dots.svg"; import CloseIcon from "../icons/close.svg"; @@ -414,3 +415,20 @@ export function showPrompt(content: any, value = "", rows = 3) { ); }); } + +export function showImageModal(img: string) { + showModal({ + title: Locale.Export.Image.Modal, + children: ( +
+ preview +
+ ), + }); +} From 8a6a13e583d1b499c7b08fa4a47b4755000f501f Mon Sep 17 00:00:00 2001 From: ki-ask Date: Wed, 5 Jul 2023 23:35:55 +0600 Subject: [PATCH 11/17] Added support for Bangla language --- app/locales/bn.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/locales/bn.ts b/app/locales/bn.ts index e6d204868..5f24d5c19 100644 --- a/app/locales/bn.ts +++ b/app/locales/bn.ts @@ -108,7 +108,7 @@ const bn: RequiredLocaleType = { ConfirmClearAll: "আপনি কি নিশ্চিত যে আপনি সমস্ত ডেটা পুনরায় সেট করতে চান?", }, Lang: { - Name: "Bangla", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language` + Name: "বাংলা", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language` All: "সমস্ত ভাষা", }, Avatar: "অবতার", From 6897bf1254dac3ebe4f05d4617b1e6ed33a7105a Mon Sep 17 00:00:00 2001 From: ki-ask Date: Wed, 5 Jul 2023 23:39:22 +0600 Subject: [PATCH 12/17] Added support for Bangla language --- app/locales/bn.ts | 2 +- app/locales/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/locales/bn.ts b/app/locales/bn.ts index 5f24d5c19..e6d204868 100644 --- a/app/locales/bn.ts +++ b/app/locales/bn.ts @@ -108,7 +108,7 @@ const bn: RequiredLocaleType = { ConfirmClearAll: "আপনি কি নিশ্চিত যে আপনি সমস্ত ডেটা পুনরায় সেট করতে চান?", }, Lang: { - Name: "বাংলা", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language` + Name: "Bangla", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language` All: "সমস্ত ভাষা", }, Avatar: "অবতার", diff --git a/app/locales/index.ts b/app/locales/index.ts index 7ece45838..56538176c 100644 --- a/app/locales/index.ts +++ b/app/locales/index.ts @@ -58,7 +58,7 @@ export const ALL_LANG_OPTIONS: Record = { cs: "Čeština", no: "Nynorsk", ar: "العربية", - bn: "বাংলা", + bn: "Bangla", }; const LANG_KEY = "lang"; From 596b6542e80c87a1526b2f7b6c4616c6222eaaa5 Mon Sep 17 00:00:00 2001 From: ki-ask Date: Wed, 5 Jul 2023 23:55:14 +0600 Subject: [PATCH 13/17] Added support for Bangla language --- app/locales/bn.ts | 265 +++++++++++++++++++++++++++------------------- 1 file changed, 158 insertions(+), 107 deletions(-) diff --git a/app/locales/bn.ts b/app/locales/bn.ts index e6d204868..5f98ba21d 100644 --- a/app/locales/bn.ts +++ b/app/locales/bn.ts @@ -1,236 +1,276 @@ import { SubmitKey } from "../store/config"; -import { RequiredLocaleType } from "./index"; +import { LocaleType } from "./index"; -const bn: RequiredLocaleType = { +const bn: LocaleType = { WIP: "শীঘ্রই আসছে...", Error: { Unauthorized: - "অননুমোদিত অ্যাক্সেস, দয়া করে [অথোরিটি](/#/auth) পৃষ্ঠায় অ্যাক্সেস কোড ইনপুট করুন।", + "অননুমোদিত অ্যাক্সেস, অনুগ্রহ করে [অথোরাইজশন](/#/auth) পৃষ্ঠায় অ্যাক্সেস কোড ইনপুট করুন।", }, Auth: { - Title: "অ্যাক্সেস কোড প্রয়োজন", + Title: "একটি অ্যাক্সেস কোড প্রয়োজন", Tips: "নীচে অ্যাক্সেস কোড ইনপুট করুন", Input: "অ্যাক্সেস কোড", - Confirm: "কনফার্ম", + Confirm: "নিশ্চিত করুন", Later: "পরে", }, ChatItem: { - ChatItemCount: (count: number) => `${count} মেসেজ`, + ChatItemCount: (count: number) => `${count} টি বার্তা`, }, Chat: { - SubTitle: (count: number) => `${count} মেসেজ ChatGPT সঙ্গে`, + SubTitle: (count: number) => `${count} টি বার্তা`, Actions: { - ChatList: "চ্যাট লিস্টে যান", + ChatList: "চ্যাট তালিকায় যান", CompressedHistory: "সংক্ষিপ্ত ইতিহাস মেমোরি প্রম্পট", - Export: "সমস্ত মেসেজ মার্কডাউন হিসাবে এক্সপোর্ট করুন", - Copy: "অনুলিপি", + Export: "সমস্ত বার্তা মার্কডাউন হিসাবে রপ্তানি করুন", + Copy: "কপি", Stop: "বন্ধ করুন", Retry: "পুনরায় চেষ্টা করুন", + Pin: "পিন করুন", + PinToastContent: "পিন করা হয়েছে ২টি বার্তা প্রম্পটে", + PinToastAction: "দেখুন", Delete: "মুছে ফেলুন", + Edit: "সম্পাদন করুন", + }, + Commands: { + new: "নতুন চ্যাট শুরু করুন", + newm: "মাস্ক সহ নতুন চ্যাট শুরু করুন", + next: "পরবর্তী চ্যাট", + prev: "পূর্ববর্তী চ্যাট", + clear: "সংশ্লিষ্টতাবদ্ধকরণ পরিষ্কার করুন", + del: "চ্যাট মুছুন", }, InputActions: { Stop: "বন্ধ করুন", - ToBottom: "সর্বশেষে যান", + ToBottom: "সর্বশেষতম দিকে", Theme: { - auto: "স্বয়ংক্রিয়", + auto: "অটো", light: "হালকা থিম", dark: "ডার্ক থিম", }, - Prompt: "প্রম্পট", - Masks: "মাস্ক", - Clear: "সংকেত সাফ করুন", + Prompt: "প্রম্পটগুলিতে", + Masks: "মাস্কগুলি", + Clear: "সংশ্লিষ্টতাবদ্ধকরণ পরিষ্কার করুন", Settings: "সেটিংস", }, - Rename: "চ্যাটের নাম পরিবর্তন করুন", - Typing: "টাইপ হচ্ছে...", + Rename: "চ্যাট পুনঃনামকরণ করুন", + Typing: "টাইপিং...", Input: (submitKey: string) => { - var inputHints = `${submitKey} পাঠানোর জন্য`; + var inputHints = `${submitKey} to send`; if (submitKey === String(SubmitKey.Enter)) { - inputHints += ", ওয়ার্প করার জন্য Shift + Enter"; + inputHints += ", Shift + Enter to wrap"; } - return inputHints + ", / প্রম্পট অনুসন্ধান করতে"; + return inputHints + ", / to search prompts, : to use commands"; }, - Send: "পাঠান", + Send: "প্রেরণ করুন", Config: { - Reset: "ডিফল্টে পুনরায় সেট করুন", + Reset: "ডিফল্টে রিসেট করুন", SaveAs: "মাস্ক হিসাবে সংরক্ষণ করুন", }, }, Export: { - Title: "মেসেজ এক্সপোর্ট করুন", - Copy: "সমস্ত অনুলিপি করুন", + Title: "বার্তা রপ্তানিকরণ", + Copy: "সমস্তটি কপি করুন", Download: "ডাউনলোড করুন", - MessageFromYou: "আপনার মেসেজ", - MessageFromChatGPT: "TheChatGPT থেকে মেসেজ", - Share: "কিয়াস্ক শেয়ার এ শেয়ার করুন", + MessageFromYou: "আপনার বার্তা", + MessageFromChatGPT: "চ্যাটজিপিটির বার্তা", + Share: "শেয়ার করুন শেয়ারজিপিটি তে", Format: { - Title: "এক্সপোর্ট ফর্ম্যাট", - SubTitle: "মার্কডাউন বা পিএনজি ইমেজ", + Title: "রপ্তানি ফরম্যাট", + SubTitle: "মার্কডাউন বা পিএনজি চিত্র", }, IncludeContext: { - Title: "সংশ্লিষ্ট প্রম্পট অন্তর্ভুক্ত করুন", - SubTitle: "মাস্কে সংশ্লিষ্ট প্রম্পট নির্যাতন করুন কিনা", + Title: "মাস্ক অন্তর্ভুক্ত করুন", + SubTitle: "মাস্কগুলি সংরক্ষণ করবেন না কি", }, Steps: { Select: "নির্বাচন করুন", - Preview: "পূর্বরূপ", + Preview: "প্রিভিউ করুন", }, }, Select: { Search: "অনুসন্ধান করুন", - All: "সব নির্বাচন করুন", - Latest: "সর্বশেষ নির্বাচন করুন", - Clear: "সাফ করুন", + All: "সমস্তটি নির্বাচন করুন", + Latest: "সর্বশেষতমটি নির্বাচন করুন", + Clear: "পরিষ্কার করুন", }, Memory: { Title: "মেমোরি প্রম্পট", EmptyContent: "এখনও কিছুই নেই।", - Send: "মেমোরি পাঠান", - Copy: "মেমোরি অনুলিপি করুন", - Reset: "সেশন পুনরায় সেট করুন", + Send: "মেমোরি প্রেরণ করুন", + Copy: "মেমোরি কপি করুন", + Reset: "পুনরায় নিশ্চিত করুন", ResetConfirm: - "রিসেট করলে বর্তমান চ্যাট ইতিহাস এবং ঐতিহাসিক মেমোরি সাফ হয়ে যাবে। আপনি কি নিশ্চিত যে আপনি রিসেট করতে চান?", + "রিসেট করলে বর্তমান চ্যাট ইতিহাস এবং ঐতিহাসিক মেমোরি মুছে যাবে। পুনরায় নির্দিষ্ট করতে চান তা নিশ্চিত করতে চান?", }, Home: { NewChat: "নতুন চ্যাট", - DeleteChat: "নির্বাচিত কনভার্সেশন মুছতে নিশ্চিত করুন?", - DeleteToast: "চ্যাট মুছে ফেলা হয়েছে", - Revert: "পূর্ববর্তী অবস্থানে ফিরে যান", + DeleteChat: "নির্বাচিত সংলাপটি মুছতে নিশ্চিত করুন?", + DeleteToast: "চ্যাটটি মুছেছেন", + Revert: "পুনরায়", }, Settings: { Title: "সেটিংস", SubTitle: "সমস্ত সেটিংস", - Actions: { - ClearAll: "সমস্ত ডেটা সাফ করুন", - ResetAll: "সমস্ত সেটিংস পুনরায় সেট করুন", - Close: "বন্ধ করুন", - ConfirmResetAll: "আপনি কি নিশ্চিত যে আপনি সমস্ত কনফিগারেশন পুনরায় সেট করতে চান?", - ConfirmClearAll: "আপনি কি নিশ্চিত যে আপনি সমস্ত ডেটা পুনরায় সেট করতে চান?", + Danger: { + Reset: { + Title: "সমস্ত সেটিংস পুনঃনির্দেশ দিন", + SubTitle: "সকল সেটিংস ডিফল্টে পুনঃনির্দেশ দিতে", + Action: "পুনঃনির্দেশ দিন", + Confirm: "সমস্ত সেটিংস ডিফল্টে পুনঃনির্দেশ করতে নিশ্চিত করতে?", + }, + Clear: { + Title: "সমস্ত তথ্য মুছুন", + SubTitle: "সমস্ত বার্তা এবং সেটিংস মুছুন", + Action: "মুছুন", + Confirm: "সমস্ত বার্তা এবং সেটিংস মুছে ফেলতে নিশ্চিত করতে?", + }, }, Lang: { - Name: "Bangla", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language` + Name: "বাংলা", // ATTENTION: if you wanna add a new translation, please do not translate this value, leave it as `Language` All: "সমস্ত ভাষা", }, Avatar: "অবতার", FontSize: { Title: "ফন্ট সাইজ", - SubTitle: "চ্যাটের সন্তুষ্টির ফন্ট সাইজ সংযোজন করুন", + SubTitle: "চ্যাট সামগ্রীর ফন্ট সাইজ সংশোধন করুন", }, + + InputTemplate: { + Title: "ইনপুট টেমপ্লেট", + SubTitle: "নতুনতম বার্তা এই টেমপ্লেটে পূরণ হবে", + }, + Update: { - Version: (x: string) => `সংস্করণ: ${x}`, - IsLatest: "সর্বশেষ সংস্করণ", - CheckUpdate: "আপডেট চেক করুন", - IsChecking: "চেক করা হচ্ছে...", - FoundUpdate: (x: string) => `নতুন সংস্করণ পাওয়া গেছে: ${x}`, - GoToUpdate: "আপডেট করুন", + Version: (x: string) => `Version: ${x}`, + IsLatest: "Latest version", + CheckUpdate: "Check Update", + IsChecking: "Checking update...", + FoundUpdate: (x: string) => `Found new version: ${x}`, + GoToUpdate: "Update", }, - SendKey: "কী পাঠান", + SendKey: "প্রেরণ চাবি", Theme: "থিম", - TightBorder: "সঙ্গতিহীন বর্ডার", + TightBorder: "সঙ্গতি সীমা", SendPreviewBubble: { - Title: "পূর্বরূপ বুদ্ধিমান বুদ্ধি", - SubTitle: "বুড়ি মধ্যে মার্কডাউন পূর্বরূপ প্রদর্শন করুন", + Title: "প্রিভিউ বুলবুল প্রেরণ করুন", + SubTitle: "বুলবুলে মার্কডাউন প্রিভিউ করুন", }, Mask: { - Title: "মাস্ক স্প্ল্যাশ স্ক্রিন", - SubTitle: "নতুন চ্যাট শুরু করার আগে একটি মাস্ক স্প্ল্যাশ স্ক্রিন দেখান", + Splash: { + Title: "মাস্ক স্প্ল্যাশ স্ক্রিন", + SubTitle: "নতুন চ্যাট শুরু করার আগে মাস্ক স্প্ল্যাশ স্ক্রিন প্রদর্শন করুন", + }, + Builtin: { + Title: "মূলত মাস্ক গোপন করুন", + SubTitle: "মাস্ক তালিকা থেকে মূলত মাস্কগুলি লুকান", + }, }, Prompt: { Disable: { - Title: "অটো-সম্পূর্ণতা অক্ষম করুন", + Title: "অটো-সম্পূর্ণতা নিষ্ক্রিয় করুন", SubTitle: "অটো-সম্পূর্ণতা চালু করতে / ইনপুট করুন", }, List: "প্রম্পট তালিকা", ListCount: (builtin: number, custom: number) => - `${builtin} অভিন্নতম, ${custom} ব্যবহারকারী নির্ধারিত`, + `${builtin} built-in, ${custom} user-defined`, Edit: "সম্পাদন করুন", Modal: { Title: "প্রম্পট তালিকা", Add: "একটি যোগ করুন", - Search: "প্রম্পট অনুসন্ধান করুন", + Search: "সন্ধান প্রম্পট", }, EditModal: { - Title: "প্রম্পট সম্পাদনা করুন", + Title: "সম্পাদন করুন প্রম্পট", }, }, HistoryCount: { - Title: "সংযুক্ত মেসেজ সংখ্যা", - SubTitle: "প্রতি অনুরোধে প্রেরিত মেসেজের সংখ্যা", + Title: "সংযুক্ত বার্তা সংখ্যা", + SubTitle: "প্রতি অনুরোধে প্রেরণ করা গেলে প্রেরণ করা হবে", }, CompressThreshold: { - Title: "ইতিহাস সংক্ষিপ্ত করার সীমা", + Title: "ইতিহাস সঙ্কুচিত করার সীমা", SubTitle: - "যদি অসংক্ষিপ্ত মেসেজের দৈর্ঘ্য এই মানের চেয়ে বেশি হয়", + "নকুল বার্তা দৈর্ঘ্য সীমা অতিক্রান্ত হলে ঐ বার্তাটি সঙ্কুচিত হবে", }, Token: { - Title: "API কী", - SubTitle: "অ্যাক্সেস কোড সীমা উপেক্ষা করতে আপনার কী ব্যবহার করুন", - Placeholder: "অপেনএআই এপিআই কী", + Title: "অ্যাপি কী", + SubTitle: "অ্যাক্সেস কোড সীমা উপেক্ষা করতে আপনার কীটি ব্যবহার করুন", + Placeholder: "OpenAI API কী", }, Usage: { - Title: "অ্যাকাউন্ট ব্যালেন্স", + Title: "একাউন্ট ব্যালেন্স", SubTitle(used: any, total: any) { - return `মাসে ব্যবহৃত $${used}, সাবস্ক্রিপশন $${total}`; + return `এই মাসে ব্যবহৃত $${used}, সাবস্ক্রিপশন $${total}`; }, IsChecking: "চেক করা হচ্ছে...", - Check: "চেক করুন", - NoAccess: "ব্যালেন্স চেক করতে API কী প্রবেশ করুন", + Check: "চেক", + NoAccess: "ব্যালেন্স চেক করতে অ্যাপি কী ইনপুট করুন", }, AccessCode: { Title: "অ্যাক্সেস কোড", - SubTitle: "অ্যাক্সেস নিয়ন্ত্রণ সক্ষম", + SubTitle: "অ্যাক্সেস নিয়ন্ত্রণ সক্রিয়", Placeholder: "অ্যাক্সেস কোড প্রয়োজন", }, Endpoint: { - Title: "এন্ডপয়েন্ট", - SubTitle: "কাস্টম এন্ডপয়েন্ট একটি http(s):// দিয়ে শুরু হতে হবে", + Title: "ইনটারপয়েন্ট", + SubTitle: "কাস্টম এন্ডপয়েন্টটি হতে হবে http(s):// দিয়ে শুরু হতে হবে", }, Model: "মডেল", Temperature: { Title: "তাপমাত্রা", - SubTitle: "বড় মান বেশি একটি যিনির্দিষ্ট আউটপুট তৈরি করে", + SubTitle: "আরতি মান বেশি করলে বেশি এলোমেলো আউটপুট হবে", + }, + TopP: { + Title: "শীর্ষ পি", + SubTitle: "তাপমাত্রা সঙ্গে এই মান পরিবর্তন করবেন না", }, MaxTokens: { Title: "সর্বাধিক টোকেন", - SubTitle: "ইনপুট টোকেন এবং জেনারেট টোকেনের সর্বাধিক দৈর্ঘ্য", + SubTitle: "ইনপুট টোকেন এবং উৎপাদিত টোকেনের সর্বাধিক দৈর্ঘ্য", }, PresencePenalty: { Title: "উপস্থিতির জরিমানা", - SubTitle: "বড় মান নতুন বিষয় সম্পর্কে কথা বলার সম্ভাবনা বাড়ায়", + SubTitle: "আরতি মান বেশি করলে নতুন বিষয়গুলি সম্ভাব্যতা বাড়াতে পারে", + }, + FrequencyPenalty: { + Title: "ফ্রিকুয়েন্সি জরিমানা", + SubTitle: + "আরতি মান বাড়ালে একই লাইন পুনরায় ব্যাবহার করার সম্ভাবনা হ্রাস পায়", }, }, Store: { - DefaultTopic: "নতুন কনভার্সেশন", - BotHello: "হ্যালো! আমি আপনাকে কিভাবে সাহায্য করতে পারি?", - Error: "কিছু ভুল হয়েছে, দয়া করে পরে আবার চেষ্টা করুন।", + DefaultTopic: "নতুন সংলাপ", + BotHello: "হ্যালো! আজকে আপনাকে কিভাবে সাহায্য করতে পারি?", + Error: "কিছু নিয়ে ভুল হয়েছে, পরে আবার চেষ্টা করুন।", Prompt: { History: (content: string) => - "এটি একটি চ্যাট ইতিহাসের সংক্ষিপ্ত সংক্ষেপণ হিসাবে: " + content, + "এটি চ্যাট ইতিহাসের সংক্ষিপ্ত সংকলনের মতো: " + content, Topic: - "অনুগ্রহ করে আমাদের কথোপকথনটির সংক্ষেপের জন্য একটি চার থেকে পাঁচ শব্দের শিরোনাম তৈরি করুন যাতে কোনো প্রবেশদ্বার, বিরামচিহ্ন, উদ্ধৃতি চিহ্ন, পূর্ণবিরাম, প্রতীক অথবা অতিরিক্ত লেখা না থাকে। আবর্তনযোগ্য উদ্ধৃতি চিহ্ন সরান।", + "আমাদের সংলাপটির চার থেকে পাঁচ শব্দের একটি শিরোনাম তৈরি করুন যা আমাদের আলাপের সংক্ষিপ্তসার হিসাবে যোগ হবে না, যেমন অভিবৃত্তি, বিন্যাস, উদ্ধৃতি, পূর্বচালক চিহ্ন, পূর্বরোবক্তির যেকোনো চিহ্ন বা অতিরিক্ত পাঠ। মেয়াদশেষ উদ্ধৃতি চেষ্টা করুন।", Summarize: - "আসলে আলোচনাটি সংক্ষেপে সংক্ষিপ্তসারে বর্ণনা করুন, যা ভবিষ্যতে প্রম্পট হিসাবে ব্যবহার করা যাবে।", + "২০০ শব্দের লম্বা হয়ে মুহূর্তে আলোচনা সংক্ষেপের রপ্তানি করুন, যেটি ভবিষ্যতের প্রম্পট হিসাবে ব্যবহার করবেন।", }, }, Copy: { Success: "ক্লিপবোর্ডে কপি করা হয়েছে", - Failed: "কপি ব্যর্থ হয়েছে, দয়া করে ক্লিপবোর্ডে অ্যাক্সেসের অনুমতি প্রদান করুন", + Failed: "কপি ব্যর্থ, অনুমতি প্রদান করার জন্য অনুমতি প্রদান করুন", }, Context: { - Toast: (x: any) => `${x} সংযুক্তকালীন প্রম্পটসহ`, - Edit: "সংযুক্তকালীন এবং মেমোরি প্রম্পটসমূহ", + Toast: (x: any) => `With ${x} contextual prompts`, + Edit: "বর্তমান চ্যাট সেটিংস", Add: "একটি প্রম্পট যোগ করুন", - Clear: "সংকেত সাফ করুন", + Clear: "সঙ্গতি পরিস্কার করুন", Revert: "পূর্ববর্তী অবস্থানে ফিরে যান", }, Plugin: { - Name: "প্লাগিন", + Name: "প্লাগইন", }, Mask: { Name: "মাস্ক", Page: { Title: "প্রম্পট টেমপ্লেট", - SubTitle: (count: number) => `${count} প্রম্পট টেমপ্লেট`, + SubTitle: (count: number) => `${count} টি প্রম্পট টেমপ্লেট`, Search: "টেমপ্লেট অনুসন্ধান করুন", Create: "তৈরি করুন", }, @@ -244,7 +284,7 @@ const bn: RequiredLocaleType = { }, EditModal: { Title: (readonly: boolean) => - `প্রম্পট টেমপ্লেট সম্পাদনা করুন ${readonly ? "(পঠনযোগ্য)" : ""}`, + `প্রম্পট টেমপ্লেট সম্পাদন করুন ${readonly ? "(readonly)" : ""}`, Download: "ডাউনলোড করুন", Clone: "ক্লোন করুন", }, @@ -254,31 +294,42 @@ const bn: RequiredLocaleType = { Sync: { Title: "গ্লোবাল কনফিগ ব্যবহার করুন", SubTitle: "এই চ্যাটে গ্লোবাল কনফিগ ব্যবহার করুন", - Confirm: "কাস্টম কনফিগগুলি গ্লোবাল কনফিগের সাথে পরিবর্তন করতে নিশ্চিত করুন?", + Confirm: "গ্লোবাল কনফিগ দ্বারা কাস্টম কনফিগ ওভাররাইড করতে নিশ্চিত করতে?", }, HideContext: { - Title: "সংশ্লিষ্ট প্রম্পট লুকান", - SubTitle: "চ্যাটে সংশ্লিষ্ট প্রম্পট দেখান না", + Title: "সংশ্লিষ্টতা প্রম্পটগুলি লুকান", + SubTitle: "চ্যাটে সংশ্লিষ্টতা প্রম্পটগুলি দেখাবেন না", + }, + Share: { + Title: "এই মাস্কটি শেয়ার করুন", + SubTitle: "এই মাস্কের একটি লিঙ্ক তৈরি করুন", + Action: "লিঙ্ক কপি করুন", }, }, }, NewChat: { Return: "ফিরে যান", - Skip: "শুধুমাত্র শুরু করুন", - Title: "একটি মাস্ক নির্বাচন করুন", - SubTitle: "মাস্কের পিছনে মনের চ্যাট করুন", - More: "আরও খুঁজুন", - NotShow: "আর প্রদর্শন করবেন না", - ConfirmNoShow: "নিষ্ক্রিয় করতে নিশ্চিত করুন? পরে সেটিংসে এটি চালু করতে পারবেন।", + Skip: "শুরু করুন", + Title: "মাস্ক নির্বাচন করুন", + SubTitle: "মাস্কের পিছনে আত্মার সঙ্গে চ্যাট করুন", + More: "আরো খুঁজুন", + NotShow: "এখনও দেখাবেন না", + ConfirmNoShow: "নিষ্ক্রিয় করতে নিশ্চিত করুন? পরে আপনি এটি সেটিংসে সক্ষম করতে পারবেন।", }, UI: { - Confirm: "কনফার্ম", - Cancel: "বাতিল", + Confirm: "নিশ্চিত করুন", + Cancel: "বাতিল করুন", Close: "বন্ধ করুন", Create: "তৈরি করুন", Edit: "সম্পাদন করুন", }, + Exporter: { + Model: "মডেল", + Messages: "বার্তা", + Topic: "টপিক", + Time: "সময়", + }, }; export default bn; \ No newline at end of file From fe2c1c4ec667cdcf988cabc6bc2839389ed455ac Mon Sep 17 00:00:00 2001 From: ki-ask Date: Wed, 5 Jul 2023 23:55:43 +0600 Subject: [PATCH 14/17] Added support for Bangla language --- app/locales/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/locales/index.ts b/app/locales/index.ts index 56538176c..7ece45838 100644 --- a/app/locales/index.ts +++ b/app/locales/index.ts @@ -58,7 +58,7 @@ export const ALL_LANG_OPTIONS: Record = { cs: "Čeština", no: "Nynorsk", ar: "العربية", - bn: "Bangla", + bn: "বাংলা", }; const LANG_KEY = "lang"; From 0373b2c9dd646c288e7027fcd3e93a9fecf94658 Mon Sep 17 00:00:00 2001 From: Yidadaa Date: Thu, 6 Jul 2023 02:03:31 +0800 Subject: [PATCH 15/17] feat: close #2266 use modal to switch model --- app/components/chat.tsx | 44 ++++++++++++++++++++++--------- app/components/ui-lib.module.scss | 32 ++++++++++++++++++++++ app/components/ui-lib.tsx | 40 +++++++++++++++++++++++++++- 3 files changed, 103 insertions(+), 13 deletions(-) diff --git a/app/components/chat.tsx b/app/components/chat.tsx index 267161506..13105e843 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -61,7 +61,14 @@ import Locale from "../locales"; import { IconButton } from "./button"; import styles from "./chat.module.scss"; -import { ListItem, Modal, showConfirm, showPrompt, showToast } from "./ui-lib"; +import { + ListItem, + Modal, + Selector, + showConfirm, + showPrompt, + showToast, +} from "./ui-lib"; import { useLocation, useNavigate } from "react-router-dom"; import { LAST_INPUT_KEY, Path, REQUEST_TIMEOUT_MS } from "../constant"; import { Avatar } from "./emoji"; @@ -404,16 +411,11 @@ export function ChatActions(props: { // switch model const currentModel = chatStore.currentSession().mask.modelConfig.model; - function nextModel() { - const models = config.models.filter((m) => m.available).map((m) => m.name); - const modelIndex = models.indexOf(currentModel); - const nextIndex = (modelIndex + 1) % models.length; - const nextModel = models[nextIndex]; - chatStore.updateCurrentSession((session) => { - session.mask.modelConfig.model = nextModel as ModelType; - session.mask.syncGlobalConfig = false; - }); - } + const models = useMemo( + () => config.models.filter((m) => m.available).map((m) => m.name), + [config.models], + ); + const [showModelSelector, setShowModelSelector] = useState(false); return (
@@ -485,10 +487,28 @@ export function ChatActions(props: { /> setShowModelSelector(true)} text={currentModel} icon={} /> + + {showModelSelector && ( + ({ + title: m, + value: m, + }))} + onClose={() => setShowModelSelector(false)} + onSelection={(s) => { + if (s.length === 0) return; + chatStore.updateCurrentSession((session) => { + session.mask.modelConfig.model = s[0] as ModelType; + session.mask.syncGlobalConfig = false; + }); + showToast(s[0]); + }} + /> + )}
); } diff --git a/app/components/ui-lib.module.scss b/app/components/ui-lib.module.scss index 86b467e53..6e8b64e81 100644 --- a/app/components/ui-lib.module.scss +++ b/app/components/ui-lib.module.scss @@ -62,6 +62,7 @@ box-shadow: var(--card-shadow); margin-bottom: 20px; animation: slide-in ease 0.3s; + background: var(--white); } .list .list-item:last-child { @@ -270,3 +271,34 @@ border: 1px solid var(--primary); } } + +.selector { + position: fixed; + top: 0; + left: 0; + height: 100vh; + width: 100vw; + background-color: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; + + &-content { + .list { + overflow: hidden; + + .list-item { + cursor: pointer; + background-color: var(--white); + + &:hover { + filter: brightness(0.95); + } + + &:active { + filter: brightness(0.9); + } + } + } + } +} diff --git a/app/components/ui-lib.tsx b/app/components/ui-lib.tsx index 512044dca..814c0dd12 100644 --- a/app/components/ui-lib.tsx +++ b/app/components/ui-lib.tsx @@ -47,9 +47,13 @@ export function ListItem(props: { children?: JSX.Element | JSX.Element[]; icon?: JSX.Element; className?: string; + onClick?: () => void; }) { return ( -
+
{props.icon &&
{props.icon}
}
@@ -432,3 +436,37 @@ export function showImageModal(img: string) { ), }); } + +export function Selector(props: { + items: Array<{ + title: string; + subTitle?: string; + value: T; + }>; + onSelection?: (selection: T[]) => void; + onClose?: () => void; + multiple?: boolean; +}) { + return ( +
+
+ + {props.items.map((item, i) => { + return ( + { + props.onSelection?.([item.value]); + props.onClose?.(); + }} + > + ); + })} + +
+
+ ); +} From 52203b50eb9cdf94a8395a02006749fde0e82d27 Mon Sep 17 00:00:00 2001 From: Yidadaa Date: Thu, 6 Jul 2023 02:07:35 +0800 Subject: [PATCH 16/17] fixup --- app/components/ui-lib.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/ui-lib.tsx b/app/components/ui-lib.tsx index 814c0dd12..b96809123 100644 --- a/app/components/ui-lib.tsx +++ b/app/components/ui-lib.tsx @@ -448,7 +448,7 @@ export function Selector(props: { multiple?: boolean; }) { return ( -
+
props.onClose?.()}>
{props.items.map((item, i) => { From 9a285ab9351af06efc37b5166df494d84ce89321 Mon Sep 17 00:00:00 2001 From: Yidadaa Date: Thu, 6 Jul 2023 02:12:37 +0800 Subject: [PATCH 17/17] fixup --- app/locales/bn.ts | 15 +++++++++------ app/locales/en.ts | 1 + 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/app/locales/bn.ts b/app/locales/bn.ts index 5f98ba21d..065f4276a 100644 --- a/app/locales/bn.ts +++ b/app/locales/bn.ts @@ -1,7 +1,7 @@ import { SubmitKey } from "../store/config"; -import { LocaleType } from "./index"; +import { PartialLocaleType } from "./index"; -const bn: LocaleType = { +const bn: PartialLocaleType = { WIP: "শীঘ্রই আসছে...", Error: { Unauthorized: @@ -159,7 +159,8 @@ const bn: LocaleType = { Mask: { Splash: { Title: "মাস্ক স্প্ল্যাশ স্ক্রিন", - SubTitle: "নতুন চ্যাট শুরু করার আগে মাস্ক স্প্ল্যাশ স্ক্রিন প্রদর্শন করুন", + SubTitle: + "নতুন চ্যাট শুরু করার আগে মাস্ক স্প্ল্যাশ স্ক্রিন প্রদর্শন করুন", }, Builtin: { Title: "মূলত মাস্ক গোপন করুন", @@ -294,7 +295,8 @@ const bn: LocaleType = { Sync: { Title: "গ্লোবাল কনফিগ ব্যবহার করুন", SubTitle: "এই চ্যাটে গ্লোবাল কনফিগ ব্যবহার করুন", - Confirm: "গ্লোবাল কনফিগ দ্বারা কাস্টম কনফিগ ওভাররাইড করতে নিশ্চিত করতে?", + Confirm: + "গ্লোবাল কনফিগ দ্বারা কাস্টম কনফিগ ওভাররাইড করতে নিশ্চিত করতে?", }, HideContext: { Title: "সংশ্লিষ্টতা প্রম্পটগুলি লুকান", @@ -314,7 +316,8 @@ const bn: LocaleType = { SubTitle: "মাস্কের পিছনে আত্মার সঙ্গে চ্যাট করুন", More: "আরো খুঁজুন", NotShow: "এখনও দেখাবেন না", - ConfirmNoShow: "নিষ্ক্রিয় করতে নিশ্চিত করুন? পরে আপনি এটি সেটিংসে সক্ষম করতে পারবেন।", + ConfirmNoShow: + "নিষ্ক্রিয় করতে নিশ্চিত করুন? পরে আপনি এটি সেটিংসে সক্ষম করতে পারবেন।", }, UI: { @@ -332,4 +335,4 @@ const bn: LocaleType = { }, }; -export default bn; \ No newline at end of file +export default bn; diff --git a/app/locales/en.ts b/app/locales/en.ts index c744fd013..9373e2b14 100644 --- a/app/locales/en.ts +++ b/app/locales/en.ts @@ -1,6 +1,7 @@ import { SubmitKey } from "../store/config"; import { LocaleType } from "./index"; +// if you are adding a new translation, please use PartialLocaleType instead of LocaleType const en: LocaleType = { WIP: "Coming Soon...", Error: {