From 6e52d14180345446abf61e933368eccbebad8694 Mon Sep 17 00:00:00 2001 From: Yidadaa Date: Tue, 7 Nov 2023 23:30:09 +0800 Subject: [PATCH 01/10] fix: #3016 disable sidebar transition on ios --- app/components/sidebar.tsx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/app/components/sidebar.tsx b/app/components/sidebar.tsx index 6212d05d9..85af3ed2e 100644 --- a/app/components/sidebar.tsx +++ b/app/components/sidebar.tsx @@ -1,4 +1,4 @@ -import { useEffect, useRef, useCallback } from "react"; +import { useEffect, useRef, useCallback, useMemo } from "react"; import styles from "./home.module.scss"; @@ -26,7 +26,7 @@ import { } from "../constant"; import { Link, useNavigate } from "react-router-dom"; -import { useMobileScreen } from "../utils"; +import { isIOS, useMobileScreen } from "../utils"; import dynamic from "next/dynamic"; import { showConfirm, showToast } from "./ui-lib"; @@ -134,6 +134,11 @@ export function SideBar(props: { className?: string }) { const { onDragStart, shouldNarrow } = useDragSideBar(); const navigate = useNavigate(); const config = useAppConfig(); + const isMobileScreen = useMobileScreen(); + const isIOSMobile = useMemo( + () => isIOS() && isMobileScreen, + [isMobileScreen], + ); useHotKey(); @@ -142,6 +147,10 @@ export function SideBar(props: { className?: string }) { className={`${styles.sidebar} ${props.className} ${ shouldNarrow && styles["narrow-sidebar"] }`} + style={{ + // #3016 disable transition on ios mobile screen + transition: isMobileScreen && isIOSMobile ? "none" : undefined, + }} >
From 836bf836d37b0d704eab132b7849447214b93d8c Mon Sep 17 00:00:00 2001 From: Yidadaa Date: Tue, 7 Nov 2023 23:54:30 +0800 Subject: [PATCH 02/10] fix: #3152 system prompt should be injected --- app/constant.ts | 9 ++++++++- app/store/chat.ts | 39 ++++++++++++++++++++------------------- 2 files changed, 28 insertions(+), 20 deletions(-) diff --git a/app/constant.ts b/app/constant.ts index 95de35627..635fbeaea 100644 --- a/app/constant.ts +++ b/app/constant.ts @@ -69,13 +69,20 @@ export const OpenaiPath = { export const DEFAULT_INPUT_TEMPLATE = `{{input}}`; // input / time / model / lang export const DEFAULT_SYSTEM_TEMPLATE = ` You are ChatGPT, a large language model trained by OpenAI. -Knowledge cutoff: {{knowledgeCutoff}} +Knowledge cutoff: {{cutoff}} Current model: {{model}} Current time: {{time}} `; export const SUMMARIZE_MODEL = "gpt-3.5-turbo"; +export const KnowledgeCutOffDate: Record = { + default: "2021-09", + "gpt-3.5-turbo-1106": "2023-04", + "gpt-4-1106-preview": "2023-04", + "gpt-4-vision-preview": "2023-04", +}; + export const DEFAULT_MODELS = [ { name: "gpt-4", diff --git a/app/store/chat.ts b/app/store/chat.ts index 9f73fdf26..95822c191 100644 --- a/app/store/chat.ts +++ b/app/store/chat.ts @@ -7,6 +7,7 @@ import { createEmptyMask, Mask } from "./mask"; import { DEFAULT_INPUT_TEMPLATE, DEFAULT_SYSTEM_TEMPLATE, + KnowledgeCutOffDate, StoreKey, SUMMARIZE_MODEL, } from "../constant"; @@ -116,7 +117,11 @@ function countMessages(msgs: ChatMessage[]) { } function fillTemplateWith(input: string, modelConfig: ModelConfig) { + let cutoff = + KnowledgeCutOffDate[modelConfig.model] ?? KnowledgeCutOffDate.default; + const vars = { + cutoff, model: modelConfig.model, time: new Date().toLocaleString(), lang: getLang(), @@ -401,26 +406,22 @@ export const useChatStore = createPersistStore( // system prompts, to get close to OpenAI Web ChatGPT const shouldInjectSystemPrompts = modelConfig.enableInjectSystemPrompts; - let systemPrompts = shouldInjectSystemPrompts ? [] : []; - + const systemPrompts = shouldInjectSystemPrompts + ? [ + createMessage({ + role: "system", + content: fillTemplateWith("", { + ...modelConfig, + template: DEFAULT_SYSTEM_TEMPLATE, + }), + }), + ] + : []; if (shouldInjectSystemPrompts) { - const model = modelConfig.model; - let systemTemplate = DEFAULT_SYSTEM_TEMPLATE; - - if (model === "gpt-4-1106-preview" || model === "gpt-4-vision-preview") { - systemTemplate = systemTemplate.replace("{{knowledgeCutoff}}", "2023-04"); - } else { - systemTemplate = systemTemplate.replace("{{knowledgeCutoff}}", "2021-09"); - } - - const systemPrompt = createMessage({ - role: "system", - content: fillTemplateWith("", { - ...modelConfig, - template: systemTemplate, - }), - }); - console.log("[Global System Prompt] ", systemPrompt.content); + console.log( + "[Global System Prompt] ", + systemPrompts.at(0)?.content ?? "empty", + ); } // long term memory From 638fdd8c3e48837d4f060cca5bc73241d9bd9071 Mon Sep 17 00:00:00 2001 From: Yidadaa Date: Wed, 8 Nov 2023 00:20:34 +0800 Subject: [PATCH 03/10] feat: default disable balance query --- README.md | 4 +- README_CN.md | 7 +- README_ES.md | 173 ----------------------- README_JA.md | 275 ------------------------------------ README_KO.md | 189 ------------------------- app/components/chat.tsx | 3 +- app/components/settings.tsx | 19 ++- app/config/server.ts | 4 +- app/constant.ts | 1 + 9 files changed, 24 insertions(+), 651 deletions(-) delete mode 100644 README_ES.md delete mode 100644 README_JA.md delete mode 100644 README_KO.md diff --git a/README.md b/README.md index 33f6e85cb..b24470c64 100644 --- a/README.md +++ b/README.md @@ -185,11 +185,11 @@ If you do not want users to input their own API key, set this value to 1. If you do not want users to use GPT-4, set this value to 1. -### `HIDE_BALANCE_QUERY` (optional) +### `ENABLE_BALANCE_QUERY` (optional) > Default: Empty -If you do not want users to query balance, set this value to 1. +If you do want users to query balance, set this value to 1, or you should set it to 0. ## Requirements diff --git a/README_CN.md b/README_CN.md index 671e74b09..e16c47a8a 100644 --- a/README_CN.md +++ b/README_CN.md @@ -98,9 +98,9 @@ OpenAI 接口代理 URL,如果你手动配置了 openai 接口代理,请填 如果你不想让用户使用 GPT-4,将此环境变量设置为 1 即可。 -### `HIDE_BALANCE_QUERY` (可选) +### `ENABLE_BALANCE_QUERY` (可选) -如果你不想让用户查询余额,将此环境变量设置为 1 即可。 +如果你想启用余额查询功能,将此环境变量设置为 1 即可。 ## 开发 @@ -169,7 +169,6 @@ bash <(curl -s https://raw.githubusercontent.com/Yidadaa/ChatGPT-Next-Web/main/s ⚠️ 注意:如果你安装过程中遇到了问题,请使用 docker 部署。 - ## 鸣谢 ### 捐赠者 @@ -181,9 +180,9 @@ bash <(curl -s https://raw.githubusercontent.com/Yidadaa/ChatGPT-Next-Web/main/s [见项目贡献者列表](https://github.com/Yidadaa/ChatGPT-Next-Web/graphs/contributors) ### 相关项目 + - [one-api](https://github.com/songquanpeng/one-api): 一站式大模型额度管理平台,支持市面上所有主流大语言模型 ## 开源协议 [MIT](https://opensource.org/license/mit/) - diff --git a/README_ES.md b/README_ES.md deleted file mode 100644 index a5787a996..000000000 --- a/README_ES.md +++ /dev/null @@ -1,173 +0,0 @@ -
-预览 - -

ChatGPT Next Web

- -Implemente su aplicación web privada ChatGPT de forma gratuita con un solo clic. - -[Demo demo](https://chat-gpt-next-web.vercel.app/) / [Problemas de comentarios](https://github.com/Yidadaa/ChatGPT-Next-Web/issues) / [Únete a Discord](https://discord.gg/zrhvHCr79N) / [Grupo QQ](https://user-images.githubusercontent.com/16968934/228190818-7dd00845-e9b9-4363-97e5-44c507ac76da.jpeg) / [Desarrolladores de consejos](https://user-images.githubusercontent.com/16968934/227772541-5bcd52d8-61b7-488c-a203-0330d8006e2b.jpg) / [Donar](#捐赠-donate-usdt) - -[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FYidadaa%2FChatGPT-Next-Web&env=OPENAI_API_KEY&env=CODE&project-name=chatgpt-next-web&repository-name=ChatGPT-Next-Web) - -[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/Yidadaa/ChatGPT-Next-Web) - -![主界面](./docs/images/cover.png) - -
- -## Comenzar - -1. Prepara el tuyo [Clave API OpenAI](https://platform.openai.com/account/api-keys); -2. Haga clic en el botón de la derecha para iniciar la implementación: - [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FYidadaa%2FChatGPT-Next-Web&env=OPENAI_API_KEY&env=CODE&project-name=chatgpt-next-web&repository-name=ChatGPT-Next-Web), inicie sesión directamente con su cuenta de Github y recuerde completar la clave API y la suma en la página de variables de entorno[Contraseña de acceso a la página](#配置页面访问密码) CÓDIGO; -3. Una vez implementado, puede comenzar; -4. (Opcional)[Enlazar un nombre de dominio personalizado](https://vercel.com/docs/concepts/projects/domains/add-a-domain): El nombre de dominio DNS asignado por Vercel está contaminado en algunas regiones y puede conectarse directamente enlazando un nombre de dominio personalizado. - -## Manténgase actualizado - -Si sigue los pasos anteriores para implementar su proyecto con un solo clic, es posible que siempre diga "La actualización existe" porque Vercel creará un nuevo proyecto para usted de forma predeterminada en lugar de bifurcar el proyecto, lo que evitará que la actualización se detecte correctamente. -Le recomendamos que siga estos pasos para volver a implementar: - -- Eliminar el repositorio original; -- Utilice el botón de bifurcación en la esquina superior derecha de la página para bifurcar este proyecto; -- En Vercel, vuelva a seleccionar e implementar,[Echa un vistazo al tutorial detallado](./docs/vercel-cn.md#如何新建项目)。 - -### Activar actualizaciones automáticas - -> Si encuentra un error de ejecución de Upstream Sync, ¡Sync Fork manualmente una vez! - -Cuando bifurca el proyecto, debido a las limitaciones de Github, debe ir manualmente a la página Acciones de su proyecto bifurcado para habilitar Flujos de trabajo y habilitar Upstream Sync Action, después de habilitarlo, puede activar las actualizaciones automáticas cada hora: - -![自动更新](./docs/images/enable-actions.jpg) - -![启用自动更新](./docs/images/enable-actions-sync.jpg) - -### Actualizar el código manualmente - -Si desea que el manual se actualice inmediatamente, puede consultarlo [Documentación para Github](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork) Aprenda a sincronizar un proyecto bifurcado con código ascendente. - -Puede destacar / ver este proyecto o seguir al autor para recibir notificaciones de nuevas actualizaciones de funciones. - -## Configurar la contraseña de acceso a la página - -> Después de configurar la contraseña, el usuario debe completar manualmente el código de acceso en la página de configuración para chatear normalmente, de lo contrario, se solicitará el estado no autorizado a través de un mensaje. - -> **advertir**: Asegúrese de establecer el número de dígitos de la contraseña lo suficientemente largo, preferiblemente más de 7 dígitos, de lo contrario[Será volado](https://github.com/Yidadaa/ChatGPT-Next-Web/issues/518)。 - -Este proyecto proporciona control de permisos limitado, agregue el nombre al nombre en la página Variables de entorno del Panel de control del proyecto Vercel `CODE` Variables de entorno con valores para contraseñas personalizadas separadas por comas: - - code1,code2,code3 - -Después de agregar o modificar la variable de entorno, por favor**Redesplegar**proyecto para poner en vigor los cambios. - -## Variable de entorno - -> La mayoría de los elementos de configuración de este proyecto se establecen a través de variables de entorno, tutorial:[Cómo modificar las variables de entorno de Vercel](./docs/vercel-cn.md)。 - -### `OPENAI_API_KEY` (Requerido) - -OpanAI key, la clave API que solicita en la página de su cuenta openai. - -### `CODE` (Opcional) - -Las contraseñas de acceso, opcionalmente, se pueden separar por comas. - -**advertir**: Si no completa este campo, cualquiera puede usar directamente su sitio web implementado, lo que puede hacer que su token se consuma rápidamente, se recomienda completar esta opción. - -### `BASE_URL` (Opcional) - -> Predeterminado: `https://api.openai.com` - -> Ejemplos: `http://your-openai-proxy.com` - -URL del proxy de interfaz OpenAI, complete esta opción si configuró manualmente el proxy de interfaz openAI. - -> Si encuentra problemas con el certificado SSL, establezca el `BASE_URL` El protocolo se establece en http. - -### `OPENAI_ORG_ID` (Opcional) - -Especifica el identificador de la organización en OpenAI. - -### `HIDE_USER_API_KEY` (Opcional) - -Si no desea que los usuarios rellenen la clave de API ellos mismos, establezca esta variable de entorno en 1. - -### `DISABLE_GPT4` (Opcional) - -Si no desea que los usuarios utilicen GPT-4, establezca esta variable de entorno en 1. - -### `HIDE_BALANCE_QUERY` (Opcional) - -Si no desea que los usuarios consulte el saldo, establezca esta variable de entorno en 1. - -## explotación - -> No se recomienda encarecidamente desarrollar o implementar localmente, debido a algunas razones técnicas, es difícil configurar el agente API de OpenAI localmente, a menos que pueda asegurarse de que puede conectarse directamente al servidor OpenAI. - -Haga clic en el botón de abajo para iniciar el desarrollo secundario: - -[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/Yidadaa/ChatGPT-Next-Web) - -Antes de empezar a escribir código, debe crear uno nuevo en la raíz del proyecto `.env.local` archivo, lleno de variables de entorno: - - OPENAI_API_KEY= - -### Desarrollo local - -1. Instale nodejs 18 e hilo, pregunte a ChatGPT para obtener más detalles; -2. ejecutar `yarn install && yarn dev` Enlatar. ⚠️ Nota: Este comando es solo para desarrollo local, no para implementación. -3. Úselo si desea implementar localmente `yarn install && yarn start` comando, puede cooperar con pm2 a daemon para evitar ser asesinado, pregunte a ChatGPT para obtener más detalles. - -## desplegar - -### Implementación de contenedores (recomendado) - -> La versión de Docker debe ser 20 o posterior, de lo contrario se indicará que no se puede encontrar la imagen. - -> ⚠️ Nota: Las versiones de Docker están de 1 a 2 días por detrás de la última versión la mayor parte del tiempo, por lo que es normal que sigas diciendo "La actualización existe" después de la implementación. - -```shell -docker pull yidadaa/chatgpt-next-web - -docker run -d -p 3000:3000 \ - -e OPENAI_API_KEY=sk-xxxx \ - -e CODE=your-password \ - yidadaa/chatgpt-next-web -``` - -También puede especificar proxy: - -```shell -docker run -d -p 3000:3000 \ - -e OPENAI_API_KEY=sk-xxxx \ - -e CODE=your-password \ - --net=host \ - -e PROXY_URL=http://127.0.0.1:7890 \ - yidadaa/chatgpt-next-web -``` - -Si necesita especificar otras variables de entorno, agréguelas usted mismo en el comando anterior `-e 环境变量=环境变量值` para especificar. - -### Implementación local - -Ejecute el siguiente comando en la consola: - -```shell -bash <(curl -s https://raw.githubusercontent.com/Yidadaa/ChatGPT-Next-Web/main/scripts/setup.sh) -``` - -⚠️ Nota: Si tiene problemas durante la instalación, utilice la implementación de Docker. - -## Reconocimiento - -### donante - -> Ver versión en inglés. - -### Colaboradores - -[Ver la lista de colaboradores del proyecto](https://github.com/Yidadaa/ChatGPT-Next-Web/graphs/contributors) - -## Licencia de código abierto - -[MIT](https://opensource.org/license/mit/) diff --git a/README_JA.md b/README_JA.md deleted file mode 100644 index 72a0d5373..000000000 --- a/README_JA.md +++ /dev/null @@ -1,275 +0,0 @@ -
-icon - -

ChatGPT Next Web

- -[English](./README.md) / [简体中文](./README_CN.md) / 日本語 - -ワンクリックで、クロスプラットフォーム ChatGPT ウェブ UI が表示されます。 - -[![Web][Web-image]][web-url] -[![Windows][Windows-image]][download-url] -[![MacOS][MacOS-image]][download-url] -[![Linux][Linux-image]][download-url] - -[Web App](https://chatgpt.nextweb.fun/) / [Desktop App](https://github.com/Yidadaa/ChatGPT-Next-Web/releases) / [Issues](https://github.com/Yidadaa/ChatGPT-Next-Web/issues) / [Discord](https://discord.gg/YCkeafCafC) / [コーヒーをおごる](https://www.buymeacoffee.com/yidadaa) / [QQ グループ](https://github.com/Yidadaa/ChatGPT-Next-Web/discussions/1724) / [開発者への報酬](https://user-images.githubusercontent.com/16968934/227772541-5bcd52d8-61b7-488c-a203-0330d8006e2b.jpg) - -[web-url]: https://chatgpt.nextweb.fun -[download-url]: https://github.com/Yidadaa/ChatGPT-Next-Web/releases -[Web-image]: https://img.shields.io/badge/Web-PWA-orange?logo=microsoftedge -[Windows-image]: https://img.shields.io/badge/-Windows-blue?logo=windows -[MacOS-image]: https://img.shields.io/badge/-MacOS-black?logo=apple -[Linux-image]: https://img.shields.io/badge/-Linux-333?logo=ubuntu - -[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FYidadaa%2FChatGPT-Next-Web&env=OPENAI_API_KEY&env=CODE&project-name=chatgpt-next-web&repository-name=ChatGPT-Next-Web) - -[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/Yidadaa/ChatGPT-Next-Web) - -![cover](./docs/images/cover.png) - -
- -## 特徴 - -- Vercel で 1 分以内に**ワンクリックで無料デプロイ**。 -- コンパクトなクライアント (~5MB) on Linux/Windows/MacOS、[今すぐダウンロード](https://github.com/Yidadaa/ChatGPT-Next-Web/releases) -- [RWKV-Runner](https://github.com/josStorer/RWKV-Runner) または [LocalAI](https://github.com/go-skynet/LocalAI) との使用をお勧めします -- プライバシー第一、すべてのデータはブラウザにローカルに保存されます -- マークダウンのサポート: LaTex、マーメイド、コードハイライトなど -- レスポンシブデザイン、ダークモード、PWA -- 最初の画面読み込み速度が速い(~100kb)、ストリーミングレスポンスをサポート -- v2 の新機能:プロンプトテンプレート(マスク)でチャットツールを作成、共有、デバッグ -- [awesome-chatgpt-prompts-zh](https://github.com/PlexPt/awesome-chatgpt-prompts-zh) と [awesome-chatgpt-prompts](https://github.com/f/awesome-chatgpt-prompts) による素晴らしいプロンプト -- トークンを保存しながら、長い会話をサポートするために自動的にチャット履歴を圧縮します -- 国際化: English、简体中文、繁体中文、日本語、Français、Español、Italiano、Türkçe、Deutsch、Tiếng Việt、Русский、Čeština、한국어 - -## ロードマップ - -- [x] システムプロンプト: ユーザー定義のプロンプトをシステムプロンプトとして固定 [#138](https://github.com/Yidadaa/ChatGPT-Next-Web/issues/138) -- [x] ユーザープロンプト: ユーザはカスタムプロンプトを編集し、プロンプトリストに保存することができます。 -- [x] プロンプトテンプレート: 事前に定義されたインコンテキストプロンプトで新しいチャットを作成 [#993](https://github.com/Yidadaa/ChatGPT-Next-Web/issues/993) -- [x] イメージとして共有、ShareGPT への共有 [#1741](https://github.com/Yidadaa/ChatGPT-Next-Web/pull/1741) -- [x] tauri を使ったデスクトップアプリ -- [x] セルフホストモデル: [RWKV-Runner](https://github.com/josStorer/RWKV-Runner) と完全に互換性があり、[LocalAI](https://github.com/go-skynet/LocalAI) のサーバーデプロイも可能です: llama/gpt4all/rwkv/vicuna/koala/gpt4all-j/cerebras/falcon/dolly など -- [ ] プラグイン: ネットワーク検索、計算機、その他のAPIなどをサポート [#165](https://github.com/Yidadaa/ChatGPT-Next-Web/issues/165) - -## 新機能 - -- 🚀 v2.0 がリリースされ、プロンプト・テンプレートが作成できるようになりました!こちらをお読みください: [ChatGPT プロンプトエンジニアリング Tips: ゼロ、一発、数発プロンプト](https://www.allabtai.com/prompt-engineering-tips-zero-one-and-few-shot-prompting/)。 -- 💡 このプロジェクトをいつでもどこでも簡単に使いたいですか?このデスクトッププラグインをお試しください: https://github.com/mushan0x0/AI0x0.com -- 🚀 v2.7 では、会話を画像として共有したり、ShareGPT に共有することができます! -- 🚀 v2.8 全てのプラットフォームで動作するクライアントができました! - -## 始める - -> [簡体字中国語 > 始め方](./README_CN.md#开始使用) - -1. [OpenAI API Key](https://platform.openai.com/account/api-keys) を取得する; -2. クリック - [![Vercel でデプロイ](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FYidadaa%2FChatGPT-Next-Web&env=OPENAI_API_KEY&env=CODE&project-name=chatgpt-next-web&repository-name=ChatGPT-Next-Web)をクリックします。`CODE` はあなたのページのパスワードであることを忘れないでください; -3. お楽しみください :) - -## FAQ - -[簡体字中国語 > よくある質問](./docs/faq-cn.md) - -[English > FAQ](./docs/faq-en.md) - -## 更新を継続する - -> [簡体字中国語 > コードを最新の状態に保つ方法](./README_CN.md#保持更新) - -上記の手順に沿ってワンクリックで自分のプロジェクトをデプロイした場合、"Updates Available" が常に表示される問題に遭遇するかもしれません。これは、Vercel がこのプロジェクトをフォークする代わりに、デフォルトで新しいプロジェクトを作成するため、アップデートを正しく検出できないためです。 - -以下の手順で再デプロイすることをお勧めします: - -- 元のリポジトリを削除してください; -- ページの右上にあるフォークボタンを使って、このプロジェクトをフォークする; -- Vercel を選択し、再度デプロイする。[詳しいチュートリアルを参照](./docs/vercel-cn.md)。 - -### 自動アップデートを有効にする - -> Upstream Sync の実行に失敗した場合は、手動で一度フォークしてください。 - -プロジェクトをフォークした後、GitHub の制限により、フォークしたプロジェクトの Actions ページで Workflows と Upstream Sync Action を手動で有効にする必要があります。有効にすると、1 時間ごとに自動更新がスケジュールされます: - -![Automatic Updates](./docs/images/enable-actions.jpg) - -![Enable Automatic Updates](./docs/images/enable-actions-sync.jpg) - -### 手動でコードを更新する - -すぐに更新したい場合は、[GitHub ドキュメント](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork) をチェックして、フォークしたプロジェクトを上流のコードと同期させる方法を学んでください。 - -このプロジェクトにスターをつけたり、ウォッチしたり、作者をフォローすることで、リリースの通知を受け取ることができます。 - -## アクセスパスワード - -> [簡体字中国語 > アクセスパスワードを増やす方法](./README_CN.md#配置页面访问密码) - -このプロジェクトではアクセス制御を制限しています。vercel の環境変数のページに `CODE` という環境変数を追加してください。その値は次のようにカンマで区切られたパスワードでなければなりません: - -``` -code1,code2,code3 -``` - -この環境変数を追加または変更した後は、変更を有効にするためにプロジェクトを再デプロイしてください。 - -## 環境変数 - -> [簡体字中国語 > API キー、アクセスパスワード、インターフェイスプロキシ設定方法](./README_CN.md#环境变量) - -### `OPENAI_API_KEY` (必須) - -OpenAI の api キー。 - -### `CODE` (オプション) - -カンマで区切られたアクセスパスワード。 - -### `BASE_URL` (オプション) - -> デフォルト: `https://api.openai.com` - -> 例: `http://your-openai-proxy.com` - -OpenAI api のリクエストベースの url をオーバーライドします。 - -### `OPENAI_ORG_ID` (オプション) - -OpenAI の組織 ID を指定します。 - -### `HIDE_USER_API_KEY` (オプション) - -> デフォルト: 空 - -ユーザーに自分の API キーを入力させたくない場合は、この値を 1 に設定する。 - -### `DISABLE_GPT4` (オプション) - -> デフォルト: 空 - -ユーザーに GPT-4 を使用させたくない場合は、この値を 1 に設定する。 - -### `HIDE_BALANCE_QUERY` (オプション) - -> デフォルト: 空 - -ユーザーに残高を照会させたくない場合は、この値を 1 に設定する。 - -## 必要条件 - -NodeJS >= 18、Docker >= 20 - -## Development - -> [簡体字中国語 > 二次開発の進め方](./README_CN.md#开发) - -[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/Yidadaa/ChatGPT-Next-Web) - -開発を始める前に、プロジェクトのルートに新しい `.env.local` ファイルを作成し、そこに api キーを置く必要があります: - -``` -OPENAI_API_KEY= - -# OpenAI サービスにアクセスできない場合は、この BASE_URL を使用してください -BASE_URL=https://chatgpt1.nextweb.fun/api/proxy -``` - -### ローカルデプロイ - -```shell -# 1. nodejs と yarn をまずインストールする -# 2. `.env.local` にローカルの env vars を設定する -# 3. 実行 -yarn install -yarn dev -``` - -## デプロイ - -> [簡体字中国語 > プライベートサーバーへのデプロイ方法](./README_CN.md#部署) - -### Docker (推奨) - -```shell -docker pull yidadaa/chatgpt-next-web - -docker run -d -p 3000:3000 \ - -e OPENAI_API_KEY=sk-xxxx \ - -e CODE=your-password \ - yidadaa/chatgpt-next-web -``` - -プロキシの後ろでサービスを開始することができる: - -```shell -docker run -d -p 3000:3000 \ - -e OPENAI_API_KEY=sk-xxxx \ - -e CODE=your-password \ - -e PROXY_URL=http://localhost:7890 \ - yidadaa/chatgpt-next-web -``` - -プロキシにパスワードが必要な場合: - -```shell --e PROXY_URL="http://127.0.0.1:7890 user pass" -``` - -### シェル - -```shell -bash <(curl -s https://raw.githubusercontent.com/Yidadaa/ChatGPT-Next-Web/main/scripts/setup.sh) -``` - -## スクリーンショット - -![Settings](./docs/images/settings.png) - -![More](./docs/images/more.png) - -## 翻訳 - -新しい翻訳を追加したい場合は、この[ドキュメント](./docs/translation.md)をお読みください。 - -## 寄付 - -[コーヒーをおごる](https://www.buymeacoffee.com/yidadaa) - -## スペシャルサンクス - -### スポンサー - -> 寄付金額が 100 元以上のユーザーのみリストアップしています - -[@mushan0x0](https://github.com/mushan0x0) -[@ClarenceDan](https://github.com/ClarenceDan) -[@zhangjia](https://github.com/zhangjia) -[@hoochanlon](https://github.com/hoochanlon) -[@relativequantum](https://github.com/relativequantum) -[@desenmeng](https://github.com/desenmeng) -[@webees](https://github.com/webees) -[@chazzhou](https://github.com/chazzhou) -[@hauy](https://github.com/hauy) -[@Corwin006](https://github.com/Corwin006) -[@yankunsong](https://github.com/yankunsong) -[@ypwhs](https://github.com/ypwhs) -[@fxxxchao](https://github.com/fxxxchao) -[@hotic](https://github.com/hotic) -[@WingCH](https://github.com/WingCH) -[@jtung4](https://github.com/jtung4) -[@micozhu](https://github.com/micozhu) -[@jhansion](https://github.com/jhansion) -[@Sha1rholder](https://github.com/Sha1rholder) -[@AnsonHyq](https://github.com/AnsonHyq) -[@synwith](https://github.com/synwith) -[@piksonGit](https://github.com/piksonGit) - -### コントリビューター - -[コントリビューター達](https://github.com/Yidadaa/ChatGPT-Next-Web/graphs/contributors) - -## ライセンス - -[MIT](https://opensource.org/license/mit/) diff --git a/README_KO.md b/README_KO.md deleted file mode 100644 index c4000c3a2..000000000 --- a/README_KO.md +++ /dev/null @@ -1,189 +0,0 @@ -
-프리뷰 - -

ChatGPT Next Web

- -개인 ChatGPT 웹 애플리케이션을 한 번의 클릭으로 무료로 배포하세요. - -[데모 Demo](https://chat-gpt-next-web.vercel.app/) / [피드백 Issues](https://github.com/Yidadaa/ChatGPT-Next-Web/issues) / [Discord 참여](https://discord.gg/zrhvHCr79N) / [QQ 그룹](https://user-images.githubusercontent.com/16968934/228190818-7dd00845-e9b9-4363-97e5-44c507ac76da.jpeg) / [개발자에게 기부](https://user-images.githubusercontent.com/16968934/227772541-5bcd52d8-61b7-488c-a203-0330d8006e2b.jpg) / [기부 Donate](#기부-donate-usdt) - -[![Vercel로 배포하기](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FYidadaa%2FChatGPT-Next-Web&env=OPENAI_API_KEY&env=CODE&project-name=chatgpt-next-web&repository-name=ChatGPT-Next-Web) - -[![Gitpod에서 열기](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/Yidadaa/ChatGPT-Next-Web) - -![메인 화면](./docs/images/cover.png) - -
- -## 사용 시작 - -1. [OpenAI API Key](https://platform.openai.com/account/api-keys)를 준비합니다. -2. 오른쪽 버튼을 클릭하여 배포를 시작하십시오: - [![Vercel로 배포하기](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FYidadaa%2FChatGPT-Next-Web&env=OPENAI_API_KEY&env=CODE&project-name=chatgpt-next-web&repository-name=ChatGPT-Next-Web). Github 계정으로 바로 로그인하십시오. API Key와 [페이지 접근 비밀번호](#페이지-접근-비밀번호-설정) CODE를 환경 변수 페이지에 입력하십시오. -3. 배포가 완료되면 사용을 시작하십시오. -4. (선택 사항) [사용자 정의 도메인 바인딩](https://vercel.com/docs/concepts/projects/domains/add-a-domain) : Vercel에서 할당한 도메인 DNS가 일부 지역에서 오염되어 있습니다. 사용자 정의 도메인을 바인딩하면 직접 연결할 수 있습니다. - -## 업데이트 유지 - -위의 단계대로 프로젝트를 배포한 경우 "업데이트가 있습니다"라는 메시지가 항상 표시될 수 있습니다. 이는 Vercel이 기본적으로 새 프로젝트를 생성하고이 프로젝트를 포크하지 않기 때문입니다. 이 문제는 업데이트를 올바르게 감지할 수 없습니다. -아래 단계를 따라 다시 배포하십시오: - -- 기존 저장소를 삭제합니다. -- 페이지 오른쪽 상단의 포크 버튼을 사용하여 이 프로젝트를 포크합니다. -- Vercel에서 다시 선택하여 배포하십시오. [자세한 튜토리얼 보기](./docs/vercel-cn.md#새-프로젝트-만드는-방법). - -### 자동 업데이트 활성화 - -> Upstream Sync 오류가 발생한 경우 수동으로 Sync Fork를 한 번 실행하십시오! - -프로젝트를 포크한 후 GitHub의 제한으로 인해 포크한 프로젝트의 동작 페이지에서 워크플로우를 수동으로 활성화해야 합니다. Upstream Sync Action을 활성화하면 매시간마다 자동 업데이트가 활성화됩니다: - -![자동 업데이트](./docs/images/enable-actions.jpg) - -![자동 업데이트 활성화](./docs/images/enable-actions-sync.jpg) - -### 수동으로 코드 업데이트 - -수동으로 즉시 업데이트하려면 [GitHub 문서](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork)에서 포크된 프로젝트를 어떻게 원본 코드와 동기화하는지 확인하십시오. - -이 프로젝트에 별표/감시를 부여하거나 작성자를 팔로우하여 새 기능 업데이트 알림을 받을 수 있습니다. - -## 페이지 접근 비밀번호 설정 - -> 비밀번호가 설정된 후, 사용자는 설정 페이지에서 접근 코드를 수동으로 입력하여 정상적으로 채팅할 수 있습니다. 그렇지 않으면 메시지를 통해 권한이 없는 상태가 표시됩니다. - -> **경고** : 비밀번호의 길이를 충분히 길게 설정하십시오. 최소 7 자리 이상이 좋습니다. 그렇지 않으면 [해킹될 수 있습니다](https://github.com/Yidadaa/ChatGPT-Next-Web/issues/518). - -이 프로젝트는 제한된 권한 제어 기능을 제공합니다. Vercel 프로젝트 컨트롤 패널의 환경 변수 페이지에서 `CODE`라는 환경 변수를 추가하십시오. 값은 쉼표로 구분된 사용자 정의 비밀번호로 설정됩니다. (아래 예시의 경우 `code1` `code2` `code3` 3개의 비밀번호가 생성됩니다.) - -``` -code1,code2,code3 -``` - -이 환경 변수를 추가하거나 수정한 후에는 프로젝트를 다시 배포하여 변경 사항을 적용해야 합니다. - -## 환경 변수 -> 이 프로젝트에서 대부분의 설정 요소들은 환경 변수를 통해 설정됩니다. [Vercel 환경변수 수정 방법.](./docs/vercel-ko.md)。 - -## OPENAI_API_KEY (필수 항목) - -OpenAI 키로, openai 계정 페이지에서 신청한 api key입니다. - -## CODE (선택 가능) - -접근 비밀번호로, 선택적입니다. 쉼표를 사용하여 여러 비밀번호를 구분할 수 있습니다. - -**경고** : 이 항목을 입력하지 않으면, 누구나 여러분이 배포한 웹사이트를 직접 사용할 수 있게 됩니다. 이로 인해 토큰이 빠르게 소진될 수 있으므로, 이 항목을 반드시 입력하는 것이 좋습니다. - -## BASE_URL (선택 가능) - -> 기본값: `https://api.openai.com` - -> 예시: `http://your-openai-proxy.com` - -OpenAI 인터페이스 프록시 URL입니다. 만약, 수동으로 openai 인터페이스 proxy를 설정했다면, 이 항목을 입력하셔야 합니다. - -**참고**: SSL 인증서 문제가 발생한 경우, BASE_URL의 프로토콜을 http로 설정하세요. - -## OPENAI_ORG_ID (선택 가능) - -OpenAI 내의 조직 ID를 지정합니다. - -## HIDE_USER_API_KEY (선택 가능) - -사용자가 API Key를 직접 입력하는 것을 원하지 않는 경우, 이 환경 변수를 1로 설정하세요. - -## DISABLE_GPT4 (선택 가능) - -사용자가 GPT-4를 사용하는 것을 원하지 않는 경우, 이 환경 변수를 1로 설정하세요. - -## HIDE_BALANCE_QUERY (선택 가능) - -사용자가 잔액을 조회하는 것을 원하지 않는 경우, 이 환경 변수를 1로 설정하세요. - -## 개발 - -아래 버튼을 클릭하여 개발을 시작하세요: - -[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/Yidadaa/ChatGPT-Next-Web) - -코드 작성을 전, 프로젝트 루트 디렉토리에 `.env.local` 파일을 새로 만들고 해당 파일에 환경 변수를 입력해야 합니다: - -``` -OPENAI_API_KEY=<여기에 여러분의 api 키를 입력하세요> - -#중국 사용자들은 이 프로젝트에 포함된 프록시를 사용하여 개발할 수 있습니다. 또는 다른 프록시 주소를 자유롭게 선택할 수 있습니다. -BASE_URL=https://chatgpt1.nextweb.fun/api/proxy -``` - - -### 로컬 환경에서의 개발 - -1. nodejs 18과 yarn을 설치하세요. 자세한 사항은 ChatGPT에 문의하십시오. -2. `yarn install && yarn dev` 명령을 실행하세요. ⚠️ 주의: 이 명령은 로컬 개발 전용입니다. 배포용으로 사용하지 마십시오! -3. 로컬에서 배포하고 싶다면, `yarn install && yarn build && yarn start` 명령을 사용하세요. pm2와 함께 사용하여 프로세스를 보호하고, 강제 종료되지 않도록 할 수 있습니다. 자세한 내용은 ChatGPT에 문의하세요. - -## 배포 - -### 컨테이너 배포 (추천) - -> Docker 버전은 20 이상이어야 합니다. 그렇지 않으면 이미지를 찾을 수 없다는 메시지가 표시됩니다. - -> ⚠️ 주의: docker 버전은 대부분의 경우 최신 버전보다 1~2일 뒤처집니다. 따라서 배포 후 "업데이트 가능" 알림이 지속적으로 나타날 수 있으며, 이는 정상적인 현상입니다. - -```shell -docker pull yidadaa/chatgpt-next-web - -docker run -d -p 3000:3000 \ - -e OPENAI_API_KEY=sk-xxxx \ - -e CODE=페이지 접근 비밀번호 \ - yidadaa/chatgpt-next-web -``` - -프록시를 지정하려면 다음을 사용하세요: - -```shell -docker run -d -p 3000:3000 \ - -e OPENAI_API_KEY=sk-xxxx \ - -e CODE=페이지 접근 비밀번호 \ - --net=host \ - -e PROXY_URL=http://127.0.0.1:7890 \ - yidadaa/chatgpt-next-web -``` - -로컬 프록시에 사용자 이름과 비밀번호가 필요한 경우, 아래와 같이 사용하세요: - -```shell --e PROXY_URL="http://127.0.0.1:7890 사용자이름 비밀번호" -``` - -다른 환경 변수를 지정해야 하는 경우, 위의 명령에 `-e 환경변수=환경변수값`을 추가하여 지정하세요. - -### 로컬 배포 - -콘솔에서 아래의 명령을 실행하세요: - -```shell -bash <(curl -s https://raw.githubusercontent.com/Yidadaa/ChatGPT-Next-Web/main/scripts/setup.sh) -``` - -⚠️ 주의: 설치 중 문제가 발생한 경우, docker로 배포하세요. - - -## 감사의 말 - -### 기부자 - -> 영문 버전 참조. - -### 기여자 - -[프로젝트 기여자 목록 보기](https://github.com/Yidadaa/ChatGPT-Next-Web/graphs/contributors) - -### 관련 프로젝트 -- [one-api](https://github.com/songquanpeng/one-api): 통합 대형 모델 할당 관리 플랫폼, 주요 대형 언어 모델 모두 지원 - -## 오픈소스 라이센스 - -[MIT](https://opensource.org/license/mit/) - diff --git a/app/components/chat.tsx b/app/components/chat.tsx index cca096eb8..a30e505dd 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -73,11 +73,10 @@ import { showPrompt, showToast, } from "./ui-lib"; -import { useLocation, useNavigate } from "react-router-dom"; +import { useNavigate } from "react-router-dom"; import { CHAT_PAGE_SIZE, LAST_INPUT_KEY, - MAX_RENDER_MSG_COUNT, Path, REQUEST_TIMEOUT_MS, UNFINISHED_INPUT, diff --git a/app/components/settings.tsx b/app/components/settings.tsx index 795469a96..cfe81ee48 100644 --- a/app/components/settings.tsx +++ b/app/components/settings.tsx @@ -50,7 +50,13 @@ import Locale, { } from "../locales"; import { copyToClipboard } from "../utils"; import Link from "next/link"; -import { Path, RELEASE_URL, STORAGE_KEY, UPDATE_URL } from "../constant"; +import { + OPENAI_BASE_URL, + Path, + RELEASE_URL, + STORAGE_KEY, + UPDATE_URL, +} from "../constant"; import { Prompt, SearchService, usePromptStore } from "../store/prompt"; import { ErrorBoundary } from "./error"; import { InputRange } from "./input-range"; @@ -571,13 +577,19 @@ export function Settings() { console.log("[Update] remote version ", updateStore.remoteVersion); } + const accessStore = useAccessStore(); + const shouldHideBalanceQuery = useMemo(() => { + const isOpenAiUrl = accessStore.openaiUrl.includes(OPENAI_BASE_URL); + return accessStore.hideBalanceQuery || isOpenAiUrl; + }, [accessStore.hideBalanceQuery, accessStore.openaiUrl]); + const usage = { used: updateStore.used, subscription: updateStore.subscription, }; const [loadingUsage, setLoadingUsage] = useState(false); function checkUsage(force = false) { - if (accessStore.hideBalanceQuery) { + if (shouldHideBalanceQuery) { return; } @@ -587,7 +599,6 @@ export function Settings() { }); } - const accessStore = useAccessStore(); const enabledAccessControl = useMemo( () => accessStore.enabledAccessControl(), // eslint-disable-next-line react-hooks/exhaustive-deps @@ -916,7 +927,7 @@ export function Settings() { ) : null} - {!accessStore.hideBalanceQuery ? ( + {!shouldHideBalanceQuery ? ( { isVercel: !!process.env.VERCEL, hideUserApiKey: !!process.env.HIDE_USER_API_KEY, disableGPT4: !!process.env.DISABLE_GPT4, - hideBalanceQuery: !!process.env.HIDE_BALANCE_QUERY, + hideBalanceQuery: !process.env.ENABLE_BALANCE_QUERY, }; }; diff --git a/app/constant.ts b/app/constant.ts index 635fbeaea..8d36e0b55 100644 --- a/app/constant.ts +++ b/app/constant.ts @@ -10,6 +10,7 @@ export const RUNTIME_CONFIG_DOM = "danger-runtime-config"; export const DEFAULT_CORS_HOST = "https://ab.nextweb.fun"; export const DEFAULT_API_HOST = `${DEFAULT_CORS_HOST}/api/proxy`; +export const OPENAI_BASE_URL = "https://api.openai.com"; export enum Path { Home = "/", From c5ca278253456c7d65bcd877b0ca40da0b8026eb Mon Sep 17 00:00:00 2001 From: Yidadaa Date: Wed, 8 Nov 2023 00:30:02 +0800 Subject: [PATCH 04/10] feat: close #2908 allow to disable parse settings from link --- README.md | 6 ++++++ README_CN.md | 4 ++++ app/api/config/route.ts | 1 + app/components/chat.tsx | 9 ++++++--- app/components/settings.tsx | 12 +++++++++--- app/config/server.ts | 2 ++ app/store/access.ts | 10 +--------- 7 files changed, 29 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index b24470c64..91e03d800 100644 --- a/README.md +++ b/README.md @@ -191,6 +191,12 @@ If you do not want users to use GPT-4, set this value to 1. If you do want users to query balance, set this value to 1, or you should set it to 0. +### `DISABLE_FAST_LINK` (optional) + +> Default: Empty + +If you want to disable parse settings from url, set this to 1. + ## Requirements NodeJS >= 18, Docker >= 20 diff --git a/README_CN.md b/README_CN.md index e16c47a8a..13b97417d 100644 --- a/README_CN.md +++ b/README_CN.md @@ -102,6 +102,10 @@ OpenAI 接口代理 URL,如果你手动配置了 openai 接口代理,请填 如果你想启用余额查询功能,将此环境变量设置为 1 即可。 +### `DISABLE_FAST_LINK` (可选) + +如果你想禁用从链接解析预制设置,将此环境变量设置为 1 即可。 + ## 开发 点击下方按钮,开始二次开发: diff --git a/app/api/config/route.ts b/app/api/config/route.ts index 0bfc955bf..44af8d3b9 100644 --- a/app/api/config/route.ts +++ b/app/api/config/route.ts @@ -11,6 +11,7 @@ const DANGER_CONFIG = { hideUserApiKey: serverConfig.hideUserApiKey, disableGPT4: serverConfig.disableGPT4, hideBalanceQuery: serverConfig.hideBalanceQuery, + disableFastLink: serverConfig.disableFastLink, }; declare global { diff --git a/app/components/chat.tsx b/app/components/chat.tsx index a30e505dd..18353e8fc 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -975,14 +975,17 @@ function _Chat() { doSubmit(text); }, code: (text) => { + if (accessStore.disableFastLink) return; console.log("[Command] got code from url: ", text); showConfirm(Locale.URLCommand.Code + `code = ${text}`).then((res) => { if (res) { - accessStore.updateCode(text); + accessStore.update((access) => (access.accessCode = text)); } }); }, settings: (text) => { + if (accessStore.disableFastLink) return; + try { const payload = JSON.parse(text) as { key?: string; @@ -998,10 +1001,10 @@ function _Chat() { ).then((res) => { if (!res) return; if (payload.key) { - accessStore.updateToken(payload.key); + accessStore.update((access) => (access.token = payload.key!)); } if (payload.url) { - accessStore.updateOpenAiUrl(payload.url); + accessStore.update((access) => (access.openaiUrl = payload.url!)); } }); } diff --git a/app/components/settings.tsx b/app/components/settings.tsx index cfe81ee48..572c0743a 100644 --- a/app/components/settings.tsx +++ b/app/components/settings.tsx @@ -888,7 +888,9 @@ export function Settings() { type="text" placeholder={Locale.Settings.AccessCode.Placeholder} onChange={(e) => { - accessStore.updateCode(e.currentTarget.value); + accessStore.update( + (access) => (access.accessCode = e.currentTarget.value), + ); }} /> @@ -907,7 +909,9 @@ export function Settings() { value={accessStore.openaiUrl} placeholder="https://api.openai.com/" onChange={(e) => - accessStore.updateOpenAiUrl(e.currentTarget.value) + accessStore.update( + (access) => (access.openaiUrl = e.currentTarget.value), + ) } > @@ -920,7 +924,9 @@ export function Settings() { type="text" placeholder={Locale.Settings.Token.Placeholder} onChange={(e) => { - accessStore.updateToken(e.currentTarget.value); + accessStore.update( + (access) => (access.token = e.currentTarget.value), + ); }} /> diff --git a/app/config/server.ts b/app/config/server.ts index 62b435e93..2df806fed 100644 --- a/app/config/server.ts +++ b/app/config/server.ts @@ -13,6 +13,7 @@ declare global { BUILD_MODE?: "standalone" | "export"; BUILD_APP?: string; // is building desktop app ENABLE_BALANCE_QUERY?: string; // allow user to query balance or not + DISABLE_FAST_LINK?: string; // disallow parse settings from url or not } } } @@ -48,5 +49,6 @@ export const getServerSideConfig = () => { hideUserApiKey: !!process.env.HIDE_USER_API_KEY, disableGPT4: !!process.env.DISABLE_GPT4, hideBalanceQuery: !process.env.ENABLE_BALANCE_QUERY, + disableFastLink: !!process.env.DISABLE_FAST_LINK, }; }; diff --git a/app/store/access.ts b/app/store/access.ts index 9eaa81e5e..3d889f6e7 100644 --- a/app/store/access.ts +++ b/app/store/access.ts @@ -16,6 +16,7 @@ const DEFAULT_ACCESS_STATE = { hideUserApiKey: false, hideBalanceQuery: false, disableGPT4: false, + disableFastLink: false, openaiUrl: DEFAULT_OPENAI_URL, }; @@ -29,15 +30,6 @@ export const useAccessStore = createPersistStore( return get().needCode; }, - updateCode(code: string) { - set(() => ({ accessCode: code?.trim() })); - }, - updateToken(token: string) { - set(() => ({ token: token?.trim() })); - }, - updateOpenAiUrl(url: string) { - set(() => ({ openaiUrl: url?.trim() })); - }, isAuthorized() { this.fetch(); From c7321fddfbe92dc0e9ef81862aac3daa93653881 Mon Sep 17 00:00:00 2001 From: Yidadaa Date: Wed, 8 Nov 2023 00:34:31 +0800 Subject: [PATCH 05/10] fixup --- app/components/auth.tsx | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/app/components/auth.tsx b/app/components/auth.tsx index b82d0e894..577d77542 100644 --- a/app/components/auth.tsx +++ b/app/components/auth.tsx @@ -12,11 +12,16 @@ import { getClientConfig } from "../config/client"; export function AuthPage() { const navigate = useNavigate(); - const access = useAccessStore(); + const accessStore = useAccessStore(); const goHome = () => navigate(Path.Home); const goChat = () => navigate(Path.Chat); - const resetAccessCode = () => { access.updateCode(""); access.updateToken(""); }; // Reset access code to empty string + const resetAccessCode = () => { + accessStore.update((access) => { + access.token = ""; + access.accessCode = ""; + }); + }; // Reset access code to empty string useEffect(() => { if (getClientConfig()?.isApp) { @@ -38,21 +43,25 @@ export function AuthPage() { className={styles["auth-input"]} type="password" placeholder={Locale.Auth.Input} - value={access.accessCode} + value={accessStore.accessCode} onChange={(e) => { - access.updateCode(e.currentTarget.value); + accessStore.update( + (access) => (access.accessCode = e.currentTarget.value), + ); }} /> - {!access.hideUserApiKey ? ( + {!accessStore.hideUserApiKey ? ( <>
{Locale.Auth.SubTips}
{ - access.updateToken(e.currentTarget.value); + accessStore.update( + (access) => (access.token = e.currentTarget.value), + ); }} /> From 54a53328341af2d07db19e56db5febdaac225a87 Mon Sep 17 00:00:00 2001 From: Yidadaa Date: Wed, 8 Nov 2023 01:04:20 +0800 Subject: [PATCH 06/10] feat: sort model by name --- app/store/config.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/store/config.ts b/app/store/config.ts index 184355c94..0fbc26dfe 100644 --- a/app/store/config.ts +++ b/app/store/config.ts @@ -133,7 +133,9 @@ export const useAppConfig = createPersistStore( .customModels.split(",") .filter((v) => !!v && v.length > 0) .map((m) => ({ name: m, available: true })); - return get().models.concat(customModels); + const allModels = get().models.concat(customModels); + allModels.sort((a, b) => (a.name < b.name ? -1 : 1)); + return allModels; }, }), { From dbee5bc515fd9bad33fcdce0f8b176494db2d02a Mon Sep 17 00:00:00 2001 From: Yifei Zhang Date: Wed, 8 Nov 2023 01:05:07 +0800 Subject: [PATCH 07/10] Update tauri.conf.json --- src-tauri/tauri.conf.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index e530203f6..649e3816d 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -9,7 +9,7 @@ }, "package": { "productName": "ChatGPT Next Web", - "version": "2.9.9" + "version": "2.9.10" }, "tauri": { "allowlist": { From 9cb889c34f2653c812b044c1e6ebd264d98067a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=89=E5=BF=86?= Date: Wed, 8 Nov 2023 07:09:52 +0800 Subject: [PATCH 08/10] docs: up to date --- .env.template | 8 ++++---- app/api/common.ts | 11 +++++++---- docker-compose.yml | 12 +++++++++--- docs/cloudflare-pages-cn.md | 7 +++++-- docs/cloudflare-pages-en.md | 13 +++++++++---- 5 files changed, 34 insertions(+), 17 deletions(-) diff --git a/.env.template b/.env.template index 1ff575f11..5e73e6d85 100644 --- a/.env.template +++ b/.env.template @@ -24,10 +24,10 @@ HIDE_USER_API_KEY= # (optional) # Default: Empty -# If you do not want users to use GPT-4, set this value to 1. -DISABLE_GPT4= +# If you do want users to query balance, set this value to 1. +ENABLE_BALANCE_QUERY= # (optional) # Default: Empty -# If you do not want users to query balance, set this value to 1. -HIDE_BALANCE_QUERY= +# If you want to disable parse settings from url, set this value to 1. +DISABLE_FAST_LINK= diff --git a/app/api/common.ts b/app/api/common.ts index cd2936ee3..0af7761d8 100644 --- a/app/api/common.ts +++ b/app/api/common.ts @@ -20,7 +20,7 @@ export async function requestOpenai(req: NextRequest) { baseUrl = `${PROTOCOL}://${baseUrl}`; } - if (baseUrl.endsWith('/')) { + if (baseUrl.endsWith("/")) { baseUrl = baseUrl.slice(0, -1); } @@ -31,9 +31,12 @@ export async function requestOpenai(req: NextRequest) { console.log("[Org ID]", process.env.OPENAI_ORG_ID); } - const timeoutId = setTimeout(() => { - controller.abort(); - }, 10 * 60 * 1000); + const timeoutId = setTimeout( + () => { + controller.abort(); + }, + 10 * 60 * 1000, + ); const fetchUrl = `${baseUrl}/${openaiPath}`; const fetchOptions: RequestInit = { diff --git a/docker-compose.yml b/docker-compose.yml index c4312cfe3..57ca12e03 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,6 @@ -version: '3.9' +version: "3.9" services: - chatgpt-next-web: + chatgpt-next-web: profiles: ["no-proxy"] container_name: chatgpt-next-web image: yidadaa/chatgpt-next-web @@ -13,8 +13,11 @@ services: - OPENAI_ORG_ID=$OPENAI_ORG_ID - HIDE_USER_API_KEY=$HIDE_USER_API_KEY - DISABLE_GPT4=$DISABLE_GPT4 + - ENABLE_BALANCE_QUERY=$ENABLE_BALANCE_QUERY + - DISABLE_FAST_LINK=$DISABLE_FAST_LINK + - OPENAI_SB=$OPENAI_SB - chatgpt-next-web-proxy: + chatgpt-next-web-proxy: profiles: ["proxy"] container_name: chatgpt-next-web-proxy image: yidadaa/chatgpt-next-web @@ -28,3 +31,6 @@ services: - OPENAI_ORG_ID=$OPENAI_ORG_ID - HIDE_USER_API_KEY=$HIDE_USER_API_KEY - DISABLE_GPT4=$DISABLE_GPT4 + - ENABLE_BALANCE_QUERY=$ENABLE_BALANCE_QUERY + - DISABLE_FAST_LINK=$DISABLE_FAST_LINK + - OPENAI_SB=$OPENAI_SB diff --git a/docs/cloudflare-pages-cn.md b/docs/cloudflare-pages-cn.md index 2f9a99f2d..e1567af03 100644 --- a/docs/cloudflare-pages-cn.md +++ b/docs/cloudflare-pages-cn.md @@ -1,6 +1,7 @@ # Cloudflare Pages 部署指南 ## 如何新建项目 + 在 Github 上 fork 本项目,然后登录到 dash.cloudflare.com 并进入 Pages。 1. 点击 "Create a project"。 @@ -30,10 +31,12 @@ - `OPENAI_ORG_ID= 可选填,指定 OpenAI 中的组织 ID` - `HIDE_USER_API_KEY=1 可选,不让用户自行填入 API Key` - `DISABLE_GPT4=1 可选,不让用户使用 GPT-4` - + - `ENABLE_BALANCE_QUERY=1 可选,启用余额查询功能` + - `DISABLE_FAST_LINK=1 可选,禁用从链接解析预制设置` + 12. 点击 "Save and Deploy"。 13. 点击 "Cancel deployment",因为需要填写 Compatibility flags。 14. 前往 "Build settings"、"Functions",找到 "Compatibility flags"。 15. 在 "Configure Production compatibility flag" 和 "Configure Preview compatibility flag" 中填写 "nodejs_compat"。 16. 前往 "Deployments",点击 "Retry deployment"。 -17. Enjoy. \ No newline at end of file +17. Enjoy. diff --git a/docs/cloudflare-pages-en.md b/docs/cloudflare-pages-en.md index 2279ff232..c5d550438 100644 --- a/docs/cloudflare-pages-en.md +++ b/docs/cloudflare-pages-en.md @@ -1,6 +1,7 @@ # Cloudflare Pages Deployment Guide ## How to create a new project + Fork this project on GitHub, then log in to dash.cloudflare.com and go to Pages. 1. Click "Create a project". @@ -11,12 +12,13 @@ Fork this project on GitHub, then log in to dash.cloudflare.com and go to Pages. 6. For "Project name" and "Production branch", use the default values or change them as needed. 7. In "Build Settings", choose the "Framework presets" option and select "Next.js". 8. Do not use the default "Build command" due to a node:buffer bug. Instead, use the following command: - ``` - npx @cloudflare/next-on-pages --experimental-minify - ``` + ``` + npx @cloudflare/next-on-pages --experimental-minify + ``` 9. For "Build output directory", use the default value and do not modify it. 10. Do not modify "Root Directory". 11. For "Environment variables", click ">" and then "Add variable". Fill in the following information: + - `NODE_VERSION=20.1` - `NEXT_TELEMETRY_DISABLE=1` - `OPENAI_API_KEY=your_own_API_key` @@ -29,7 +31,10 @@ Fork this project on GitHub, then log in to dash.cloudflare.com and go to Pages. - `OPENAI_ORG_ID= Optional, specify the organization ID in OpenAI` - `HIDE_USER_API_KEY=1 Optional, do not allow users to enter their own API key` - `DISABLE_GPT4=1 Optional, do not allow users to use GPT-4` - + - `ENABLE_BALANCE_QUERY=1 Optional, allow users to query balance` + - `DISABLE_FAST_LINK=1 Optional, disable parse settings from url` + - `OPENAI_SB=1 Optional,use the third-party OpenAI-SB API` + 12. Click "Save and Deploy". 13. Click "Cancel deployment" because you need to fill in Compatibility flags. 14. Go to "Build settings", "Functions", and find "Compatibility flags". From 3a519612a0fcd7a05fe3d5d01cb9f88c0caa2a9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=89=E5=BF=86?= Date: Wed, 8 Nov 2023 15:53:45 +0800 Subject: [PATCH 09/10] docs: fix typo in #3171 --- .env.template | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.env.template b/.env.template index 5e73e6d85..3e3290369 100644 --- a/.env.template +++ b/.env.template @@ -17,6 +17,11 @@ BASE_URL= # Default: Empty OPENAI_ORG_ID= +# (optional) +# Default: Empty +# If you do not want users to use GPT-4, set this value to 1. +DISABLE_GPT4= + # (optional) # Default: Empty # If you do not want users to input their own API key, set this value to 1. From 6ab4c9be2e66ebb203d7dc50a1ecf4ab30fa6885 Mon Sep 17 00:00:00 2001 From: bob Date: Wed, 8 Nov 2023 17:40:28 +0800 Subject: [PATCH 10/10] Update cloudflare-pages-cn.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit cloudflare 构建命令 --- docs/cloudflare-pages-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/cloudflare-pages-cn.md b/docs/cloudflare-pages-cn.md index e1567af03..137bb9dc3 100644 --- a/docs/cloudflare-pages-cn.md +++ b/docs/cloudflare-pages-cn.md @@ -13,7 +13,7 @@ 7. 在 "Build Settings" 中,选择 "Framework presets" 选项并选择 "Next.js"。 8. 由于 node:buffer 的 bug,暂时不要使用默认的 "Build command"。请使用以下命令: ``` - npx https://prerelease-registry.devprod.cloudflare.dev/next-on-pages/runs/4930842298/npm-package-next-on-pages-230 --experimental-minify + npx @cloudflare/next-on-pages@1.5.0 ``` 9. 对于 "Build output directory",使用默认值并且不要修改。 10. 不要修改 "Root Directory"。