diff --git a/.env.template b/.env.template
index 4efaa2ff8..db50220c6 100644
--- a/.env.template
+++ b/.env.template
@@ -64,6 +64,11 @@ CUSTOM_MODELS=
# Change default model
DEFAULT_MODEL=
+# (optional)
+# Default: Empty
+# Change default compress model
+DEFAULT_COMPRESS_MODEL=
+
# anthropic claude Api Key.(optional)
ANTHROPIC_API_KEY=
diff --git a/README.md b/README.md
index d0a6b409d..08043f7b9 100644
--- a/README.md
+++ b/README.md
@@ -322,6 +322,10 @@ For ByteDance: use `modelName@bytedance=deploymentName` to customize model name
Change default model
+### `DEFAULT_COMPRESS_MODEL` (optional)
+
+Change default summary model
+
### `VISION_MODELS` (optional)
> Default: Empty
@@ -348,7 +352,6 @@ Stability API key.
Customize Stability API url.
-
### `ENABLE_MCP` (optional)
Enable MCP(Model Context Protocol)Feature
diff --git a/README_CN.md b/README_CN.md
index 5576231cc..d6f79cf0b 100644
--- a/README_CN.md
+++ b/README_CN.md
@@ -244,6 +244,10 @@ DeepSeek Api Url.
更改默认模型
+### `DEFAULT_COMPRESS_MODEL` (可选)
+
+更改默认对话摘要模型
+
### `VISION_MODELS` (可选)
> 默认值:空
diff --git a/README_JA.md b/README_JA.md
index f1c2da457..b48f77896 100644
--- a/README_JA.md
+++ b/README_JA.md
@@ -217,6 +217,10 @@ ByteDance モードでは、`modelName@bytedance=deploymentName` 形式でモデ
デフォルトのモデルを変更します。
+### `DEFAULT_COMPRESS_MODEL` (オプション)
+
+デフォルトの圧縮モデルを変更します。
+
### `VISION_MODELS` (オプション)
> デフォルト:空
diff --git a/app/api/config/route.ts b/app/api/config/route.ts
index 855a5db01..f04790485 100644
--- a/app/api/config/route.ts
+++ b/app/api/config/route.ts
@@ -14,6 +14,7 @@ const DANGER_CONFIG = {
disableFastLink: serverConfig.disableFastLink,
customModels: serverConfig.customModels,
defaultModel: serverConfig.defaultModel,
+ defaultCompressModel: serverConfig.defaultCompressModel,
visionModels: serverConfig.visionModels,
};
diff --git a/app/components/model-config.tsx b/app/components/model-config.tsx
index e845bfeac..11fa28aff 100644
--- a/app/components/model-config.tsx
+++ b/app/components/model-config.tsx
@@ -259,13 +259,15 @@ export function ModelConfigList(props: {
});
}}
>
- {allModels
- .filter((v) => v.available)
- .map((v, i) => (
-
- ))}
+ {Object.keys(groupModels).map((providerName, index) => (
+
+ ))}
>
diff --git a/app/config/server.ts b/app/config/server.ts
index 43d4ff833..17fccde02 100644
--- a/app/config/server.ts
+++ b/app/config/server.ts
@@ -23,6 +23,7 @@ declare global {
DISABLE_FAST_LINK?: string; // disallow parse settings from url or not
CUSTOM_MODELS?: string; // to control custom models
DEFAULT_MODEL?: string; // to control default model in every new chat window
+ DEFAULT_COMPRESS_MODEL?: string; // to control default compress model
VISION_MODELS?: string; // to control vision models
// stability only
@@ -135,6 +136,7 @@ export const getServerSideConfig = () => {
const disableGPT4 = !!process.env.DISABLE_GPT4;
let customModels = process.env.CUSTOM_MODELS ?? "";
let defaultModel = process.env.DEFAULT_MODEL ?? "";
+ let defaultCompressModel = process.env.DEFAULT_COMPRESS_MODEL ?? "";
let visionModels = process.env.VISION_MODELS ?? "";
if (disableGPT4) {
@@ -145,6 +147,9 @@ export const getServerSideConfig = () => {
if (defaultModel && isGPT4Model(defaultModel)) {
defaultModel = "";
}
+ if (defaultCompressModel && isGPT4Model(defaultCompressModel)) {
+ defaultCompressModel = "";
+ }
}
const isStability = !!process.env.STABILITY_API_KEY;
@@ -262,6 +267,7 @@ export const getServerSideConfig = () => {
disableFastLink: !!process.env.DISABLE_FAST_LINK,
customModels,
defaultModel,
+ defaultCompressModel,
visionModels,
allowedWebDavEndpoints,
enableMcp: process.env.ENABLE_MCP === "true",
diff --git a/app/store/access.ts b/app/store/access.ts
index 7025a1814..d5387e747 100644
--- a/app/store/access.ts
+++ b/app/store/access.ts
@@ -140,6 +140,7 @@ const DEFAULT_ACCESS_STATE = {
disableFastLink: false,
customModels: "",
defaultModel: "",
+ defaultCompressModel: "",
visionModels: "",
// tts config
@@ -255,12 +256,21 @@ export const useAccessStore = createPersistStore(
.then((res) => res.json())
.then((res) => {
const defaultModel = res.defaultModel ?? "";
- if (defaultModel !== "") {
+ if (defaultModel) {
const [model, providerName] = getModelProvider(defaultModel);
DEFAULT_CONFIG.modelConfig.model = model;
DEFAULT_CONFIG.modelConfig.providerName = providerName as any;
}
+ const defaultCompressModel = res.defaultCompressModel ?? "";
+ if (defaultCompressModel) {
+ const [model, providerName] =
+ getModelProvider(defaultCompressModel);
+ DEFAULT_CONFIG.modelConfig.compressModel = model;
+ DEFAULT_CONFIG.modelConfig.compressProviderName =
+ providerName as any;
+ }
+
return res;
})
.then((res: DangerConfig) => {
diff --git a/app/store/chat.ts b/app/store/chat.ts
index 87c1a8beb..6ab7b14be 100644
--- a/app/store/chat.ts
+++ b/app/store/chat.ts
@@ -123,9 +123,16 @@ function getSummarizeModel(
currentModel: string,
providerName: string,
): string[] {
+ const configStore = useAppConfig.getState();
+ if (configStore.modelConfig.compressModel) {
+ return [
+ configStore.modelConfig.compressModel,
+ configStore.modelConfig.compressProviderName,
+ ];
+ }
+
// if it is using gpt-* models, force to use 4o-mini to summarize
if (currentModel.startsWith("gpt") || currentModel.startsWith("chatgpt")) {
- const configStore = useAppConfig.getState();
const accessStore = useAccessStore.getState();
const allModel = collectModelsWithDefaultModel(
configStore.models,