mirror of
https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web.git
synced 2025-10-01 15:46:39 +08:00
# Conflicts: # app/components/settings.tsx # app/components/ui-lib.module.scss # app/constant.ts # app/locales/ar.ts # app/locales/bn.ts # app/locales/cn.ts # app/locales/cs.ts # app/locales/de.ts # app/locales/en.ts # app/locales/es.ts # app/locales/fr.ts # app/locales/id.ts # app/locales/it.ts # app/locales/jp.ts # app/locales/ko.ts # app/locales/no.ts # app/locales/pt.ts # app/locales/ru.ts # app/locales/sk.ts # app/locales/tr.ts # app/locales/tw.ts # app/locales/vi.ts
527 lines
13 KiB
TypeScript
527 lines
13 KiB
TypeScript
export const OWNER = "ChatGPTNextWeb";
|
|
export const REPO = "ChatGPT-Next-Web";
|
|
export const REPO_URL = `https://github.com/${OWNER}/${REPO}`;
|
|
export const PLUGINS_REPO_URL = `https://github.com/${OWNER}/NextChat-Awesome-Plugins`;
|
|
export const ISSUE_URL = `https://github.com/${OWNER}/${REPO}/issues`;
|
|
export const UPDATE_URL = `${REPO_URL}#keep-updated`;
|
|
export const RELEASE_URL = `${REPO_URL}/releases`;
|
|
export const FETCH_COMMIT_URL = `https://api.github.com/repos/${OWNER}/${REPO}/commits?per_page=1`;
|
|
export const FETCH_TAG_URL = `https://api.github.com/repos/${OWNER}/${REPO}/tags?per_page=1`;
|
|
export const RUNTIME_CONFIG_DOM = "danger-runtime-config";
|
|
|
|
export const STABILITY_BASE_URL = "https://api.stability.ai";
|
|
|
|
export const DEFAULT_API_HOST = "https://api.nextchat.dev";
|
|
export const OPENAI_BASE_URL = "https://api.openai.com";
|
|
export const ANTHROPIC_BASE_URL = "https://api.anthropic.com";
|
|
|
|
export const GEMINI_BASE_URL = "https://generativelanguage.googleapis.com/";
|
|
|
|
export const BAIDU_BASE_URL = "https://aip.baidubce.com";
|
|
export const BAIDU_OATUH_URL = `${BAIDU_BASE_URL}/oauth/2.0/token`;
|
|
|
|
export const BYTEDANCE_BASE_URL = "https://ark.cn-beijing.volces.com";
|
|
|
|
export const ALIBABA_BASE_URL = "https://dashscope.aliyuncs.com/api/";
|
|
|
|
export const TENCENT_BASE_URL = "https://hunyuan.tencentcloudapi.com";
|
|
|
|
export const MOONSHOT_BASE_URL = "https://api.moonshot.cn";
|
|
export const IFLYTEK_BASE_URL = "https://spark-api-open.xf-yun.com";
|
|
|
|
export const CACHE_URL_PREFIX = "/api/cache";
|
|
export const UPLOAD_URL = `${CACHE_URL_PREFIX}/upload`;
|
|
|
|
export enum Path {
|
|
Home = "/",
|
|
Chat = "/chat",
|
|
Settings = "/settings",
|
|
NewChat = "/new-chat",
|
|
Masks = "/masks",
|
|
Plugins = "/plugins",
|
|
Auth = "/auth",
|
|
Sd = "/sd",
|
|
SdNew = "/sd-new",
|
|
Artifacts = "/artifacts",
|
|
SearchChat = "/search-chat",
|
|
Reward = "/reward",
|
|
}
|
|
|
|
export enum ApiPath {
|
|
Cors = "",
|
|
Azure = "/api/azure",
|
|
OpenAI = "/api/openai",
|
|
Anthropic = "/api/anthropic",
|
|
Google = "/api/google",
|
|
Baidu = "/api/baidu",
|
|
ByteDance = "/api/bytedance",
|
|
Alibaba = "/api/alibaba",
|
|
Tencent = "/api/tencent",
|
|
Moonshot = "/api/moonshot",
|
|
Iflytek = "/api/iflytek",
|
|
Stability = "/api/stability",
|
|
Artifacts = "/api/artifacts",
|
|
}
|
|
|
|
export enum SlotID {
|
|
AppBody = "app-body",
|
|
CustomModel = "custom-model",
|
|
}
|
|
|
|
export enum FileName {
|
|
Masks = "masks.json",
|
|
Prompts = "prompts.json",
|
|
}
|
|
|
|
export enum StoreKey {
|
|
Chat = "chat-next-web-store",
|
|
Plugin = "chat-next-web-plugin",
|
|
Access = "access-control",
|
|
Config = "app-config",
|
|
Mask = "mask-store",
|
|
Prompt = "prompt-store",
|
|
Update = "chat-update",
|
|
Sync = "sync",
|
|
SdList = "sd-list",
|
|
}
|
|
|
|
export const DEFAULT_SIDEBAR_WIDTH = 300;
|
|
export const MAX_SIDEBAR_WIDTH = 500;
|
|
export const MIN_SIDEBAR_WIDTH = 230;
|
|
export const NARROW_SIDEBAR_WIDTH = 100;
|
|
|
|
export const ACCESS_CODE_PREFIX = "nk-";
|
|
|
|
export const LAST_INPUT_KEY = "last-input";
|
|
export const UNFINISHED_INPUT = (id: string) => "unfinished-input-" + id;
|
|
|
|
export const STORAGE_KEY = "chatgpt-next-web";
|
|
|
|
export const REQUEST_TIMEOUT_MS = 120000;
|
|
|
|
export const EXPORT_MESSAGE_CLASS_NAME = "export-markdown";
|
|
|
|
export enum ServiceProvider {
|
|
OpenAI = "OpenAI",
|
|
Azure = "Azure",
|
|
Google = "Google",
|
|
Anthropic = "Anthropic",
|
|
Baidu = "Baidu",
|
|
ByteDance = "ByteDance",
|
|
Alibaba = "Alibaba",
|
|
Tencent = "Tencent",
|
|
Moonshot = "Moonshot",
|
|
Stability = "Stability",
|
|
Iflytek = "Iflytek",
|
|
}
|
|
|
|
// Google API safety settings, see https://ai.google.dev/gemini-api/docs/safety-settings
|
|
// BLOCK_NONE will not block any content, and BLOCK_ONLY_HIGH will block only high-risk content.
|
|
export enum GoogleSafetySettingsThreshold {
|
|
BLOCK_NONE = "BLOCK_NONE",
|
|
BLOCK_ONLY_HIGH = "BLOCK_ONLY_HIGH",
|
|
BLOCK_MEDIUM_AND_ABOVE = "BLOCK_MEDIUM_AND_ABOVE",
|
|
BLOCK_LOW_AND_ABOVE = "BLOCK_LOW_AND_ABOVE",
|
|
}
|
|
|
|
export enum ModelProvider {
|
|
Stability = "Stability",
|
|
GPT = "GPT",
|
|
GeminiPro = "GeminiPro",
|
|
Claude = "Claude",
|
|
Ernie = "Ernie",
|
|
Doubao = "Doubao",
|
|
Qwen = "Qwen",
|
|
Hunyuan = "Hunyuan",
|
|
Moonshot = "Moonshot",
|
|
Iflytek = "Iflytek",
|
|
}
|
|
|
|
export const Stability = {
|
|
GeneratePath: "v2beta/stable-image/generate",
|
|
ExampleEndpoint: "https://api.stability.ai",
|
|
};
|
|
|
|
export const Anthropic = {
|
|
ChatPath: "v1/messages",
|
|
ChatPath1: "v1/complete",
|
|
ExampleEndpoint: "https://api.anthropic.com",
|
|
Vision: "2023-06-01",
|
|
};
|
|
|
|
export const OpenaiPath = {
|
|
ChatPath: "v1/chat/completions",
|
|
SpeechPath: "v1/audio/speech",
|
|
ImagePath: "v1/images/generations",
|
|
UsagePath: "dashboard/billing/usage",
|
|
SubsPath: "dashboard/billing/subscription",
|
|
ListModelPath: "v1/models",
|
|
};
|
|
|
|
export const Azure = {
|
|
ChatPath: (deployName: string, apiVersion: string) =>
|
|
`deployments/${deployName}/chat/completions?api-version=${apiVersion}`,
|
|
// https://<your_resource_name>.openai.azure.com/openai/deployments/<your_deployment_name>/images/generations?api-version=<api_version>
|
|
ImagePath: (deployName: string, apiVersion: string) =>
|
|
`deployments/${deployName}/images/generations?api-version=${apiVersion}`,
|
|
ExampleEndpoint: "https://{resource-url}/openai",
|
|
};
|
|
|
|
export const Google = {
|
|
ExampleEndpoint: "https://generativelanguage.googleapis.com/",
|
|
ChatPath: (modelName: string) =>
|
|
`v1beta/models/${modelName}:streamGenerateContent`,
|
|
};
|
|
|
|
export const Baidu = {
|
|
ExampleEndpoint: BAIDU_BASE_URL,
|
|
ChatPath: (modelName: string) => {
|
|
let endpoint = modelName;
|
|
if (modelName === "ernie-4.0-8k") {
|
|
endpoint = "completions_pro";
|
|
}
|
|
if (modelName === "ernie-4.0-8k-preview-0518") {
|
|
endpoint = "completions_adv_pro";
|
|
}
|
|
if (modelName === "ernie-3.5-8k") {
|
|
endpoint = "completions";
|
|
}
|
|
if (modelName === "ernie-speed-8k") {
|
|
endpoint = "ernie_speed";
|
|
}
|
|
return `rpc/2.0/ai_custom/v1/wenxinworkshop/chat/${endpoint}`;
|
|
},
|
|
};
|
|
|
|
export const ByteDance = {
|
|
ExampleEndpoint: "https://ark.cn-beijing.volces.com/api/",
|
|
ChatPath: "api/v3/chat/completions",
|
|
};
|
|
|
|
export const Alibaba = {
|
|
ExampleEndpoint: ALIBABA_BASE_URL,
|
|
ChatPath: "v1/services/aigc/text-generation/generation",
|
|
};
|
|
|
|
export const Tencent = {
|
|
ExampleEndpoint: TENCENT_BASE_URL,
|
|
};
|
|
|
|
export const Moonshot = {
|
|
ExampleEndpoint: MOONSHOT_BASE_URL,
|
|
ChatPath: "v1/chat/completions",
|
|
};
|
|
|
|
export const Iflytek = {
|
|
ExampleEndpoint: IFLYTEK_BASE_URL,
|
|
ChatPath: "v1/chat/completions",
|
|
};
|
|
|
|
export const DEFAULT_INPUT_TEMPLATE = `{{input}}`; // input / time / model / lang
|
|
// export const DEFAULT_SYSTEM_TEMPLATE = `
|
|
// You are ChatGPT, a large language model trained by {{ServiceProvider}}.
|
|
// Knowledge cutoff: {{cutoff}}
|
|
// Current model: {{model}}
|
|
// Current time: {{time}}
|
|
// Latex inline: $x^2$
|
|
// Latex block: $$e=mc^2$$
|
|
// `;
|
|
export const DEFAULT_SYSTEM_TEMPLATE = `
|
|
You are ChatGPT, a large language model trained by {{ServiceProvider}}.
|
|
Knowledge cutoff: {{cutoff}}
|
|
Current model: {{model}}
|
|
Current time: {{time}}
|
|
Latex inline: \\(x^2\\)
|
|
Latex block: $$e=mc^2$$
|
|
`;
|
|
|
|
// export const SUMMARIZE_MODEL = "gpt-4o-mini";
|
|
export const SUMMARIZE_MODEL = "gpt-4o";
|
|
export const GEMINI_SUMMARIZE_MODEL = "gemini-pro";
|
|
|
|
export const KnowledgeCutOffDate: Record<string, string> = {
|
|
default: "2021-09",
|
|
"gpt-4-turbo": "2023-12",
|
|
"gpt-4-turbo-2024-04-09": "2023-12",
|
|
"gpt-4-turbo-preview": "2023-12",
|
|
"gpt-4o": "2023-10",
|
|
"gpt-4o-2024-05-13": "2023-10",
|
|
"gpt-4o-2024-08-06": "2023-10",
|
|
"chatgpt-4o-latest": "2023-10",
|
|
"gpt-4o-mini": "2023-10",
|
|
"gpt-4o-mini-2024-07-18": "2023-10",
|
|
"gpt-4-vision-preview": "2023-04",
|
|
"o1-mini": "2023-10",
|
|
"o1-preview": "2023-10",
|
|
// After improvements,
|
|
// it's now easier to add "KnowledgeCutOffDate" instead of stupid hardcoding it, as was done previously.
|
|
"gemini-pro": "2023-12",
|
|
"gemini-pro-vision": "2023-12",
|
|
};
|
|
|
|
export const DEFAULT_TTS_ENGINE = "OpenAI-TTS";
|
|
export const DEFAULT_TTS_ENGINES = ["OpenAI-TTS", "Edge-TTS"];
|
|
export const DEFAULT_TTS_MODEL = "tts-1";
|
|
export const DEFAULT_TTS_VOICE = "alloy";
|
|
export const DEFAULT_TTS_MODELS = ["tts-1", "tts-1-hd"];
|
|
export const DEFAULT_TTS_VOICES = [
|
|
"alloy",
|
|
"echo",
|
|
"fable",
|
|
"onyx",
|
|
"nova",
|
|
"shimmer",
|
|
];
|
|
|
|
const openaiModels = [
|
|
"gpt-3.5-turbo",
|
|
"gpt-3.5-turbo-1106",
|
|
"gpt-3.5-turbo-0125",
|
|
"gpt-4",
|
|
"gpt-4-0613",
|
|
"gpt-4-32k",
|
|
"gpt-4-32k-0613",
|
|
"gpt-4-turbo",
|
|
"gpt-4-turbo-preview",
|
|
"gpt-4o",
|
|
"gpt-4o-2024-05-13",
|
|
"gpt-4o-2024-08-06",
|
|
"chatgpt-4o-latest",
|
|
"gpt-4o-mini",
|
|
"gpt-4o-mini-2024-07-18",
|
|
"gpt-4-vision-preview",
|
|
"gpt-4-turbo-2024-04-09",
|
|
"gpt-4-1106-preview",
|
|
"dall-e-3",
|
|
"o1-mini",
|
|
"o1-preview",
|
|
];
|
|
|
|
const googleModels = [
|
|
"gemini-1.0-pro",
|
|
"gemini-1.5-pro-latest",
|
|
"gemini-1.5-flash-latest",
|
|
"gemini-pro-vision",
|
|
];
|
|
|
|
const anthropicModels = [
|
|
"claude-instant-1.2",
|
|
"claude-2.0",
|
|
"claude-2.1",
|
|
"claude-3-sonnet-20240229",
|
|
"claude-3-opus-20240229",
|
|
"claude-3-haiku-20240307",
|
|
"claude-3-5-sonnet-20240620",
|
|
];
|
|
|
|
const baiduModels = [
|
|
"ernie-4.0-turbo-8k",
|
|
"ernie-4.0-8k",
|
|
"ernie-4.0-8k-preview",
|
|
"ernie-4.0-8k-preview-0518",
|
|
"ernie-4.0-8k-latest",
|
|
"ernie-3.5-8k",
|
|
"ernie-3.5-8k-0205",
|
|
"ernie-speed-128k",
|
|
"ernie-speed-8k",
|
|
"ernie-lite-8k",
|
|
"ernie-tiny-8k",
|
|
];
|
|
|
|
const bytedanceModels = [
|
|
"Doubao-lite-4k",
|
|
"Doubao-lite-32k",
|
|
"Doubao-lite-128k",
|
|
"Doubao-pro-4k",
|
|
"Doubao-pro-32k",
|
|
"Doubao-pro-128k",
|
|
];
|
|
|
|
const alibabaModes = [
|
|
"qwen-turbo",
|
|
"qwen-plus",
|
|
"qwen-max",
|
|
"qwen-max-0428",
|
|
"qwen-max-0403",
|
|
"qwen-max-0107",
|
|
"qwen-max-longcontext",
|
|
];
|
|
|
|
const tencentModels = [
|
|
"hunyuan-pro",
|
|
"hunyuan-standard",
|
|
"hunyuan-lite",
|
|
"hunyuan-role",
|
|
"hunyuan-functioncall",
|
|
"hunyuan-code",
|
|
"hunyuan-vision",
|
|
];
|
|
|
|
const moonshotModes = [
|
|
"moonshot-v1-8k",
|
|
// "moonshot-v1-32k",
|
|
// "moonshot-v1-128k"
|
|
];
|
|
|
|
const iflytekModels = [
|
|
"general",
|
|
"generalv3",
|
|
"pro-128k",
|
|
"generalv3.5",
|
|
"4.0Ultra",
|
|
];
|
|
|
|
let seq = 1000; // 内置的模型序号生成器从1000开始
|
|
export const DEFAULT_MODELS = [
|
|
{
|
|
name: "gpt-3.5-turbo",
|
|
describe: "GPT-3,质量一般,便宜",
|
|
available: false,
|
|
sorted: seq++,
|
|
provider: {
|
|
id: "openai",
|
|
providerName: "OpenAI",
|
|
providerType: "openai",
|
|
sorted: 1, // 这里是固定的,确保顺序与之前内置的版本一致
|
|
},
|
|
},
|
|
{
|
|
name: "gpt-4o-mini",
|
|
describe: "新出的,可以尝鲜",
|
|
available: true,
|
|
sorted: seq++,
|
|
provider: {
|
|
id: "azure",
|
|
providerName: "Azure",
|
|
providerType: "azure",
|
|
sorted: 1, // 这里是固定的,确保顺序与之前内置的版本一致
|
|
},
|
|
},
|
|
{
|
|
name: "gpt-4o",
|
|
describe: "GPT-4o,最新版,全能,快速,推荐",
|
|
available: true,
|
|
sorted: seq++,
|
|
provider: {
|
|
id: "azure",
|
|
providerName: "Azure",
|
|
providerType: "azure",
|
|
sorted: 1, // 这里是固定的,确保顺序与之前内置的版本一致
|
|
},
|
|
},
|
|
{
|
|
name: "gpt-4",
|
|
describe: "GPT-4,标准版",
|
|
available: true,
|
|
sorted: seq++,
|
|
provider: {
|
|
id: "azure",
|
|
providerName: "Azure",
|
|
providerType: "azure",
|
|
sorted: 1, // 这里是固定的,确保顺序与之前内置的版本一致
|
|
},
|
|
},
|
|
// {
|
|
// name: "gpt-4o-2024-08-06",
|
|
// describe: "GPT-4o,最新版,省着点用",
|
|
// available: true,
|
|
// sorted: seq++,
|
|
// provider: {
|
|
// id: "openai",
|
|
// providerName: "OpenAI",
|
|
// providerType: "openai",
|
|
// sorted: 2,
|
|
// },
|
|
// },
|
|
{
|
|
name: "o1-preview-all",
|
|
describe: "GPT,o1,最新模型,目前较贵",
|
|
available: true,
|
|
sorted: seq++,
|
|
provider: {
|
|
id: "openai",
|
|
providerName: "OpenAI",
|
|
providerType: "openai",
|
|
sorted: 2,
|
|
},
|
|
},
|
|
{
|
|
name: "claude-3-5-sonnet-20240620",
|
|
describe: "claude第三代模型最强版",
|
|
available: true,
|
|
sorted: seq++,
|
|
provider: {
|
|
id: "openai",
|
|
providerName: "OpenAI",
|
|
providerType: "openai",
|
|
sorted: 2, // 这里是固定的,确保顺序与之前内置的版本一致
|
|
},
|
|
},
|
|
{
|
|
name: "gemini-1.5-pro-latest",
|
|
available: true,
|
|
sorted: seq++,
|
|
describe: "谷歌的,不要钱,质量还不错",
|
|
provider: {
|
|
id: "google",
|
|
providerName: "Google",
|
|
providerType: "google",
|
|
sorted: 3,
|
|
},
|
|
},
|
|
...moonshotModes.map((name) => ({
|
|
name,
|
|
available: true,
|
|
sorted: seq++,
|
|
describe: "月之暗面,可以试试",
|
|
provider: {
|
|
id: "moonshot",
|
|
providerName: "Moonshot",
|
|
providerType: "moonshot",
|
|
sorted: 9,
|
|
},
|
|
})),
|
|
{
|
|
name: "midjourney",
|
|
describe: "绘图用,不用选",
|
|
available: false,
|
|
sorted: seq++,
|
|
provider: {
|
|
id: "openai",
|
|
providerName: "OpenAI",
|
|
providerType: "openai",
|
|
sorted: 2,
|
|
},
|
|
},
|
|
] as const;
|
|
|
|
export const CHAT_PAGE_SIZE = 15;
|
|
export const MAX_RENDER_MSG_COUNT = 45;
|
|
|
|
// some famous webdav endpoints
|
|
export const internalAllowedWebDavEndpoints = [
|
|
"https://dav.jianguoyun.com/dav/",
|
|
"https://dav.dropdav.com/",
|
|
"https://dav.box.com/dav",
|
|
"https://nanao.teracloud.jp/dav/",
|
|
"https://bora.teracloud.jp/dav/",
|
|
"https://webdav.4shared.com/",
|
|
"https://dav.idrivesync.com",
|
|
"https://webdav.yandex.com",
|
|
"https://app.koofr.net/dav/Koofr",
|
|
];
|
|
|
|
export const DEFAULT_GA_ID = "G-89WN60ZK2E";
|
|
export const PLUGINS = [
|
|
{ name: "Plugins", path: Path.Plugins },
|
|
{ name: "Stable Diffusion", path: Path.Sd },
|
|
{ name: "Search Chat", path: Path.SearchChat },
|
|
];
|
|
|
|
export const SAAS_CHAT_URL = "https://nextchat.dev/chat";
|
|
export const SAAS_CHAT_UTM_URL = "https://nextchat.dev/chat?utm=github";
|
|
|
|
export const DISABLE_MODELS = DEFAULT_MODELS.filter(
|
|
(item) => !item.available,
|
|
).map((item2) => item2.name);
|