This commit is contained in:
玖然 2025-04-20 12:11:19 +08:00 committed by GitHub
commit 0e05284353
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 52 additions and 10 deletions

View File

@ -64,6 +64,11 @@ CUSTOM_MODELS=
# Change default model # Change default model
DEFAULT_MODEL= DEFAULT_MODEL=
# (optional)
# Default: Empty
# Change default compress model
DEFAULT_COMPRESS_MODEL=
# anthropic claude Api Key.(optional) # anthropic claude Api Key.(optional)
ANTHROPIC_API_KEY= ANTHROPIC_API_KEY=

View File

@ -322,6 +322,10 @@ For ByteDance: use `modelName@bytedance=deploymentName` to customize model name
Change default model Change default model
### `DEFAULT_COMPRESS_MODEL` optional
Change default summary model
### `VISION_MODELS` (optional) ### `VISION_MODELS` (optional)
> Default: Empty > Default: Empty
@ -348,7 +352,6 @@ Stability API key.
Customize Stability API url. Customize Stability API url.
### `ENABLE_MCP` (optional) ### `ENABLE_MCP` (optional)
Enable MCPModel Context ProtocolFeature Enable MCPModel Context ProtocolFeature

View File

@ -244,6 +244,10 @@ DeepSeek Api Url.
更改默认模型 更改默认模型
### `DEFAULT_COMPRESS_MODEL` (可选)
更改默认对话摘要模型
### `VISION_MODELS` (可选) ### `VISION_MODELS` (可选)
> 默认值:空 > 默认值:空

View File

@ -217,6 +217,10 @@ ByteDance モードでは、`modelName@bytedance=deploymentName` 形式でモデ
デフォルトのモデルを変更します。 デフォルトのモデルを変更します。
### `DEFAULT_COMPRESS_MODEL` (オプション)
デフォルトの圧縮モデルを変更します。
### `VISION_MODELS` (オプション) ### `VISION_MODELS` (オプション)
> デフォルト:空 > デフォルト:空

View File

@ -14,6 +14,7 @@ const DANGER_CONFIG = {
disableFastLink: serverConfig.disableFastLink, disableFastLink: serverConfig.disableFastLink,
customModels: serverConfig.customModels, customModels: serverConfig.customModels,
defaultModel: serverConfig.defaultModel, defaultModel: serverConfig.defaultModel,
defaultCompressModel: serverConfig.defaultCompressModel,
visionModels: serverConfig.visionModels, visionModels: serverConfig.visionModels,
}; };

View File

@ -259,13 +259,15 @@ export function ModelConfigList(props: {
}); });
}} }}
> >
{allModels {Object.keys(groupModels).map((providerName, index) => (
.filter((v) => v.available) <optgroup label={providerName} key={index}>
.map((v, i) => ( {groupModels[providerName].map((v, i) => (
<option value={`${v.name}@${v.provider?.providerName}`} key={i}> <option value={`${v.name}@${v.provider?.providerName}`} key={i}>
{v.displayName}({v.provider?.providerName}) {v.displayName}
</option> </option>
))} ))}
</optgroup>
))}
</Select> </Select>
</ListItem> </ListItem>
</> </>

View File

@ -23,6 +23,7 @@ declare global {
DISABLE_FAST_LINK?: string; // disallow parse settings from url or not DISABLE_FAST_LINK?: string; // disallow parse settings from url or not
CUSTOM_MODELS?: string; // to control custom models CUSTOM_MODELS?: string; // to control custom models
DEFAULT_MODEL?: string; // to control default model in every new chat window 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 VISION_MODELS?: string; // to control vision models
// stability only // stability only
@ -135,6 +136,7 @@ export const getServerSideConfig = () => {
const disableGPT4 = !!process.env.DISABLE_GPT4; const disableGPT4 = !!process.env.DISABLE_GPT4;
let customModels = process.env.CUSTOM_MODELS ?? ""; let customModels = process.env.CUSTOM_MODELS ?? "";
let defaultModel = process.env.DEFAULT_MODEL ?? ""; let defaultModel = process.env.DEFAULT_MODEL ?? "";
let defaultCompressModel = process.env.DEFAULT_COMPRESS_MODEL ?? "";
let visionModels = process.env.VISION_MODELS ?? ""; let visionModels = process.env.VISION_MODELS ?? "";
if (disableGPT4) { if (disableGPT4) {
@ -145,6 +147,9 @@ export const getServerSideConfig = () => {
if (defaultModel && isGPT4Model(defaultModel)) { if (defaultModel && isGPT4Model(defaultModel)) {
defaultModel = ""; defaultModel = "";
} }
if (defaultCompressModel && isGPT4Model(defaultCompressModel)) {
defaultCompressModel = "";
}
} }
const isStability = !!process.env.STABILITY_API_KEY; const isStability = !!process.env.STABILITY_API_KEY;
@ -262,6 +267,7 @@ export const getServerSideConfig = () => {
disableFastLink: !!process.env.DISABLE_FAST_LINK, disableFastLink: !!process.env.DISABLE_FAST_LINK,
customModels, customModels,
defaultModel, defaultModel,
defaultCompressModel,
visionModels, visionModels,
allowedWebDavEndpoints, allowedWebDavEndpoints,
enableMcp: process.env.ENABLE_MCP === "true", enableMcp: process.env.ENABLE_MCP === "true",

View File

@ -140,6 +140,7 @@ const DEFAULT_ACCESS_STATE = {
disableFastLink: false, disableFastLink: false,
customModels: "", customModels: "",
defaultModel: "", defaultModel: "",
defaultCompressModel: "",
visionModels: "", visionModels: "",
// tts config // tts config
@ -255,12 +256,21 @@ export const useAccessStore = createPersistStore(
.then((res) => res.json()) .then((res) => res.json())
.then((res) => { .then((res) => {
const defaultModel = res.defaultModel ?? ""; const defaultModel = res.defaultModel ?? "";
if (defaultModel !== "") { if (defaultModel) {
const [model, providerName] = getModelProvider(defaultModel); const [model, providerName] = getModelProvider(defaultModel);
DEFAULT_CONFIG.modelConfig.model = model; DEFAULT_CONFIG.modelConfig.model = model;
DEFAULT_CONFIG.modelConfig.providerName = providerName as any; 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; return res;
}) })
.then((res: DangerConfig) => { .then((res: DangerConfig) => {

View File

@ -123,9 +123,16 @@ function getSummarizeModel(
currentModel: string, currentModel: string,
providerName: string, providerName: string,
): 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 it is using gpt-* models, force to use 4o-mini to summarize
if (currentModel.startsWith("gpt") || currentModel.startsWith("chatgpt")) { if (currentModel.startsWith("gpt") || currentModel.startsWith("chatgpt")) {
const configStore = useAppConfig.getState();
const accessStore = useAccessStore.getState(); const accessStore = useAccessStore.getState();
const allModel = collectModelsWithDefaultModel( const allModel = collectModelsWithDefaultModel(
configStore.models, configStore.models,