mirror of
https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web.git
synced 2025-11-16 14:03:43 +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:
23
app/utils/baidu.ts
Normal file
23
app/utils/baidu.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
import { BAIDU_OATUH_URL } from "../constant";
|
||||
/**
|
||||
* 使用 AK,SK 生成鉴权签名(Access Token)
|
||||
* @return 鉴权签名信息
|
||||
*/
|
||||
export async function getAccessToken(
|
||||
clientId: string,
|
||||
clientSecret: string,
|
||||
): Promise<{
|
||||
access_token: string;
|
||||
expires_in: number;
|
||||
error?: number;
|
||||
}> {
|
||||
const res = await fetch(
|
||||
`${BAIDU_OATUH_URL}?grant_type=client_credentials&client_id=${clientId}&client_secret=${clientSecret}`,
|
||||
{
|
||||
method: "POST",
|
||||
mode: "cors",
|
||||
},
|
||||
);
|
||||
const resJson = await res.json();
|
||||
return resJson;
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
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"
|
||||
);
|
||||
}
|
||||
@@ -14,9 +14,9 @@ export function useAllModels() {
|
||||
[configStore.customModels, accessStore.customModels].join(","),
|
||||
accessStore.defaultModel,
|
||||
).filter((m) => !configStore.dontUseModel.includes(m.name as any));
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [
|
||||
accessStore.customModels,
|
||||
accessStore.defaultModel,
|
||||
configStore.customModels,
|
||||
configStore.models,
|
||||
configStore.dontUseModel,
|
||||
|
||||
@@ -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