From 84681d3878bf0493806cff0538cbe2b031d5ebfc Mon Sep 17 00:00:00 2001
From: dlb-data <166484772+dlb-data@users.noreply.github.com>
Date: Tue, 9 Apr 2024 16:24:03 +0800
Subject: [PATCH 1/7] Update layout.tsx
---
app/layout.tsx | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/layout.tsx b/app/layout.tsx
index 2c89ba494..70331e974 100644
--- a/app/layout.tsx
+++ b/app/layout.tsx
@@ -36,6 +36,7 @@ export default function RootLayout({
+
From 598468c2b76588c882d4f8f7bf534155217a0c81 Mon Sep 17 00:00:00 2001
From: dlb-data <166484772+dlb-data@users.noreply.github.com>
Date: Tue, 9 Apr 2024 16:34:21 +0800
Subject: [PATCH 2/7] Update layout.tsx
---
app/layout.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/layout.tsx b/app/layout.tsx
index 70331e974..5898b21a1 100644
--- a/app/layout.tsx
+++ b/app/layout.tsx
@@ -36,7 +36,7 @@ export default function RootLayout({
-
+
From 79f342439af8e4c8835c32398b58098acd6bd3dc Mon Sep 17 00:00:00 2001
From: butterfly
Date: Tue, 9 Apr 2024 20:49:51 +0800
Subject: [PATCH 3/7] feat: Solve the problem of using openai interface
protocol for user-defined claude model & add some famous webdav endpoints
---
app/components/exporter.tsx | 3 ++-
app/components/home.tsx | 3 ++-
app/constant.ts | 12 +++++++++++-
app/store/chat.ts | 5 +++--
app/utils/checkers.ts | 21 +++++++++++++++++++++
app/utils/model.ts | 12 ++++++++++--
6 files changed, 49 insertions(+), 7 deletions(-)
create mode 100644 app/utils/checkers.ts
diff --git a/app/components/exporter.tsx b/app/components/exporter.tsx
index f3f085721..20e240d93 100644
--- a/app/components/exporter.tsx
+++ b/app/components/exporter.tsx
@@ -40,6 +40,7 @@ import { EXPORT_MESSAGE_CLASS_NAME, ModelProvider } from "../constant";
import { getClientConfig } from "../config/client";
import { ClientApi } from "../client/api";
import { getMessageTextContent } from "../utils";
+import { identifyDefaultClaudeModel } from "../utils/checkers";
const Markdown = dynamic(async () => (await import("./markdown")).Markdown, {
loading: () => ,
@@ -315,7 +316,7 @@ export function PreviewActions(props: {
var api: ClientApi;
if (config.modelConfig.model.startsWith("gemini")) {
api = new ClientApi(ModelProvider.GeminiPro);
- } else if (config.modelConfig.model.startsWith("claude")) {
+ } else if (identifyDefaultClaudeModel(config.modelConfig.model)) {
api = new ClientApi(ModelProvider.Claude);
} else {
api = new ClientApi(ModelProvider.GPT);
diff --git a/app/components/home.tsx b/app/components/home.tsx
index 26bb3a44c..ffac64fda 100644
--- a/app/components/home.tsx
+++ b/app/components/home.tsx
@@ -29,6 +29,7 @@ import { AuthPage } from "./auth";
import { getClientConfig } from "../config/client";
import { ClientApi } from "../client/api";
import { useAccessStore } from "../store";
+import { identifyDefaultClaudeModel } from "../utils/checkers";
export function Loading(props: { noLogo?: boolean }) {
return (
@@ -173,7 +174,7 @@ export function useLoadData() {
var api: ClientApi;
if (config.modelConfig.model.startsWith("gemini")) {
api = new ClientApi(ModelProvider.GeminiPro);
- } else if (config.modelConfig.model.startsWith("claude")) {
+ } else if (identifyDefaultClaudeModel(config.modelConfig.model)) {
api = new ClientApi(ModelProvider.Claude);
} else {
api = new ClientApi(ModelProvider.GPT);
diff --git a/app/constant.ts b/app/constant.ts
index ce9b08d14..1ad76870f 100644
--- a/app/constant.ts
+++ b/app/constant.ts
@@ -367,4 +367,14 @@ export const DEFAULT_MODELS = [
export const CHAT_PAGE_SIZE = 15;
export const MAX_RENDER_MSG_COUNT = 45;
-export const internalWhiteWebDavEndpoints = ["https://dav.jianguoyun.com"];
+// some famous webdav endpoints
+export const internalWhiteWebDavEndpoints = [
+ "https://dav.jianguoyun.com/dav/",
+ "https://dav.dropdav.com/",
+ "https://dav.box.com/dav",
+ "https://nanao.teracloud.jp/dav/",
+ "https://webdav.4shared.com/",
+ "https://dav.idrivesync.com",
+ "https://webdav.yandex.com",
+ "https://app.koofr.net/dav/Koofr",
+];
diff --git a/app/store/chat.ts b/app/store/chat.ts
index 53ec11dbf..eeddd8463 100644
--- a/app/store/chat.ts
+++ b/app/store/chat.ts
@@ -20,6 +20,7 @@ import { prettyObject } from "../utils/format";
import { estimateTokenLength } from "../utils/token";
import { nanoid } from "nanoid";
import { createPersistStore } from "../utils/store";
+import { identifyDefaultClaudeModel } from "../utils/checkers";
export type ChatMessage = RequestMessage & {
date: string;
@@ -353,7 +354,7 @@ export const useChatStore = createPersistStore(
var api: ClientApi;
if (modelConfig.model.startsWith("gemini")) {
api = new ClientApi(ModelProvider.GeminiPro);
- } else if (modelConfig.model.startsWith("claude")) {
+ } else if (identifyDefaultClaudeModel(modelConfig.model)) {
api = new ClientApi(ModelProvider.Claude);
} else {
api = new ClientApi(ModelProvider.GPT);
@@ -539,7 +540,7 @@ export const useChatStore = createPersistStore(
var api: ClientApi;
if (modelConfig.model.startsWith("gemini")) {
api = new ClientApi(ModelProvider.GeminiPro);
- } else if (modelConfig.model.startsWith("claude")) {
+ } else if (identifyDefaultClaudeModel(modelConfig.model)) {
api = new ClientApi(ModelProvider.Claude);
} else {
api = new ClientApi(ModelProvider.GPT);
diff --git a/app/utils/checkers.ts b/app/utils/checkers.ts
new file mode 100644
index 000000000..4496e1039
--- /dev/null
+++ b/app/utils/checkers.ts
@@ -0,0 +1,21 @@
+import { useAccessStore } from "../store/access";
+import { useAppConfig } from "../store/config";
+import { collectModels } from "./model";
+
+export function identifyDefaultClaudeModel(modelName: string) {
+ const accessStore = useAccessStore.getState();
+ const configStore = useAppConfig.getState();
+
+ const allModals = collectModels(
+ configStore.models,
+ [configStore.customModels, accessStore.customModels].join(","),
+ );
+
+ const modelMeta = allModals.find((m) => m.name === modelName);
+
+ return (
+ modelName.startsWith("claude") &&
+ modelMeta &&
+ modelMeta.provider?.providerType === "anthropic"
+ );
+}
diff --git a/app/utils/model.ts b/app/utils/model.ts
index b2a42ef02..378fc498e 100644
--- a/app/utils/model.ts
+++ b/app/utils/model.ts
@@ -22,6 +22,12 @@ export function collectModelTable(
};
});
+ const customProvider = (modelName: string) => ({
+ id: modelName,
+ providerName: "",
+ providerType: "custom",
+ });
+
// server custom models
customModels
.split(",")
@@ -34,13 +40,15 @@ export function collectModelTable(
// enable or disable all models
if (name === "all") {
- Object.values(modelTable).forEach((model) => (model.available = available));
+ Object.values(modelTable).forEach(
+ (model) => (model.available = available),
+ );
} else {
modelTable[name] = {
name,
displayName: displayName || name,
available,
- provider: modelTable[name]?.provider, // Use optional chaining
+ provider: modelTable[name]?.provider ?? customProvider(name), // Use optional chaining
};
}
});
From f5db5a79a11363fc9ea2e9c8fa92da41d419139b Mon Sep 17 00:00:00 2001
From: sijinhui
Date: Wed, 10 Apr 2024 17:00:36 +0800
Subject: [PATCH 4/7] test pack
---
.github/workflows/dockerToHub-dev.yml | 33 +++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/.github/workflows/dockerToHub-dev.yml b/.github/workflows/dockerToHub-dev.yml
index 852f71a0c..96e839064 100644
--- a/.github/workflows/dockerToHub-dev.yml
+++ b/.github/workflows/dockerToHub-dev.yml
@@ -72,3 +72,36 @@ jobs:
yes | docker image prune
rm -rf /www/server/nginx/proxy_cache_dir/*
rm -rf /www/server/nginx/proxy_temp_dir/*
+
+
+
+
+ - name: Sync repository to xy-nm
+ run: |
+ yes | docker image prune
+ ssh -o StrictHostKeyChecking=no root@xy-nm.xiaosi.cc 'mkdir -p /data/test/ChatGPT-Next-Web'
+ rsync -az -e 'ssh -o StrictHostKeyChecking=no' --delete $GITHUB_WORKSPACE/ root@xy-nm.xiaosi.cc:/data/test/ChatGPT-Next-Web
+ - name: deploy-to-xy-nm
+ uses: appleboy/ssh-action@master
+ env:
+ SERVER_WORKDIR: ${{ secrets.SERVER_WORKDIR }} #传递工作目录变量
+ with:
+ host: xy-nm.xiaosi.cc #服务器地址
+ username: root #用户名
+ key: ${{ secrets.SSH_PRIVATE_KEY }} #私钥 安全问题一定都以变量的方式传递!!!
+ envs: SERVER_WORKDIR,ALY_DOCKER_PASSWORD,ALY_DOCKER_USERNAME,DOCKER_ENV #使用工作目录变量
+ script: |
+ cd /data/test/ChatGPT-Next-Web
+ echo "${{ secrets.DOCKER_ENV }}" > .env
+ # 测试分支,
+ echo "COMPOSE_PROJECT_NAME=test-chatgpt-web" >> .env
+ sed -i 's@image: registry.cn-hangzhou.aliyuncs.com/si-private/chatgpt-next-web@image: registry.cn-hangzhou.aliyuncs.com/si-private/chatgpt-next-web:test@g' docker-compose.yml
+ echo ${{ secrets.ALY_DOCKER_PASSWORD }} | docker login registry.cn-hangzhou.aliyuncs.com -u ${{ secrets.ALY_DOCKER_USERNAME }} --password-stdin
+ sed -i 's|23000:|23001:|g' docker-compose.yml
+ sed -i 's|container_name:|#container_name:|g' docker-compose.yml
+ docker-compose pull && docker-compose up -d
+ yes | docker image prune
+ rm -rf /www/server/nginx/proxy_cache_dir/*
+ rm -rf /www/server/nginx/proxy_temp_dir/*
+
+
From 963f60ab945d3f79a273082bb6ef75f64750cc6c Mon Sep 17 00:00:00 2001
From: sijinhui
Date: Wed, 10 Apr 2024 17:07:39 +0800
Subject: [PATCH 5/7] test pack
---
.github/workflows/dockerToHub-dev.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/dockerToHub-dev.yml b/.github/workflows/dockerToHub-dev.yml
index 96e839064..a9da56138 100644
--- a/.github/workflows/dockerToHub-dev.yml
+++ b/.github/workflows/dockerToHub-dev.yml
@@ -68,14 +68,13 @@ jobs:
echo ${{ secrets.ALY_DOCKER_PASSWORD }} | docker login registry.cn-hangzhou.aliyuncs.com -u ${{ secrets.ALY_DOCKER_USERNAME }} --password-stdin
sed -i 's|23000:|23001:|g' docker-compose.yml
sed -i 's|container_name:|#container_name:|g' docker-compose.yml
+ docker network ls | grep -qw chatgpt-ns || docker network create chatgpt-ns
docker-compose pull && docker-compose up -d
yes | docker image prune
rm -rf /www/server/nginx/proxy_cache_dir/*
rm -rf /www/server/nginx/proxy_temp_dir/*
-
-
- name: Sync repository to xy-nm
run: |
yes | docker image prune
@@ -99,6 +98,7 @@ jobs:
echo ${{ secrets.ALY_DOCKER_PASSWORD }} | docker login registry.cn-hangzhou.aliyuncs.com -u ${{ secrets.ALY_DOCKER_USERNAME }} --password-stdin
sed -i 's|23000:|23001:|g' docker-compose.yml
sed -i 's|container_name:|#container_name:|g' docker-compose.yml
+ docker network ls | grep -qw chatgpt-ns || docker network create chatgpt-ns
docker-compose pull && docker-compose up -d
yes | docker image prune
rm -rf /www/server/nginx/proxy_cache_dir/*
From 8e805b574f566d1ccb23b1394568a589d1da84eb Mon Sep 17 00:00:00 2001
From: sijinhui
Date: Wed, 10 Apr 2024 17:08:05 +0800
Subject: [PATCH 6/7] test pack
---
.github/workflows/dockerToHub.yml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/.github/workflows/dockerToHub.yml b/.github/workflows/dockerToHub.yml
index ba6dba2ea..169495383 100644
--- a/.github/workflows/dockerToHub.yml
+++ b/.github/workflows/dockerToHub.yml
@@ -65,6 +65,7 @@ jobs:
cd $SERVER_WORKDIR #进入到工作目录
echo "${{ secrets.DOCKER_ENV }}" > .env
echo ${{ secrets.ALY_DOCKER_PASSWORD }} | docker login registry.cn-hangzhou.aliyuncs.com -u ${{ secrets.ALY_DOCKER_USERNAME }} --password-stdin
+ docker network ls | grep -qw chatgpt-ns || docker network create chatgpt-ns
docker-compose pull && docker-compose up -d
yes | docker image prune
rm -rf /www/server/nginx/proxy_cache_dir/*
@@ -89,6 +90,7 @@ jobs:
cd $SERVER_WORKDIR #进入到工作目录
echo "${{ secrets.DOCKER_ENV }}" > .env
echo ${{ secrets.ALY_DOCKER_PASSWORD }} | docker login registry.cn-hangzhou.aliyuncs.com -u ${{ secrets.ALY_DOCKER_USERNAME }} --password-stdin
+ docker network ls | grep -qw chatgpt-ns || docker network create chatgpt-ns
docker-compose pull && docker-compose up -d
yes | docker image prune
rm -rf /www/server/nginx/proxy_cache_dir/*
From cd6d07d7ec2a913b6f77ecf2719ee44f09f96c89 Mon Sep 17 00:00:00 2001
From: sijinhui
Date: Wed, 10 Apr 2024 19:02:27 +0800
Subject: [PATCH 7/7] fix env
---
.github/workflows/dockerToHub-dev.yml | 14 ++++++++------
.github/workflows/dockerToHub.yml | 16 +++++++++-------
2 files changed, 17 insertions(+), 13 deletions(-)
diff --git a/.github/workflows/dockerToHub-dev.yml b/.github/workflows/dockerToHub-dev.yml
index a9da56138..bfbc8021a 100644
--- a/.github/workflows/dockerToHub-dev.yml
+++ b/.github/workflows/dockerToHub-dev.yml
@@ -48,15 +48,16 @@ jobs:
- name: Sync repository to tx
run: |
yes | docker image prune
- ssh -o StrictHostKeyChecking=no root@tx.xiaosi.cc 'mkdir -p /data/test/ChatGPT-Next-Web'
- rsync -az -e 'ssh -o StrictHostKeyChecking=no' --delete $GITHUB_WORKSPACE/ root@tx.xiaosi.cc:/data/test/ChatGPT-Next-Web
+ ssh -o StrictHostKeyChecking=no -p${{ secrets.SSH_PORT }} root@${{ secrets.TX_SSH_IP }} 'mkdir -p /data/test/ChatGPT-Next-Web'
+ rsync -az -e 'ssh -o StrictHostKeyChecking=no -p${{ secrets.SSH_PORT }}' --delete $GITHUB_WORKSPACE/ root@tx.xiaosi.cc:/data/test/ChatGPT-Next-Web
- name: deploy-to-tx
uses: appleboy/ssh-action@master
env:
SERVER_WORKDIR: ${{ secrets.SERVER_WORKDIR }} #传递工作目录变量
with:
- host: tx.xiaosi.cc #服务器地址
+ host: ${{ secrets.TX_SSH_IP }} #服务器地址
username: root #用户名
+ port: ${{ secrets.SSH_PORT }}
key: ${{ secrets.SSH_PRIVATE_KEY }} #私钥 安全问题一定都以变量的方式传递!!!
envs: SERVER_WORKDIR,ALY_DOCKER_PASSWORD,ALY_DOCKER_USERNAME,DOCKER_ENV #使用工作目录变量
script: |
@@ -78,15 +79,16 @@ jobs:
- name: Sync repository to xy-nm
run: |
yes | docker image prune
- ssh -o StrictHostKeyChecking=no root@xy-nm.xiaosi.cc 'mkdir -p /data/test/ChatGPT-Next-Web'
- rsync -az -e 'ssh -o StrictHostKeyChecking=no' --delete $GITHUB_WORKSPACE/ root@xy-nm.xiaosi.cc:/data/test/ChatGPT-Next-Web
+ ssh -o StrictHostKeyChecking=no -p${{ secrets.SSH_PORT }} root@${{ secrets.NM_SSH_IP }} 'mkdir -p /data/test/ChatGPT-Next-Web'
+ rsync -az -e 'ssh -o StrictHostKeyChecking=no -p${{ secrets.SSH_PORT }}' --delete $GITHUB_WORKSPACE/ root@xy-nm.xiaosi.cc:/data/test/ChatGPT-Next-Web
- name: deploy-to-xy-nm
uses: appleboy/ssh-action@master
env:
SERVER_WORKDIR: ${{ secrets.SERVER_WORKDIR }} #传递工作目录变量
with:
- host: xy-nm.xiaosi.cc #服务器地址
+ host: ${{ secrets.NM_SSH_IP }} #服务器地址
username: root #用户名
+ port: ${{ secrets.SSH_PORT }}
key: ${{ secrets.SSH_PRIVATE_KEY }} #私钥 安全问题一定都以变量的方式传递!!!
envs: SERVER_WORKDIR,ALY_DOCKER_PASSWORD,ALY_DOCKER_USERNAME,DOCKER_ENV #使用工作目录变量
script: |
diff --git a/.github/workflows/dockerToHub.yml b/.github/workflows/dockerToHub.yml
index 169495383..6cc4a3599 100644
--- a/.github/workflows/dockerToHub.yml
+++ b/.github/workflows/dockerToHub.yml
@@ -50,15 +50,16 @@ jobs:
- name: Sync repository to ty
run: |
yes | docker image prune
- ssh -o StrictHostKeyChecking=no root@ty.xiaosi.cc 'mkdir -p /data/ChatGPT-Next-Web'
+ ssh -o StrictHostKeyChecking=no -p${{ secrets.SSH_PORT }} root@${{ secrets.TY_SSH_IP }} 'mkdir -p /data/ChatGPT-Next-Web'
rsync -az -e 'ssh -o StrictHostKeyChecking=no' --delete $GITHUB_WORKSPACE/ root@ty.xiaosi.cc:/data/ChatGPT-Next-Web/
- name: deploy-to-ty
uses: appleboy/ssh-action@master
env:
SERVER_WORKDIR: ${{ secrets.SERVER_WORKDIR }} #传递工作目录变量
with:
- host: ty.xiaosi.cc #服务器地址
+ host: ${{ secrets.TY_SSH_IP }} #服务器地址
username: root #用户名
+ port: ${{ secrets.SSH_PORT }}
key: ${{ secrets.SSH_PRIVATE_KEY }} #私钥 安全问题一定都以变量的方式传递!!!
envs: SERVER_WORKDIR,ALY_DOCKER_PASSWORD,ALY_DOCKER_USERNAME,DOCKER_ENV #使用工作目录变量
script: |
@@ -71,19 +72,20 @@ jobs:
rm -rf /www/server/nginx/proxy_cache_dir/*
rm -rf /www/server/nginx/proxy_temp_dir/*
sleep 2
- tccli cdn PurgePathCache --cli-unfold-argument --Paths 'https://chat.xiaosi.cc/' --FlushType delete
+ tccli cdn PurgePathCache --cli-unfold-argument --Paths '${{ secrets.WEB_URL }}' --FlushType delete
- name: Sync repository to tx
run: |
yes | docker image prune
- ssh -o StrictHostKeyChecking=no root@tx.xiaosi.cc 'mkdir -p /data/ChatGPT-Next-Web'
- rsync -az -e 'ssh -o StrictHostKeyChecking=no' --delete $GITHUB_WORKSPACE/ root@tx.xiaosi.cc:/data/ChatGPT-Next-Web
+ ssh -o StrictHostKeyChecking=no -p${{ secrets.SSH_PORT }} root@${{ secrets.TX_SSH_IP }} 'mkdir -p /data/ChatGPT-Next-Web'
+ rsync -az -e 'ssh -o StrictHostKeyChecking=no -p${{ secrets.SSH_PORT }}' --delete $GITHUB_WORKSPACE/ root@tx.xiaosi.cc:/data/ChatGPT-Next-Web
- name: deploy-to-tx
uses: appleboy/ssh-action@master
env:
SERVER_WORKDIR: ${{ secrets.SERVER_WORKDIR }} #传递工作目录变量
with:
- host: tx.xiaosi.cc #服务器地址
+ host: ${{ secrets.TX_SSH_IP }} #服务器地址
username: root #用户名
+ port: ${{ secrets.SSH_PORT }}
key: ${{ secrets.SSH_PRIVATE_KEY }} #私钥 安全问题一定都以变量的方式传递!!!
envs: SERVER_WORKDIR,ALY_DOCKER_PASSWORD,ALY_DOCKER_USERNAME,DOCKER_ENV #使用工作目录变量
script: |
@@ -96,4 +98,4 @@ jobs:
rm -rf /www/server/nginx/proxy_cache_dir/*
rm -rf /www/server/nginx/proxy_temp_dir/*
sleep 2
- tccli cdn PurgePathCache --cli-unfold-argument --Paths 'https://chat.xiaosi.cc/' --FlushType delete
+ tccli cdn PurgePathCache --cli-unfold-argument --Paths '${{ secrets.WEB_URL }}' --FlushType delete