mirror of
https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web.git
synced 2025-05-20 20:50:17 +09:00
692 lines
18 KiB
TypeScript
692 lines
18 KiB
TypeScript
export const OWNER = "Hk-Gosuto";
|
|
export const REPO = "ChatGPT-Next-Web-LangChain";
|
|
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 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 DEEPSEEK_BASE_URL = "https://api.deepseek.com";
|
|
|
|
export const XAI_BASE_URL = "https://api.x.ai";
|
|
|
|
export const CHATGLM_BASE_URL = "https://open.bigmodel.cn";
|
|
|
|
export const SILICONFLOW_BASE_URL = "https://api.siliconflow.cn";
|
|
|
|
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",
|
|
Artifacts = "/artifacts",
|
|
}
|
|
|
|
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",
|
|
XAI = "/api/xai",
|
|
ChatGLM = "/api/chatglm",
|
|
DeepSeek = "/api/deepseek",
|
|
SiliconFlow = "/api/siliconflow",
|
|
}
|
|
|
|
export enum SlotID {
|
|
AppBody = "app-body",
|
|
CustomModel = "custom-model",
|
|
}
|
|
|
|
export enum FileName {
|
|
Masks = "masks.json",
|
|
Plugins = "plugins.json",
|
|
Prompts = "prompts.json",
|
|
}
|
|
|
|
export enum StoreKey {
|
|
Chat = "chat-next-web-store",
|
|
Access = "access-control",
|
|
Config = "app-config",
|
|
Mask = "mask-store",
|
|
Plugin = "plugin-store",
|
|
Prompt = "prompt-store",
|
|
Update = "chat-update",
|
|
Sync = "sync",
|
|
}
|
|
|
|
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 = 60000;
|
|
|
|
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",
|
|
XAI = "XAI",
|
|
ChatGLM = "ChatGLM",
|
|
DeepSeek = "DeepSeek",
|
|
SiliconFlow = "SiliconFlow",
|
|
}
|
|
|
|
// 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",
|
|
XAI = "XAI",
|
|
ChatGLM = "ChatGLM",
|
|
DeepSeek = "DeepSeek",
|
|
SiliconFlow = "SiliconFlow",
|
|
}
|
|
|
|
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",
|
|
TranscriptionPath: "v1/audio/transcriptions",
|
|
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}`,
|
|
ImagePath: (deployName: string, apiVersion: string) =>
|
|
`deployments/${deployName}/images/generations?api-version=${apiVersion}`,
|
|
ExampleEndpoint: "https://{resource-url}/openai/deployments/{deploy-id}",
|
|
};
|
|
|
|
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 DeepSeek = {
|
|
ExampleEndpoint: DEEPSEEK_BASE_URL,
|
|
ChatPath: "chat/completions",
|
|
};
|
|
|
|
export const XAI = {
|
|
ExampleEndpoint: XAI_BASE_URL,
|
|
ChatPath: "v1/chat/completions",
|
|
};
|
|
|
|
export const ChatGLM = {
|
|
ExampleEndpoint: CHATGLM_BASE_URL,
|
|
ChatPath: "/api/paas/v4/chat/completions",
|
|
};
|
|
|
|
export const SiliconFlow = {
|
|
ExampleEndpoint: SILICONFLOW_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 GEMINI_SUMMARIZE_MODEL = "gemini-pro";
|
|
export const DEEPSEEK_SUMMARIZE_MODEL = "deepseek-chat";
|
|
|
|
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",
|
|
"gpt-4o-2024-11-20": "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-2024-09-12": "2023-10",
|
|
"o1-mini": "2023-10",
|
|
"o1-preview-2024-09-12": "2023-10",
|
|
"o1-preview": "2023-10",
|
|
"o1-2024-12-17": "2023-10",
|
|
o1: "2023-10",
|
|
"o3-mini-2025-01-31": "2023-10",
|
|
"o3-mini": "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",
|
|
"deepseek-chat": "2024-07",
|
|
"deepseek-coder": "2024-07",
|
|
};
|
|
|
|
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",
|
|
];
|
|
|
|
export const VISION_MODEL_REGEXES = [
|
|
/vision/,
|
|
/gpt-4o/,
|
|
/claude-3/,
|
|
/gemini-1\.5/,
|
|
/gemini-exp/,
|
|
/gemini-2\.0/,
|
|
/learnlm/,
|
|
/qwen-vl/,
|
|
/qwen2-vl/,
|
|
/gpt-4-turbo(?!.*preview)/, // Matches "gpt-4-turbo" but not "gpt-4-turbo-preview"
|
|
/^dall-e-3$/, // Matches exactly "dall-e-3"
|
|
/glm-4v/,
|
|
];
|
|
|
|
export const EXCLUDE_VISION_MODEL_REGEXES = [/claude-3-5-haiku-20241022/];
|
|
|
|
export const DEFAULT_STT_ENGINE = "WebAPI";
|
|
export const DEFAULT_STT_ENGINES = ["WebAPI", "OpenAI Whisper"];
|
|
export const FIREFOX_DEFAULT_STT_ENGINE = "OpenAI Whisper";
|
|
const openaiModels = [
|
|
// As of July 2024, gpt-4o-mini should be used in place of gpt-3.5-turbo,
|
|
// as it is cheaper, more capable, multimodal, and just as fast. gpt-3.5-turbo is still available for use in the API.
|
|
"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",
|
|
"gpt-4o-2024-11-20",
|
|
"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",
|
|
"o3-mini",
|
|
];
|
|
|
|
const googleModels = [
|
|
// https://ai.google.dev/gemini-api/docs/models/gemini?hl=zh-cn
|
|
"gemini-2.0-flash",
|
|
"gemini-2.0-flash-lite-preview-02-05",
|
|
"gemini-1.5-flash",
|
|
"gemini-1.5-flash-8b",
|
|
"gemini-1.5-pro",
|
|
// https://ai.google.dev/gemini-api/docs/models/experimental-models?hl=zh-cn
|
|
"gemini-2.0-pro-exp-02-05",
|
|
"gemini-2.0-flash-thinking-exp-01-21",
|
|
"gemini-2.0-flash-exp",
|
|
"gemini-exp-1206",
|
|
"learnlm-1.5-pro-experimental",
|
|
];
|
|
|
|
const anthropicModels = [
|
|
"claude-instant-1.2",
|
|
"claude-2.0",
|
|
"claude-2.1",
|
|
"claude-3-sonnet-20240229",
|
|
"claude-3-opus-20240229",
|
|
"claude-3-opus-latest",
|
|
"claude-3-haiku-20240307",
|
|
"claude-3-5-haiku-20241022",
|
|
"claude-3-5-haiku-latest",
|
|
"claude-3-5-sonnet-20240620",
|
|
"claude-3-5-sonnet-20241022",
|
|
"claude-3-5-sonnet-latest",
|
|
];
|
|
|
|
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",
|
|
];
|
|
|
|
const deepseekModels = ["deepseek-chat", "deepseek-coder", "deepseek-reasoner"];
|
|
|
|
const xAIModes = ["grok-beta"];
|
|
|
|
const chatglmModels = [
|
|
"glm-4-plus",
|
|
"glm-4-0520",
|
|
"glm-4",
|
|
"glm-4-air",
|
|
"glm-4-airx",
|
|
"glm-4-long",
|
|
"glm-4-flashx",
|
|
"glm-4-flash",
|
|
"glm-4v-plus",
|
|
"glm-4v",
|
|
"glm-4v-flash", // free
|
|
"cogview-3-plus",
|
|
"cogview-3",
|
|
"cogview-3-flash", // free
|
|
// 目前无法适配轮询任务
|
|
// "cogvideox",
|
|
// "cogvideox-flash", // free
|
|
];
|
|
|
|
const siliconflowModels = [
|
|
"Qwen/Qwen2.5-7B-Instruct",
|
|
"Qwen/Qwen2.5-72B-Instruct",
|
|
"deepseek-ai/DeepSeek-R1",
|
|
"deepseek-ai/DeepSeek-R1-Distill-Llama-70B",
|
|
"deepseek-ai/DeepSeek-R1-Distill-Llama-8B",
|
|
"deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B",
|
|
"deepseek-ai/DeepSeek-R1-Distill-Qwen-14B",
|
|
"deepseek-ai/DeepSeek-R1-Distill-Qwen-32B",
|
|
"deepseek-ai/DeepSeek-R1-Distill-Qwen-7B",
|
|
"deepseek-ai/DeepSeek-V3",
|
|
"meta-llama/Llama-3.3-70B-Instruct",
|
|
"THUDM/glm-4-9b-chat",
|
|
];
|
|
|
|
let seq = 1000; // 内置的模型序号生成器从1000开始
|
|
export const DEFAULT_MODELS = [
|
|
...openaiModels.map((name) => ({
|
|
name,
|
|
available: true,
|
|
sorted: seq++, // Global sequence sort(index)
|
|
provider: {
|
|
id: "openai",
|
|
providerName: "OpenAI",
|
|
providerType: "openai",
|
|
sorted: 1, // 这里是固定的,确保顺序与之前内置的版本一致
|
|
},
|
|
})),
|
|
...openaiModels.map((name) => ({
|
|
name,
|
|
available: true,
|
|
sorted: seq++,
|
|
provider: {
|
|
id: "azure",
|
|
providerName: "Azure",
|
|
providerType: "azure",
|
|
sorted: 2,
|
|
},
|
|
})),
|
|
...googleModels.map((name) => ({
|
|
name,
|
|
available: true,
|
|
sorted: seq++,
|
|
provider: {
|
|
id: "google",
|
|
providerName: "Google",
|
|
providerType: "google",
|
|
sorted: 3,
|
|
},
|
|
})),
|
|
...anthropicModels.map((name) => ({
|
|
name,
|
|
available: true,
|
|
sorted: seq++,
|
|
provider: {
|
|
id: "anthropic",
|
|
providerName: "Anthropic",
|
|
providerType: "anthropic",
|
|
sorted: 4,
|
|
},
|
|
})),
|
|
...baiduModels.map((name) => ({
|
|
name,
|
|
available: true,
|
|
sorted: seq++,
|
|
provider: {
|
|
id: "baidu",
|
|
providerName: "Baidu",
|
|
providerType: "baidu",
|
|
sorted: 5,
|
|
},
|
|
})),
|
|
...bytedanceModels.map((name) => ({
|
|
name,
|
|
available: true,
|
|
sorted: seq++,
|
|
provider: {
|
|
id: "bytedance",
|
|
providerName: "ByteDance",
|
|
providerType: "bytedance",
|
|
sorted: 6,
|
|
},
|
|
})),
|
|
...alibabaModes.map((name) => ({
|
|
name,
|
|
available: true,
|
|
sorted: seq++,
|
|
provider: {
|
|
id: "alibaba",
|
|
providerName: "Alibaba",
|
|
providerType: "alibaba",
|
|
sorted: 7,
|
|
},
|
|
})),
|
|
...tencentModels.map((name) => ({
|
|
name,
|
|
available: true,
|
|
sorted: seq++,
|
|
provider: {
|
|
id: "tencent",
|
|
providerName: "Tencent",
|
|
providerType: "tencent",
|
|
sorted: 8,
|
|
},
|
|
})),
|
|
...moonshotModes.map((name) => ({
|
|
name,
|
|
available: true,
|
|
sorted: seq++,
|
|
provider: {
|
|
id: "moonshot",
|
|
providerName: "Moonshot",
|
|
providerType: "moonshot",
|
|
sorted: 9,
|
|
},
|
|
})),
|
|
...iflytekModels.map((name) => ({
|
|
name,
|
|
available: true,
|
|
sorted: seq++,
|
|
provider: {
|
|
id: "iflytek",
|
|
providerName: "Iflytek",
|
|
providerType: "iflytek",
|
|
sorted: 10,
|
|
},
|
|
})),
|
|
...xAIModes.map((name) => ({
|
|
name,
|
|
available: true,
|
|
sorted: seq++,
|
|
provider: {
|
|
id: "xai",
|
|
providerName: "XAI",
|
|
providerType: "xai",
|
|
sorted: 11,
|
|
},
|
|
})),
|
|
...chatglmModels.map((name) => ({
|
|
name,
|
|
available: true,
|
|
sorted: seq++,
|
|
provider: {
|
|
id: "chatglm",
|
|
providerName: "ChatGLM",
|
|
providerType: "chatglm",
|
|
sorted: 12,
|
|
},
|
|
})),
|
|
...deepseekModels.map((name) => ({
|
|
name,
|
|
available: true,
|
|
sorted: seq++,
|
|
provider: {
|
|
id: "deepseek",
|
|
providerName: "DeepSeek",
|
|
providerType: "deepseek",
|
|
sorted: 13,
|
|
},
|
|
})),
|
|
...siliconflowModels.map((name) => ({
|
|
name,
|
|
available: true,
|
|
sorted: seq++,
|
|
provider: {
|
|
id: "siliconflow",
|
|
providerName: "SiliconFlow",
|
|
providerType: "siliconflow",
|
|
sorted: 14,
|
|
},
|
|
})),
|
|
] 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 MYFILES_BROWSER_TOOLS_SYSTEM_PROMPT = `
|
|
# Tools
|
|
|
|
## myfiles_browser
|
|
|
|
You have the tool 'myfiles_browser' with the following functions:
|
|
issues queries to search the file(s) uploaded in the current conversation and displays the results.
|
|
|
|
This tool is for browsing the files uploaded by the user.
|
|
|
|
Parts of the documents uploaded by users will be automatically included in the conversation. Only use this tool when the relevant parts don't contain the necessary information to fulfill the user's request.
|
|
|
|
If the user needs to summarize the document, they can summarize it through parts of the document.
|
|
|
|
Think carefully about how the information you find relates to the user's request. Respond as soon as you find information that clearly answers the request.
|
|
|
|
Issue multiple queries to the 'myfiles_browser' command only when the user's question needs to be decomposed to find different facts. In other scenarios, prefer providing a single query. Avoid single-word queries that are extremely broad and will return unrelated results.
|
|
|
|
Here are some examples of how to use the 'myfiles_browser' command:
|
|
User: What was the GDP of France and Italy in the 1970s? => myfiles_browser(["france gdp 1970", "italy gdp 1970"])
|
|
User: What does the report say about the GPT4 performance on MMLU? => myfiles_browser(["GPT4 MMLU performance"])
|
|
User: How can I integrate customer relationship management system with third-party email marketing tools? => myfiles_browser(["customer management system marketing integration"])
|
|
User: What are the best practices for data security and privacy for our cloud storage services? => myfiles_browser(["cloud storage security and privacy"])
|
|
|
|
The user has uploaded the following files:
|
|
`;
|