mirror of
https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web.git
synced 2025-11-21 16:26:49 +08:00
Merge remote-tracking branch 'upstream/main'
# Conflicts: # app/api/auth.ts # app/api/common.ts # app/azure.ts # app/client/api.ts # app/client/platforms/openai.ts # app/components/chat.tsx # app/components/settings.tsx # app/constant.ts # app/layout.tsx # app/masks/index.ts # app/store/chat.ts # app/store/config.ts # app/utils/hooks.ts # app/utils/model.ts # package.json # yarn.lock
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
import { DEFAULT_MODELS } from "../constant";
|
||||
import { LLMModel } from "../client/api";
|
||||
|
||||
const customProvider = (modelName: string) => ({
|
||||
id: modelName,
|
||||
providerName: "",
|
||||
providerName: "Custom",
|
||||
providerType: "custom",
|
||||
});
|
||||
|
||||
@@ -24,7 +25,8 @@ export function collectModelTable(
|
||||
|
||||
// default models
|
||||
models.forEach((m) => {
|
||||
modelTable[m.name] = {
|
||||
// using <modelName>@<providerId> as fullName
|
||||
modelTable[`${m.name}@${m?.provider?.id}`] = {
|
||||
...m,
|
||||
displayName: m.name, // 'provider' is copied over if it exists
|
||||
};
|
||||
@@ -38,7 +40,7 @@ export function collectModelTable(
|
||||
const available = !m.startsWith("-");
|
||||
const nameConfig =
|
||||
m.startsWith("+") || m.startsWith("-") ? m.slice(1) : m;
|
||||
const [name, displayName] = nameConfig.split("=");
|
||||
let [name, displayName] = nameConfig.split("=");
|
||||
|
||||
// enable or disable all models
|
||||
if (name === "all") {
|
||||
@@ -46,13 +48,39 @@ export function collectModelTable(
|
||||
(model) => (model.available = available),
|
||||
);
|
||||
} else {
|
||||
modelTable[name] = {
|
||||
name,
|
||||
displayName: displayName || name,
|
||||
available,
|
||||
describe: "",
|
||||
provider: modelTable[name]?.provider ?? customProvider(name), // Use optional chaining
|
||||
};
|
||||
// 1. find model by name, and set available value
|
||||
const [customModelName, customProviderName] = name.split("@");
|
||||
let count = 0;
|
||||
for (const fullName in modelTable) {
|
||||
const [modelName, providerName] = fullName.split("@");
|
||||
if (
|
||||
customModelName == modelName &&
|
||||
(customProviderName === undefined ||
|
||||
customProviderName === providerName)
|
||||
) {
|
||||
count += 1;
|
||||
modelTable[fullName]["available"] = available;
|
||||
// swap name and displayName for bytedance
|
||||
if (providerName === "bytedance") {
|
||||
[name, displayName] = [displayName, name];
|
||||
modelTable[fullName]["name"] = name;
|
||||
}
|
||||
if (displayName) {
|
||||
modelTable[fullName]["displayName"] = displayName;
|
||||
}
|
||||
}
|
||||
}
|
||||
// 2. if model not exists, create new model with available value
|
||||
if (count === 0) {
|
||||
const provider = customProvider(name);
|
||||
modelTable[`${name}@${provider?.id}`] = {
|
||||
name,
|
||||
displayName: displayName || name,
|
||||
available,
|
||||
describe: "",
|
||||
provider, // Use optional chaining
|
||||
};
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -105,3 +133,13 @@ export function collectModelsWithDefaultModel(
|
||||
const allModels = Object.values(modelTable);
|
||||
return allModels;
|
||||
}
|
||||
|
||||
export function isModelAvailableInServer(
|
||||
customModels: string,
|
||||
modelName: string,
|
||||
providerName: string,
|
||||
) {
|
||||
const fullName = `${modelName}@${providerName}`;
|
||||
const modelTable = collectModelTable(DEFAULT_MODELS, customModels);
|
||||
return modelTable[fullName]?.available === false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user