{"repo": "amo808/chatapi", "files": {"frontend/src/config/aiModels/infiniai.ts": {"7e63a3e4e57d63cb021a2c074dc7b8d7447a7bf3": {"t": 1785595458.9826045, "n": 15468, "h": "e69a2998fb0d7b48", "c": "import { AIChatModelCard } from '@/types/aiModel';\n\n// https://cloud.infini-ai.com/genstudio/model\n// All models are currently free\n// Currently the platform doesn't support Function Call\n\nconst infiniaiChatModels: AIChatModelCard[] = [\n {\n abilities: {\n reasoning: true,\n },\n contextWindowTokens: 65_536,\n description:\n 'DeepSeek-R1 是一个专注于推理能力的大语言模型,通过创新的训练流程实现了与 OpenAI-o1 相当的数学、代码和推理任务表现。该模型采用了冷启动数据和大规模强化学习相结合的方式进行训练。',\n displayName: 'DeepSeek R1',\n enabled: true,\n id: 'deepseek-r1',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n contextWindowTokens: 65_536,\n description:\n 'DeepSeek-V3-0324 是一个强大的专家混合(MoE)语言模型,总参数量为 671B,每个 Token 激活 37B 参数。该模型采用多头潜在注意力(MLA)和 DeepSeekMoE 架构,实现了高效推理和经济训练,并在前代 DeepSeek-V3 的基础上显著提升了性能。',\n displayName: 'DeepSeek V3 0324',\n enabled: true,\n id: 'deepseek-v3',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 128_000,\n description:\n 'Qwen3-235B-A22B 是 Qwen 系列第三代的大型语言模型,采用混合专家(MoE)架构,总计 2350 亿参数,每 token 激活 220 亿参数。支持无缝切换思考模式(复杂推理)和非思考模式(通用对话),在数学、编码、常识推理及多语言指令执行中表现出色。',\n displayName: 'Qwen3 235B A22B',\n enabled: true,\n id: 'qwen3-235b-a22b',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 128_000,\n description:\n 'Qwen3-30B-A3B 是 Qwen 系列第三代的大型语言模型,采用混合专家(MoE)架构,总计 305 亿参数,每 token 激活 33 亿参数。支持无缝切换思维模式(复杂推理)和非思维模式(通用对话),在数学、编码、常识推理及多语言指令执行中表现出色。',\n displayName: 'Qwen3 30B A3B',\n enabled: true,\n id: 'qwen3-30b-a3b',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 128_000,\n description:\n 'Qwen3-32B 是 Qwen 系列第三代的大型语言模型,拥有 328 亿参数,专为高效推理和多语言任务设计。支持无缝切换思考模式(复杂推理)和非思考模式(通用对话),在数学、编码、常识推理及多语言指令执行中表现出色。',\n displayName: 'Qwen3 32B',\n enabled: true,\n id: 'qwen3-32b',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 128_000,\n description:\n 'Qwen3-14B 是 Qwen 系列第三代的大型语言模型,拥有 148 亿参数,专为高效推理和多语言任务设计。支持无缝切换思维模式(复杂推理)和非思维模式(通用对话),在数学、编码、常识推理及多语言指令执行中表现出色。',\n displayName: 'Qwen3 14B',\n enabled: false,\n id: 'qwen3-14b',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 128_000,\n description:\n 'Qwen3-8B 是 Qwen 系列第三代的大型语言模型,拥有 82 亿参数,专为高效推理和多语言任务设计。支持无缝切换思考模式(复杂推理)和非思考模式(通用对话),在数学、编码、常识推理及多语言指令执行中表现出色。',\n displayName: 'Qwen3 8B',\n enabled: false,\n id: 'qwen3-8b',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n abilities: {\n vision: true,\n },\n contextWindowTokens: 125_000,\n description:\n 'Qwen2.5-VL 系列模型提升了模型的智能水平、实用性和适用性,使其在自然对话、内容创作、专业知识服务及代码开发等场景中表现更优。旗舰模型 Qwen2.5-VL-72B-Instruct 在涵盖多个领域和任务的基准测试中展现出强大的竞争力,包括大学水平的问题解答、数学、文档理解、通用问答、视频理解以及视觉代理任务等。',\n displayName: 'Qwen2.5 VL 72B Instruct',\n enabled: true,\n id: 'qwen2.5-vl-72b-instruct',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n abilities: {\n vision: true,\n },\n contextWindowTokens: 125_000,\n description:\n 'Qwen2.5-VL 系列模型提升了模型的智能水平、实用性和适用性,使其在自然对话、内容创作、专业知识服务及代码开发等场景中表现更优。32B 版本使用了强化学习技术优化模型,与 Qwen2.5 VL 系列的其它模型相比,提供了更符合人类偏好的输出风格、复杂数学问题的推理能力,以及图像细粒度理解与推理能力。',\n displayName: 'Qwen2.5 VL 32B Instruct',\n enabled: true,\n id: 'qwen2.5-vl-32b-instruct',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n abilities: {\n vision: true,\n },\n contextWindowTokens: 125_000,\n description:\n 'Qwen2.5-VL 系列模型提升了模型的智能水平、实用性和适用性,使其在自然对话、内容创作、专业知识服务及代码开发等场景中表现更优。',\n displayName: 'Qwen2.5 VL 7B Instruct',\n id: 'qwen2.5-vl-7b-instruct',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n },\n contextWindowTokens: 32_768,\n description:\n 'Qwen2.5 是 Qwen 大型语言模型系列的最新成果。Qwen2.5 发布了从 0.5 到 720 亿参数不等的基础语言模型及指令调优语言模型。Qwen2.5 相比 Qwen2 带来了以下改进:\\n显著增加知识量,在编程与数学领域的能力得到极大提升。\\n在遵循指令、生成长文本、理解结构化数据 (例如,表格) 以及生成结构化输出特别是 JSON 方面有显著提升。对系统提示的多样性更具韧性,增强了聊天机器人中的角色扮演实现和条件设定。\\n支持长上下文处理。\\n支持超过 29 种语言的多语言功能,包括中文、英语、法语、西班牙语、葡萄牙语、德语、意大利语、俄语、日语、韩语、越南语、泰语、阿拉伯语等。',\n displayName: 'Qwen2.5 72B Instruct',\n enabled: true,\n id: 'qwen2.5-72b-instruct',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n },\n contextWindowTokens: 32_768,\n description:\n 'Qwen2.5 是 Qwen 大型语言模型系列的最新成果。Qwen2.5 发布了从 0.5 到 720 亿参数不等的基础语言模型及指令调优语言模型。Qwen2.5 相比 Qwen2 带来了以下改进:\\n显著增加知识量,在编程与数学领域的能力得到极大提升。\\n在遵循指令、生成长文本、理解结构化数据 (例如,表格) 以及生成结构化输出特别是 JSON 方面有显著提升。对系统提示的多样性更具韧性,增强了聊天机器人中的角色扮演实现和条件设定。\\n支持长上下文处理。\\n支持超过 29 种语言的多语言功能,包括中文、英语、法语、西班牙语、葡萄牙语、德语、意大利语、俄语、日语、韩语、越南语、泰语、阿拉伯语等。',\n displayName: 'Qwen2.5 32B Instruct',\n enabled: true,\n id: 'qwen2.5-32b-instruct',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n contextWindowTokens: 32_768,\n description:\n 'Qwen2.5-Coder 是最新的代码专用 Qwen 大型语言模型系列。Qwen2.5-Coder 在 CodeQwen1.5 的基础上带来了以下改进:\\n显著提升代码生成、代码推理和代码修复能力。\\n支持真实世界应用,例如代码代理,增强编码能力和数学及一般能力。\\n支持长上下文处理。',\n displayName: 'Qwen2.5 Coder 32B Instruct',\n id: 'qwen2.5-coder-32b-instruct',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n contextWindowTokens: 32_768,\n description:\n 'Qwen2.5 是 Qwen 大型语言模型系列的最新成果。Qwen2.5 发布了从 0.5 到 720 亿参数不等的基础语言模型及指令调优语言模型。Qwen2.5 相比 Qwen2 带来了以下改进:\\n显著增加知识量,在编程与数学领域的能力得到极大提升。\\n在遵循指令、生成长文本、理解结构化数据 (例如,表格) 以及生成结构化输出特别是 JSON 方面有显著提升。对系统提示的多样性更具韧性,增强了聊天机器人中的角色扮演实现和条件设定。\\n支持长上下文处理。\\n支持超过 29 种语言的多语言功能,包括中文、英语、法语、西班牙语、葡萄牙语、德语、意大利语、俄语、日语、韩语、越南语、泰语、阿拉伯语等。',\n displayName: 'Qwen2.5 14B Instruct',\n id: 'qwen2.5-14b-instruct',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n },\n contextWindowTokens: 32_768,\n description:\n 'Qwen2.5 是 Qwen 大型语言模型系列的最新成果。Qwen2.5 发布了从 0.5 到 720 亿参数不等的基础语言模型及指令调优语言模型。Qwen2.5 相比 Qwen2 带来了以下改进:\\n显著增加知识量,在编程与数学领域的能力得到极大提升。\\n在遵循指令、生成长文本、理解结构化数据 (例如,表格) 以及生成结构化输出特别是 JSON 方面有显著提升。对系统提示的多样性更具韧性,增强了聊天机器人中的角色扮演实现和条件设定。\\n支持长上下文处理。\\n支持超过 29 种语言的多语言功能,包括中文、英语、法语、西班牙语、葡萄牙语、德语、意大利语、俄语、日语、韩语、越南语、泰语、阿拉伯语等。',\n displayName: 'Qwen2.5 7B Instruct',\n id: 'qwen2.5-7b-instruct',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 65_536,\n description:\n 'QwQ 是 Qwen 系列的推理模型,相比传统指令调优模型,QwQ 具备思考和推理能力,在下游任务尤其是难题上能取得显著性能提升。QwQ-32B 是一款中等规模的推理模型,其性能可与最先进的推理模型相媲美,例如 DeepSeek-R1 和 o1-mini。',\n displayName: 'QwQ 32B',\n enabled: false,\n id: 'qwq-32b',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n contextWindowTokens: 32_768,\n description:\n 'DeepSeek-R1-Distill-Qwen-32B 是基于 DeepSeek-R1 蒸馏而来的模型,在 Qwen2.5-32B 的基础上使用 DeepSeek-R1 生成的样本进行微调。该模型在各种基准测试中表现出色,保持了强大的推理能力。',\n displayName: 'DeepSeek R1 Distill Qwen 32B',\n enabled: false,\n id: 'deepseek-r1-distill-qwen-32b',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n contextWindowTokens: 8192,\n description:\n 'Meta 发布的 LLaMA 3.3 多语言大规模语言模型(LLMs)是一个经过预训练和指令微调的生成模型,提供 70B 规模(文本输入/文本输出)。该模型使用超过 15T 的数据进行训练,支持英语、德语、法语、意大利语、葡萄牙语、印地语、西班牙语和泰语,知识更新截止于 2023 年 12 月。',\n displayName: 'LLaMA 3.3 70B',\n enabled: false,\n id: 'llama-3.3-70b-instruct',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n contextWindowTokens: 32_768,\n description:\n 'Qwen2 是 Qwen 团队推出的新一代大型语言模型系列。它基于 Transformer 架构,并采用 SwiGLU 激活函数、注意力 QKV 偏置(attention QKV bias)、群组查询注意力(group query attention)、滑动窗口注意力(mixture of sliding window attention)与全注意力的混合等技术。此外,Qwen 团队还改进了适应多种自然语言和代码的分词器。',\n displayName: 'Qwen 2 72B Instruct',\n id: 'qwen2-72b-instruct',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n contextWindowTokens: 32_768,\n description:\n 'Qwen2 是 Qwen 团队推出的新一代大型语言模型系列。它基于 Transformer 架构,并采用 SwiGLU 激活函数、注意力 QKV 偏置(attention QKV bias)、群组查询注意力(group query attention)、滑动窗口注意力(mixture of sliding window attention)与全注意力的混合等技术。此外,Qwen 团队还改进了适应多种自然语言和代码的分词器。',\n displayName: 'Qwen 2 7B Instruct',\n id: 'qwen2-7b-instruct',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n contextWindowTokens: 4096,\n description:\n 'Yi-1.5 是 Yi 的升级版本。 它使用 500B Tokens 的高质量语料库在 Yi 上持续进行预训练,并在 3M 个多样化的微调样本上进行微调。',\n displayName: 'Yi-1.5 34B Chat',\n id: 'yi-1.5-34b-chat',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n contextWindowTokens: 16_384,\n description: 'GLM-4-9B-Chat 是智谱 AI 推出的最新一代预训练模型 GLM-4-9B 的人类偏好对齐版本。',\n displayName: 'GLM-4 9B Chat',\n id: 'glm-4-9b-chat',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n contextWindowTokens: 8192,\n description:\n 'ChatGLM3 是智谱 AI 与清华 KEG 实验室发布的闭源模型,经过海量中英标识符的预训练与人类偏好对齐训练,相比一代模型在 MMLU、C-Eval、GSM8K 分别取得了 16%、36%、280% 的提升,并登顶中文任务榜单 C-Eval。适用于对知识量、推理能力、创造力要求较高的场景,比如广告文案、小说写作、知识类写作、代码生成等。',\n displayName: 'ChatGLM3',\n id: 'chatglm3',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n contextWindowTokens: 32_768,\n description:\n 'ChatGLM3-6b-base 是由智谱开发的 ChatGLM 系列最新一代的 60 亿参数规模的开源的基础模型。',\n displayName: 'ChatGLM3 6B Base',\n id: 'chatglm3-6b-base',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n contextWindowTokens: 4096,\n description:\n 'Llama2 是由 Meta 开发并开源的大型语言模型(LLM)系列,这是一组从 70 亿到 700 亿参数不同规模、经过预训练和微调的生成式文本模型。架构层面,LLama2 是一个使用优化型转换器架构的自动回归语言模型。调整后的版本使用有监督的微调(SFT)和带有人类反馈的强化学习(RLHF)以对齐人类对有用性和安全性的偏好。Llama2 较 Llama 系列在多种学术数据集上有着更加不俗的表现,为大量其他模型提供了设计和开发的思路。',\n displayName: 'Llama 2 7B Chat',\n id: 'llama-2-7b-chat',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n contextWindowTokens: 4096,\n description:\n 'Megrez-3B-Instruct 是由无问芯穹完全自主训练的大语言模型。Megrez-3B-Instruct 旨在通过软硬协同理念,打造一款极速推理、小巧精悍、极易上手的端侧智能解决方案。',\n displayName: 'Megrez 3B Instruct',\n id: 'megrez-3b-instruct',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n];\n\nexport const allModels = [...infiniaiChatModels];\n\nexport default allModels;\n"}}, "frontend/src/config/llm.ts": {"7e63a3e4e57d63cb021a2c074dc7b8d7447a7bf3": {"t": 1785595529.3186977, "n": 11844, "h": "0521d36b48ff47b8", "c": "/* eslint-disable sort-keys-fix/sort-keys-fix , typescript-sort-keys/interface */\nimport { createEnv } from '@t3-oss/env-nextjs';\nimport { z } from 'zod';\n\nexport const getLLMConfig = () => {\n return createEnv({\n server: {\n API_KEY_SELECT_MODE: z.string().optional(),\n\n ENABLED_OPENAI: z.boolean(),\n OPENAI_API_KEY: z.string().optional(),\n\n ENABLED_AZURE_OPENAI: z.boolean(),\n AZURE_API_KEY: z.string().optional(),\n AZURE_API_VERSION: z.string().optional(),\n AZURE_ENDPOINT: z.string().optional(),\n\n ENABLED_AZUREAI: z.boolean(),\n AZUREAI_ENDPOINT: z.string().optional(),\n AZUREAI_ENDPOINT_KEY: z.string().optional(),\n\n ENABLED_ZHIPU: z.boolean(),\n ZHIPU_API_KEY: z.string().optional(),\n\n ENABLED_DEEPSEEK: z.boolean(),\n DEEPSEEK_API_KEY: z.string().optional(),\n\n ENABLED_GOOGLE: z.boolean(),\n GOOGLE_API_KEY: z.string().optional(),\n\n ENABLED_MOONSHOT: z.boolean(),\n MOONSHOT_API_KEY: z.string().optional(),\n\n ENABLED_PERPLEXITY: z.boolean(),\n PERPLEXITY_API_KEY: z.string().optional(),\n\n ENABLED_ANTHROPIC: z.boolean(),\n ANTHROPIC_API_KEY: z.string().optional(),\n\n ENABLED_MINIMAX: z.boolean(),\n MINIMAX_API_KEY: z.string().optional(),\n\n ENABLED_MISTRAL: z.boolean(),\n MISTRAL_API_KEY: z.string().optional(),\n\n ENABLED_GROQ: z.boolean(),\n GROQ_API_KEY: z.string().optional(),\n\n ENABLED_GITHUB: z.boolean(),\n GITHUB_TOKEN: z.string().optional(),\n\n ENABLED_OPENROUTER: z.boolean(),\n OPENROUTER_API_KEY: z.string().optional(),\n\n ENABLED_ZEROONE: z.boolean(),\n ZEROONE_API_KEY: z.string().optional(),\n\n ENABLED_TOGETHERAI: z.boolean(),\n TOGETHERAI_API_KEY: z.string().optional(),\n\n ENABLED_FIREWORKSAI: z.boolean(),\n FIREWORKSAI_API_KEY: z.string().optional(),\n\n ENABLED_AWS_BEDROCK: z.boolean(),\n AWS_REGION: z.string().optional(),\n AWS_ACCESS_KEY_ID: z.string().optional(),\n AWS_SECRET_ACCESS_KEY: z.string().optional(),\n AWS_SESSION_TOKEN: z.string().optional(),\n\n ENABLED_WENXIN: z.boolean(),\n WENXIN_API_KEY: z.string().optional(),\n\n ENABLED_OLLAMA: z.boolean(),\n\n ENABLED_VLLM: z.boolean(),\n VLLM_API_KEY: z.string().optional(),\n\n ENABLED_XINFERENCE: z.boolean(),\n XINFERENCE_API_KEY: z.string().optional(),\n\n ENABLED_QINIU: z.boolean(),\n QINIU_API_KEY: z.string().optional(),\n\n ENABLED_QWEN: z.boolean(),\n QWEN_API_KEY: z.string().optional(),\n\n ENABLED_STEPFUN: z.boolean(),\n STEPFUN_API_KEY: z.string().optional(),\n\n ENABLED_NOVITA: z.boolean(),\n NOVITA_API_KEY: z.string().optional(),\n\n ENABLED_NVIDIA: z.boolean(),\n NVIDIA_API_KEY: z.string().optional(),\n\n ENABLED_BAICHUAN: z.boolean(),\n BAICHUAN_API_KEY: z.string().optional(),\n\n ENABLED_TAICHU: z.boolean(),\n TAICHU_API_KEY: z.string().optional(),\n\n ENABLED_CLOUDFLARE: z.boolean(),\n CLOUDFLARE_API_KEY: z.string().optional(),\n CLOUDFLARE_BASE_URL_OR_ACCOUNT_ID: z.string().optional(),\n\n ENABLED_AI360: z.boolean(),\n AI360_API_KEY: z.string().optional(),\n\n ENABLED_SILICONCLOUD: z.boolean(),\n SILICONCLOUD_API_KEY: z.string().optional(),\n\n ENABLED_GITEE_AI: z.boolean(),\n GITEE_AI_API_KEY: z.string().optional(),\n\n ENABLED_UPSTAGE: z.boolean(),\n UPSTAGE_API_KEY: z.string().optional(),\n\n ENABLED_SPARK: z.boolean(),\n SPARK_API_KEY: z.string().optional(),\n\n ENABLED_AI21: z.boolean(),\n AI21_API_KEY: z.string().optional(),\n\n ENABLED_HUNYUAN: z.boolean(),\n HUNYUAN_API_KEY: z.string().optional(),\n\n ENABLED_HUGGINGFACE: z.boolean(),\n HUGGINGFACE_API_KEY: z.string().optional(),\n\n ENABLED_SENSENOVA: z.boolean(),\n SENSENOVA_API_KEY: z.string().optional(),\n\n ENABLED_XAI: z.boolean(),\n XAI_API_KEY: z.string().optional(),\n\n ENABLED_INTERNLM: z.boolean(),\n INTERNLM_API_KEY: z.string().optional(),\n\n ENABLED_HIGRESS: z.boolean(),\n HIGRESS_API_KEY: z.string().optional(),\n\n ENABLED_VOLCENGINE: z.boolean(),\n VOLCENGINE_API_KEY: z.string().optional(),\n\n ENABLED_TENCENT_CLOUD: z.boolean(),\n TENCENT_CLOUD_API_KEY: z.string().optional(),\n\n ENABLED_JINA: z.boolean(),\n JINA_API_KEY: z.string().optional(),\n\n ENABLED_SAMBANOVA: z.boolean(),\n SAMBANOVA_API_KEY: z.string().optional(),\n\n ENABLED_PPIO: z.boolean(),\n PPIO_API_KEY: z.string().optional(),\n\n ENABLED_SEARCH1API: z.boolean(),\n SEARCH1API_API_KEY: z.string().optional(),\n\n ENABLED_COHERE: z.boolean(),\n COHERE_API_KEY: z.string().optional(),\n\n ENABLED_INFINIAI: z.boolean(),\n INFINIAI_API_KEY: z.string().optional(),\n\n ENABLED_FAL: z.boolean(),\n FAL_API_KEY: z.string().optional(),\n\n ENABLED_BFL: z.boolean(),\n BFL_API_KEY: z.string().optional(),\n\n ENABLED_MODELSCOPE: z.boolean(),\n MODELSCOPE_API_KEY: z.string().optional(),\n\n ENABLED_V0: z.boolean(),\n V0_API_KEY: z.string().optional(),\n\n ENABLED_AI302: z.boolean(),\n AI302_API_KEY: z.string().optional(),\n\n ENABLED_AIHUBMIX: z.boolean(),\n AIHUBMIX_API_KEY: z.string().optional(),\n },\n runtimeEnv: {\n API_KEY_SELECT_MODE: process.env.API_KEY_SELECT_MODE,\n\n ENABLED_OPENAI: process.env.ENABLED_OPENAI !== '0',\n OPENAI_API_KEY: process.env.OPENAI_API_KEY,\n\n ENABLED_AZURE_OPENAI: !!process.env.AZURE_API_KEY,\n AZURE_API_KEY: process.env.AZURE_API_KEY,\n AZURE_API_VERSION: process.env.AZURE_API_VERSION,\n AZURE_ENDPOINT: process.env.AZURE_ENDPOINT,\n\n ENABLED_AZUREAI: !!process.env.AZUREAI_ENDPOINT_KEY,\n AZUREAI_ENDPOINT_KEY: process.env.AZUREAI_ENDPOINT_KEY,\n AZUREAI_ENDPOINT: process.env.AZUREAI_ENDPOINT,\n\n ENABLED_ZHIPU: !!process.env.ZHIPU_API_KEY,\n ZHIPU_API_KEY: process.env.ZHIPU_API_KEY,\n\n ENABLED_DEEPSEEK: !!process.env.DEEPSEEK_API_KEY,\n DEEPSEEK_API_KEY: process.env.DEEPSEEK_API_KEY,\n\n ENABLED_GOOGLE: !!process.env.GOOGLE_API_KEY,\n GOOGLE_API_KEY: process.env.GOOGLE_API_KEY,\n\n ENABLED_VOLCENGINE: !!process.env.VOLCENGINE_API_KEY,\n VOLCENGINE_API_KEY: process.env.VOLCENGINE_API_KEY,\n\n ENABLED_PERPLEXITY: !!process.env.PERPLEXITY_API_KEY,\n PERPLEXITY_API_KEY: process.env.PERPLEXITY_API_KEY,\n\n ENABLED_ANTHROPIC: !!process.env.ANTHROPIC_API_KEY,\n ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY,\n\n ENABLED_MINIMAX: !!process.env.MINIMAX_API_KEY,\n MINIMAX_API_KEY: process.env.MINIMAX_API_KEY,\n\n ENABLED_MISTRAL: !!process.env.MISTRAL_API_KEY,\n MISTRAL_API_KEY: process.env.MISTRAL_API_KEY,\n\n ENABLED_OPENROUTER: !!process.env.OPENROUTER_API_KEY,\n OPENROUTER_API_KEY: process.env.OPENROUTER_API_KEY,\n\n ENABLED_TOGETHERAI: !!process.env.TOGETHERAI_API_KEY,\n TOGETHERAI_API_KEY: process.env.TOGETHERAI_API_KEY,\n\n ENABLED_FIREWORKSAI: !!process.env.FIREWORKSAI_API_KEY,\n FIREWORKSAI_API_KEY: process.env.FIREWORKSAI_API_KEY,\n\n ENABLED_MOONSHOT: !!process.env.MOONSHOT_API_KEY,\n MOONSHOT_API_KEY: process.env.MOONSHOT_API_KEY,\n\n ENABLED_GROQ: !!process.env.GROQ_API_KEY,\n GROQ_API_KEY: process.env.GROQ_API_KEY,\n\n ENABLED_GITHUB: !!process.env.GITHUB_TOKEN,\n GITHUB_TOKEN: process.env.GITHUB_TOKEN,\n\n ENABLED_ZEROONE: !!process.env.ZEROONE_API_KEY,\n ZEROONE_API_KEY: process.env.ZEROONE_API_KEY,\n\n ENABLED_AWS_BEDROCK: process.env.ENABLED_AWS_BEDROCK === '1',\n AWS_REGION: process.env.AWS_REGION,\n AWS_ACCESS_KEY_ID: process.env.AWS_ACCESS_KEY_ID,\n AWS_SECRET_ACCESS_KEY: process.env.AWS_SECRET_ACCESS_KEY,\n AWS_SESSION_TOKEN: process.env.AWS_SESSION_TOKEN,\n\n ENABLED_WENXIN: !!process.env.WENXIN_API_KEY,\n WENXIN_API_KEY: process.env.WENXIN_API_KEY,\n\n ENABLED_OLLAMA: process.env.ENABLED_OLLAMA !== '0',\n\n ENABLED_VLLM: !!process.env.VLLM_API_KEY,\n VLLM_API_KEY: process.env.VLLM_API_KEY,\n\n ENABLED_XINFERENCE: !!process.env.XINFERENCE_API_KEY,\n XINFERENCE_API_KEY: process.env.XINFERENCE_API_KEY,\n\n ENABLED_QINIU: !!process.env.QINIU_API_KEY,\n QINIU_API_KEY: process.env.QINIU_API_KEY,\n\n ENABLED_QWEN: !!process.env.QWEN_API_KEY,\n QWEN_API_KEY: process.env.QWEN_API_KEY,\n\n ENABLED_STEPFUN: !!process.env.STEPFUN_API_KEY,\n STEPFUN_API_KEY: process.env.STEPFUN_API_KEY,\n\n ENABLED_NOVITA: !!process.env.NOVITA_API_KEY,\n NOVITA_API_KEY: process.env.NOVITA_API_KEY,\n\n ENABLED_NVIDIA: !!process.env.NVIDIA_API_KEY,\n NVIDIA_API_KEY: process.env.NVIDIA_API_KEY,\n\n ENABLED_BAICHUAN: !!process.env.BAICHUAN_API_KEY,\n BAICHUAN_API_KEY: process.env.BAICHUAN_API_KEY,\n\n ENABLED_TAICHU: !!process.env.TAICHU_API_KEY,\n TAICHU_API_KEY: process.env.TAICHU_API_KEY,\n\n ENABLED_CLOUDFLARE:\n !!process.env.CLOUDFLARE_API_KEY && !!process.env.CLOUDFLARE_BASE_URL_OR_ACCOUNT_ID,\n CLOUDFLARE_API_KEY: process.env.CLOUDFLARE_API_KEY,\n CLOUDFLARE_BASE_URL_OR_ACCOUNT_ID: process.env.CLOUDFLARE_BASE_URL_OR_ACCOUNT_ID,\n\n ENABLED_AI360: !!process.env.AI360_API_KEY,\n AI360_API_KEY: process.env.AI360_API_KEY,\n\n ENABLED_SILICONCLOUD: !!process.env.SILICONCLOUD_API_KEY,\n SILICONCLOUD_API_KEY: process.env.SILICONCLOUD_API_KEY,\n\n ENABLED_GITEE_AI: !!process.env.GITEE_AI_API_KEY,\n GITEE_AI_API_KEY: process.env.GITEE_AI_API_KEY,\n\n ENABLED_UPSTAGE: !!process.env.UPSTAGE_API_KEY,\n UPSTAGE_API_KEY: process.env.UPSTAGE_API_KEY,\n\n ENABLED_SPARK: !!process.env.SPARK_API_KEY,\n SPARK_API_KEY: process.env.SPARK_API_KEY,\n\n ENABLED_AI21: !!process.env.AI21_API_KEY,\n AI21_API_KEY: process.env.AI21_API_KEY,\n\n ENABLED_HUNYUAN: !!process.env.HUNYUAN_API_KEY,\n HUNYUAN_API_KEY: process.env.HUNYUAN_API_KEY,\n\n ENABLED_HUGGINGFACE: !!process.env.HUGGINGFACE_API_KEY,\n HUGGINGFACE_API_KEY: process.env.HUGGINGFACE_API_KEY,\n\n ENABLED_SENSENOVA: !!process.env.SENSENOVA_API_KEY,\n SENSENOVA_API_KEY: process.env.SENSENOVA_API_KEY,\n\n ENABLED_XAI: !!process.env.XAI_API_KEY,\n XAI_API_KEY: process.env.XAI_API_KEY,\n\n ENABLED_INTERNLM: !!process.env.INTERNLM_API_KEY,\n INTERNLM_API_KEY: process.env.INTERNLM_API_KEY,\n\n ENABLED_HIGRESS: !!process.env.HIGRESS_API_KEY,\n HIGRESS_API_KEY: process.env.HIGRESS_API_KEY,\n\n ENABLED_TENCENT_CLOUD: !!process.env.TENCENT_CLOUD_API_KEY,\n TENCENT_CLOUD_API_KEY: process.env.TENCENT_CLOUD_API_KEY,\n\n ENABLED_JINA: !!process.env.JINA_API_KEY,\n JINA_API_KEY: process.env.JINA_API_KEY,\n\n ENABLED_SAMBANOVA: !!process.env.SAMBANOVA_API_KEY,\n SAMBANOVA_API_KEY: process.env.SAMBANOVA_API_KEY,\n\n ENABLED_PPIO: !!process.env.PPIO_API_KEY,\n PPIO_API_KEY: process.env.PPIO_API_KEY,\n\n ENABLED_SEARCH1API: !!process.env.SEARCH1API_API_KEY,\n SEARCH1API_API_KEY: process.env.SEARCH1API_API_KEY,\n\n ENABLED_COHERE: !!process.env.COHERE_API_KEY,\n COHERE_API_KEY: process.env.COHERE_API_KEY,\n\n ENABLED_INFINIAI: !!process.env.INFINIAI_API_KEY,\n INFINIAI_API_KEY: process.env.INFINIAI_API_KEY,\n\n ENABLED_FAL: process.env.ENABLED_FAL !== '0',\n FAL_API_KEY: process.env.FAL_API_KEY,\n\n ENABLED_BFL: !!process.env.BFL_API_KEY,\n BFL_API_KEY: process.env.BFL_API_KEY,\n\n ENABLED_MODELSCOPE: !!process.env.MODELSCOPE_API_KEY,\n MODELSCOPE_API_KEY: process.env.MODELSCOPE_API_KEY,\n\n ENABLED_V0: !!process.env.V0_API_KEY,\n V0_API_KEY: process.env.V0_API_KEY,\n\n ENABLED_AI302: !!process.env.AI302_API_KEY,\n AI302_API_KEY: process.env.AI302_API_KEY,\n\n ENABLED_AIHUBMIX: !!process.env.AIHUBMIX_API_KEY,\n AIHUBMIX_API_KEY: process.env.AIHUBMIX_API_KEY,\n },\n });\n};\n\nexport const llmEnv = getLLMConfig();\n"}}, "frontend/Dockerfile": {"7e63a3e4e57d63cb021a2c074dc7b8d7447a7bf3": {"t": 1785595539.756057, "n": 8805, "h": "c125bed79b035ce9", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"22\"\n\n## Base image for all building stages\nFROM node:${NODEJS_VERSION}-slim AS base\n\nARG USE_CN_MIRROR\n\nENV DEBIAN_FRONTEND=\"noninteractive\"\n\nRUN \\\n # If you want to build docker in China, build with --build-arg USE_CN_MIRROR=true\n if [ \"${USE_CN_MIRROR:-false}\" = \"true\" ]; then \\\n sed -i \"s/deb.debian.org/mirrors.ustc.edu.cn/g\" \"/etc/apt/sources.list.d/debian.sources\"; \\\n fi \\\n # Add required package\n && apt update \\\n && apt install ca-certificates proxychains-ng -qy \\\n # Prepare required package to distroless\n && mkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib \\\n # Copy proxychains to distroless\n && cp /usr/lib/$(arch)-linux-gnu/libproxychains.so.4 /distroless/lib/libproxychains.so.4 \\\n && cp /usr/lib/$(arch)-linux-gnu/libdl.so.2 /distroless/lib/libdl.so.2 \\\n && cp /usr/bin/proxychains4 /distroless/bin/proxychains \\\n && cp /etc/proxychains4.conf /distroless/etc/proxychains4.conf \\\n # Copy node to distroless\n && cp /usr/lib/$(arch)-linux-gnu/libstdc++.so.6 /distroless/lib/libstdc++.so.6 \\\n && cp /usr/lib/$(arch)-linux-gnu/libgcc_s.so.1 /distroless/lib/libgcc_s.so.1 \\\n && cp /usr/local/bin/node /distroless/bin/node \\\n # Copy CA certificates to distroless\n && cp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt \\\n # Cleanup temp files\n && rm -rf /tmp/* /var/lib/apt/lists/* /var/tmp/*\n\n## Builder image, install all the dependencies and build the app\nFROM base AS builder\n\nARG USE_CN_MIRROR\nARG NEXT_PUBLIC_BASE_PATH\nARG NEXT_PUBLIC_SENTRY_DSN\nARG NEXT_PUBLIC_ANALYTICS_POSTHOG\nARG NEXT_PUBLIC_POSTHOG_HOST\nARG NEXT_PUBLIC_POSTHOG_KEY\nARG NEXT_PUBLIC_ANALYTICS_UMAMI\nARG NEXT_PUBLIC_UMAMI_SCRIPT_URL\nARG NEXT_PUBLIC_UMAMI_WEBSITE_ID\nARG FEATURE_FLAGS\n\nENV NEXT_PUBLIC_BASE_PATH=\"${NEXT_PUBLIC_BASE_PATH}\" \\\n FEATURE_FLAGS=\"${FEATURE_FLAGS}\"\n# Sentry\nENV NEXT_PUBLIC_SENTRY_DSN=\"${NEXT_PUBLIC_SENTRY_DSN}\" \\\n SENTRY_ORG=\"\" \\\n SENTRY_PROJECT=\"\"\n\nENV APP_URL=\"http://app.com\"\n\n# Posthog\nENV NEXT_PUBLIC_ANALYTICS_POSTHOG=\"${NEXT_PUBLIC_ANALYTICS_POSTHOG}\" \\\n NEXT_PUBLIC_POSTHOG_HOST=\"${NEXT_PUBLIC_POSTHOG_HOST}\" \\\n NEXT_PUBLIC_POSTHOG_KEY=\"${NEXT_PUBLIC_POSTHOG_KEY}\"\n\n# Umami\nENV NEXT_PUBLIC_ANALYTICS_UMAMI=\"${NEXT_PUBLIC_ANALYTICS_UMAMI}\" \\\n NEXT_PUBLIC_UMAMI_SCRIPT_URL=\"${NEXT_PUBLIC_UMAMI_SCRIPT_URL}\" \\\n NEXT_PUBLIC_UMAMI_WEBSITE_ID=\"${NEXT_PUBLIC_UMAMI_WEBSITE_ID}\"\n\n# Node\nENV NODE_OPTIONS=\"--max-old-space-size=8192\"\n\nWORKDIR /app\n\nCOPY package.json pnpm-workspace.yaml ./\nCOPY .npmrc ./\nCOPY packages ./packages\n\nRUN \\\n # If you want to build docker in China, build with --build-arg USE_CN_MIRROR=true\n if [ \"${USE_CN_MIRROR:-false}\" = \"true\" ]; then \\\n export SENTRYCLI_CDNURL=\"https://npmmirror.com/mirrors/sentry-cli\"; \\\n npm config set registry \"https://registry.npmmirror.com/\"; \\\n echo 'canvas_binary_host_mirror=https://npmmirror.com/mirrors/canvas' >> .npmrc; \\\n fi \\\n # Set the registry for corepack\n && export COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\\/$//') \\\n # Update corepack to latest (nodejs/corepack#612)\n && npm i -g corepack@latest \\\n # Enable corepack\n && corepack enable \\\n # Use pnpm for corepack\n && corepack use $(sed -n 's/.*\"packageManager\": \"\\(.*\\)\".*/\\1/p' package.json) \\\n # Install the dependencies\n && pnpm i\n\nCOPY . .\n\n# run build standalone for docker version\nRUN npm run build:docker\n\n## Application image, copy all the files for production\nFROM busybox:latest AS app\n\nCOPY --from=base /distroless/ /\n\n# Automatically leverage output traces to reduce image size\n# https://nextjs.org/docs/advanced-features/output-file-tracing\nCOPY --from=builder /app/.next/standalone /app/\n\n# Copy server launcher\nCOPY --from=builder /app/scripts/serverLauncher/startServer.js /app/startServer.js\n\nRUN \\\n # Add nextjs:nodejs to run the app\n addgroup -S -g 1001 nodejs \\\n && adduser -D -G nodejs -H -S -h /app -u 1001 nextjs \\\n # Set permission for nextjs:nodejs\n && chown -R nextjs:nodejs /app /etc/proxychains4.conf\n\n## Production image, copy all the files and run next\nFROM scratch\n\n# Copy all the files from app, set the correct permission for prerender cache\nCOPY --from=app / /\n\nENV NODE_ENV=\"production\" \\\n NODE_OPTIONS=\"--dns-result-order=ipv4first --use-openssl-ca\" \\\n NODE_EXTRA_CA_CERTS=\"\" \\\n NODE_TLS_REJECT_UNAUTHORIZED=\"\" \\\n SSL_CERT_DIR=\"/etc/ssl/certs/ca-certificates.crt\"\n\n# Make the middleware rewrite through local as default\n# refs: https://github.com/lobehub/lobe-chat/issues/5876\nENV MIDDLEWARE_REWRITE_THROUGH_LOCAL=\"1\"\n\n# set hostname to localhost\nENV HOSTNAME=\"0.0.0.0\" \\\n PORT=\"3210\"\n\n# General Variables\nENV ACCESS_CODE=\"\" \\\n API_KEY_SELECT_MODE=\"\" \\\n DEFAULT_AGENT_CONFIG=\"\" \\\n SYSTEM_AGENT=\"\" \\\n FEATURE_FLAGS=\"\" \\\n PROXY_URL=\"\"\n\n# Model Variables\nENV \\\n # AI21\n AI21_API_KEY=\"\" AI21_MODEL_LIST=\"\" \\\n # Ai360\n AI360_API_KEY=\"\" AI360_MODEL_LIST=\"\" \\\n # AiHubMix\n AIHUBMIX_API_KEY=\"\" AIHUBMIX_MODEL_LIST=\"\" \\\n # Anthropic\n ANTHROPIC_API_KEY=\"\" ANTHROPIC_MODEL_LIST=\"\" ANTHROPIC_PROXY_URL=\"\" \\\n # Amazon Bedrock\n AWS_ACCESS_KEY_ID=\"\" AWS_SECRET_ACCESS_KEY=\"\" AWS_REGION=\"\" AWS_BEDROCK_MODEL_LIST=\"\" \\\n # Azure OpenAI\n AZURE_API_KEY=\"\" AZURE_API_VERSION=\"\" AZURE_ENDPOINT=\"\" AZURE_MODEL_LIST=\"\" \\\n # Baichuan\n BAICHUAN_API_KEY=\"\" BAICHUAN_MODEL_LIST=\"\" \\\n # Cloudflare\n CLOUDFLARE_API_KEY=\"\" CLOUDFLARE_BASE_URL_OR_ACCOUNT_ID=\"\" CLOUDFLARE_MODEL_LIST=\"\" \\\n # Cohere\n COHERE_API_KEY=\"\" COHERE_MODEL_LIST=\"\" COHERE_PROXY_URL=\"\" \\\n # DeepSeek\n DEEPSEEK_API_KEY=\"\" DEEPSEEK_MODEL_LIST=\"\" \\\n # Fireworks AI\n FIREWORKSAI_API_KEY=\"\" FIREWORKSAI_MODEL_LIST=\"\" \\\n # Gitee AI\n GITEE_AI_API_KEY=\"\" GITEE_AI_MODEL_LIST=\"\" \\\n # GitHub\n GITHUB_TOKEN=\"\" GITHUB_MODEL_LIST=\"\" \\\n # Google\n GOOGLE_API_KEY=\"\" GOOGLE_MODEL_LIST=\"\" GOOGLE_PROXY_URL=\"\" \\\n # Groq\n GROQ_API_KEY=\"\" GROQ_MODEL_LIST=\"\" GROQ_PROXY_URL=\"\" \\\n # Higress\n HIGRESS_API_KEY=\"\" HIGRESS_MODEL_LIST=\"\" HIGRESS_PROXY_URL=\"\" \\\n # HuggingFace\n HUGGINGFACE_API_KEY=\"\" HUGGINGFACE_MODEL_LIST=\"\" HUGGINGFACE_PROXY_URL=\"\" \\\n # Hunyuan\n HUNYUAN_API_KEY=\"\" HUNYUAN_MODEL_LIST=\"\" \\\n # InternLM\n INTERNLM_API_KEY=\"\" INTERNLM_MODEL_LIST=\"\" \\\n # Jina\n JINA_API_KEY=\"\" JINA_MODEL_LIST=\"\" JINA_PROXY_URL=\"\" \\\n # Minimax\n MINIMAX_API_KEY=\"\" MINIMAX_MODEL_LIST=\"\" \\\n # Mistral\n MISTRAL_API_KEY=\"\" MISTRAL_MODEL_LIST=\"\" \\\n # ModelScope\n MODELSCOPE_API_KEY=\"\" MODELSCOPE_MODEL_LIST=\"\" MODELSCOPE_PROXY_URL=\"\" \\\n # Moonshot\n MOONSHOT_API_KEY=\"\" MOONSHOT_MODEL_LIST=\"\" MOONSHOT_PROXY_URL=\"\" \\\n # Novita\n NOVITA_API_KEY=\"\" NOVITA_MODEL_LIST=\"\" \\\n # Nvidia NIM\n NVIDIA_API_KEY=\"\" NVIDIA_MODEL_LIST=\"\" NVIDIA_PROXY_URL=\"\" \\\n # Ollama\n ENABLED_OLLAMA=\"\" OLLAMA_MODEL_LIST=\"\" OLLAMA_PROXY_URL=\"\" \\\n # OpenAI\n OPENAI_API_KEY=\"\" OPENAI_MODEL_LIST=\"\" OPENAI_PROXY_URL=\"\" \\\n # OpenRouter\n OPENROUTER_API_KEY=\"\" OPENROUTER_MODEL_LIST=\"\" \\\n # Perplexity\n PERPLEXITY_API_KEY=\"\" PERPLEXITY_MODEL_LIST=\"\" PERPLEXITY_PROXY_URL=\"\" \\\n # PPIO\n PPIO_API_KEY=\"\" PPIO_MODEL_LIST=\"\" \\\n # Qiniu\n QINIU_API_KEY=\"\" QINIU_MODEL_LIST=\"\" QINIU_PROXY_URL=\"\" \\\n # Qwen\n QWEN_API_KEY=\"\" QWEN_MODEL_LIST=\"\" QWEN_PROXY_URL=\"\" \\\n # SambaNova\n SAMBANOVA_API_KEY=\"\" SAMBANOVA_MODEL_LIST=\"\" \\\n # Search1API\n SEARCH1API_API_KEY=\"\" SEARCH1API_MODEL_LIST=\"\" \\\n # SenseNova\n SENSENOVA_API_KEY=\"\" SENSENOVA_MODEL_LIST=\"\" \\\n # SiliconCloud\n SILICONCLOUD_API_KEY=\"\" SILICONCLOUD_MODEL_LIST=\"\" SILICONCLOUD_PROXY_URL=\"\" \\\n # Spark\n SPARK_API_KEY=\"\" SPARK_MODEL_LIST=\"\" SPARK_PROXY_URL=\"\" SPARK_SEARCH_MODE=\"\" \\\n # Stepfun\n STEPFUN_API_KEY=\"\" STEPFUN_MODEL_LIST=\"\" \\\n # Taichu\n TAICHU_API_KEY=\"\" TAICHU_MODEL_LIST=\"\" \\\n # TogetherAI\n TOGETHERAI_API_KEY=\"\" TOGETHERAI_MODEL_LIST=\"\" \\\n # Upstage\n UPSTAGE_API_KEY=\"\" UPSTAGE_MODEL_LIST=\"\" \\\n # v0 (Vercel)\n V0_API_KEY=\"\" V0_MODEL_LIST=\"\" \\\n # vLLM\n VLLM_API_KEY=\"\" VLLM_MODEL_LIST=\"\" VLLM_PROXY_URL=\"\" \\\n # Wenxin\n WENXIN_API_KEY=\"\" WENXIN_MODEL_LIST=\"\" \\\n # xAI\n XAI_API_KEY=\"\" XAI_MODEL_LIST=\"\" XAI_PROXY_URL=\"\" \\\n # Xinference\n XINFERENCE_API_KEY=\"\" XINFERENCE_MODEL_LIST=\"\" XINFERENCE_PROXY_URL=\"\" \\\n # 01.AI\n ZEROONE_API_KEY=\"\" ZEROONE_MODEL_LIST=\"\" \\\n # Zhipu\n ZHIPU_API_KEY=\"\" ZHIPU_MODEL_LIST=\"\" \\\n # Tencent Cloud\n TENCENT_CLOUD_API_KEY=\"\" TENCENT_CLOUD_MODEL_LIST=\"\" \\\n # Infini-AI\n INFINIAI_API_KEY=\"\" INFINIAI_MODEL_LIST=\"\" \\\n # 302.AI\n AI302_API_KEY=\"\" AI302_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "110d090f803a54543dbb5e46ca1a724c121cc6d8": {"t": 1785761366.3247383, "n": 8805, "h": "c125bed79b035ce9", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"22\"\n\n## Base image for all building stages\nFROM node:${NODEJS_VERSION}-slim AS base\n\nARG USE_CN_MIRROR\n\nENV DEBIAN_FRONTEND=\"noninteractive\"\n\nRUN \\\n # If you want to build docker in China, build with --build-arg USE_CN_MIRROR=true\n if [ \"${USE_CN_MIRROR:-false}\" = \"true\" ]; then \\\n sed -i \"s/deb.debian.org/mirrors.ustc.edu.cn/g\" \"/etc/apt/sources.list.d/debian.sources\"; \\\n fi \\\n # Add required package\n && apt update \\\n && apt install ca-certificates proxychains-ng -qy \\\n # Prepare required package to distroless\n && mkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib \\\n # Copy proxychains to distroless\n && cp /usr/lib/$(arch)-linux-gnu/libproxychains.so.4 /distroless/lib/libproxychains.so.4 \\\n && cp /usr/lib/$(arch)-linux-gnu/libdl.so.2 /distroless/lib/libdl.so.2 \\\n && cp /usr/bin/proxychains4 /distroless/bin/proxychains \\\n && cp /etc/proxychains4.conf /distroless/etc/proxychains4.conf \\\n # Copy node to distroless\n && cp /usr/lib/$(arch)-linux-gnu/libstdc++.so.6 /distroless/lib/libstdc++.so.6 \\\n && cp /usr/lib/$(arch)-linux-gnu/libgcc_s.so.1 /distroless/lib/libgcc_s.so.1 \\\n && cp /usr/local/bin/node /distroless/bin/node \\\n # Copy CA certificates to distroless\n && cp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt \\\n # Cleanup temp files\n && rm -rf /tmp/* /var/lib/apt/lists/* /var/tmp/*\n\n## Builder image, install all the dependencies and build the app\nFROM base AS builder\n\nARG USE_CN_MIRROR\nARG NEXT_PUBLIC_BASE_PATH\nARG NEXT_PUBLIC_SENTRY_DSN\nARG NEXT_PUBLIC_ANALYTICS_POSTHOG\nARG NEXT_PUBLIC_POSTHOG_HOST\nARG NEXT_PUBLIC_POSTHOG_KEY\nARG NEXT_PUBLIC_ANALYTICS_UMAMI\nARG NEXT_PUBLIC_UMAMI_SCRIPT_URL\nARG NEXT_PUBLIC_UMAMI_WEBSITE_ID\nARG FEATURE_FLAGS\n\nENV NEXT_PUBLIC_BASE_PATH=\"${NEXT_PUBLIC_BASE_PATH}\" \\\n FEATURE_FLAGS=\"${FEATURE_FLAGS}\"\n# Sentry\nENV NEXT_PUBLIC_SENTRY_DSN=\"${NEXT_PUBLIC_SENTRY_DSN}\" \\\n SENTRY_ORG=\"\" \\\n SENTRY_PROJECT=\"\"\n\nENV APP_URL=\"http://app.com\"\n\n# Posthog\nENV NEXT_PUBLIC_ANALYTICS_POSTHOG=\"${NEXT_PUBLIC_ANALYTICS_POSTHOG}\" \\\n NEXT_PUBLIC_POSTHOG_HOST=\"${NEXT_PUBLIC_POSTHOG_HOST}\" \\\n NEXT_PUBLIC_POSTHOG_KEY=\"${NEXT_PUBLIC_POSTHOG_KEY}\"\n\n# Umami\nENV NEXT_PUBLIC_ANALYTICS_UMAMI=\"${NEXT_PUBLIC_ANALYTICS_UMAMI}\" \\\n NEXT_PUBLIC_UMAMI_SCRIPT_URL=\"${NEXT_PUBLIC_UMAMI_SCRIPT_URL}\" \\\n NEXT_PUBLIC_UMAMI_WEBSITE_ID=\"${NEXT_PUBLIC_UMAMI_WEBSITE_ID}\"\n\n# Node\nENV NODE_OPTIONS=\"--max-old-space-size=8192\"\n\nWORKDIR /app\n\nCOPY package.json pnpm-workspace.yaml ./\nCOPY .npmrc ./\nCOPY packages ./packages\n\nRUN \\\n # If you want to build docker in China, build with --build-arg USE_CN_MIRROR=true\n if [ \"${USE_CN_MIRROR:-false}\" = \"true\" ]; then \\\n export SENTRYCLI_CDNURL=\"https://npmmirror.com/mirrors/sentry-cli\"; \\\n npm config set registry \"https://registry.npmmirror.com/\"; \\\n echo 'canvas_binary_host_mirror=https://npmmirror.com/mirrors/canvas' >> .npmrc; \\\n fi \\\n # Set the registry for corepack\n && export COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\\/$//') \\\n # Update corepack to latest (nodejs/corepack#612)\n && npm i -g corepack@latest \\\n # Enable corepack\n && corepack enable \\\n # Use pnpm for corepack\n && corepack use $(sed -n 's/.*\"packageManager\": \"\\(.*\\)\".*/\\1/p' package.json) \\\n # Install the dependencies\n && pnpm i\n\nCOPY . .\n\n# run build standalone for docker version\nRUN npm run build:docker\n\n## Application image, copy all the files for production\nFROM busybox:latest AS app\n\nCOPY --from=base /distroless/ /\n\n# Automatically leverage output traces to reduce image size\n# https://nextjs.org/docs/advanced-features/output-file-tracing\nCOPY --from=builder /app/.next/standalone /app/\n\n# Copy server launcher\nCOPY --from=builder /app/scripts/serverLauncher/startServer.js /app/startServer.js\n\nRUN \\\n # Add nextjs:nodejs to run the app\n addgroup -S -g 1001 nodejs \\\n && adduser -D -G nodejs -H -S -h /app -u 1001 nextjs \\\n # Set permission for nextjs:nodejs\n && chown -R nextjs:nodejs /app /etc/proxychains4.conf\n\n## Production image, copy all the files and run next\nFROM scratch\n\n# Copy all the files from app, set the correct permission for prerender cache\nCOPY --from=app / /\n\nENV NODE_ENV=\"production\" \\\n NODE_OPTIONS=\"--dns-result-order=ipv4first --use-openssl-ca\" \\\n NODE_EXTRA_CA_CERTS=\"\" \\\n NODE_TLS_REJECT_UNAUTHORIZED=\"\" \\\n SSL_CERT_DIR=\"/etc/ssl/certs/ca-certificates.crt\"\n\n# Make the middleware rewrite through local as default\n# refs: https://github.com/lobehub/lobe-chat/issues/5876\nENV MIDDLEWARE_REWRITE_THROUGH_LOCAL=\"1\"\n\n# set hostname to localhost\nENV HOSTNAME=\"0.0.0.0\" \\\n PORT=\"3210\"\n\n# General Variables\nENV ACCESS_CODE=\"\" \\\n API_KEY_SELECT_MODE=\"\" \\\n DEFAULT_AGENT_CONFIG=\"\" \\\n SYSTEM_AGENT=\"\" \\\n FEATURE_FLAGS=\"\" \\\n PROXY_URL=\"\"\n\n# Model Variables\nENV \\\n # AI21\n AI21_API_KEY=\"\" AI21_MODEL_LIST=\"\" \\\n # Ai360\n AI360_API_KEY=\"\" AI360_MODEL_LIST=\"\" \\\n # AiHubMix\n AIHUBMIX_API_KEY=\"\" AIHUBMIX_MODEL_LIST=\"\" \\\n # Anthropic\n ANTHROPIC_API_KEY=\"\" ANTHROPIC_MODEL_LIST=\"\" ANTHROPIC_PROXY_URL=\"\" \\\n # Amazon Bedrock\n AWS_ACCESS_KEY_ID=\"\" AWS_SECRET_ACCESS_KEY=\"\" AWS_REGION=\"\" AWS_BEDROCK_MODEL_LIST=\"\" \\\n # Azure OpenAI\n AZURE_API_KEY=\"\" AZURE_API_VERSION=\"\" AZURE_ENDPOINT=\"\" AZURE_MODEL_LIST=\"\" \\\n # Baichuan\n BAICHUAN_API_KEY=\"\" BAICHUAN_MODEL_LIST=\"\" \\\n # Cloudflare\n CLOUDFLARE_API_KEY=\"\" CLOUDFLARE_BASE_URL_OR_ACCOUNT_ID=\"\" CLOUDFLARE_MODEL_LIST=\"\" \\\n # Cohere\n COHERE_API_KEY=\"\" COHERE_MODEL_LIST=\"\" COHERE_PROXY_URL=\"\" \\\n # DeepSeek\n DEEPSEEK_API_KEY=\"\" DEEPSEEK_MODEL_LIST=\"\" \\\n # Fireworks AI\n FIREWORKSAI_API_KEY=\"\" FIREWORKSAI_MODEL_LIST=\"\" \\\n # Gitee AI\n GITEE_AI_API_KEY=\"\" GITEE_AI_MODEL_LIST=\"\" \\\n # GitHub\n GITHUB_TOKEN=\"\" GITHUB_MODEL_LIST=\"\" \\\n # Google\n GOOGLE_API_KEY=\"\" GOOGLE_MODEL_LIST=\"\" GOOGLE_PROXY_URL=\"\" \\\n # Groq\n GROQ_API_KEY=\"\" GROQ_MODEL_LIST=\"\" GROQ_PROXY_URL=\"\" \\\n # Higress\n HIGRESS_API_KEY=\"\" HIGRESS_MODEL_LIST=\"\" HIGRESS_PROXY_URL=\"\" \\\n # HuggingFace\n HUGGINGFACE_API_KEY=\"\" HUGGINGFACE_MODEL_LIST=\"\" HUGGINGFACE_PROXY_URL=\"\" \\\n # Hunyuan\n HUNYUAN_API_KEY=\"\" HUNYUAN_MODEL_LIST=\"\" \\\n # InternLM\n INTERNLM_API_KEY=\"\" INTERNLM_MODEL_LIST=\"\" \\\n # Jina\n JINA_API_KEY=\"\" JINA_MODEL_LIST=\"\" JINA_PROXY_URL=\"\" \\\n # Minimax\n MINIMAX_API_KEY=\"\" MINIMAX_MODEL_LIST=\"\" \\\n # Mistral\n MISTRAL_API_KEY=\"\" MISTRAL_MODEL_LIST=\"\" \\\n # ModelScope\n MODELSCOPE_API_KEY=\"\" MODELSCOPE_MODEL_LIST=\"\" MODELSCOPE_PROXY_URL=\"\" \\\n # Moonshot\n MOONSHOT_API_KEY=\"\" MOONSHOT_MODEL_LIST=\"\" MOONSHOT_PROXY_URL=\"\" \\\n # Novita\n NOVITA_API_KEY=\"\" NOVITA_MODEL_LIST=\"\" \\\n # Nvidia NIM\n NVIDIA_API_KEY=\"\" NVIDIA_MODEL_LIST=\"\" NVIDIA_PROXY_URL=\"\" \\\n # Ollama\n ENABLED_OLLAMA=\"\" OLLAMA_MODEL_LIST=\"\" OLLAMA_PROXY_URL=\"\" \\\n # OpenAI\n OPENAI_API_KEY=\"\" OPENAI_MODEL_LIST=\"\" OPENAI_PROXY_URL=\"\" \\\n # OpenRouter\n OPENROUTER_API_KEY=\"\" OPENROUTER_MODEL_LIST=\"\" \\\n # Perplexity\n PERPLEXITY_API_KEY=\"\" PERPLEXITY_MODEL_LIST=\"\" PERPLEXITY_PROXY_URL=\"\" \\\n # PPIO\n PPIO_API_KEY=\"\" PPIO_MODEL_LIST=\"\" \\\n # Qiniu\n QINIU_API_KEY=\"\" QINIU_MODEL_LIST=\"\" QINIU_PROXY_URL=\"\" \\\n # Qwen\n QWEN_API_KEY=\"\" QWEN_MODEL_LIST=\"\" QWEN_PROXY_URL=\"\" \\\n # SambaNova\n SAMBANOVA_API_KEY=\"\" SAMBANOVA_MODEL_LIST=\"\" \\\n # Search1API\n SEARCH1API_API_KEY=\"\" SEARCH1API_MODEL_LIST=\"\" \\\n # SenseNova\n SENSENOVA_API_KEY=\"\" SENSENOVA_MODEL_LIST=\"\" \\\n # SiliconCloud\n SILICONCLOUD_API_KEY=\"\" SILICONCLOUD_MODEL_LIST=\"\" SILICONCLOUD_PROXY_URL=\"\" \\\n # Spark\n SPARK_API_KEY=\"\" SPARK_MODEL_LIST=\"\" SPARK_PROXY_URL=\"\" SPARK_SEARCH_MODE=\"\" \\\n # Stepfun\n STEPFUN_API_KEY=\"\" STEPFUN_MODEL_LIST=\"\" \\\n # Taichu\n TAICHU_API_KEY=\"\" TAICHU_MODEL_LIST=\"\" \\\n # TogetherAI\n TOGETHERAI_API_KEY=\"\" TOGETHERAI_MODEL_LIST=\"\" \\\n # Upstage\n UPSTAGE_API_KEY=\"\" UPSTAGE_MODEL_LIST=\"\" \\\n # v0 (Vercel)\n V0_API_KEY=\"\" V0_MODEL_LIST=\"\" \\\n # vLLM\n VLLM_API_KEY=\"\" VLLM_MODEL_LIST=\"\" VLLM_PROXY_URL=\"\" \\\n # Wenxin\n WENXIN_API_KEY=\"\" WENXIN_MODEL_LIST=\"\" \\\n # xAI\n XAI_API_KEY=\"\" XAI_MODEL_LIST=\"\" XAI_PROXY_URL=\"\" \\\n # Xinference\n XINFERENCE_API_KEY=\"\" XINFERENCE_MODEL_LIST=\"\" XINFERENCE_PROXY_URL=\"\" \\\n # 01.AI\n ZEROONE_API_KEY=\"\" ZEROONE_MODEL_LIST=\"\" \\\n # Zhipu\n ZHIPU_API_KEY=\"\" ZHIPU_MODEL_LIST=\"\" \\\n # Tencent Cloud\n TENCENT_CLOUD_API_KEY=\"\" TENCENT_CLOUD_MODEL_LIST=\"\" \\\n # Infini-AI\n INFINIAI_API_KEY=\"\" INFINIAI_MODEL_LIST=\"\" \\\n # 302.AI\n AI302_API_KEY=\"\" AI302_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}}, "frontend/Dockerfile.pglite": {"7e63a3e4e57d63cb021a2c074dc7b8d7447a7bf3": {"t": 1785595557.7448356, "n": 8719, "h": "087d080f5aeccad4", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"22\"\n\n## Base image for all building stages\nFROM node:${NODEJS_VERSION}-slim AS base\n\nARG USE_CN_MIRROR\n\nENV DEBIAN_FRONTEND=\"noninteractive\"\n\nRUN \\\n # If you want to build docker in China, build with --build-arg USE_CN_MIRROR=true\n if [ \"${USE_CN_MIRROR:-false}\" = \"true\" ]; then \\\n sed -i \"s/deb.debian.org/mirrors.ustc.edu.cn/g\" \"/etc/apt/sources.list.d/debian.sources\"; \\\n fi \\\n # Add required package\n && apt update \\\n && apt install ca-certificates proxychains-ng -qy \\\n # Prepare required package to distroless\n && mkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib \\\n # Copy proxychains to distroless\n && cp /usr/lib/$(arch)-linux-gnu/libproxychains.so.4 /distroless/lib/libproxychains.so.4 \\\n && cp /usr/lib/$(arch)-linux-gnu/libdl.so.2 /distroless/lib/libdl.so.2 \\\n && cp /usr/bin/proxychains4 /distroless/bin/proxychains \\\n && cp /etc/proxychains4.conf /distroless/etc/proxychains4.conf \\\n # Copy node to distroless\n && cp /usr/lib/$(arch)-linux-gnu/libstdc++.so.6 /distroless/lib/libstdc++.so.6 \\\n && cp /usr/lib/$(arch)-linux-gnu/libgcc_s.so.1 /distroless/lib/libgcc_s.so.1 \\\n && cp /usr/local/bin/node /distroless/bin/node \\\n # Copy CA certificates to distroless\n && cp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt \\\n # Cleanup temp files\n && rm -rf /tmp/* /var/lib/apt/lists/* /var/tmp/*\n\n## Builder image, install all the dependencies and build the app\nFROM base AS builder\n\nARG USE_CN_MIRROR\nARG NEXT_PUBLIC_BASE_PATH\nARG NEXT_PUBLIC_SENTRY_DSN\nARG NEXT_PUBLIC_ANALYTICS_POSTHOG\nARG NEXT_PUBLIC_POSTHOG_HOST\nARG NEXT_PUBLIC_POSTHOG_KEY\nARG NEXT_PUBLIC_ANALYTICS_UMAMI\nARG NEXT_PUBLIC_UMAMI_SCRIPT_URL\nARG NEXT_PUBLIC_UMAMI_WEBSITE_ID\nARG FEATURE_FLAGS\n\nENV NEXT_PUBLIC_CLIENT_DB=\"pglite\"\nENV NEXT_PUBLIC_BASE_PATH=\"${NEXT_PUBLIC_BASE_PATH}\" \\\n FEATURE_FLAGS=\"${FEATURE_FLAGS}\"\n\n# Sentry\nENV NEXT_PUBLIC_SENTRY_DSN=\"${NEXT_PUBLIC_SENTRY_DSN}\" \\\n SENTRY_ORG=\"\" \\\n SENTRY_PROJECT=\"\"\n\nENV APP_URL=\"http://app.com\"\n\n# Posthog\nENV NEXT_PUBLIC_ANALYTICS_POSTHOG=\"${NEXT_PUBLIC_ANALYTICS_POSTHOG}\" \\\n NEXT_PUBLIC_POSTHOG_HOST=\"${NEXT_PUBLIC_POSTHOG_HOST}\" \\\n NEXT_PUBLIC_POSTHOG_KEY=\"${NEXT_PUBLIC_POSTHOG_KEY}\"\n\n# Umami\nENV NEXT_PUBLIC_ANALYTICS_UMAMI=\"${NEXT_PUBLIC_ANALYTICS_UMAMI}\" \\\n NEXT_PUBLIC_UMAMI_SCRIPT_URL=\"${NEXT_PUBLIC_UMAMI_SCRIPT_URL}\" \\\n NEXT_PUBLIC_UMAMI_WEBSITE_ID=\"${NEXT_PUBLIC_UMAMI_WEBSITE_ID}\"\n\n# Node\nENV NODE_OPTIONS=\"--max-old-space-size=8192\"\n\nWORKDIR /app\n\nCOPY package.json pnpm-workspace.yaml ./\nCOPY .npmrc ./\nCOPY packages ./packages\n\nRUN \\\n # If you want to build docker in China, build with --build-arg USE_CN_MIRROR=true\n if [ \"${USE_CN_MIRROR:-false}\" = \"true\" ]; then \\\n export SENTRYCLI_CDNURL=\"https://npmmirror.com/mirrors/sentry-cli\"; \\\n npm config set registry \"https://registry.npmmirror.com/\"; \\\n echo 'canvas_binary_host_mirror=https://npmmirror.com/mirrors/canvas' >> .npmrc; \\\n fi \\\n # Set the registry for corepack\n && export COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\\/$//') \\\n # Update corepack to latest (nodejs/corepack#612)\n && npm i -g corepack@latest \\\n # Enable corepack\n && corepack enable \\\n # Use pnpm for corepack\n && corepack use $(sed -n 's/.*\"packageManager\": \"\\(.*\\)\".*/\\1/p' package.json) \\\n # Install the dependencies\n && pnpm i\n\nCOPY . .\n\n# run build standalone for docker version\nRUN npm run build:docker\n\n## Application image, copy all the files for production\nFROM busybox:latest AS app\n\nCOPY --from=base /distroless/ /\n\n# Automatically leverage output traces to reduce image size\n# https://nextjs.org/docs/advanced-features/output-file-tracing\nCOPY --from=builder /app/.next/standalone /app/\n\n# Copy server launcher\nCOPY --from=builder /app/scripts/serverLauncher/startServer.js /app/startServer.js\n\nRUN \\\n # Add nextjs:nodejs to run the app\n addgroup -S -g 1001 nodejs \\\n && adduser -D -G nodejs -H -S -h /app -u 1001 nextjs \\\n # Set permission for nextjs:nodejs\n && chown -R nextjs:nodejs /app /etc/proxychains4.conf\n\n## Production image, copy all the files and run next\nFROM scratch\n\n# Copy all the files from app, set the correct permission for prerender cache\nCOPY --from=app / /\n\nENV NODE_ENV=\"production\" \\\n NODE_OPTIONS=\"--dns-result-order=ipv4first --use-openssl-ca\" \\\n NODE_EXTRA_CA_CERTS=\"\" \\\n NODE_TLS_REJECT_UNAUTHORIZED=\"\" \\\n SSL_CERT_DIR=\"/etc/ssl/certs/ca-certificates.crt\"\n\n# Make the middleware rewrite through local as default\n# refs: https://github.com/lobehub/lobe-chat/issues/5876\nENV MIDDLEWARE_REWRITE_THROUGH_LOCAL=\"1\"\n\n# set hostname to localhost\nENV HOSTNAME=\"0.0.0.0\" \\\n PORT=\"3210\"\n\n# General Variables\nENV ACCESS_CODE=\"\" \\\n API_KEY_SELECT_MODE=\"\" \\\n DEFAULT_AGENT_CONFIG=\"\" \\\n SYSTEM_AGENT=\"\" \\\n FEATURE_FLAGS=\"\" \\\n PROXY_URL=\"\"\n\n# Model Variables\nENV \\\n # AI21\n AI21_API_KEY=\"\" AI21_MODEL_LIST=\"\" \\\n # Ai360\n AI360_API_KEY=\"\" AI360_MODEL_LIST=\"\" \\\n # AiHubMix\n AIHUBMIX_API_KEY=\"\" AIHUBMIX_MODEL_LIST=\"\" \\\n # Anthropic\n ANTHROPIC_API_KEY=\"\" ANTHROPIC_MODEL_LIST=\"\" ANTHROPIC_PROXY_URL=\"\" \\\n # Amazon Bedrock\n AWS_ACCESS_KEY_ID=\"\" AWS_SECRET_ACCESS_KEY=\"\" AWS_REGION=\"\" AWS_BEDROCK_MODEL_LIST=\"\" \\\n # Azure OpenAI\n AZURE_API_KEY=\"\" AZURE_API_VERSION=\"\" AZURE_ENDPOINT=\"\" AZURE_MODEL_LIST=\"\" \\\n # Baichuan\n BAICHUAN_API_KEY=\"\" BAICHUAN_MODEL_LIST=\"\" \\\n # Cloudflare\n CLOUDFLARE_API_KEY=\"\" CLOUDFLARE_BASE_URL_OR_ACCOUNT_ID=\"\" CLOUDFLARE_MODEL_LIST=\"\" \\\n # Cohere\n COHERE_API_KEY=\"\" COHERE_MODEL_LIST=\"\" COHERE_PROXY_URL=\"\" \\\n # DeepSeek\n DEEPSEEK_API_KEY=\"\" DEEPSEEK_MODEL_LIST=\"\" \\\n # Fireworks AI\n FIREWORKSAI_API_KEY=\"\" FIREWORKSAI_MODEL_LIST=\"\" \\\n # Gitee AI\n GITEE_AI_API_KEY=\"\" GITEE_AI_MODEL_LIST=\"\" \\\n # GitHub\n GITHUB_TOKEN=\"\" GITHUB_MODEL_LIST=\"\" \\\n # Google\n GOOGLE_API_KEY=\"\" GOOGLE_MODEL_LIST=\"\" GOOGLE_PROXY_URL=\"\" \\\n # Groq\n GROQ_API_KEY=\"\" GROQ_MODEL_LIST=\"\" GROQ_PROXY_URL=\"\" \\\n # Higress\n HIGRESS_API_KEY=\"\" HIGRESS_MODEL_LIST=\"\" HIGRESS_PROXY_URL=\"\" \\\n # HuggingFace\n HUGGINGFACE_API_KEY=\"\" HUGGINGFACE_MODEL_LIST=\"\" HUGGINGFACE_PROXY_URL=\"\" \\\n # Hunyuan\n HUNYUAN_API_KEY=\"\" HUNYUAN_MODEL_LIST=\"\" \\\n # InternLM\n INTERNLM_API_KEY=\"\" INTERNLM_MODEL_LIST=\"\" \\\n # Jina\n JINA_API_KEY=\"\" JINA_MODEL_LIST=\"\" JINA_PROXY_URL=\"\" \\\n # Minimax\n MINIMAX_API_KEY=\"\" MINIMAX_MODEL_LIST=\"\" \\\n # Mistral\n MISTRAL_API_KEY=\"\" MISTRAL_MODEL_LIST=\"\" \\\n # ModelScope\n MODELSCOPE_API_KEY=\"\" MODELSCOPE_MODEL_LIST=\"\" MODELSCOPE_PROXY_URL=\"\" \\\n # Moonshot\n MOONSHOT_API_KEY=\"\" MOONSHOT_MODEL_LIST=\"\" MOONSHOT_PROXY_URL=\"\" \\\n # Novita\n NOVITA_API_KEY=\"\" NOVITA_MODEL_LIST=\"\" \\\n # Nvidia NIM\n NVIDIA_API_KEY=\"\" NVIDIA_MODEL_LIST=\"\" NVIDIA_PROXY_URL=\"\" \\\n # Ollama\n ENABLED_OLLAMA=\"\" OLLAMA_MODEL_LIST=\"\" OLLAMA_PROXY_URL=\"\" \\\n # OpenAI\n OPENAI_API_KEY=\"\" OPENAI_MODEL_LIST=\"\" OPENAI_PROXY_URL=\"\" \\\n # OpenRouter\n OPENROUTER_API_KEY=\"\" OPENROUTER_MODEL_LIST=\"\" \\\n # Perplexity\n PERPLEXITY_API_KEY=\"\" PERPLEXITY_MODEL_LIST=\"\" PERPLEXITY_PROXY_URL=\"\" \\\n # Qiniu\n QINIU_API_KEY=\"\" QINIU_MODEL_LIST=\"\" QINIU_PROXY_URL=\"\" \\\n # Qwen\n QWEN_API_KEY=\"\" QWEN_MODEL_LIST=\"\" QWEN_PROXY_URL=\"\" \\\n # SambaNova\n SAMBANOVA_API_KEY=\"\" SAMBANOVA_MODEL_LIST=\"\" \\\n # SenseNova\n SENSENOVA_API_KEY=\"\" SENSENOVA_MODEL_LIST=\"\" \\\n # SiliconCloud\n SILICONCLOUD_API_KEY=\"\" SILICONCLOUD_MODEL_LIST=\"\" SILICONCLOUD_PROXY_URL=\"\" \\\n # Spark\n SPARK_API_KEY=\"\" SPARK_MODEL_LIST=\"\" SPARK_PROXY_URL=\"\" SPARK_SEARCH_MODE=\"\" \\\n # Stepfun\n STEPFUN_API_KEY=\"\" STEPFUN_MODEL_LIST=\"\" \\\n # Taichu\n TAICHU_API_KEY=\"\" TAICHU_MODEL_LIST=\"\" \\\n # TogetherAI\n TOGETHERAI_API_KEY=\"\" TOGETHERAI_MODEL_LIST=\"\" \\\n # Upstage\n UPSTAGE_API_KEY=\"\" UPSTAGE_MODEL_LIST=\"\" \\\n # v0 (Vercel)\n V0_API_KEY=\"\" V0_MODEL_LIST=\"\" \\\n # vLLM\n VLLM_API_KEY=\"\" VLLM_MODEL_LIST=\"\" VLLM_PROXY_URL=\"\" \\\n # Wenxin\n WENXIN_API_KEY=\"\" WENXIN_MODEL_LIST=\"\" \\\n # xAI\n XAI_API_KEY=\"\" XAI_MODEL_LIST=\"\" XAI_PROXY_URL=\"\" \\\n # Xinference\n XINFERENCE_API_KEY=\"\" XINFERENCE_MODEL_LIST=\"\" XINFERENCE_PROXY_URL=\"\" \\\n # 01.AI\n ZEROONE_API_KEY=\"\" ZEROONE_MODEL_LIST=\"\" \\\n # Zhipu\n ZHIPU_API_KEY=\"\" ZHIPU_MODEL_LIST=\"\" \\\n # Tencent Cloud\n TENCENT_CLOUD_API_KEY=\"\" TENCENT_CLOUD_MODEL_LIST=\"\" \\\n # Infini-AI\n INFINIAI_API_KEY=\"\" INFINIAI_MODEL_LIST=\"\" \\\n # 302.AI\n AI302_API_KEY=\"\" AI302_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "110d090f803a54543dbb5e46ca1a724c121cc6d8": {"t": 1785761365.5366867, "n": 8719, "h": "087d080f5aeccad4", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"22\"\n\n## Base image for all building stages\nFROM node:${NODEJS_VERSION}-slim AS base\n\nARG USE_CN_MIRROR\n\nENV DEBIAN_FRONTEND=\"noninteractive\"\n\nRUN \\\n # If you want to build docker in China, build with --build-arg USE_CN_MIRROR=true\n if [ \"${USE_CN_MIRROR:-false}\" = \"true\" ]; then \\\n sed -i \"s/deb.debian.org/mirrors.ustc.edu.cn/g\" \"/etc/apt/sources.list.d/debian.sources\"; \\\n fi \\\n # Add required package\n && apt update \\\n && apt install ca-certificates proxychains-ng -qy \\\n # Prepare required package to distroless\n && mkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib \\\n # Copy proxychains to distroless\n && cp /usr/lib/$(arch)-linux-gnu/libproxychains.so.4 /distroless/lib/libproxychains.so.4 \\\n && cp /usr/lib/$(arch)-linux-gnu/libdl.so.2 /distroless/lib/libdl.so.2 \\\n && cp /usr/bin/proxychains4 /distroless/bin/proxychains \\\n && cp /etc/proxychains4.conf /distroless/etc/proxychains4.conf \\\n # Copy node to distroless\n && cp /usr/lib/$(arch)-linux-gnu/libstdc++.so.6 /distroless/lib/libstdc++.so.6 \\\n && cp /usr/lib/$(arch)-linux-gnu/libgcc_s.so.1 /distroless/lib/libgcc_s.so.1 \\\n && cp /usr/local/bin/node /distroless/bin/node \\\n # Copy CA certificates to distroless\n && cp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt \\\n # Cleanup temp files\n && rm -rf /tmp/* /var/lib/apt/lists/* /var/tmp/*\n\n## Builder image, install all the dependencies and build the app\nFROM base AS builder\n\nARG USE_CN_MIRROR\nARG NEXT_PUBLIC_BASE_PATH\nARG NEXT_PUBLIC_SENTRY_DSN\nARG NEXT_PUBLIC_ANALYTICS_POSTHOG\nARG NEXT_PUBLIC_POSTHOG_HOST\nARG NEXT_PUBLIC_POSTHOG_KEY\nARG NEXT_PUBLIC_ANALYTICS_UMAMI\nARG NEXT_PUBLIC_UMAMI_SCRIPT_URL\nARG NEXT_PUBLIC_UMAMI_WEBSITE_ID\nARG FEATURE_FLAGS\n\nENV NEXT_PUBLIC_CLIENT_DB=\"pglite\"\nENV NEXT_PUBLIC_BASE_PATH=\"${NEXT_PUBLIC_BASE_PATH}\" \\\n FEATURE_FLAGS=\"${FEATURE_FLAGS}\"\n\n# Sentry\nENV NEXT_PUBLIC_SENTRY_DSN=\"${NEXT_PUBLIC_SENTRY_DSN}\" \\\n SENTRY_ORG=\"\" \\\n SENTRY_PROJECT=\"\"\n\nENV APP_URL=\"http://app.com\"\n\n# Posthog\nENV NEXT_PUBLIC_ANALYTICS_POSTHOG=\"${NEXT_PUBLIC_ANALYTICS_POSTHOG}\" \\\n NEXT_PUBLIC_POSTHOG_HOST=\"${NEXT_PUBLIC_POSTHOG_HOST}\" \\\n NEXT_PUBLIC_POSTHOG_KEY=\"${NEXT_PUBLIC_POSTHOG_KEY}\"\n\n# Umami\nENV NEXT_PUBLIC_ANALYTICS_UMAMI=\"${NEXT_PUBLIC_ANALYTICS_UMAMI}\" \\\n NEXT_PUBLIC_UMAMI_SCRIPT_URL=\"${NEXT_PUBLIC_UMAMI_SCRIPT_URL}\" \\\n NEXT_PUBLIC_UMAMI_WEBSITE_ID=\"${NEXT_PUBLIC_UMAMI_WEBSITE_ID}\"\n\n# Node\nENV NODE_OPTIONS=\"--max-old-space-size=8192\"\n\nWORKDIR /app\n\nCOPY package.json pnpm-workspace.yaml ./\nCOPY .npmrc ./\nCOPY packages ./packages\n\nRUN \\\n # If you want to build docker in China, build with --build-arg USE_CN_MIRROR=true\n if [ \"${USE_CN_MIRROR:-false}\" = \"true\" ]; then \\\n export SENTRYCLI_CDNURL=\"https://npmmirror.com/mirrors/sentry-cli\"; \\\n npm config set registry \"https://registry.npmmirror.com/\"; \\\n echo 'canvas_binary_host_mirror=https://npmmirror.com/mirrors/canvas' >> .npmrc; \\\n fi \\\n # Set the registry for corepack\n && export COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\\/$//') \\\n # Update corepack to latest (nodejs/corepack#612)\n && npm i -g corepack@latest \\\n # Enable corepack\n && corepack enable \\\n # Use pnpm for corepack\n && corepack use $(sed -n 's/.*\"packageManager\": \"\\(.*\\)\".*/\\1/p' package.json) \\\n # Install the dependencies\n && pnpm i\n\nCOPY . .\n\n# run build standalone for docker version\nRUN npm run build:docker\n\n## Application image, copy all the files for production\nFROM busybox:latest AS app\n\nCOPY --from=base /distroless/ /\n\n# Automatically leverage output traces to reduce image size\n# https://nextjs.org/docs/advanced-features/output-file-tracing\nCOPY --from=builder /app/.next/standalone /app/\n\n# Copy server launcher\nCOPY --from=builder /app/scripts/serverLauncher/startServer.js /app/startServer.js\n\nRUN \\\n # Add nextjs:nodejs to run the app\n addgroup -S -g 1001 nodejs \\\n && adduser -D -G nodejs -H -S -h /app -u 1001 nextjs \\\n # Set permission for nextjs:nodejs\n && chown -R nextjs:nodejs /app /etc/proxychains4.conf\n\n## Production image, copy all the files and run next\nFROM scratch\n\n# Copy all the files from app, set the correct permission for prerender cache\nCOPY --from=app / /\n\nENV NODE_ENV=\"production\" \\\n NODE_OPTIONS=\"--dns-result-order=ipv4first --use-openssl-ca\" \\\n NODE_EXTRA_CA_CERTS=\"\" \\\n NODE_TLS_REJECT_UNAUTHORIZED=\"\" \\\n SSL_CERT_DIR=\"/etc/ssl/certs/ca-certificates.crt\"\n\n# Make the middleware rewrite through local as default\n# refs: https://github.com/lobehub/lobe-chat/issues/5876\nENV MIDDLEWARE_REWRITE_THROUGH_LOCAL=\"1\"\n\n# set hostname to localhost\nENV HOSTNAME=\"0.0.0.0\" \\\n PORT=\"3210\"\n\n# General Variables\nENV ACCESS_CODE=\"\" \\\n API_KEY_SELECT_MODE=\"\" \\\n DEFAULT_AGENT_CONFIG=\"\" \\\n SYSTEM_AGENT=\"\" \\\n FEATURE_FLAGS=\"\" \\\n PROXY_URL=\"\"\n\n# Model Variables\nENV \\\n # AI21\n AI21_API_KEY=\"\" AI21_MODEL_LIST=\"\" \\\n # Ai360\n AI360_API_KEY=\"\" AI360_MODEL_LIST=\"\" \\\n # AiHubMix\n AIHUBMIX_API_KEY=\"\" AIHUBMIX_MODEL_LIST=\"\" \\\n # Anthropic\n ANTHROPIC_API_KEY=\"\" ANTHROPIC_MODEL_LIST=\"\" ANTHROPIC_PROXY_URL=\"\" \\\n # Amazon Bedrock\n AWS_ACCESS_KEY_ID=\"\" AWS_SECRET_ACCESS_KEY=\"\" AWS_REGION=\"\" AWS_BEDROCK_MODEL_LIST=\"\" \\\n # Azure OpenAI\n AZURE_API_KEY=\"\" AZURE_API_VERSION=\"\" AZURE_ENDPOINT=\"\" AZURE_MODEL_LIST=\"\" \\\n # Baichuan\n BAICHUAN_API_KEY=\"\" BAICHUAN_MODEL_LIST=\"\" \\\n # Cloudflare\n CLOUDFLARE_API_KEY=\"\" CLOUDFLARE_BASE_URL_OR_ACCOUNT_ID=\"\" CLOUDFLARE_MODEL_LIST=\"\" \\\n # Cohere\n COHERE_API_KEY=\"\" COHERE_MODEL_LIST=\"\" COHERE_PROXY_URL=\"\" \\\n # DeepSeek\n DEEPSEEK_API_KEY=\"\" DEEPSEEK_MODEL_LIST=\"\" \\\n # Fireworks AI\n FIREWORKSAI_API_KEY=\"\" FIREWORKSAI_MODEL_LIST=\"\" \\\n # Gitee AI\n GITEE_AI_API_KEY=\"\" GITEE_AI_MODEL_LIST=\"\" \\\n # GitHub\n GITHUB_TOKEN=\"\" GITHUB_MODEL_LIST=\"\" \\\n # Google\n GOOGLE_API_KEY=\"\" GOOGLE_MODEL_LIST=\"\" GOOGLE_PROXY_URL=\"\" \\\n # Groq\n GROQ_API_KEY=\"\" GROQ_MODEL_LIST=\"\" GROQ_PROXY_URL=\"\" \\\n # Higress\n HIGRESS_API_KEY=\"\" HIGRESS_MODEL_LIST=\"\" HIGRESS_PROXY_URL=\"\" \\\n # HuggingFace\n HUGGINGFACE_API_KEY=\"\" HUGGINGFACE_MODEL_LIST=\"\" HUGGINGFACE_PROXY_URL=\"\" \\\n # Hunyuan\n HUNYUAN_API_KEY=\"\" HUNYUAN_MODEL_LIST=\"\" \\\n # InternLM\n INTERNLM_API_KEY=\"\" INTERNLM_MODEL_LIST=\"\" \\\n # Jina\n JINA_API_KEY=\"\" JINA_MODEL_LIST=\"\" JINA_PROXY_URL=\"\" \\\n # Minimax\n MINIMAX_API_KEY=\"\" MINIMAX_MODEL_LIST=\"\" \\\n # Mistral\n MISTRAL_API_KEY=\"\" MISTRAL_MODEL_LIST=\"\" \\\n # ModelScope\n MODELSCOPE_API_KEY=\"\" MODELSCOPE_MODEL_LIST=\"\" MODELSCOPE_PROXY_URL=\"\" \\\n # Moonshot\n MOONSHOT_API_KEY=\"\" MOONSHOT_MODEL_LIST=\"\" MOONSHOT_PROXY_URL=\"\" \\\n # Novita\n NOVITA_API_KEY=\"\" NOVITA_MODEL_LIST=\"\" \\\n # Nvidia NIM\n NVIDIA_API_KEY=\"\" NVIDIA_MODEL_LIST=\"\" NVIDIA_PROXY_URL=\"\" \\\n # Ollama\n ENABLED_OLLAMA=\"\" OLLAMA_MODEL_LIST=\"\" OLLAMA_PROXY_URL=\"\" \\\n # OpenAI\n OPENAI_API_KEY=\"\" OPENAI_MODEL_LIST=\"\" OPENAI_PROXY_URL=\"\" \\\n # OpenRouter\n OPENROUTER_API_KEY=\"\" OPENROUTER_MODEL_LIST=\"\" \\\n # Perplexity\n PERPLEXITY_API_KEY=\"\" PERPLEXITY_MODEL_LIST=\"\" PERPLEXITY_PROXY_URL=\"\" \\\n # Qiniu\n QINIU_API_KEY=\"\" QINIU_MODEL_LIST=\"\" QINIU_PROXY_URL=\"\" \\\n # Qwen\n QWEN_API_KEY=\"\" QWEN_MODEL_LIST=\"\" QWEN_PROXY_URL=\"\" \\\n # SambaNova\n SAMBANOVA_API_KEY=\"\" SAMBANOVA_MODEL_LIST=\"\" \\\n # SenseNova\n SENSENOVA_API_KEY=\"\" SENSENOVA_MODEL_LIST=\"\" \\\n # SiliconCloud\n SILICONCLOUD_API_KEY=\"\" SILICONCLOUD_MODEL_LIST=\"\" SILICONCLOUD_PROXY_URL=\"\" \\\n # Spark\n SPARK_API_KEY=\"\" SPARK_MODEL_LIST=\"\" SPARK_PROXY_URL=\"\" SPARK_SEARCH_MODE=\"\" \\\n # Stepfun\n STEPFUN_API_KEY=\"\" STEPFUN_MODEL_LIST=\"\" \\\n # Taichu\n TAICHU_API_KEY=\"\" TAICHU_MODEL_LIST=\"\" \\\n # TogetherAI\n TOGETHERAI_API_KEY=\"\" TOGETHERAI_MODEL_LIST=\"\" \\\n # Upstage\n UPSTAGE_API_KEY=\"\" UPSTAGE_MODEL_LIST=\"\" \\\n # v0 (Vercel)\n V0_API_KEY=\"\" V0_MODEL_LIST=\"\" \\\n # vLLM\n VLLM_API_KEY=\"\" VLLM_MODEL_LIST=\"\" VLLM_PROXY_URL=\"\" \\\n # Wenxin\n WENXIN_API_KEY=\"\" WENXIN_MODEL_LIST=\"\" \\\n # xAI\n XAI_API_KEY=\"\" XAI_MODEL_LIST=\"\" XAI_PROXY_URL=\"\" \\\n # Xinference\n XINFERENCE_API_KEY=\"\" XINFERENCE_MODEL_LIST=\"\" XINFERENCE_PROXY_URL=\"\" \\\n # 01.AI\n ZEROONE_API_KEY=\"\" ZEROONE_MODEL_LIST=\"\" \\\n # Zhipu\n ZHIPU_API_KEY=\"\" ZHIPU_MODEL_LIST=\"\" \\\n # Tencent Cloud\n TENCENT_CLOUD_API_KEY=\"\" TENCENT_CLOUD_MODEL_LIST=\"\" \\\n # Infini-AI\n INFINIAI_API_KEY=\"\" INFINIAI_MODEL_LIST=\"\" \\\n # 302.AI\n AI302_API_KEY=\"\" AI302_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}}, "frontend/Dockerfile.database": {"7e63a3e4e57d63cb021a2c074dc7b8d7447a7bf3": {"t": 1785595565.4321823, "n": 10119, "h": "236444b96d3aa133", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"22\"\n\n## Base image for all building stages\nFROM node:${NODEJS_VERSION}-slim AS base\n\nARG USE_CN_MIRROR\n\nENV DEBIAN_FRONTEND=\"noninteractive\"\n\nRUN \\\n # If you want to build docker in China, build with --build-arg USE_CN_MIRROR=true\n if [ \"${USE_CN_MIRROR:-false}\" = \"true\" ]; then \\\n sed -i \"s/deb.debian.org/mirrors.ustc.edu.cn/g\" \"/etc/apt/sources.list.d/debian.sources\"; \\\n fi \\\n # Add required package\n && apt update \\\n && apt install ca-certificates proxychains-ng -qy \\\n # Prepare required package to distroless\n && mkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib \\\n # Copy proxychains to distroless\n && cp /usr/lib/$(arch)-linux-gnu/libproxychains.so.4 /distroless/lib/libproxychains.so.4 \\\n && cp /usr/lib/$(arch)-linux-gnu/libdl.so.2 /distroless/lib/libdl.so.2 \\\n && cp /usr/bin/proxychains4 /distroless/bin/proxychains \\\n && cp /etc/proxychains4.conf /distroless/etc/proxychains4.conf \\\n # Copy node to distroless\n && cp /usr/lib/$(arch)-linux-gnu/libstdc++.so.6 /distroless/lib/libstdc++.so.6 \\\n && cp /usr/lib/$(arch)-linux-gnu/libgcc_s.so.1 /distroless/lib/libgcc_s.so.1 \\\n && cp /usr/local/bin/node /distroless/bin/node \\\n # Copy CA certificates to distroless\n && cp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt \\\n # Cleanup temp files\n && rm -rf /tmp/* /var/lib/apt/lists/* /var/tmp/*\n\n## Builder image, install all the dependencies and build the app\nFROM base AS builder\n\nARG USE_CN_MIRROR\nARG NEXT_PUBLIC_BASE_PATH\nARG NEXT_PUBLIC_SERVICE_MODE\nARG NEXT_PUBLIC_ENABLE_NEXT_AUTH\nARG NEXT_PUBLIC_SENTRY_DSN\nARG NEXT_PUBLIC_ANALYTICS_POSTHOG\nARG NEXT_PUBLIC_POSTHOG_HOST\nARG NEXT_PUBLIC_POSTHOG_KEY\nARG NEXT_PUBLIC_ANALYTICS_UMAMI\nARG NEXT_PUBLIC_UMAMI_SCRIPT_URL\nARG NEXT_PUBLIC_UMAMI_WEBSITE_ID\nARG FEATURE_FLAGS\n\nENV NEXT_PUBLIC_BASE_PATH=\"${NEXT_PUBLIC_BASE_PATH}\" \\\n FEATURE_FLAGS=\"${FEATURE_FLAGS}\"\n\nENV NEXT_PUBLIC_SERVICE_MODE=\"${NEXT_PUBLIC_SERVICE_MODE:-server}\" \\\n NEXT_PUBLIC_ENABLE_NEXT_AUTH=\"${NEXT_PUBLIC_ENABLE_NEXT_AUTH:-1}\" \\\n APP_URL=\"http://app.com\" \\\n DATABASE_DRIVER=\"node\" \\\n DATABASE_URL=\"postgres://postgres:password@localhost:5432/postgres\" \\\n KEY_VAULTS_SECRET=\"use-for-build\"\n\n# Sentry\nENV NEXT_PUBLIC_SENTRY_DSN=\"${NEXT_PUBLIC_SENTRY_DSN}\" \\\n SENTRY_ORG=\"\" \\\n SENTRY_PROJECT=\"\"\n\n# Posthog\nENV NEXT_PUBLIC_ANALYTICS_POSTHOG=\"${NEXT_PUBLIC_ANALYTICS_POSTHOG}\" \\\n NEXT_PUBLIC_POSTHOG_HOST=\"${NEXT_PUBLIC_POSTHOG_HOST}\" \\\n NEXT_PUBLIC_POSTHOG_KEY=\"${NEXT_PUBLIC_POSTHOG_KEY}\"\n\n# Umami\nENV NEXT_PUBLIC_ANALYTICS_UMAMI=\"${NEXT_PUBLIC_ANALYTICS_UMAMI}\" \\\n NEXT_PUBLIC_UMAMI_SCRIPT_URL=\"${NEXT_PUBLIC_UMAMI_SCRIPT_URL}\" \\\n NEXT_PUBLIC_UMAMI_WEBSITE_ID=\"${NEXT_PUBLIC_UMAMI_WEBSITE_ID}\"\n\n# Node\nENV NODE_OPTIONS=\"--max-old-space-size=8192\"\n\nWORKDIR /app\n\nCOPY package.json pnpm-workspace.yaml ./\nCOPY .npmrc ./\nCOPY packages ./packages\n\nRUN \\\n # If you want to build docker in China, build with --build-arg USE_CN_MIRROR=true\n if [ \"${USE_CN_MIRROR:-false}\" = \"true\" ]; then \\\n export SENTRYCLI_CDNURL=\"https://npmmirror.com/mirrors/sentry-cli\"; \\\n npm config set registry \"https://registry.npmmirror.com/\"; \\\n echo 'canvas_binary_host_mirror=https://npmmirror.com/mirrors/canvas' >> .npmrc; \\\n fi \\\n # Set the registry for corepack\n && export COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\\/$//') \\\n # Update corepack to latest (nodejs/corepack#612)\n && npm i -g corepack@latest \\\n # Enable corepack\n && corepack enable \\\n # Use pnpm for corepack\n && corepack use $(sed -n 's/.*\"packageManager\": \"\\(.*\\)\".*/\\1/p' package.json) \\\n # Install the dependencies\n && pnpm i \\\n # Add db migration dependencies\n && mkdir -p /deps \\\n && cd /deps \\\n && pnpm init \\\n && pnpm add pg drizzle-orm\n\nCOPY . .\n\n# run build standalone for docker version\nRUN npm run build:docker\n\n## Application image, copy all the files for production\nFROM busybox:latest AS app\n\nCOPY --from=base /distroless/ /\n\n# Automatically leverage output traces to reduce image size\n# https://nextjs.org/docs/advanced-features/output-file-tracing\nCOPY --from=builder /app/.next/standalone /app/\n\n# Copy database migrations\nCOPY --from=builder /app/src/database/migrations /app/migrations\nCOPY --from=builder /app/scripts/migrateServerDB/docker.cjs /app/docker.cjs\nCOPY --from=builder /app/scripts/migrateServerDB/errorHint.js /app/errorHint.js\n\n# copy dependencies\nCOPY --from=builder /deps/node_modules/.pnpm /app/node_modules/.pnpm\nCOPY --from=builder /deps/node_modules/pg /app/node_modules/pg\nCOPY --from=builder /deps/node_modules/drizzle-orm /app/node_modules/drizzle-orm\n\n# Copy server launcher\nCOPY --from=builder /app/scripts/serverLauncher/startServer.js /app/startServer.js\n\nRUN \\\n # Add nextjs:nodejs to run the app\n addgroup -S -g 1001 nodejs \\\n && adduser -D -G nodejs -H -S -h /app -u 1001 nextjs \\\n # Set permission for nextjs:nodejs\n && chown -R nextjs:nodejs /app /etc/proxychains4.conf\n\n## Production image, copy all the files and run next\nFROM scratch\n\n# Copy all the files from app, set the correct permission for prerender cache\nCOPY --from=app / /\n\nENV NODE_ENV=\"production\" \\\n NODE_OPTIONS=\"--dns-result-order=ipv4first --use-openssl-ca\" \\\n NODE_EXTRA_CA_CERTS=\"\" \\\n NODE_TLS_REJECT_UNAUTHORIZED=\"\" \\\n SSL_CERT_DIR=\"/etc/ssl/certs/ca-certificates.crt\"\n\n# Make the middleware rewrite through local as default\n# refs: https://github.com/lobehub/lobe-chat/issues/5876\nENV MIDDLEWARE_REWRITE_THROUGH_LOCAL=\"1\"\n\n# set hostname to localhost\nENV HOSTNAME=\"0.0.0.0\" \\\n PORT=\"3210\"\n\n# General Variables\nENV ACCESS_CODE=\"\" \\\n APP_URL=\"\" \\\n API_KEY_SELECT_MODE=\"\" \\\n DEFAULT_AGENT_CONFIG=\"\" \\\n SYSTEM_AGENT=\"\" \\\n FEATURE_FLAGS=\"\" \\\n PROXY_URL=\"\"\n\n# Database\nENV KEY_VAULTS_SECRET=\"\" \\\n DATABASE_DRIVER=\"node\" \\\n DATABASE_URL=\"\"\n\n# Next Auth\nENV NEXT_AUTH_SECRET=\"\" \\\n NEXT_AUTH_SSO_PROVIDERS=\"\" \\\n NEXTAUTH_URL=\"\"\n\n# S3\nENV NEXT_PUBLIC_S3_DOMAIN=\"\" \\\n S3_PUBLIC_DOMAIN=\"\" \\\n S3_ACCESS_KEY_ID=\"\" \\\n S3_BUCKET=\"\" \\\n S3_ENDPOINT=\"\" \\\n S3_SECRET_ACCESS_KEY=\"\"\n\n# Model Variables\nENV \\\n # AI21\n AI21_API_KEY=\"\" AI21_MODEL_LIST=\"\" \\\n # Ai360\n AI360_API_KEY=\"\" AI360_MODEL_LIST=\"\" \\\n # AiHubMix\n AIHUBMIX_API_KEY=\"\" AIHUBMIX_MODEL_LIST=\"\" \\\n # Anthropic\n ANTHROPIC_API_KEY=\"\" ANTHROPIC_MODEL_LIST=\"\" ANTHROPIC_PROXY_URL=\"\" \\\n # Amazon Bedrock\n AWS_ACCESS_KEY_ID=\"\" AWS_SECRET_ACCESS_KEY=\"\" AWS_REGION=\"\" AWS_BEDROCK_MODEL_LIST=\"\" \\\n # Azure OpenAI\n AZURE_API_KEY=\"\" AZURE_API_VERSION=\"\" AZURE_ENDPOINT=\"\" AZURE_MODEL_LIST=\"\" \\\n # Baichuan\n BAICHUAN_API_KEY=\"\" BAICHUAN_MODEL_LIST=\"\" \\\n # Cloudflare\n CLOUDFLARE_API_KEY=\"\" CLOUDFLARE_BASE_URL_OR_ACCOUNT_ID=\"\" CLOUDFLARE_MODEL_LIST=\"\" \\\n # Cohere\n COHERE_API_KEY=\"\" COHERE_MODEL_LIST=\"\" COHERE_PROXY_URL=\"\" \\\n # DeepSeek\n DEEPSEEK_API_KEY=\"\" DEEPSEEK_MODEL_LIST=\"\" \\\n # Fireworks AI\n FIREWORKSAI_API_KEY=\"\" FIREWORKSAI_MODEL_LIST=\"\" \\\n # Gitee AI\n GITEE_AI_API_KEY=\"\" GITEE_AI_MODEL_LIST=\"\" \\\n # GitHub\n GITHUB_TOKEN=\"\" GITHUB_MODEL_LIST=\"\" \\\n # Google\n GOOGLE_API_KEY=\"\" GOOGLE_MODEL_LIST=\"\" GOOGLE_PROXY_URL=\"\" \\\n # Groq\n GROQ_API_KEY=\"\" GROQ_MODEL_LIST=\"\" GROQ_PROXY_URL=\"\" \\\n # Higress\n HIGRESS_API_KEY=\"\" HIGRESS_MODEL_LIST=\"\" HIGRESS_PROXY_URL=\"\" \\\n # HuggingFace\n HUGGINGFACE_API_KEY=\"\" HUGGINGFACE_MODEL_LIST=\"\" HUGGINGFACE_PROXY_URL=\"\" \\\n # Hunyuan\n HUNYUAN_API_KEY=\"\" HUNYUAN_MODEL_LIST=\"\" \\\n # InternLM\n INTERNLM_API_KEY=\"\" INTERNLM_MODEL_LIST=\"\" \\\n # Jina\n JINA_API_KEY=\"\" JINA_MODEL_LIST=\"\" JINA_PROXY_URL=\"\" \\\n # Minimax\n MINIMAX_API_KEY=\"\" MINIMAX_MODEL_LIST=\"\" \\\n # Mistral\n MISTRAL_API_KEY=\"\" MISTRAL_MODEL_LIST=\"\" \\\n # ModelScope\n MODELSCOPE_API_KEY=\"\" MODELSCOPE_MODEL_LIST=\"\" MODELSCOPE_PROXY_URL=\"\" \\\n # Moonshot\n MOONSHOT_API_KEY=\"\" MOONSHOT_MODEL_LIST=\"\" MOONSHOT_PROXY_URL=\"\" \\\n # Novita\n NOVITA_API_KEY=\"\" NOVITA_MODEL_LIST=\"\" \\\n # Nvidia NIM\n NVIDIA_API_KEY=\"\" NVIDIA_MODEL_LIST=\"\" NVIDIA_PROXY_URL=\"\" \\\n # Ollama\n ENABLED_OLLAMA=\"\" OLLAMA_MODEL_LIST=\"\" OLLAMA_PROXY_URL=\"\" \\\n # OpenAI\n OPENAI_API_KEY=\"\" OPENAI_MODEL_LIST=\"\" OPENAI_PROXY_URL=\"\" \\\n # OpenRouter\n OPENROUTER_API_KEY=\"\" OPENROUTER_MODEL_LIST=\"\" \\\n # Perplexity\n PERPLEXITY_API_KEY=\"\" PERPLEXITY_MODEL_LIST=\"\" PERPLEXITY_PROXY_URL=\"\" \\\n # PPIO\n PPIO_API_KEY=\"\" PPIO_MODEL_LIST=\"\" \\\n # Qiniu\n QINIU_API_KEY=\"\" QINIU_MODEL_LIST=\"\" QINIU_PROXY_URL=\"\" \\\n # Qwen\n QWEN_API_KEY=\"\" QWEN_MODEL_LIST=\"\" QWEN_PROXY_URL=\"\" \\\n # SambaNova\n SAMBANOVA_API_KEY=\"\" SAMBANOVA_MODEL_LIST=\"\" \\\n # Search1API\n SEARCH1API_API_KEY=\"\" SEARCH1API_MODEL_LIST=\"\" \\\n # SenseNova\n SENSENOVA_API_KEY=\"\" SENSENOVA_MODEL_LIST=\"\" \\\n # SiliconCloud\n SILICONCLOUD_API_KEY=\"\" SILICONCLOUD_MODEL_LIST=\"\" SILICONCLOUD_PROXY_URL=\"\" \\\n # Spark\n SPARK_API_KEY=\"\" SPARK_MODEL_LIST=\"\" SPARK_PROXY_URL=\"\" SPARK_SEARCH_MODE=\"\" \\\n # Stepfun\n STEPFUN_API_KEY=\"\" STEPFUN_MODEL_LIST=\"\" \\\n # Taichu\n TAICHU_API_KEY=\"\" TAICHU_MODEL_LIST=\"\" \\\n # TogetherAI\n TOGETHERAI_API_KEY=\"\" TOGETHERAI_MODEL_LIST=\"\" \\\n # Upstage\n UPSTAGE_API_KEY=\"\" UPSTAGE_MODEL_LIST=\"\" \\\n # v0 (Vercel)\n V0_API_KEY=\"\" V0_MODEL_LIST=\"\" \\\n # vLLM\n VLLM_API_KEY=\"\" VLLM_MODEL_LIST=\"\" VLLM_PROXY_URL=\"\" \\\n # Wenxin\n WENXIN_API_KEY=\"\" WENXIN_MODEL_LIST=\"\" \\\n # xAI\n XAI_API_KEY=\"\" XAI_MODEL_LIST=\"\" XAI_PROXY_URL=\"\" \\\n # Xinference\n XINFERENCE_API_KEY=\"\" XINFERENCE_MODEL_LIST=\"\" XINFERENCE_PROXY_URL=\"\" \\\n # 01.AI\n ZEROONE_API_KEY=\"\" ZEROONE_MODEL_LIST=\"\" \\\n # Zhipu\n ZHIPU_API_KEY=\"\" ZHIPU_MODEL_LIST=\"\" \\\n # Tencent Cloud\n TENCENT_CLOUD_API_KEY=\"\" TENCENT_CLOUD_MODEL_LIST=\"\" \\\n # Infini-AI\n INFINIAI_API_KEY=\"\" INFINIAI_MODEL_LIST=\"\" \\\n # 302.AI\n AI302_API_KEY=\"\" AI302_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "110d090f803a54543dbb5e46ca1a724c121cc6d8": {"t": 1785761366.3951778, "n": 10119, "h": "236444b96d3aa133", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"22\"\n\n## Base image for all building stages\nFROM node:${NODEJS_VERSION}-slim AS base\n\nARG USE_CN_MIRROR\n\nENV DEBIAN_FRONTEND=\"noninteractive\"\n\nRUN \\\n # If you want to build docker in China, build with --build-arg USE_CN_MIRROR=true\n if [ \"${USE_CN_MIRROR:-false}\" = \"true\" ]; then \\\n sed -i \"s/deb.debian.org/mirrors.ustc.edu.cn/g\" \"/etc/apt/sources.list.d/debian.sources\"; \\\n fi \\\n # Add required package\n && apt update \\\n && apt install ca-certificates proxychains-ng -qy \\\n # Prepare required package to distroless\n && mkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib \\\n # Copy proxychains to distroless\n && cp /usr/lib/$(arch)-linux-gnu/libproxychains.so.4 /distroless/lib/libproxychains.so.4 \\\n && cp /usr/lib/$(arch)-linux-gnu/libdl.so.2 /distroless/lib/libdl.so.2 \\\n && cp /usr/bin/proxychains4 /distroless/bin/proxychains \\\n && cp /etc/proxychains4.conf /distroless/etc/proxychains4.conf \\\n # Copy node to distroless\n && cp /usr/lib/$(arch)-linux-gnu/libstdc++.so.6 /distroless/lib/libstdc++.so.6 \\\n && cp /usr/lib/$(arch)-linux-gnu/libgcc_s.so.1 /distroless/lib/libgcc_s.so.1 \\\n && cp /usr/local/bin/node /distroless/bin/node \\\n # Copy CA certificates to distroless\n && cp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt \\\n # Cleanup temp files\n && rm -rf /tmp/* /var/lib/apt/lists/* /var/tmp/*\n\n## Builder image, install all the dependencies and build the app\nFROM base AS builder\n\nARG USE_CN_MIRROR\nARG NEXT_PUBLIC_BASE_PATH\nARG NEXT_PUBLIC_SERVICE_MODE\nARG NEXT_PUBLIC_ENABLE_NEXT_AUTH\nARG NEXT_PUBLIC_SENTRY_DSN\nARG NEXT_PUBLIC_ANALYTICS_POSTHOG\nARG NEXT_PUBLIC_POSTHOG_HOST\nARG NEXT_PUBLIC_POSTHOG_KEY\nARG NEXT_PUBLIC_ANALYTICS_UMAMI\nARG NEXT_PUBLIC_UMAMI_SCRIPT_URL\nARG NEXT_PUBLIC_UMAMI_WEBSITE_ID\nARG FEATURE_FLAGS\n\nENV NEXT_PUBLIC_BASE_PATH=\"${NEXT_PUBLIC_BASE_PATH}\" \\\n FEATURE_FLAGS=\"${FEATURE_FLAGS}\"\n\nENV NEXT_PUBLIC_SERVICE_MODE=\"${NEXT_PUBLIC_SERVICE_MODE:-server}\" \\\n NEXT_PUBLIC_ENABLE_NEXT_AUTH=\"${NEXT_PUBLIC_ENABLE_NEXT_AUTH:-1}\" \\\n APP_URL=\"http://app.com\" \\\n DATABASE_DRIVER=\"node\" \\\n DATABASE_URL=\"postgres://postgres:password@localhost:5432/postgres\" \\\n KEY_VAULTS_SECRET=\"use-for-build\"\n\n# Sentry\nENV NEXT_PUBLIC_SENTRY_DSN=\"${NEXT_PUBLIC_SENTRY_DSN}\" \\\n SENTRY_ORG=\"\" \\\n SENTRY_PROJECT=\"\"\n\n# Posthog\nENV NEXT_PUBLIC_ANALYTICS_POSTHOG=\"${NEXT_PUBLIC_ANALYTICS_POSTHOG}\" \\\n NEXT_PUBLIC_POSTHOG_HOST=\"${NEXT_PUBLIC_POSTHOG_HOST}\" \\\n NEXT_PUBLIC_POSTHOG_KEY=\"${NEXT_PUBLIC_POSTHOG_KEY}\"\n\n# Umami\nENV NEXT_PUBLIC_ANALYTICS_UMAMI=\"${NEXT_PUBLIC_ANALYTICS_UMAMI}\" \\\n NEXT_PUBLIC_UMAMI_SCRIPT_URL=\"${NEXT_PUBLIC_UMAMI_SCRIPT_URL}\" \\\n NEXT_PUBLIC_UMAMI_WEBSITE_ID=\"${NEXT_PUBLIC_UMAMI_WEBSITE_ID}\"\n\n# Node\nENV NODE_OPTIONS=\"--max-old-space-size=8192\"\n\nWORKDIR /app\n\nCOPY package.json pnpm-workspace.yaml ./\nCOPY .npmrc ./\nCOPY packages ./packages\n\nRUN \\\n # If you want to build docker in China, build with --build-arg USE_CN_MIRROR=true\n if [ \"${USE_CN_MIRROR:-false}\" = \"true\" ]; then \\\n export SENTRYCLI_CDNURL=\"https://npmmirror.com/mirrors/sentry-cli\"; \\\n npm config set registry \"https://registry.npmmirror.com/\"; \\\n echo 'canvas_binary_host_mirror=https://npmmirror.com/mirrors/canvas' >> .npmrc; \\\n fi \\\n # Set the registry for corepack\n && export COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\\/$//') \\\n # Update corepack to latest (nodejs/corepack#612)\n && npm i -g corepack@latest \\\n # Enable corepack\n && corepack enable \\\n # Use pnpm for corepack\n && corepack use $(sed -n 's/.*\"packageManager\": \"\\(.*\\)\".*/\\1/p' package.json) \\\n # Install the dependencies\n && pnpm i \\\n # Add db migration dependencies\n && mkdir -p /deps \\\n && cd /deps \\\n && pnpm init \\\n && pnpm add pg drizzle-orm\n\nCOPY . .\n\n# run build standalone for docker version\nRUN npm run build:docker\n\n## Application image, copy all the files for production\nFROM busybox:latest AS app\n\nCOPY --from=base /distroless/ /\n\n# Automatically leverage output traces to reduce image size\n# https://nextjs.org/docs/advanced-features/output-file-tracing\nCOPY --from=builder /app/.next/standalone /app/\n\n# Copy database migrations\nCOPY --from=builder /app/src/database/migrations /app/migrations\nCOPY --from=builder /app/scripts/migrateServerDB/docker.cjs /app/docker.cjs\nCOPY --from=builder /app/scripts/migrateServerDB/errorHint.js /app/errorHint.js\n\n# copy dependencies\nCOPY --from=builder /deps/node_modules/.pnpm /app/node_modules/.pnpm\nCOPY --from=builder /deps/node_modules/pg /app/node_modules/pg\nCOPY --from=builder /deps/node_modules/drizzle-orm /app/node_modules/drizzle-orm\n\n# Copy server launcher\nCOPY --from=builder /app/scripts/serverLauncher/startServer.js /app/startServer.js\n\nRUN \\\n # Add nextjs:nodejs to run the app\n addgroup -S -g 1001 nodejs \\\n && adduser -D -G nodejs -H -S -h /app -u 1001 nextjs \\\n # Set permission for nextjs:nodejs\n && chown -R nextjs:nodejs /app /etc/proxychains4.conf\n\n## Production image, copy all the files and run next\nFROM scratch\n\n# Copy all the files from app, set the correct permission for prerender cache\nCOPY --from=app / /\n\nENV NODE_ENV=\"production\" \\\n NODE_OPTIONS=\"--dns-result-order=ipv4first --use-openssl-ca\" \\\n NODE_EXTRA_CA_CERTS=\"\" \\\n NODE_TLS_REJECT_UNAUTHORIZED=\"\" \\\n SSL_CERT_DIR=\"/etc/ssl/certs/ca-certificates.crt\"\n\n# Make the middleware rewrite through local as default\n# refs: https://github.com/lobehub/lobe-chat/issues/5876\nENV MIDDLEWARE_REWRITE_THROUGH_LOCAL=\"1\"\n\n# set hostname to localhost\nENV HOSTNAME=\"0.0.0.0\" \\\n PORT=\"3210\"\n\n# General Variables\nENV ACCESS_CODE=\"\" \\\n APP_URL=\"\" \\\n API_KEY_SELECT_MODE=\"\" \\\n DEFAULT_AGENT_CONFIG=\"\" \\\n SYSTEM_AGENT=\"\" \\\n FEATURE_FLAGS=\"\" \\\n PROXY_URL=\"\"\n\n# Database\nENV KEY_VAULTS_SECRET=\"\" \\\n DATABASE_DRIVER=\"node\" \\\n DATABASE_URL=\"\"\n\n# Next Auth\nENV NEXT_AUTH_SECRET=\"\" \\\n NEXT_AUTH_SSO_PROVIDERS=\"\" \\\n NEXTAUTH_URL=\"\"\n\n# S3\nENV NEXT_PUBLIC_S3_DOMAIN=\"\" \\\n S3_PUBLIC_DOMAIN=\"\" \\\n S3_ACCESS_KEY_ID=\"\" \\\n S3_BUCKET=\"\" \\\n S3_ENDPOINT=\"\" \\\n S3_SECRET_ACCESS_KEY=\"\"\n\n# Model Variables\nENV \\\n # AI21\n AI21_API_KEY=\"\" AI21_MODEL_LIST=\"\" \\\n # Ai360\n AI360_API_KEY=\"\" AI360_MODEL_LIST=\"\" \\\n # AiHubMix\n AIHUBMIX_API_KEY=\"\" AIHUBMIX_MODEL_LIST=\"\" \\\n # Anthropic\n ANTHROPIC_API_KEY=\"\" ANTHROPIC_MODEL_LIST=\"\" ANTHROPIC_PROXY_URL=\"\" \\\n # Amazon Bedrock\n AWS_ACCESS_KEY_ID=\"\" AWS_SECRET_ACCESS_KEY=\"\" AWS_REGION=\"\" AWS_BEDROCK_MODEL_LIST=\"\" \\\n # Azure OpenAI\n AZURE_API_KEY=\"\" AZURE_API_VERSION=\"\" AZURE_ENDPOINT=\"\" AZURE_MODEL_LIST=\"\" \\\n # Baichuan\n BAICHUAN_API_KEY=\"\" BAICHUAN_MODEL_LIST=\"\" \\\n # Cloudflare\n CLOUDFLARE_API_KEY=\"\" CLOUDFLARE_BASE_URL_OR_ACCOUNT_ID=\"\" CLOUDFLARE_MODEL_LIST=\"\" \\\n # Cohere\n COHERE_API_KEY=\"\" COHERE_MODEL_LIST=\"\" COHERE_PROXY_URL=\"\" \\\n # DeepSeek\n DEEPSEEK_API_KEY=\"\" DEEPSEEK_MODEL_LIST=\"\" \\\n # Fireworks AI\n FIREWORKSAI_API_KEY=\"\" FIREWORKSAI_MODEL_LIST=\"\" \\\n # Gitee AI\n GITEE_AI_API_KEY=\"\" GITEE_AI_MODEL_LIST=\"\" \\\n # GitHub\n GITHUB_TOKEN=\"\" GITHUB_MODEL_LIST=\"\" \\\n # Google\n GOOGLE_API_KEY=\"\" GOOGLE_MODEL_LIST=\"\" GOOGLE_PROXY_URL=\"\" \\\n # Groq\n GROQ_API_KEY=\"\" GROQ_MODEL_LIST=\"\" GROQ_PROXY_URL=\"\" \\\n # Higress\n HIGRESS_API_KEY=\"\" HIGRESS_MODEL_LIST=\"\" HIGRESS_PROXY_URL=\"\" \\\n # HuggingFace\n HUGGINGFACE_API_KEY=\"\" HUGGINGFACE_MODEL_LIST=\"\" HUGGINGFACE_PROXY_URL=\"\" \\\n # Hunyuan\n HUNYUAN_API_KEY=\"\" HUNYUAN_MODEL_LIST=\"\" \\\n # InternLM\n INTERNLM_API_KEY=\"\" INTERNLM_MODEL_LIST=\"\" \\\n # Jina\n JINA_API_KEY=\"\" JINA_MODEL_LIST=\"\" JINA_PROXY_URL=\"\" \\\n # Minimax\n MINIMAX_API_KEY=\"\" MINIMAX_MODEL_LIST=\"\" \\\n # Mistral\n MISTRAL_API_KEY=\"\" MISTRAL_MODEL_LIST=\"\" \\\n # ModelScope\n MODELSCOPE_API_KEY=\"\" MODELSCOPE_MODEL_LIST=\"\" MODELSCOPE_PROXY_URL=\"\" \\\n # Moonshot\n MOONSHOT_API_KEY=\"\" MOONSHOT_MODEL_LIST=\"\" MOONSHOT_PROXY_URL=\"\" \\\n # Novita\n NOVITA_API_KEY=\"\" NOVITA_MODEL_LIST=\"\" \\\n # Nvidia NIM\n NVIDIA_API_KEY=\"\" NVIDIA_MODEL_LIST=\"\" NVIDIA_PROXY_URL=\"\" \\\n # Ollama\n ENABLED_OLLAMA=\"\" OLLAMA_MODEL_LIST=\"\" OLLAMA_PROXY_URL=\"\" \\\n # OpenAI\n OPENAI_API_KEY=\"\" OPENAI_MODEL_LIST=\"\" OPENAI_PROXY_URL=\"\" \\\n # OpenRouter\n OPENROUTER_API_KEY=\"\" OPENROUTER_MODEL_LIST=\"\" \\\n # Perplexity\n PERPLEXITY_API_KEY=\"\" PERPLEXITY_MODEL_LIST=\"\" PERPLEXITY_PROXY_URL=\"\" \\\n # PPIO\n PPIO_API_KEY=\"\" PPIO_MODEL_LIST=\"\" \\\n # Qiniu\n QINIU_API_KEY=\"\" QINIU_MODEL_LIST=\"\" QINIU_PROXY_URL=\"\" \\\n # Qwen\n QWEN_API_KEY=\"\" QWEN_MODEL_LIST=\"\" QWEN_PROXY_URL=\"\" \\\n # SambaNova\n SAMBANOVA_API_KEY=\"\" SAMBANOVA_MODEL_LIST=\"\" \\\n # Search1API\n SEARCH1API_API_KEY=\"\" SEARCH1API_MODEL_LIST=\"\" \\\n # SenseNova\n SENSENOVA_API_KEY=\"\" SENSENOVA_MODEL_LIST=\"\" \\\n # SiliconCloud\n SILICONCLOUD_API_KEY=\"\" SILICONCLOUD_MODEL_LIST=\"\" SILICONCLOUD_PROXY_URL=\"\" \\\n # Spark\n SPARK_API_KEY=\"\" SPARK_MODEL_LIST=\"\" SPARK_PROXY_URL=\"\" SPARK_SEARCH_MODE=\"\" \\\n # Stepfun\n STEPFUN_API_KEY=\"\" STEPFUN_MODEL_LIST=\"\" \\\n # Taichu\n TAICHU_API_KEY=\"\" TAICHU_MODEL_LIST=\"\" \\\n # TogetherAI\n TOGETHERAI_API_KEY=\"\" TOGETHERAI_MODEL_LIST=\"\" \\\n # Upstage\n UPSTAGE_API_KEY=\"\" UPSTAGE_MODEL_LIST=\"\" \\\n # v0 (Vercel)\n V0_API_KEY=\"\" V0_MODEL_LIST=\"\" \\\n # vLLM\n VLLM_API_KEY=\"\" VLLM_MODEL_LIST=\"\" VLLM_PROXY_URL=\"\" \\\n # Wenxin\n WENXIN_API_KEY=\"\" WENXIN_MODEL_LIST=\"\" \\\n # xAI\n XAI_API_KEY=\"\" XAI_MODEL_LIST=\"\" XAI_PROXY_URL=\"\" \\\n # Xinference\n XINFERENCE_API_KEY=\"\" XINFERENCE_MODEL_LIST=\"\" XINFERENCE_PROXY_URL=\"\" \\\n # 01.AI\n ZEROONE_API_KEY=\"\" ZEROONE_MODEL_LIST=\"\" \\\n # Zhipu\n ZHIPU_API_KEY=\"\" ZHIPU_MODEL_LIST=\"\" \\\n # Tencent Cloud\n TENCENT_CLOUD_API_KEY=\"\" TENCENT_CLOUD_MODEL_LIST=\"\" \\\n # Infini-AI\n INFINIAI_API_KEY=\"\" INFINIAI_MODEL_LIST=\"\" \\\n # 302.AI\n AI302_API_KEY=\"\" AI302_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}}, "frontend/.env.example": {"7e63a3e4e57d63cb021a2c074dc7b8d7447a7bf3": {"t": 1785595571.3748822, "n": 7171, "h": "39d07f4b781c191c", "c": "# API Chat Configuration\n# Конфигурация для API Chat - современного интерфейса для AI моделей\n\n# Код доступа для защиты вашего приложения API Chat\n# Можете установить длинный пароль для избежания утечек. Если значение содержит запятую, это массив паролей.\n# ACCESS_CODE=apichat2024\n\n# Задайте метод выбора API ключа: поддерживается `random` и `turn`.\n# API_KEY_SELECT_MODE=random\n\n# Название приложения (отображается в интерфейсе)\nNEXT_PUBLIC_APP_NAME=\"API Chat\"\nNEXT_PUBLIC_APP_DESCRIPTION=\"Ваш интеллектуальный AI помощник\"\n\n########################################\n########## AI Provider Service #########\n########################################\n\n### OpenAI ###\n\n# Ваш API ключ OpenAI\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# Используйте прокси для подключения к OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# Добавьте ваши пользовательские модели, разделенные запятой. Например: gpt-4,gpt-3.5-turbo\n# OPENAI_MODEL_LIST=gpt-4,gpt-3.5-turbo\n\n\n### Azure OpenAI ###\n\n# you can learn azure OpenAI Service on https://learn.microsoft.com/en-us/azure/ai-services/openai/overview\n# use Azure OpenAI Service by uncomment the following line\n\n# The API key you applied for on the Azure OpenAI account page, which can be found in the \"Keys and Endpoints\" section.\n# AZURE_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# The endpoint you applied for on the Azure OpenAI account page, which can be found in the \"Keys and Endpoints\" section.\n# AZURE_ENDPOINT=https://docs-test-001.openai.azure.com\n\n# Azure's API version, follows the YYYY-MM-DD format\n# AZURE_API_VERSION=2024-10-21\n\n\n### Anthropic Service ####\n\n# ANTHROPIC_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# use a proxy to connect to the Anthropic API\n# ANTHROPIC_PROXY_URL=https://api.anthropic.com\n\n\n### Google AI ####\n\n# GOOGLE_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n\n### AWS Bedrock ###\n\n# AWS_REGION=us-east-1\n# AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxx\n# AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n\n### Ollama AI ####\n\n# You can use ollama to get and run LLM locally, learn more about it via https://github.com/ollama/ollama\n\n# The local/remote ollama service url\n# OLLAMA_PROXY_URL=http://127.0.0.1:11434\n\n# OLLAMA_MODEL_LIST=your_ollama_model_names\n\n\n### OpenRouter Service ###\n\n# OPENROUTER_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# OPENROUTER_MODEL_LIST=model1,model2,model3\n\n\n### Mistral AI ###\n\n# MISTRAL_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### Perplexity Service ###\n\n# PERPLEXITY_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### Groq Service ####\n\n# GROQ_API_KEY=gsk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n#### 01.AI Service ####\n\n# ZEROONE_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### TogetherAI Service ###\n\n# TOGETHERAI_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### ZhiPu AI ###\n\n# ZHIPU_API_KEY=xxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxx\n\n### Moonshot AI ####\n\n# MOONSHOT_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### Minimax AI ####\n\n# MINIMAX_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### DeepSeek AI ####\n\n# DEEPSEEK_PROXY_URL=https://api.deepseek.com/v1\n# DEEPSEEK_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### Qiniu AI ####\n\n# QINIU_PROXY_URL=https://api.qnaigc.com/v1\n# QINIU_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### Qwen AI ####\n\n# QWEN_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### Cloudflare Workers AI ####\n\n# CLOUDFLARE_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# CLOUDFLARE_BASE_URL_OR_ACCOUNT_ID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### SiliconCloud AI ####\n\n# SILICONCLOUD_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n\n### TencentCloud AI ####\n\n# TENCENT_CLOUD_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### PPIO ####\n\n# PPIO_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### INFINI-AI ###\n\n# INFINIAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n\n### 302.AI ###\n\n# AI302_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### ModelScope ###\n\n# MODELSCOPE_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### AiHubMix ###\n\n# AIHUBMIX_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n\n########################################\n############ Market Service ############\n########################################\n\n# The LobeChat agents market index url\n# AGENTS_INDEX_URL=https://chat-agents.lobehub.com\n\n########################################\n############ Plugin Service ############\n########################################\n\n# The LobeChat plugins store index url\n# PLUGINS_INDEX_URL=https://chat-plugins.lobehub.com\n\n# set the plugin settings\n# the format is `plugin-identifier:key1=value1;key2=value2`, multiple settings fields are separated by semicolons `;`, multiple plugin settings are separated by commas `,`.\n# PLUGIN_SETTINGS=search-engine:SERPAPI_API_KEY=xxxxx\n\n########################################\n####### Doc / Changelog Service ########\n########################################\n\n# Use in Changelog / Document service cdn url prefix\n# DOC_S3_PUBLIC_DOMAIN=https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# Use in dev cdn workflow\n# DOC_S3_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# DOC_S3_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n\n########################################\n##### S3 Object Storage Service ########\n########################################\n\n# S3 keys\n# S3_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# S3_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# Bucket name\n# S3_BUCKET=lobechat\n\n# Bucket request endpoint\n# S3_ENDPOINT=https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxx.r2.cloudflarestorage.com\n\n# Public access domain for the bucket\n# S3_PUBLIC_DOMAIN=https://s3-for-lobechat.your-domain.com\n\n# Bucket region, such as us-west-1, generally not needed to add\n# but some service providers may require configuration\n# S3_REGION=us-west-1\n\n\n########################################\n############ Auth Service ##############\n########################################\n\n\n# Clerk related configurations\n\n# Clerk public key and secret key\n#NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_live_xxxxxxxxxxx\n#CLERK_SECRET_KEY=sk_live_xxxxxxxxxxxxxxxxxxxxxx\n\n# you need to config the clerk webhook secret key if you want to use the clerk with database\n#CLERK_WEBHOOK_SECRET=whsec_xxxxxxxxxxxxxxxxxxxxxx\n\n\n# NextAuth related configurations\n# NEXT_PUBLIC_ENABLE_NEXT_AUTH=1\n# NEXT_AUTH_SECRET=\n\n# Auth0 configurations\n# AUTH_AUTH0_ID=\n# AUTH_AUTH0_SECRET=\n# AUTH_AUTH0_ISSUER=https://your-domain.auth0.com\n\n########################################\n########## Server Database #############\n########################################\n\n# Specify the service mode as server if you want to use the server database\n# NEXT_PUBLIC_SERVICE_MODE=server\n\n# Postgres database URL\n# DATABASE_URL=postgres://username:password@host:port/database\n\n# use `openssl rand -base64 32` to generate a key for the encryption of the database\n# we use this key to encrypt the user api key and proxy url\n#KEY_VAULTS_SECRET=xxxxx/xxxxxxxxxxxxxx=\n\n# Specify the Embedding model and Reranker model(unImplemented)\n# DEFAULT_FILES_CONFIG=\"embedding_model=openai/embedding-text-3-small,reranker_model=cohere/rerank-english-v3.0,query_mode=full_text\"\n\n########################################\n########## MCP Service Config ##########\n########################################\n\n# MCP tool call timeout (milliseconds)\n# MCP_TOOL_TIMEOUT=60000\n"}}, "backend/data/providers.json": {"7e63a3e4e57d63cb021a2c074dc7b8d7447a7bf3": {"t": 1785746274.8362677, "n": 754, "h": "b32951704c1bb9d0", "c": "{\n \"deepseek\": {\n \"enabled\": true,\n \"api_key\": \"\",\n \"base_url\": \"https://api.deepseek.com\",\n \"models\": {\n \"deepseek-chat\": {\n \"enabled\": true\n },\n \"deepseek-reasoner\": {\n \"enabled\": true\n },\n \"deepseek-coder\": {\n \"enabled\": true\n }\n }\n },\n \"openai\": {\n \"enabled\": false,\n \"api_key\": \"\",\n \"base_url\": \"https://api.openai.com\",\n \"models\": {\n \"gpt-4o\": {\n \"enabled\": true\n },\n \"gpt-4o-mini\": {\n \"enabled\": true\n },\n \"gpt-4-turbo\": {\n \"enabled\": false\n },\n \"gpt-3.5-turbo\": {\n \"enabled\": false\n },\n \"o1\": {\n \"enabled\": false\n },\n \"o1-mini\": {\n \"enabled\": false\n }\n }\n }\n}"}, "110d090f803a54543dbb5e46ca1a724c121cc6d8": {"t": 1785761366.270949, "n": 754, "h": "b32951704c1bb9d0", "c": "{\n \"deepseek\": {\n \"enabled\": true,\n \"api_key\": \"\",\n \"base_url\": \"https://api.deepseek.com\",\n \"models\": {\n \"deepseek-chat\": {\n \"enabled\": true\n },\n \"deepseek-reasoner\": {\n \"enabled\": true\n },\n \"deepseek-coder\": {\n \"enabled\": true\n }\n }\n },\n \"openai\": {\n \"enabled\": false,\n \"api_key\": \"\",\n \"base_url\": \"https://api.openai.com\",\n \"models\": {\n \"gpt-4o\": {\n \"enabled\": true\n },\n \"gpt-4o-mini\": {\n \"enabled\": true\n },\n \"gpt-4-turbo\": {\n \"enabled\": false\n },\n \"gpt-3.5-turbo\": {\n \"enabled\": false\n },\n \"o1\": {\n \"enabled\": false\n },\n \"o1-mini\": {\n \"enabled\": false\n }\n }\n }\n}"}}, "frontend/packages/model-runtime/src/ai360/index.ts": {"7e63a3e4e57d63cb021a2c074dc7b8d7447a7bf3": {"t": 1785809832.286438, "n": 2148, "h": "4451b680aac063de", "c": "import type { ChatModelCard } from '@/types/llm';\n\nimport { ModelProvider } from '../types';\nimport { createOpenAICompatibleRuntime } from '../utils/openaiCompatibleFactory';\n\nexport interface Ai360ModelCard {\n id: string;\n max_tokens: number;\n total_tokens: number;\n}\n\nexport const LobeAi360AI = createOpenAICompatibleRuntime({\n baseURL: 'https://api.360.cn/v1',\n chatCompletion: {\n handlePayload: (payload) => {\n const { enabledSearch, tools, ...rest } = payload;\n\n const ai360Tools = enabledSearch\n ? [\n ...(tools || []),\n {\n type: 'web_search',\n web_search: {\n search_mode: 'auto',\n },\n },\n ]\n : tools;\n\n return {\n ...rest,\n stream: !ai360Tools,\n tools: ai360Tools,\n } as any;\n },\n },\n debug: {\n chatCompletion: () => process.env.DEBUG_AI360_CHAT_COMPLETION === '1',\n },\n models: async ({ client }) => {\n const { LOBE_DEFAULT_MODEL_LIST } = await import('@/config/aiModels');\n\n const reasoningKeywords = ['360gpt2-o1', '360zhinao2-o1'];\n\n const modelsPage = (await client.models.list()) as any;\n const modelList: Ai360ModelCard[] = modelsPage.data;\n\n return modelList\n .map((model) => {\n const knownModel = LOBE_DEFAULT_MODEL_LIST.find(\n (m) => model.id.toLowerCase() === m.id.toLowerCase(),\n );\n\n return {\n contextWindowTokens: model.total_tokens,\n displayName: knownModel?.displayName ?? undefined,\n enabled: knownModel?.enabled || false,\n functionCall: model.id === '360gpt-pro' || knownModel?.abilities?.functionCall || false,\n id: model.id,\n maxTokens: typeof model.max_tokens === 'number' ? model.max_tokens : undefined,\n reasoning:\n reasoningKeywords.some((keyword) => model.id.toLowerCase().includes(keyword)) ||\n knownModel?.abilities?.reasoning ||\n false,\n vision: knownModel?.abilities?.vision || false,\n };\n })\n .filter(Boolean) as ChatModelCard[];\n },\n provider: ModelProvider.Ai360,\n});\n"}}, "frontend/src/config/modelProviders/sensenova.ts": {"7e63a3e4e57d63cb021a2c074dc7b8d7447a7bf3": {"t": 1785809865.6398544, "n": 2657, "h": "84b542d5e19c7103", "c": "import { ModelProviderCard } from '@/types/llm';\n\n// ref https://platform.sensenova.cn/pricing\n// ref https://platform.sensenova.cn/release?path=/release-202409.md\nconst SenseNova: ModelProviderCard = {\n chatModels: [\n {\n contextWindowTokens: 131_072,\n description:\n '最新版本模型 (V5.5),128K上下文长度,在数学推理、英文对话、指令跟随以及长文本理解等领域能力显著提升,比肩GPT-4o',\n displayName: 'SenseChat 5.5',\n enabled: true,\n functionCall: true,\n id: 'SenseChat-5',\n },\n /*\n // Not compatible with local mode (Not support Base64 Image)\n {\n description: '最新版本模型 (V5.5),16K上下文长度,支持多图的输入,全面实现模型基础能力优化,在对象属性识别、空间关系、动作事件识别、场景理解、情感识别、逻辑常识推理和文本理解生成上都实现了较大提升。',\n displayName: 'SenseChat 5.5 Vision',\n enabled: true,\n id: 'SenseChat-Vision',\n tokens: 16_384,\n vision: true,\n },\n*/\n {\n contextWindowTokens: 32_768,\n description: '适用于快速问答、模型微调场景',\n displayName: 'SenseChat 5.0 Turbo',\n enabled: true,\n id: 'SenseChat-Turbo',\n },\n {\n contextWindowTokens: 32_768,\n description:\n '32K上下文长度,在粤语的对话理解上超越了GPT-4,在知识、推理、数学及代码编写等多个领域均能与GPT-4 Turbo相媲美',\n displayName: 'SenseChat 5.0 Cantonese',\n id: 'SenseChat-5-Cantonese',\n },\n {\n contextWindowTokens: 131_072,\n description: '基础版本模型 (V4),128K上下文长度,在长文本理解及生成等任务中表现出色',\n displayName: 'SenseChat 4.0 128K',\n enabled: true,\n id: 'SenseChat-128K',\n },\n {\n contextWindowTokens: 32_768,\n description: '基础版本模型 (V4),32K上下文长度,灵活应用于各类场景',\n displayName: 'SenseChat 4.0 32K',\n enabled: true,\n id: 'SenseChat-32K',\n },\n {\n contextWindowTokens: 4096,\n description: '基础版本模型 (V4),4K上下文长度,通用能力强大',\n displayName: 'SenseChat 4.0 4K',\n enabled: true,\n id: 'SenseChat',\n },\n {\n contextWindowTokens: 8192,\n description: '标准版模型,8K上下文长度,高响应速度',\n displayName: 'SenseChat Character',\n id: 'SenseChat-Character',\n },\n {\n contextWindowTokens: 32_768,\n description: '高级版模型,32K上下文长度,能力全面提升,支持中/英文对话',\n displayName: 'SenseChat Character Pro',\n id: 'SenseChat-Character-Pro',\n },\n ],\n checkModel: 'SenseChat-Turbo',\n description: '商汤日日新,依托商汤大装置的强大的基础支撑,提供高效易用的全栈大模型服务。',\n disableBrowserRequest: true,\n id: 'sensenova',\n modelList: { showModelFetcher: true },\n modelsUrl: 'https://platform.sensenova.cn/pricing',\n name: 'SenseNova',\n settings: {\n disableBrowserRequest: true,\n proxyUrl: {\n placeholder: 'https://api.sensenova.cn/compatible-mode/v1',\n },\n sdkType: 'openai',\n showModelFetcher: true,\n },\n url: 'https://platform.sensenova.cn/home',\n};\n\nexport default SenseNova;\n"}}, "frontend/packages/model-runtime/src/sensenova/index.ts": {"7e63a3e4e57d63cb021a2c074dc7b8d7447a7bf3": {"t": 1785809865.91172, "n": 3306, "h": "e58b3f877d0ecb45", "c": "import type { ChatModelCard } from '@/types/llm';\n\nimport { ModelProvider } from '../types';\nimport { createOpenAICompatibleRuntime } from '../utils/openaiCompatibleFactory';\nimport { convertSenseNovaMessage } from '../utils/sensenovaHelpers';\n\nexport interface SenseNovaModelCard {\n id: string;\n}\n\nexport const LobeSenseNovaAI = createOpenAICompatibleRuntime({\n baseURL: 'https://api.sensenova.cn/compatible-mode/v1',\n chatCompletion: {\n handlePayload: (payload) => {\n const {\n frequency_penalty,\n max_tokens,\n messages,\n model,\n temperature,\n thinking,\n top_p,\n ...rest\n } = payload;\n\n return {\n ...rest,\n frequency_penalty:\n frequency_penalty !== undefined && frequency_penalty > 0 && frequency_penalty <= 2\n ? frequency_penalty\n : undefined,\n max_new_tokens: max_tokens !== undefined && max_tokens > 0 ? max_tokens : undefined,\n messages: messages.map((message) =>\n message.role !== 'user' || !model || !/^Sense(Nova-V6|Chat-Vision)/.test(model)\n ? message\n : { ...message, content: convertSenseNovaMessage(message.content) },\n ) as any[],\n model,\n stream: true,\n temperature:\n temperature !== undefined && temperature > 0 && temperature <= 2\n ? temperature\n : undefined,\n thinking: thinking\n ? model && model.includes('-V6-5-') && thinking.type === 'enabled'\n ? { enabled: true }\n : { enabled: false }\n : undefined,\n top_p: top_p !== undefined && top_p > 0 && top_p < 1 ? top_p : undefined,\n } as any;\n },\n },\n debug: {\n chatCompletion: () => process.env.DEBUG_SENSENOVA_CHAT_COMPLETION === '1',\n },\n models: async ({ client }) => {\n const { LOBE_DEFAULT_MODEL_LIST } = await import('@/config/aiModels');\n\n const functionCallKeywords = ['1202'];\n\n const visionKeywords = ['vision', 'sensenova-v6'];\n\n const reasoningKeywords = ['deepseek-r1', 'reasoner'];\n\n client.baseURL = 'https://api.sensenova.cn/v1/llm';\n\n const modelsPage = (await client.models.list()) as any;\n const modelList: SenseNovaModelCard[] = modelsPage.data;\n\n return modelList\n .map((model) => {\n const knownModel = LOBE_DEFAULT_MODEL_LIST.find(\n (m) => model.id.toLowerCase() === m.id.toLowerCase(),\n );\n\n return {\n contextWindowTokens: knownModel?.contextWindowTokens ?? undefined,\n displayName: knownModel?.displayName ?? undefined,\n enabled: knownModel?.enabled || false,\n functionCall:\n functionCallKeywords.some((keyword) => model.id.toLowerCase().includes(keyword)) ||\n knownModel?.abilities?.functionCall ||\n false,\n id: model.id,\n reasoning:\n reasoningKeywords.some((keyword) => model.id.toLowerCase().includes(keyword)) ||\n knownModel?.abilities?.reasoning ||\n false,\n vision:\n visionKeywords.some((keyword) => model.id.toLowerCase().includes(keyword)) ||\n knownModel?.abilities?.vision ||\n false,\n };\n })\n .filter(Boolean) as ChatModelCard[];\n },\n provider: ModelProvider.SenseNova,\n});\n"}}, "frontend/packages/model-runtime/src/tencentcloud/index.ts": {"7e63a3e4e57d63cb021a2c074dc7b8d7447a7bf3": {"t": 1785846963.3485126, "n": 1562, "h": "10bd88ccdd2d5be4", "c": "import type { ChatModelCard } from '@/types/llm';\n\nimport { ModelProvider } from '../types';\nimport { createOpenAICompatibleRuntime } from '../utils/openaiCompatibleFactory';\n\nexport interface TencentCloudModelCard {\n id: string;\n}\n\nexport const LobeTencentCloudAI = createOpenAICompatibleRuntime({\n baseURL: 'https://api.lkeap.cloud.tencent.com/v1',\n debug: {\n chatCompletion: () => process.env.DEBUG_TENCENT_CLOUD_CHAT_COMPLETION === '1',\n },\n models: async ({ client }) => {\n const { LOBE_DEFAULT_MODEL_LIST } = await import('@/config/aiModels');\n\n const reasoningKeywords = ['deepseek-r1'];\n\n const modelsPage = (await client.models.list()) as any;\n const modelList: TencentCloudModelCard[] = modelsPage.data;\n\n return modelList\n .map((model) => {\n const knownModel = LOBE_DEFAULT_MODEL_LIST.find(\n (m) => model.id.toLowerCase() === m.id.toLowerCase(),\n );\n\n return {\n contextWindowTokens: knownModel?.contextWindowTokens ?? undefined,\n displayName: knownModel?.displayName ?? undefined,\n enabled: knownModel?.enabled || false,\n functionCall: knownModel?.abilities?.functionCall || false,\n id: model.id,\n reasoning:\n reasoningKeywords.some((keyword) => model.id.toLowerCase().includes(keyword)) ||\n knownModel?.abilities?.reasoning ||\n false,\n vision: knownModel?.abilities?.vision || false,\n };\n })\n .filter(Boolean) as ChatModelCard[];\n },\n provider: ModelProvider.TencentCloud,\n});\n"}}}}