forked from XiaoMo/ChatGPT-Next-Web
Merge pull request #3165 from Yidadaa/bugfix-1107
This commit is contained in:
commit
8af164c99f
10
README.md
10
README.md
@ -185,11 +185,17 @@ 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.
|
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
|
> 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.
|
||||||
|
|
||||||
|
### `DISABLE_FAST_LINK` (optional)
|
||||||
|
|
||||||
|
> Default: Empty
|
||||||
|
|
||||||
|
If you want to disable parse settings from url, set this to 1.
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
|
11
README_CN.md
11
README_CN.md
@ -98,9 +98,13 @@ OpenAI 接口代理 URL,如果你手动配置了 openai 接口代理,请填
|
|||||||
|
|
||||||
如果你不想让用户使用 GPT-4,将此环境变量设置为 1 即可。
|
如果你不想让用户使用 GPT-4,将此环境变量设置为 1 即可。
|
||||||
|
|
||||||
### `HIDE_BALANCE_QUERY` (可选)
|
### `ENABLE_BALANCE_QUERY` (可选)
|
||||||
|
|
||||||
如果你不想让用户查询余额,将此环境变量设置为 1 即可。
|
如果你想启用余额查询功能,将此环境变量设置为 1 即可。
|
||||||
|
|
||||||
|
### `DISABLE_FAST_LINK` (可选)
|
||||||
|
|
||||||
|
如果你想禁用从链接解析预制设置,将此环境变量设置为 1 即可。
|
||||||
|
|
||||||
## 开发
|
## 开发
|
||||||
|
|
||||||
@ -169,7 +173,6 @@ bash <(curl -s https://raw.githubusercontent.com/Yidadaa/ChatGPT-Next-Web/main/s
|
|||||||
|
|
||||||
⚠️ 注意:如果你安装过程中遇到了问题,请使用 docker 部署。
|
⚠️ 注意:如果你安装过程中遇到了问题,请使用 docker 部署。
|
||||||
|
|
||||||
|
|
||||||
## 鸣谢
|
## 鸣谢
|
||||||
|
|
||||||
### 捐赠者
|
### 捐赠者
|
||||||
@ -181,9 +184,9 @@ bash <(curl -s https://raw.githubusercontent.com/Yidadaa/ChatGPT-Next-Web/main/s
|
|||||||
[见项目贡献者列表](https://github.com/Yidadaa/ChatGPT-Next-Web/graphs/contributors)
|
[见项目贡献者列表](https://github.com/Yidadaa/ChatGPT-Next-Web/graphs/contributors)
|
||||||
|
|
||||||
### 相关项目
|
### 相关项目
|
||||||
|
|
||||||
- [one-api](https://github.com/songquanpeng/one-api): 一站式大模型额度管理平台,支持市面上所有主流大语言模型
|
- [one-api](https://github.com/songquanpeng/one-api): 一站式大模型额度管理平台,支持市面上所有主流大语言模型
|
||||||
|
|
||||||
## 开源协议
|
## 开源协议
|
||||||
|
|
||||||
[MIT](https://opensource.org/license/mit/)
|
[MIT](https://opensource.org/license/mit/)
|
||||||
|
|
||||||
|
173
README_ES.md
173
README_ES.md
@ -1,173 +0,0 @@
|
|||||||
<div align="center">
|
|
||||||
<img src="./docs/images/icon.svg" alt="预览"/>
|
|
||||||
|
|
||||||
<h1 align="center">ChatGPT Next Web</h1>
|
|
||||||
|
|
||||||
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)
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
## 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=<your api key here>
|
|
||||||
|
|
||||||
### 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/)
|
|
275
README_JA.md
275
README_JA.md
@ -1,275 +0,0 @@
|
|||||||
<div align="center">
|
|
||||||
<img src="./docs/images/icon.svg" alt="icon"/>
|
|
||||||
|
|
||||||
<h1 align="center">ChatGPT Next Web</h1>
|
|
||||||
|
|
||||||
[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)
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
## 特徴
|
|
||||||
|
|
||||||
- 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=<your api key here>
|
|
||||||
|
|
||||||
# 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/)
|
|
189
README_KO.md
189
README_KO.md
@ -1,189 +0,0 @@
|
|||||||
<div align="center">
|
|
||||||
<img src="./docs/images/icon.svg" alt="프리뷰"/>
|
|
||||||
|
|
||||||
<h1 align="center">ChatGPT Next Web</h1>
|
|
||||||
|
|
||||||
개인 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)
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
## 사용 시작
|
|
||||||
|
|
||||||
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/)
|
|
||||||
|
|
@ -11,6 +11,7 @@ const DANGER_CONFIG = {
|
|||||||
hideUserApiKey: serverConfig.hideUserApiKey,
|
hideUserApiKey: serverConfig.hideUserApiKey,
|
||||||
disableGPT4: serverConfig.disableGPT4,
|
disableGPT4: serverConfig.disableGPT4,
|
||||||
hideBalanceQuery: serverConfig.hideBalanceQuery,
|
hideBalanceQuery: serverConfig.hideBalanceQuery,
|
||||||
|
disableFastLink: serverConfig.disableFastLink,
|
||||||
};
|
};
|
||||||
|
|
||||||
declare global {
|
declare global {
|
||||||
|
@ -12,11 +12,16 @@ import { getClientConfig } from "../config/client";
|
|||||||
|
|
||||||
export function AuthPage() {
|
export function AuthPage() {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const access = useAccessStore();
|
const accessStore = useAccessStore();
|
||||||
|
|
||||||
const goHome = () => navigate(Path.Home);
|
const goHome = () => navigate(Path.Home);
|
||||||
const goChat = () => navigate(Path.Chat);
|
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(() => {
|
useEffect(() => {
|
||||||
if (getClientConfig()?.isApp) {
|
if (getClientConfig()?.isApp) {
|
||||||
@ -38,21 +43,25 @@ export function AuthPage() {
|
|||||||
className={styles["auth-input"]}
|
className={styles["auth-input"]}
|
||||||
type="password"
|
type="password"
|
||||||
placeholder={Locale.Auth.Input}
|
placeholder={Locale.Auth.Input}
|
||||||
value={access.accessCode}
|
value={accessStore.accessCode}
|
||||||
onChange={(e) => {
|
onChange={(e) => {
|
||||||
access.updateCode(e.currentTarget.value);
|
accessStore.update(
|
||||||
|
(access) => (access.accessCode = e.currentTarget.value),
|
||||||
|
);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
{!access.hideUserApiKey ? (
|
{!accessStore.hideUserApiKey ? (
|
||||||
<>
|
<>
|
||||||
<div className={styles["auth-tips"]}>{Locale.Auth.SubTips}</div>
|
<div className={styles["auth-tips"]}>{Locale.Auth.SubTips}</div>
|
||||||
<input
|
<input
|
||||||
className={styles["auth-input"]}
|
className={styles["auth-input"]}
|
||||||
type="password"
|
type="password"
|
||||||
placeholder={Locale.Settings.Token.Placeholder}
|
placeholder={Locale.Settings.Token.Placeholder}
|
||||||
value={access.token}
|
value={accessStore.token}
|
||||||
onChange={(e) => {
|
onChange={(e) => {
|
||||||
access.updateToken(e.currentTarget.value);
|
accessStore.update(
|
||||||
|
(access) => (access.token = e.currentTarget.value),
|
||||||
|
);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
|
@ -73,11 +73,10 @@ import {
|
|||||||
showPrompt,
|
showPrompt,
|
||||||
showToast,
|
showToast,
|
||||||
} from "./ui-lib";
|
} from "./ui-lib";
|
||||||
import { useLocation, useNavigate } from "react-router-dom";
|
import { useNavigate } from "react-router-dom";
|
||||||
import {
|
import {
|
||||||
CHAT_PAGE_SIZE,
|
CHAT_PAGE_SIZE,
|
||||||
LAST_INPUT_KEY,
|
LAST_INPUT_KEY,
|
||||||
MAX_RENDER_MSG_COUNT,
|
|
||||||
Path,
|
Path,
|
||||||
REQUEST_TIMEOUT_MS,
|
REQUEST_TIMEOUT_MS,
|
||||||
UNFINISHED_INPUT,
|
UNFINISHED_INPUT,
|
||||||
@ -976,14 +975,17 @@ function _Chat() {
|
|||||||
doSubmit(text);
|
doSubmit(text);
|
||||||
},
|
},
|
||||||
code: (text) => {
|
code: (text) => {
|
||||||
|
if (accessStore.disableFastLink) return;
|
||||||
console.log("[Command] got code from url: ", text);
|
console.log("[Command] got code from url: ", text);
|
||||||
showConfirm(Locale.URLCommand.Code + `code = ${text}`).then((res) => {
|
showConfirm(Locale.URLCommand.Code + `code = ${text}`).then((res) => {
|
||||||
if (res) {
|
if (res) {
|
||||||
accessStore.updateCode(text);
|
accessStore.update((access) => (access.accessCode = text));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
settings: (text) => {
|
settings: (text) => {
|
||||||
|
if (accessStore.disableFastLink) return;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const payload = JSON.parse(text) as {
|
const payload = JSON.parse(text) as {
|
||||||
key?: string;
|
key?: string;
|
||||||
@ -999,10 +1001,10 @@ function _Chat() {
|
|||||||
).then((res) => {
|
).then((res) => {
|
||||||
if (!res) return;
|
if (!res) return;
|
||||||
if (payload.key) {
|
if (payload.key) {
|
||||||
accessStore.updateToken(payload.key);
|
accessStore.update((access) => (access.token = payload.key!));
|
||||||
}
|
}
|
||||||
if (payload.url) {
|
if (payload.url) {
|
||||||
accessStore.updateOpenAiUrl(payload.url);
|
accessStore.update((access) => (access.openaiUrl = payload.url!));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,13 @@ import Locale, {
|
|||||||
} from "../locales";
|
} from "../locales";
|
||||||
import { copyToClipboard } from "../utils";
|
import { copyToClipboard } from "../utils";
|
||||||
import Link from "next/link";
|
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 { Prompt, SearchService, usePromptStore } from "../store/prompt";
|
||||||
import { ErrorBoundary } from "./error";
|
import { ErrorBoundary } from "./error";
|
||||||
import { InputRange } from "./input-range";
|
import { InputRange } from "./input-range";
|
||||||
@ -571,13 +577,19 @@ export function Settings() {
|
|||||||
console.log("[Update] remote version ", updateStore.remoteVersion);
|
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 = {
|
const usage = {
|
||||||
used: updateStore.used,
|
used: updateStore.used,
|
||||||
subscription: updateStore.subscription,
|
subscription: updateStore.subscription,
|
||||||
};
|
};
|
||||||
const [loadingUsage, setLoadingUsage] = useState(false);
|
const [loadingUsage, setLoadingUsage] = useState(false);
|
||||||
function checkUsage(force = false) {
|
function checkUsage(force = false) {
|
||||||
if (accessStore.hideBalanceQuery) {
|
if (shouldHideBalanceQuery) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -587,7 +599,6 @@ export function Settings() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const accessStore = useAccessStore();
|
|
||||||
const enabledAccessControl = useMemo(
|
const enabledAccessControl = useMemo(
|
||||||
() => accessStore.enabledAccessControl(),
|
() => accessStore.enabledAccessControl(),
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
@ -877,7 +888,9 @@ export function Settings() {
|
|||||||
type="text"
|
type="text"
|
||||||
placeholder={Locale.Settings.AccessCode.Placeholder}
|
placeholder={Locale.Settings.AccessCode.Placeholder}
|
||||||
onChange={(e) => {
|
onChange={(e) => {
|
||||||
accessStore.updateCode(e.currentTarget.value);
|
accessStore.update(
|
||||||
|
(access) => (access.accessCode = e.currentTarget.value),
|
||||||
|
);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</ListItem>
|
</ListItem>
|
||||||
@ -896,7 +909,9 @@ export function Settings() {
|
|||||||
value={accessStore.openaiUrl}
|
value={accessStore.openaiUrl}
|
||||||
placeholder="https://api.openai.com/"
|
placeholder="https://api.openai.com/"
|
||||||
onChange={(e) =>
|
onChange={(e) =>
|
||||||
accessStore.updateOpenAiUrl(e.currentTarget.value)
|
accessStore.update(
|
||||||
|
(access) => (access.openaiUrl = e.currentTarget.value),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
></input>
|
></input>
|
||||||
</ListItem>
|
</ListItem>
|
||||||
@ -909,14 +924,16 @@ export function Settings() {
|
|||||||
type="text"
|
type="text"
|
||||||
placeholder={Locale.Settings.Token.Placeholder}
|
placeholder={Locale.Settings.Token.Placeholder}
|
||||||
onChange={(e) => {
|
onChange={(e) => {
|
||||||
accessStore.updateToken(e.currentTarget.value);
|
accessStore.update(
|
||||||
|
(access) => (access.token = e.currentTarget.value),
|
||||||
|
);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</ListItem>
|
</ListItem>
|
||||||
</>
|
</>
|
||||||
) : null}
|
) : null}
|
||||||
|
|
||||||
{!accessStore.hideBalanceQuery ? (
|
{!shouldHideBalanceQuery ? (
|
||||||
<ListItem
|
<ListItem
|
||||||
title={Locale.Settings.Usage.Title}
|
title={Locale.Settings.Usage.Title}
|
||||||
subTitle={
|
subTitle={
|
||||||
|
@ -12,7 +12,8 @@ declare global {
|
|||||||
DISABLE_GPT4?: string; // allow user to use gpt-4 or not
|
DISABLE_GPT4?: string; // allow user to use gpt-4 or not
|
||||||
BUILD_MODE?: "standalone" | "export";
|
BUILD_MODE?: "standalone" | "export";
|
||||||
BUILD_APP?: string; // is building desktop app
|
BUILD_APP?: string; // is building desktop app
|
||||||
HIDE_BALANCE_QUERY?: string; // allow user to query balance or not
|
ENABLE_BALANCE_QUERY?: string; // allow user to query balance or not
|
||||||
|
DISABLE_FAST_LINK?: string; // disallow parse settings from url or not
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -47,6 +48,7 @@ export const getServerSideConfig = () => {
|
|||||||
isVercel: !!process.env.VERCEL,
|
isVercel: !!process.env.VERCEL,
|
||||||
hideUserApiKey: !!process.env.HIDE_USER_API_KEY,
|
hideUserApiKey: !!process.env.HIDE_USER_API_KEY,
|
||||||
disableGPT4: !!process.env.DISABLE_GPT4,
|
disableGPT4: !!process.env.DISABLE_GPT4,
|
||||||
hideBalanceQuery: !!process.env.HIDE_BALANCE_QUERY,
|
hideBalanceQuery: !process.env.ENABLE_BALANCE_QUERY,
|
||||||
|
disableFastLink: !!process.env.DISABLE_FAST_LINK,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -10,6 +10,7 @@ export const RUNTIME_CONFIG_DOM = "danger-runtime-config";
|
|||||||
|
|
||||||
export const DEFAULT_CORS_HOST = "https://ab.nextweb.fun";
|
export const DEFAULT_CORS_HOST = "https://ab.nextweb.fun";
|
||||||
export const DEFAULT_API_HOST = `${DEFAULT_CORS_HOST}/api/proxy`;
|
export const DEFAULT_API_HOST = `${DEFAULT_CORS_HOST}/api/proxy`;
|
||||||
|
export const OPENAI_BASE_URL = "https://api.openai.com";
|
||||||
|
|
||||||
export enum Path {
|
export enum Path {
|
||||||
Home = "/",
|
Home = "/",
|
||||||
|
@ -16,6 +16,7 @@ const DEFAULT_ACCESS_STATE = {
|
|||||||
hideUserApiKey: false,
|
hideUserApiKey: false,
|
||||||
hideBalanceQuery: false,
|
hideBalanceQuery: false,
|
||||||
disableGPT4: false,
|
disableGPT4: false,
|
||||||
|
disableFastLink: false,
|
||||||
|
|
||||||
openaiUrl: DEFAULT_OPENAI_URL,
|
openaiUrl: DEFAULT_OPENAI_URL,
|
||||||
};
|
};
|
||||||
@ -29,15 +30,6 @@ export const useAccessStore = createPersistStore(
|
|||||||
|
|
||||||
return get().needCode;
|
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() {
|
isAuthorized() {
|
||||||
this.fetch();
|
this.fetch();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user