Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/alceupassos_hub.json
T

1 line
1.0 MiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"repo": "alceupassos/hub", "files": {"packages/model-bank/src/aiModels/infiniai.ts": {"ab601b2ced51e606fcd3554040adcd1129eadaf9": {"t": 1785595462.5868099, "n": 33170, "h": "096e12555f43c42b", "c": "import { type AIChatModelCard } from '../types/aiModel';\n\n// https://cloud.infini-ai.com/genstudio/model\n\nconst infiniaiChatModels: AIChatModelCard[] = [\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 1_048_576,\n description:\n 'DeepSeek-V4-Flash is a Mixture-of-Experts (MoE) language model in the DeepSeek V4 series designed for high throughput and deployment efficiency. With ~284B total parameters and ~13B active parameters per token, it supports up to 1M tokens context window. Compared to the flagship version, the Flash variant emphasizes inference cost, response speed, and deployment friendliness, making it suitable for large-scale online services and cost-sensitive applications. The V4 series adopts a hybrid attention architecture to improve long context efficiency, and the Flash version retains the long context, reasoning, and coding capabilities of the V4 series with a smaller active parameter scale.',\n displayName: 'DeepSeek V4 Flash',\n family: 'deepseek',\n generation: 'deepseek-v4',\n id: 'deepseek-v4-flash',\n maxOutput: 393_216,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 1, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 2, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n releasedAt: '2026-04-24',\n settings: {\n extendParams: ['enableReasoning'],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 1_048_576,\n description:\n 'DeepSeek-V4-Pro is the flagship Mixture-of-Experts (MoE) language model in the DeepSeek V4 series. With ~1.6T total parameters and ~49B active parameters per token, it supports up to 1M tokens context window. This model targets high-complexity scenarios such as complex reasoning, code generation, long context understanding, and agent workflows, making it suitable as a production task model requiring higher capability ceilings. The V4 series adopts a hybrid attention architecture to improve long context efficiency, allowing trade-offs between speed and inference depth based on task complexity.',\n displayName: 'DeepSeek V4 Pro',\n enabled: true,\n family: 'deepseek',\n generation: 'deepseek-v4',\n id: 'deepseek-v4-pro',\n maxOutput: 393_216,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 12, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 24, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n releasedAt: '2026-04-24',\n settings: {\n extendParams: ['enableReasoning'],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n vision: true,\n },\n contextWindowTokens: 262_144,\n description:\n 'Kimi K2.6 is an open-source native multimodal agent model launched by Moonshot AI, targeting high-complexity scenarios such as long-range programming, code-driven design, proactive autonomous execution, and clustered task orchestration. The model adopts a MoE architecture with about 1T total parameters and 32B active parameters, supports a 256K context window, and integrates the MoonViT visual encoder, enabling stronger integrated capabilities in text, code, and visual collaboration tasks. Compared to previous generations, Kimi K2.6 emphasizes end-to-end completion capabilities in real engineering workflows, making it suitable for complex code generation and repair, front-end page and lightweight full-stack process construction, multi-agent collaborative execution, and long-term autonomous task processing.',\n displayName: 'Kimi K2.6',\n enabled: true,\n family: 'kimi',\n generation: 'kimi-k2.6',\n id: 'kimi-k2.6',\n maxOutput: 131_072,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 6.5, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 27, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n releasedAt: '2026-04-17',\n settings: {\n extendParams: ['enableReasoning'],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n vision: true,\n },\n contextWindowTokens: 262_144,\n description:\n 'Kimi K2.5 is an open-source native multimodal agent model built on Kimi-K2-Base. It combines vision and language understanding with advanced agent capabilities, instant and thinking modes, and both conversational and agentic workflows.',\n displayName: 'Kimi K2.5',\n family: 'kimi',\n generation: 'kimi-k2.5',\n id: 'kimi-k2.5',\n maxOutput: 65_536,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 4, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 21, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n releasedAt: '2026-04-02',\n settings: {\n extendParams: ['enableReasoning'],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 262_144,\n description:\n 'MiMo-V2-Pro is Xiaomi’s flagship base model for complex reasoning, long-document processing, and agent workflows. It uses a trillion-parameter MoE architecture with 32B active parameters, supports a 256K context window, and is optimized for Claude-compatible APIs, coding, and multi-step planning.',\n displayName: 'MiMo-V2 Pro',\n family: 'mimo',\n id: 'mimo-v2-pro',\n knowledgeCutoff: '2024-12',\n maxOutput: 262_144,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 7, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 2.1, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n releasedAt: '2026-04-15',\n settings: {\n extendParams: ['enableReasoning'],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 198_000,\n description:\n 'GLM-5.1 is GLM AI’s new generation flagship text model for Agentic Engineering.Compared with GLM-5, GLM-5.1 is further enhanced in code generation, warehouse-level engineering tasks, terminal execution and long-range agent interaction, and is more suitable for handling complex development workflows that require continuous planning, repeated trials, cross-tool collaboration and multiple rounds of debugging.',\n displayName: 'GLM-5.1',\n enabled: true,\n family: 'glm',\n generation: 'glm-5.1',\n id: 'glm-5.1',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 8, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 28, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n releasedAt: '2026-04-08',\n settings: {\n extendParams: ['enableReasoning'],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 204_800,\n description:\n 'MiniMax-M2.7 has reached or refreshed the latest SOTA benchmark in programming, tool calling and search, office productivity and many other scenarios, officially starting the journey of model recursive self-improvement.',\n displayName: 'MiniMax M2.7',\n family: 'minimax',\n generation: 'minimax-m2.7',\n id: 'minimax-m2.7',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 2.1, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 8.4, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n releasedAt: '2026-03-17',\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n },\n contextWindowTokens: 131_072,\n description:\n 'DeepSeek-V3.2 is a model that balances high computational efficiency with excellent reasoning and agent performance.',\n displayName: 'DeepSeek V3.2',\n family: 'deepseek',\n generation: 'deepseek-v3.2',\n id: 'deepseek-v3.2',\n maxOutput: 8192,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 2, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 3, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n releasedAt: '2025-12-02',\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 131_072,\n description:\n 'DeepSeek-V3.2 Thinking is the thinking mode variant of DeepSeek-V3.2, focused on reasoning tasks.',\n displayName: 'DeepSeek V3.2 Thinking',\n family: 'deepseek',\n generation: 'deepseek-v3.2',\n id: 'deepseek-v3.2-thinking',\n maxOutput: 65_536,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 2, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 3, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n releasedAt: '2025-12-02',\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n vision: true,\n },\n contextWindowTokens: 131_072,\n description:\n 'GLM-4.6V (106B) is a foundational model designed for cloud and high-performance cluster scenarios. GLM-4.6V extends the context window to 128k tokens and achieves SOTA visual understanding performance among models of the same parameter scale. The key is that GLM-4.6V integrates native Function Calling capabilities for the first time, effectively bridging the gap between visual perception and executable actions, providing a unified technical foundation for multimodal Agents in real business scenarios.',\n displayName: 'GLM-4.6V',\n family: 'glm',\n generation: 'glm-4.6',\n id: 'glm-4.6v',\n maxOutput: 4096,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 2, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 6, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n settings: {\n extendParams: ['enableReasoning'],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 198_000,\n description:\n 'A strong reasoning and agentic model from Z.ai with 744B total parameters (40B active), built for complex systems engineering and long-horizon tasks.',\n displayName: 'GLM-5',\n family: 'glm',\n generation: 'glm-5',\n id: 'glm-5',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 6, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 22, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n releasedAt: '2026-02-13',\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 204_800,\n description:\n 'MiniMax-M2.5 is a state-of-the-art large language model designed for real-world productivity and coding tasks.',\n displayName: 'MiniMax M2.5',\n family: 'minimax',\n generation: 'minimax-m2.5',\n id: 'minimax-m2.5',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 2.1, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 8.4, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n releasedAt: '2026-02-13',\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 262_144,\n description:\n \"Kimi K2 Thinking is the latest and most powerful open-source reasoning model. It significantly expands multi-step reasoning depth and maintains stable tool use across 200-300 consecutive tool calls, setting new records on Humanity's Last Exam (HLE), BrowseComp, and other benchmarks. It also excels in coding, math, logical reasoning, and agent scenarios. Built on a MoE architecture with about 1T total parameters, it supports a 256K context window and tool calling.\",\n displayName: 'Kimi K2 Thinking',\n family: 'kimi',\n generation: 'kimi-k2',\n id: 'kimi-k2-thinking',\n maxOutput: 32_768,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 4, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 16, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n releasedAt: '2025-11-07',\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 200_000,\n description:\n 'MiniMax-M2.1 is the latest version of the MiniMax series, optimized for multilingual programming and real-world complex tasks. As an AI-native model, MiniMax-M2.1 achieves significant improvements in model performance, agent framework support, and multi-scenario adaptation, aiming to help enterprises and individuals find AI-native work and lifestyle more quickly.',\n displayName: 'MiniMax M2.1',\n family: 'minimax',\n generation: 'minimax-m2.1',\n id: 'minimax-m2.1',\n maxOutput: 200_000,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 2.1, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 8.4, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 131_072,\n description:\n 'GLM-4.7 is the latest large language model launched by Zhipu AI, with enhanced reasoning and generation capabilities.',\n displayName: 'GLM-4.7',\n family: 'glm',\n generation: 'glm-4.7',\n id: 'glm-4.7',\n maxOutput: 4096,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 3, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 14, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n settings: {\n extendParams: ['enableReasoning'],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 131_072,\n description:\n 'GLM-4.6 is the latest large language model launched by Zhipu AI, with enhanced reasoning and generation capabilities.',\n displayName: 'GLM-4.6',\n family: 'glm',\n generation: 'glm-4.6',\n id: 'glm-4.6',\n maxOutput: 4096,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 3, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 14, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n settings: {\n extendParams: ['enableReasoning'],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 131_072,\n description:\n 'DeepSeek-V3.2-Exp is an experimental DeepSeek LLM with stronger reasoning and generation.',\n displayName: 'DeepSeek V3.2 Exp',\n family: 'deepseek',\n generation: 'deepseek-v3.2',\n id: 'deepseek-v3.2-exp',\n maxOutput: 65_536,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 2, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 3, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n settings: {\n extendParams: ['enableReasoning'],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n vision: true,\n },\n contextWindowTokens: 131_072,\n description:\n 'Qwen3 VL 235B A22B Instruct is a multimodal model from Qwen, supporting vision understanding and reasoning.',\n displayName: 'Qwen3 VL 235B A22B Instruct',\n family: 'qwen',\n generation: 'qwen3',\n id: 'qwen3-vl-235b-a22b-instruct',\n maxOutput: 32_768,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 2, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 8, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n vision: true,\n },\n contextWindowTokens: 131_072,\n description:\n 'Qwen3 VL 235B A22B Thinking is a multimodal reasoning model from Qwen, supporting vision understanding and reasoning.',\n displayName: 'Qwen3 VL 235B A22B Thinking',\n family: 'qwen',\n generation: 'qwen3',\n id: 'qwen3-vl-235b-a22b-thinking',\n maxOutput: 32_768,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 2, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 20, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 131_072,\n description:\n 'DeepSeek-V3.1-Terminus is a terminal-optimized LLM from DeepSeek, tailored for terminal devices.',\n displayName: 'DeepSeek V3.1 Terminus',\n family: 'deepseek',\n generation: 'deepseek-v3.1',\n id: 'deepseek-v3.1-terminus',\n maxOutput: 65_536,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 4, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 12, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n settings: {\n extendParams: ['enableReasoning'],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 131_072,\n description:\n 'A next-generation thinking-mode open-source model based on Qwen3. Compared to the previous version (Qwen3-235B-A22B-Thinking-2507), it improves instruction following and provides more concise summaries.',\n displayName: 'Qwen3 Next 80B A3B Thinking',\n family: 'qwen',\n generation: 'qwen3',\n id: 'qwen3-next-80b-a3b-thinking',\n maxOutput: 32_768,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 1, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 10, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n },\n contextWindowTokens: 131_072,\n description:\n 'A next-generation non-thinking open-source model based on Qwen3. Compared to the previous version (Qwen3-235B-A22B-Instruct-2507), it has better Chinese text understanding, stronger logical reasoning, and improved text generation performance.',\n displayName: 'Qwen3 Next 80B A3B Instruct',\n family: 'qwen',\n generation: 'qwen3',\n id: 'qwen3-next-80b-a3b-instruct',\n maxOutput: 32_768,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 1, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 10, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n abilities: {\n reasoning: true,\n },\n contextWindowTokens: 131_072,\n description:\n 'DeepSeek V3.1 uses a hybrid reasoning architecture with both thinking and non-thinking modes.',\n displayName: 'DeepSeek V3.1',\n family: 'deepseek',\n generation: 'deepseek-v3.1',\n id: 'deepseek-v3.1',\n maxOutput: 32_768,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 4, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 12, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n settings: {\n extendParams: ['enableReasoning'],\n },\n type: 'chat',\n },\n {\n abilities: {\n reasoning: true,\n },\n contextWindowTokens: 64_000,\n description: 'Baichuan M2 32B is a MoE model from Baichuan Intelligence with strong reasoning.',\n displayName: 'Baichuan M2 32B',\n family: 'baichuan',\n generation: 'baichuan-m2',\n id: 'baichuan-m2-32b',\n maxOutput: 8192,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 2.9, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 11.6, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n vision: true,\n },\n contextWindowTokens: 131_072,\n description:\n 'GLM-4.5V is a multimodal model from Zhipu AI for vision understanding and reasoning.',\n displayName: 'GLM-4.5V',\n family: 'glm',\n generation: 'glm-4.5',\n id: 'glm-4.5v',\n maxOutput: 4096,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 4, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 12, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n settings: {\n extendParams: ['enableReasoning'],\n },\n type: 'chat',\n },\n {\n abilities: {\n reasoning: true,\n },\n contextWindowTokens: 131_072,\n description:\n 'GLM-4.5 is a hybrid reasoning model from Zhipu AI built for agents, with thinking and non-thinking modes.',\n displayName: 'GLM-4.5',\n family: 'glm',\n generation: 'glm-4.5',\n id: 'glm-4.5',\n maxOutput: 4096,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 2, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 8, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n settings: {\n extendParams: ['enableReasoning'],\n },\n type: 'chat',\n },\n {\n contextWindowTokens: 131_072,\n description: 'GLM-4.5-Air is a lightweight LLM from Zhipu AI with efficient reasoning.',\n displayName: 'GLM-4.5-Air',\n family: 'glm',\n generation: 'glm-4.5',\n id: 'glm-4.5-air',\n maxOutput: 4096,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0.6, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 4, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n settings: {\n extendParams: ['enableReasoning'],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n },\n contextWindowTokens: 262_144,\n description:\n 'The open-source Qwen code model. The latest qwen3-coder-480b-a35b-instruct is a Qwen3-based code generation model with strong coding-agent capabilities, good at tool use and environment interaction, enabling autonomous programming while retaining strong general abilities.',\n displayName: 'Qwen3 Coder 480B A35B',\n family: 'qwen',\n generation: 'qwen3',\n id: 'qwen3-coder-480b-a35b-instruct',\n maxOutput: 32_768,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 9, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 36, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n },\n contextWindowTokens: 131_072,\n description:\n 'A non-thinking open-source model based on Qwen3. Compared to the previous version (Qwen3-235B-A22B), it slightly improves subjective creative ability and model safety.',\n displayName: 'Qwen3 235B A22B Instruct 2507',\n family: 'qwen',\n generation: 'qwen3',\n id: 'qwen3-235b-a22b-instruct-2507',\n maxOutput: 8192,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 2, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 8, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 131_072,\n description:\n 'Qwen3-8B is the third-generation Qwen LLM with 8.2B parameters, designed for efficient reasoning and multilingual tasks. It supports seamless switching between thinking mode (complex reasoning) and non-thinking mode (general chat), excelling in math, coding, commonsense reasoning, and multilingual instruction following.',\n displayName: 'Qwen3 8B',\n family: 'qwen',\n generation: 'qwen3',\n id: 'qwen3-8b',\n maxOutput: 8192,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 1, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 4, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n settings: {\n extendParams: ['enableReasoning'],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 131_072,\n description:\n 'Qwen3-14B is the third-generation Qwen LLM with 14.8B parameters, designed for efficient reasoning and multilingual tasks. It supports seamless switching between thinking mode (complex reasoning) and non-thinking mode (general chat), excelling in math, coding, commonsense reasoning, and multilingual instruction following.',\n displayName: 'Qwen3 14B',\n family: 'qwen',\n generation: 'qwen3',\n id: 'qwen3-14b',\n maxOutput: 8192,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 2, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 8, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 131_072,\n description:\n 'Qwen3-32B is the third-generation Qwen LLM with 32.8B parameters, designed for efficient reasoning and multilingual tasks. It supports seamless switching between thinking mode (complex reasoning) and non-thinking mode (general chat), excelling in math, coding, commonsense reasoning, and multilingual instruction following.',\n displayName: 'Qwen3 32B',\n family: 'qwen',\n generation: 'qwen3',\n id: 'qwen3-32b',\n maxOutput: 8192,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 2.9, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 11.6, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n settings: {\n extendParams: ['enableReasoning'],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 131_072,\n description:\n 'Qwen3-30B-A3B is a third-generation Qwen LLM using a MoE architecture with 30.5B total parameters and 3.3B active per token. It supports seamless switching between thinking mode (complex reasoning) and non-thinking mode (general chat), excelling in math, coding, commonsense reasoning, and multilingual instruction following.',\n displayName: 'Qwen3 30B A3B',\n family: 'qwen',\n generation: 'qwen3',\n id: 'qwen3-30b-a3b',\n maxOutput: 8192,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 2.2, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 8.7, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n settings: {\n extendParams: ['enableReasoning'],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 131_072,\n description:\n 'Qwen3-235B-A22B is a third-generation Qwen LLM using a MoE architecture with 235B total parameters and 22B active per token. It supports seamless switching between thinking mode (complex reasoning) and non-thinking mode (general chat), excelling in math, coding, commonsense reasoning, and multilingual instruction following.',\n displayName: 'Qwen3 235B A22B',\n family: 'qwen',\n generation: 'qwen3',\n id: 'qwen3-235b-a22b',\n maxOutput: 8192,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 5, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 20, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n settings: {\n extendParams: ['enableReasoning'],\n },\n type: 'chat',\n },\n {\n contextWindowTokens: 131_072,\n description:\n 'DeepSeek-V3-0324 is a powerful MoE LLM with 671B total parameters and 37B active per token. It uses Multi-Head Latent Attention (MLA) and the DeepSeekMoE architecture for efficient reasoning and economical training, and significantly improves over the previous DeepSeek-V3.',\n displayName: 'DeepSeek V3 0324',\n family: 'deepseek',\n generation: 'deepseek-v3',\n id: 'deepseek-v3',\n maxOutput: 16_384,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 2, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 8, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 131_072,\n description:\n 'DeepSeek-R1 is an LLM focused on reasoning, achieving performance comparable to OpenAI o1 on math, code, and reasoning tasks through an innovative training pipeline. It is trained with a combination of cold-start data and large-scale reinforcement learning.',\n displayName: 'DeepSeek R1',\n family: 'deepseek',\n generation: 'deepseek-r1',\n id: 'deepseek-r1',\n maxOutput: 32_768,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 4, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 16, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n abilities: {\n reasoning: true,\n },\n contextWindowTokens: 32_000,\n description: 'DeepSeek R1 Distill Qwen 32B is a DeepSeek distilled model based on Qwen.',\n displayName: 'DeepSeek R1 Distill Qwen 32B',\n family: 'deepseek',\n generation: 'deepseek-r1-distill',\n id: 'deepseek-r1-distill-qwen-32b',\n maxOutput: 8192,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 2.9, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 2.9, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n contextWindowTokens: 32_000,\n description: 'Megrez 3B Instruct is a small, efficient model from Wuwen Xinqiong.',\n displayName: 'Megrez 3B Instruct',\n id: 'megrez-3b-instruct',\n maxOutput: 4096,\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: 131_072,\n description:\n 'Access requires an application. GPT-OSS-120B is an open-source large language model from OpenAI with strong text generation capability.',\n displayName: 'GPT-OSS-120B',\n family: 'gpt-oss',\n generation: 'gpt-oss',\n id: 'gpt-oss-120b',\n knowledgeCutoff: '2024-06',\n maxOutput: 32_768,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0.8, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 3.2, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n contextWindowTokens: 131_072,\n description:\n 'Access requires an application. GPT-OSS-20B is an open-source mid-size language model from OpenAI with efficient text generation.',\n displayName: 'GPT-OSS-20B',\n family: 'gpt-oss',\n generation: 'gpt-oss',\n id: 'gpt-oss-20b',\n knowledgeCutoff: '2024-06',\n maxOutput: 32_768,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0.4, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 1.6, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n abilities: {\n reasoning: true,\n },\n contextWindowTokens: 131_072,\n description: 'Enterprise dedicated service model with bundled concurrency.',\n displayName: 'DeepSeek R1 (Pro)',\n family: 'deepseek',\n generation: 'deepseek-r1',\n id: 'pro-deepseek-r1',\n maxOutput: 32_768,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 4, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 16, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n {\n contextWindowTokens: 131_072,\n description: 'Enterprise dedicated service model with bundled concurrency.',\n displayName: 'DeepSeek V3 (Pro)',\n family: 'deepseek',\n generation: 'deepseek-v3',\n id: 'pro-deepseek-v3',\n maxOutput: 16_384,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 2, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 8, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n type: 'chat',\n },\n];\n\nexport const allModels = [...infiniaiChatModels];\n\nexport default allModels;\n"}}, "docs/self-hosting/environment-variables/model-provider.zh-CN.mdx": {"ab601b2ced51e606fcd3554040adcd1129eadaf9": {"t": 1785595474.8227391, "n": 17681, "h": "b7218328c4f4e96e", "c": "---\ntitle: LobeHub 模型服务商相关环境变量配置指南\ndescription: 了解如何配置各个模型服务商的环境变量以在 LobeHub 中使用不同的AI模型服务。\ntags:\n - LobeHub\n - 模型服务商\n - 环境变量\n - AI模型\n - 配置指南\n---\n\n# 模型服务商\n\nLobeHub 在部署时提供了丰富的模型服务商相关的环境变量,你可以使用这些环境变量轻松定义需要在 LobeHub 中开启的模型服务商。\n\n## OpenAI\n\n### `ENABLED_OPENAI`\n\n- 类型:可选\n- 描述:默认启用 OpenAI 作为模型供应商,当设为 0 时关闭 OpenAI 服务\n- 默认值:`1`\n- 示例:`0`\n\n### `OPENAI_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 OpenAI 账户页面申请的 API 密钥,可以前往 [这里](https://platform.openai.com/api-keys) 查看\n- 默认值:-\n- 示例:`sk-xxxxxx...xxxxxx`\n\n### `OPENAI_PROXY_URL`\n\n- 类型:可选\n- 描述:如果你手动配置了 OpenAI 接口代理,可以使用此配置项来覆盖默认的 OpenAI API 请求基础 URL\n- 默认值:`https://api.openai.com/v1`\n- 示例:`https://api.chatanywhere.cn` 或 `https://aihubmix.com/v1`\n\n<Callout type={'warning'}>\n 请检查你的代理服务商的请求后缀,有的代理服务商会在请求后缀添加\n `/v1`,有的则不会。如果你在测试时发现 AI 返回的消息为空,请尝试添加 `/v1` 后缀后重试。\n</Callout>\n\n<Callout type={'info'}>\n 是否填写 `/v1` 跟模型服务商有很大关系,比如 openai 的默认地址是 `api.openai.com/v1`\n 。如果你的代理商转发了 `/v1` 这个接口,那么直接填 `proxy.com` 即可。 但如果模型服务商是直接转发了\n `api.openai.com` 域名,那么你就要自己加上 `/v1` 这个 url。\n</Callout>\n\n相关讨论:\n\n- [Docker 安装,配置好环境变量后,为何返回值是空白?](https://github.com/lobehub/lobehub/discussions/623)\n- [使用第三方接口报错的原因](https://github.com/lobehub/lobehub/discussions/734)\n- [代理服务器地址填了聊天没任何反应](https://github.com/lobehub/lobehub/discussions/1065)\n\n### `OPENAI_MODEL_LIST`\n\n- 类型:可选\n- 描述:用来控制模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名=展示名<扩展配置>` 来自定义模型的展示名,用英文逗号隔开。模型定义语法规则见 [模型列表][model-list]\n- 默认值:`-`\n- 示例:`+qwen-7b-chat,+glm-6b,-gpt-3.5-turbo,gpt-4-0125-preview=gpt-4-turbo`\n\n上面示例表示增加 `qwen-7b-chat` 和 `glm-6b` 到模型列表,而从列表中删除 `gpt-3.5-turbo`,并将 `gpt-4-0125-preview` 模型名字展示为 `gpt-4-turbo`。如果你想先禁用所有模型,再启用指定模型,可以使用 `-all,+gpt-3.5-turbo`,则表示仅启用 `gpt-3.5-turbo`。\n\n你可以在 [modelProviders](https://github.com/lobehub/lobehub/tree/main/src/config/modelProviders) 查找到当前的所有模型名。\n\n## Azure OpenAI\n\n如果你需要使用 Azure OpenAI 来提供模型服务,可以查阅 [使用 Azure OpenAI 部署](/zh/docs/self-hosting/examples/azure-openai) 章节查看详细步骤,这里将列举和 Azure OpenAI 相关的环境变量。\n\n### `AZURE_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 Azure OpenAI 账户页面申请的 API 密钥\n- 默认值:-\n- 示例:`c55168be3874490ef0565d9779ecd5a6`\n\n### `AZURE_ENDPOINT`\n\n- 类型:必选\n- 描述:Azure API 地址,从 Azure 门户检查资源时,可在 “密钥和终结点” 部分中找到此值\n- 默认值:`-`\n- 示例:`https://docs-test-001.openai.azure.com`\n\n### `AZURE_API_VERSION`\n\n- 类型:必选\n- 描述:Azure 的 API 版本,遵循 YYYY-MM-DD 格式\n- 默认值:`-`\n- 示例:`2024-02-01`,查阅 [最新版本](https://docs.microsoft.com/zh-cn/azure/developer/javascript/api-reference/es-modules/azure-sdk/ai-translation/translationconfiguration?view=azure-node-latest#api-version)\n\n### `AZURE_MODEL_LIST`\n\n- 类型:必选\n- 描述:用来控制模型列表,使用 `模型名->部署名=展示名` 来自定义模型的展示名,用英文逗号隔开。支持扩展能力,其余语法规则详见 [模型列表][model-list]\n- 默认值:`-`\n- 示例:`gpt-35-turbo->my-deploy=GPT 3.5 Turbo` 或 `gpt-4-turbo->my-gpt4=GPT 4 Turbo<128000:vision:fc>`\n\n## Google AI\n\n### `GOOGLE_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 Google AI Platform 申请的 API 密钥,用于访问 Google AI 服务\n- 默认值:-\n- 示例:`AIraDyDwcw254kwJaGjI9wwaHcdDCS__Vt3xQE`\n\n### `GOOGLE_PROXY_URL`\n\n- 类型:可选\n- 描述:如果你手动配置了 Google 接口代理,可以使用此配置项来覆盖默认的 Google API 请求基础 URL\n- 默认值:`https://generativelanguage.googleapis.com`\n- 示例:`https://api.genai.gd.edu.kg/google`\n\n### `GOOGLE_MODEL_LIST`\n\n- 类型:可选\n- 描述:用来控制模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名=展示名<扩展配置>` 来自定义模型的展示名,用英文逗号隔开。模型定义语法规则见 [模型列表][model-list]\n- 默认值:`-`\n- 示例:`-all,+gemini-1.5-flash-latest,+gemini-1.5-pro-latest`\n\n## Vertex AI\n\n### `VERTEXAI_CREDENTIALS`\n\n- 类型:必选\n- 描述:Google Cloud 服务账号密钥的 JSON 字符串。用于认证和授权访问 Vertex AI 服务,获取方法请参考 [这里](/zh/docs/usage/providers/vertexai)\n- 默认值:-\n- 示例:`{\"type\": \"service_account\", \"project_id\": \"your-gcp-project-id\", ...}`\n\n### `VERTEXAI_PROJECT`\n\n- 类型:可选\n- 描述:你的 Google Cloud 项目 ID。如果未设置,将从 `VERTEXAI_CREDENTIALS` 中的 `project_id` 字段获取。\n- 默认值:-\n- 示例:`your-gcp-project-id`\n\n### `VERTEXAI_LOCATION`\n\n- 类型:可选\n- 描述:你的 Vertex AI 模型所在的区域。\n- 默认值:`global`\n- 示例:`us-central1`\n\n### `VERTEXAI_MODEL_LIST`\n\n- 类型:可选\n- 描述:用来控制模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名=展示名<扩展配置>` 来自定义模型的展示名,用英文逗号隔开。模型定义语法规则见 [模型列表][model-list]\n- 默认值:`-`\n- 示例:`-all,+gemini-1.5-flash-latest,+gemini-1.5-pro-latest`\n\n## Anthropic AI\n\n### `ANTHROPIC_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 Anthropic AI 服务中申请的 API 密钥\n- 默认值:-\n- 示例:`sk-ant-apixx-xxxxxxxxx-xxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxx`\n\n### `ANTHROPIC_PROXY_URL`\n\n- 类型:可选\n- 描述:如果你手动配置了 Anthropic 接口代理,可以使用此配置项来覆盖默认的 Anthropic API 请求基础 URL\n- 默认值:`https://api.anthropic.com`\n- 示例:`https://my-anthropic-proxy.com`\n\n### `ANTHROPIC_CLIENT_TIMEOUT`\n\n- 类型:可选\n- 描述:Anthropic SDK 客户端请求超时时间,单位为毫秒。依赖 Anthropic SDK 的 Anthropic 兼容服务商也会使用此超时时间。\n- 默认值:`295000`\n- 示例:`780000`\n\n## AWS Bedrock\n\n### `ENABLED_AWS_BEDROCK`\n\n- 类型:可选\n- 描述:当设为 1 时启用 AWS Bedrock 服务\n- 默认值:`0`\n- 示例:`1`\n\n### `AWS_ACCESS_KEY_ID`\n\n- 类型:必选\n- 描述:用于 AWS 服务认证的访问键 ID\n- 默认值:-\n- 示例:`AKIA5STVRLFSB4S9HWBR`\n\n### `AWS_SECRET_ACCESS_KEY`\n\n- 类型:必选\n- 描述:用于 AWS 服务认证的密钥\n- 默认值:-\n- 示例:`Th3vXxLYpuKcv2BARktPSTPxx+jbSiFT6/0w7oEC`\n\n### `AWS_REGION`\n\n- 类型:可选\n- 描述:AWS 服务的区域设置\n- 默认值:`us-east-1`\n- 示例:`us-east-1`\n\n## ComfyUI\n\n### `ENABLED_COMFYUI`\n\n- 类型:可选\n- 描述:默认启用 ComfyUI 作为模型供应商,当设为 0 时关闭 ComfyUI 服务\n- 默认值:`1`\n- 示例:`0`\n\n### `COMFYUI_BASE_URL`\n\n- 类型:可选\n- 描述:ComfyUI 服务的基础 URL 地址\n- 默认值:`http://localhost:8000`\n- 示例:`http://192.168.1.100:8000` 或 `https://my-comfyui-server.com`\n\n### `COMFYUI_AUTH_TYPE`\n\n- 类型:可选\n- 描述:ComfyUI 的认证类型,支持 4 种认证方式\n - `none`: 无认证(默认)\n - `basic`: 基础认证(用户名 + 密码)\n - `bearer`: Bearer Token 认证(API 密钥)\n - `custom`: 自定义请求头认证\n- 默认值:`none`\n- 示例:`basic`\n\n### `COMFYUI_API_KEY`\n\n- 类型:可选\n- 描述:当认证类型为 `bearer` 时使用的 API 密钥\n- 默认值:-\n- 示例:`sk-xxxxxx...xxxxxx`\n\n### `COMFYUI_USERNAME`\n\n- 类型:可选\n- 描述:当认证类型为 `basic` 时使用的用户名\n- 默认值:-\n- 示例:`admin`\n\n### `COMFYUI_PASSWORD`\n\n- 类型:可选\n- 描述:当认证类型为 `basic` 时使用的密码\n- 默认值:-\n- 示例:`password123`\n\n### `COMFYUI_CUSTOM_HEADERS`\n\n- 类型:可选\n- 描述:当认证类型为 `custom` 时使用的自定义请求头,需要使用 JSON 格式字符串\n- 默认值:-\n- 示例:`{\"X-Auth-Token\": \"your-token\", \"X-Custom-Header\": \"value\"}`\n\n<Callout type={'info'}>\n ComfyUI 支持多种认证方式,请根据您的 ComfyUI 服务配置选择合适的认证类型和相应的认证参数。如果您的\n ComfyUI 服务没有设置认证,可以不配置认证相关的环境变量。\n</Callout>\n\n## DeepSeek AI\n\n### `DEEPSEEK_PROXY_URL`\n\n- 类型:可选\n- 描述:如果您手动配置了 DeepSeek API 代理,可以使用此配置项覆盖默认的 DeepSeek API 请求基础 URL\n- 默认值:`https://api.deepseek.com`\n- 示例:`https://my-deepseek-proxy.com`\n\n### `DEEPSEEK_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 DeepSeek AI 服务中申请的 API 密钥\n- 默认值:-\n- 示例:`sk-xxxxxx...xxxxxx`\n\n### `DEEPSEEK_MODEL_LIST`\n\n- 类型:可选\n- 描述:用来控制模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名=展示名<扩展配置>` 来自定义模型的展示名,用英文逗号隔开。模型定义语法规则见 [模型列表][model-list]\n- 默认值:`-`\n- 示例:`-all,+deepseek-reasoner`\n\n## XAI\n\n### `XAI_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 XAI 服务中申请的 API 密钥\n- 默认值:-\n- 示例:`xai-xxxxxx...xxxxxx`\n\n## 文心一言\n\n### `WENXIN_API_KEY`\n\n- 类型:必选\n- 描述:这是你在百度智能云平台申请的文心一言 API 密钥\n- 默认值:-\n- 示例:`xxxxxx...xxxxxx`\n\n## OpenRouter AI\n\n### `OPENROUTER_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 OpenRouter AI 服务中申请的 API 密钥\n- 默认值:-\n- 示例:`sk-or-v1-xxxxxx...xxxxxx=`\n\n### `OPENROUTER_MODEL_LIST`\n\n- 类型:可选\n- 描述:用来控制模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名=展示名<扩展配置>` 来自定义模型的展示名,用英文逗号隔开。模型定义语法规则见 [模型列表][model-list]\n- 默认值:`-`\n- 示例:`-all,+01-ai/yi-34b-chat,+huggingfaceh4/zephyr-7b-beta`\n\n## PPIO\n\n### `PPIO_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 PPIO 网站申请的 API 密钥\n- 默认值:-\n- 示例:`sk_xxxxxxxxxxxx`\n\n### `PPIO_MODEL_LIST`\n\n- 类型:可选\n- 描述:用来控制模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名=展示名<扩展配置>` 来自定义模型的展示名,用英文逗号隔开。模型定义语法规则见 [模型列表][model-list]\n- 默认值:`-`\n- 示例:`-all,+deepseek/deepseek-v3/community,+deepseek/deepseek-r1-distill-llama-70b`\n\n## Github\n\n### `GITHUB_TOKEN`\n\n- 类型:必选\n- 描述:这是你在 Github 申请的 Personal access tokens\n- 默认值:-\n- 示例:`ghp_xxxxxx...xxxxxx=`\n\n### `GITHUB_MODEL_LIST`\n\n- 类型:可选\n- 描述:用来控制模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名=展示名<扩展配置>` 来自定义模型的展示名,用英文逗号隔开。模型定义语法规则见 [模型列表][model-list]\n- 默认值:`-`\n- 示例:`-all,+gpt-4o,+gpt-4o-mini`\n\n## TogetherAI\n\n### `TOGETHERAI_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 TogetherAI 服务中申请的 API 密钥\n- 默认值:-\n- 示例:`xxxxxx...xxxxxx`\n\n### `TOGETHERAI_MODEL_LIST`\n\n- 类型:可选\n- 描述:用来控制模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名=展示名<扩展配置>` 来自定义模型的展示名,用英文逗号隔开。模型定义语法规则见 [模型列表][model-list]\n- 默认值:`-`\n- 示例:`-all,+meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo,+meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo`\n\n## Fireworks AI\n\n### `FIREWORKSAI_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 Fireworks AI 服务中申请的 API 密钥\n- 默认值:-\n- 示例:`xxxxxx...xxxxxx`\n\n### `FIREWORKSAI_MODEL_LIST`\n\n- 类型:可选\n- 描述:用来控制模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名=展示名<扩展配置>` 来自定义模型的展示名,用英文逗号隔开。模型定义语法规则见 [模型列表][model-list]\n- 默认值:`-`\n- 示例:`-all,+accounts/fireworks/models/firefunction-v2,+accounts/fireworks/models/firefunction-v1`\n\n## Ollama\n\n### `ENABLED_OLLAMA`\n\n- 类型:可选\n- 描述:默认启用 Ollama 作为模型供应商,当设为 0 时关闭 Ollama 服务\n- 默认值:`1`\n- 示例:`0`\n\n### `OLLAMA_PROXY_URL`\n\n- 类型:必选\n- 描述:用于启用 Ollama 服务,设置后可在语言模型列表内展示可选开源语言模型,也可以指定自定义语言模型\n- 默认值:-\n- 示例:`http://127.0.0.1:11434`\n\n### `OLLAMA_MODEL_LIST`\n\n- 类型:可选\n- 描述:用于指定自定义 Ollama 语言模型。模型定义语法规则见 [模型列表][model-list]\n- 默认值:-\n- 示例:`qwen:32B`\n\n## Moonshot AI\n\n### `MOONSHOT_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 Moonshot AI 服务中申请的 API 密钥\n- 默认值:-\n- 示例:`Y2xpdGhpMzNhZXNoYjVtdnZjMWc6bXNrLWIxQlk3aDNPaXpBWnc0V1RaMDhSRmRFVlpZUWY=`\n\n### `MOONSHOT_PROXY_URL`\n\n- 类型:可选\n- 描述:如果你手动配置了 Moonshot 接口代理,可以使用此配置项来覆盖默认的 Moonshot API 请求基础 URL\n- 默认值:`https://api.moonshot.cn/v1`\n- 示例:`https://my-moonshot-proxy.com/v1`\n\n## Perplexity AI\n\n### `PERPLEXITY_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 Perplexity AI 服务中申请的 API 密钥\n- 默认值:-\n- 示例:`pplx-xxxxxx...xxxxxx`\n\n### `PERPLEXITY_MODEL_LIST`\n\n- 类型:可选\n- 描述:用于指定自定义 Perplexity 语言模型。模型定义语法规则见 [模型列表][model-list]\n- 默认值:-\n- 示例: `-all,+llama-3.1-sonar-small-128k-online,+llama-3.1-sonar-small-128k-chat`\n\n### `PERPLEXITY_PROXY_URL`\n\n- 类型:可选\n- 描述:如果你手动配置了 Perplexity 接口代理,可以使用此配置项来覆盖默认的 Perplexity API 请求基础 URL\n- 默认值:`https://api.Perplexity.ai`\n- 示例:`https://my-Perplexity-proxy.com`\n\n## Minimax AI\n\n### `MINIMAX_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 Minimax AI 服务中申请的 API 密钥\n- 默认值:-\n- 示例:`xxxxxx...xxxxxx`\n\n## Mistral AI\n\n### `MISTRAL_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 Mistral AI 服务中申请的 API 密钥\n- 默认值:-\n- 示例:`xxxxxx...xxxxxx=`\n\n## Groq AI\n\n### `GROQ_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 Groq AI 服务中申请的 API 密钥\n- 默认值:-\n- 示例:`gsk_xxxxxx...xxxxxx`\n\n### `GROQ_MODEL_LIST`\n\n- 类型:可选\n- 描述:用来控制模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名=展示名<扩展配置>` 来自定义模型的展示名,用英文逗号隔开。模型定义语法规则见 [模型列表][model-list]\n- 默认值:`-`\n- 示例:`-all,+gemma2-9b-it,+llama-3.1-8b-instant`\n\n### `GROQ_PROXY_URL`\n\n- 类型:可选\n- 描述:如果你手动配置了 Groq 接口代理,可以使用此配置项来覆盖默认的 Groq API 请求基础 URL\n- 默认值:`https://api.groq.com/openai/v1`\n- 示例:`https://my-groq-proxy.com/v1`\n\n## 智谱 AI\n\n### `ZHIPU_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 智谱 AI 服务中申请的 API 密钥\n- 默认值:-\n- 示例:`4582d332441a313f5c2ed9824d1798ca.rC8EcTAhgbOuAuVT`\n\n### `ZHIPU_MODEL_LIST`\n\n- 类型:可选\n- 描述:用来控制模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名=展示名<扩展配置>` 来自定义模型的展示名,用英文逗号隔开。模型定义语法规则见 [模型列表][model-list]\n- 默认值:`-`\n- 示例:`-all,+glm-4-alltools,+glm-4-plus`\n\n## 01 AI\n\n### `ZEROONE_API_KEY`\n\n- 类型:必选\n- 描述:这是你在零一万物服务中申请的 API 密钥\n- 默认值:-\n- 示例:`xxxxxx...xxxxxx`\n\n### `ZEROONE_MODEL_LIST`\n\n- 类型:可选\n- 描述:用来控制模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名=展示名<扩展配置>` 来自定义模型的展示名,用英文逗号隔开。模型定义语法规则见 [模型列表][model-list]\n- 默认值:`-`\n- 示例:`-all,+yi-large,+yi-large-rag`\n\n## 七牛云\n\n### `QINIU_API_KEY`\n\n- 类型:必选\n- 描述:这是你在七牛云上获取的 API 密钥\n- 默认值:-\n- 示例:`sk-xxxxx...xxxxx`\n\n### `QINIU_MODEL_LIST`\n\n- 类型:可选\n- 描述:用来控制模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名=展示名<扩展配置>` 来自定义模型的展示名,用英文逗号隔开。模型定义语法规则见 [模型列表][model-list]\n- 默认值:`-`\n- 示例:`-all,+deepseek-r1,+deepseek-v3`\n\n### `QINIU_PROXY_URL`\n\n- 类型:可选\n- 描述:如果你手动配置了 Qiniu 接口代理,可以使用此配置项来覆盖默认的 Qiniu API 请求基础 URL\n- 默认值:`https://api.qnaigc.com/v1`\n- 示例:`https://my-qnaigc.com/v1`\n\n## 通义千问\n\n### `QWEN_API_KEY`\n\n- 类型:必选\n- 描述:这是你在阿里云百炼平台上获取的 DashScope API 密钥\n- 默认值:-\n- 示例:`sk-xxxxx...xxxxx`\n\n### `QWEN_MODEL_LIST`\n\n- 类型:可选\n- 描述:用来控制模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名->部署名=展示名<扩展配置>` 来自定义模型的展示名,用英文逗号隔开。部署名`->部署名`可以省略,默认为最新版本的模型。模型定义语法规则见 [模型列表][model-list]\n- 默认值:`-`\n- 示例:`-all,+qwen-turbo,+qwen-plus,+qwen-max->qwen-max-2025-01-25`\n\n### `QWEN_PROXY_URL`\n\n- 类型:可选\n- 描述:如果你手动配置了 Qwen 接口代理,可以使用此配置项来覆盖默认的 Qwen API 请求基础 URL\n- 默认值:`https://dashscope.aliyuncs.com/compatible-mode/v1`\n- 示例:`https://my-qwen-proxy.com/v1`\n\n## Stepfun AI\n\n### `STEPFUN_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 Stepfun AI 服务中申请的 API 密钥\n- 默认值:-\n- 示例:`xxxxxx...xxxxxx`\n\n## Novita AI\n\n### `NOVITA_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 Novita AI 服务中申请的 API 密钥\n- 默认值:-\n- 示例:`xxxxxx...xxxxxx`\n\n### `NOVITA_MODEL_LIST`\n\n- 类型:可选\n- 描述:用来控制模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名=展示名<扩展配置>` 来自定义模型的展示名,用英文逗号隔开。模型定义语法规则见 [模型列表][model-list]\n- 默认值:`-`\n- 示例:`-all,+meta-llama/llama-3.1-8b-instruct,+meta-llama/llama-3.1-70b-instruct`\n\n## 百川\n\n### `BAICHUAN_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 百川智能 服务平台申请的 API 密钥\n- 默认值:-\n- 示例:`xxxxxx...xxxxxx`\n\n## 紫东太初\n\n### `TAICHU_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 紫东太初 服务平台申请的 API 密钥\n- 默认值:-\n- 示例:`xxxxxx...xxxxxx`\n\n## 360 AI\n\n### `AI360_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 360 智脑 服务平台申请的 API 密钥\n- 默认值:-\n- 示例:`xxxxxx...xxxxxx`\n\n## Siliconflow\n\n### `SILICONCLOUD_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 Siliconflow 服务中申请的 API 密钥\n- 默认值:-\n- 示例:`xxxxxx...xxxxxx`\n\n### `SILICONCLOUD_MODEL_LIST`\n\n- 类型:可选\n- 描述:用来控制模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名=展示名<扩展配置>` 来自定义模型的展示名,用英文逗号隔开。模型定义语法规则见 [模型列表][model-list]\n- 默认值:`-`\n- 示例:`-all,+deepseek-ai/DeepSeek-V2.5,+Qwen/Qwen2.5-7B-Instruct`\n\n### `SILICONCLOUD_PROXY_URL`\n\n- 类型:可选\n- 描述:如果你手动配置了 Siliconflow 接口代理,可以使用此配置项来覆盖默认的 Siliconflow API 请求基础 URL\n- 默认值:`https://api.siliconflow.cn/v1`\n- 示例:`https://my-siliconflow-proxy.com/v1`\n\n## Upstage AI\n\n### `UPSTAGE_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 Upstage AI 服务中申请的 API 密钥\n- 默认值:-\n- 示例:`xxxxxx...xxxxxx`\n\n## Spark AI\n\n### `SPARK_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 Spark AI 服务中申请的 API 密钥\n- 默认值:-\n- 示例:`xxxxxx...xxxxxx`\n\n## A21 AI\n\n### `AI21_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 A21 AI 服务中申请的 API 密钥\n- 默认值:-\n- 示例:`xxxxxx...xxxxxx`\n\n## 腾讯混元\n\n### `HUNYUAN_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 腾讯混元 服务中申请的 API 密钥\n- 默认值:-\n- 示例:`xxxxxx...xxxxxx`\n\n### `HUNYUAN_MODEL_LIST`\n\n- 类型:可选\n- 描述:用来控制模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名=展示名<扩展配置>` 来自定义模型的展示名,用英文逗号隔开。模型定义语法规则见 [模型列表][model-list]\n- 默认值:`-`\n- 示例:`-all,+hunyuan-lite,+hunyuan-standard`\n\n## 火山引擎\n\n### `VOLCENGINE_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 火山引擎 服务中申请的 API 密钥,可以前往 [这里](https://console.volcengine.com/ark/region:ark+cn-beijing/endpoint) 查看\n- 默认值:-\n- 示例:`ad925b3d-aaaa-bbbb-cccc-51fde2f50547`\n\n### `VOLCENGINE_MODEL_LIST`\n\n- 类型:可选\n- 描述:用来控制模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名->部署名=展示名<扩展配置>` 来自定义模型的展示名,用英文逗号隔开。部署名`->部署名`可以省略,默认为最新版本的模型。模型定义语法规则见 [模型列表][model-list]\n- 默认值:`-`\n- 示例:`-all,+deepseek-r1,+deepseek-v3->deepseek-v3-250324,+doubao-1.5-pro-256k,+doubao-1.5-pro-32k->doubao-1-5-pro-32k-250115,+doubao-1.5-lite-32k`\n\n### `VOLCENGINE_PROXY_URL`\n\n- 类型:可选\n- 描述:如果你手动配置了 Volcengine 接口代理,可以使用此配置项来覆盖默认的 Volcengine API 请求基础 URL\n- 默认值:`https://ark.cn-beijing.volces.com/api/v3`\n- 示例:`https://my-volcengine-proxy.com/v1`\n\n## InfiniAI\n\n### `INFINIAI_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 [Infini-AI](https://cloud.infini-ai.com) 申请的 API 密钥。\n- 默认值:-\n- 示例:`sk-xxxxxx...xxxxxx`\n\n### `INFINIAI_MODEL_LIST`\n\n- 类型:可选\n- 描述:用来控制模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名=展示名<扩展配置>` 来自定义模型的展示名,用英文逗号隔开。模型定义语法规则见 [模型列表][model-list]\n- 默认值:`-`\n- 示例:`-all,+qwq-32b,+deepseek-r1`\n\n## FAL\n\n### `ENABLED_FAL`\n\n- 类型:可选\n- 描述:默认启用 FAL 作为模型供应商,当设为 0 时关闭 FAL 服务\n- 默认值:`1`\n- 示例:`0`\n\n### `FAL_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 FAL 服务中申请的 API 密钥\n- 默认值:-\n- 示例:`fal-xxxxxx...xxxxxx`\n\n### `FAL_MODEL_LIST`\n\n- 类型:可选\n- 描述:用来控制 FAL 模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名=展示名` 来自定义模型的展示名,用英文逗号隔开。模型定义语法规则与其他 provider 保持一致。\n- 默认值:`-`\n- 示例:`-all,+fal-ai/flux/schnell,+fal-ai/flux-pro/kontext=FLUX.1 Kontext [pro]`\n\n上述示例表示先禁用所有模型,再启用 `fal-ai/flux/schnell` 和 `fal-ai/flux-pro/kontext`(显示名为 `FLUX.1 Kontext [pro]`)。\n\n## BFL\n\n### `BFL_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 BFL 服务中申请的 API 密钥\n- 默认值:-\n- 示例:`12345678-1234-1234-1234-123456789abc`\n\n### `BFL_MODEL_LIST`\n\n- 类型:可选\n- 描述:用来控制 BFL 模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名=展示名` 来自定义模型的展示名,用英文逗号隔开。模型定义语法规则与其他 provider 保持一致。\n- 默认值:`-`\n- 示例:`-all,+flux-pro-1.1,+flux-kontext-pro=FLUX.1 Kontext [pro]`\n\n上述示例表示先禁用所有模型,再启用 `flux-pro-1.1` 和 `flux-kontext-pro`(显示名为 `FLUX.1 Kontext [pro]`)。\n\n## NewAPI\n\n### `NEWAPI_API_KEY`\n\n- 类型:可选\n- 描述:这是你的 NewAPI 服务实例的 API 密钥。NewAPI 是一个多供应商模型聚合服务,提供对各种 AI 模型 API 的统一访问。\n- 默认值:-\n- 示例:`sk-xxxxxx...xxxxxx`\n\n### `NEWAPI_PROXY_URL`\n\n- 类型:可选\n- 描述:你的 NewAPI 服务器实例的基础 URL。这应该指向你部署的 NewAPI 服务端点。\n- 默认值:-\n- 示例:`https://your-newapi-server.com`\n\n<Callout type={'info'}>\n NewAPI\n 是一个多供应商模型聚合服务,支持基于供应商检测的自动模型路由。它提供成本管理功能,并为访问包括\n OpenAI、Anthropic、Google 等多个供应商的模型提供单一端点。了解更多关于 NewAPI 的信息请访问\n [https://github.com/Calcium-Ion/new-api](https://github.com/Calcium-Ion/new-api)。\n</Callout>\n\n## Vercel AI Gateway\n\n### `VERCELAIGATEWAY_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 Vercel AI Gateway 服务中申请的 API 密钥\n- 默认值:-\n- 示例:`vck_xxxxxx...xxxxxx`\n\n### `VERCELAIGATEWAY_MODEL_LIST`\n\n- 类型:可选\n- 描述:用来控制 Vercel AI Gateway 模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名=展示名` 来自定义模型的展示名,用英文逗号隔开。模型定义语法规则与其他 provider 保持一致。\n- 默认值:`-`\n- 示例:`-all,+vercel-model-1,+vercel-model-2=vercel-special`\n\n## Cerebras\n\n### `CEREBRAS_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 Cerebras 服务中申请的 API 密钥\n- 默认值:-\n- 示例:`csk-xxxxxx...xxxxxx`\n\n### `CEREBRAS_MODEL_LIST`\n\n- 类型:可选\n- 描述:用来控制 Cerebras 模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名=展示名` 来自定义模型的展示名,用英文逗号隔开。模型定义语法规则与其他 provider 保持一致。\n- 默认值:`-`\n- 示例:`-all,+cerebras-model-1,+cerebras-model-2=cerebras-special`\n\n## AiHubMix\n\n### `AIHUBMIX_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 AiHubMix 服务中申请的 API 密钥\n- 默认值:-\n- 示例:`sk-xxxxxx...xxxxxx`\n\n### `AIHUBMIX_MODEL_LIST`\n\n- 类型:可选\n- 描述:用来控制 AiHubMix 模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名=展示名` 来自定义模型的展示名,用英文逗号隔开。模型定义语法规则与其他 provider 保持一致。\n- 默认值:`-`\n- 示例:`-all,+claude-opus-4-1-20250805,+claude-opus-4-20250514=claude-opus-4`\n\n## Straico\n\n### `STRAICO_API_KEY`\n\n- 类型:必选\n- 描述:这是你在 Straico 服务中申请的 API 密钥\n- 默认值:-\n- 示例:`sk-xxxxxx...xxxxxx`\n\n### `STRAICO_MODEL_LIST`\n\n- 类型:可选\n- 描述:用来控制 Straico 模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名=展示名` 来自定义模型的展示名,用英文逗号隔开。模型定义语法规则与其他 provider 保持一致。\n- 默认值:`-`\n- 示例:`-all,+straico-model-1,+straico-model-2=straico-special`\n\n[model-list]: /zh/docs/self-hosting/advanced/model-list\n"}}, "packages/env/src/llm.ts": {"ab601b2ced51e606fcd3554040adcd1129eadaf9": {"t": 1785595531.9858787, "n": 17256, "h": "991a167f19b6dadc", "c": "import { createEnv } from '@t3-oss/env-core';\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_VERTEXAI: z.boolean(),\n\n ENABLED_MOONSHOT: z.boolean(),\n MOONSHOT_API_KEY: z.string().optional(),\n\n ENABLED_KIMICODINGPLAN: z.boolean(),\n KIMICODINGPLAN_API_KEY: z.string().optional(),\n\n ENABLED_BAILIANCODINGPLAN: z.boolean(),\n BAILIANCODINGPLAN_API_KEY: z.string().optional(),\n\n ENABLED_GLMCODINGPLAN: z.boolean(),\n GLMCODINGPLAN_API_KEY: z.string().optional(),\n\n ENABLED_MINIMAXCODINGPLAN: z.boolean(),\n MINIMAXCODINGPLAN_API_KEY: z.string().optional(),\n\n ENABLED_VOLCENGINECODINGPLAN: z.boolean(),\n VOLCENGINECODINGPLAN_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 ENABLED_OLLAMA_CLOUD: z.boolean(),\n OLLAMA_CLOUD_API_KEY: z.string().optional(),\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_LMSTUDIO: z.boolean(),\n LMSTUDIO_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_NEBIUS: z.boolean(),\n NEBIUS_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_COMFYUI: z.boolean(),\n COMFYUI_BASE_URL: z.string().optional(),\n COMFYUI_AUTH_TYPE: z.string().optional(),\n COMFYUI_API_KEY: z.string().optional(),\n COMFYUI_USERNAME: z.string().optional(),\n COMFYUI_PASSWORD: z.string().optional(),\n COMFYUI_CUSTOM_HEADERS: 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_VERCELAIGATEWAY: z.boolean(),\n VERCELAIGATEWAY_API_KEY: z.string().optional(),\n\n ENABLED_AI302: z.boolean(),\n AI302_API_KEY: z.string().optional(),\n\n ENABLED_AKASHCHAT: z.boolean(),\n AKASHCHAT_API_KEY: z.string().optional(),\n\n ENABLED_COMETAPI: z.boolean(),\n COMETAPI_KEY: z.string().optional(),\n\n ENABLED_AIHUBMIX: z.boolean(),\n AIHUBMIX_API_KEY: z.string().optional(),\n\n ENABLED_NEWAPI: z.boolean(),\n NEWAPI_API_KEY: z.string().optional(),\n NEWAPI_PROXY_URL: z.string().optional(),\n\n ENABLED_CEREBRAS: z.boolean(),\n CEREBRAS_API_KEY: z.string().optional(),\n\n ENABLED_ZENMUX: z.boolean(),\n ZENMUX_API_KEY: z.string().optional(),\n\n ENABLED_STRAICO: z.boolean(),\n STRAICO_API_KEY: z.string().optional(),\n\n ENABLED_LOBEHUB: z.boolean(),\n\n ENABLED_OPENCODEZEN: z.boolean(),\n OPENCODEZEN_API_KEY: z.string().optional(),\n\n ENABLED_OPENCODECODINGPLAN: z.boolean(),\n OPENCODECODINGPLAN_API_KEY: z.string().optional(),\n\n ENABLED_XIAOMIMIMO: z.boolean(),\n XIAOMIMIMO_API_KEY: z.string().optional(),\n\n ENABLED_LONGCAT: z.boolean(),\n LONGCAT_API_KEY: z.string().optional(),\n\n ENABLED_STREAMLAKE: z.boolean(),\n STREAMLAKE_API_KEY: z.string().optional(),\n\n ENABLED_ANTGROUP: z.boolean(),\n ANTGROUP_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.ENABLED_GOOGLE !== '0',\n GOOGLE_API_KEY: process.env.GOOGLE_API_KEY,\n\n ENABLED_VERTEXAI: !!process.env.VERTEXAI_CREDENTIALS,\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.ENABLED_ANTHROPIC !== '0',\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_KIMICODINGPLAN: !!process.env.KIMICODINGPLAN_API_KEY,\n KIMICODINGPLAN_API_KEY: process.env.KIMICODINGPLAN_API_KEY,\n\n ENABLED_BAILIANCODINGPLAN: !!process.env.BAILIANCODINGPLAN_API_KEY,\n BAILIANCODINGPLAN_API_KEY: process.env.BAILIANCODINGPLAN_API_KEY,\n\n ENABLED_GLMCODINGPLAN: !!process.env.GLMCODINGPLAN_API_KEY,\n GLMCODINGPLAN_API_KEY: process.env.GLMCODINGPLAN_API_KEY,\n\n ENABLED_MINIMAXCODINGPLAN: !!process.env.MINIMAXCODINGPLAN_API_KEY,\n MINIMAXCODINGPLAN_API_KEY: process.env.MINIMAXCODINGPLAN_API_KEY,\n\n ENABLED_VOLCENGINECODINGPLAN: !!process.env.VOLCENGINECODINGPLAN_API_KEY,\n VOLCENGINECODINGPLAN_API_KEY: process.env.VOLCENGINECODINGPLAN_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 ENABLED_OLLAMA_CLOUD: !!process.env.OLLAMA_CLOUD_API_KEY,\n OLLAMA_CLOUD_API_KEY: process.env.OLLAMA_CLOUD_API_KEY,\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_LMSTUDIO: !!process.env.LMSTUDIO_API_KEY,\n LMSTUDIO_API_KEY: process.env.LMSTUDIO_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_COMFYUI: process.env.ENABLED_COMFYUI !== '0',\n COMFYUI_BASE_URL: process.env.COMFYUI_BASE_URL,\n COMFYUI_AUTH_TYPE: process.env.COMFYUI_AUTH_TYPE,\n COMFYUI_API_KEY: process.env.COMFYUI_API_KEY,\n COMFYUI_USERNAME: process.env.COMFYUI_USERNAME,\n COMFYUI_PASSWORD: process.env.COMFYUI_PASSWORD,\n COMFYUI_CUSTOM_HEADERS: process.env.COMFYUI_CUSTOM_HEADERS,\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_VERCELAIGATEWAY: !!process.env.VERCELAIGATEWAY_API_KEY,\n VERCELAIGATEWAY_API_KEY: process.env.VERCELAIGATEWAY_API_KEY,\n\n ENABLED_AI302: !!process.env.AI302_API_KEY,\n AI302_API_KEY: process.env.AI302_API_KEY,\n\n ENABLED_AKASHCHAT: !!process.env.AKASHCHAT_API_KEY,\n AKASHCHAT_API_KEY: process.env.AKASHCHAT_API_KEY,\n\n ENABLED_COMETAPI: !!process.env.COMETAPI_KEY,\n COMETAPI_KEY: process.env.COMETAPI_KEY,\n\n ENABLED_AIHUBMIX: !!process.env.AIHUBMIX_API_KEY,\n AIHUBMIX_API_KEY: process.env.AIHUBMIX_API_KEY,\n\n ENABLED_NEWAPI: !!process.env.NEWAPI_API_KEY,\n NEWAPI_API_KEY: process.env.NEWAPI_API_KEY,\n NEWAPI_PROXY_URL: process.env.NEWAPI_PROXY_URL,\n\n ENABLED_NEBIUS: !!process.env.NEBIUS_API_KEY,\n NEBIUS_API_KEY: process.env.NEBIUS_API_KEY,\n\n ENABLED_CEREBRAS: !!process.env.CEREBRAS_API_KEY,\n CEREBRAS_API_KEY: process.env.CEREBRAS_API_KEY,\n\n ENABLED_ZENMUX: !!process.env.ZENMUX_API_KEY,\n ZENMUX_API_KEY: process.env.ZENMUX_API_KEY,\n\n ENABLED_STRAICO: !!process.env.STRAICO_API_KEY,\n STRAICO_API_KEY: process.env.STRAICO_API_KEY,\n\n ENABLED_LOBEHUB: !!process.env.ENABLED_LOBEHUB,\n\n ENABLED_OPENCODEZEN: !!process.env.OPENCODEZEN_API_KEY,\n OPENCODEZEN_API_KEY: process.env.OPENCODEZEN_API_KEY,\n\n ENABLED_OPENCODECODINGPLAN: !!process.env.OPENCODECODINGPLAN_API_KEY,\n OPENCODECODINGPLAN_API_KEY: process.env.OPENCODECODINGPLAN_API_KEY,\n\n ENABLED_XIAOMIMIMO: !!process.env.XIAOMIMIMO_API_KEY,\n XIAOMIMIMO_API_KEY: process.env.XIAOMIMIMO_API_KEY,\n\n ENABLED_LONGCAT: !!process.env.LONGCAT_API_KEY,\n LONGCAT_API_KEY: process.env.LONGCAT_API_KEY,\n\n ENABLED_STREAMLAKE: !!process.env.STREAMLAKE_API_KEY,\n STREAMLAKE_API_KEY: process.env.STREAMLAKE_API_KEY,\n\n ENABLED_ANTGROUP: !!process.env.ANTGROUP_API_KEY,\n ANTGROUP_API_KEY: process.env.ANTGROUP_API_KEY,\n },\n });\n};\n\nexport const llmEnv = getLLMConfig();\n"}}, "Dockerfile": {"ab601b2ced51e606fcd3554040adcd1129eadaf9": {"t": 1785595535.8732615, "n": 11698, "h": "4d1b80ee23701e20", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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 set -e && \\\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 apt update && \\\n apt install ca-certificates proxychains-ng -qy && \\\n mkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib && \\\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 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/lib/$(arch)-linux-gnu/librt.so.1 /distroless/lib/librt.so.1 && \\\n cp /usr/local/bin/node /distroless/bin/node && \\\n cp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt && \\\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\nENV 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 AUTH_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\nCOPY patches ./patches\n# bring in desktop workspace manifest so pnpm can resolve it\nCOPY apps/desktop/src/main/package.json ./apps/desktop/src/main/package.json\n\nRUN set -e && \\\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 export COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\\/$//') && \\\n npm i -g corepack@latest && \\\n corepack enable && \\\n corepack use $(sed -n 's/.*\"packageManager\": \"\\(.*\\)\".*/\\1/p' package.json) && \\\n pnpm i && \\\n mkdir -p /deps && \\\n cd /deps && \\\n echo '{\"name\":\"deps\",\"private\":true}' > package.json && \\\n pnpm add pg drizzle-orm\n\nCOPY . .\n\n# Prebuild: env checks (checkDeprecatedAuth, checkRequiredEnvVars, printEnvInfo) then remove desktop-only code\nRUN pnpm exec tsx scripts/dockerPrebuild.mts\nRUN rm -rf src/app/desktop \"src/app/(backend)/trpc/desktop\"\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/\nCOPY --from=builder /app/.next/static /app/.next/static\n# Copy SPA assets (Vite build output)\nCOPY --from=builder /app/public/_spa /app/public/_spa\n# Copy database migrations\nCOPY --from=builder /app/packages/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 and shared scripts\nCOPY --from=builder /app/scripts/serverLauncher/startServer.js /app/startServer.js\nCOPY --from=builder /app/scripts/_shared /app/scripts/_shared\n\nRUN set -e && \\\n addgroup -S -g 1001 nodejs && \\\n adduser -D -G nodejs -H -S -h /app -u 1001 nextjs && \\\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_FILE=\"/etc/ssl/certs/ca-certificates.crt\"\n\n# Make the middleware rewrite through local as default\n# refs: https://github.com/lobehub/lobehub/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 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# Better Auth\nENV AUTH_SECRET=\"\" \\\n AUTH_SSO_PROVIDERS=\"\" \\\n AUTH_ALLOWED_EMAILS=\"\" \\\n AUTH_TRUSTED_ORIGINS=\"\" \\\n AUTH_DISABLE_EMAIL_PASSWORD=\"\" \\\n AUTH_EMAIL_VERIFICATION=\"\" \\\n AUTH_ENABLE_MAGIC_LINK=\"\" \\\n # Google\n AUTH_GOOGLE_ID=\"\" \\\n AUTH_GOOGLE_SECRET=\"\" \\\n # GitHub\n AUTH_GITHUB_ID=\"\" \\\n AUTH_GITHUB_SECRET=\"\" \\\n # Microsoft\n AUTH_MICROSOFT_ID=\"\" \\\n AUTH_MICROSOFT_SECRET=\"\" \\\n AUTH_MICROSOFT_AUTHORITY_URL=\"\" \\\n AUTH_MICROSOFT_TENANT_ID=\"\"\n\n# Redis\nENV REDIS_URL=\"\" \\\n REDIS_PREFIX=\"\" \\\n REDIS_TLS=\"\"\n\n# Email\nENV EMAIL_SERVICE_PROVIDER=\"\" \\\n SMTP_HOST=\"\" \\\n SMTP_PORT=\"\" \\\n SMTP_SECURE=\"\" \\\n SMTP_USER=\"\" \\\n SMTP_PASS=\"\" \\\n SMTP_FROM=\"\" \\\n RESEND_API_KEY=\"\" \\\n RESEND_FROM=\"\"\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 S3_ENABLE_PATH_STYLE=\"\" \\\n S3_SET_ACL=\"\"\n\n# Cloud Sandbox\nENV SANDBOX_PROVIDER=\"\" \\\n ONLYBOXES_BASE_URL=\"\" \\\n ONLYBOXES_JIT_ISSUER=\"\" \\\n ONLYBOXES_JIT_SIGNING_KEY=\"\" \\\n ONLYBOXES_JIT_TTL_SEC=\"\" \\\n ONLYBOXES_LEASE_TTL_SEC=\"\"\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_CLIENT_TIMEOUT=\"\" ANTHROPIC_MODEL_LIST=\"\" ANTHROPIC_PROXY_URL=\"\" \\\n # Amazon Bedrock\n ENABLED_AWS_BEDROCK=\"\" 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 # ComfyUI\n ENABLED_COMFYUI=\"\" COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Vertex AI\n VERTEXAI_CREDENTIALS=\"\" VERTEXAI_PROJECT=\"\" VERTEXAI_LOCATION=\"\" VERTEXAI_MODEL_LIST=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 ENABLED_OPENAI=\"\" 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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\" \\\n # Cerebras\n CEREBRAS_API_KEY=\"\" CEREBRAS_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "a28fd3071969ab299c34f62989d9087239d06bc2": {"t": 1785769799.6970327, "n": 11698, "h": "4d1b80ee23701e20", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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 set -e && \\\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 apt update && \\\n apt install ca-certificates proxychains-ng -qy && \\\n mkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib && \\\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 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/lib/$(arch)-linux-gnu/librt.so.1 /distroless/lib/librt.so.1 && \\\n cp /usr/local/bin/node /distroless/bin/node && \\\n cp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt && \\\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\nENV 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 AUTH_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\nCOPY patches ./patches\n# bring in desktop workspace manifest so pnpm can resolve it\nCOPY apps/desktop/src/main/package.json ./apps/desktop/src/main/package.json\n\nRUN set -e && \\\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 export COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\\/$//') && \\\n npm i -g corepack@latest && \\\n corepack enable && \\\n corepack use $(sed -n 's/.*\"packageManager\": \"\\(.*\\)\".*/\\1/p' package.json) && \\\n pnpm i && \\\n mkdir -p /deps && \\\n cd /deps && \\\n echo '{\"name\":\"deps\",\"private\":true}' > package.json && \\\n pnpm add pg drizzle-orm\n\nCOPY . .\n\n# Prebuild: env checks (checkDeprecatedAuth, checkRequiredEnvVars, printEnvInfo) then remove desktop-only code\nRUN pnpm exec tsx scripts/dockerPrebuild.mts\nRUN rm -rf src/app/desktop \"src/app/(backend)/trpc/desktop\"\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/\nCOPY --from=builder /app/.next/static /app/.next/static\n# Copy SPA assets (Vite build output)\nCOPY --from=builder /app/public/_spa /app/public/_spa\n# Copy database migrations\nCOPY --from=builder /app/packages/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 and shared scripts\nCOPY --from=builder /app/scripts/serverLauncher/startServer.js /app/startServer.js\nCOPY --from=builder /app/scripts/_shared /app/scripts/_shared\n\nRUN set -e && \\\n addgroup -S -g 1001 nodejs && \\\n adduser -D -G nodejs -H -S -h /app -u 1001 nextjs && \\\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_FILE=\"/etc/ssl/certs/ca-certificates.crt\"\n\n# Make the middleware rewrite through local as default\n# refs: https://github.com/lobehub/lobehub/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 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# Better Auth\nENV AUTH_SECRET=\"\" \\\n AUTH_SSO_PROVIDERS=\"\" \\\n AUTH_ALLOWED_EMAILS=\"\" \\\n AUTH_TRUSTED_ORIGINS=\"\" \\\n AUTH_DISABLE_EMAIL_PASSWORD=\"\" \\\n AUTH_EMAIL_VERIFICATION=\"\" \\\n AUTH_ENABLE_MAGIC_LINK=\"\" \\\n # Google\n AUTH_GOOGLE_ID=\"\" \\\n AUTH_GOOGLE_SECRET=\"\" \\\n # GitHub\n AUTH_GITHUB_ID=\"\" \\\n AUTH_GITHUB_SECRET=\"\" \\\n # Microsoft\n AUTH_MICROSOFT_ID=\"\" \\\n AUTH_MICROSOFT_SECRET=\"\" \\\n AUTH_MICROSOFT_AUTHORITY_URL=\"\" \\\n AUTH_MICROSOFT_TENANT_ID=\"\"\n\n# Redis\nENV REDIS_URL=\"\" \\\n REDIS_PREFIX=\"\" \\\n REDIS_TLS=\"\"\n\n# Email\nENV EMAIL_SERVICE_PROVIDER=\"\" \\\n SMTP_HOST=\"\" \\\n SMTP_PORT=\"\" \\\n SMTP_SECURE=\"\" \\\n SMTP_USER=\"\" \\\n SMTP_PASS=\"\" \\\n SMTP_FROM=\"\" \\\n RESEND_API_KEY=\"\" \\\n RESEND_FROM=\"\"\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 S3_ENABLE_PATH_STYLE=\"\" \\\n S3_SET_ACL=\"\"\n\n# Cloud Sandbox\nENV SANDBOX_PROVIDER=\"\" \\\n ONLYBOXES_BASE_URL=\"\" \\\n ONLYBOXES_JIT_ISSUER=\"\" \\\n ONLYBOXES_JIT_SIGNING_KEY=\"\" \\\n ONLYBOXES_JIT_TTL_SEC=\"\" \\\n ONLYBOXES_LEASE_TTL_SEC=\"\"\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_CLIENT_TIMEOUT=\"\" ANTHROPIC_MODEL_LIST=\"\" ANTHROPIC_PROXY_URL=\"\" \\\n # Amazon Bedrock\n ENABLED_AWS_BEDROCK=\"\" 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 # ComfyUI\n ENABLED_COMFYUI=\"\" COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Vertex AI\n VERTEXAI_CREDENTIALS=\"\" VERTEXAI_PROJECT=\"\" VERTEXAI_LOCATION=\"\" VERTEXAI_MODEL_LIST=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 ENABLED_OPENAI=\"\" 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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\" \\\n # Cerebras\n CEREBRAS_API_KEY=\"\" CEREBRAS_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "fc088773bd4d7f422f44bf31c7bbdf22e64dde82": {"t": 1785769801.418051, "n": 11500, "h": "6d8d91d7a30d0a48", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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 set -e && \\\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 apt update && \\\n apt install ca-certificates proxychains-ng -qy && \\\n mkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib && \\\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 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/lib/$(arch)-linux-gnu/librt.so.1 /distroless/lib/librt.so.1 && \\\n cp /usr/local/bin/node /distroless/bin/node && \\\n cp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt && \\\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\nENV 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 AUTH_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\nCOPY patches ./patches\n# bring in desktop workspace manifest so pnpm can resolve it\nCOPY apps/desktop/src/main/package.json ./apps/desktop/src/main/package.json\n\nRUN set -e && \\\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 export COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\\/$//') && \\\n npm i -g corepack@latest && \\\n corepack enable && \\\n corepack use $(sed -n 's/.*\"packageManager\": \"\\(.*\\)\".*/\\1/p' package.json) && \\\n pnpm i && \\\n mkdir -p /deps && \\\n cd /deps && \\\n echo '{\"name\":\"deps\",\"private\":true}' > package.json && \\\n pnpm add pg drizzle-orm\n\nCOPY . .\n\n# Prebuild: env checks (checkDeprecatedAuth, checkRequiredEnvVars, printEnvInfo) then remove desktop-only code\nRUN pnpm exec tsx scripts/dockerPrebuild.mts\nRUN rm -rf src/app/desktop \"src/app/(backend)/trpc/desktop\"\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/\nCOPY --from=builder /app/.next/static /app/.next/static\n# Copy SPA assets (Vite build output)\nCOPY --from=builder /app/public/_spa /app/public/_spa\n# Copy database migrations\nCOPY --from=builder /app/packages/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 and shared scripts\nCOPY --from=builder /app/scripts/serverLauncher/startServer.js /app/startServer.js\nCOPY --from=builder /app/scripts/_shared /app/scripts/_shared\n\nRUN set -e && \\\n addgroup -S -g 1001 nodejs && \\\n adduser -D -G nodejs -H -S -h /app -u 1001 nextjs && \\\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_FILE=\"/etc/ssl/certs/ca-certificates.crt\"\n\n# Make the middleware rewrite through local as default\n# refs: https://github.com/lobehub/lobehub/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 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# Better Auth\nENV AUTH_SECRET=\"\" \\\n AUTH_SSO_PROVIDERS=\"\" \\\n AUTH_ALLOWED_EMAILS=\"\" \\\n AUTH_TRUSTED_ORIGINS=\"\" \\\n AUTH_DISABLE_EMAIL_PASSWORD=\"\" \\\n AUTH_EMAIL_VERIFICATION=\"\" \\\n AUTH_ENABLE_MAGIC_LINK=\"\" \\\n # Google\n AUTH_GOOGLE_ID=\"\" \\\n AUTH_GOOGLE_SECRET=\"\" \\\n # GitHub\n AUTH_GITHUB_ID=\"\" \\\n AUTH_GITHUB_SECRET=\"\" \\\n # Microsoft\n AUTH_MICROSOFT_ID=\"\" \\\n AUTH_MICROSOFT_SECRET=\"\" \\\n AUTH_MICROSOFT_AUTHORITY_URL=\"\" \\\n AUTH_MICROSOFT_TENANT_ID=\"\"\n\n# Redis\nENV REDIS_URL=\"\" \\\n REDIS_PREFIX=\"\" \\\n REDIS_TLS=\"\"\n\n# Email\nENV EMAIL_SERVICE_PROVIDER=\"\" \\\n SMTP_HOST=\"\" \\\n SMTP_PORT=\"\" \\\n SMTP_SECURE=\"\" \\\n SMTP_USER=\"\" \\\n SMTP_PASS=\"\" \\\n SMTP_FROM=\"\" \\\n RESEND_API_KEY=\"\" \\\n RESEND_FROM=\"\"\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 S3_ENABLE_PATH_STYLE=\"\" \\\n S3_SET_ACL=\"\"\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_CLIENT_TIMEOUT=\"\" ANTHROPIC_MODEL_LIST=\"\" ANTHROPIC_PROXY_URL=\"\" \\\n # Amazon Bedrock\n ENABLED_AWS_BEDROCK=\"\" 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 # ComfyUI\n ENABLED_COMFYUI=\"\" COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Vertex AI\n VERTEXAI_CREDENTIALS=\"\" VERTEXAI_PROJECT=\"\" VERTEXAI_LOCATION=\"\" VERTEXAI_MODEL_LIST=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 ENABLED_OPENAI=\"\" 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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\" \\\n # Cerebras\n CEREBRAS_API_KEY=\"\" CEREBRAS_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "8ed31dfca4abff432c574e23a7c26142b1d15c5c": {"t": 1785769803.8371477, "n": 11472, "h": "f07872ad2c3a843a", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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 set -e && \\\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 apt update && \\\n apt install ca-certificates proxychains-ng -qy && \\\n mkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib && \\\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 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/lib/$(arch)-linux-gnu/librt.so.1 /distroless/lib/librt.so.1 && \\\n cp /usr/local/bin/node /distroless/bin/node && \\\n cp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt && \\\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\nENV 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 AUTH_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\nCOPY patches ./patches\n# bring in desktop workspace manifest so pnpm can resolve it\nCOPY apps/desktop/src/main/package.json ./apps/desktop/src/main/package.json\n\nRUN set -e && \\\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 export COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\\/$//') && \\\n npm i -g corepack@latest && \\\n corepack enable && \\\n corepack use $(sed -n 's/.*\"packageManager\": \"\\(.*\\)\".*/\\1/p' package.json) && \\\n pnpm i && \\\n mkdir -p /deps && \\\n cd /deps && \\\n echo '{\"name\":\"deps\",\"private\":true}' > package.json && \\\n pnpm add pg drizzle-orm\n\nCOPY . .\n\n# Prebuild: env checks (checkDeprecatedAuth, checkRequiredEnvVars, printEnvInfo) then remove desktop-only code\nRUN pnpm exec tsx scripts/dockerPrebuild.mts\nRUN rm -rf src/app/desktop \"src/app/(backend)/trpc/desktop\"\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/\nCOPY --from=builder /app/.next/static /app/.next/static\n# Copy SPA assets (Vite build output)\nCOPY --from=builder /app/public/_spa /app/public/_spa\n# Copy database migrations\nCOPY --from=builder /app/packages/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 and shared scripts\nCOPY --from=builder /app/scripts/serverLauncher/startServer.js /app/startServer.js\nCOPY --from=builder /app/scripts/_shared /app/scripts/_shared\n\nRUN set -e && \\\n addgroup -S -g 1001 nodejs && \\\n adduser -D -G nodejs -H -S -h /app -u 1001 nextjs && \\\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_FILE=\"/etc/ssl/certs/ca-certificates.crt\"\n\n# Make the middleware rewrite through local as default\n# refs: https://github.com/lobehub/lobehub/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 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# Better Auth\nENV AUTH_SECRET=\"\" \\\n AUTH_SSO_PROVIDERS=\"\" \\\n AUTH_ALLOWED_EMAILS=\"\" \\\n AUTH_TRUSTED_ORIGINS=\"\" \\\n AUTH_DISABLE_EMAIL_PASSWORD=\"\" \\\n AUTH_EMAIL_VERIFICATION=\"\" \\\n AUTH_ENABLE_MAGIC_LINK=\"\" \\\n # Google\n AUTH_GOOGLE_ID=\"\" \\\n AUTH_GOOGLE_SECRET=\"\" \\\n # GitHub\n AUTH_GITHUB_ID=\"\" \\\n AUTH_GITHUB_SECRET=\"\" \\\n # Microsoft\n AUTH_MICROSOFT_ID=\"\" \\\n AUTH_MICROSOFT_SECRET=\"\" \\\n AUTH_MICROSOFT_AUTHORITY_URL=\"\" \\\n AUTH_MICROSOFT_TENANT_ID=\"\"\n\n# Redis\nENV REDIS_URL=\"\" \\\n REDIS_PREFIX=\"\" \\\n REDIS_TLS=\"\"\n\n# Email\nENV EMAIL_SERVICE_PROVIDER=\"\" \\\n SMTP_HOST=\"\" \\\n SMTP_PORT=\"\" \\\n SMTP_SECURE=\"\" \\\n SMTP_USER=\"\" \\\n SMTP_PASS=\"\" \\\n SMTP_FROM=\"\" \\\n RESEND_API_KEY=\"\" \\\n RESEND_FROM=\"\"\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 S3_ENABLE_PATH_STYLE=\"\" \\\n S3_SET_ACL=\"\"\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 ENABLED_AWS_BEDROCK=\"\" 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 # ComfyUI\n ENABLED_COMFYUI=\"\" COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Vertex AI\n VERTEXAI_CREDENTIALS=\"\" VERTEXAI_PROJECT=\"\" VERTEXAI_LOCATION=\"\" VERTEXAI_MODEL_LIST=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 ENABLED_OPENAI=\"\" 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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\" \\\n # Cerebras\n CEREBRAS_API_KEY=\"\" CEREBRAS_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "f6314cc673656887b21a08b43bcfe6f9f455d83e": {"t": 1785769805.2063677, "n": 11429, "h": "069b94de0659e79a", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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 set -e && \\\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 apt update && \\\n apt install ca-certificates proxychains-ng -qy && \\\n mkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib && \\\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 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/lib/$(arch)-linux-gnu/librt.so.1 /distroless/lib/librt.so.1 && \\\n cp /usr/local/bin/node /distroless/bin/node && \\\n cp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt && \\\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\nENV 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 AUTH_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\nCOPY patches ./patches\n# bring in desktop workspace manifest so pnpm can resolve it\nCOPY apps/desktop/src/main/package.json ./apps/desktop/src/main/package.json\n\nRUN set -e && \\\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 export COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\\/$//') && \\\n npm i -g corepack@latest && \\\n corepack enable && \\\n corepack use $(sed -n 's/.*\"packageManager\": \"\\(.*\\)\".*/\\1/p' package.json) && \\\n pnpm i && \\\n mkdir -p /deps && \\\n cd /deps && \\\n pnpm init && \\\n pnpm add pg drizzle-orm\n\nCOPY . .\n\n# Prebuild: env checks (checkDeprecatedAuth, checkRequiredEnvVars, printEnvInfo) then remove desktop-only code\nRUN pnpm exec tsx scripts/dockerPrebuild.mts\nRUN rm -rf src/app/desktop \"src/app/(backend)/trpc/desktop\"\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/\nCOPY --from=builder /app/.next/static /app/.next/static\n# Copy SPA assets (Vite build output)\nCOPY --from=builder /app/public/_spa /app/public/_spa\n# Copy database migrations\nCOPY --from=builder /app/packages/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 and shared scripts\nCOPY --from=builder /app/scripts/serverLauncher/startServer.js /app/startServer.js\nCOPY --from=builder /app/scripts/_shared /app/scripts/_shared\n\nRUN set -e && \\\n addgroup -S -g 1001 nodejs && \\\n adduser -D -G nodejs -H -S -h /app -u 1001 nextjs && \\\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_FILE=\"/etc/ssl/certs/ca-certificates.crt\"\n\n# Make the middleware rewrite through local as default\n# refs: https://github.com/lobehub/lobehub/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 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# Better Auth\nENV AUTH_SECRET=\"\" \\\n AUTH_SSO_PROVIDERS=\"\" \\\n AUTH_ALLOWED_EMAILS=\"\" \\\n AUTH_TRUSTED_ORIGINS=\"\" \\\n AUTH_DISABLE_EMAIL_PASSWORD=\"\" \\\n AUTH_EMAIL_VERIFICATION=\"\" \\\n AUTH_ENABLE_MAGIC_LINK=\"\" \\\n # Google\n AUTH_GOOGLE_ID=\"\" \\\n AUTH_GOOGLE_SECRET=\"\" \\\n # GitHub\n AUTH_GITHUB_ID=\"\" \\\n AUTH_GITHUB_SECRET=\"\" \\\n # Microsoft\n AUTH_MICROSOFT_ID=\"\" \\\n AUTH_MICROSOFT_SECRET=\"\" \\\n AUTH_MICROSOFT_AUTHORITY_URL=\"\" \\\n AUTH_MICROSOFT_TENANT_ID=\"\"\n\n# Redis\nENV REDIS_URL=\"\" \\\n REDIS_PREFIX=\"\" \\\n REDIS_TLS=\"\"\n\n# Email\nENV EMAIL_SERVICE_PROVIDER=\"\" \\\n SMTP_HOST=\"\" \\\n SMTP_PORT=\"\" \\\n SMTP_SECURE=\"\" \\\n SMTP_USER=\"\" \\\n SMTP_PASS=\"\" \\\n SMTP_FROM=\"\" \\\n RESEND_API_KEY=\"\" \\\n RESEND_FROM=\"\"\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 S3_ENABLE_PATH_STYLE=\"\" \\\n S3_SET_ACL=\"\"\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 ENABLED_AWS_BEDROCK=\"\" 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 # ComfyUI\n ENABLED_COMFYUI=\"\" COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Vertex AI\n VERTEXAI_CREDENTIALS=\"\" VERTEXAI_PROJECT=\"\" VERTEXAI_LOCATION=\"\" VERTEXAI_MODEL_LIST=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 ENABLED_OPENAI=\"\" 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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\" \\\n # Cerebras\n CEREBRAS_API_KEY=\"\" CEREBRAS_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "adbf11dc119342d0da50308abb66fcd74dd1fe81": {"t": 1785769806.9390805, "n": 11427, "h": "200bc4688091a62f", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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 set -e && \\\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 apt update && \\\n apt install ca-certificates proxychains-ng -qy && \\\n mkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib && \\\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 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/lib/$(arch)-linux-gnu/librt.so.1 /distroless/lib/librt.so.1 && \\\n cp /usr/local/bin/node /distroless/bin/node && \\\n cp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt && \\\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\nENV 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 AUTH_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\nCOPY patches ./patches\n# bring in desktop workspace manifest so pnpm can resolve it\nCOPY apps/desktop/src/main/package.json ./apps/desktop/src/main/package.json\n\nRUN set -e && \\\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 export COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\\/$//') && \\\n npm i -g corepack@latest && \\\n corepack enable && \\\n corepack use $(sed -n 's/.*\"packageManager\": \"\\(.*\\)\".*/\\1/p' package.json) && \\\n pnpm i && \\\n mkdir -p /deps && \\\n cd /deps && \\\n pnpm init && \\\n pnpm add pg drizzle-orm\n\nCOPY . .\n\n# Prebuild: env checks (checkDeprecatedAuth, checkRequiredEnvVars, printEnvInfo) then remove desktop-only code\nRUN pnpm exec tsx scripts/dockerPrebuild.mts\nRUN rm -rf src/app/desktop \"src/app/(backend)/trpc/desktop\"\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/\nCOPY --from=builder /app/.next/static /app/.next/static\n# Copy SPA assets (Vite build output)\nCOPY --from=builder /app/public/spa /app/public/spa\n# Copy database migrations\nCOPY --from=builder /app/packages/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 and shared scripts\nCOPY --from=builder /app/scripts/serverLauncher/startServer.js /app/startServer.js\nCOPY --from=builder /app/scripts/_shared /app/scripts/_shared\n\nRUN set -e && \\\n addgroup -S -g 1001 nodejs && \\\n adduser -D -G nodejs -H -S -h /app -u 1001 nextjs && \\\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_FILE=\"/etc/ssl/certs/ca-certificates.crt\"\n\n# Make the middleware rewrite through local as default\n# refs: https://github.com/lobehub/lobehub/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 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# Better Auth\nENV AUTH_SECRET=\"\" \\\n AUTH_SSO_PROVIDERS=\"\" \\\n AUTH_ALLOWED_EMAILS=\"\" \\\n AUTH_TRUSTED_ORIGINS=\"\" \\\n AUTH_DISABLE_EMAIL_PASSWORD=\"\" \\\n AUTH_EMAIL_VERIFICATION=\"\" \\\n AUTH_ENABLE_MAGIC_LINK=\"\" \\\n # Google\n AUTH_GOOGLE_ID=\"\" \\\n AUTH_GOOGLE_SECRET=\"\" \\\n # GitHub\n AUTH_GITHUB_ID=\"\" \\\n AUTH_GITHUB_SECRET=\"\" \\\n # Microsoft\n AUTH_MICROSOFT_ID=\"\" \\\n AUTH_MICROSOFT_SECRET=\"\" \\\n AUTH_MICROSOFT_AUTHORITY_URL=\"\" \\\n AUTH_MICROSOFT_TENANT_ID=\"\"\n\n# Redis\nENV REDIS_URL=\"\" \\\n REDIS_PREFIX=\"\" \\\n REDIS_TLS=\"\"\n\n# Email\nENV EMAIL_SERVICE_PROVIDER=\"\" \\\n SMTP_HOST=\"\" \\\n SMTP_PORT=\"\" \\\n SMTP_SECURE=\"\" \\\n SMTP_USER=\"\" \\\n SMTP_PASS=\"\" \\\n SMTP_FROM=\"\" \\\n RESEND_API_KEY=\"\" \\\n RESEND_FROM=\"\"\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 S3_ENABLE_PATH_STYLE=\"\" \\\n S3_SET_ACL=\"\"\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 ENABLED_AWS_BEDROCK=\"\" 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 # ComfyUI\n ENABLED_COMFYUI=\"\" COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Vertex AI\n VERTEXAI_CREDENTIALS=\"\" VERTEXAI_PROJECT=\"\" VERTEXAI_LOCATION=\"\" VERTEXAI_MODEL_LIST=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 ENABLED_OPENAI=\"\" 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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\" \\\n # Cerebras\n CEREBRAS_API_KEY=\"\" CEREBRAS_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "18ec113bbab7a2df05e53f1aea75173023b1946f": {"t": 1785769808.4000404, "n": 11429, "h": "16c7b6a13360555e", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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 set -e && \\\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 apt update && \\\n apt install ca-certificates proxychains-ng -qy && \\\n mkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib && \\\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 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/lib/$(arch)-linux-gnu/librt.so.1 /distroless/lib/librt.so.1 && \\\n cp /usr/local/bin/node /distroless/bin/node && \\\n cp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt && \\\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\nENV 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 AUTH_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\nCOPY patches ./patches\n# bring in desktop workspace manifest so pnpm can resolve it\nCOPY apps/desktop/src/main/package.json ./apps/desktop/src/main/package.json\n\nRUN set -e && \\\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 export COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\\/$//') && \\\n npm i -g corepack@latest && \\\n corepack enable && \\\n corepack use $(sed -n 's/.*\"packageManager\": \"\\(.*\\)\".*/\\1/p' package.json) && \\\n pnpm i && \\\n mkdir -p /deps && \\\n cd /deps && \\\n pnpm init && \\\n pnpm add pg drizzle-orm\n\nCOPY . .\n\n# Prebuild: env checks (checkDeprecatedAuth, checkRequiredEnvVars, printEnvInfo) then remove desktop-only code\nRUN pnpm exec tsx scripts/dockerPrebuild.mts\nRUN rm -rf src/app/desktop \"src/app/(backend)/trpc/desktop\"\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/\nCOPY --from=builder /app/.next/static /app/.next/static\n# Copy SPA assets (Vite build output)\nCOPY --from=builder /app/public/spa /app/public/spa\n# Copy database migrations\nCOPY --from=builder /app/packages/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 and shared scripts\nCOPY --from=builder /app/scripts/serverLauncher/startServer.js /app/startServer.js\nCOPY --from=builder /app/scripts/_shared /app/scripts/_shared\n\nRUN set -e && \\\n addgroup -S -g 1001 nodejs && \\\n adduser -D -G nodejs -H -S -h /app -u 1001 nextjs && \\\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_FILE=\"/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 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# Better Auth\nENV AUTH_SECRET=\"\" \\\n AUTH_SSO_PROVIDERS=\"\" \\\n AUTH_ALLOWED_EMAILS=\"\" \\\n AUTH_TRUSTED_ORIGINS=\"\" \\\n AUTH_DISABLE_EMAIL_PASSWORD=\"\" \\\n AUTH_EMAIL_VERIFICATION=\"\" \\\n AUTH_ENABLE_MAGIC_LINK=\"\" \\\n # Google\n AUTH_GOOGLE_ID=\"\" \\\n AUTH_GOOGLE_SECRET=\"\" \\\n # GitHub\n AUTH_GITHUB_ID=\"\" \\\n AUTH_GITHUB_SECRET=\"\" \\\n # Microsoft\n AUTH_MICROSOFT_ID=\"\" \\\n AUTH_MICROSOFT_SECRET=\"\" \\\n AUTH_MICROSOFT_AUTHORITY_URL=\"\" \\\n AUTH_MICROSOFT_TENANT_ID=\"\"\n\n# Redis\nENV REDIS_URL=\"\" \\\n REDIS_PREFIX=\"\" \\\n REDIS_TLS=\"\"\n\n# Email\nENV EMAIL_SERVICE_PROVIDER=\"\" \\\n SMTP_HOST=\"\" \\\n SMTP_PORT=\"\" \\\n SMTP_SECURE=\"\" \\\n SMTP_USER=\"\" \\\n SMTP_PASS=\"\" \\\n SMTP_FROM=\"\" \\\n RESEND_API_KEY=\"\" \\\n RESEND_FROM=\"\"\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 S3_ENABLE_PATH_STYLE=\"\" \\\n S3_SET_ACL=\"\"\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 ENABLED_AWS_BEDROCK=\"\" 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 # ComfyUI\n ENABLED_COMFYUI=\"\" COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Vertex AI\n VERTEXAI_CREDENTIALS=\"\" VERTEXAI_PROJECT=\"\" VERTEXAI_LOCATION=\"\" VERTEXAI_MODEL_LIST=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 ENABLED_OPENAI=\"\" 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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\" \\\n # Cerebras\n CEREBRAS_API_KEY=\"\" CEREBRAS_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "687b36c81cc1927a5c7944a4512ceaa3636a9cfc": {"t": 1785769809.8436272, "n": 11955, "h": "82f3979cee78810a", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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 set -e && \\\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 apt update && \\\n apt install ca-certificates proxychains-ng -qy && \\\n mkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib && \\\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 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/lib/$(arch)-linux-gnu/librt.so.1 /distroless/lib/librt.so.1 && \\\n cp /usr/local/bin/node /distroless/bin/node && \\\n cp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt && \\\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\nENV 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 AUTH_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\nCOPY patches ./patches\n# bring in desktop workspace manifest so pnpm can resolve it\nCOPY apps/desktop/src/main/package.json ./apps/desktop/src/main/package.json\n\nRUN set -e && \\\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 export COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\\/$//') && \\\n npm i -g corepack@latest && \\\n corepack enable && \\\n corepack use $(sed -n 's/.*\"packageManager\": \"\\(.*\\)\".*/\\1/p' package.json) && \\\n pnpm i && \\\n mkdir -p /deps && \\\n cd /deps && \\\n pnpm init && \\\n pnpm add pg drizzle-orm\n\nCOPY . .\n\n# Prebuild: env checks (checkDeprecatedAuth, checkRequiredEnvVars, printEnvInfo) then remove desktop-only code\nRUN pnpm exec tsx scripts/dockerPrebuild.mts\nRUN rm -rf src/app/desktop \"src/app/(backend)/trpc/desktop\"\n\n# run build standalone for docker version\nRUN npm run build:docker\n\n# Prepare desktop export assets for Electron packaging (if generated)\nRUN set -e && \\\n if [ -d \"/app/out\" ]; then \\\n mkdir -p /app/apps/desktop/dist/next && \\\n cp -a /app/out/. /app/apps/desktop/dist/next/ && \\\n echo \"Copied Next export output into /app/apps/desktop/dist/next\"; \\\n else \\\n echo \"No Next export output found at /app/out, creating empty directory\" && \\\n mkdir -p /app/apps/desktop/dist/next; \\\n fi\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# Copy SPA assets (Vite build output)\nCOPY --from=builder /app/public/spa /app/public/spa\n# Copy Next export output for desktop renderer\nCOPY --from=builder /app/apps/desktop/dist/next /app/apps/desktop/dist/next\n\n# Copy database migrations\nCOPY --from=builder /app/packages/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 and shared scripts\nCOPY --from=builder /app/scripts/serverLauncher/startServer.js /app/startServer.js\nCOPY --from=builder /app/scripts/_shared /app/scripts/_shared\n\nRUN set -e && \\\n addgroup -S -g 1001 nodejs && \\\n adduser -D -G nodejs -H -S -h /app -u 1001 nextjs && \\\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_FILE=\"/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 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# Better Auth\nENV AUTH_SECRET=\"\" \\\n AUTH_SSO_PROVIDERS=\"\" \\\n AUTH_ALLOWED_EMAILS=\"\" \\\n AUTH_TRUSTED_ORIGINS=\"\" \\\n AUTH_DISABLE_EMAIL_PASSWORD=\"\" \\\n AUTH_EMAIL_VERIFICATION=\"\" \\\n AUTH_ENABLE_MAGIC_LINK=\"\" \\\n # Google\n AUTH_GOOGLE_ID=\"\" \\\n AUTH_GOOGLE_SECRET=\"\" \\\n # GitHub\n AUTH_GITHUB_ID=\"\" \\\n AUTH_GITHUB_SECRET=\"\" \\\n # Microsoft\n AUTH_MICROSOFT_ID=\"\" \\\n AUTH_MICROSOFT_SECRET=\"\" \\\n AUTH_MICROSOFT_AUTHORITY_URL=\"\" \\\n AUTH_MICROSOFT_TENANT_ID=\"\"\n\n# Redis\nENV REDIS_URL=\"\" \\\n REDIS_PREFIX=\"\" \\\n REDIS_TLS=\"\"\n\n# Email\nENV EMAIL_SERVICE_PROVIDER=\"\" \\\n SMTP_HOST=\"\" \\\n SMTP_PORT=\"\" \\\n SMTP_SECURE=\"\" \\\n SMTP_USER=\"\" \\\n SMTP_PASS=\"\" \\\n SMTP_FROM=\"\" \\\n RESEND_API_KEY=\"\" \\\n RESEND_FROM=\"\"\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 S3_ENABLE_PATH_STYLE=\"\" \\\n S3_SET_ACL=\"\"\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 ENABLED_AWS_BEDROCK=\"\" 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 # ComfyUI\n ENABLED_COMFYUI=\"\" COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Vertex AI\n VERTEXAI_CREDENTIALS=\"\" VERTEXAI_PROJECT=\"\" VERTEXAI_LOCATION=\"\" VERTEXAI_MODEL_LIST=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 ENABLED_OPENAI=\"\" 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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\" \\\n # Cerebras\n CEREBRAS_API_KEY=\"\" CEREBRAS_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "4a6be926047f87b6394418329888669cd964770c": {"t": 1785769811.1530194, "n": 11648, "h": "67c32e13499cb451", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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 set -e && \\\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 apt update && \\\n apt install ca-certificates proxychains-ng -qy && \\\n mkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib && \\\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 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/lib/$(arch)-linux-gnu/librt.so.1 /distroless/lib/librt.so.1 && \\\n cp /usr/local/bin/node /distroless/bin/node && \\\n cp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt && \\\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\nENV 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 AUTH_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\nCOPY patches ./patches\n# bring in desktop workspace manifest so pnpm can resolve it\nCOPY apps/desktop/src/main/package.json ./apps/desktop/src/main/package.json\n\nRUN set -e && \\\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 export COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\\/$//') && \\\n npm i -g corepack@latest && \\\n corepack enable && \\\n corepack use $(sed -n 's/.*\"packageManager\": \"\\(.*\\)\".*/\\1/p' package.json) && \\\n pnpm i && \\\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# Prepare desktop export assets for Electron packaging (if generated)\nRUN set -e && \\\n if [ -d \"/app/out\" ]; then \\\n mkdir -p /app/apps/desktop/dist/next && \\\n cp -a /app/out/. /app/apps/desktop/dist/next/ && \\\n echo \"Copied Next export output into /app/apps/desktop/dist/next\"; \\\n else \\\n echo \"No Next export output found at /app/out, creating empty directory\" && \\\n mkdir -p /app/apps/desktop/dist/next; \\\n fi\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# Copy Next export output for desktop renderer\nCOPY --from=builder /app/apps/desktop/dist/next /app/apps/desktop/dist/next\n\n# Copy database migrations\nCOPY --from=builder /app/packages/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 and shared scripts\nCOPY --from=builder /app/scripts/serverLauncher/startServer.js /app/startServer.js\nCOPY --from=builder /app/scripts/_shared /app/scripts/_shared\n\nRUN set -e && \\\n addgroup -S -g 1001 nodejs && \\\n adduser -D -G nodejs -H -S -h /app -u 1001 nextjs && \\\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_FILE=\"/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 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# Better Auth\nENV AUTH_SECRET=\"\" \\\n AUTH_SSO_PROVIDERS=\"\" \\\n AUTH_ALLOWED_EMAILS=\"\" \\\n AUTH_TRUSTED_ORIGINS=\"\" \\\n AUTH_DISABLE_EMAIL_PASSWORD=\"\" \\\n AUTH_EMAIL_VERIFICATION=\"\" \\\n AUTH_ENABLE_MAGIC_LINK=\"\" \\\n # Google\n AUTH_GOOGLE_ID=\"\" \\\n AUTH_GOOGLE_SECRET=\"\" \\\n # GitHub\n AUTH_GITHUB_ID=\"\" \\\n AUTH_GITHUB_SECRET=\"\" \\\n # Microsoft\n AUTH_MICROSOFT_ID=\"\" \\\n AUTH_MICROSOFT_SECRET=\"\" \\\n AUTH_MICROSOFT_AUTHORITY_URL=\"\" \\\n AUTH_MICROSOFT_TENANT_ID=\"\"\n\n# Redis\nENV REDIS_URL=\"\" \\\n REDIS_PREFIX=\"\" \\\n REDIS_TLS=\"\"\n\n# Email\nENV EMAIL_SERVICE_PROVIDER=\"\" \\\n SMTP_HOST=\"\" \\\n SMTP_PORT=\"\" \\\n SMTP_SECURE=\"\" \\\n SMTP_USER=\"\" \\\n SMTP_PASS=\"\" \\\n SMTP_FROM=\"\" \\\n RESEND_API_KEY=\"\" \\\n RESEND_FROM=\"\"\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 S3_ENABLE_PATH_STYLE=\"\" \\\n S3_SET_ACL=\"\"\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 ENABLED_AWS_BEDROCK=\"\" 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 # ComfyUI\n ENABLED_COMFYUI=\"\" COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Vertex AI\n VERTEXAI_CREDENTIALS=\"\" VERTEXAI_PROJECT=\"\" VERTEXAI_LOCATION=\"\" VERTEXAI_MODEL_LIST=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 ENABLED_OPENAI=\"\" 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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\" \\\n # Cerebras\n CEREBRAS_API_KEY=\"\" CEREBRAS_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "98f93ef2f0eed1ef474192d80ffc46de31d49e94": {"t": 1785769813.1949246, "n": 11571, "h": "813282d8a1bbeac2", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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 set -e && \\\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 apt update && \\\n apt install ca-certificates proxychains-ng -qy && \\\n mkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib && \\\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 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 cp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt && \\\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\nENV 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 AUTH_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\nCOPY patches ./patches\n# bring in desktop workspace manifest so pnpm can resolve it\nCOPY apps/desktop/src/main/package.json ./apps/desktop/src/main/package.json\n\nRUN set -e && \\\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 export COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\\/$//') && \\\n npm i -g corepack@latest && \\\n corepack enable && \\\n corepack use $(sed -n 's/.*\"packageManager\": \"\\(.*\\)\".*/\\1/p' package.json) && \\\n pnpm i && \\\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# Prepare desktop export assets for Electron packaging (if generated)\nRUN set -e && \\\n if [ -d \"/app/out\" ]; then \\\n mkdir -p /app/apps/desktop/dist/next && \\\n cp -a /app/out/. /app/apps/desktop/dist/next/ && \\\n echo \"Copied Next export output into /app/apps/desktop/dist/next\"; \\\n else \\\n echo \"No Next export output found at /app/out, creating empty directory\" && \\\n mkdir -p /app/apps/desktop/dist/next; \\\n fi\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# Copy Next export output for desktop renderer\nCOPY --from=builder /app/apps/desktop/dist/next /app/apps/desktop/dist/next\n\n# Copy database migrations\nCOPY --from=builder /app/packages/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 and shared scripts\nCOPY --from=builder /app/scripts/serverLauncher/startServer.js /app/startServer.js\nCOPY --from=builder /app/scripts/_shared /app/scripts/_shared\n\nRUN set -e && \\\n addgroup -S -g 1001 nodejs && \\\n adduser -D -G nodejs -H -S -h /app -u 1001 nextjs && \\\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_FILE=\"/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 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# Better Auth\nENV AUTH_SECRET=\"\" \\\n AUTH_SSO_PROVIDERS=\"\" \\\n AUTH_ALLOWED_EMAILS=\"\" \\\n AUTH_TRUSTED_ORIGINS=\"\" \\\n AUTH_DISABLE_EMAIL_PASSWORD=\"\" \\\n AUTH_EMAIL_VERIFICATION=\"\" \\\n AUTH_ENABLE_MAGIC_LINK=\"\" \\\n # Google\n AUTH_GOOGLE_ID=\"\" \\\n AUTH_GOOGLE_SECRET=\"\" \\\n # GitHub\n AUTH_GITHUB_ID=\"\" \\\n AUTH_GITHUB_SECRET=\"\" \\\n # Microsoft\n AUTH_MICROSOFT_ID=\"\" \\\n AUTH_MICROSOFT_SECRET=\"\" \\\n AUTH_MICROSOFT_AUTHORITY_URL=\"\" \\\n AUTH_MICROSOFT_TENANT_ID=\"\"\n\n# Redis\nENV REDIS_URL=\"\" \\\n REDIS_PREFIX=\"\" \\\n REDIS_TLS=\"\"\n\n# Email\nENV EMAIL_SERVICE_PROVIDER=\"\" \\\n SMTP_HOST=\"\" \\\n SMTP_PORT=\"\" \\\n SMTP_SECURE=\"\" \\\n SMTP_USER=\"\" \\\n SMTP_PASS=\"\" \\\n SMTP_FROM=\"\" \\\n RESEND_API_KEY=\"\" \\\n RESEND_FROM=\"\"\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 S3_ENABLE_PATH_STYLE=\"\" \\\n S3_SET_ACL=\"\"\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 ENABLED_AWS_BEDROCK=\"\" 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 # ComfyUI\n ENABLED_COMFYUI=\"\" COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Vertex AI\n VERTEXAI_CREDENTIALS=\"\" VERTEXAI_PROJECT=\"\" VERTEXAI_LOCATION=\"\" VERTEXAI_MODEL_LIST=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 ENABLED_OPENAI=\"\" 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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\" \\\n # Cerebras\n CEREBRAS_API_KEY=\"\" CEREBRAS_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "f3210a3f577b5955c0776c3f3ff2867e80d158cd": {"t": 1785769814.9918475, "n": 11499, "h": "a84217e032422e77", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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 set -e && \\\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 apt update && \\\n apt install ca-certificates proxychains-ng -qy && \\\n mkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib && \\\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 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 cp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt && \\\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\nENV 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 AUTH_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\nCOPY patches ./patches\n# bring in desktop workspace manifest so pnpm can resolve it\nCOPY apps/desktop/src/main/package.json ./apps/desktop/src/main/package.json\n\nRUN set -e && \\\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 export COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\\/$//') && \\\n npm i -g corepack@latest && \\\n corepack enable && \\\n corepack use $(sed -n 's/.*\"packageManager\": \"\\(.*\\)\".*/\\1/p' package.json) && \\\n pnpm i && \\\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# Prepare desktop export assets for Electron packaging (if generated)\nRUN set -e && \\\n if [ -d \"/app/out\" ]; then \\\n mkdir -p /app/apps/desktop/dist/next && \\\n cp -a /app/out/. /app/apps/desktop/dist/next/ && \\\n echo \"Copied Next export output into /app/apps/desktop/dist/next\"; \\\n else \\\n echo \"No Next export output found at /app/out, creating empty directory\" && \\\n mkdir -p /app/apps/desktop/dist/next; \\\n fi\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# Copy Next export output for desktop renderer\nCOPY --from=builder /app/apps/desktop/dist/next /app/apps/desktop/dist/next\n\n# Copy database migrations\nCOPY --from=builder /app/packages/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 and shared scripts\nCOPY --from=builder /app/scripts/serverLauncher/startServer.js /app/startServer.js\nCOPY --from=builder /app/scripts/_shared /app/scripts/_shared\n\nRUN set -e && \\\n addgroup -S -g 1001 nodejs && \\\n adduser -D -G nodejs -H -S -h /app -u 1001 nextjs && \\\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_FILE=\"/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 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# Better Auth\nENV AUTH_SECRET=\"\" \\\n AUTH_SSO_PROVIDERS=\"\" \\\n AUTH_ALLOWED_EMAILS=\"\" \\\n AUTH_TRUSTED_ORIGINS=\"\" \\\n AUTH_DISABLE_EMAIL_PASSWORD=\"\" \\\n AUTH_EMAIL_VERIFICATION=\"\" \\\n AUTH_ENABLE_MAGIC_LINK=\"\" \\\n # Google\n AUTH_GOOGLE_ID=\"\" \\\n AUTH_GOOGLE_SECRET=\"\" \\\n # GitHub\n AUTH_GITHUB_ID=\"\" \\\n AUTH_GITHUB_SECRET=\"\" \\\n # Microsoft\n AUTH_MICROSOFT_ID=\"\" \\\n AUTH_MICROSOFT_SECRET=\"\"\n\n# Redis\nENV REDIS_URL=\"\" \\\n REDIS_PREFIX=\"\" \\\n REDIS_TLS=\"\"\n\n# Email\nENV EMAIL_SERVICE_PROVIDER=\"\" \\\n SMTP_HOST=\"\" \\\n SMTP_PORT=\"\" \\\n SMTP_SECURE=\"\" \\\n SMTP_USER=\"\" \\\n SMTP_PASS=\"\" \\\n SMTP_FROM=\"\" \\\n RESEND_API_KEY=\"\" \\\n RESEND_FROM=\"\"\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 S3_ENABLE_PATH_STYLE=\"\" \\\n S3_SET_ACL=\"\"\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 ENABLED_AWS_BEDROCK=\"\" 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 # ComfyUI\n ENABLED_COMFYUI=\"\" COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Vertex AI\n VERTEXAI_CREDENTIALS=\"\" VERTEXAI_PROJECT=\"\" VERTEXAI_LOCATION=\"\" VERTEXAI_MODEL_LIST=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 ENABLED_OPENAI=\"\" 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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\" \\\n # Cerebras\n CEREBRAS_API_KEY=\"\" CEREBRAS_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "b8ef02e64776b8de2ffdb0b72e3fed858ba9828e": {"t": 1785769816.3831406, "n": 11420, "h": "994bbfb4dbeca3d8", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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 set -e && \\\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 apt update && \\\n apt install ca-certificates proxychains-ng -qy && \\\n mkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib && \\\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 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 cp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt && \\\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\nENV 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 AUTH_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\nCOPY patches ./patches\n# bring in desktop workspace manifest so pnpm can resolve it\nCOPY apps/desktop/src/main/package.json ./apps/desktop/src/main/package.json\n\nRUN set -e && \\\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 export COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\\/$//') && \\\n npm i -g corepack@latest && \\\n corepack enable && \\\n corepack use $(sed -n 's/.*\"packageManager\": \"\\(.*\\)\".*/\\1/p' package.json) && \\\n pnpm i && \\\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# Prepare desktop export assets for Electron packaging (if generated)\nRUN set -e && \\\n if [ -d \"/app/out\" ]; then \\\n mkdir -p /app/apps/desktop/dist/next && \\\n cp -a /app/out/. /app/apps/desktop/dist/next/ && \\\n echo \"Copied Next export output into /app/apps/desktop/dist/next\"; \\\n else \\\n echo \"No Next export output found at /app/out, creating empty directory\" && \\\n mkdir -p /app/apps/desktop/dist/next; \\\n fi\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# Copy Next export output for desktop renderer\nCOPY --from=builder /app/apps/desktop/dist/next /app/apps/desktop/dist/next\n\n# Copy database migrations\nCOPY --from=builder /app/packages/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 and shared scripts\nCOPY --from=builder /app/scripts/serverLauncher/startServer.js /app/startServer.js\nCOPY --from=builder /app/scripts/_shared /app/scripts/_shared\n\nRUN set -e && \\\n addgroup -S -g 1001 nodejs && \\\n adduser -D -G nodejs -H -S -h /app -u 1001 nextjs && \\\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_FILE=\"/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 ENABLE_AUTH_PROTECTION=\"\"\n\n# Database\nENV KEY_VAULTS_SECRET=\"\" \\\n DATABASE_DRIVER=\"node\" \\\n DATABASE_URL=\"\"\n\n# Better Auth\nENV AUTH_SECRET=\"\" \\\n AUTH_SSO_PROVIDERS=\"\" \\\n AUTH_ALLOWED_EMAILS=\"\" \\\n # Google\n AUTH_GOOGLE_ID=\"\" \\\n AUTH_GOOGLE_SECRET=\"\" \\\n # GitHub\n AUTH_GITHUB_ID=\"\" \\\n AUTH_GITHUB_SECRET=\"\" \\\n # Microsoft\n AUTH_MICROSOFT_ID=\"\" \\\n AUTH_MICROSOFT_SECRET=\"\"\n\n# Redis\nENV REDIS_URL=\"\" \\\n REDIS_PREFIX=\"\" \\\n REDIS_TLS=\"\"\n\n# Email\nENV EMAIL_SERVICE_PROVIDER=\"\" \\\n SMTP_HOST=\"\" \\\n SMTP_PORT=\"\" \\\n SMTP_SECURE=\"\" \\\n SMTP_USER=\"\" \\\n SMTP_PASS=\"\" \\\n SMTP_FROM=\"\" \\\n RESEND_API_KEY=\"\" \\\n RESEND_FROM=\"\"\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 S3_ENABLE_PATH_STYLE=\"\" \\\n S3_SET_ACL=\"\"\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 ENABLED_AWS_BEDROCK=\"\" 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 # ComfyUI\n ENABLED_COMFYUI=\"\" COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Vertex AI\n VERTEXAI_CREDENTIALS=\"\" VERTEXAI_PROJECT=\"\" VERTEXAI_LOCATION=\"\" VERTEXAI_MODEL_LIST=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 ENABLED_OPENAI=\"\" 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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\" \\\n # Cerebras\n CEREBRAS_API_KEY=\"\" CEREBRAS_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "a43415bd605dee02b06cc575c0f7847d91cb37a6": {"t": 1785769817.9479299, "n": 11137, "h": "d61bfe2ea42c73fc", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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 <<'EOF'\nset -e\nif [ \"${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\"\nfi\napt update\napt install ca-certificates proxychains-ng -qy\nmkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib\ncp /usr/lib/$(arch)-linux-gnu/libproxychains.so.4 /distroless/lib/libproxychains.so.4\ncp /usr/lib/$(arch)-linux-gnu/libdl.so.2 /distroless/lib/libdl.so.2\ncp /usr/bin/proxychains4 /distroless/bin/proxychains\ncp /etc/proxychains4.conf /distroless/etc/proxychains4.conf\ncp /usr/lib/$(arch)-linux-gnu/libstdc++.so.6 /distroless/lib/libstdc++.so.6\ncp /usr/lib/$(arch)-linux-gnu/libgcc_s.so.1 /distroless/lib/libgcc_s.so.1\ncp /usr/local/bin/node /distroless/bin/node\ncp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt\nrm -rf /tmp/* /var/lib/apt/lists/* /var/tmp/*\nEOF\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\nENV 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 AUTH_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\nCOPY patches ./patches\n# bring in desktop workspace manifest so pnpm can resolve it\nCOPY apps/desktop/src/main/package.json ./apps/desktop/src/main/package.json\n\nRUN <<'EOF'\nset -e\nif [ \"${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\nfi\nexport COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\\/$//')\nnpm i -g corepack@latest\ncorepack enable\ncorepack use $(sed -n 's/.*\"packageManager\": \"\\(.*\\)\".*/\\1/p' package.json)\npnpm i\nmkdir -p /deps\ncd /deps\npnpm init\npnpm add pg drizzle-orm\nEOF\n\nCOPY . .\n\n# run build standalone for docker version\nRUN npm run build:docker\n\n# Prepare desktop export assets for Electron packaging (if generated)\nRUN <<'EOF'\nset -e\nif [ -d \"/app/out\" ]; then\n mkdir -p /app/apps/desktop/dist/next\n cp -a /app/out/. /app/apps/desktop/dist/next/\n echo \"✅ Copied Next export output into /app/apps/desktop/dist/next\"\nelse\n echo \"ℹ️ No Next export output found at /app/out, creating empty directory\"\n mkdir -p /app/apps/desktop/dist/next\nfi\nEOF\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# Copy Next export output for desktop renderer\nCOPY --from=builder /app/apps/desktop/dist/next /app/apps/desktop/dist/next\n\n# Copy database migrations\nCOPY --from=builder /app/packages/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 and shared scripts\nCOPY --from=builder /app/scripts/serverLauncher/startServer.js /app/startServer.js\nCOPY --from=builder /app/scripts/_shared /app/scripts/_shared\n\nRUN <<'EOF'\nset -e\naddgroup -S -g 1001 nodejs\nadduser -D -G nodejs -H -S -h /app -u 1001 nextjs\nchown -R nextjs:nodejs /app /etc/proxychains4.conf\nEOF\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_FILE=\"/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 ENABLE_AUTH_PROTECTION=\"\"\n\n# Database\nENV KEY_VAULTS_SECRET=\"\" \\\n DATABASE_DRIVER=\"node\" \\\n DATABASE_URL=\"\"\n\n# Better Auth\nENV AUTH_SECRET=\"\" \\\n AUTH_SSO_PROVIDERS=\"\" \\\n AUTH_ALLOWED_EMAILS=\"\" \\\n # Google\n AUTH_GOOGLE_ID=\"\" \\\n AUTH_GOOGLE_SECRET=\"\" \\\n # GitHub\n AUTH_GITHUB_ID=\"\" \\\n AUTH_GITHUB_SECRET=\"\" \\\n # Microsoft\n AUTH_MICROSOFT_ID=\"\" \\\n AUTH_MICROSOFT_SECRET=\"\"\n\n# Redis\nENV REDIS_URL=\"\" \\\n REDIS_PREFIX=\"\" \\\n REDIS_TLS=\"\"\n\n# Email\nENV EMAIL_SERVICE_PROVIDER=\"\" \\\n SMTP_HOST=\"\" \\\n SMTP_PORT=\"\" \\\n SMTP_SECURE=\"\" \\\n SMTP_USER=\"\" \\\n SMTP_PASS=\"\" \\\n SMTP_FROM=\"\" \\\n RESEND_API_KEY=\"\" \\\n RESEND_FROM=\"\"\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 S3_ENABLE_PATH_STYLE=\"\" \\\n S3_SET_ACL=\"\"\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 ENABLED_AWS_BEDROCK=\"\" 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 # ComfyUI\n ENABLED_COMFYUI=\"\" COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Vertex AI\n VERTEXAI_CREDENTIALS=\"\" VERTEXAI_PROJECT=\"\" VERTEXAI_LOCATION=\"\" VERTEXAI_MODEL_LIST=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 ENABLED_OPENAI=\"\" 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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\" \\\n # Cerebras\n CEREBRAS_API_KEY=\"\" CEREBRAS_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "1eff8646f73eb74edba63a9d5a7f18e5bc0f0320": {"t": 1785769819.7642035, "n": 11103, "h": "c36be78654b23172", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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 <<'EOF'\nset -e\nif [ \"${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\"\nfi\napt update\napt install ca-certificates proxychains-ng -qy\nmkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib\ncp /usr/lib/$(arch)-linux-gnu/libproxychains.so.4 /distroless/lib/libproxychains.so.4\ncp /usr/lib/$(arch)-linux-gnu/libdl.so.2 /distroless/lib/libdl.so.2\ncp /usr/bin/proxychains4 /distroless/bin/proxychains\ncp /etc/proxychains4.conf /distroless/etc/proxychains4.conf\ncp /usr/lib/$(arch)-linux-gnu/libstdc++.so.6 /distroless/lib/libstdc++.so.6\ncp /usr/lib/$(arch)-linux-gnu/libgcc_s.so.1 /distroless/lib/libgcc_s.so.1\ncp /usr/local/bin/node /distroless/bin/node\ncp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt\nrm -rf /tmp/* /var/lib/apt/lists/* /var/tmp/*\nEOF\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\nENV 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\nCOPY patches ./patches\n# bring in desktop workspace manifest so pnpm can resolve it\nCOPY apps/desktop/src/main/package.json ./apps/desktop/src/main/package.json\n\nRUN <<'EOF'\nset -e\nif [ \"${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\nfi\nexport COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\\/$//')\nnpm i -g corepack@latest\ncorepack enable\ncorepack use $(sed -n 's/.*\"packageManager\": \"\\(.*\\)\".*/\\1/p' package.json)\npnpm i\nmkdir -p /deps\ncd /deps\npnpm init\npnpm add pg drizzle-orm\nEOF\n\nCOPY . .\n\n# run build standalone for docker version\nRUN npm run build:docker\n\n# Prepare desktop export assets for Electron packaging (if generated)\nRUN <<'EOF'\nset -e\nif [ -d \"/app/out\" ]; then\n mkdir -p /app/apps/desktop/dist/next\n cp -a /app/out/. /app/apps/desktop/dist/next/\n echo \"✅ Copied Next export output into /app/apps/desktop/dist/next\"\nelse\n echo \"ℹ️ No Next export output found at /app/out, creating empty directory\"\n mkdir -p /app/apps/desktop/dist/next\nfi\nEOF\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# Copy Next export output for desktop renderer\nCOPY --from=builder /app/apps/desktop/dist/next /app/apps/desktop/dist/next\n\n# Copy database migrations\nCOPY --from=builder /app/packages/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 and shared scripts\nCOPY --from=builder /app/scripts/serverLauncher/startServer.js /app/startServer.js\nCOPY --from=builder /app/scripts/_shared /app/scripts/_shared\n\nRUN <<'EOF'\nset -e\naddgroup -S -g 1001 nodejs\nadduser -D -G nodejs -H -S -h /app -u 1001 nextjs\nchown -R nextjs:nodejs /app /etc/proxychains4.conf\nEOF\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_FILE=\"/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 ENABLE_AUTH_PROTECTION=\"\"\n\n# Database\nENV KEY_VAULTS_SECRET=\"\" \\\n DATABASE_DRIVER=\"node\" \\\n DATABASE_URL=\"\"\n\n# Better Auth\nENV AUTH_SECRET=\"\" \\\n AUTH_SSO_PROVIDERS=\"\" \\\n AUTH_ALLOWED_EMAILS=\"\" \\\n # Google\n AUTH_GOOGLE_ID=\"\" \\\n AUTH_GOOGLE_SECRET=\"\" \\\n # GitHub\n AUTH_GITHUB_ID=\"\" \\\n AUTH_GITHUB_SECRET=\"\" \\\n # Microsoft\n AUTH_MICROSOFT_ID=\"\" \\\n AUTH_MICROSOFT_SECRET=\"\"\n\n# Redis\nENV REDIS_URL=\"\" \\\n REDIS_PREFIX=\"\" \\\n REDIS_TLS=\"\"\n\n# Email\nENV EMAIL_SERVICE_PROVIDER=\"\" \\\n SMTP_HOST=\"\" \\\n SMTP_PORT=\"\" \\\n SMTP_SECURE=\"\" \\\n SMTP_USER=\"\" \\\n SMTP_PASS=\"\" \\\n SMTP_FROM=\"\" \\\n RESEND_API_KEY=\"\" \\\n RESEND_FROM=\"\"\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 S3_ENABLE_PATH_STYLE=\"\" \\\n S3_SET_ACL=\"\"\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 ENABLED_AWS_BEDROCK=\"\" 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 # ComfyUI\n ENABLED_COMFYUI=\"\" COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Vertex AI\n VERTEXAI_CREDENTIALS=\"\" VERTEXAI_PROJECT=\"\" VERTEXAI_LOCATION=\"\" VERTEXAI_MODEL_LIST=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 ENABLED_OPENAI=\"\" 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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\" \\\n # Cerebras\n CEREBRAS_API_KEY=\"\" CEREBRAS_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "395595a2c82c340f793b8bd40725f67c42e25af1": {"t": 1785769824.0734587, "n": 10708, "h": "55c1ef49f2c6bd82", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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 <<'EOF'\nset -e\nif [ \"${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\"\nfi\napt update\napt install ca-certificates proxychains-ng -qy\nmkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib\ncp /usr/lib/$(arch)-linux-gnu/libproxychains.so.4 /distroless/lib/libproxychains.so.4\ncp /usr/lib/$(arch)-linux-gnu/libdl.so.2 /distroless/lib/libdl.so.2\ncp /usr/bin/proxychains4 /distroless/bin/proxychains\ncp /etc/proxychains4.conf /distroless/etc/proxychains4.conf\ncp /usr/lib/$(arch)-linux-gnu/libstdc++.so.6 /distroless/lib/libstdc++.so.6\ncp /usr/lib/$(arch)-linux-gnu/libgcc_s.so.1 /distroless/lib/libgcc_s.so.1\ncp /usr/local/bin/node /distroless/bin/node\ncp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt\nrm -rf /tmp/* /var/lib/apt/lists/* /var/tmp/*\nEOF\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_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_ENABLE_NEXT_AUTH=\"${NEXT_PUBLIC_ENABLE_NEXT_AUTH:-0}\" \\\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\nCOPY patches ./patches\n# bring in desktop workspace manifest so pnpm can resolve it\nCOPY apps/desktop/src/main/package.json ./apps/desktop/src/main/package.json\n\nRUN <<'EOF'\nset -e\nif [ \"${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\nfi\nexport COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\\/$//')\nnpm i -g corepack@latest\ncorepack enable\ncorepack use $(sed -n 's/.*\"packageManager\": \"\\(.*\\)\".*/\\1/p' package.json)\npnpm i\nmkdir -p /deps\ncd /deps\npnpm init\npnpm add pg drizzle-orm\nEOF\n\nCOPY . .\n\n# run build standalone for docker version\nRUN npm run build:docker\n\n# Prepare desktop export assets for Electron packaging (if generated)\nRUN <<'EOF'\nset -e\nif [ -d \"/app/out\" ]; then\n mkdir -p /app/apps/desktop/dist/next\n cp -a /app/out/. /app/apps/desktop/dist/next/\n echo \"✅ Copied Next export output into /app/apps/desktop/dist/next\"\nelse\n echo \"ℹ️ No Next export output found at /app/out, creating empty directory\"\n mkdir -p /app/apps/desktop/dist/next\nfi\nEOF\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# Copy Next export output for desktop renderer\nCOPY --from=builder /app/apps/desktop/dist/next /app/apps/desktop/dist/next\n\n# Copy database migrations\nCOPY --from=builder /app/packages/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 and shared scripts\nCOPY --from=builder /app/scripts/serverLauncher/startServer.js /app/startServer.js\nCOPY --from=builder /app/scripts/_shared /app/scripts/_shared\n\nRUN <<'EOF'\nset -e\naddgroup -S -g 1001 nodejs\nadduser -D -G nodejs -H -S -h /app -u 1001 nextjs\nchown -R nextjs:nodejs /app /etc/proxychains4.conf\nEOF\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_FILE=\"/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 ENABLE_AUTH_PROTECTION=\"\"\n\n# Database\nENV KEY_VAULTS_SECRET=\"\" \\\n DATABASE_DRIVER=\"node\" \\\n DATABASE_URL=\"\"\n\n# Better Auth\nENV AUTH_SECRET=\"\" \\\n AUTH_SSO_PROVIDERS=\"\"\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 S3_ENABLE_PATH_STYLE=\"\" \\\n S3_SET_ACL=\"\"\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 ENABLED_AWS_BEDROCK=\"\" 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 # ComfyUI\n ENABLED_COMFYUI=\"\" COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Vertex AI\n VERTEXAI_CREDENTIALS=\"\" VERTEXAI_PROJECT=\"\" VERTEXAI_LOCATION=\"\" VERTEXAI_MODEL_LIST=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 ENABLED_OPENAI=\"\" 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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\" \\\n # Cerebras\n CEREBRAS_API_KEY=\"\" CEREBRAS_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "c0f98751954bf648d555360fc29e248c2276d43a": {"t": 1785769825.6978786, "n": 11065, "h": "d9504d97bcbf7bff", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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 <<'EOF'\nset -e\nif [ \"${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\"\nfi\napt update\napt install ca-certificates proxychains-ng -qy\nmkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib\ncp /usr/lib/$(arch)-linux-gnu/libproxychains.so.4 /distroless/lib/libproxychains.so.4\ncp /usr/lib/$(arch)-linux-gnu/libdl.so.2 /distroless/lib/libdl.so.2\ncp /usr/bin/proxychains4 /distroless/bin/proxychains\ncp /etc/proxychains4.conf /distroless/etc/proxychains4.conf\ncp /usr/lib/$(arch)-linux-gnu/libstdc++.so.6 /distroless/lib/libstdc++.so.6\ncp /usr/lib/$(arch)-linux-gnu/libgcc_s.so.1 /distroless/lib/libgcc_s.so.1\ncp /usr/local/bin/node /distroless/bin/node\ncp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt\nrm -rf /tmp/* /var/lib/apt/lists/* /var/tmp/*\nEOF\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_ENABLE_BETTER_AUTH\nARG NEXT_PUBLIC_ENABLE_NEXT_AUTH\nARG NEXT_PUBLIC_ENABLE_CLERK_AUTH\nARG NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY\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_ENABLE_BETTER_AUTH=\"${NEXT_PUBLIC_ENABLE_BETTER_AUTH:-0}\" \\\n NEXT_PUBLIC_ENABLE_NEXT_AUTH=\"${NEXT_PUBLIC_ENABLE_NEXT_AUTH:-1}\" \\\n NEXT_PUBLIC_ENABLE_CLERK_AUTH=\"${NEXT_PUBLIC_ENABLE_CLERK_AUTH:-0}\" \\\n NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=\"${NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY}\" \\\n CLERK_WEBHOOK_SECRET=\"whsec_xxx\" \\\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\nCOPY patches ./patches\n# bring in desktop workspace manifest so pnpm can resolve it\nCOPY apps/desktop/src/main/package.json ./apps/desktop/src/main/package.json\n\nRUN <<'EOF'\nset -e\nif [ \"${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\nfi\nexport COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\\/$//')\nnpm i -g corepack@latest\ncorepack enable\ncorepack use $(sed -n 's/.*\"packageManager\": \"\\(.*\\)\".*/\\1/p' package.json)\npnpm i\nmkdir -p /deps\ncd /deps\npnpm init\npnpm add pg drizzle-orm\nEOF\n\nCOPY . .\n\n# run build standalone for docker version\nRUN npm run build:docker\n\n# Prepare desktop export assets for Electron packaging (if generated)\nRUN <<'EOF'\nset -e\nif [ -d \"/app/out\" ]; then\n mkdir -p /app/apps/desktop/dist/next\n cp -a /app/out/. /app/apps/desktop/dist/next/\n echo \"✅ Copied Next export output into /app/apps/desktop/dist/next\"\nelse\n echo \"ℹ️ No Next export output found at /app/out, creating empty directory\"\n mkdir -p /app/apps/desktop/dist/next\nfi\nEOF\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# Copy Next export output for desktop renderer\nCOPY --from=builder /app/apps/desktop/dist/next /app/apps/desktop/dist/next\n\n# Copy database migrations\nCOPY --from=builder /app/packages/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 <<'EOF'\nset -e\naddgroup -S -g 1001 nodejs\nadduser -D -G nodejs -H -S -h /app -u 1001 nextjs\nchown -R nextjs:nodejs /app /etc/proxychains4.conf\nEOF\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_FILE=\"/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 ENABLE_AUTH_PROTECTION=\"\"\n\n# Database\nENV KEY_VAULTS_SECRET=\"\" \\\n DATABASE_DRIVER=\"node\" \\\n DATABASE_URL=\"\"\n\n# Better Auth\nENV AUTH_SECRET=\"\" \\\n AUTH_SSO_PROVIDERS=\"\"\n\n# Clerk\nENV CLERK_SECRET_KEY=\"\" \\\n CLERK_WEBHOOK_SECRET=\"\"\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 S3_ENABLE_PATH_STYLE=\"\" \\\n S3_SET_ACL=\"\"\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 ENABLED_AWS_BEDROCK=\"\" 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 # ComfyUI\n ENABLED_COMFYUI=\"\" COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Vertex AI\n VERTEXAI_CREDENTIALS=\"\" VERTEXAI_PROJECT=\"\" VERTEXAI_LOCATION=\"\" VERTEXAI_MODEL_LIST=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 ENABLED_OPENAI=\"\" 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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\" \\\n # Cerebras\n CEREBRAS_API_KEY=\"\" CEREBRAS_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "5034fd02d46537c41f203eabe60ea23a84c1afac": {"t": 1785769827.205138, "n": 11095, "h": "c089d50c34d7d4ed", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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 <<'EOF'\nset -e\nif [ \"${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\"\nfi\napt update\napt install ca-certificates proxychains-ng -qy\nmkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib\ncp /usr/lib/$(arch)-linux-gnu/libproxychains.so.4 /distroless/lib/libproxychains.so.4\ncp /usr/lib/$(arch)-linux-gnu/libdl.so.2 /distroless/lib/libdl.so.2\ncp /usr/bin/proxychains4 /distroless/bin/proxychains\ncp /etc/proxychains4.conf /distroless/etc/proxychains4.conf\ncp /usr/lib/$(arch)-linux-gnu/libstdc++.so.6 /distroless/lib/libstdc++.so.6\ncp /usr/lib/$(arch)-linux-gnu/libgcc_s.so.1 /distroless/lib/libgcc_s.so.1\ncp /usr/local/bin/node /distroless/bin/node\ncp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt\nrm -rf /tmp/* /var/lib/apt/lists/* /var/tmp/*\nEOF\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_ENABLE_BETTER_AUTH\nARG NEXT_PUBLIC_ENABLE_NEXT_AUTH\nARG NEXT_PUBLIC_ENABLE_CLERK_AUTH\nARG NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY\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_ENABLE_BETTER_AUTH=\"${NEXT_PUBLIC_ENABLE_BETTER_AUTH:-0}\" \\\n NEXT_PUBLIC_ENABLE_NEXT_AUTH=\"${NEXT_PUBLIC_ENABLE_NEXT_AUTH:-1}\" \\\n NEXT_PUBLIC_ENABLE_CLERK_AUTH=\"${NEXT_PUBLIC_ENABLE_CLERK_AUTH:-0}\" \\\n NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=\"${NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY}\" \\\n CLERK_WEBHOOK_SECRET=\"whsec_xxx\" \\\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\nCOPY patches ./patches\n# bring in desktop workspace manifest so pnpm can resolve it\nCOPY apps/desktop/src/main/package.json ./apps/desktop/src/main/package.json\n\nRUN <<'EOF'\nset -e\nif [ \"${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\nfi\nexport COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\\/$//')\nnpm i -g corepack@latest\ncorepack enable\ncorepack use $(sed -n 's/.*\"packageManager\": \"\\(.*\\)\".*/\\1/p' package.json)\npnpm i\nmkdir -p /deps\ncd /deps\npnpm init\npnpm add pg drizzle-orm\nEOF\n\nCOPY . .\n\n# run build standalone for docker version\nRUN npm run build:docker\n\n# Prepare desktop export assets for Electron packaging (if generated)\nRUN <<'EOF'\nset -e\nif [ -d \"/app/out\" ]; then\n mkdir -p /app/apps/desktop/dist/next\n cp -a /app/out/. /app/apps/desktop/dist/next/\n echo \"✅ Copied Next export output into /app/apps/desktop/dist/next\"\nelse\n echo \"ℹ️ No Next export output found at /app/out, creating empty directory\"\n mkdir -p /app/apps/desktop/dist/next\nfi\nEOF\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# Copy Next export output for desktop renderer\nCOPY --from=builder /app/apps/desktop/dist/next /app/apps/desktop/dist/next\n\n# Copy database migrations\nCOPY --from=builder /app/packages/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 <<'EOF'\nset -e\naddgroup -S -g 1001 nodejs\nadduser -D -G nodejs -H -S -h /app -u 1001 nextjs\nchown -R nextjs:nodejs /app /etc/proxychains4.conf\nEOF\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_FILE=\"/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 ENABLE_AUTH_PROTECTION=\"\"\n\n# Database\nENV KEY_VAULTS_SECRET=\"\" \\\n DATABASE_DRIVER=\"node\" \\\n DATABASE_URL=\"\"\n\n# Better Auth\nENV AUTH_SECRET=\"\" \\\n AUTH_SSO_PROVIDERS=\"\" \\\n NEXT_PUBLIC_AUTH_URL=\"\"\n\n# Clerk\nENV CLERK_SECRET_KEY=\"\" \\\n CLERK_WEBHOOK_SECRET=\"\"\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 S3_ENABLE_PATH_STYLE=\"\" \\\n S3_SET_ACL=\"\"\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 ENABLED_AWS_BEDROCK=\"\" 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 # ComfyUI\n ENABLED_COMFYUI=\"\" COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Vertex AI\n VERTEXAI_CREDENTIALS=\"\" VERTEXAI_PROJECT=\"\" VERTEXAI_LOCATION=\"\" VERTEXAI_MODEL_LIST=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 ENABLED_OPENAI=\"\" 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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\" \\\n # Cerebras\n CEREBRAS_API_KEY=\"\" CEREBRAS_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "5380f76ed1488936f508e755d106c49a22703b21": {"t": 1785769828.5265377, "n": 11072, "h": "9da26e108ddc82ec", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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 <<'EOF'\nset -e\nif [ \"${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\"\nfi\napt update\napt install ca-certificates proxychains-ng -qy\nmkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib\ncp /usr/lib/$(arch)-linux-gnu/libproxychains.so.4 /distroless/lib/libproxychains.so.4\ncp /usr/lib/$(arch)-linux-gnu/libdl.so.2 /distroless/lib/libdl.so.2\ncp /usr/bin/proxychains4 /distroless/bin/proxychains\ncp /etc/proxychains4.conf /distroless/etc/proxychains4.conf\ncp /usr/lib/$(arch)-linux-gnu/libstdc++.so.6 /distroless/lib/libstdc++.so.6\ncp /usr/lib/$(arch)-linux-gnu/libgcc_s.so.1 /distroless/lib/libgcc_s.so.1\ncp /usr/local/bin/node /distroless/bin/node\ncp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt\nrm -rf /tmp/* /var/lib/apt/lists/* /var/tmp/*\nEOF\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_ENABLE_BETTER_AUTH\nARG NEXT_PUBLIC_ENABLE_NEXT_AUTH\nARG NEXT_PUBLIC_ENABLE_CLERK_AUTH\nARG NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY\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_ENABLE_BETTER_AUTH=\"${NEXT_PUBLIC_ENABLE_BETTER_AUTH:-0}\" \\\n NEXT_PUBLIC_ENABLE_NEXT_AUTH=\"${NEXT_PUBLIC_ENABLE_NEXT_AUTH:-1}\" \\\n NEXT_PUBLIC_ENABLE_CLERK_AUTH=\"${NEXT_PUBLIC_ENABLE_CLERK_AUTH:-0}\" \\\n NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=\"${NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY}\" \\\n CLERK_WEBHOOK_SECRET=\"whsec_xxx\" \\\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# bring in desktop workspace manifest so pnpm can resolve it\nCOPY apps/desktop/src/main/package.json ./apps/desktop/src/main/package.json\n\nRUN <<'EOF'\nset -e\nif [ \"${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\nfi\nexport COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\\/$//')\nnpm i -g corepack@latest\ncorepack enable\ncorepack use $(sed -n 's/.*\"packageManager\": \"\\(.*\\)\".*/\\1/p' package.json)\npnpm i\nmkdir -p /deps\ncd /deps\npnpm init\npnpm add pg drizzle-orm\nEOF\n\nCOPY . .\n\n# run build standalone for docker version\nRUN npm run build:docker\n\n# Prepare desktop export assets for Electron packaging (if generated)\nRUN <<'EOF'\nset -e\nif [ -d \"/app/out\" ]; then\n mkdir -p /app/apps/desktop/dist/next\n cp -a /app/out/. /app/apps/desktop/dist/next/\n echo \"✅ Copied Next export output into /app/apps/desktop/dist/next\"\nelse\n echo \"ℹ️ No Next export output found at /app/out, creating empty directory\"\n mkdir -p /app/apps/desktop/dist/next\nfi\nEOF\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# Copy Next export output for desktop renderer\nCOPY --from=builder /app/apps/desktop/dist/next /app/apps/desktop/dist/next\n\n# Copy database migrations\nCOPY --from=builder /app/packages/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 <<'EOF'\nset -e\naddgroup -S -g 1001 nodejs\nadduser -D -G nodejs -H -S -h /app -u 1001 nextjs\nchown -R nextjs:nodejs /app /etc/proxychains4.conf\nEOF\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_FILE=\"/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 ENABLE_AUTH_PROTECTION=\"\"\n\n# Database\nENV KEY_VAULTS_SECRET=\"\" \\\n DATABASE_DRIVER=\"node\" \\\n DATABASE_URL=\"\"\n\n# Better Auth\nENV AUTH_SECRET=\"\" \\\n AUTH_SSO_PROVIDERS=\"\" \\\n NEXT_PUBLIC_AUTH_URL=\"\"\n\n# Clerk\nENV CLERK_SECRET_KEY=\"\" \\\n CLERK_WEBHOOK_SECRET=\"\"\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 S3_ENABLE_PATH_STYLE=\"\" \\\n S3_SET_ACL=\"\"\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 ENABLED_AWS_BEDROCK=\"\" 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 # ComfyUI\n ENABLED_COMFYUI=\"\" COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Vertex AI\n VERTEXAI_CREDENTIALS=\"\" VERTEXAI_PROJECT=\"\" VERTEXAI_LOCATION=\"\" VERTEXAI_MODEL_LIST=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 ENABLED_OPENAI=\"\" 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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\" \\\n # Cerebras\n CEREBRAS_API_KEY=\"\" CEREBRAS_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "10e048c9c51206cbe9646a8a31309e0e3797b22c": {"t": 1785769830.1410196, "n": 11072, "h": "899d917df70b7f90", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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 <<'EOF'\nset -e\nif [ \"${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\"\nfi\napt update\napt install ca-certificates proxychains-ng -qy\nmkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib\ncp /usr/lib/$(arch)-linux-gnu/libproxychains.so.4 /distroless/lib/libproxychains.so.4\ncp /usr/lib/$(arch)-linux-gnu/libdl.so.2 /distroless/lib/libdl.so.2\ncp /usr/bin/proxychains4 /distroless/bin/proxychains\ncp /etc/proxychains4.conf /distroless/etc/proxychains4.conf\ncp /usr/lib/$(arch)-linux-gnu/libstdc++.so.6 /distroless/lib/libstdc++.so.6\ncp /usr/lib/$(arch)-linux-gnu/libgcc_s.so.1 /distroless/lib/libgcc_s.so.1\ncp /usr/local/bin/node /distroless/bin/node\ncp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt\nrm -rf /tmp/* /var/lib/apt/lists/* /var/tmp/*\nEOF\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_ENABLE_BETTER_AUTH\nARG NEXT_PUBLIC_ENABLE_NEXT_AUTH\nARG NEXT_PUBLIC_ENABLE_CLERK_AUTH\nARG NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY\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_ENABLE_BETTER_AUTH=\"${NEXT_PUBLIC_ENABLE_BETTER_AUTH:-0}\" \\\n NEXT_PUBLIC_ENABLE_NEXT_AUTH=\"${NEXT_PUBLIC_ENABLE_NEXT_AUTH:-1}\" \\\n NEXT_PUBLIC_ENABLE_CLERK_AUTH=\"${NEXT_PUBLIC_ENABLE_CLERK_AUTH:-0}\" \\\n NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=\"${NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY}\" \\\n CLERK_WEBHOOK_SECRET=\"whsec_xxx\" \\\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=6144\"\n\nWORKDIR /app\n\nCOPY package.json pnpm-workspace.yaml ./\nCOPY .npmrc ./\nCOPY packages ./packages\n# bring in desktop workspace manifest so pnpm can resolve it\nCOPY apps/desktop/src/main/package.json ./apps/desktop/src/main/package.json\n\nRUN <<'EOF'\nset -e\nif [ \"${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\nfi\nexport COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\\/$//')\nnpm i -g corepack@latest\ncorepack enable\ncorepack use $(sed -n 's/.*\"packageManager\": \"\\(.*\\)\".*/\\1/p' package.json)\npnpm i\nmkdir -p /deps\ncd /deps\npnpm init\npnpm add pg drizzle-orm\nEOF\n\nCOPY . .\n\n# run build standalone for docker version\nRUN npm run build:docker\n\n# Prepare desktop export assets for Electron packaging (if generated)\nRUN <<'EOF'\nset -e\nif [ -d \"/app/out\" ]; then\n mkdir -p /app/apps/desktop/dist/next\n cp -a /app/out/. /app/apps/desktop/dist/next/\n echo \"✅ Copied Next export output into /app/apps/desktop/dist/next\"\nelse\n echo \"ℹ️ No Next export output found at /app/out, creating empty directory\"\n mkdir -p /app/apps/desktop/dist/next\nfi\nEOF\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# Copy Next export output for desktop renderer\nCOPY --from=builder /app/apps/desktop/dist/next /app/apps/desktop/dist/next\n\n# Copy database migrations\nCOPY --from=builder /app/packages/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 <<'EOF'\nset -e\naddgroup -S -g 1001 nodejs\nadduser -D -G nodejs -H -S -h /app -u 1001 nextjs\nchown -R nextjs:nodejs /app /etc/proxychains4.conf\nEOF\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_FILE=\"/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 ENABLE_AUTH_PROTECTION=\"\"\n\n# Database\nENV KEY_VAULTS_SECRET=\"\" \\\n DATABASE_DRIVER=\"node\" \\\n DATABASE_URL=\"\"\n\n# Better Auth\nENV AUTH_SECRET=\"\" \\\n AUTH_SSO_PROVIDERS=\"\" \\\n NEXT_PUBLIC_AUTH_URL=\"\"\n\n# Clerk\nENV CLERK_SECRET_KEY=\"\" \\\n CLERK_WEBHOOK_SECRET=\"\"\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 S3_ENABLE_PATH_STYLE=\"\" \\\n S3_SET_ACL=\"\"\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 ENABLED_AWS_BEDROCK=\"\" 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 # ComfyUI\n ENABLED_COMFYUI=\"\" COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Vertex AI\n VERTEXAI_CREDENTIALS=\"\" VERTEXAI_PROJECT=\"\" VERTEXAI_LOCATION=\"\" VERTEXAI_MODEL_LIST=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 ENABLED_OPENAI=\"\" 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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\" \\\n # Cerebras\n CEREBRAS_API_KEY=\"\" CEREBRAS_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "f3357b0b46eb95cef22b4c9aab88cb3ca45cd55e": {"t": 1785769831.5628114, "n": 10536, "h": "5a1b7144917e62b7", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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 <<'EOF'\nset -e\nif [ \"${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\"\nfi\napt update\napt install ca-certificates proxychains-ng -qy\nmkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib\ncp /usr/lib/$(arch)-linux-gnu/libproxychains.so.4 /distroless/lib/libproxychains.so.4\ncp /usr/lib/$(arch)-linux-gnu/libdl.so.2 /distroless/lib/libdl.so.2\ncp /usr/bin/proxychains4 /distroless/bin/proxychains\ncp /etc/proxychains4.conf /distroless/etc/proxychains4.conf\ncp /usr/lib/$(arch)-linux-gnu/libstdc++.so.6 /distroless/lib/libstdc++.so.6\ncp /usr/lib/$(arch)-linux-gnu/libgcc_s.so.1 /distroless/lib/libgcc_s.so.1\ncp /usr/local/bin/node /distroless/bin/node\ncp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt\nrm -rf /tmp/* /var/lib/apt/lists/* /var/tmp/*\nEOF\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_ENABLE_BETTER_AUTH\nARG NEXT_PUBLIC_ENABLE_NEXT_AUTH\nARG NEXT_PUBLIC_ENABLE_CLERK_AUTH\nARG NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY\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_ENABLE_BETTER_AUTH=\"${NEXT_PUBLIC_ENABLE_BETTER_AUTH:-0}\" \\\n NEXT_PUBLIC_ENABLE_NEXT_AUTH=\"${NEXT_PUBLIC_ENABLE_NEXT_AUTH:-1}\" \\\n NEXT_PUBLIC_ENABLE_CLERK_AUTH=\"${NEXT_PUBLIC_ENABLE_CLERK_AUTH:-0}\" \\\n NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=\"${NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY}\" \\\n CLERK_WEBHOOK_SECRET=\"whsec_xxx\" \\\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=6144\"\n\nWORKDIR /app\n\nCOPY package.json pnpm-workspace.yaml ./\nCOPY .npmrc ./\nCOPY packages ./packages\n# bring in desktop workspace manifest so pnpm can resolve it\nCOPY apps/desktop/src/main/package.json ./apps/desktop/src/main/package.json\n\nRUN <<'EOF'\nset -e\nif [ \"${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\nfi\nexport COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\\/$//')\nnpm i -g corepack@latest\ncorepack enable\ncorepack use $(sed -n 's/.*\"packageManager\": \"\\(.*\\)\".*/\\1/p' package.json)\npnpm i\nmkdir -p /deps\ncd /deps\npnpm init\npnpm add pg drizzle-orm\nEOF\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/packages/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 <<'EOF'\nset -e\naddgroup -S -g 1001 nodejs\nadduser -D -G nodejs -H -S -h /app -u 1001 nextjs\nchown -R nextjs:nodejs /app /etc/proxychains4.conf\nEOF\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_FILE=\"/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 ENABLE_AUTH_PROTECTION=\"\"\n\n# Database\nENV KEY_VAULTS_SECRET=\"\" \\\n DATABASE_DRIVER=\"node\" \\\n DATABASE_URL=\"\"\n\n# Better Auth\nENV AUTH_SECRET=\"\" \\\n AUTH_SSO_PROVIDERS=\"\" \\\n NEXT_PUBLIC_AUTH_URL=\"\"\n\n# Clerk\nENV CLERK_SECRET_KEY=\"\" \\\n CLERK_WEBHOOK_SECRET=\"\"\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 S3_ENABLE_PATH_STYLE=\"\" \\\n S3_SET_ACL=\"\"\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 ENABLED_AWS_BEDROCK=\"\" 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 # ComfyUI\n ENABLED_COMFYUI=\"\" COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Vertex AI\n VERTEXAI_CREDENTIALS=\"\" VERTEXAI_PROJECT=\"\" VERTEXAI_LOCATION=\"\" VERTEXAI_MODEL_LIST=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 ENABLED_OPENAI=\"\" 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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\" \\\n # Cerebras\n CEREBRAS_API_KEY=\"\" CEREBRAS_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "c5d1b0494a9757aac8a1d900a83c00d2ae6b67af": {"t": 1785769833.131615, "n": 11268, "h": "50fc455c15cafa90", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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_ENABLE_BETTER_AUTH\nARG NEXT_PUBLIC_ENABLE_NEXT_AUTH\nARG NEXT_PUBLIC_ENABLE_CLERK_AUTH\nARG NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY\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_ENABLE_BETTER_AUTH=\"${NEXT_PUBLIC_ENABLE_BETTER_AUTH:-0}\" \\\n NEXT_PUBLIC_ENABLE_NEXT_AUTH=\"${NEXT_PUBLIC_ENABLE_NEXT_AUTH:-1}\" \\\n NEXT_PUBLIC_ENABLE_CLERK_AUTH=\"${NEXT_PUBLIC_ENABLE_CLERK_AUTH:-0}\" \\\n NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=\"${NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY}\" \\\n CLERK_WEBHOOK_SECRET=\"whsec_xxx\" \\\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=6144\"\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/packages/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_FILE=\"/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 ENABLE_AUTH_PROTECTION=\"\"\n\n# Database\nENV KEY_VAULTS_SECRET=\"\" \\\n DATABASE_DRIVER=\"node\" \\\n DATABASE_URL=\"\"\n\n# Better Auth\nENV AUTH_SECRET=\"\" \\\n AUTH_SSO_PROVIDERS=\"\" \\\n NEXT_PUBLIC_AUTH_URL=\"\"\n\n# Clerk\nENV CLERK_SECRET_KEY=\"\" \\\n CLERK_WEBHOOK_SECRET=\"\"\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 S3_ENABLE_PATH_STYLE=\"\" \\\n S3_SET_ACL=\"\"\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 ENABLED_AWS_BEDROCK=\"\" 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 # ComfyUI\n ENABLED_COMFYUI=\"\" COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Vertex AI\n VERTEXAI_CREDENTIALS=\"\" VERTEXAI_PROJECT=\"\" VERTEXAI_LOCATION=\"\" VERTEXAI_MODEL_LIST=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 ENABLED_OPENAI=\"\" 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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\" \\\n # Cerebras\n CEREBRAS_API_KEY=\"\" CEREBRAS_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "13753145557a9dede98b1f5489f93ac570ef2956": {"t": 1785769834.5732307, "n": 11158, "h": "b47b046b9694db51", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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_ENABLE_BETTER_AUTH\nARG NEXT_PUBLIC_ENABLE_NEXT_AUTH\nARG NEXT_PUBLIC_ENABLE_CLERK_AUTH\nARG NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY\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_ENABLE_BETTER_AUTH=\"${NEXT_PUBLIC_ENABLE_BETTER_AUTH:-0}\" \\\n NEXT_PUBLIC_ENABLE_NEXT_AUTH=\"${NEXT_PUBLIC_ENABLE_NEXT_AUTH:-1}\" \\\n NEXT_PUBLIC_ENABLE_CLERK_AUTH=\"${NEXT_PUBLIC_ENABLE_CLERK_AUTH:-0}\" \\\n NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=\"${NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY}\" \\\n CLERK_WEBHOOK_SECRET=\"whsec_xxx\" \\\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=6144\"\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/packages/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_FILE=\"/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 ENABLE_AUTH_PROTECTION=\"\"\n\n# Database\nENV KEY_VAULTS_SECRET=\"\" \\\n DATABASE_DRIVER=\"node\" \\\n DATABASE_URL=\"\"\n\n# Better Auth\nENV AUTH_SECRET=\"\" \\\n AUTH_SSO_PROVIDERS=\"\" \\\n NEXT_PUBLIC_AUTH_URL=\"\"\n\n# Clerk\nENV CLERK_SECRET_KEY=\"\" \\\n CLERK_WEBHOOK_SECRET=\"\"\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 S3_ENABLE_PATH_STYLE=\"\" \\\n S3_SET_ACL=\"\"\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 ENABLED_AWS_BEDROCK=\"\" 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 # ComfyUI\n ENABLED_COMFYUI=\"\" COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 ENABLED_OPENAI=\"\" 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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\" \\\n # Cerebras\n CEREBRAS_API_KEY=\"\" CEREBRAS_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "dc62cc969dd0b3e63c35ed73c14a490ccfa13d73": {"t": 1785769836.2415228, "n": 11053, "h": "6af5f7704ecf2b00", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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_ENABLE_BETTER_AUTH\nARG NEXT_PUBLIC_ENABLE_CLERK_AUTH\nARG NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY\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_ENABLE_BETTER_AUTH=\"${NEXT_PUBLIC_ENABLE_BETTER_AUTH:-1}\" \\\n NEXT_PUBLIC_ENABLE_CLERK_AUTH=\"${NEXT_PUBLIC_ENABLE_CLERK_AUTH:-0}\" \\\n NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=\"${NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY}\" \\\n CLERK_WEBHOOK_SECRET=\"whsec_xxx\" \\\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=6144\"\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/packages/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_FILE=\"/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 ENABLE_AUTH_PROTECTION=\"\"\n\n# Database\nENV KEY_VAULTS_SECRET=\"\" \\\n DATABASE_DRIVER=\"node\" \\\n DATABASE_URL=\"\"\n\n# Better Auth\nENV AUTH_SECRET=\"\" \\\n AUTH_SSO_PROVIDERS=\"\" \\\n NEXT_PUBLIC_AUTH_URL=\"\"\n\n# Clerk\nENV CLERK_SECRET_KEY=\"\" \\\n CLERK_WEBHOOK_SECRET=\"\"\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 S3_ENABLE_PATH_STYLE=\"\" \\\n S3_SET_ACL=\"\"\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 ENABLED_AWS_BEDROCK=\"\" 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 # ComfyUI\n ENABLED_COMFYUI=\"\" COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 ENABLED_OPENAI=\"\" 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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\" \\\n # Cerebras\n CEREBRAS_API_KEY=\"\" CEREBRAS_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "f2ab2fcef6a7a9bacfad9404b9ee56bc112f19dd": {"t": 1785769837.7921827, "n": 11047, "h": "7b0cc6caf53c6c11", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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_ENABLE_NEXT_AUTH\nARG NEXT_PUBLIC_ENABLE_CLERK_AUTH\nARG NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY\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_ENABLE_NEXT_AUTH=\"${NEXT_PUBLIC_ENABLE_NEXT_AUTH:-1}\" \\\n NEXT_PUBLIC_ENABLE_CLERK_AUTH=\"${NEXT_PUBLIC_ENABLE_CLERK_AUTH:-0}\" \\\n NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=\"${NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY}\" \\\n CLERK_WEBHOOK_SECRET=\"whsec_xxx\" \\\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=6144\"\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/packages/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_FILE=\"/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 ENABLE_AUTH_PROTECTION=\"\"\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# Clerk\nENV CLERK_SECRET_KEY=\"\" \\\n CLERK_WEBHOOK_SECRET=\"\"\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 S3_ENABLE_PATH_STYLE=\"\" \\\n S3_SET_ACL=\"\"\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 ENABLED_AWS_BEDROCK=\"\" 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 # ComfyUI\n ENABLED_COMFYUI=\"\" COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 ENABLED_OPENAI=\"\" 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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\" \\\n # Cerebras\n CEREBRAS_API_KEY=\"\" CEREBRAS_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "177f3f5589a78f1a4c87fe8e3ebde5c1bcff6efb": {"t": 1785769840.1123204, "n": 11145, "h": "8ad10bda17faeb57", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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_ENABLE_CLERK_AUTH\nARG NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY\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 NEXT_PUBLIC_ENABLE_CLERK_AUTH=\"${NEXT_PUBLIC_ENABLE_CLERK_AUTH:-0}\" \\\n NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=\"${NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY}\" \\\n CLERK_WEBHOOK_SECRET=\"whsec_xxx\" \\\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=6144\"\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/packages/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_FILE=\"/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 ENABLE_AUTH_PROTECTION=\"\"\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# Clerk\nENV CLERK_SECRET_KEY=\"\" \\\n CLERK_WEBHOOK_SECRET=\"\"\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 S3_ENABLE_PATH_STYLE=\"\" \\\n S3_SET_ACL=\"\"\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 ENABLED_AWS_BEDROCK=\"\" 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 # ComfyUI\n ENABLED_COMFYUI=\"\" COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 ENABLED_OPENAI=\"\" 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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\" \\\n # Cerebras\n CEREBRAS_API_KEY=\"\" CEREBRAS_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "26533b4938a22165a616be4aa58e87ca1bf4e125": {"t": 1785769842.456242, "n": 9385, "h": "83ee806f2be0dd6d", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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=6144\"\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_FILE=\"/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 ENABLE_AUTH_PROTECTION=\"\"\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 ENABLED_AWS_BEDROCK=\"\" 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 # ComfyUI\n ENABLED_COMFYUI=\"\" COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 ENABLED_OPENAI=\"\" 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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "15ffe289f5c1eee6b47eba1d98fb12ee4964b94d": {"t": 1785769843.8845577, "n": 9325, "h": "6c7b8808caec5a97", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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=6144\"\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_FILE=\"/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 ENABLE_AUTH_PROTECTION=\"\"\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 # ComfyUI\n COMFYUI_BASE_URL=\"\" COMFYUI_AUTH_TYPE=\"\" \\\n COMFYUI_API_KEY=\"\" COMFYUI_USERNAME=\"\" COMFYUI_PASSWORD=\"\" COMFYUI_CUSTOM_HEADERS=\"\" \\\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "166d715f176813bfe872dcedda40972482d7d40f": {"t": 1785769845.1928291, "n": 9173, "h": "13e25e1ab2450753", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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=6144\"\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_FILE=\"/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 ENABLE_AUTH_PROTECTION=\"\"\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 # FAL\n ENABLED_FAL=\"\" FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "3db2a395855f2302b9e6fe450e5faabda9e7ee79": {"t": 1785769846.6210072, "n": 9126, "h": "486af10d34dccf4f", "c": "## Set global build ENV\nARG NODEJS_VERSION=\"24\"\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=6144\"\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_FILE=\"/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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 # FAL\n FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "5a4b0fd344e98010104462276d26ca3407192419": {"t": 1785769849.836041, "n": 9125, "h": "5cf2801fa32eff2f", "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=6144\"\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 # FAL\n FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\" \\\n # Vercel AI Gateway\n VERCELAIGATEWAY_API_KEY=\"\" VERCELAIGATEWAY_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}, "a66856dc83e2ac44184dbe542fae2d7209bb23e2": {"t": 1785769851.0291703, "n": 9038, "h": "d0e4e256cb76a17f", "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=6144\"\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 # Nebius\n NEBIUS_API_KEY=\"\" NEBIUS_MODEL_LIST=\"\" NEBIUS_PROXY_URL=\"\" \\\n # NewAPI\n NEWAPI_API_KEY=\"\" NEWAPI_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 # FAL\n FAL_API_KEY=\"\" FAL_MODEL_LIST=\"\" \\\n # BFL\n BFL_API_KEY=\"\" BFL_MODEL_LIST=\"\"\n\nUSER nextjs\n\nEXPOSE 3210/tcp\n\nENTRYPOINT [\"/bin/node\"]\n\nCMD [\"/app/startServer.js\"]\n"}}, "docs/self-hosting/environment-variables/model-provider.mdx": {"ab601b2ced51e606fcd3554040adcd1129eadaf9": {"t": 1785595576.2001743, "n": 29290, "h": "2d4b0ffa92623188", "c": "---\ntitle: LobeHub Model Service Providers - Environment Variables and Configuration\ndescription: >-\n Learn about the environment variables and configuration settings for various\n model service providers like OpenAI, Google AI, AWS Bedrock, Ollama,\n Perplexity AI, Anthropic AI, Mistral AI, Groq AI, OpenRouter AI, and 01.AI.\ntags:\n - Model Service Providers\n - Environment Variables\n---\n\n# Model Providers\n\nWhen deploying LobeHub, a rich set of environment variables related to model service providers is provided, allowing you to easily define the model service providers to be enabled in LobeHub.\n\n## OpenAI\n\n### `ENABLED_OPENAI`\n\n- Type:Optional\n- Description:Enables OpenAI as a model provider by default, turns off the OpenAI service when set to `0`\n- Default:`1`\n- Example:`0`\n\n### `OPENAI_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied for on the OpenAI account page, you can check it out [here](https://platform.openai.com/api-keys)\n- Default: -\n- Example: `sk-xxxxxx...xxxxxx`\n\n### `OPENAI_PROXY_URL`\n\n- Type: Optional\n- Description: If you manually configure the OpenAI interface proxy, you can use this configuration item to override the default OpenAI API request base URL\n- Default: `https://api.openai.com/v1`\n- Example: `https://api.chatanywhere.cn` or `https://aihubmix.com/v1`\n\n<Callout type={'warning'}>\n Please check the request suffix of your proxy service provider. Some proxy service providers may\n add `/v1` to the request suffix, while others may not. If you find that the AI returns an empty\n message during testing, try adding the `/v1` suffix and retry.\n</Callout>\n\n<Callout type={'info'}>\n Whether to fill in `/v1` is closely related to the model service provider. For example, the\n default address of openai is `api.openai.com/v1`. If your proxy forwards the `/v1` interface, you\n can simply fill in `proxy.com`. However, if the model service provider directly forwards the\n `api.openai.com` domain, then you need to add `/v1` to the URL yourself.\n</Callout>\n\nRelated discussions:\n\n- [Why is the return value blank after installing Docker, configuring environment variables?](https://github.com/lobehub/lobehub/discussions/623)\n- [Reasons for errors when using third-party interfaces](https://github.com/lobehub/lobehub/discussions/734)\n- [No response in chat after filling in the proxy server address](https://github.com/lobehub/lobehub/discussions/1065)\n\n### `OPENAI_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to control the model list, use `+` to add a model, use `-` to hide a model, use `model_name=display_name` to customize the display name of a model, separated by commas. Definition syntax rules see [model-list][model-list]\n- Default: `-`\n- Example: `+qwen-7b-chat,+glm-6b,-gpt-3.5-turbo,gpt-4-0125-preview=gpt-4-turbo`\n\nThe above example adds `qwen-7b-chat` and `glm-6b` to the model list, removes `gpt-3.5-turbo` from the list, and displays the name of `gpt-4-0125-preview` as `gpt-4-turbo`. If you want to disable all models first and then enable specific models, you can use `-all,+gpt-3.5-turbo`, which means only `gpt-3.5-turbo` will be enabled.\n\nYou can find all current model names in [modelProviders](https://github.com/lobehub/lobehub/tree/main/src/config/modelProviders).\n\n## Azure OpenAI\n\nIf you need to use Azure OpenAI to provide model services, you can refer to the [Deploying with Azure OpenAI](/docs/self-hosting/examples/azure-openai) section for detailed steps. Here, we will list the environment variables related to Azure OpenAI.\n\n### `AZURE_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied for on the Azure OpenAI account page\n- Default: -\n- Example: `c55168be3874490ef0565d9779ecd5a6`\n\n### `AZURE_ENDPOINT`\n\n- Type: Required\n- Description: The endpoint of Azure OpenAI, you can find it in the Azure OpenAI account page\n- Default: `-`\n- Example: `https://docs-test-001.openai.azure.com`\n\n### `AZURE_API_VERSION`\n\n- Type: Required\n- Description: The API version of Azure, following the format YYYY-MM-DD\n- Default: `-`\n- Example: `2023-02-01`, refer to [latest version](https://docs.microsoft.com/zh-cn/azure/developer/javascript/api-reference/es-modules/azure-sdk/ai-translation/translationconfiguration?view=azure-node-latest#api-version)\n\n### `AZURE_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to control the model list, use `+` to add a model, use `-` to hide a model, use `id->deploymentName=displayName` to customize the display name of a model, separated by commas. Definition syntax rules see [model-list][model-list]\n- Default: `-`\n- Example: `gpt-35-turbo->my-deploy=GPT 3.5 Turbo` 或 `gpt-4-turbo->my-gpt4=GPT 4 Turbo<128000:vision:fc>`\n\n## Google AI\n\n### `GOOGLE_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied for in the Google AI Platform to access Google AI services\n- Default: -\n- Example: `AIraDyDwcw254kwJaGjI9wwaHcdDCS__Vt3xQE`\n\n### `GOOGLE_PROXY_URL`\n\n- Type: Optional\n- Description: If you manually configure the Google API proxy, you can use this configuration item to override the default Google API request base URL\n- Default: `https://generativelanguage.googleapis.com`\n- Example: `https://api.genai.gd.edu.kg/google`\n\n### `GOOGLE_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to control the model list, use `+` to add a model, use `-` to hide a model, use `model_name=display_name` to customize the display name of a model, separated by commas. Definition syntax rules see [model-list][model-list]\n- Default: `-`\n- Example: `-all,+gemini-1.5-flash-latest,+gemini-1.5-pro-latest`\n\n## Vertex AI\n\n### `VERTEXAI_CREDENTIALS`\n\n- Type: Required\n- Description: A JSON string of your Google Cloud service account key, you can get the key from [here](/docs/usage/providers/vertexai).\n- Default: -\n- Example: `{\"type\": \"service_account\", \"project_id\": \"your-gcp-project-id\", ...}`\n\n### `VERTEXAI_PROJECT`\n\n- Type: Optional\n- Description: Your Google Cloud project ID. If not set, it will be obtained from the `project_id` field in `VERTEXAI_CREDENTIALS`.\n- Default: -\n- Example: `your-gcp-project-id`\n\n### `VERTEXAI_LOCATION`\n\n- Type: Optional\n- Description: The region where your Vertex AI model is located.\n- Default: `global`\n- Example: `us-central1`\n\n### `VERTEXAI_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to control the model list, use `+` to add a model, use `-` to hide a model, use `model_name=display_name` to customize the display name of a model, separated by commas. Definition syntax rules see [model-list][model-list]\n- Default: `-`\n- Example: `-all,+gemini-1.5-flash-latest,+gemini-1.5-pro-latest`\n\n## Anthropic AI\n\n### `ANTHROPIC_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied from Anthropic AI\n- Default: -\n- Example: `sk-ant-apixx-xxxxxxxxx-xxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxx`\n\n### `ANTHROPIC_PROXY_URL`\n\n- Type: Optional\n- Description: If you manually configure the Anthropic API proxy, you can use this configuration item to override the default Anthropic API request base URL\n- Default: `https://api.anthropic.com`\n- Example: `https://my-anthropic-proxy.com`\n\n### `ANTHROPIC_CLIENT_TIMEOUT`\n\n- Type: Optional\n- Description: Anthropic SDK client request timeout in milliseconds. This timeout is also used by Anthropic-compatible providers that rely on the Anthropic SDK.\n- Default: `295000`\n- Example: `780000`\n\n## AWS Bedrock\n\n### `ENABLED_AWS_BEDROCK`\n\n- Type:Optional\n- Description:Enables AWS Bedrock as a model provider by default, turns on the AWS Bedrock service when set to `1`\n- Default:`0`\n- Example:`1`\n\n### `AWS_ACCESS_KEY_ID`\n\n- Type: Required\n- Description: Access key ID for AWS service authentication\n- Default: -\n- Example: `AKIA5STVRLFSB4S9HWBR`\n\n### `AWS_SECRET_ACCESS_KEY`\n\n- Type: Required\n- Description: Key for AWS service authentication\n- Default: -\n- Example: `Th3vXxLYpuKcv2BARktPSTPxx+jbSiFT6/0w7oEC`\n\n### `AWS_REGION`\n\n- Type: Optional\n- Description: Region setting for AWS services\n- Default: `us-east-1`\n- Example: `us-east-1`\n\n## DeepSeek AI\n\n### `DEEPSEEK_PROXY_URL`\n\n- Type: Optional\n- Description: If you manually configure the DeepSeek API proxy, you can use this configuration item to override the default DeepSeek API request base URL\n- Default: `https://api.deepseek.com`\n- Example: `https://my-deepseek-proxy.com`\n\n### `DEEPSEEK_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied for in the DeepSeek AI service\n- Default: -\n- Example: `sk-xxxxxx...xxxxxx`\n\n### `DEEPSEEK_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to control the model list, use `+` to add a model, use `-` to hide a model, use `model_name=displayName` to customize the display name of a model, separated by commas. Definition syntax rules see [model-list][model-list]\n- Default: `-`\n- Example: `-all,+deepseek-reasoner`\n\n## XAI\n\n### `XAI_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied for in the XAI service\n- Default: -\n- Example: `xai-xxxxxx...xxxxxx`\n\n## Wenxin\n\n### `WENXIN_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied for in the Baidu Wenxin service\n- Default: -\n- Example: `xxxxxx...xxxxxx`\n\n## OpenRouter AI\n\n### `OPENROUTER_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied for in the OpenRouter AI service\n- Default: -\n- Example: `sk-or-v1-xxxxxx...xxxxxx=`\n\n### `OPENROUTER_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to specify a custom OpenRouter model list. Model definition syntax rules see [model-list][model-list]\n- Default: `-`\n- Example: `-all,+01-ai/yi-34b-chat,+huggingfaceh4/zephyr-7b-beta`\n\n## PPIO\n\n### `PPIO_API_KEY`\n\n- Type: Required\n- Description: This your PPIO API Key.\n- Default: -\n- Example: `sk_xxxxxxxxxx`\n\n### `PPIO_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to control the model list, use `+` to add a model, use `-` to hide a model, use `model_name=display_name` to customize the display name of a model, separated by commas. Definition syntax rules see [model-list][model-list]\n- Default: `-`\n- Example: `-all,+deepseek/deepseek-v3/community,+deepseek/deepseek-r1-distill-llama-70b`\n\n## Github\n\n### `GITHUB_TOKEN`\n\n- Type: Required\n- Description: This is your Personal access tokens you got for in the Github\n- Default: `-`\n- Example:`ghp_xxxxxx...xxxxxx=`\n\n### `GITHUB_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to control the model list, use `+` to add a model, use `-` to hide a model, use `model_name=display_name` to customize the display name of a model, separated by commas. Definition syntax rules see [model-list][model-list]\n- Default: `-`\n- Example: `-all,+gpt-4o,+gpt-4o-mini`\n\n## TogetherAI\n\n### `TOGETHERAI_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied for in the TogetherAI service\n- Default: -\n- Example: `xxxxxx...xxxxxx`\n\n### `TOGETHERAI_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to specify a custom TogetherAI model list. Model definition syntax rules see [model-list][model-list]\n- Default: `-`\n- Example: `-all,+meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo,+meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo`\n\n## Fireworks AI\n\n### `FIREWORKSAI_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied for in the Fireworks AI service\n- Default: `-`\n- Example:`xxxxxx...xxxxxx`\n\n### `FIREWORKSAI_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to control the model list, use `+` to add a model, use `-` to hide a model, use `model_name=display_name` to customize the display name of a model, separated by commas. Definition syntax rules see [model-list][model-list]\n- Default: `-`\n- Example: `-all,+accounts/fireworks/models/firefunction-v2,+accounts/fireworks/models/firefunction-v1`\n\n## Ollama\n\n### `ENABLED_OLLAMA`\n\n- Type:Optional\n- Description:Enables Ollama as a model provider by default, turns off the Ollama service when set to `0`\n- Default:`1`\n- Example:`0`\n\n### `OLLAMA_PROXY_URL`\n\n- Type: Required\n- Description: Used to enable the Ollama service, setting this will display optional open-source language models in the language model list and can also specify custom language models\n- Default: -\n- Example: `http://127.0.0.1:11434`\n\n### `OLLAMA_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to specify a custom Ollama language model. Model definition syntax rules see [model-list][model-list]\n- Default: -\n- Example: `llama2:7B`\n\n## Moonshot AI\n\n### `MOONSHOT_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied for in the Moonshot AI service\n- Default: -\n- Example: `Y2xpdGhpMzNhZXNoYjVtdnZjMWc6bXNrLWIxQlk3aDNPaXpBWnc0V1RaMDhSRmRFVlpZUWY=`\n\n### `MOONSHOT_PROXY_URL`\n\n- Type: Optional\n- Description: If you manually configure the Moonshot API proxy, you can use this configuration item to override the default Moonshot API request base URL\n- Default: `https://api.moonshot.cn/v1`\n- Example: `https://my-moonshot-proxy.com/v1`\n\n## Perplexity AI\n\n### `PERPLEXITY_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied from Perplexity AI\n- Default: -\n- Example: `pplx-xxxxxx...xxxxxx`\n\n### `PERPLEXITY_PROXY_URL`\n\n- Type: Optional\n- Description: If you manually configure the Perplexity API proxy, you can use this configuration item to override the default Perplexity API request base URL\n- Default: `https://api.Perplexity.ai`\n- Example: `https://my-Perplexity-proxy.com`\n\n### `PERPLEXITY_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to control the model list, use `+` to add a model, use `-` to hide a model, use `model_name=display_name` to customize the display name of a model, separated by commas. Definition syntax rules see\n- Default: `-`\n- Example: `-all,+llama-3.1-sonar-small-128k-online,+llama-3.1-sonar-small-128k-chat`\n\n## Minimax AI\n\n### `MINIMAX_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied for in the Minimax AI service\n- Default: -\n- Example: `xxxxxx...xxxxxx`\n\n## Mistral AI\n\n### `MISTRAL_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied for in the Mistral AI service\n- Default: -\n- Example: `xxxxxx...xxxxxx=`\n\n## Groq AI\n\n### `GROQ_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied from Groq AI\n- Default: -\n- Example: `gsk_xxxxxx...xxxxxx`\n\n### `GROQ_PROXY_URL`\n\n- Type: Optional\n- Description: If you manually configure the Groq API proxy, you can use this configuration item to override the default Groq API request base URL\n- Default: `https://api.groq.com/openai/v1`\n- Example: `https://my-groq-proxy.com/v1`\n\n### `GROQ_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to control the model list, use `+` to add a model, use `-` to hide a model, use `model_name=display_name` to customize the display name of a model, separated by commas. Definition syntax rules see [model-list][model-list]\n- Default: `-`\n- Example: `-all,+gemma2-9b-it,+llama-3.1-8b-instant`\n\n## ZHIPU AI\n\n### `ZHIPU_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied for in the ZHIPU AI service\n- Default: -\n- Example: `4582d332441a313f5c2ed9824d1798ca.rC8EcTAhgbOuAuVT`\n\n### `ZHIPU_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to control the model list, use `+` to add a model, use `-` to hide a model, use `model_name=display_name` to customize the display name of a model, separated by commas. Definition syntax rules see [model-list][model-list]\n- Default: `-`\n- Example: `-all,+glm-4-alltools,+glm-4-plus`\n\n## 01.AI\n\n### `ZEROONE_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied for in the 01.AI service\n- Default: -\n- Example:`xxxxxx...xxxxxx`\n\n### `ZEROONE_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to control the model list, use `+` to add a model, use `-` to hide a model, use `model_name=display_name` to customize the display name of a model, separated by commas. Definition syntax rules see [model-list][model-list]\n- Default: `-`\n- Example: `-all,+yi-large,+yi-large-rag`\n\n## Qiniu\n\n### `QINIU_API_KEY`\n\n- Type: Required\n- Description: This is the API key you can obtain from Qiniu AI service\n- Default: -\n- Example:`sk-xxxxx...xxxxx`\n\n### `QINIU_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to control the model list, use `+` to add a model, use `-` to hide a model, use `model_name=display_name` to customize the display name of a model, separated by commas. Definition syntax rules see [model-list][model-list]\n- Default: `-`\n- Example: `-all,+deepseek-r1,+deepseek-v3`\n\n### `QINIU_PROXY_URL`\n\n- Type: Optional\n- Description: If you manually configure the Qiniu API proxy, you can use this configuration item to override the default Qiniu API request base URL\n- Default: `https://api.qnaigc.com/v1`\n- Example: `https://my-qnaigc.com/v1`\n\n## Qwen\n\n### `QWEN_API_KEY`\n\n- Type: Required\n- Description: This is the DashScope API key you can obtain from Alibaba Cloud\n- Default: -\n- Example:`sk-xxxxx...xxxxx`\n\n### `QWEN_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to control the model list, use `+` to add a model, use `-` to hide a model, use `model_name->deploymentName=display_name` to customize the display name of a model, separated by commas. The deploymentName `->deploymentName` can be omitted, and it defaults to the latest model version. Definition syntax rules see [model-list][model-list]\n- Default: `-`\n- Example: `-all,+qwen-turbo,+qwen-plus,+qwen-max->qwen-max-2025-01-25`\n\n### `QWEN_PROXY_URL`\n\n- Type: Optional\n- Description: If you manually configure the Qwen API proxy, you can use this configuration item to override the default Qwen API request base URL\n- Default: `https://dashscope.aliyuncs.com/compatible-mode/v1`\n- Example: `https://my-qwen-proxy.com/v1`\n\n## Stepfun AI\n\n### `STEPFUN_API_KEY`\n\n- Type: Required\n- Description: This is the DashScope API key you can obtain from Stepfun AI service\n- Default: -\n- Example:`sk-xxxxx...xxxxx`\n\n## Novita AI\n\n### `NOVITA_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied for in the Novita AI service\n- Default: -\n- Example:`xxxxxx...xxxxxx`\n\n### `NOVITA_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to control the model list, use `+` to add a model, use `-` to hide a model, use `model_name=display_name` to customize the display name of a model, separated by commas. Definition syntax rules see [model-list][model-list]\n- Default: `-`\n- Example: `-all,+meta-llama/llama-3.1-8b-instruct,+meta-llama/llama-3.1-70b-instruct`\n\n## BAICHUAN\n\n### `BAICHUAN_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied for in the BAICHUAN service\n- Default: -\n- Example:`xxxxxx...xxxxxx`\n\n## TAICHU\n\n### `TAICHU_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied for in the TAICHU service\n- Default: -\n- Example:`xxxxxx...xxxxxx`\n\n## 360 AI\n\n### `AI360_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied for in the 360 AI service\n- Default: -\n- Example:`xxxxxx...xxxxxx`\n\n## Siliconflow\n\n### `SILICONCLOUD_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied from Siliconflow service\n- Default: -\n- Example: `xxxxxx...xxxxxx`\n\n### `SILICONCLOUD_PROXY_URL`\n\n- Type: Optional\n- Description: If you manually configure the Siliconflow API proxy, you can use this configuration item to override the default Siliconflow API request base URL\n- Default: `https://api.siliconflow.cn/v1`\n- Example: `https://my-siliconflow-proxy.com/v1`\n\n### `SILICONCLOUD_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to control the model list, use `+` to add a model, use `-` to hide a model, use `model_name=display_name` to customize the display name of a model, separated by commas. Definition syntax rules see [model-list][model-list]\n- Default: `-`\n- Example: `-all,+deepseek-ai/DeepSeek-V2.5,+Qwen/Qwen2.5-7B-Instruct`\n\n## Upstage AI\n\n### `UPSTAGE_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied from Upstage AI service\n- Default: -\n- Example: `xxxxxx...xxxxxx`\n\n## Spark AI\n\n### `SPARK_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied from Spark AI service\n- Default: -\n- Example: `xxxxxx...xxxxxx`\n\n## A21 AI\n\n### `AI21_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied from `AI21_API_KEY` service\n- Default: -\n- Example: `xxxxxx...xxxxxx`\n\n## HUNYUAN\n\n### `HUNYUAN_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied from HUNYUAN service\n- Default: -\n- Example: `xxxxxx...xxxxxx`\n\n### `HUNYUAN_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to control the model list, use `+` to add a model, use `-` to hide a model, use `model_name=display_name` to customize the display name of a model, separated by commas. Definition syntax rules see [model-list][model-list]\n- Default: `-`\n- Example: `-all,+hunyuan-lite,+hunyuan-standard`\n\n## Volcengine\n\n### `VOLCENGINE_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied from Volcengine service, you can check it out [here](https://console.volcengine.com/ark/region:ark+cn-beijing/endpoint)\n- Default: -\n- Example: `ad925b3d-aaaa-bbbb-cccc-51fde2f50547`\n\n### `VOLCENGINE_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to control the model list, use `+` to add a model, use `-` to hide a model, use `model_name->deploymentName=display_name` to customize the display name of a model, separated by commas. The deploymentName `->deploymentName` can be omitted, and it defaults to the latest model version. Definition syntax rules see [model-list][model-list]\n- Default: `-`\n- Example: `-all,+deepseek-r1,+deepseek-v3->deepseek-v3-250324,+doubao-1.5-pro-256k,+doubao-1.5-pro-32k->doubao-1-5-pro-32k-250115,+doubao-1.5-lite-32k`\n\n### `VOLCENGINE_PROXY_URL`\n\n- Type: Optional\n- Description: If you manually configure the Volcengine API proxy, you can use this configuration item to override the default Volcengine API request base URL\n- Default: `https://ark.cn-beijing.volces.com/api/v3`\n- Example: `https://my-volcengine-proxy.com/v1`\n\n## InfiniAI\n\n### `INFINIAI_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied from Infini-AI, you can check it out [here](https://cloud.infini-ai.com)\n- Default: -\n- Example: `sk-xxxxxx...xxxxxx`\n\n### `INFINIAI_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to control the model list, use `+` to add a model, use `-` to hide a model, use `model_name=display_name` to customize the display name of a model, separated by commas. Definition syntax rules see [model-list][model-list]\n- Default: `-`\n- Example: `-all,+qwq-32b,+deepseek-r1`\n\n## FAL\n\n### `ENABLED_FAL`\n\n- Type: Optional\n- Description: Enables FAL as a model provider by default. Set to `0` to disable the FAL service.\n- Default: `1`\n- Example: `0`\n\n### `FAL_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied for in the FAL service.\n- Default: -\n- Example: `fal-xxxxxx...xxxxxx`\n\n### `FAL_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to control the FAL model list. Use `+` to add a model, `-` to hide a model, and `model_name=display_name` to customize the display name of a model. Separate multiple entries with commas. The definition syntax follows the same rules as other providers' model lists.\n- Default: `-`\n- Example: `-all,+fal-ai/flux/schnell,+fal-ai/flux-pro/kontext=FLUX.1 Kontext [pro]`\n\nThe above example disables all models first, then enables `fal-ai/flux/schnell` and `fal-ai/flux-pro/kontext` (displayed as `FLUX.1 Kontext [pro]`).\n\n## ComfyUI\n\n### `ENABLED_COMFYUI`\n\n- Type: Optional\n- Description: Enables ComfyUI as a model provider by default. Set to `0` to disable the ComfyUI service.\n- Default: `1`\n- Example: `0`\n\n### `COMFYUI_BASE_URL`\n\n- Type: Optional\n- Description: The base URL address of the ComfyUI service\n- Default: `http://localhost:8188`\n- Example: `http://192.168.1.100:8188` or `https://my-comfyui-server.com`\n\n### `COMFYUI_AUTH_TYPE`\n\n- Type: Optional\n- Description: The authentication type for ComfyUI, supporting 4 authentication methods\n - `none`: No authentication (default)\n - `basic`: Basic authentication (username + password)\n - `bearer`: Bearer Token authentication (API key)\n - `custom`: Custom request header authentication\n- Default: `none`\n- Example: `basic`\n\n### `COMFYUI_API_KEY`\n\n- Type: Optional\n- Description: The API key used when the authentication type is `bearer`\n- Default: -\n- Example: `sk-xxxxxx...xxxxxx`\n\n### `COMFYUI_USERNAME`\n\n- Type: Optional\n- Description: The username used when the authentication type is `basic`\n- Default: -\n- Example: `admin`\n\n### `COMFYUI_PASSWORD`\n\n- Type: Optional\n- Description: The password used when the authentication type is `basic`\n- Default: -\n- Example: `password123`\n\n### `COMFYUI_CUSTOM_HEADERS`\n\n- Type: Optional\n- Description: Custom request headers used when the authentication type is `custom`, requires JSON format string\n- Default: -\n- Example: `{\"X-Auth-Token\": \"your-token\", \"X-Custom-Header\": \"value\"}`\n\n<Callout type={'info'}>\n ComfyUI supports multiple authentication methods. Please choose the appropriate authentication\n type and corresponding authentication parameters according to your ComfyUI service configuration.\n If your ComfyUI service has no authentication set up, you can skip configuring\n authentication-related environment variables.\n</Callout>\n\n## BFL\n\n### `BFL_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied for in the BFL service.\n- Default: -\n- Example: `12345678-1234-1234-1234-123456789abc`\n\n### `BFL_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to control the BFL model list. Use `+` to add a model, `-` to hide a model, and `model_name=display_name` to customize the display name of a model. Separate multiple entries with commas. The definition syntax follows the same rules as other providers' model lists.\n- Default: `-`\n- Example: `-all,+flux-pro-1.1,+flux-kontext-pro=FLUX.1 Kontext [pro]`\n\nThe above example disables all models first, then enables `flux-pro-1.1` and `flux-kontext-pro` (displayed as `FLUX.1 Kontext [pro]`).\n\n## NewAPI\n\n### `NEWAPI_API_KEY`\n\n- Type: Optional\n- Description: This is the API key for your NewAPI service instance. NewAPI is a multi-provider model aggregation service that provides unified access to various AI model APIs.\n- Default: -\n- Example: `sk-xxxxxx...xxxxxx`\n\n### `NEWAPI_PROXY_URL`\n\n- Type: Optional\n- Description: The base URL for your NewAPI server instance. This should point to your deployed NewAPI service endpoint.\n- Default: -\n- Example: `https://your-newapi-server.com/`\n\nNewAPI is a multi-provider model aggregation service that supports automatic model routing based on provider detection. It offers cost management features and provides a single endpoint for accessing models from multiple providers including OpenAI, Anthropic, Google, and more. Learn more about NewAPI at [https://github.com/Calcium-Ion/new-api](https://github.com/Calcium-Ion/new-api).\n\n## Vercel AI Gateway\n\n### `VERCELAIGATEWAY_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied for in the Vercel AI Gateway service.\n- Default: -\n- Example: `vck_xxxxxx...xxxxxx`\n\n### `VERCELAIGATEWAY_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to control the Vercel AI Gateway model list. Use `+` to add a model, `-` to hide a model, and `model_name=display_name` to customize the display name of a model. Separate multiple entries with commas. The definition syntax follows the same rules as other providers' model lists.\n- Default: `-`\n- Example: `-all,+vercel-model-1,+vercel-model-2=vercel-special`\n\n## Cerebras\n\n### `CEREBRAS_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied for in the Cerebras service.\n- Default: -\n- Example: `csk-xxxxxx...xxxxxx`\n\n### `CEREBRAS_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to control the Cerebras model list. Use `+` to add a model, `-` to hide a model, and `model_name=display_name` to customize the display name of a model. Separate multiple entries with commas. The definition syntax follows the same rules as other providers' model lists.\n- Default: `-`\n- Example: `-all,+cerebras-model-1,+cerebras-model-2=cerebras-special`\n\n## AiHubMix\n\n### `AIHUBMIX_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied for in the AiHubMix service.\n- Default: -\n- Example: `sk-xxxxxx...xxxxxx`\n\n### `AIHUBMIX_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to control the AiHubMix model list. Use `+` to add a model, `-` to hide a model, and `model_name=display_name` to customize the display name of a model. Separate multiple entries with commas. The definition syntax follows the same rules as other providers' model lists.\n- Default: `-`\n- Example: `-all,+claude-opus-4-1-20250805,+claude-opus-4-20250514=claude-opus-4`\n\n## Straico\n\n### `STRAICO_API_KEY`\n\n- Type: Required\n- Description: This is the API key you applied for in the Straico service.\n- Default: -\n- Example: `sk-xxxxxx...xxxxxx`\n\n### `STRAICO_MODEL_LIST`\n\n- Type: Optional\n- Description: Used to control the Straico model list. Use `+` to add a model, `-` to hide a model, and `model_name=display_name` to customize the display name of a model. Separate multiple entries with commas. The definition syntax follows the same rules as other providers' model lists.\n- Default: `-`\n- Example: `-all,+straico-model-1,+straico-model-2=straico-special`\n\n[model-list]: /docs/self-hosting/advanced/model-list\n"}}, "packages/model-bank/src/aiModels/streamlake.ts": {"ab601b2ced51e606fcd3554040adcd1129eadaf9": {"t": 1785595943.0995662, "n": 14775, "h": "f0f7e77d0dd04294", "c": "import type { AIChatModelCard } from '../types/aiModel';\n\nconst streamlakeModels: AIChatModelCard[] = [\n {\n abilities: {\n functionCall: true,\n structuredOutput: true,\n },\n contextWindowTokens: 262_144,\n description:\n 'The latest high-performance model from the Kuaishou Kwaipilot team, designed for complex enterprise projects and SaaS integration. It excels in code-related scenarios and is compatible with various types of agent frameworks (Claude Code, OpenCode, KiloCode), natively supports OpenClaw, and is optimized specifically for front-end page aesthetics.',\n displayName: 'KAT-Coder-Pro-V2',\n enabled: true,\n family: 'kat-coder',\n id: 'KAT-Coder-Pro-V2',\n maxOutput: 81_920,\n pricing: {\n units: [\n { name: 'textInput', rate: 2.1, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textInput_cacheRead', rate: 0.42, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 8.4, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n releasedAt: '2026-03-25',\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n structuredOutput: true,\n },\n contextWindowTokens: 262_144,\n description:\n 'Designed for Agentic Coding, it comprehensively covers programming tasks and scenarios, achieving intelligent behavior emergence through large-scale reinforcement learning, significantly outperforming similar models in code writing performance.',\n displayName: 'KAT-Coder-Pro-V1',\n family: 'kat-coder',\n id: 'KAT-Coder-Pro-V1',\n maxOutput: 32_768,\n pricing: {\n units: [\n { name: 'textInput', rate: 2.1, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textInput_cacheRead', rate: 0.42, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 8.4, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n releasedAt: '2025-10-23',\n type: 'chat',\n },\n {\n abilities: {\n structuredOutput: true,\n },\n contextWindowTokens: 131_072,\n description:\n 'KAT-Coder-Exp-72B is the RL innovation experimental version in the KAT-Coder series, achieving a remarkable performance of 74.6% on the SWE-Bench verified benchmark, setting a new record for open-source models. It focuses on Agentic Coding and currently only supports the SWE-Agent scaffold, but can also be used for simple conversations.',\n displayName: 'KAT-Coder-Exp-72B-1010',\n family: 'kat-coder',\n id: 'KAT-Coder-Exp-72B-1010',\n maxOutput: 32_768,\n pricing: {\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textInput_cacheRead', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n releasedAt: '2025-10-15',\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n structuredOutput: true,\n },\n contextWindowTokens: 131_072,\n description:\n 'A lightweight version within the KAT-Coder series. Specifically designed for Agentic Coding, it comprehensively covers programming tasks and scenarios. Leveraging large-scale agent-based reinforcement learning, it enables emergent intelligent behaviors and significantly outperforms comparable models in coding performance.',\n displayName: 'KAT-Coder-Air-V1',\n enabled: true,\n family: 'kat-coder',\n id: 'KAT-Coder-Air-V1',\n maxOutput: 32_768,\n pricing: {\n units: [\n { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textInput_cacheRead', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n releasedAt: '2025-10-15',\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 200_000,\n description:\n 'GLM-5-Turbo is a foundation model deeply optimized for agentic scenarios. It has been specifically optimized for core requirements of agent tasks from the training phase, enhancing key capabilities such as tool invocation, command following, and long-chain execution. It is ideal for building high-performance agent assistants.',\n displayName: 'GLM-5-Turbo',\n family: 'glm',\n generation: 'glm-5',\n id: 'GLM-5-Turbo',\n maxOutput: 131_072,\n pricing: {\n currency: 'CNY',\n units: [\n {\n lookup: {\n prices: {\n '[0, 0.032]': 1.2,\n '[0.032, infinity]': 1.8,\n },\n pricingParams: ['textInput'],\n },\n name: 'textInput_cacheRead',\n strategy: 'lookup',\n unit: 'millionTokens',\n },\n {\n lookup: {\n prices: {\n '[0, 0.032]': 5,\n '[0.032, infinity]': 7,\n },\n pricingParams: ['textInput'],\n },\n name: 'textInput',\n strategy: 'lookup',\n unit: 'millionTokens',\n },\n {\n lookup: {\n prices: {\n '[0, 0.032]': 22,\n '[0.032, infinity]': 26,\n },\n pricingParams: ['textInput'],\n },\n name: 'textOutput',\n strategy: 'lookup',\n unit: 'millionTokens',\n },\n ],\n },\n releasedAt: '2026-03-15',\n settings: {\n extendParams: ['enableReasoning'],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 200_000,\n description:\n 'GLM-5 is Zhipu’s next-generation flagship foundation model, purpose-built for Agentic Engineering. It delivers reliable productivity in complex systems engineering and long-horizon agentic tasks. In coding and agent capabilities, GLM-5 achieves state-of-the-art performance among open-source models. In real-world programming scenarios, its user experience approaches that of Claude Opus 4.5. It excels at complex systems engineering and long-horizon agent tasks, making it an ideal foundation model for general-purpose agent assistants.',\n displayName: 'GLM-5',\n family: 'glm',\n generation: 'glm-5',\n id: 'GLM-5',\n maxOutput: 131_072,\n pricing: {\n currency: 'CNY',\n units: [\n {\n lookup: {\n prices: {\n '[0, 0.032]': 1,\n '[0.032, infinity]': 1.5,\n },\n pricingParams: ['textInput'],\n },\n name: 'textInput_cacheRead',\n strategy: 'lookup',\n unit: 'millionTokens',\n },\n {\n lookup: {\n prices: {\n '[0, 0.032]': 4,\n '[0.032, infinity]': 6,\n },\n pricingParams: ['textInput'],\n },\n name: 'textInput',\n strategy: 'lookup',\n unit: 'millionTokens',\n },\n {\n lookup: {\n prices: {\n '[0, 0.032]': 18,\n '[0.032, infinity]': 22,\n },\n pricingParams: ['textInput'],\n },\n name: 'textOutput',\n strategy: 'lookup',\n unit: 'millionTokens',\n },\n ],\n },\n releasedAt: '2026-02-12',\n settings: {\n extendParams: ['enableReasoning'],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 204_800,\n description:\n 'First self-evolving model with top-tier coding and agentic performance (~60 tps).',\n displayName: 'MiniMax M2.7',\n family: 'minimax',\n generation: 'minimax-m2.7',\n id: 'MiniMax-M2.7',\n maxOutput: 131_072,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput_cacheRead', rate: 0.42, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textInput_cacheWrite', rate: 2.625, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textInput', rate: 2.1, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 8.4, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n releasedAt: '2026-03-18',\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 204_800,\n description:\n 'Top-tier performance and ultimate cost-effectiveness, easily handling complex tasks (approx. 60 tps).',\n displayName: 'MiniMax M2.5',\n family: 'minimax',\n generation: 'minimax-m2.5',\n id: 'MiniMax-M2.5',\n maxOutput: 131_072,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput_cacheRead', rate: 0.21, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textInput_cacheWrite', rate: 2.625, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textInput', rate: 2.1, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 8.4, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n releasedAt: '2026-02-12',\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n vision: true,\n video: true,\n },\n contextWindowTokens: 262_144,\n description:\n 'Kimi K2.5 is the most capable Kimi model, delivering open-source SOTA in agent tasks, coding, and vision understanding. It supports multimodal inputs and both thinking and non-thinking modes.',\n displayName: 'Kimi K2.5',\n family: 'kimi',\n generation: 'kimi-k2.5',\n id: 'Kimi-K2.5',\n maxOutput: 32_768,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 4, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textInput_cacheRead', rate: 0.7, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 21, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n releasedAt: '2026-01-27',\n settings: {\n extendParams: ['enableReasoning'],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n video: true,\n vision: true,\n },\n contextWindowTokens: 1_000_000,\n description:\n 'Qwen3.5 Plus supports text, image, and video input. Its performance on pure text tasks is comparable to Qwen3 Max, with better performance and lower cost. Its multimodal capabilities are significantly improved compared to the Qwen3 VL series.',\n displayName: 'Qwen3.5 Plus',\n family: 'qwen',\n generation: 'qwen3.5',\n id: 'Qwen3.5-Plus',\n maxOutput: 65_536,\n organization: 'Qwen',\n pricing: {\n currency: 'CNY',\n units: [\n {\n lookup: {\n prices: {\n '[0, 0.128]': 0.8,\n '[0.128, 0.256]': 2,\n '[0.256, infinity]': 4,\n },\n pricingParams: ['textInputRange'],\n },\n name: 'textInput',\n strategy: 'lookup',\n unit: 'millionTokens',\n },\n {\n lookup: {\n prices: {\n '[0, 0.128]': 4.8,\n '[0.128, 0.256]': 12,\n '[0.256, infinity]': 24,\n },\n pricingParams: ['textInputRange'],\n },\n name: 'textOutput',\n strategy: 'lookup',\n unit: 'millionTokens',\n },\n ],\n },\n releasedAt: '2026-02-15',\n settings: {\n extendParams: ['enableReasoning'],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n structuredOutput: true,\n },\n contextWindowTokens: 1_000_000,\n description:\n 'MiMo-V2-Pro is specifically designed for high-intensity agent workflows in real-world scenarios. It features over 1 trillion total parameters (42B activated parameters), adopts an innovative hybrid attention architecture, and supports an ultra-long context length of up to 1 million tokens. Built on a powerful foundational model, we continuously scale computational resources across a broader range of agent scenarios, further expanding the action space of intelligence and achieving significant generalization—from coding to real-world task execution (“claw”).',\n displayName: 'MiMo-V2 Pro',\n family: 'mimo',\n id: 'MiMo-V2-Pro',\n knowledgeCutoff: '2024-12',\n maxOutput: 131_072,\n pricing: {\n currency: 'CNY',\n units: [\n {\n name: 'textInput',\n strategy: 'tiered',\n tiers: [\n { rate: 7, upTo: 256_000 },\n { rate: 14, upTo: 'infinity' },\n ],\n unit: 'millionTokens',\n },\n {\n name: 'textOutput',\n strategy: 'tiered',\n tiers: [\n { rate: 21, upTo: 256_000 },\n { rate: 42, upTo: 'infinity' },\n ],\n unit: 'millionTokens',\n },\n ],\n },\n releasedAt: '2026-03-18',\n settings: {\n extendParams: ['enableReasoning'],\n },\n type: 'chat',\n },\n {\n abilities: {\n functionCall: true,\n reasoning: true,\n },\n contextWindowTokens: 131_072,\n description:\n 'deepseek-v3.2 introduces sparse attention mechanism, aiming to improve training and inference efficiency when processing long texts, priced lower than deepseek-v3.1.',\n displayName: 'DeepSeek V3.2',\n family: 'deepseek',\n generation: 'deepseek-v3.2',\n id: 'DeepSeek-V3.2',\n maxOutput: 65_536,\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 2, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textInput_cacheRead', rate: 0.2, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 3, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n releasedAt: '2025-12-01',\n settings: {\n extendParams: ['enableReasoning'],\n },\n type: 'chat',\n },\n {\n abilities: {\n vision: true,\n },\n contextWindowTokens: 8192,\n description:\n 'DeepSeek-OCR is a vision-language model from DeepSeek AI focused on OCR and \"context optical compression.\" It explores compressing context from images, efficiently processes documents, and converts them to structured text (e.g., Markdown). It accurately recognizes text in images, suited for document digitization, text extraction, and structured processing.',\n displayName: 'DeepSeek OCR',\n family: 'deepseek',\n id: 'DeepSeek-OCR',\n pricing: {\n currency: 'CNY',\n units: [\n { name: 'textInput', rate: 0.216, strategy: 'fixed', unit: 'millionTokens' },\n { name: 'textOutput', rate: 0.216, strategy: 'fixed', unit: 'millionTokens' },\n ],\n },\n releasedAt: '2025-10-20',\n type: 'chat',\n },\n];\n\nexport const allModels = [...streamlakeModels];\n\nexport default allModels;\n"}}, "locales/zh-CN/providers.json": {"ab601b2ced51e606fcd3554040adcd1129eadaf9": {"t": 1785595950.8019896, "n": 7537, "h": "e49daef2615d9e1e", "c": "{\n \"ai21.description\": \"AI21 Labs 为企业构建基础模型和 AI 系统,加速生成式 AI 的落地应用。\",\n \"ai302.description\": \"302.AI 是一个按需付费的 AI 平台,提供丰富的 AI API 和在线 AI 应用目录。\",\n \"ai360.description\": \"360 AI 是来自 360 的模型与服务平台,提供如 360GPT2 Pro、360GPT Pro 和 360GPT Turbo 等自然语言处理模型,结合大参数规模与多模态能力,支持文本生成、语义理解、对话与代码处理,定价灵活,满足多样化需求。\",\n \"aihubmix.description\": \"AiHubMix 通过统一 API 提供多种 AI 模型的访问能力。\",\n \"akashchat.description\": \"Akash 是一个无需许可的云资源市场,与传统云提供商相比,其定价具有竞争力。\",\n \"antgroup.description\": \"蚂蚁百灵(Ant Ling)是蚂蚁集团通用人工智能(AGI)计划的核心基础模型系列,致力于构建并开放前沿基础模型能力。我们相信,智能的发展需要走向开放、共享和可扩展,从小事出发,推动通用人工智能的稳健演进与真实落地。\",\n \"anthropic.description\": \"Anthropic 构建了先进的语言模型,如 Claude 3.5 Sonnet、Claude 3 Sonnet、Claude 3 Opus 和 Claude 3 Haiku,兼顾智能、速度与成本,适用于企业级到快速响应等多种场景。\",\n \"azure.description\": \"Azure 提供先进的 AI 模型,包括 GPT-3.5 和 GPT-4 系列,支持多种数据类型和复杂任务,注重安全、可靠与可持续的 AI 实践。\",\n \"azureai.description\": \"Azure 提供先进的 AI 模型,包括 GPT-3.5 和 GPT-4 系列,支持多种数据类型和复杂任务,注重安全、可靠与可持续的 AI 实践。\",\n \"baichuan.description\": \"百川智能专注于基础模型研发,具备强大的中文知识理解、长文本处理与创意生成能力。其模型(如百川4、百川3 Turbo、百川3 Turbo 128k)针对不同场景优化,性价比高。\",\n \"bailiancodingplan.description\": \"阿里云百炼编程计划是一项专用的 AI 编程服务,通过专属端点提供来自通义千问、智谱、Kimi 和 MiniMax 的编程优化模型。\",\n \"bedrock.description\": \"Amazon Bedrock 为企业提供先进的语言与视觉模型,包括 Anthropic Claude 和 Meta Llama 3.1,涵盖轻量级到高性能选项,支持文本、对话与图像任务。\",\n \"bfl.description\": \"一家前沿 AI 研究实验室,致力于构建未来的视觉基础设施。\",\n \"cerebras.description\": \"Cerebras 是基于其 CS-3 系统构建的推理平台,专注于超低延迟和高吞吐量的大模型服务,适用于代码生成和智能体等实时任务。\",\n \"cloudflare.description\": \"在 Cloudflare 全球网络上运行无服务器、GPU 加速的机器学习模型。\",\n \"cohere.description\": \"Cohere 提供前沿的多语言模型、先进的检索能力和 AI 工作空间,为现代企业提供一体化、安全的平台。\",\n \"cometapi.description\": \"CometAPI 提供对 OpenAI、Anthropic、Google 等前沿模型的访问,用户可根据不同需求选择最优模型与价格。\",\n \"comfyui.description\": \"一个强大的开源工作流引擎,支持图像、视频和音频生成,兼容 SD、FLUX、Qwen、混元、WAN 等模型,支持节点式编辑与私有部署。\",\n \"deepseek.description\": \"DeepSeek 专注于人工智能研究与应用。其最新的 DeepSeek V4 系列包含 Flash 和 Pro 两个版本,具备 100 万上下文窗口和混合式思维能力,在推理与智能体基准测试中可与领先的闭源前沿模型竞争。\",\n \"fal.description\": \"一个为开发者打造的生成式媒体平台。\",\n \"fireworksai.description\": \"Fireworks AI 提供先进的语言模型服务,支持函数调用与多模态处理。Firefunction V2(基于 Llama-3)优化了函数调用、对话与指令执行,FireLLaVA-13B 支持图文混合输入,另有 Llama 与 Mixtral 系列模型。\",\n \"giteeai.description\": \"Gitee AI Serverless API 为开发者提供即插即用的大模型推理服务。\",\n \"github.description\": \"通过 GitHub Models,开发者可使用行业领先模型构建 AI 工程项目。\",\n \"githubcopilot.description\": \"通过您的 GitHub Copilot 订阅访问 Claude、GPT 和 Gemini 模型。\",\n \"glmcodingplan.description\": \"GLM Coding Plan 提供对智谱 AI 模型(包括 GLM-5 和 GLM-4.7)的访问,适用于编程任务,采用固定月费订阅模式。\",\n \"google.description\": \"Google 的 Gemini 系列是其最先进的通用 AI,由 Google DeepMind 构建,支持文本、代码、图像、音频与视频的多模态应用,具备从数据中心到移动设备的高效扩展能力。\",\n \"groq.description\": \"Groq 的 LPU 推理引擎在基准测试中表现卓越,具备极高速度与效率,为低延迟云端大模型推理设立新标杆。\",\n \"higress.description\": \"Higress 是阿里巴巴内部打造的云原生 API 网关,解决 Tengine 重载对长连接的影响及 gRPC/Dubbo 负载均衡的不足。\",\n \"huggingface.description\": \"Hugging Face 推理 API 提供快速访问数千个高性能模型,适用于原型开发与机器学习实验。\",\n \"hunyuan.description\": \"腾讯自研大模型,具备强大的中文写作能力、复杂语境下的推理能力与任务执行稳定性。\",\n \"infiniai.description\": \"为应用开发者提供高性能、易用、安全的大模型服务,覆盖从模型开发到生产部署的完整流程。\",\n \"internlm.description\": \"一个专注于大模型研究与工具链的开源组织,提供高效、易用的平台,让前沿模型与算法触手可及。\",\n \"jina.description\": \"Jina AI 成立于 2020 年,是领先的搜索 AI 公司,其搜索技术栈包括向量模型、重排序器与小型语言模型,支持构建高质量的生成式与多模态搜索应用。\",\n \"kimicodingplan.description\": \"Kimi Code Plan 由 Moonshot AI 提供,通过固定月费订阅方式访问 Kimi 模型(包括 K2.5)用于编程任务。\",\n \"lmstudio.description\": \"LM Studio 是一款桌面应用,支持在本地开发与实验大语言模型。\",\n \"lobehub.description\": \"LobeHub Cloud 通过官方 API 接入 AI 模型,并按模型令牌用量消耗积分。\",\n \"longcat.description\": \"LongCat 是由美团自主研发的生成式 AI 大模型系列,旨在通过高效的计算架构和强大的多模态能力,提升企业内部工作效率并推动创新应用的发展。\",\n \"minimax.description\": \"MiniMax 成立于 2021 年,致力于构建通用 AI,拥有多模态基础模型,包括万亿参数的 MoE 文本模型、语音模型与视觉模型,并推出海螺 AI 等应用。\",\n \"minimaxcodingplan.description\": \"MiniMax Token Plan 提供对 MiniMax 模型(包括 M2.7)的访问,适用于编程任务,采用固定月费订阅模式。\",\n \"mistral.description\": \"Mistral 提供先进的通用、专业与研究型模型,支持复杂推理、多语言任务与代码生成,具备函数调用能力以实现定制集成。\",\n \"modelscope.description\": \"ModelScope 是阿里云的模型即服务平台,提供丰富的 AI 模型与推理服务。\",\n \"moonshot.description\": \"Moonshot(北京月之暗面科技)推出多款 NLP 模型,适用于内容创作、科研、推荐与医疗分析等场景,具备强大的长文本与复杂生成能力。\",\n \"nebius.description\": \"Nebius 通过大规模 GPU 集群与垂直整合的云平台,为全球 AI 创新者提供高性能基础设施。\",\n \"newapi.description\": \"一个开源的多 AI 服务聚合与路由平台。\",\n \"novita.description\": \"Novita AI 提供灵活、可靠、性价比高的 LLM 与图像生成 API,支持 Llama 3、Mistral 等模型,适合生成式 AI 初创企业的可扩展开发需求。\",\n \"nvidia.description\": \"NVIDIA NIM 提供自托管、GPU 加速的推理微服务容器,适用于云端、数据中心、RTX AI PC 与工作站,支持预训练与自定义模型。\",\n \"ollama.description\": \"Ollama 提供涵盖代码生成、数学、多语言处理与对话的模型,支持企业级与本地部署。\",\n \"ollamacloud.description\": \"Ollama Cloud 提供托管推理服务,开箱即用访问 Ollama 模型库与兼容 OpenAI 的 API。\",\n \"openai.description\": \"OpenAI 是领先的 AI 研究实验室,其 GPT 模型推动自然语言处理发展,在科研、商业与创新中表现卓越、价值显著。\",\n \"opencodecodingplan.description\": \"OpenCode Go 是一项每月 10 美元的订阅服务,提供对精选开源编码模型的稳定访问,包括 GLM、Kimi、MiMo、Qwen、MiniMax。\",\n \"opencodezen.description\": \"OpenCode Zen 通过单一 API 密钥即可访问来自 OpenAI、Anthropic、Moonshot、MiniMax、智谱、Qwen 等多个来源的精选模型。\",\n \"openrouter.description\": \"OpenRouter 提供对 OpenAI、Anthropic、LLaMA 等前沿模型的访问,用户可根据需求选择最优模型与价格。\",\n \"perplexity.description\": \"Perplexity 提供先进的对话模型,包括 Llama 3.1 变体,适用于在线与离线使用及复杂 NLP 任务。\",\n \"ppio.description\": \"PPIO 提供可靠、性价比高的开源模型 API,支持 DeepSeek、Llama、Qwen 等主流模型。\",\n \"qiniu.description\": \"七牛云提供可靠、性价比高的实时与批量 AI 推理服务,使用便捷。\",\n \"qwen.description\": \"Qwen 是阿里云的大规模语言模型,具备强大的理解与生成能力,覆盖问答、写作、观点表达与代码等多个领域。\",\n \"replicate.description\": \"Replicate 通过简单的云 API 运行开源图像模型,如 FLUX 与 Stable Diffusion。\",\n \"sambanova.description\": \"SambaNova Cloud 让开发者以极快速度使用顶级开源模型进行推理。\",\n \"search1api.description\": \"Search1API 提供 DeepSeek 模型访问,支持可选联网功能,涵盖多个参数规模的标准与极速版本。\",\n \"sensenova.description\": \"SenseNova 基于商汤基础设施,提供高效、易用的全栈大模型服务。\",\n \"siliconcloud.description\": \"SiliconCloud 是基于强大开源模型构建的高性价比生成式 AI 云服务。\",\n \"spark.description\": \"讯飞星火提供强大的多语言 AI 能力,广泛应用于智能硬件、医疗、金融等垂直领域,推动创新发展。\",\n \"stepfun.description\": \"Stepfun 模型具备领先的多模态与复杂推理能力,支持长文本理解与强大的自主搜索编排。\",\n \"straico.description\": \"Straico 致力于简化 AI 集成,通过提供一个整合了顶尖文本、图像和音频生成式 AI 模型的统一工作空间,赋能营销人员、企业家及爱好者等各类用户,实现对多样化 AI 工具的无缝访问。\",\n \"streamlake.description\": \"快手万擎是企业级模型服务与AI算力云平台,集成高性能模型推理、低成本模型定制与全托管服务,助力企业专注于AI应用创新,无需担忧底层算力的复杂性与成本。\",\n \"taichu.description\": \"太初是中科院自动化所与武汉人工智能研究院联合研发的新一代多模态模型,支持多轮问答、写作、图像生成、3D 理解与信号分析,具备更强的认知与创造力。\",\n \"tencentcloud.description\": \"腾讯云大模型知识引擎原子能力为企业与开发者提供端到端知识问答服务,支持文档解析、切分、向量化、多轮重写等模块化服务,助力构建定制 AI 方案。\",\n \"togetherai.description\": \"Together AI 提供领先性能的创新模型,支持广泛定制、快速扩展与简便部署,满足企业需求。\",\n \"upstage.description\": \"Upstage 构建面向商业需求的 AI 模型,包括 Solar LLM 与文档 AI,其聊天 API 支持函数调用、翻译、向量化与行业场景应用。\",\n \"v0.description\": \"v0 是一款配对编程助手,可将自然语言想法转化为项目中的代码与界面。\",\n \"vercelaigateway.description\": \"Vercel AI Gateway 提供统一 API,支持 100 多个模型(包括 OpenAI、Anthropic、Google 等),具备预算控制、使用监控、负载均衡与故障转移功能。\",\n \"vertexai.description\": \"Google 的 Gemini 系列是其最先进的通用 AI,由 Google DeepMind 构建,支持文本、代码、图像、音频与视频的多模态应用,具备从数据中心到移动设备的高效扩展能力。\",\n \"vllm.description\": \"vLLM 是一个快速、易用的大模型推理与服务库。\",\n \"volcengine.description\": \"字节跳动的模型服务平台,提供安全、功能丰富、具备价格优势的模型访问服务,并支持数据、微调、推理与评估的端到端工具链。\",\n \"volcenginecodingplan.description\": \"火山方舟 Coding Plan 由字节跳动提供,通过固定月费订阅方式访问多种编程模型(包括 Doubao-Seed-Code、GLM-4.7、DeepSeek-V3.2 和 Kimi-K2.5)。\",\n \"wenxin.description\": \"文心是一个面向企业的基础模型与 AI 原生应用开发一体化平台,提供生成式 AI 模型与应用工作流的端到端工具支持。\",\n \"xai.description\": \"xAI 致力于构建加速科学发现的 AI,使命是加深人类对宇宙的理解。\",\n \"xiaomimimo.description\": \"小米 MiMo 提供兼容 OpenAI API 的对话模型服务。mimo-v2-flash 模型支持深度推理、流式输出、函数调用、256K 上下文窗口,以及最多 128K 的输出。\",\n \"xinference.description\": \"Xorbits Inference(Xinference)是一个开源平台,简化 AI 模型的运行与集成,支持在本地或云端运行开源大模型、向量模型与多模态模型,构建强大的 AI 应用。\",\n \"zenmux.description\": \"ZenMux 是一个统一的 AI 聚合平台,支持 OpenAI、Anthropic、Google VertexAI 等,具备灵活路由能力,便于模型切换与管理。\",\n \"zeroone.description\": \"01.AI 推动以人为本的 AI 2.0 革命,利用大模型创造经济与社会价值,构建新型 AI 生态与商业模式。\",\n \"zhipu.description\": \"智谱 AI 提供开放平台,涵盖文本处理、图像理解与代码辅助等多模态与语言模型能力。\"\n}\n"}}, "packages/model-bank/package.json": {"ab601b2ced51e606fcd3554040adcd1129eadaf9": {"t": 1785595962.4040263, "n": 4598, "h": "f9c7fd038da6d6c2", "c": "{\n \"name\": \"model-bank\",\n \"version\": \"1.0.0\",\n \"private\": true,\n \"exports\": {\n \".\": \"./src/index.ts\",\n \"./modelProviders\": \"./src/modelProviders/index.ts\",\n \"./modelProviders/lobehub\": \"./src/modelProviders/lobehub.ts\",\n \"./ai21\": \"./src/aiModels/ai21.ts\",\n \"./ai302\": \"./src/aiModels/ai302.ts\",\n \"./ai360\": \"./src/aiModels/ai360.ts\",\n \"./aihubmix\": \"./src/aiModels/aihubmix.ts\",\n \"./akashchat\": \"./src/aiModels/akashchat.ts\",\n \"./antgroup\": \"./src/aiModels/antgroup.ts\",\n \"./anthropic\": \"./src/aiModels/anthropic.ts\",\n \"./azureai\": \"./src/aiModels/azureai.ts\",\n \"./azure\": \"./src/aiModels/azure.ts\",\n \"./baichuan\": \"./src/aiModels/baichuan.ts\",\n \"./bailianCodingPlan\": \"./src/aiModels/bailianCodingPlan.ts\",\n \"./bedrock\": \"./src/aiModels/bedrock.ts\",\n \"./bfl\": \"./src/aiModels/bfl.ts\",\n \"./cerebras\": \"./src/aiModels/cerebras.ts\",\n \"./cloudflare\": \"./src/aiModels/cloudflare.ts\",\n \"./cohere\": \"./src/aiModels/cohere.ts\",\n \"./cometapi\": \"./src/aiModels/cometapi.ts\",\n \"./comfyui\": \"./src/aiModels/comfyui.ts\",\n \"./deepseek\": \"./src/aiModels/deepseek.ts\",\n \"./fal\": \"./src/aiModels/fal.ts\",\n \"./fireworksai\": \"./src/aiModels/fireworksai.ts\",\n \"./giteeai\": \"./src/aiModels/giteeai.ts\",\n \"./github\": \"./src/aiModels/github.ts\",\n \"./githubCopilot\": \"./src/aiModels/githubCopilot.ts\",\n \"./google\": \"./src/aiModels/google.ts\",\n \"./glmCodingPlan\": \"./src/aiModels/glmCodingPlan.ts\",\n \"./groq\": \"./src/aiModels/groq.ts\",\n \"./higress\": \"./src/aiModels/higress.ts\",\n \"./huggingface\": \"./src/aiModels/huggingface.ts\",\n \"./hunyuan\": \"./src/aiModels/hunyuan.ts\",\n \"./infiniai\": \"./src/aiModels/infiniai.ts\",\n \"./internlm\": \"./src/aiModels/internlm.ts\",\n \"./jina\": \"./src/aiModels/jina.ts\",\n \"./kimiCodingPlan\": \"./src/aiModels/kimiCodingPlan.ts\",\n \"./lmstudio\": \"./src/aiModels/lmstudio.ts\",\n \"./longcat\": \"./src/aiModels/longcat.ts\",\n \"./minimax\": \"./src/aiModels/minimax.ts\",\n \"./minimaxCodingPlan\": \"./src/aiModels/minimaxCodingPlan.ts\",\n \"./mistral\": \"./src/aiModels/mistral.ts\",\n \"./modelscope\": \"./src/aiModels/modelscope.ts\",\n \"./moonshot\": \"./src/aiModels/moonshot.ts\",\n \"./nebius\": \"./src/aiModels/nebius.ts\",\n \"./newapi\": \"./src/aiModels/newapi.ts\",\n \"./novita\": \"./src/aiModels/novita.ts\",\n \"./nvidia\": \"./src/aiModels/nvidia.ts\",\n \"./ollama\": \"./src/aiModels/ollama.ts\",\n \"./ollamacloud\": \"./src/aiModels/ollamacloud.ts\",\n \"./openai\": \"./src/aiModels/openai.ts\",\n \"./imageParameters\": \"./src/const/imageParameters.ts\",\n \"./opencodeCodingPlan\": \"./src/aiModels/opencodeCodingPlan.ts\",\n \"./opencodeZen\": \"./src/aiModels/opencodeZen.ts\",\n \"./openrouter\": \"./src/aiModels/openrouter.ts\",\n \"./perplexity\": \"./src/aiModels/perplexity.ts\",\n \"./ppio\": \"./src/aiModels/ppio.ts\",\n \"./qiniu\": \"./src/aiModels/qiniu.ts\",\n \"./qwen\": \"./src/aiModels/qwen.ts\",\n \"./replicate\": \"./src/aiModels/replicate.ts\",\n \"./sambanova\": \"./src/aiModels/sambanova.ts\",\n \"./search1api\": \"./src/aiModels/search1api.ts\",\n \"./sensenova\": \"./src/aiModels/sensenova.ts\",\n \"./siliconcloud\": \"./src/aiModels/siliconcloud.ts\",\n \"./spark\": \"./src/aiModels/spark.ts\",\n \"./stepfun\": \"./src/aiModels/stepfun.ts\",\n \"./straico\": \"./src/aiModels/straico.ts\",\n \"./streamlake\": \"./src/aiModels/streamlake.ts\",\n \"./taichu\": \"./src/aiModels/taichu.ts\",\n \"./tencentcloud\": \"./src/aiModels/tencentcloud.ts\",\n \"./togetherai\": \"./src/aiModels/togetherai.ts\",\n \"./upstage\": \"./src/aiModels/upstage.ts\",\n \"./v0\": \"./src/aiModels/v0.ts\",\n \"./vercelaigateway\": \"./src/aiModels/vercelaigateway.ts\",\n \"./vertexai\": \"./src/aiModels/vertexai.ts\",\n \"./vllm\": \"./src/aiModels/vllm.ts\",\n \"./volcengine\": \"./src/aiModels/volcengine.ts\",\n \"./volcengineCodingPlan\": \"./src/aiModels/volcengineCodingPlan.ts\",\n \"./wenxin\": \"./src/aiModels/wenxin.ts\",\n \"./xai\": \"./src/aiModels/xai.ts\",\n \"./xiaomimimo\": \"./src/aiModels/xiaomimimo.ts\",\n \"./xinference\": \"./src/aiModels/xinference.ts\",\n \"./zenmux\": \"./src/aiModels/zenmux.ts\",\n \"./zeroone\": \"./src/aiModels/zeroone.ts\",\n \"./zhipu\": \"./src/aiModels/zhipu.ts\",\n \"./types\": \"./src/types/index.ts\"\n },\n \"scripts\": {\n \"build\": \"tsdown\",\n \"test\": \"vitest\",\n \"test:coverage\": \"vitest --coverage --silent='passed-only'\"\n },\n \"dependencies\": {\n \"@lobechat/business-const\": \"workspace:*\",\n \"type-fest\": \"^5.2.0\"\n },\n \"devDependencies\": {\n \"tsdown\": \"^0.21.4\",\n \"typescript\": \"^6.0.3\"\n },\n \"peerDependencies\": {\n \"zod\": \"^3.25.76\"\n }\n}\n"}}, "locales/ko-KR/providers.json": {"ab601b2ced51e606fcd3554040adcd1129eadaf9": {"t": 1785595963.5518718, "n": 9825, "h": "27ab4a2aa41236ee", "c": "{\n \"ai21.description\": \"AI21 Labs는 기업을 위한 기반 모델과 AI 시스템을 구축하여 생성형 AI의 실사용을 가속화합니다.\",\n \"ai302.description\": \"302.AI는 다양한 AI API와 온라인 AI 앱을 제공하는 종량제 AI 플랫폼입니다.\",\n \"ai360.description\": \"360 AI는 360에서 제공하는 모델 및 서비스 플랫폼으로, 360GPT2 Pro, 360GPT Pro, 360GPT Turbo와 같은 NLP 모델을 통해 텍스트 생성, 의미 이해, 대화, 코드 작업을 지원하며, 대규모 파라미터와 멀티모달 기능을 결합하고 다양한 요구에 맞춘 유연한 요금제를 제공합니다.\",\n \"aihubmix.description\": \"AiHubMix는 통합 API를 통해 다양한 AI 모델에 접근할 수 있도록 지원합니다.\",\n \"akashchat.description\": \"Akash는 허가가 필요 없는 클라우드 자원 시장으로, 전통적인 클라우드 제공업체에 비해 경쟁력 있는 가격을 제공합니다.\",\n \"antgroup.description\": \"앤트 링은 앤트 그룹의 범용 인공지능(AGI) 이니셔티브의 핵심 기초 모델 시리즈로, 최첨단 기초 모델 역량을 구축하고 개방하는 데 전념하고 있습니다. 우리는 지능 개발이 개방성, 공유, 확장성을 향해 나아가야 한다고 믿으며, 작은 실용적인 단계에서 시작하여 AGI의 지속적인 진화와 실제 배치를 추진합니다.\",\n \"anthropic.description\": \"Anthropic은 Claude 3.5 Sonnet, Claude 3 Sonnet, Claude 3 Opus, Claude 3 Haiku와 같은 고급 언어 모델을 개발하며, 지능, 속도, 비용의 균형을 통해 기업부터 빠른 응답이 필요한 사용 사례까지 폭넓게 대응합니다.\",\n \"azure.description\": \"Azure는 GPT-3.5 및 GPT-4 시리즈를 포함한 고급 AI 모델을 제공하며, 다양한 데이터 유형과 복잡한 작업을 안전하고 신뢰할 수 있으며 지속 가능한 방식으로 처리합니다.\",\n \"azureai.description\": \"Azure는 GPT-3.5 및 GPT-4 시리즈를 포함한 고급 AI 모델을 제공하며, 다양한 데이터 유형과 복잡한 작업을 안전하고 신뢰할 수 있으며 지속 가능한 방식으로 처리합니다.\",\n \"baichuan.description\": \"Baichuan AI는 중국어 지식, 장문 문맥 처리, 창의적 생성에서 뛰어난 성능을 보이는 기반 모델에 집중하며, Baichuan 4, Baichuan 3 Turbo, Baichuan 3 Turbo 128k 등 다양한 시나리오에 최적화된 모델을 제공합니다.\",\n \"bailiancodingplan.description\": \"알리윈 백련 코딩 플랜은 Qwen, GLM, Kimi, MiniMax의 코딩 최적화 모델에 전용 엔드포인트를 통해 접근할 수 있는 전문 AI 코딩 서비스입니다.\",\n \"bedrock.description\": \"Amazon Bedrock은 기업을 위한 고급 언어 및 비전 모델을 제공하며, Anthropic Claude와 Meta Llama 3.1을 포함해 텍스트, 대화, 이미지 작업을 위한 경량부터 고성능 모델까지 지원합니다.\",\n \"bfl.description\": \"미래의 시각 인프라를 구축하는 선도적인 AI 연구소입니다.\",\n \"cerebras.description\": \"Cerebras는 CS-3 시스템 기반의 추론 플랫폼으로, 코드 생성 및 에이전트 작업과 같은 실시간 워크로드를 위한 초저지연, 고처리량 LLM 서비스를 제공합니다.\",\n \"cloudflare.description\": \"Cloudflare의 글로벌 네트워크를 통해 서버리스 GPU 기반 ML 모델을 실행할 수 있습니다.\",\n \"cohere.description\": \"Cohere는 다국어 모델, 고급 검색 기능, AI 작업 공간을 하나의 안전한 플랫폼에서 제공하여 현대 기업을 지원합니다.\",\n \"cometapi.description\": \"CometAPI는 OpenAI, Anthropic, Google 등 최첨단 모델에 접근할 수 있도록 하며, 다양한 사용 사례에 맞는 최적의 모델과 가격을 선택할 수 있습니다.\",\n \"comfyui.description\": \"ComfyUI는 이미지, 비디오, 오디오 생성을 위한 강력한 오픈소스 워크플로우 엔진으로, SD, FLUX, Qwen, Hunyuan, WAN 등의 모델을 지원하며 노드 기반 편집과 프라이빗 배포를 제공합니다.\",\n \"deepseek.description\": \"DeepSeek은 AI 연구와 응용에 중점을 둔 기업입니다. 최신 DeepSeek V4 패밀리는 Flash와 Pro 버전으로 출시되며, 100만 토큰 컨텍스트 윈도우와 하이브리드 사고 기능을 갖추어 추론 및 에이전트 벤치마크에서 선도적인 폐쇄형 프런티어 모델들과 견줄 만한 성능을 제공합니다.\",\n \"fal.description\": \"개발자를 위한 생성형 미디어 플랫폼입니다.\",\n \"fireworksai.description\": \"Fireworks AI는 함수 호출 및 멀티모달 처리를 지원하는 고급 언어 모델 서비스를 제공하며, Llama-3 기반의 Firefunction V2는 함수 호출, 대화, 지시 따르기에 최적화되어 있고, FireLLaVA-13B는 이미지-텍스트 혼합 입력을 지원합니다.\",\n \"giteeai.description\": \"Gitee AI 서버리스 API는 개발자를 위한 플러그 앤 플레이 LLM 추론 서비스를 제공합니다.\",\n \"github.description\": \"GitHub Models를 통해 개발자는 업계 최고 수준의 모델을 활용하여 AI 엔지니어로서 개발할 수 있습니다.\",\n \"githubcopilot.description\": \"GitHub Copilot 구독을 통해 Claude, GPT, Gemini 모델에 액세스할 수 있습니다.\",\n \"glmcodingplan.description\": \"GLM 코딩 플랜은 고정 요금 구독을 통해 GLM-5 및 GLM-4.7을 포함한 Zhipu AI 모델에 접근하여 코딩 작업을 수행할 수 있습니다.\",\n \"google.description\": \"Google의 Gemini 시리즈는 Google DeepMind가 개발한 가장 진보된 범용 AI로, 텍스트, 코드, 이미지, 오디오, 비디오 등 멀티모달 작업을 지원하며, 데이터 센터부터 모바일 기기까지 확장성과 효율성을 갖추고 있습니다.\",\n \"groq.description\": \"Groq의 LPU 추론 엔진은 탁월한 속도와 효율성으로 뛰어난 벤치마크 성능을 제공하며, 저지연 클라우드 기반 LLM 추론의 기준을 제시합니다.\",\n \"higress.description\": \"Higress는 Alibaba 내부에서 개발된 클라우드 네이티브 API 게이트웨이로, Tengine 재시작 시 장기 연결에 미치는 영향을 줄이고 gRPC/Dubbo 로드 밸런싱의 한계를 해결합니다.\",\n \"huggingface.description\": \"Hugging Face 추론 API는 수천 개의 모델을 빠르게 탐색할 수 있는 방법을 제공하며, 프로토타이핑과 머신러닝 실험을 위한 고성능 모델에 즉시 접근할 수 있습니다.\",\n \"hunyuan.description\": \"Hunyuan은 Tencent가 개발한 LLM으로, 중국어 작문 능력, 복잡한 문맥에서의 추론, 신뢰성 있는 작업 수행에서 강점을 보입니다.\",\n \"infiniai.description\": \"모델 개발부터 실사용 배포까지 전 과정을 아우르는 고성능, 사용이 간편하고 안전한 LLM 서비스를 앱 개발자에게 제공합니다.\",\n \"internlm.description\": \"InternLM은 대규모 모델 연구 및 도구 개발에 집중하는 오픈소스 조직으로, 최신 모델과 알고리즘을 누구나 쉽게 사용할 수 있도록 효율적인 플랫폼을 제공합니다.\",\n \"jina.description\": \"2020년에 설립된 Jina AI는 선도적인 검색 AI 기업으로, 벡터 모델, 재정렬기, 소형 언어 모델을 포함한 검색 스택을 통해 신뢰성 높고 고품질의 생성형 및 멀티모달 검색 앱을 구축합니다.\",\n \"kimicodingplan.description\": \"문샷 AI의 Kimi Code는 K2.5를 포함한 Kimi 모델에 접근하여 코딩 작업을 수행할 수 있습니다.\",\n \"lmstudio.description\": \"LM Studio는 데스크탑에서 LLM을 개발하고 실험할 수 있는 애플리케이션입니다.\",\n \"lobehub.description\": \"LobeHub Cloud는 공식 API를 사용하여 AI 모델에 접근하며, 모델 토큰에 연계된 크레딧으로 사용량을 측정합니다.\",\n \"longcat.description\": \"LongCat은 Meituan에서 독자적으로 개발한 생성형 AI 대형 모델 시리즈입니다. 이는 효율적인 계산 아키텍처와 강력한 멀티모달 기능을 통해 내부 기업 생산성을 향상시키고 혁신적인 애플리케이션을 가능하게 하기 위해 설계되었습니다.\",\n \"minimax.description\": \"2021년에 설립된 MiniMax는 텍스트, 음성, 비전 등 멀티모달 기반의 범용 AI를 개발하며, 조 단위 파라미터의 MoE 텍스트 모델과 Hailuo AI와 같은 앱을 제공합니다.\",\n \"minimaxcodingplan.description\": \"MiniMax 토큰 플랜은 고정 요금 구독을 통해 M2.7을 포함한 MiniMax 모델에 접근하여 코딩 작업을 수행할 수 있습니다.\",\n \"mistral.description\": \"Mistral은 복잡한 추론, 다국어 작업, 코드 생성에 적합한 고급 범용, 특화, 연구용 모델을 제공하며, 사용자 정의 통합을 위한 함수 호출 기능도 지원합니다.\",\n \"modelscope.description\": \"ModelScope는 Alibaba Cloud의 모델 서비스 플랫폼으로, 다양한 AI 모델과 추론 서비스를 제공합니다.\",\n \"moonshot.description\": \"Moonshot AI(베이징 Moonshot Technology)의 Moonshot은 콘텐츠 생성, 연구, 추천, 의료 분석 등 다양한 용도에 적합한 NLP 모델을 제공하며, 장문 문맥과 복잡한 생성 작업에 강점을 보입니다.\",\n \"nebius.description\": \"Nebius는 대규모 GPU 클러스터와 수직 통합 클라우드 플랫폼을 통해 글로벌 AI 혁신가에게 고성능 인프라를 제공합니다.\",\n \"newapi.description\": \"여러 AI 서비스를 통합하고 라우팅할 수 있는 오픈소스 플랫폼입니다.\",\n \"novita.description\": \"Novita AI는 Llama 3, Mistral 등의 모델을 지원하며, 유연하고 신뢰성 높으며 비용 효율적인 LLM 및 이미지 생성 API를 제공하여 생성형 AI 스타트업에 적합한 확장 가능한 개발자 친화적 API를 제공합니다.\",\n \"nvidia.description\": \"NVIDIA NIM은 클라우드, 데이터 센터, RTX AI PC, 워크스테이션에서 사전 학습 및 사용자 정의 모델을 위한 GPU 가속 추론 마이크로서비스 컨테이너를 제공합니다.\",\n \"ollama.description\": \"Ollama는 코드 생성, 수학, 다국어 처리, 대화를 위한 모델을 제공하며, 기업 및 로컬 배포를 모두 지원합니다.\",\n \"ollamacloud.description\": \"Ollama Cloud는 Ollama 모델 라이브러리와 OpenAI 호환 API에 즉시 접근할 수 있는 관리형 추론 서비스를 제공합니다.\",\n \"openai.description\": \"OpenAI는 GPT 모델을 통해 자연어 처리 기술을 선도하는 AI 연구소로, 연구, 비즈니스, 혁신 전반에 걸쳐 높은 성능과 가치를 제공합니다.\",\n \"opencodecodingplan.description\": \"OpenCode Go는 GLM, Kimi, MiMo, Qwen, MiniMax 등 선별된 오픈 코딩 모델에 안정적으로 접근할 수 있는 월 10달러 구독 서비스입니다.\",\n \"opencodezen.description\": \"OpenCode Zen은 OpenAI, Anthropic, Moonshot, MiniMax, Zhipu, Qwen 등 다양한 선별 모델을 하나의 API 키로 이용할 수 있도록 제공합니다.\",\n \"openrouter.description\": \"OpenRouter는 OpenAI, Anthropic, LLaMA 등 다양한 최첨단 모델에 접근할 수 있도록 하며, 사용자는 자신의 사용 사례에 맞는 최적의 모델과 가격을 선택할 수 있습니다.\",\n \"perplexity.description\": \"Perplexity는 온라인 및 오프라인 사용과 복잡한 NLP 작업을 위한 Llama 3.1 변형을 포함한 고급 대화형 모델을 제공합니다.\",\n \"ppio.description\": \"PPIO는 DeepSeek, Llama, Qwen 등 주요 오픈 모델을 포함한 신뢰성 높고 비용 효율적인 API를 제공합니다.\",\n \"qiniu.description\": \"Qiniu는 실시간 및 배치 AI 추론 서비스를 신뢰성 있고 비용 효율적으로 제공하며, 사용이 간편합니다.\",\n \"qwen.description\": \"Qwen은 Alibaba Cloud의 대규모 언어 모델로, 다양한 분야에서 Q&A, 작문, 의견 표현, 코드 생성 등 뛰어난 이해력과 생성 능력을 제공합니다.\",\n \"replicate.description\": \"Replicate는 FLUX, Stable Diffusion과 같은 오픈소스 이미지 모델을 간단한 클라우드 API를 통해 실행합니다.\",\n \"sambanova.description\": \"SambaNova Cloud는 개발자가 최고 수준의 오픈소스 모델을 매우 빠른 추론 속도로 사용할 수 있도록 지원합니다.\",\n \"search1api.description\": \"Search1API는 DeepSeek 모델에 접근할 수 있도록 하며, 웹 연결 옵션과 다양한 파라미터 크기의 표준 및 고속 버전을 제공합니다.\",\n \"sensenova.description\": \"SenseNova는 SenseTime 인프라를 기반으로 효율적이고 사용이 간편한 풀스택 LLM 서비스를 제공합니다.\",\n \"siliconcloud.description\": \"SiliconCloud는 강력한 오픈소스 기반 모델을 바탕으로 구축된 비용 효율적인 생성형 AI 클라우드 서비스입니다.\",\n \"spark.description\": \"iFLYTEK Spark는 다양한 분야에서 강력한 다국어 AI를 제공하여 스마트 하드웨어, 헬스케어, 금융 등에서 혁신을 가능하게 합니다.\",\n \"stepfun.description\": \"Stepfun 모델은 멀티모달 및 복잡한 추론 능력, 장문 문맥 이해, 강력한 자율 검색 조정 기능을 제공합니다.\",\n \"straico.description\": \"Straico는 최고의 텍스트, 이미지 및 오디오 생성 AI 모델을 하나로 통합한 통합 작업 공간을 제공하여 마케터, 기업가 및 열정적인 사용자들이 다양한 AI 도구에 원활하게 접근할 수 있도록 지원합니다.\",\n \"streamlake.description\": \"StreamLake는 엔터프라이즈급 모델 서비스와 AI 컴퓨팅 클라우드를 제공하는 플랫폼으로, 고성능 모델 추론, 저비용 모델 커스터마이징, 완전 관리형 서비스를 통합하여 기업이 복잡한 인프라 운영이나 비용 부담 없이 AI 애플리케이션 혁신에 집중할 수 있도록 지원합니다.\",\n \"taichu.description\": \"Taichu는 CASIA와 우한 인공지능연구원이 공동 개발한 차세대 멀티모달 모델로, 다중 회차 QA, 작문, 이미지 생성, 3D 이해, 신호 분석 등에서 뛰어난 인지력과 창의성을 발휘합니다.\",\n \"tencentcloud.description\": \"LLM 지식 엔진 Atomic Power는 문서 파싱, 청킹, 임베딩, 다중 회차 재작성 등 모듈형 서비스를 통해 기업과 개발자를 위한 맞춤형 AI 솔루션을 제공합니다.\",\n \"togetherai.description\": \"Together AI는 혁신적인 모델, 폭넓은 커스터마이징, 빠른 확장성, 간편한 배포를 통해 기업의 요구에 맞는 최고의 성능을 제공합니다.\",\n \"upstage.description\": \"Upstage는 Solar LLM, Document AI 등 비즈니스 요구에 맞춘 AI 모델을 개발하며, 함수 호출, 번역, 임베딩, 도메인 특화 사용 사례를 지원하는 대화형 API를 제공합니다.\",\n \"v0.description\": \"v0는 자연어 아이디어를 코드와 UI로 전환해주는 페어 프로그래밍 도우미입니다.\",\n \"vercelaigateway.description\": \"Vercel AI Gateway는 OpenAI, Anthropic, Google 등 100개 이상의 모델에 대한 통합 API를 제공하며, 예산 관리, 사용량 모니터링, 로드 밸런싱, 장애 조치 기능을 지원합니다.\",\n \"vertexai.description\": \"Google의 Gemini 시리즈는 Google DeepMind가 개발한 가장 진보된 범용 AI로, 텍스트, 코드, 이미지, 오디오, 비디오 등 멀티모달 작업을 지원하며, 데이터 센터부터 모바일 기기까지 효율성과 배포 유연성을 제공합니다.\",\n \"vllm.description\": \"vLLM은 빠르고 사용이 간편한 LLM 추론 및 서비스용 라이브러리입니다.\",\n \"volcengine.description\": \"ByteDance의 모델 서비스 플랫폼은 안전하고 기능이 풍부하며 비용 경쟁력 있는 모델 접근성과 데이터, 파인튜닝, 추론, 평가를 위한 엔드투엔드 도구를 제공합니다.\",\n \"volcenginecodingplan.description\": \"바이트댄스의 Volcengine 코딩 플랜은 Doubao-Seed-Code, GLM-4.7, DeepSeek-V3.2, Kimi-K2.5를 포함한 여러 코딩 모델에 고정 요금 구독을 통해 접근할 수 있습니다.\",\n \"wenxin.description\": \"Wenxin은 생성형 AI 모델 및 애플리케이션 워크플로우를 위한 엔드투엔드 도구를 제공하는 기업용 기반 모델 및 AI 네이티브 앱 개발 통합 플랫폼입니다.\",\n \"xai.description\": \"xAI는 과학적 발견을 가속화하고 인류의 우주에 대한 이해를 심화시키는 것을 목표로 AI를 개발합니다.\",\n \"xiaomimimo.description\": \"샤오미 MiMo는 OpenAI 호환 API를 통해 대화형 모델 서비스를 제공합니다. mimo-v2-flash 모델은 심층 추론, 스트리밍 출력, 함수 호출, 256K 컨텍스트 윈도우, 최대 128K 출력 기능을 지원합니다.\",\n \"xinference.description\": \"Xorbits Inference(Xinference)는 AI 모델 실행과 통합을 간소화하는 오픈소스 플랫폼으로, 오픈소스 LLM, 임베딩 모델, 멀티모달 모델을 로컬 또는 클라우드에서 실행하여 강력한 AI 앱을 구축할 수 있습니다.\",\n \"zenmux.description\": \"ZenMux는 OpenAI, Anthropic, Google VertexAI 등을 지원하는 통합 AI 집약 플랫폼으로, 유연한 라우팅을 통해 모델을 손쉽게 전환하고 관리할 수 있습니다.\",\n \"zeroone.description\": \"01.AI는 인간 중심의 AI 2.0 혁신을 주도하며, LLM을 통해 경제적·사회적 가치를 창출하고 새로운 AI 생태계와 비즈니스 모델을 구축합니다.\",\n \"zhipu.description\": \"ZhiPu AI는 텍스트 처리, 이미지 이해, 코드 지원 등 다양한 작업을 위한 멀티모달 및 언어 모델을 제공하는 오픈 플랫폼입니다.\"\n}\n"}}, "locales/es-ES/providers.json": {"ab601b2ced51e606fcd3554040adcd1129eadaf9": {"t": 1785595964.3888414, "n": 17613, "h": "a0bca1aeb2c7043a", "c": "{\n \"ai21.description\": \"AI21 Labs desarrolla modelos fundacionales y sistemas de IA para empresas, acelerando la implementación de IA generativa en producción.\",\n \"ai302.description\": \"302.AI es una plataforma de IA de pago por uso que ofrece un amplio catálogo de APIs de IA y aplicaciones en línea.\",\n \"ai360.description\": \"360 AI es una plataforma de modelos y servicios de 360, que ofrece modelos de PLN como 360GPT2 Pro, 360GPT Pro y 360GPT Turbo. Estos modelos combinan parámetros a gran escala y capacidades multimodales para generación de texto, comprensión semántica, chat y código, con precios flexibles para diversas necesidades.\",\n \"aihubmix.description\": \"AiHubMix proporciona acceso a múltiples modelos de IA a través de una API unificada.\",\n \"akashchat.description\": \"Akash es un mercado de recursos en la nube sin permisos, con precios competitivos frente a los proveedores tradicionales.\",\n \"antgroup.description\": \"Ant Ling es la serie de modelos fundamentales del núcleo de la iniciativa de Inteligencia General Artificial (AGI) de Ant Group, dedicada a construir y abrir capacidades avanzadas de modelos fundamentales. Creemos que el desarrollo de la inteligencia debe avanzar hacia la apertura, el intercambio y la escalabilidad, comenzando con pequeños pasos prácticos para impulsar la evolución constante y la implementación en el mundo real de la AGI.\",\n \"anthropic.description\": \"Anthropic desarrolla modelos de lenguaje avanzados como Claude 3.5 Sonnet, Claude 3 Sonnet, Claude 3 Opus y Claude 3 Haiku, equilibrando inteligencia, velocidad y costo para cargas de trabajo empresariales y de respuesta rápida.\",\n \"azure.description\": \"Azure ofrece modelos de IA avanzados, incluyendo las series GPT-3.5 y GPT-4, para diversos tipos de datos y tareas complejas, con un enfoque en IA segura, confiable y sostenible.\",\n \"azureai.description\": \"Azure proporciona modelos de IA avanzados, incluyendo las series GPT-3.5 y GPT-4, para diversos tipos de datos y tareas complejas, con un enfoque en IA segura, confiable y sostenible.\",\n \"baichuan.description\": \"Baichuan AI se enfoca en modelos fundacionales con alto rendimiento en conocimiento del chino, procesamiento de contexto largo y generación creativa. Sus modelos (Baichuan 4, Baichuan 3 Turbo, Baichuan 3 Turbo 128k) están optimizados para distintos escenarios y ofrecen gran valor.\",\n \"bailiancodingplan.description\": \"El Plan de Codificación Bailian de Aliyun es un servicio de codificación especializado en IA que proporciona acceso a modelos optimizados para codificación como Qwen, GLM, Kimi y MiniMax a través de un punto de acceso dedicado.\",\n \"bedrock.description\": \"Amazon Bedrock proporciona a las empresas modelos avanzados de lenguaje y visión, incluyendo Anthropic Claude y Meta Llama 3.1, desde opciones ligeras hasta de alto rendimiento para tareas de texto, chat e imagen.\",\n \"bfl.description\": \"Un laboratorio líder en investigación de IA de frontera que construye la infraestructura visual del futuro.\",\n \"cerebras.description\": \"Cerebras es una plataforma de inferencia basada en su sistema CS-3, enfocada en baja latencia y alto rendimiento para tareas en tiempo real como generación de código y agentes.\",\n \"cloudflare.description\": \"Ejecuta modelos de ML potenciados por GPU sin servidor en la red global de Cloudflare.\",\n \"cohere.description\": \"Cohere ofrece modelos multilingües de vanguardia, recuperación avanzada y espacios de trabajo de IA para empresas modernas, todo en una plataforma segura.\",\n \"cometapi.description\": \"CometAPI proporciona acceso a modelos de frontera de OpenAI, Anthropic, Google y más, permitiendo a los usuarios elegir el mejor modelo y precio para distintos casos de uso.\",\n \"comfyui.description\": \"Un potente motor de flujo de trabajo de código abierto para generación de imágenes, video y audio, compatible con modelos como SD, FLUX, Qwen, Hunyuan y WAN, con edición basada en nodos y despliegue privado.\",\n \"deepseek.description\": \"DeepSeek se centra en la investigación y las aplicaciones de IA. Su familia más reciente, DeepSeek V4, se presenta en variantes Flash y Pro con una ventana de contexto de 1M y un enfoque de razonamiento híbrido, competitivo con los principales modelos cerrados de vanguardia en pruebas de razonamiento y agentes.\",\n \"fal.description\": \"Una plataforma de medios generativos creada para desarrolladores.\",\n \"fireworksai.description\": \"Fireworks AI ofrece servicios avanzados de modelos de lenguaje con llamadas a funciones y procesamiento multimodal. Firefunction V2 (basado en Llama-3) está optimizado para llamadas a funciones, chat y seguimiento de instrucciones, mientras que FireLLaVA-13B admite entradas mixtas de imagen y texto. Otros modelos destacados incluyen las familias Llama y Mixtral.\",\n \"giteeai.description\": \"Las APIs sin servidor de Gitee AI ofrecen servicios de inferencia LLM listos para usar para desarrolladores.\",\n \"github.description\": \"Con GitHub Models, los desarrolladores pueden trabajar como ingenieros de IA utilizando modelos líderes en la industria.\",\n \"githubcopilot.description\": \"Accede a los modelos Claude, GPT y Gemini con tu suscripción a GitHub Copilot.\",\n \"glmcodingplan.description\": \"El Plan de Codificación GLM proporciona acceso a los modelos de Zhipu AI, incluidos GLM-5 y GLM-4.7, para tareas de codificación mediante una suscripción de tarifa fija.\",\n \"google.description\": \"La familia Gemini de Google es su IA de propósito general más avanzada, desarrollada por Google DeepMind para uso multimodal en texto, código, imágenes, audio y video. Escala desde centros de datos hasta dispositivos móviles con gran eficiencia y alcance.\",\n \"groq.description\": \"El motor de inferencia LPU de Groq ofrece un rendimiento de referencia excepcional con velocidad y eficiencia sobresalientes, estableciendo un alto estándar para la inferencia LLM en la nube de baja latencia.\",\n \"higress.description\": \"Higress es una puerta de enlace de API nativa en la nube creada dentro de Alibaba para abordar el impacto de recarga de Tengine en conexiones de larga duración y brechas en el balanceo de carga gRPC/Dubbo.\",\n \"huggingface.description\": \"La API de inferencia de Hugging Face ofrece una forma rápida de explorar miles de modelos para múltiples tareas, brindando acceso instantáneo a modelos de alto rendimiento para prototipado y experimentación en ML.\",\n \"hunyuan.description\": \"Un LLM desarrollado por Tencent con gran capacidad de redacción en chino, razonamiento sólido en contextos complejos y ejecución confiable de tareas.\",\n \"infiniai.description\": \"Proporciona a los desarrolladores de aplicaciones servicios LLM de alto rendimiento, fáciles de usar y seguros, cubriendo todo el flujo de trabajo desde el desarrollo del modelo hasta su despliegue en producción.\",\n \"internlm.description\": \"Una organización de código abierto centrada en la investigación de modelos grandes y herramientas, que ofrece una plataforma eficiente y fácil de usar para acceder a modelos y algoritmos de vanguardia.\",\n \"jina.description\": \"Fundada en 2020, Jina AI es una empresa líder en búsqueda con IA. Su pila de búsqueda incluye modelos vectoriales, reordenadores y pequeños modelos de lenguaje para construir aplicaciones generativas y multimodales confiables y de alta calidad.\",\n \"kimicodingplan.description\": \"Kimi Code de Moonshot AI proporciona acceso a los modelos Kimi, incluidos K2.5, para tareas de codificación.\",\n \"lmstudio.description\": \"LM Studio es una aplicación de escritorio para desarrollar y experimentar con LLMs en tu ordenador.\",\n \"lobehub.description\": \"LobeHub Cloud utiliza APIs oficiales para acceder a modelos de IA y mide el uso con Créditos vinculados a los tokens del modelo.\",\n \"longcat.description\": \"LongCat es una serie de modelos grandes de inteligencia artificial generativa desarrollados de manera independiente por Meituan. Está diseñado para mejorar la productividad interna de la empresa y permitir aplicaciones innovadoras mediante una arquitectura computacional eficiente y sólidas capacidades multimodales.\",\n \"minimax.description\": \"Fundada en 2021, MiniMax desarrolla IA de propósito general con modelos fundacionales multimodales, incluyendo modelos de texto MoE con billones de parámetros, modelos de voz y visión, junto con aplicaciones como Hailuo AI.\",\n \"minimaxcodingplan.description\": \"El Plan de Tokens MiniMax proporciona acceso a los modelos MiniMax, incluidos M2.7, para tareas de codificación mediante una suscripción de tarifa fija.\",\n \"mistral.description\": \"Mistral ofrece modelos avanzados generales, especializados y de investigación para razonamiento complejo, tareas multilingües y generación de código, con llamadas a funciones para integraciones personalizadas.\",\n \"modelscope.description\": \"ModelScope es la plataforma de modelos como servicio de Alibaba Cloud, que ofrece una amplia gama de modelos de IA y servicios de inferencia.\",\n \"moonshot.description\": \"Moonshot, de Moonshot AI (Beijing Moonshot Technology), ofrece múltiples modelos de PLN para casos de uso como creación de contenido, investigación, recomendaciones y análisis médico, con sólido soporte para contexto largo y generación compleja.\",\n \"nebius.description\": \"Nebius proporciona infraestructura de alto rendimiento para innovadores globales en IA mediante clústeres de GPU a gran escala y una plataforma en la nube verticalmente integrada.\",\n \"newapi.description\": \"Una plataforma de código abierto para agregación y enrutamiento de múltiples servicios de IA.\",\n \"novita.description\": \"Novita AI ofrece APIs flexibles, confiables y rentables para LLMs y generación de imágenes. Soporta modelos como Llama 3 y Mistral, y proporciona APIs escalables y amigables para startups de IA generativa.\",\n \"nvidia.description\": \"NVIDIA NIM proporciona contenedores para microservicios de inferencia acelerados por GPU autoalojados en la nube, centros de datos, PCs RTX AI y estaciones de trabajo, para modelos preentrenados y personalizados.\",\n \"ollama.description\": \"Ollama ofrece modelos para generación de código, matemáticas, procesamiento multilingüe y chat, compatibles con despliegues empresariales y locales.\",\n \"ollamacloud.description\": \"Ollama Cloud proporciona inferencia gestionada con acceso inmediato a la biblioteca de modelos de Ollama y APIs compatibles con OpenAI.\",\n \"openai.description\": \"OpenAI es un laboratorio líder en investigación de IA cuyos modelos GPT han avanzado el procesamiento de lenguaje natural, ofreciendo alto rendimiento y gran valor en investigación, negocios e innovación.\",\n \"opencodecodingplan.description\": \"OpenCode Go es una suscripción de 10 $ al mes que ofrece acceso fiable a modelos de programación seleccionados: GLM, Kimi, MiMo, Qwen y MiniMax.\",\n \"opencodezen.description\": \"OpenCode Zen proporciona acceso a modelos seleccionados de OpenAI, Anthropic, Moonshot, MiniMax, Zhipu, Qwen y más, todo a través de una única clave de API.\",\n \"openrouter.description\": \"OpenRouter proporciona acceso a muchos modelos de frontera de OpenAI, Anthropic, LLaMA y más, permitiendo a los usuarios elegir el mejor modelo y precio para su caso de uso.\",\n \"perplexity.description\": \"Perplexity ofrece modelos de chat avanzados, incluyendo variantes de Llama 3.1, para uso en línea y fuera de línea y cargas de trabajo complejas de PLN.\",\n \"ppio.description\": \"PPIO ofrece APIs de modelos abiertos confiables y rentables, incluyendo DeepSeek, Llama, Qwen y otros modelos líderes.\",\n \"qiniu.description\": \"Qiniu proporciona servicios de inferencia de IA en tiempo real y por lotes, confiables, rentables y fáciles de usar.\",\n \"qwen.description\": \"Qwen es el modelo de lenguaje a gran escala de Alibaba Cloud con gran capacidad de comprensión y generación, cubriendo preguntas y respuestas, redacción, expresión de opiniones y código en múltiples dominios.\",\n \"replicate.description\": \"Replicate ejecuta modelos de imagen de código abierto como FLUX y Stable Diffusion mediante una sencilla API en la nube.\",\n \"sambanova.description\": \"SambaNova Cloud permite a los desarrolladores usar modelos de código abierto líderes con inferencia extremadamente rápida.\",\n \"search1api.description\": \"Search1API proporciona acceso a modelos DeepSeek con conectividad web opcional, incluyendo variantes estándar y rápidas en múltiples tamaños de parámetros.\",\n \"sensenova.description\": \"SenseNova ofrece servicios LLM de pila completa eficientes y fáciles de usar, respaldados por la infraestructura de SenseTime.\",\n \"siliconcloud.description\": \"SiliconCloud es un servicio de nube GenAI rentable basado en modelos de código abierto robustos.\",\n \"spark.description\": \"iFLYTEK Spark ofrece IA multilingüe potente en múltiples dominios, habilitando innovaciones en hardware inteligente, salud, finanzas y otros sectores.\",\n \"stepfun.description\": \"Los modelos Stepfun ofrecen capacidades líderes en razonamiento multimodal y complejo, con comprensión de contexto largo y potente orquestación de búsqueda autónoma.\",\n \"straico.description\": \"Straico simplifica la integración de la IA al proporcionar un espacio de trabajo unificado que reúne los mejores modelos generativos de texto, imagen y audio, empoderando a los mercadólogos, emprendedores y entusiastas con acceso fluido a diversas herramientas de IA.\",\n \"streamlake.description\": \"StreamLake es una plataforma empresarial de servicios de modelos y computación en la nube de IA que integra inferencia de modelos de alto rendimiento, personalización de modelos de bajo costo y servicios completamente gestionados, para ayudar a las empresas a centrarse en la innovación de aplicaciones de IA sin preocuparse por la complejidad y el costo de los recursos de computación subyacentes.\",\n \"taichu.description\": \"Un modelo multimodal de nueva generación de CASIA y el Instituto de IA de Wuhan, que admite preguntas y respuestas multivuelta, redacción, generación de imágenes, comprensión 3D y análisis de señales con mayor cognición y creatividad.\",\n \"tencentcloud.description\": \"LLM Knowledge Engine Atomic Power proporciona preguntas y respuestas de conocimiento de extremo a extremo para empresas y desarrolladores, con servicios modulares como análisis de documentos, segmentación, embeddings y reescritura multivuelta para crear soluciones de IA personalizadas.\",\n \"togetherai.description\": \"Together AI ofrece rendimiento líder con modelos innovadores, amplia personalización, escalado rápido y despliegue sencillo para necesidades empresariales.\",\n \"upstage.description\": \"Upstage desarrolla modelos de IA para necesidades empresariales, incluyendo Solar LLM y Document AI, con APIs de chat que admiten llamadas a funciones, traducción, embeddings y casos de uso específicos por dominio.\",\n \"v0.description\": \"v0 es un asistente de programación en pareja que convierte ideas en lenguaje natural en código y UI para tu proyecto.\",\n \"vercelaigateway.description\": \"Vercel AI Gateway proporciona una API unificada para más de 100 modelos de OpenAI, Anthropic, Google y más, con presupuestos, monitoreo de uso, balanceo de carga y conmutación por error.\",\n \"vertexai.description\": \"La familia Gemini de Google es su IA de propósito general más avanzada, desarrollada por Google DeepMind para uso multimodal en texto, código, imágenes, audio y video. Escala desde centros de datos hasta dispositivos móviles, mejorando la eficiencia y flexibilidad de despliegue.\",\n \"vllm.description\": \"vLLM es una biblioteca rápida y fácil de usar para inferencia y servicio de LLMs.\",\n \"volcengine.description\": \"La plataforma de servicios de modelos de ByteDance ofrece acceso seguro, completo y rentable a modelos, además de herramientas de extremo a extremo para datos, ajuste fino, inferencia y evaluación.\",\n \"volcenginecodingplan.description\": \"El Plan de Codificación Volcengine de ByteDance proporciona acceso a múltiples modelos de codificación, incluidos Doubao-Seed-Code, GLM-4.7, DeepSeek-V3.2 y Kimi-K2.5, mediante una suscripción de tarifa fija.\",\n \"wenxin.description\": \"Una plataforma empresarial todo en uno para modelos fundacionales y desarrollo de aplicaciones nativas de IA, que ofrece herramientas de extremo a extremo para flujos de trabajo de modelos y aplicaciones de IA generativa.\",\n \"xai.description\": \"xAI desarrolla IA para acelerar el descubrimiento científico, con la misión de profundizar la comprensión humana del universo.\",\n \"xiaomimimo.description\": \"Xiaomi MiMo ofrece un servicio de modelo conversacional con una API compatible con OpenAI. El modelo mimo-v2-flash admite razonamiento profundo, salida en streaming, llamadas a funciones, una ventana de contexto de 256K y una salida máxima de 128K.\",\n \"xinference.description\": \"Xorbits Inference (Xinference) es una plataforma de código abierto que simplifica la ejecución e integración de modelos de IA. Permite ejecutar LLMs, modelos de embeddings y modelos multimodales de código abierto localmente o en la nube para construir potentes aplicaciones de IA.\",\n \"zenmux.description\": \"ZenMux es una plataforma unificada de agregación de IA que admite OpenAI, Anthropic, Google VertexAI y más, con enrutamiento flexible para cambiar y gestionar modelos fácilmente.\",\n \"zeroone.description\": \"01.AI impulsa una revolución de IA 2.0 centrada en el ser humano, utilizando LLMs para crear valor económico y social y construir nuevos ecosistemas y modelos de negocio de IA.\",\n \"zhipu.description\": \"ZhiPu AI ofrece una plataforma abierta para modelos multimodales y de lenguaje, abarcando procesamiento de texto, comprensión de imágenes y asistencia en programación.\"\n}\n"}}, "locales/fr-FR/providers.json": {"ab601b2ced51e606fcd3554040adcd1129eadaf9": {"t": 1785595964.4459531, "n": 18162, "h": "ea40e9704cbae08f", "c": "{\n \"ai21.description\": \"AI21 Labs développe des modèles fondamentaux et des systèmes d'IA pour les entreprises, accélérant la mise en production de l'IA générative.\",\n \"ai302.description\": \"302.AI est une plateforme d'IA à la demande proposant un large catalogue d'API d'IA et d'applications en ligne.\",\n \"ai360.description\": \"360 AI est une plateforme de modèles et de services proposée par 360, offrant des modèles de traitement du langage naturel tels que 360GPT2 Pro, 360GPT Pro et 360GPT Turbo. Ces modèles combinent des paramètres à grande échelle et des capacités multimodales pour la génération de texte, la compréhension sémantique, la conversation et le code, avec une tarification flexible adaptée à divers besoins.\",\n \"aihubmix.description\": \"AiHubMix permet d'accéder à plusieurs modèles d'IA via une API unifiée.\",\n \"akashchat.description\": \"Akash est une place de marché décentralisée de ressources cloud, offrant des prix compétitifs par rapport aux fournisseurs traditionnels.\",\n \"antgroup.description\": \"Ant Ling est la série de modèles fondamentaux au cœur de l'initiative d'Intelligence Artificielle Générale (AGI) d'Ant Group, dédiée à la construction et à l'ouverture de capacités de modèles fondamentaux de pointe. Nous croyons que le développement de l'intelligence doit aller vers l'ouverture, le partage et l'évolutivité—en commençant par de petites étapes pratiques pour favoriser l'évolution progressive et le déploiement concret de l'AGI.\",\n \"anthropic.description\": \"Anthropic développe des modèles linguistiques avancés comme Claude 3.5 Sonnet, Claude 3 Sonnet, Claude 3 Opus et Claude 3 Haiku, alliant intelligence, rapidité et coût pour des cas d’usage allant de l’entreprise aux réponses instantanées.\",\n \"azure.description\": \"Azure propose des modèles d'IA avancés, notamment les séries GPT-3.5 et GPT-4, pour divers types de données et tâches complexes, avec un accent sur la sécurité, la fiabilité et la durabilité.\",\n \"azureai.description\": \"Azure fournit des modèles d'IA avancés, y compris les séries GPT-3.5 et GPT-4, pour des données variées et des tâches complexes, en mettant l'accent sur une IA sûre, fiable et durable.\",\n \"baichuan.description\": \"Baichuan AI se concentre sur les modèles fondamentaux performants en connaissances chinoises, traitement de contexte long et génération créative. Ses modèles (Baichuan 4, Baichuan 3 Turbo, Baichuan 3 Turbo 128k) sont optimisés pour différents scénarios et offrent une forte valeur ajoutée.\",\n \"bailiancodingplan.description\": \"Le plan de codage Bailian d'Aliyun est un service d'IA spécialisé dans le codage, offrant un accès à des modèles optimisés pour le codage tels que Qwen, GLM, Kimi et MiniMax via un point d'accès dédié.\",\n \"bedrock.description\": \"Amazon Bedrock fournit aux entreprises des modèles avancés de langage et de vision, incluant Anthropic Claude et Meta Llama 3.1, allant d’options légères à haute performance pour les tâches de texte, de conversation et d’image.\",\n \"bfl.description\": \"Un laboratoire de recherche de pointe en IA visuelle construisant l'infrastructure visuelle de demain.\",\n \"cerebras.description\": \"Cerebras est une plateforme d'inférence basée sur son système CS-3, axée sur une latence ultra-faible et un débit élevé pour les charges de travail en temps réel comme la génération de code et les agents intelligents.\",\n \"cloudflare.description\": \"Exécutez des modèles ML alimentés par GPU sans serveur sur le réseau mondial de Cloudflare.\",\n \"cohere.description\": \"Cohere propose des modèles multilingues de pointe, une recherche avancée et des espaces de travail IA pour les entreprises modernes, le tout sur une plateforme sécurisée.\",\n \"cometapi.description\": \"CometAPI donne accès à des modèles de pointe d’OpenAI, Anthropic, Google et d’autres, permettant aux utilisateurs de choisir le meilleur modèle et tarif selon leurs besoins.\",\n \"comfyui.description\": \"Un moteur de workflow open source puissant pour la génération d’images, de vidéos et d’audio, prenant en charge des modèles comme SD, FLUX, Qwen, Hunyuan et WAN avec édition par nœuds et déploiement privé.\",\n \"deepseek.description\": \"DeepSeek se concentre sur la recherche et les applications en intelligence artificielle. Sa dernière gamme DeepSeek V4 est proposée en versions Flash et Pro, avec une fenêtre de contexte d’un million de tokens et un mode de réflexion hybride — offrant des performances compétitives avec les principaux modèles propriétaires de pointe en raisonnement et en benchmarks d’agents.\",\n \"fal.description\": \"Une plateforme de médias génératifs conçue pour les développeurs.\",\n \"fireworksai.description\": \"Fireworks AI propose des services avancés de modèles linguistiques avec appels de fonctions et traitement multimodal. Firefunction V2 (basé sur Llama-3) est optimisé pour les appels de fonctions, la conversation et l’exécution d’instructions, tandis que FireLLaVA-13B prend en charge les entrées image-texte. D'autres modèles notables incluent les familles Llama et Mixtral.\",\n \"giteeai.description\": \"Les API serverless de Gitee AI offrent des services d'inférence LLM prêts à l'emploi pour les développeurs.\",\n \"github.description\": \"Avec GitHub Models, les développeurs peuvent créer comme des ingénieurs IA en utilisant des modèles de pointe.\",\n \"githubcopilot.description\": \"Accédez aux modèles Claude, GPT et Gemini grâce à votre abonnement GitHub Copilot.\",\n \"glmcodingplan.description\": \"Le plan de codage GLM offre un accès aux modèles d'IA Zhipu, y compris GLM-5 et GLM-4.7, pour des tâches de codage via un abonnement à tarif fixe.\",\n \"google.description\": \"La famille Gemini de Google est son IA généraliste la plus avancée, développée par Google DeepMind pour un usage multimodal sur le texte, le code, les images, l’audio et la vidéo. Elle s’adapte des centres de données aux appareils mobiles avec une grande efficacité.\",\n \"groq.description\": \"Le moteur d'inférence LPU de Groq offre des performances de référence exceptionnelles avec une rapidité et une efficacité remarquables, établissant une nouvelle norme pour l'inférence LLM à faible latence dans le cloud.\",\n \"higress.description\": \"Higress est une passerelle API cloud-native développée par Alibaba pour résoudre les problèmes de rechargement de Tengine sur les connexions persistantes et les lacunes dans l’équilibrage de charge gRPC/Dubbo.\",\n \"huggingface.description\": \"L’API d’inférence Hugging Face permet d’explorer rapidement des milliers de modèles pour de nombreuses tâches, offrant un accès instantané à des modèles performants pour le prototypage et l’expérimentation ML.\",\n \"hunyuan.description\": \"Un LLM développé par Tencent, performant en rédaction chinoise, raisonnement complexe et exécution fiable des tâches.\",\n \"infiniai.description\": \"Fournit aux développeurs d'applications des services LLM performants, simples d'utilisation et sécurisés, couvrant l'ensemble du flux de travail, du développement au déploiement en production.\",\n \"internlm.description\": \"Une organisation open source axée sur la recherche et les outils pour les grands modèles, offrant une plateforme efficace et accessible pour les modèles et algorithmes de pointe.\",\n \"jina.description\": \"Fondée en 2020, Jina AI est une entreprise leader en IA de recherche. Sa pile technologique comprend des modèles vectoriels, des rerankers et de petits modèles linguistiques pour créer des applications de recherche générative et multimodale fiables et de haute qualité.\",\n \"kimicodingplan.description\": \"Kimi Code de Moonshot AI offre un accès aux modèles Kimi, y compris K2.5, pour des tâches de codage.\",\n \"lmstudio.description\": \"LM Studio est une application de bureau pour développer et expérimenter avec des LLMs sur votre ordinateur.\",\n \"lobehub.description\": \"LobeHub Cloud utilise des API officielles pour accéder aux modèles d'IA et mesure l'utilisation avec des Crédits liés aux jetons des modèles.\",\n \"longcat.description\": \"LongCat est une série de grands modèles d'IA générative développés indépendamment par Meituan. Elle est conçue pour améliorer la productivité interne de l'entreprise et permettre des applications innovantes grâce à une architecture informatique efficace et de puissantes capacités multimodales.\",\n \"minimax.description\": \"Fondée en 2021, MiniMax développe une IA généraliste avec des modèles fondamentaux multimodaux, incluant des modèles texte MoE à un billion de paramètres, des modèles vocaux et visuels, ainsi que des applications comme Hailuo AI.\",\n \"minimaxcodingplan.description\": \"Le plan de jetons MiniMax offre un accès aux modèles MiniMax, y compris M2.7, pour des tâches de codage via un abonnement à tarif fixe.\",\n \"mistral.description\": \"Mistral propose des modèles avancés généralistes, spécialisés et de recherche pour le raisonnement complexe, les tâches multilingues et la génération de code, avec appels de fonctions pour des intégrations personnalisées.\",\n \"modelscope.description\": \"ModelScope est la plateforme de modèles en tant que service d'Alibaba Cloud, offrant un large éventail de modèles d'IA et de services d'inférence.\",\n \"moonshot.description\": \"Moonshot, de Moonshot AI (Beijing Moonshot Technology), propose plusieurs modèles NLP pour des cas d’usage comme la création de contenu, la recherche, les recommandations et l’analyse médicale, avec un fort support du contexte long et de la génération complexe.\",\n \"nebius.description\": \"Nebius fournit une infrastructure haute performance pour les innovateurs en IA du monde entier via de vastes clusters GPU et une plateforme cloud verticalement intégrée.\",\n \"newapi.description\": \"Une plateforme open source d’agrégation et de routage pour plusieurs services d’IA.\",\n \"novita.description\": \"Novita AI propose des API flexibles, fiables et économiques pour les LLMs et la génération d’images. Elle prend en charge des modèles comme Llama 3 et Mistral, avec des API évolutives et conviviales pour les startups en IA générative.\",\n \"nvidia.description\": \"NVIDIA NIM fournit des conteneurs pour des microservices d'inférence auto-hébergés et accélérés par GPU sur le cloud, les centres de données, les PC RTX AI et les stations de travail, pour des modèles pré-entraînés ou personnalisés.\",\n \"ollama.description\": \"Ollama propose des modèles pour la génération de code, les mathématiques, le traitement multilingue et la conversation, avec prise en charge des déploiements en entreprise et en local.\",\n \"ollamacloud.description\": \"Ollama Cloud fournit une inférence gérée avec un accès prêt à l’emploi à la bibliothèque de modèles Ollama et des API compatibles OpenAI.\",\n \"openai.description\": \"OpenAI est un laboratoire de recherche en IA de premier plan dont les modèles GPT ont fait progresser le traitement du langage naturel, offrant des performances élevées et une forte valeur dans la recherche, les affaires et l’innovation.\",\n \"opencodecodingplan.description\": \"OpenCode Go est un abonnement à 10 $ par mois offrant un accès fiable à une sélection de modèles de programmation : GLM, Kimi, MiMo, Qwen, MiniMax.\",\n \"opencodezen.description\": \"OpenCode Zen offre un accès à une sélection de modèles provenant de OpenAI, Anthropic, Moonshot, MiniMax, Zhipu, Qwen et d’autres via une seule clé API.\",\n \"openrouter.description\": \"OpenRouter donne accès à de nombreux modèles de pointe d’OpenAI, Anthropic, LLaMA et d’autres, permettant aux utilisateurs de choisir le meilleur modèle et tarif selon leur cas d’usage.\",\n \"perplexity.description\": \"Perplexity propose des modèles de conversation avancés, y compris des variantes de Llama 3.1, pour une utilisation en ligne et hors ligne et des charges de travail NLP complexes.\",\n \"ppio.description\": \"PPIO fournit des API de modèles ouverts fiables et économiques, incluant DeepSeek, Llama, Qwen et d'autres modèles de premier plan.\",\n \"qiniu.description\": \"Qiniu propose des services d'inférence IA en temps réel et par lot, fiables, économiques et faciles à utiliser.\",\n \"qwen.description\": \"Qwen est le grand modèle linguistique d'Alibaba Cloud, performant en compréhension et génération, couvrant les questions-réponses, la rédaction, l’expression d’opinions et le code dans de nombreux domaines.\",\n \"replicate.description\": \"Replicate exécute des modèles d’image open source comme FLUX et Stable Diffusion via une API cloud simple.\",\n \"sambanova.description\": \"SambaNova Cloud permet aux développeurs d’utiliser les meilleurs modèles open source avec une inférence extrêmement rapide.\",\n \"search1api.description\": \"Search1API donne accès aux modèles DeepSeek avec connectivité web optionnelle, incluant des variantes standard et rapides de différentes tailles de paramètres.\",\n \"sensenova.description\": \"SenseNova propose des services LLM complets, efficaces et faciles à utiliser, soutenus par l’infrastructure de SenseTime.\",\n \"siliconcloud.description\": \"SiliconCloud est un service cloud GenAI économique basé sur des modèles open source robustes.\",\n \"spark.description\": \"iFLYTEK Spark propose une IA multilingue puissante dans divers domaines, favorisant l’innovation dans le matériel intelligent, la santé, la finance et d’autres secteurs.\",\n \"stepfun.description\": \"Les modèles Stepfun offrent des capacités de raisonnement complexe et multimodal de pointe, avec une compréhension approfondie du contexte long et une orchestration autonome puissante de la recherche.\",\n \"straico.description\": \"Straico simplifie l'intégration de l'IA en offrant un espace de travail unifié qui regroupe les meilleurs modèles génératifs d'IA pour le texte, l'image et l'audio, permettant aux marketeurs, entrepreneurs et passionnés d'accéder facilement à une variété d'outils d'IA.\",\n \"streamlake.description\": \"StreamLake est une plateforme de services de modèles et de cloud de calcul IA de niveau entreprise, intégrant une inférence de modèles haute performance, une personnalisation de modèles à faible coût et des services entièrement gérés pour aider les entreprises à se concentrer sur l’innovation des applications d’IA sans se soucier de la complexité ni du coût des ressources de calcul sous-jacentes.\",\n \"taichu.description\": \"Un modèle multimodal de nouvelle génération développé par le CASIA et l’Institut d’IA de Wuhan, prenant en charge les questions-réponses multi-tours, la rédaction, la génération d’images, la compréhension 3D et l’analyse de signaux avec une cognition et une créativité renforcées.\",\n \"tencentcloud.description\": \"LLM Knowledge Engine Atomic Power fournit des réponses aux questions d’entreprise de bout en bout, avec des services modulaires comme l’analyse de documents, le découpage, les embeddings et la réécriture multi-tours pour créer des solutions IA personnalisées.\",\n \"togetherai.description\": \"Together AI offre des performances de pointe avec des modèles innovants, une personnalisation étendue, une montée en charge rapide et un déploiement simplifié pour les besoins des entreprises.\",\n \"upstage.description\": \"Upstage développe des modèles IA pour les besoins professionnels, incluant Solar LLM et Document AI, avec des API de conversation prenant en charge les appels de fonctions, la traduction, les embeddings et des cas d’usage spécifiques.\",\n \"v0.description\": \"v0 est un assistant de programmation en binôme qui transforme des idées en langage naturel en code et interface utilisateur pour votre projet.\",\n \"vercelaigateway.description\": \"Vercel AI Gateway fournit une API unifiée pour plus de 100 modèles d’OpenAI, Anthropic, Google et d’autres, avec gestion budgétaire, surveillance d’utilisation, équilibrage de charge et basculement.\",\n \"vertexai.description\": \"La famille Gemini de Google est son IA généraliste la plus avancée, développée par Google DeepMind pour un usage multimodal sur le texte, le code, les images, l’audio et la vidéo. Elle s’adapte des centres de données aux appareils mobiles, améliorant l’efficacité et la flexibilité de déploiement.\",\n \"vllm.description\": \"vLLM est une bibliothèque rapide et facile à utiliser pour l’inférence et le service de LLM.\",\n \"volcengine.description\": \"La plateforme de services de modèles de ByteDance offre un accès sécurisé, riche en fonctionnalités et compétitif en coût, avec des outils de bout en bout pour les données, l’ajustement, l’inférence et l’évaluation.\",\n \"volcenginecodingplan.description\": \"Le plan de codage Volcengine de ByteDance offre un accès à plusieurs modèles de codage, y compris Doubao-Seed-Code, GLM-4.7, DeepSeek-V3.2 et Kimi-K2.5, via un abonnement à tarif fixe.\",\n \"wenxin.description\": \"Une plateforme tout-en-un pour les modèles fondamentaux et le développement d’applications IA-native en entreprise, offrant des outils de bout en bout pour les workflows de modèles et d’applications génératives.\",\n \"xai.description\": \"xAI développe une IA pour accélérer la découverte scientifique, avec pour mission d’approfondir la compréhension humaine de l’univers.\",\n \"xiaomimimo.description\": \"Xiaomi MiMo propose un service de modèle conversationnel avec une API compatible OpenAI. Le modèle mimo-v2-flash prend en charge le raisonnement approfondi, la sortie en streaming, l’appel de fonctions, une fenêtre de contexte de 256K et une sortie maximale de 128K.\",\n \"xinference.description\": \"Xorbits Inference (Xinference) est une plateforme open source qui simplifie l’exécution et l’intégration de modèles IA. Elle permet d’exécuter localement ou dans le cloud des LLMs open source, des modèles d’embedding et multimodaux pour créer des applications IA puissantes.\",\n \"zenmux.description\": \"ZenMux est une plateforme unifiée d’agrégation d’IA prenant en charge OpenAI, Anthropic, Google VertexAI et d’autres, avec un routage flexible pour gérer et basculer facilement entre les modèles.\",\n \"zeroone.description\": \"01.AI mène une révolution IA 2.0 centrée sur l’humain, utilisant les LLMs pour créer de la valeur économique et sociale et bâtir de nouveaux écosystèmes et modèles économiques IA.\",\n \"zhipu.description\": \"ZhiPu AI propose une plateforme ouverte pour les modèles multimodaux et linguistiques couvrant le traitement de texte, la compréhension d’images et l’assistance au codage.\"\n}\n"}}, "locales/ru-RU/providers.json": {"ab601b2ced51e606fcd3554040adcd1129eadaf9": {"t": 1785595966.9826517, "n": 17111, "h": "49bcb18fd843e814", "c": "{\n \"ai21.description\": \"AI21 Labs разрабатывает базовые модели и ИИ-системы для предприятий, ускоряя внедрение генеративного ИИ в производственные процессы.\",\n \"ai302.description\": \"302.AI — это платформа ИИ с оплатой по мере использования, предлагающая широкий каталог API и онлайн-приложений на базе ИИ.\",\n \"ai360.description\": \"360 AI — это платформа моделей и сервисов от компании 360, предлагающая модели обработки естественного языка, такие как 360GPT2 Pro, 360GPT Pro и 360GPT Turbo. Эти модели сочетают в себе масштабные параметры и мультимодальные возможности для генерации текста, семантического понимания, общения и программирования, с гибкой ценовой политикой для различных задач.\",\n \"aihubmix.description\": \"AiHubMix предоставляет доступ к нескольким ИИ-моделям через единый API.\",\n \"akashchat.description\": \"Akash — это децентрализованный маркетплейс облачных ресурсов с конкурентными ценами по сравнению с традиционными облачными провайдерами.\",\n \"antgroup.description\": \"Ant Ling — это основная серия моделей Ant Group в рамках инициативы Искусственного Общего Интеллекта (AGI), посвященная созданию и внедрению передовых возможностей базовых моделей. Мы верим, что развитие интеллекта должно двигаться в сторону открытости, обмена и масштабируемости — начиная с небольших, практических шагов, чтобы обеспечить устойчивую эволюцию и реальное внедрение AGI.\",\n \"anthropic.description\": \"Anthropic разрабатывает передовые языковые модели, такие как Claude 3.5 Sonnet, Claude 3 Sonnet, Claude 3 Opus и Claude 3 Haiku, обеспечивая баланс между интеллектом, скоростью и стоимостью для корпоративных и оперативных задач.\",\n \"azure.description\": \"Azure предлагает передовые ИИ-модели, включая серии GPT-3.5 и GPT-4, для работы с различными типами данных и сложными задачами, с акцентом на безопасность, надежность и устойчивость.\",\n \"azureai.description\": \"Azure предоставляет передовые ИИ-модели, включая серии GPT-3.5 и GPT-4, для работы с различными типами данных и сложными задачами, с акцентом на безопасность, надежность и устойчивость.\",\n \"baichuan.description\": \"Baichuan AI специализируется на базовых моделях с высокой производительностью в области китайских знаний, обработки длинного контекста и креативной генерации. Модели (Baichuan 4, Baichuan 3 Turbo, Baichuan 3 Turbo 128k) оптимизированы под различные сценарии и предлагают высокую ценность.\",\n \"bailiancodingplan.description\": \"План кодирования Bailian от Aliyun — это специализированный AI-сервис кодирования, предоставляющий доступ к моделям, оптимизированным для кодирования, таким как Qwen, GLM, Kimi и MiniMax, через выделенную конечную точку.\",\n \"bedrock.description\": \"Amazon Bedrock предоставляет предприятиям передовые языковые и визуальные модели, включая Anthropic Claude и Meta Llama 3.1, от легковесных до высокопроизводительных решений для задач текста, общения и изображений.\",\n \"bfl.description\": \"Ведущая исследовательская лаборатория в области передового ИИ, создающая визуальную инфраструктуру будущего.\",\n \"cerebras.description\": \"Cerebras — это платформа инференса, построенная на системе CS-3, ориентированная на сверхнизкую задержку и высокую пропускную способность для задач в реальном времени, таких как генерация кода и агентные задачи.\",\n \"cloudflare.description\": \"Запускайте модели машинного обучения с поддержкой GPU без серверов по всей глобальной сети Cloudflare.\",\n \"cohere.description\": \"Cohere предлагает передовые многоязычные модели, продвинутый поиск и рабочие пространства ИИ для современных предприятий — всё в одной безопасной платформе.\",\n \"cometapi.description\": \"CometAPI предоставляет доступ к передовым моделям от OpenAI, Anthropic, Google и других, позволяя пользователям выбирать лучшие модели и цены для различных задач.\",\n \"comfyui.description\": \"Мощный open-source движок рабочих процессов для генерации изображений, видео и аудио, поддерживающий модели SD, FLUX, Qwen, Hunyuan и WAN с редактированием на основе узлов и возможностью приватного развертывания.\",\n \"deepseek.description\": \"DeepSeek занимается исследованиями и практическим применением искусственного интеллекта. Последняя линейка моделей DeepSeek V4 представлена в версиях Flash и Pro, оснащена контекстным окном в 1 млн токенов и гибридным режимом мышления — сопоставима с ведущими закрытыми фронтирными моделями по показателям рассуждений и работе агентов.\",\n \"fal.description\": \"Платформа генеративных медиа, созданная для разработчиков.\",\n \"fireworksai.description\": \"Fireworks AI предоставляет продвинутые языковые модели с поддержкой вызова функций и мультимодальной обработки. Firefunction V2 (на базе Llama-3) оптимизирована для вызова функций, общения и выполнения инструкций, а FireLLaVA-13B поддерживает смешанный ввод изображений и текста. Также доступны модели семейств Llama и Mixtral.\",\n \"giteeai.description\": \"Gitee AI Serverless API предоставляет готовые к использованию сервисы инференса LLM для разработчиков.\",\n \"github.description\": \"С помощью моделей GitHub разработчики могут работать как инженеры ИИ, используя передовые модели отрасли.\",\n \"githubcopilot.description\": \"Получите доступ к моделям Claude, GPT и Gemini через подписку GitHub Copilot.\",\n \"glmcodingplan.description\": \"План кодирования GLM предоставляет доступ к моделям Zhipu AI, включая GLM-5 и GLM-4.7, для выполнения задач кодирования по подписке с фиксированной оплатой.\",\n \"google.description\": \"Семейство Gemini от Google — это самые передовые универсальные ИИ-модели, разработанные Google DeepMind для мультимодального использования с текстом, кодом, изображениями, аудио и видео. Масштабируются от дата-центров до мобильных устройств с высокой эффективностью.\",\n \"groq.description\": \"Инференс-движок LPU от Groq обеспечивает выдающуюся производительность с исключительной скоростью и эффективностью, устанавливая новый стандарт для облачного инференса LLM с низкой задержкой.\",\n \"higress.description\": \"Higress — это облачно-нативный API-шлюз, созданный внутри Alibaba для устранения проблем с перезагрузкой Tengine при длительных соединениях и недостатков балансировки нагрузки gRPC/Dubbo.\",\n \"huggingface.description\": \"API инференса Hugging Face предоставляет быстрый доступ к тысячам моделей для различных задач, позволяя мгновенно использовать высокопроизводительные модели для прототипирования и экспериментов с машинным обучением.\",\n \"hunyuan.description\": \"Разработанная Tencent LLM-модель с сильными навыками китайского письма, логического мышления в сложных контекстах и надежным выполнением задач.\",\n \"infiniai.description\": \"Предоставляет разработчикам приложений высокопроизводительные, простые в использовании и безопасные LLM-сервисы на всех этапах — от разработки модели до её внедрения.\",\n \"internlm.description\": \"Открытая организация, сосредоточенная на исследованиях и инструментах для больших моделей, предоставляющая эффективную и удобную платформу для доступа к передовым моделям и алгоритмам.\",\n \"jina.description\": \"Основанная в 2020 году, Jina AI — ведущая компания в области поискового ИИ. Её стек включает векторные модели, переоценщики и малые языковые модели для создания надежных генеративных и мультимодальных поисковых приложений.\",\n \"kimicodingplan.description\": \"Kimi Code от Moonshot AI предоставляет доступ к моделям Kimi, включая K2.5, для выполнения задач кодирования.\",\n \"lmstudio.description\": \"LM Studio — это настольное приложение для разработки и экспериментов с LLM на вашем компьютере.\",\n \"lobehub.description\": \"LobeHub Cloud использует официальные API для доступа к моделям ИИ и измеряет использование с помощью Кредитов, связанных с токенами моделей.\",\n \"longcat.description\": \"LongCat — это серия больших моделей генеративного ИИ, разработанных Meituan. Она предназначена для повышения внутренней производительности предприятия и создания инновационных приложений благодаря эффективной вычислительной архитектуре и мощным мультимодальным возможностям.\",\n \"minimax.description\": \"Основанная в 2021 году, MiniMax разрабатывает универсальные ИИ-модели на базе мультимодальных основ, включая текстовые модели с триллионами параметров, речевые и визуальные модели, а также приложения, такие как Hailuo AI.\",\n \"minimaxcodingplan.description\": \"План токенов MiniMax предоставляет доступ к моделям MiniMax, включая M2.7, для выполнения задач кодирования по подписке с фиксированной оплатой.\",\n \"mistral.description\": \"Mistral предлагает передовые универсальные, специализированные и исследовательские модели для сложных рассуждений, многоязычных задач и генерации кода, с поддержкой вызова функций для кастомных интеграций.\",\n \"modelscope.description\": \"ModelScope — это платформа моделей как сервиса от Alibaba Cloud, предлагающая широкий выбор ИИ-моделей и сервисов инференса.\",\n \"moonshot.description\": \"Moonshot от Moonshot AI (Beijing Moonshot Technology) предлагает несколько NLP-моделей для задач создания контента, исследований, рекомендаций и медицинского анализа, с поддержкой длинного контекста и сложной генерации.\",\n \"nebius.description\": \"Nebius предоставляет высокопроизводительную инфраструктуру для глобальных ИИ-инноваторов через масштабные GPU-кластеры и вертикально интегрированную облачную платформу.\",\n \"newapi.description\": \"Открытая платформа агрегации и маршрутизации для множества ИИ-сервисов.\",\n \"novita.description\": \"Novita AI предлагает гибкие, надежные и экономичные API для LLM и генерации изображений. Поддерживает модели Llama 3 и Mistral, предоставляя масштабируемые и удобные API для стартапов в области генеративного ИИ.\",\n \"nvidia.description\": \"NVIDIA NIM предоставляет контейнеры для самостоятельного размещения микросервисов инференса с ускорением на GPU в облаке, дата-центрах, RTX AI ПК и рабочих станциях для предобученных и кастомных моделей.\",\n \"ollama.description\": \"Ollama предлагает модели для генерации кода, математики, многоязычной обработки и общения, поддерживая как корпоративное, так и локальное развертывание.\",\n \"ollamacloud.description\": \"Ollama Cloud предоставляет управляемый инференс с готовым доступом к библиотеке моделей Ollama и API, совместимыми с OpenAI.\",\n \"openai.description\": \"OpenAI — ведущая исследовательская лаборатория в области ИИ, чьи модели GPT продвинули обработку естественного языка, обеспечивая высокую производительность и ценность для исследований, бизнеса и инноваций.\",\n \"opencodecodingplan.description\": \"OpenCode Go — это подписка за 10 долларов в месяц, обеспечивающая надежный доступ к отобранным моделям для программирования: GLM, Kimi, MiMo, Qwen, MiniMax.\",\n \"opencodezen.description\": \"OpenCode Zen предоставляет доступ к отобранным моделям от OpenAI, Anthropic, Moonshot, MiniMax, Zhipu, Qwen и других через единый API‑ключ.\",\n \"openrouter.description\": \"OpenRouter предоставляет доступ к множеству передовых моделей от OpenAI, Anthropic, LLaMA и других, позволяя пользователям выбирать лучшие модели и цены под свои задачи.\",\n \"perplexity.description\": \"Perplexity предлагает продвинутые модели общения, включая варианты Llama 3.1, для онлайн- и офлайн-использования и сложных NLP-задач.\",\n \"ppio.description\": \"PPIO предоставляет надежные и экономичные API для открытых моделей, включая DeepSeek, Llama, Qwen и другие ведущие модели.\",\n \"qiniu.description\": \"Qiniu предлагает надежные и доступные сервисы инференса ИИ в реальном времени и пакетном режиме, простые в использовании.\",\n \"qwen.description\": \"Qwen — это масштабная языковая модель от Alibaba Cloud с сильными навыками понимания и генерации, охватывающая вопросы и ответы, письмо, выражение мнений и программирование в различных областях.\",\n \"replicate.description\": \"Replicate запускает open-source модели генерации изображений, такие как FLUX и Stable Diffusion, через простой облачный API.\",\n \"sambanova.description\": \"SambaNova Cloud позволяет разработчикам использовать лучшие open-source модели с чрезвычайно быстрой скоростью инференса.\",\n \"search1api.description\": \"Search1API предоставляет доступ к моделям DeepSeek с опциональным подключением к интернету, включая стандартные и ускоренные варианты с различным числом параметров.\",\n \"sensenova.description\": \"SenseNova предлагает эффективные и простые в использовании полнофункциональные LLM-сервисы на базе инфраструктуры SenseTime.\",\n \"siliconcloud.description\": \"SiliconCloud — это экономичный облачный сервис генеративного ИИ, построенный на мощных open-source моделях.\",\n \"spark.description\": \"iFLYTEK Spark предоставляет мощные многоязычные ИИ-решения для различных отраслей, включая умные устройства, здравоохранение, финансы и другие вертикали.\",\n \"stepfun.description\": \"Модели Stepfun обладают передовыми мультимодальными и логическими возможностями, поддерживают понимание длинного контекста и мощную автономную оркестрацию поиска.\",\n \"straico.description\": \"Straico упрощает интеграцию ИИ, предоставляя единое рабочее пространство, которое объединяет лучшие модели генеративного ИИ для текста, изображений и аудио, обеспечивая маркетологов, предпринимателей и энтузиастов удобным доступом к разнообразным инструментам ИИ.\",\n \"streamlake.description\": \"StreamLake — это корпоративная платформа сервисов моделей и облако для AI‑вычислений, объединяющее высокопроизводительный вывод моделей, малозатратную кастомизацию моделей и полностью управляемые сервисы. Она помогает компаниям сосредоточиться на внедрении инноваций в сфере ИИ, не беспокоясь о сложности и стоимости базовых вычислительных ресурсов.\",\n \"taichu.description\": \"Модель нового поколения от CASIA и Уханьского института ИИ, поддерживающая многотуровые вопросы и ответы, письмо, генерацию изображений, 3D-понимание и анализ сигналов с улучшенным когнитивным и креативным потенциалом.\",\n \"tencentcloud.description\": \"Ядро знаний LLM Atomic Power предоставляет сквозные решения для вопросов и ответов для предприятий и разработчиков, с модульными сервисами, такими как разбор документов, разбиение, эмбеддинги и многотуровая переформулировка для создания кастомных ИИ-решений.\",\n \"togetherai.description\": \"Together AI обеспечивает передовую производительность с инновационными моделями, широкой кастомизацией, быстрым масштабированием и простым развертыванием для нужд бизнеса.\",\n \"upstage.description\": \"Upstage разрабатывает ИИ-модели для бизнеса, включая Solar LLM и Document AI, с API для общения, вызова функций, перевода, эмбеддингов и отраслевых задач.\",\n \"v0.description\": \"v0 — это помощник по парному программированию, который превращает идеи на естественном языке в код и пользовательский интерфейс для вашего проекта.\",\n \"vercelaigateway.description\": \"Vercel AI Gateway предоставляет единый API для более чем 100 моделей от OpenAI, Anthropic, Google и других, с возможностями бюджетирования, мониторинга, балансировки нагрузки и отказоустойчивости.\",\n \"vertexai.description\": \"Семейство Gemini от Google — это самые передовые универсальные ИИ-модели, разработанные Google DeepMind для мультимодального использования с текстом, кодом, изображениями, аудио и видео. Масштабируются от дата-центров до мобильных устройств, повышая эффективность и гибкость развертывания.\",\n \"vllm.description\": \"vLLM — это быстрая и простая в использовании библиотека для инференса и обслуживания LLM.\",\n \"volcengine.description\": \"Платформа моделей от ByteDance предлагает безопасный, функционально насыщенный и экономически эффективный доступ к моделям, а также инструменты для работы с данными, дообучения, инференса и оценки.\",\n \"volcenginecodingplan.description\": \"План кодирования Volcengine от ByteDance предоставляет доступ к нескольким моделям кодирования, включая Doubao-Seed-Code, GLM-4.7, DeepSeek-V3.2 и Kimi-K2.5, по подписке с фиксированной оплатой.\",\n \"wenxin.description\": \"Универсальная корпоративная платформа для базовых моделей и разработки ИИ-приложений, предлагающая сквозные инструменты для генеративных моделей и рабочих процессов.\",\n \"xai.description\": \"xAI разрабатывает ИИ для ускорения научных открытий, стремясь углубить понимание Вселенной человечеством.\",\n \"xiaomimimo.description\": \"Xiaomi MiMo предоставляет сервис разговорной модели с API, совместимым с OpenAI. Модель mimo-v2-flash поддерживает глубокое рассуждение, потоковую передачу ответов, вызов функций, контекстное окно объёмом 256K и максимальный вывод до 128K.\",\n \"xinference.description\": \"Xorbits Inference (Xinference) — это open-source платформа, упрощающая запуск и интеграцию ИИ-моделей. Позволяет запускать open-source LLM, модели эмбеддингов и мультимодальные модели локально или в облаке для создания мощных ИИ-приложений.\",\n \"zenmux.description\": \"ZenMux — это единая платформа агрегации ИИ, поддерживающая OpenAI, Anthropic, Google VertexAI и другие, с гибкой маршрутизацией для легкого переключения и управления моделями.\",\n \"zeroone.description\": \"01.AI ведет революцию ИИ 2.0, ориентированную на человека, используя LLM для создания экономической и социальной ценности, а также новых экосистем и бизнес-моделей.\",\n \"zhipu.description\": \"ZhiPu AI предоставляет открытую платформу для мультимодальных и языковых моделей, охватывающих обработку текста, понимание изображений и помощь в программировании.\"\n}\n"}}, "locales/tr-TR/providers.json": {"ab601b2ced51e606fcd3554040adcd1129eadaf9": {"t": 1785595979.2545812, "n": 16610, "h": "bcc4672978f685ad", "c": "{\n \"ai21.description\": \"AI21 Labs, üretim ortamlarında üretken yapay zekayı hızlandırarak işletmeler için temel modeller ve yapay zeka sistemleri geliştirir.\",\n \"ai302.description\": \"302.AI, geniş bir yapay zeka API ve çevrimiçi yapay zeka uygulamaları kataloğu sunan, kullandıkça öde modeliyle çalışan bir yapay zeka platformudur.\",\n \"ai360.description\": \"360 AI, 360 tarafından sunulan bir model ve hizmet platformudur. 360GPT2 Pro, 360GPT Pro ve 360GPT Turbo gibi NLP modelleri sunar. Bu modeller, metin üretimi, anlamsal anlama, sohbet ve kodlama gibi görevler için büyük ölçekli parametreler ve çok modlu yetenekleri birleştirir. Esnek fiyatlandırma seçenekleriyle çeşitli ihtiyaçlara hitap eder.\",\n \"aihubmix.description\": \"AiHubMix, birleşik bir API aracılığıyla birden fazla yapay zeka modeline erişim sağlar.\",\n \"akashchat.description\": \"Akash, geleneksel bulut sağlayıcılarına kıyasla rekabetçi fiyatlarla izin gerektirmeyen bir bulut kaynak pazarıdır.\",\n \"antgroup.description\": \"Ant Ling, Ant Group'un Yapay Genel Zeka (AGI) girişiminin temel model serisidir ve ileri düzey temel model yeteneklerini oluşturma ve açma amacına adanmıştır. Zekanın gelişiminin açıklık, paylaşım ve ölçeklenebilirlik yönünde ilerlemesi gerektiğine inanıyoruz—AGI'nin istikrarlı evrimi ve gerçek dünya uygulamasını yönlendirmek için küçük, pratik adımlardan başlayarak.\",\n \"anthropic.description\": \"Anthropic, Claude 3.5 Sonnet, Claude 3 Sonnet, Claude 3 Opus ve Claude 3 Haiku gibi gelişmiş dil modelleri geliştirir. Bu modeller, kurumsal iş yüklerinden hızlı yanıt gerektiren senaryolara kadar zeka, hız ve maliyet dengesini sağlar.\",\n \"azure.description\": \"Azure, GPT-3.5 ve GPT-4 serisi dahil olmak üzere gelişmiş yapay zeka modelleri sunar. Farklı veri türleri ve karmaşık görevler için güvenli, güvenilir ve sürdürülebilir yapay zeka çözümlerine odaklanır.\",\n \"azureai.description\": \"Azure, GPT-3.5 ve GPT-4 serisi dahil olmak üzere gelişmiş yapay zeka modelleri sunar. Farklı veri türleri ve karmaşık görevler için güvenli, güvenilir ve sürdürülebilir yapay zeka çözümlerine odaklanır.\",\n \"baichuan.description\": \"Baichuan AI, Çin bilgisi, uzun bağlam işleme ve yaratıcı üretim konularında güçlü performans sergileyen temel modellere odaklanır. Modelleri (Baichuan 4, Baichuan 3 Turbo, Baichuan 3 Turbo 128k) farklı senaryolar için optimize edilmiştir ve yüksek değer sunar.\",\n \"bailiancodingplan.description\": \"Aliyun Bailian Kodlama Planı, Qwen, GLM, Kimi ve MiniMax'ten kodlama için optimize edilmiş modellere özel bir uç nokta aracılığıyla erişim sağlayan özel bir yapay zeka kodlama hizmetidir.\",\n \"bedrock.description\": \"Amazon Bedrock, işletmelere Anthropic Claude ve Meta Llama 3.1 gibi gelişmiş dil ve görsel modeller sunar. Metin, sohbet ve görsel görevler için hafiften yüksek performansa kadar çeşitli seçenekler içerir.\",\n \"bfl.description\": \"Geleceğin görsel altyapısını inşa eden öncü bir yapay zeka araştırma laboratuvarı.\",\n \"cerebras.description\": \"Cerebras, CS-3 sistemi üzerine inşa edilmiş bir çıkarım platformudur. Kod üretimi ve ajan görevleri gibi gerçek zamanlı iş yükleri için ultra düşük gecikme ve yüksek verimlilik sağlar.\",\n \"cloudflare.description\": \"Cloudflare’ın küresel ağı üzerinde sunucusuz, GPU destekli makine öğrenimi modelleri çalıştırın.\",\n \"cohere.description\": \"Cohere, çok dilli modeller, gelişmiş bilgi alma ve modern işletmeler için güvenli bir platformda yapay zeka çalışma alanları sunar.\",\n \"cometapi.description\": \"CometAPI, OpenAI, Anthropic, Google ve diğerlerinden öncü modellere erişim sağlar. Kullanıcıların farklı kullanım senaryoları için en uygun modeli ve fiyatı seçmesine olanak tanır.\",\n \"comfyui.description\": \"SD, FLUX, Qwen, Hunyuan ve WAN gibi modelleri destekleyen, görsel, video ve ses üretimi için güçlü, açık kaynaklı bir iş akışı motorudur. Düğüm tabanlı düzenleme ve özel kurulum imkanı sunar.\",\n \"deepseek.description\": \"DeepSeek, yapay zeka araştırmaları ve uygulamalarına odaklanır. En yeni DeepSeek V4 serisi; 1M bağlam penceresi ve hibrit düşünme özelliklerine sahip Flash ve Pro varyantlarıyla gelir — akıl yürütme ve ajan benchmark'larında önde gelen kapalı uç modellerle rekabet eder.\",\n \"fal.description\": \"Geliştiriciler için oluşturulmuş üretken medya platformu.\",\n \"fireworksai.description\": \"Fireworks AI, işlev çağrısı ve çok modlu işleme özelliklerine sahip gelişmiş dil modeli hizmetleri sunar. Llama-3 tabanlı Firefunction V2, işlev çağrısı, sohbet ve talimat takibi için optimize edilmiştir. FireLLaVA-13B ise karışık görsel-metin girişlerini destekler. Llama ve Mixtral aileleri de öne çıkan modeller arasındadır.\",\n \"giteeai.description\": \"Gitee AI Serverless API’leri, geliştiriciler için tak-çalıştır LLM çıkarım hizmetleri sunar.\",\n \"github.description\": \"GitHub Modelleri ile geliştiriciler, sektör lideri modelleri kullanarak yapay zeka mühendisi gibi projeler geliştirebilir.\",\n \"githubcopilot.description\": \"GitHub Copilot aboneliğinizle Claude, GPT ve Gemini modellerine erişin.\",\n \"glmcodingplan.description\": \"GLM Kodlama Planı, sabit ücretli bir abonelik aracılığıyla kodlama görevleri için GLM-5 ve GLM-4.7 dahil olmak üzere Zhipu AI modellerine erişim sağlar.\",\n \"google.description\": \"Google’ın Gemini ailesi, metin, kod, görsel, ses ve video gibi çok modlu kullanım için Google DeepMind tarafından geliştirilen en gelişmiş genel amaçlı yapay zekadır. Veri merkezlerinden mobil cihazlara kadar ölçeklenebilir ve yüksek verimlilik sağlar.\",\n \"groq.description\": \"Groq’un LPU çıkarım motoru, olağanüstü hız ve verimlilikle öne çıkan kıyaslama performansı sunar. Düşük gecikmeli, bulut tabanlı LLM çıkarımı için yüksek standart belirler.\",\n \"higress.description\": \"Higress, Alibaba içinde geliştirilen bulut yerel bir API geçididir. Tengine yeniden yükleme etkisini ve gRPC/Dubbo yük dengelemedeki boşlukları gidermek için tasarlanmıştır.\",\n \"huggingface.description\": \"Hugging Face Inference API, binlerce modeli hızlıca keşfetmenin kolay bir yolunu sunar. Prototipleme ve makine öğrenimi denemeleri için yüksek performanslı modellere anında erişim sağlar.\",\n \"hunyuan.description\": \"Tencent tarafından geliştirilen bu büyük dil modeli, güçlü Çince yazım yetenekleri, karmaşık bağlamlarda sağlam akıl yürütme ve güvenilir görev yürütme sunar.\",\n \"infiniai.description\": \"Uygulama geliştiricilerine, model geliştirmeden üretim dağıtımına kadar tüm iş akışında yüksek performanslı, kullanımı kolay ve güvenli LLM hizmetleri sunar.\",\n \"internlm.description\": \"Büyük model araştırmaları ve araçları üzerine odaklanan açık kaynaklı bir organizasyon. En son modelleri ve algoritmaları erişilebilir kılan verimli ve kullanıcı dostu bir platform sağlar.\",\n \"jina.description\": \"2020 yılında kurulan Jina AI, önde gelen bir arama yapay zekası şirketidir. Vektör modelleri, yeniden sıralayıcılar ve küçük dil modelleri içeren arama yığını ile güvenilir ve yüksek kaliteli üretken ve çok modlu arama uygulamaları geliştirir.\",\n \"kimicodingplan.description\": \"Moonshot AI'den Kimi Code, kodlama görevleri için K2.5 dahil olmak üzere Kimi modellerine erişim sağlar.\",\n \"lmstudio.description\": \"LM Studio, bilgisayarınızda büyük dil modelleriyle geliştirme ve denemeler yapmanızı sağlayan bir masaüstü uygulamasıdır.\",\n \"lobehub.description\": \"LobeHub Cloud, resmi API'leri kullanarak yapay zeka modellerine erişir ve kullanımını model jetonlarına bağlı Kredilerle ölçer.\",\n \"longcat.description\": \"LongCat, Meituan tarafından bağımsız olarak geliştirilen bir dizi üretken yapay zeka büyük modelidir. Verimli bir hesaplama mimarisi ve güçlü çok modlu yetenekler aracılığıyla kurumsal iç verimliliği artırmak ve yenilikçi uygulamaları mümkün kılmak için tasarlanmıştır.\",\n \"minimax.description\": \"2021 yılında kurulan MiniMax, çok modlu temel modellerle genel amaçlı yapay zeka geliştirir. Trilyon parametreli MoE metin modelleri, ses ve görsel modellerin yanı sıra Hailuo AI gibi uygulamalar sunar.\",\n \"minimaxcodingplan.description\": \"MiniMax Token Planı, sabit ücretli bir abonelik aracılığıyla kodlama görevleri için M2.7 dahil olmak üzere MiniMax modellerine erişim sağlar.\",\n \"mistral.description\": \"Mistral, karmaşık akıl yürütme, çok dilli görevler ve kod üretimi için gelişmiş genel, özel ve araştırma modelleri sunar. Özelleştirilmiş entegrasyonlar için işlev çağrısını destekler.\",\n \"modelscope.description\": \"ModelScope, Alibaba Cloud’un model-hizmet olarak sunduğu platformudur. Geniş bir yapay zeka modeli ve çıkarım hizmeti yelpazesi sunar.\",\n \"moonshot.description\": \"Moonshot AI (Beijing Moonshot Technology) tarafından geliştirilen Moonshot, içerik üretimi, araştırma, öneri sistemleri ve tıbbi analiz gibi kullanım alanları için güçlü uzun bağlam ve karmaşık üretim desteği sunan çok sayıda NLP modeli sunar.\",\n \"nebius.description\": \"Nebius, büyük ölçekli GPU kümeleri ve dikey entegre bulut platformu ile küresel yapay zeka yenilikçilerine yüksek performanslı altyapı sağlar.\",\n \"newapi.description\": \"Birden fazla yapay zeka hizmetini birleştiren ve yönlendiren açık kaynaklı bir platform.\",\n \"novita.description\": \"Novita AI, LLM’ler ve görsel üretim için esnek, güvenilir ve uygun maliyetli API’ler sunar. Llama 3 ve Mistral gibi modelleri destekler ve üretken yapay zeka girişimleri için ölçeklenebilir, geliştirici dostu API’ler sağlar.\",\n \"nvidia.description\": \"NVIDIA NIM, önceden eğitilmiş ve özel modeller için bulut, veri merkezleri, RTX AI bilgisayarlar ve iş istasyonlarında kendi kendine barındırılan, GPU hızlandırmalı çıkarım mikro hizmetleri sunan konteynerler sağlar.\",\n \"ollama.description\": \"Ollama, kod üretimi, matematik, çok dilli işleme ve sohbet gibi alanlarda modeller sunar. Hem kurumsal hem de yerel dağıtımları destekler.\",\n \"ollamacloud.description\": \"Ollama Cloud, Ollama model kitaplığına ve OpenAI uyumlu API’lere kutudan çıkar çıkmaz erişim sağlayan yönetilen çıkarım hizmeti sunar.\",\n \"openai.description\": \"OpenAI, GPT modelleriyle doğal dil işleme alanında yüksek performans ve güçlü değer sunan, öncü bir yapay zeka araştırma laboratuvarıdır.\",\n \"opencodecodingplan.description\": \"OpenCode Go, GLM, Kimi, MiMo, Qwen ve MiniMax gibi seçili kodlama modellerine güvenilir erişim sağlayan, aylık 10 dolarlık bir abonelik hizmetidir.\",\n \"opencodezen.description\": \"OpenCode Zen; OpenAI, Anthropic, Moonshot, MiniMax, Zhipu, Qwen ve daha birçok sağlayıcıdan derlenen modellere tek bir API anahtarıyla erişim sunar.\",\n \"openrouter.description\": \"OpenRouter, OpenAI, Anthropic, LLaMA ve daha fazlasından öncü modellere erişim sağlar. Kullanıcıların kullanım senaryolarına en uygun modeli ve fiyatı seçmesine olanak tanır.\",\n \"perplexity.description\": \"Perplexity, çevrimiçi ve çevrimdışı kullanım ile karmaşık NLP iş yükleri için Llama 3.1 varyantları dahil olmak üzere gelişmiş sohbet modelleri sunar.\",\n \"ppio.description\": \"PPIO, DeepSeek, Llama, Qwen ve diğer önde gelen modelleri içeren güvenilir ve uygun maliyetli açık model API’leri sunar.\",\n \"qiniu.description\": \"Qiniu, kullanımı kolay, güvenilir ve uygun maliyetli gerçek zamanlı ve toplu yapay zeka çıkarım hizmetleri sunar.\",\n \"qwen.description\": \"Qwen, Alibaba Cloud’un güçlü anlama ve üretim yeteneklerine sahip büyük ölçekli dil modelidir. Soru-cevap, yazım, görüş bildirme ve kodlama gibi birçok alanda çalışır.\",\n \"replicate.description\": \"Replicate, FLUX ve Stable Diffusion gibi açık kaynaklı görsel modelleri basit bir bulut API’si aracılığıyla çalıştırır.\",\n \"sambanova.description\": \"SambaNova Cloud, geliştiricilerin en iyi açık kaynaklı modelleri son derece hızlı çıkarım ile kullanmasına olanak tanır.\",\n \"search1api.description\": \"Search1API, web bağlantısı seçeneğiyle birlikte DeepSeek modellerine erişim sağlar. Farklı parametre boyutlarında standart ve hızlı varyantlar sunar.\",\n \"sensenova.description\": \"SenseNova, SenseTime altyapısıyla desteklenen verimli ve kullanımı kolay tam yığın LLM hizmetleri sunar.\",\n \"siliconcloud.description\": \"SiliconCloud, güçlü açık kaynaklı temel modeller üzerine inşa edilmiş uygun maliyetli bir üretken yapay zeka bulut hizmetidir.\",\n \"spark.description\": \"iFLYTEK Spark, çok dilli güçlü yapay zeka yetenekleriyle akıllı donanım, sağlık, finans ve diğer dikey alanlarda yenilikler sağlar.\",\n \"stepfun.description\": \"Stepfun modelleri, uzun bağlam anlama ve güçlü otonom arama düzenleme özellikleriyle öne çıkan çok modlu ve karmaşık akıl yürütme yetenekleri sunar.\",\n \"straico.description\": \"Straico, pazarlamacılar, girişimciler ve meraklılara çeşitli yapay zeka araçlarına sorunsuz erişim sağlayarak, en iyi metin, görüntü ve ses üretici yapay zeka modellerini bir araya getiren birleşik bir çalışma alanı sunarak yapay zeka entegrasyonunu kolaylaştırır.\",\n \"streamlake.description\": \"StreamLake, yüksek performanslı model çıkarımı, düşük maliyetli model özelleştirme ve tamamen yönetilen hizmetleri bir araya getiren kurumsal düzeyde bir model hizmeti ve yapay zeka hesaplama bulut platformudur. İşletmelerin, altyapı hesaplama kaynaklarının karmaşıklığı ve maliyetiyle uğraşmadan yapay zeka uygulama inovasyonuna odaklanmalarına yardımcı olur.\",\n \"taichu.description\": \"CASIA ve Wuhan Yapay Zeka Enstitüsü tarafından geliştirilen yeni nesil çok modlu modeldir. Çok turlu soru-cevap, yazım, görsel üretim, 3D anlama ve sinyal analizi gibi görevlerde güçlü bilişsel ve yaratıcı yetenekler sunar.\",\n \"tencentcloud.description\": \"LLM Bilgi Motoru Atom Gücü, belgeleri ayrıştırma, parçalara ayırma, gömme ve çok turlu yeniden yazma gibi modüler hizmetlerle kurumsal ve geliştiricilere özel yapay zeka çözümleri oluşturma imkanı sunar.\",\n \"togetherai.description\": \"Together AI, yenilikçi modeller, geniş özelleştirme seçenekleri, hızlı ölçeklenebilirlik ve kolay dağıtım ile kurumsal ihtiyaçlara yönelik üstün performans sunar.\",\n \"upstage.description\": \"Upstage, Solar LLM ve Belge AI gibi iş odaklı yapay zeka modelleri geliştirir. Sohbet API’leri işlev çağrısı, çeviri, gömme ve alanlara özel kullanım senaryolarını destekler.\",\n \"v0.description\": \"v0, doğal dildeki fikirleri projeniz için koda ve kullanıcı arayüzüne dönüştüren bir eş programlama asistanıdır.\",\n \"vercelaigateway.description\": \"Vercel AI Gateway, OpenAI, Anthropic, Google ve daha fazlasından 100’den fazla modele birleşik bir API sunar. Bütçeleme, kullanım izleme, yük dengeleme ve hata toleransı özellikleri içerir.\",\n \"vertexai.description\": \"Google’ın Gemini ailesi, metin, kod, görsel, ses ve video gibi çok modlu kullanım için Google DeepMind tarafından geliştirilen en gelişmiş genel amaçlı yapay zekadır. Veri merkezlerinden mobil cihazlara kadar ölçeklenebilir, verimliliği ve dağıtım esnekliğini artırır.\",\n \"vllm.description\": \"vLLM, LLM çıkarımı ve sunumu için hızlı ve kullanımı kolay bir kütüphanedir.\",\n \"volcengine.description\": \"ByteDance’in model hizmet platformu, güvenli, özellik açısından zengin ve uygun maliyetli model erişimi ile veri, ince ayar, çıkarım ve değerlendirme için uçtan uca araçlar sunar.\",\n \"volcenginecodingplan.description\": \"ByteDance'ten Volcengine Kodlama Planı, sabit ücretli bir abonelik aracılığıyla Doubao-Seed-Code, GLM-4.7, DeepSeek-V3.2 ve Kimi-K2.5 dahil olmak üzere birden fazla kodlama modeline erişim sağlar.\",\n \"wenxin.description\": \"Kurumsal düzeyde temel modeller ve yapay zeka tabanlı uygulama geliştirme için uçtan uca araçlar sunan hepsi bir arada bir platformdur.\",\n \"xai.description\": \"xAI, bilimsel keşifleri hızlandırmak ve insanlığın evreni anlama düzeyini derinleştirmek amacıyla yapay zeka geliştirir.\",\n \"xiaomimimo.description\": \"Xiaomi MiMo, OpenAI ile uyumlu bir API aracılığıyla sohbet tabanlı model hizmeti sunar. mimo-v2-flash modeli derinlemesine akıl yürütme, akışlı çıktı, fonksiyon çağırma, 256K bağlam penceresi ve maksimum 128K çıktı desteği sağlar.\",\n \"xinference.description\": \"Xorbits Inference (Xinference), yapay zeka modellerini çalıştırmayı ve entegre etmeyi kolaylaştıran açık kaynaklı bir platformdur. Açık kaynaklı LLM’leri, gömme modellerini ve çok modlu modelleri yerel veya bulutta çalıştırarak güçlü yapay zeka uygulamaları geliştirmenizi sağlar.\",\n \"zenmux.description\": \"ZenMux, OpenAI, Anthropic, Google VertexAI ve daha fazlasını destekleyen birleşik bir yapay zeka toplama platformudur. Modelleri kolayca yönlendirme ve yönetme imkanı sunar.\",\n \"zeroone.description\": \"01.AI, insan merkezli bir Yapay Zeka 2.0 devrimini yönlendirir. LLM’leri kullanarak ekonomik ve sosyal değer yaratır, yeni yapay zeka ekosistemleri ve iş modelleri inşa eder.\",\n \"zhipu.description\": \"ZhiPu AI, metin işleme, görsel anlama ve kodlama desteği gibi alanlarda çok modlu ve dil modelleri sunan açık bir platform sağlar.\"\n}\n"}}, ".env.example": {"ab601b2ced51e606fcd3554040adcd1129eadaf9": {"t": 1785747091.763697, "n": 482, "h": "046c22d4e12c54a3", "c": "# Credenciais: copie para `.env.local` (tem prioridade sobre `.env`) ou exporte no shell.\n\n# xAI Grok (primário para perguntas normais)\nXAI_API_KEY=xai-your-key-here\nGROK_API_KEY=\nAI_PROVIDER=grok\nGROKAI_MODEL=grok-4.3-latest\n\n# DeepSeek (fallback do Grok + reasoner para perguntas complexas)\nDEEPSEEK_API_KEY=sk-your-key-here\nDEEPSEEK_MODEL_CHAT=deepseek-chat\nDEEPSEEK_MODEL_REASONER=deepseek-reasoner\n\n# OpenAI (opcional, último fallback)\nOPENAI_API_KEY=\nOPENAI_MODEL=gpt-4o-mini\n"}, "2556b7db17f5032ca18689effc72f56c0ec96254": {"t": 1785769801.370846, "n": 482, "h": "046c22d4e12c54a3", "c": "# Credenciais: copie para `.env.local` (tem prioridade sobre `.env`) ou exporte no shell.\n\n# xAI Grok (primário para perguntas normais)\nXAI_API_KEY=xai-your-key-here\nGROK_API_KEY=\nAI_PROVIDER=grok\nGROKAI_MODEL=grok-4.3-latest\n\n# DeepSeek (fallback do Grok + reasoner para perguntas complexas)\nDEEPSEEK_API_KEY=sk-your-key-here\nDEEPSEEK_MODEL_CHAT=deepseek-chat\nDEEPSEEK_MODEL_REASONER=deepseek-reasoner\n\n# OpenAI (opcional, último fallback)\nOPENAI_API_KEY=\nOPENAI_MODEL=gpt-4o-mini\n"}, "866af8d2f0b12e9f56b1fc7236434ee7b3b236d2": {"t": 1785769803.285323, "n": 16221, "h": "ef42da856bb16d3c", "c": "# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n# #######################################\n# ########## Security Settings ###########\n# #######################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n# SSRF Protection Settings\n# Set to '1' to allow connections to private IP addresses (disable SSRF protection)\n# WARNING: Only enable this in trusted environments\n# Default is '0' (SSRF protection enabled)\n# SSRF_ALLOW_PRIVATE_IP_ADDRESS=0\n\n# Whitelist of allowed private IP addresses (comma-separated)\n# Only takes effect when SSRF_ALLOW_PRIVATE_IP_ADDRESS is '0'\n# Example: Allow specific internal servers while keeping SSRF protection\n# SSRF_ALLOW_IP_ADDRESS_LIST=192.168.1.100,10.0.0.50\n\n# #######################################\n# ########### Redis Settings ############\n# #######################################\n\n# Connection string for self-hosted Redis (Docker/K8s/managed). Use container hostname when running via docker-compose.\n# REDIS_URL=redis://localhost:6379\n\n# Optional database index.\n# REDIS_DATABASE=0\n\n# Optional authentication for managed Redis.\n# REDIS_USERNAME=default\n# REDIS_PASSWORD=yourpassword\n\n# Set to '1' to enforce TLS when connecting to managed Redis or rediss:// endpoints.\n# REDIS_TLS=0\n\n# Namespace prefix for cache/queue keys.\n# REDIS_PREFIX=lobechat\n\n# #######################################\n# ######### AI Provider Service #########\n# #######################################\n\n# ## OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=gpt-3.5-turbo\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# ## 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# Anthropic SDK client timeout in milliseconds\n# ANTHROPIC_CLIENT_TIMEOUT=295000\n\n# ## Google AI ####\n\n# GOOGLE_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\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# ## 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# ## OpenRouter Service ###\n\n# OPENROUTER_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# OPENROUTER_MODEL_LIST=model1,model2,model3\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# ## Kimi Code Plan ####\n\n# KIMICODINGPLAN_PROXY_URL=https://api.kimi.com/coding\n# KIMICODINGPLAN_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# ## 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# ## 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# ## BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## FAL ###\n\n# FAL_API_KEY=fal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ######## AI Image Settings ############\n# #######################################\n\n# Default image generation count (range: 1-20, default: 4)\n# AI_IMAGE_DEFAULT_IMAGE_NUM=4\n\n# ## Nebius ###\n\n# NEBIUS_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## NewAPI Service ###\n\n# NEWAPI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# NEWAPI_PROXY_URL=https://your-newapi-server.com\n\n# ## Vercel AI Gateway ###\n\n# VERCELAIGATEWAY_API_KEY=your_vercel_ai_gateway_api_key\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# ######### Cloud Sandbox Service #######\n# #######################################\n\n# Sandbox provider for built-in code execution, shell, file operations, and export.\n# Supported values: market, onlyboxes\n# SANDBOX_PROVIDER=market\n\n# Required when SANDBOX_PROVIDER=onlyboxes. Base URL of the Onlyboxes console API, without /api/v1.\n# ONLYBOXES_BASE_URL=https://onlyboxes.example.com\n\n# Required when SANDBOX_PROVIDER=onlyboxes. Must match Onlyboxes CONSOLE_JIT_SIGNING_KEY.\n# ONLYBOXES_JIT_SIGNING_KEY=onlyboxes-jit-signing-secret\n\n# Optional JIT token issuer. Defaults to APP_URL.\n# ONLYBOXES_JIT_ISSUER=https://lobehub.example.com\n\n# Optional JIT token TTL in seconds.\n# ONLYBOXES_JIT_TTL_SEC=1800\n\n# Optional terminal session lease in seconds for the Onlyboxes provider.\n# ONLYBOXES_LEASE_TTL_SEC=900\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# ### Mobile SPA S3 Workflow ############\n# #######################################\n\n# Used by `bun run workflow:mobile-spa` to build mobile SPA, upload assets to S3, and generate template\n# MOBILE_S3_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_BUCKET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_ENDPOINT=https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_REGION=auto\n# MOBILE_S3_PUBLIC_DOMAIN=https://cdn.example.com\n# MOBILE_S3_KEY_PREFIX=mobile/latest # optional, S3 key path prefix\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# 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# ########### Auth Service ##############\n# #######################################\n\n# Auth Secret (use `openssl rand -base64 32` to generate)\n# AUTH_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# Require email verification before allowing users to sign in (default: false)\n# Set to '1' to force users to verify their email before signing in\n# AUTH_EMAIL_VERIFICATION=0\n\n# SSO Providers Configuration (for Better-Auth)\n# Comma-separated list of enabled OAuth providers\n# Supported providers: auth0, authelia, authentik, casdoor, cloudflare-zero-trust, cognito, generic-oidc, github, google, keycloak, logto, microsoft, microsoft-entra-id, okta, zitadel\n# Example: AUTH_SSO_PROVIDERS=google,github,auth0,microsoft-entra-id\n# AUTH_SSO_PROVIDERS=\n\n# Email whitelist for registration (comma-separated)\n# Supports full email (user@example.com) or domain (example.com)\n# Leave empty to allow all emails\n# AUTH_ALLOWED_EMAILS=example.com,admin@other.com\n\n# Disable email/password authentication (SSO-only mode)\n# Set to '1' to disable email/password sign-in and registration, only allowing SSO login\n# AUTH_DISABLE_EMAIL_PASSWORD=0\n\n# Google OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.cloud.google.com/apis/credentials\n# Authorized redirect URIs:\n# - Development: http://localhost:3210/api/auth/callback/google\n# - Production: https://yourdomain.com/api/auth/callback/google\n# GOOGLE_CLIENT_ID=xxxxx.apps.googleusercontent.com\n# GOOGLE_CLIENT_SECRET=GOCSPX-xxxxxxxxxxxxxxxxxxxx\n\n# GitHub OAuth Configuration (for Better-Auth)\n# Get credentials from: https://github.com/settings/developers\n# Create a new OAuth App with:\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/github\n# - Production: https://yourdomain.com/api/auth/callback/github\n# GITHUB_CLIENT_ID=Ov23xxxxxxxxxxxxx\n# GITHUB_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# AWS Cognito OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.aws.amazon.com/cognito\n# Setup steps:\n# 1. Create a User Pool with App Client\n# 2. Configure Hosted UI domain\n# 3. Enable \"Authorization code grant\" OAuth flow\n# 4. Set OAuth scopes: openid, profile, email\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/cognito\n# - Production: https://yourdomain.com/api/auth/callback/cognito\n# COGNITO_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxx\n# COGNITO_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# COGNITO_DOMAIN=your-app.auth.us-east-1.amazoncognito.com\n# COGNITO_REGION=us-east-1\n# COGNITO_USERPOOL_ID=us-east-1_xxxxxxxxx\n\n# Microsoft OAuth Configuration (for Better-Auth)\n# Get credentials from: https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade\n# Create a new App Registration in Microsoft Entra ID (Azure AD)\n# Authorized redirect URL:\n# - Development: http://localhost:3210/api/auth/callback/microsoft\n# - Production: https://yourdomain.com/api/auth/callback/microsoft\n# MICROSOFT_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n# MICROSOFT_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ########## Email Service ##############\n# #######################################\n\n# SMTP Server Configuration (required for email verification with Better-Auth)\n\n# SMTP server hostname (e.g., smtp.gmail.com, smtp.office365.com)\n# SMTP_HOST=smtp.example.com\n\n# SMTP server port (usually 587 for TLS, or 465 for SSL)\n# SMTP_PORT=587\n\n# Use secure connection (set to 'true' for port 465, 'false' for port 587)\n# SMTP_SECURE=false\n\n# SMTP authentication username (usually your email address)\n# SMTP_USER=your-email@example.com\n\n# SMTP authentication password (use app-specific password for Gmail)\n# SMTP_PASS=your-password-or-app-specific-password\n\n# Sender email address (optional, defaults to SMTP_USER)\n# Required for AWS SES where SMTP_USER is not a valid email address\n# SMTP_FROM=noreply@example.com\n\n# #######################################\n# ######### Server Database #############\n# #######################################\n\n# Postgres database URL\n# DATABASE_URL=postgres://username:password@host:port/database\n\n# Optional: server-side timeout (in milliseconds) for a single SQL statement.\n# When set, Postgres aborts any statement/idle transaction exceeding it, so a stuck\n# query can't block indefinitely. Leave unset to keep Postgres' default of no timeout.\n# DATABASE_STATEMENT_TIMEOUT=300000\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# Embedding batch size for processing (default: 50)\n# EMBEDDING_BATCH_SIZE=50\n\n# Embedding concurrency for parallel processing (default: 10)\n# EMBEDDING_CONCURRENCY=10\n\n# #######################################\n# ######### MCP Service Config ##########\n# #######################################\n\n# MCP tool call timeout (milliseconds)\n# MCP_TOOL_TIMEOUT=60000\n\n# #######################################\n# ######### Composio Service ############\n# #######################################\n\n# Composio API Key for accessing hosted integrations (Gmail, Slack, etc.)\n# Get your API key from: https://composio.dev\n# IMPORTANT: This key is stored server-side only and NEVER exposed to the client\n# When this key is set, Composio integration will be automatically enabled\n# COMPOSIO_API_KEY=your_composio_api_key_here\n\n# #######################################\n# #### Message Gateway (IM Integration) ##\n# #######################################\n\n# External message-gateway for unified IM platform connection management.\n# Set ENABLED=1 to activate. To migrate away, remove ENABLED first (keep URL/TOKEN)\n# so LobeHub can automatically disconnect leftover gateway connections.\n# MESSAGE_GATEWAY_ENABLED=1\n# MESSAGE_GATEWAY_URL=https://message-gateway.lobehub.com\n# MESSAGE_GATEWAY_SERVICE_TOKEN=your_service_token_here\n\n# #######################################\n# ######### Agent Gateway Mode ##########\n# #######################################\n\n# Enable Gateway Mode for self-hosted deployments. Requires AGENT_GATEWAY_URL.\n# ENABLE_AGENT_GATEWAY=1\n# AGENT_GATEWAY_URL=https://agent-gateway.example.com\n# AGENT_GATEWAY_SERVICE_TOKEN=your_service_token_here\n\n# #######################################\n# ########### Messenger Bot #############\n# #######################################\n\n# LobeHub-operated bots that users link their account to once and then chat\n# with any of their agents from. Credentials (Telegram / Slack / Discord) are\n# now managed in dc-center → Agent → System Bots and stored in the\n# `system_bot_providers` table. See docs/development/messenger/managed-by-dc-center.md.\n#\n# Webhook URLs are registered against APP_URL:\n# Telegram: <APP_URL>/api/agent/messenger/webhooks/telegram\n# Slack: <APP_URL>/api/agent/messenger/webhooks/slack\n# Discord: <APP_URL>/api/agent/messenger/webhooks/discord\n#\n# For local dev with bot platforms, point APP_URL at your tunnel\n# (ngrok / cloudflared) so platforms can reach your machine.\n\n# Verify-im link token TTL in seconds (default 1800 = 30 min)\n# LOBE_LINK_TOKEN_TTL_SECONDS=1800\n"}, "bc9a7cfab8594293f591b4a8a0281e0aeacb8e26": {"t": 1785769804.5893013, "n": 16195, "h": "7a129d34196eb108", "c": "# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n# #######################################\n# ########## Security Settings ###########\n# #######################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n# SSRF Protection Settings\n# Set to '1' to allow connections to private IP addresses (disable SSRF protection)\n# WARNING: Only enable this in trusted environments\n# Default is '0' (SSRF protection enabled)\n# SSRF_ALLOW_PRIVATE_IP_ADDRESS=0\n\n# Whitelist of allowed private IP addresses (comma-separated)\n# Only takes effect when SSRF_ALLOW_PRIVATE_IP_ADDRESS is '0'\n# Example: Allow specific internal servers while keeping SSRF protection\n# SSRF_ALLOW_IP_ADDRESS_LIST=192.168.1.100,10.0.0.50\n\n# #######################################\n# ########### Redis Settings ############\n# #######################################\n\n# Connection string for self-hosted Redis (Docker/K8s/managed). Use container hostname when running via docker-compose.\n# REDIS_URL=redis://localhost:6379\n\n# Optional database index.\n# REDIS_DATABASE=0\n\n# Optional authentication for managed Redis.\n# REDIS_USERNAME=default\n# REDIS_PASSWORD=yourpassword\n\n# Set to '1' to enforce TLS when connecting to managed Redis or rediss:// endpoints.\n# REDIS_TLS=0\n\n# Namespace prefix for cache/queue keys.\n# REDIS_PREFIX=lobechat\n\n# #######################################\n# ######### AI Provider Service #########\n# #######################################\n\n# ## OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=gpt-3.5-turbo\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# ## 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# Anthropic SDK client timeout in milliseconds\n# ANTHROPIC_CLIENT_TIMEOUT=295000\n\n# ## Google AI ####\n\n# GOOGLE_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\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# ## 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# ## OpenRouter Service ###\n\n# OPENROUTER_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# OPENROUTER_MODEL_LIST=model1,model2,model3\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# ## Kimi Code Plan ####\n\n# KIMICODINGPLAN_PROXY_URL=https://api.kimi.com/coding\n# KIMICODINGPLAN_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# ## 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# ## 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# ## BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## FAL ###\n\n# FAL_API_KEY=fal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ######## AI Image Settings ############\n# #######################################\n\n# Default image generation count (range: 1-20, default: 4)\n# AI_IMAGE_DEFAULT_IMAGE_NUM=4\n\n# ## Nebius ###\n\n# NEBIUS_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## NewAPI Service ###\n\n# NEWAPI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# NEWAPI_PROXY_URL=https://your-newapi-server.com\n\n# ## Vercel AI Gateway ###\n\n# VERCELAIGATEWAY_API_KEY=your_vercel_ai_gateway_api_key\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# ######### Cloud Sandbox Service #######\n# #######################################\n\n# Sandbox provider for built-in code execution, shell, file operations, and export.\n# Supported values: market, onlyboxes\n# SANDBOX_PROVIDER=market\n\n# Required when SANDBOX_PROVIDER=onlyboxes. Base URL of the Onlyboxes console API, without /api/v1.\n# ONLYBOXES_BASE_URL=https://onlyboxes.example.com\n\n# Required when SANDBOX_PROVIDER=onlyboxes. Must match Onlyboxes CONSOLE_JIT_SIGNING_KEY.\n# ONLYBOXES_JIT_SIGNING_KEY=onlyboxes-jit-signing-secret\n\n# Optional JIT token issuer. Defaults to APP_URL.\n# ONLYBOXES_JIT_ISSUER=https://lobehub.example.com\n\n# Optional JIT token TTL in seconds.\n# ONLYBOXES_JIT_TTL_SEC=1800\n\n# Optional terminal session lease in seconds for the Onlyboxes provider.\n# ONLYBOXES_LEASE_TTL_SEC=900\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# ### Mobile SPA S3 Workflow ############\n# #######################################\n\n# Used by `bun run workflow:mobile-spa` to build mobile SPA, upload assets to S3, and generate template\n# MOBILE_S3_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_BUCKET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_ENDPOINT=https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_REGION=auto\n# MOBILE_S3_PUBLIC_DOMAIN=https://cdn.example.com\n# MOBILE_S3_KEY_PREFIX=mobile/latest # optional, S3 key path prefix\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# 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# ########### Auth Service ##############\n# #######################################\n\n# Auth Secret (use `openssl rand -base64 32` to generate)\n# AUTH_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# Require email verification before allowing users to sign in (default: false)\n# Set to '1' to force users to verify their email before signing in\n# AUTH_EMAIL_VERIFICATION=0\n\n# SSO Providers Configuration (for Better-Auth)\n# Comma-separated list of enabled OAuth providers\n# Supported providers: auth0, authelia, authentik, casdoor, cloudflare-zero-trust, cognito, generic-oidc, github, google, keycloak, logto, microsoft, microsoft-entra-id, okta, zitadel\n# Example: AUTH_SSO_PROVIDERS=google,github,auth0,microsoft-entra-id\n# AUTH_SSO_PROVIDERS=\n\n# Email whitelist for registration (comma-separated)\n# Supports full email (user@example.com) or domain (example.com)\n# Leave empty to allow all emails\n# AUTH_ALLOWED_EMAILS=example.com,admin@other.com\n\n# Disable email/password authentication (SSO-only mode)\n# Set to '1' to disable email/password sign-in and registration, only allowing SSO login\n# AUTH_DISABLE_EMAIL_PASSWORD=0\n\n# Google OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.cloud.google.com/apis/credentials\n# Authorized redirect URIs:\n# - Development: http://localhost:3210/api/auth/callback/google\n# - Production: https://yourdomain.com/api/auth/callback/google\n# GOOGLE_CLIENT_ID=xxxxx.apps.googleusercontent.com\n# GOOGLE_CLIENT_SECRET=GOCSPX-xxxxxxxxxxxxxxxxxxxx\n\n# GitHub OAuth Configuration (for Better-Auth)\n# Get credentials from: https://github.com/settings/developers\n# Create a new OAuth App with:\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/github\n# - Production: https://yourdomain.com/api/auth/callback/github\n# GITHUB_CLIENT_ID=Ov23xxxxxxxxxxxxx\n# GITHUB_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# AWS Cognito OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.aws.amazon.com/cognito\n# Setup steps:\n# 1. Create a User Pool with App Client\n# 2. Configure Hosted UI domain\n# 3. Enable \"Authorization code grant\" OAuth flow\n# 4. Set OAuth scopes: openid, profile, email\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/cognito\n# - Production: https://yourdomain.com/api/auth/callback/cognito\n# COGNITO_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxx\n# COGNITO_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# COGNITO_DOMAIN=your-app.auth.us-east-1.amazoncognito.com\n# COGNITO_REGION=us-east-1\n# COGNITO_USERPOOL_ID=us-east-1_xxxxxxxxx\n\n# Microsoft OAuth Configuration (for Better-Auth)\n# Get credentials from: https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade\n# Create a new App Registration in Microsoft Entra ID (Azure AD)\n# Authorized redirect URL:\n# - Development: http://localhost:3210/api/auth/callback/microsoft\n# - Production: https://yourdomain.com/api/auth/callback/microsoft\n# MICROSOFT_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n# MICROSOFT_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ########## Email Service ##############\n# #######################################\n\n# SMTP Server Configuration (required for email verification with Better-Auth)\n\n# SMTP server hostname (e.g., smtp.gmail.com, smtp.office365.com)\n# SMTP_HOST=smtp.example.com\n\n# SMTP server port (usually 587 for TLS, or 465 for SSL)\n# SMTP_PORT=587\n\n# Use secure connection (set to 'true' for port 465, 'false' for port 587)\n# SMTP_SECURE=false\n\n# SMTP authentication username (usually your email address)\n# SMTP_USER=your-email@example.com\n\n# SMTP authentication password (use app-specific password for Gmail)\n# SMTP_PASS=your-password-or-app-specific-password\n\n# Sender email address (optional, defaults to SMTP_USER)\n# Required for AWS SES where SMTP_USER is not a valid email address\n# SMTP_FROM=noreply@example.com\n\n# #######################################\n# ######### Server Database #############\n# #######################################\n\n# Postgres database URL\n# DATABASE_URL=postgres://username:password@host:port/database\n\n# Optional: server-side timeout (in milliseconds) for a single SQL statement.\n# When set, Postgres aborts any statement/idle transaction exceeding it, so a stuck\n# query can't block indefinitely. Leave unset to keep Postgres' default of no timeout.\n# DATABASE_STATEMENT_TIMEOUT=300000\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# Embedding batch size for processing (default: 50)\n# EMBEDDING_BATCH_SIZE=50\n\n# Embedding concurrency for parallel processing (default: 10)\n# EMBEDDING_CONCURRENCY=10\n\n# #######################################\n# ######### MCP Service Config ##########\n# #######################################\n\n# MCP tool call timeout (milliseconds)\n# MCP_TOOL_TIMEOUT=60000\n\n# #######################################\n# ######### Klavis Service ##############\n# #######################################\n\n# Klavis API Key for accessing Strata hosted MCP servers\n# Get your API key from: https://klavis.io\n# IMPORTANT: This key is stored server-side only and NEVER exposed to the client\n# When this key is set, Klavis integration will be automatically enabled\n# KLAVIS_API_KEY=your_klavis_api_key_here\n\n# #######################################\n# #### Message Gateway (IM Integration) ##\n# #######################################\n\n# External message-gateway for unified IM platform connection management.\n# Set ENABLED=1 to activate. To migrate away, remove ENABLED first (keep URL/TOKEN)\n# so LobeHub can automatically disconnect leftover gateway connections.\n# MESSAGE_GATEWAY_ENABLED=1\n# MESSAGE_GATEWAY_URL=https://message-gateway.lobehub.com\n# MESSAGE_GATEWAY_SERVICE_TOKEN=your_service_token_here\n\n# #######################################\n# ######### Agent Gateway Mode ##########\n# #######################################\n\n# Enable Gateway Mode for self-hosted deployments. Requires AGENT_GATEWAY_URL.\n# ENABLE_AGENT_GATEWAY=1\n# AGENT_GATEWAY_URL=https://agent-gateway.example.com\n# AGENT_GATEWAY_SERVICE_TOKEN=your_service_token_here\n\n# #######################################\n# ########### Messenger Bot #############\n# #######################################\n\n# LobeHub-operated bots that users link their account to once and then chat\n# with any of their agents from. Credentials (Telegram / Slack / Discord) are\n# now managed in dc-center → Agent → System Bots and stored in the\n# `system_bot_providers` table. See docs/development/messenger/managed-by-dc-center.md.\n#\n# Webhook URLs are registered against APP_URL:\n# Telegram: <APP_URL>/api/agent/messenger/webhooks/telegram\n# Slack: <APP_URL>/api/agent/messenger/webhooks/slack\n# Discord: <APP_URL>/api/agent/messenger/webhooks/discord\n#\n# For local dev with bot platforms, point APP_URL at your tunnel\n# (ngrok / cloudflared) so platforms can reach your machine.\n\n# Verify-im link token TTL in seconds (default 1800 = 30 min)\n# LOBE_LINK_TOKEN_TTL_SECONDS=1800\n"}, "a28fd3071969ab299c34f62989d9087239d06bc2": {"t": 1785769806.3979557, "n": 15855, "h": "342f0eb34aaeadf9", "c": "# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n# #######################################\n# ########## Security Settings ###########\n# #######################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n# SSRF Protection Settings\n# Set to '1' to allow connections to private IP addresses (disable SSRF protection)\n# WARNING: Only enable this in trusted environments\n# Default is '0' (SSRF protection enabled)\n# SSRF_ALLOW_PRIVATE_IP_ADDRESS=0\n\n# Whitelist of allowed private IP addresses (comma-separated)\n# Only takes effect when SSRF_ALLOW_PRIVATE_IP_ADDRESS is '0'\n# Example: Allow specific internal servers while keeping SSRF protection\n# SSRF_ALLOW_IP_ADDRESS_LIST=192.168.1.100,10.0.0.50\n\n# #######################################\n# ########### Redis Settings ############\n# #######################################\n\n# Connection string for self-hosted Redis (Docker/K8s/managed). Use container hostname when running via docker-compose.\n# REDIS_URL=redis://localhost:6379\n\n# Optional database index.\n# REDIS_DATABASE=0\n\n# Optional authentication for managed Redis.\n# REDIS_USERNAME=default\n# REDIS_PASSWORD=yourpassword\n\n# Set to '1' to enforce TLS when connecting to managed Redis or rediss:// endpoints.\n# REDIS_TLS=0\n\n# Namespace prefix for cache/queue keys.\n# REDIS_PREFIX=lobechat\n\n# #######################################\n# ######### AI Provider Service #########\n# #######################################\n\n# ## OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=gpt-3.5-turbo\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# ## 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# Anthropic SDK client timeout in milliseconds\n# ANTHROPIC_CLIENT_TIMEOUT=295000\n\n# ## Google AI ####\n\n# GOOGLE_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\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# ## 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# ## OpenRouter Service ###\n\n# OPENROUTER_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# OPENROUTER_MODEL_LIST=model1,model2,model3\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# ## Kimi Code Plan ####\n\n# KIMICODINGPLAN_PROXY_URL=https://api.kimi.com/coding\n# KIMICODINGPLAN_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# ## 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# ## 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# ## BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## FAL ###\n\n# FAL_API_KEY=fal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ######## AI Image Settings ############\n# #######################################\n\n# Default image generation count (range: 1-20, default: 4)\n# AI_IMAGE_DEFAULT_IMAGE_NUM=4\n\n# ## Nebius ###\n\n# NEBIUS_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## NewAPI Service ###\n\n# NEWAPI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# NEWAPI_PROXY_URL=https://your-newapi-server.com\n\n# ## Vercel AI Gateway ###\n\n# VERCELAIGATEWAY_API_KEY=your_vercel_ai_gateway_api_key\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# ######### Cloud Sandbox Service #######\n# #######################################\n\n# Sandbox provider for built-in code execution, shell, file operations, and export.\n# Supported values: market, onlyboxes\n# SANDBOX_PROVIDER=market\n\n# Required when SANDBOX_PROVIDER=onlyboxes. Base URL of the Onlyboxes console API, without /api/v1.\n# ONLYBOXES_BASE_URL=https://onlyboxes.example.com\n\n# Required when SANDBOX_PROVIDER=onlyboxes. Must match Onlyboxes CONSOLE_JIT_SIGNING_KEY.\n# ONLYBOXES_JIT_SIGNING_KEY=onlyboxes-jit-signing-secret\n\n# Optional JIT token issuer. Defaults to APP_URL.\n# ONLYBOXES_JIT_ISSUER=https://lobehub.example.com\n\n# Optional JIT token TTL in seconds.\n# ONLYBOXES_JIT_TTL_SEC=1800\n\n# Optional terminal session lease in seconds for the Onlyboxes provider.\n# ONLYBOXES_LEASE_TTL_SEC=900\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# ### Mobile SPA S3 Workflow ############\n# #######################################\n\n# Used by `bun run workflow:mobile-spa` to build mobile SPA, upload assets to S3, and generate template\n# MOBILE_S3_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_BUCKET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_ENDPOINT=https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_REGION=auto\n# MOBILE_S3_PUBLIC_DOMAIN=https://cdn.example.com\n# MOBILE_S3_KEY_PREFIX=mobile/latest # optional, S3 key path prefix\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# 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# ########### Auth Service ##############\n# #######################################\n\n# Auth Secret (use `openssl rand -base64 32` to generate)\n# AUTH_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# Require email verification before allowing users to sign in (default: false)\n# Set to '1' to force users to verify their email before signing in\n# AUTH_EMAIL_VERIFICATION=0\n\n# SSO Providers Configuration (for Better-Auth)\n# Comma-separated list of enabled OAuth providers\n# Supported providers: auth0, authelia, authentik, casdoor, cloudflare-zero-trust, cognito, generic-oidc, github, google, keycloak, logto, microsoft, microsoft-entra-id, okta, zitadel\n# Example: AUTH_SSO_PROVIDERS=google,github,auth0,microsoft-entra-id\n# AUTH_SSO_PROVIDERS=\n\n# Email whitelist for registration (comma-separated)\n# Supports full email (user@example.com) or domain (example.com)\n# Leave empty to allow all emails\n# AUTH_ALLOWED_EMAILS=example.com,admin@other.com\n\n# Disable email/password authentication (SSO-only mode)\n# Set to '1' to disable email/password sign-in and registration, only allowing SSO login\n# AUTH_DISABLE_EMAIL_PASSWORD=0\n\n# Google OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.cloud.google.com/apis/credentials\n# Authorized redirect URIs:\n# - Development: http://localhost:3210/api/auth/callback/google\n# - Production: https://yourdomain.com/api/auth/callback/google\n# GOOGLE_CLIENT_ID=xxxxx.apps.googleusercontent.com\n# GOOGLE_CLIENT_SECRET=GOCSPX-xxxxxxxxxxxxxxxxxxxx\n\n# GitHub OAuth Configuration (for Better-Auth)\n# Get credentials from: https://github.com/settings/developers\n# Create a new OAuth App with:\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/github\n# - Production: https://yourdomain.com/api/auth/callback/github\n# GITHUB_CLIENT_ID=Ov23xxxxxxxxxxxxx\n# GITHUB_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# AWS Cognito OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.aws.amazon.com/cognito\n# Setup steps:\n# 1. Create a User Pool with App Client\n# 2. Configure Hosted UI domain\n# 3. Enable \"Authorization code grant\" OAuth flow\n# 4. Set OAuth scopes: openid, profile, email\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/cognito\n# - Production: https://yourdomain.com/api/auth/callback/cognito\n# COGNITO_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxx\n# COGNITO_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# COGNITO_DOMAIN=your-app.auth.us-east-1.amazoncognito.com\n# COGNITO_REGION=us-east-1\n# COGNITO_USERPOOL_ID=us-east-1_xxxxxxxxx\n\n# Microsoft OAuth Configuration (for Better-Auth)\n# Get credentials from: https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade\n# Create a new App Registration in Microsoft Entra ID (Azure AD)\n# Authorized redirect URL:\n# - Development: http://localhost:3210/api/auth/callback/microsoft\n# - Production: https://yourdomain.com/api/auth/callback/microsoft\n# MICROSOFT_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n# MICROSOFT_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ########## Email Service ##############\n# #######################################\n\n# SMTP Server Configuration (required for email verification with Better-Auth)\n\n# SMTP server hostname (e.g., smtp.gmail.com, smtp.office365.com)\n# SMTP_HOST=smtp.example.com\n\n# SMTP server port (usually 587 for TLS, or 465 for SSL)\n# SMTP_PORT=587\n\n# Use secure connection (set to 'true' for port 465, 'false' for port 587)\n# SMTP_SECURE=false\n\n# SMTP authentication username (usually your email address)\n# SMTP_USER=your-email@example.com\n\n# SMTP authentication password (use app-specific password for Gmail)\n# SMTP_PASS=your-password-or-app-specific-password\n\n# Sender email address (optional, defaults to SMTP_USER)\n# Required for AWS SES where SMTP_USER is not a valid email address\n# SMTP_FROM=noreply@example.com\n\n# #######################################\n# ######### Server Database #############\n# #######################################\n\n# Postgres database URL\n# DATABASE_URL=postgres://username:password@host:port/database\n\n# Optional: server-side timeout (in milliseconds) for a single SQL statement.\n# When set, Postgres aborts any statement/idle transaction exceeding it, so a stuck\n# query can't block indefinitely. Leave unset to keep Postgres' default of no timeout.\n# DATABASE_STATEMENT_TIMEOUT=300000\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# Embedding batch size for processing (default: 50)\n# EMBEDDING_BATCH_SIZE=50\n\n# Embedding concurrency for parallel processing (default: 10)\n# EMBEDDING_CONCURRENCY=10\n\n# #######################################\n# ######### MCP Service Config ##########\n# #######################################\n\n# MCP tool call timeout (milliseconds)\n# MCP_TOOL_TIMEOUT=60000\n\n# #######################################\n# ######### Klavis Service ##############\n# #######################################\n\n# Klavis API Key for accessing Strata hosted MCP servers\n# Get your API key from: https://klavis.io\n# IMPORTANT: This key is stored server-side only and NEVER exposed to the client\n# When this key is set, Klavis integration will be automatically enabled\n# KLAVIS_API_KEY=your_klavis_api_key_here\n\n# #######################################\n# #### Message Gateway (IM Integration) ##\n# #######################################\n\n# External message-gateway for unified IM platform connection management.\n# Set ENABLED=1 to activate. To migrate away, remove ENABLED first (keep URL/TOKEN)\n# so LobeHub can automatically disconnect leftover gateway connections.\n# MESSAGE_GATEWAY_ENABLED=1\n# MESSAGE_GATEWAY_URL=https://message-gateway.lobehub.com\n# MESSAGE_GATEWAY_SERVICE_TOKEN=your_service_token_here\n\n# #######################################\n# ########### Messenger Bot #############\n# #######################################\n\n# LobeHub-operated bots that users link their account to once and then chat\n# with any of their agents from. Credentials (Telegram / Slack / Discord) are\n# now managed in dc-center → Agent → System Bots and stored in the\n# `system_bot_providers` table. See docs/development/messenger/managed-by-dc-center.md.\n#\n# Webhook URLs are registered against APP_URL:\n# Telegram: <APP_URL>/api/agent/messenger/webhooks/telegram\n# Slack: <APP_URL>/api/agent/messenger/webhooks/slack\n# Discord: <APP_URL>/api/agent/messenger/webhooks/discord\n#\n# For local dev with bot platforms, point APP_URL at your tunnel\n# (ngrok / cloudflared) so platforms can reach your machine.\n\n# Verify-im link token TTL in seconds (default 1800 = 30 min)\n# LOBE_LINK_TOKEN_TTL_SECONDS=1800\n"}, "951561f6851381be1b3a934baeb95b675e309263": {"t": 1785769807.942205, "n": 15006, "h": "f6fb597c503a3273", "c": "# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n# #######################################\n# ########## Security Settings ###########\n# #######################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n# SSRF Protection Settings\n# Set to '1' to allow connections to private IP addresses (disable SSRF protection)\n# WARNING: Only enable this in trusted environments\n# Default is '0' (SSRF protection enabled)\n# SSRF_ALLOW_PRIVATE_IP_ADDRESS=0\n\n# Whitelist of allowed private IP addresses (comma-separated)\n# Only takes effect when SSRF_ALLOW_PRIVATE_IP_ADDRESS is '0'\n# Example: Allow specific internal servers while keeping SSRF protection\n# SSRF_ALLOW_IP_ADDRESS_LIST=192.168.1.100,10.0.0.50\n\n# #######################################\n# ########### Redis Settings ############\n# #######################################\n\n# Connection string for self-hosted Redis (Docker/K8s/managed). Use container hostname when running via docker-compose.\n# REDIS_URL=redis://localhost:6379\n\n# Optional database index.\n# REDIS_DATABASE=0\n\n# Optional authentication for managed Redis.\n# REDIS_USERNAME=default\n# REDIS_PASSWORD=yourpassword\n\n# Set to '1' to enforce TLS when connecting to managed Redis or rediss:// endpoints.\n# REDIS_TLS=0\n\n# Namespace prefix for cache/queue keys.\n# REDIS_PREFIX=lobechat\n\n# #######################################\n# ######### AI Provider Service #########\n# #######################################\n\n# ## OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=gpt-3.5-turbo\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# ## 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# Anthropic SDK client timeout in milliseconds\n# ANTHROPIC_CLIENT_TIMEOUT=295000\n\n# ## Google AI ####\n\n# GOOGLE_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\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# ## 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# ## OpenRouter Service ###\n\n# OPENROUTER_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# OPENROUTER_MODEL_LIST=model1,model2,model3\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# ## Kimi Code Plan ####\n\n# KIMICODINGPLAN_PROXY_URL=https://api.kimi.com/coding\n# KIMICODINGPLAN_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# ## 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# ## 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# ## BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## FAL ###\n\n# FAL_API_KEY=fal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ######## AI Image Settings ############\n# #######################################\n\n# Default image generation count (range: 1-20, default: 4)\n# AI_IMAGE_DEFAULT_IMAGE_NUM=4\n\n# ## Nebius ###\n\n# NEBIUS_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## NewAPI Service ###\n\n# NEWAPI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# NEWAPI_PROXY_URL=https://your-newapi-server.com\n\n# ## Vercel AI Gateway ###\n\n# VERCELAIGATEWAY_API_KEY=your_vercel_ai_gateway_api_key\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# ### Mobile SPA S3 Workflow ############\n# #######################################\n\n# Used by `bun run workflow:mobile-spa` to build mobile SPA, upload assets to S3, and generate template\n# MOBILE_S3_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_BUCKET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_ENDPOINT=https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_REGION=auto\n# MOBILE_S3_PUBLIC_DOMAIN=https://cdn.example.com\n# MOBILE_S3_KEY_PREFIX=mobile/latest # optional, S3 key path prefix\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# 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# ########### Auth Service ##############\n# #######################################\n\n# Auth Secret (use `openssl rand -base64 32` to generate)\n# AUTH_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# Require email verification before allowing users to sign in (default: false)\n# Set to '1' to force users to verify their email before signing in\n# AUTH_EMAIL_VERIFICATION=0\n\n# SSO Providers Configuration (for Better-Auth)\n# Comma-separated list of enabled OAuth providers\n# Supported providers: auth0, authelia, authentik, casdoor, cloudflare-zero-trust, cognito, generic-oidc, github, google, keycloak, logto, microsoft, microsoft-entra-id, okta, zitadel\n# Example: AUTH_SSO_PROVIDERS=google,github,auth0,microsoft-entra-id\n# AUTH_SSO_PROVIDERS=\n\n# Email whitelist for registration (comma-separated)\n# Supports full email (user@example.com) or domain (example.com)\n# Leave empty to allow all emails\n# AUTH_ALLOWED_EMAILS=example.com,admin@other.com\n\n# Disable email/password authentication (SSO-only mode)\n# Set to '1' to disable email/password sign-in and registration, only allowing SSO login\n# AUTH_DISABLE_EMAIL_PASSWORD=0\n\n# Google OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.cloud.google.com/apis/credentials\n# Authorized redirect URIs:\n# - Development: http://localhost:3210/api/auth/callback/google\n# - Production: https://yourdomain.com/api/auth/callback/google\n# GOOGLE_CLIENT_ID=xxxxx.apps.googleusercontent.com\n# GOOGLE_CLIENT_SECRET=GOCSPX-xxxxxxxxxxxxxxxxxxxx\n\n# GitHub OAuth Configuration (for Better-Auth)\n# Get credentials from: https://github.com/settings/developers\n# Create a new OAuth App with:\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/github\n# - Production: https://yourdomain.com/api/auth/callback/github\n# GITHUB_CLIENT_ID=Ov23xxxxxxxxxxxxx\n# GITHUB_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# AWS Cognito OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.aws.amazon.com/cognito\n# Setup steps:\n# 1. Create a User Pool with App Client\n# 2. Configure Hosted UI domain\n# 3. Enable \"Authorization code grant\" OAuth flow\n# 4. Set OAuth scopes: openid, profile, email\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/cognito\n# - Production: https://yourdomain.com/api/auth/callback/cognito\n# COGNITO_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxx\n# COGNITO_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# COGNITO_DOMAIN=your-app.auth.us-east-1.amazoncognito.com\n# COGNITO_REGION=us-east-1\n# COGNITO_USERPOOL_ID=us-east-1_xxxxxxxxx\n\n# Microsoft OAuth Configuration (for Better-Auth)\n# Get credentials from: https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade\n# Create a new App Registration in Microsoft Entra ID (Azure AD)\n# Authorized redirect URL:\n# - Development: http://localhost:3210/api/auth/callback/microsoft\n# - Production: https://yourdomain.com/api/auth/callback/microsoft\n# MICROSOFT_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n# MICROSOFT_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ########## Email Service ##############\n# #######################################\n\n# SMTP Server Configuration (required for email verification with Better-Auth)\n\n# SMTP server hostname (e.g., smtp.gmail.com, smtp.office365.com)\n# SMTP_HOST=smtp.example.com\n\n# SMTP server port (usually 587 for TLS, or 465 for SSL)\n# SMTP_PORT=587\n\n# Use secure connection (set to 'true' for port 465, 'false' for port 587)\n# SMTP_SECURE=false\n\n# SMTP authentication username (usually your email address)\n# SMTP_USER=your-email@example.com\n\n# SMTP authentication password (use app-specific password for Gmail)\n# SMTP_PASS=your-password-or-app-specific-password\n\n# Sender email address (optional, defaults to SMTP_USER)\n# Required for AWS SES where SMTP_USER is not a valid email address\n# SMTP_FROM=noreply@example.com\n\n# #######################################\n# ######### Server Database #############\n# #######################################\n\n# Postgres database URL\n# DATABASE_URL=postgres://username:password@host:port/database\n\n# Optional: server-side timeout (in milliseconds) for a single SQL statement.\n# When set, Postgres aborts any statement/idle transaction exceeding it, so a stuck\n# query can't block indefinitely. Leave unset to keep Postgres' default of no timeout.\n# DATABASE_STATEMENT_TIMEOUT=300000\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# Embedding batch size for processing (default: 50)\n# EMBEDDING_BATCH_SIZE=50\n\n# Embedding concurrency for parallel processing (default: 10)\n# EMBEDDING_CONCURRENCY=10\n\n# #######################################\n# ######### MCP Service Config ##########\n# #######################################\n\n# MCP tool call timeout (milliseconds)\n# MCP_TOOL_TIMEOUT=60000\n\n# #######################################\n# ######### Klavis Service ##############\n# #######################################\n\n# Klavis API Key for accessing Strata hosted MCP servers\n# Get your API key from: https://klavis.io\n# IMPORTANT: This key is stored server-side only and NEVER exposed to the client\n# When this key is set, Klavis integration will be automatically enabled\n# KLAVIS_API_KEY=your_klavis_api_key_here\n\n# #######################################\n# #### Message Gateway (IM Integration) ##\n# #######################################\n\n# External message-gateway for unified IM platform connection management.\n# Set ENABLED=1 to activate. To migrate away, remove ENABLED first (keep URL/TOKEN)\n# so LobeHub can automatically disconnect leftover gateway connections.\n# MESSAGE_GATEWAY_ENABLED=1\n# MESSAGE_GATEWAY_URL=https://message-gateway.lobehub.com\n# MESSAGE_GATEWAY_SERVICE_TOKEN=your_service_token_here\n\n# #######################################\n# ########### Messenger Bot #############\n# #######################################\n\n# LobeHub-operated bots that users link their account to once and then chat\n# with any of their agents from. Credentials (Telegram / Slack / Discord) are\n# now managed in dc-center → Agent → System Bots and stored in the\n# `system_bot_providers` table. See docs/development/messenger/managed-by-dc-center.md.\n#\n# Webhook URLs are registered against APP_URL:\n# Telegram: <APP_URL>/api/agent/messenger/webhooks/telegram\n# Slack: <APP_URL>/api/agent/messenger/webhooks/slack\n# Discord: <APP_URL>/api/agent/messenger/webhooks/discord\n#\n# For local dev with bot platforms, point APP_URL at your tunnel\n# (ngrok / cloudflared) so platforms can reach your machine.\n\n# Verify-im link token TTL in seconds (default 1800 = 30 min)\n# LOBE_LINK_TOKEN_TTL_SECONDS=1800\n"}, "fc088773bd4d7f422f44bf31c7bbdf22e64dde82": {"t": 1785769810.1790245, "n": 14720, "h": "28a895a5b2551c74", "c": "# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n# #######################################\n# ########## Security Settings ###########\n# #######################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n# SSRF Protection Settings\n# Set to '1' to allow connections to private IP addresses (disable SSRF protection)\n# WARNING: Only enable this in trusted environments\n# Default is '0' (SSRF protection enabled)\n# SSRF_ALLOW_PRIVATE_IP_ADDRESS=0\n\n# Whitelist of allowed private IP addresses (comma-separated)\n# Only takes effect when SSRF_ALLOW_PRIVATE_IP_ADDRESS is '0'\n# Example: Allow specific internal servers while keeping SSRF protection\n# SSRF_ALLOW_IP_ADDRESS_LIST=192.168.1.100,10.0.0.50\n\n# #######################################\n# ########### Redis Settings ############\n# #######################################\n\n# Connection string for self-hosted Redis (Docker/K8s/managed). Use container hostname when running via docker-compose.\n# REDIS_URL=redis://localhost:6379\n\n# Optional database index.\n# REDIS_DATABASE=0\n\n# Optional authentication for managed Redis.\n# REDIS_USERNAME=default\n# REDIS_PASSWORD=yourpassword\n\n# Set to '1' to enforce TLS when connecting to managed Redis or rediss:// endpoints.\n# REDIS_TLS=0\n\n# Namespace prefix for cache/queue keys.\n# REDIS_PREFIX=lobechat\n\n# #######################################\n# ######### AI Provider Service #########\n# #######################################\n\n# ## OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=gpt-3.5-turbo\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# ## 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# Anthropic SDK client timeout in milliseconds\n# ANTHROPIC_CLIENT_TIMEOUT=295000\n\n# ## Google AI ####\n\n# GOOGLE_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\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# ## 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# ## OpenRouter Service ###\n\n# OPENROUTER_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# OPENROUTER_MODEL_LIST=model1,model2,model3\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# ## Kimi Code Plan ####\n\n# KIMICODINGPLAN_PROXY_URL=https://api.kimi.com/coding\n# KIMICODINGPLAN_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# ## 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# ## 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# ## BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## FAL ###\n\n# FAL_API_KEY=fal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ######## AI Image Settings ############\n# #######################################\n\n# Default image generation count (range: 1-20, default: 4)\n# AI_IMAGE_DEFAULT_IMAGE_NUM=4\n\n# ## Nebius ###\n\n# NEBIUS_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## NewAPI Service ###\n\n# NEWAPI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# NEWAPI_PROXY_URL=https://your-newapi-server.com\n\n# ## Vercel AI Gateway ###\n\n# VERCELAIGATEWAY_API_KEY=your_vercel_ai_gateway_api_key\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# ### Mobile SPA S3 Workflow ############\n# #######################################\n\n# Used by `bun run workflow:mobile-spa` to build mobile SPA, upload assets to S3, and generate template\n# MOBILE_S3_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_BUCKET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_ENDPOINT=https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_REGION=auto\n# MOBILE_S3_PUBLIC_DOMAIN=https://cdn.example.com\n# MOBILE_S3_KEY_PREFIX=mobile/latest # optional, S3 key path prefix\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# 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# ########### Auth Service ##############\n# #######################################\n\n# Auth Secret (use `openssl rand -base64 32` to generate)\n# AUTH_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# Require email verification before allowing users to sign in (default: false)\n# Set to '1' to force users to verify their email before signing in\n# AUTH_EMAIL_VERIFICATION=0\n\n# SSO Providers Configuration (for Better-Auth)\n# Comma-separated list of enabled OAuth providers\n# Supported providers: auth0, authelia, authentik, casdoor, cloudflare-zero-trust, cognito, generic-oidc, github, google, keycloak, logto, microsoft, microsoft-entra-id, okta, zitadel\n# Example: AUTH_SSO_PROVIDERS=google,github,auth0,microsoft-entra-id\n# AUTH_SSO_PROVIDERS=\n\n# Email whitelist for registration (comma-separated)\n# Supports full email (user@example.com) or domain (example.com)\n# Leave empty to allow all emails\n# AUTH_ALLOWED_EMAILS=example.com,admin@other.com\n\n# Disable email/password authentication (SSO-only mode)\n# Set to '1' to disable email/password sign-in and registration, only allowing SSO login\n# AUTH_DISABLE_EMAIL_PASSWORD=0\n\n# Google OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.cloud.google.com/apis/credentials\n# Authorized redirect URIs:\n# - Development: http://localhost:3210/api/auth/callback/google\n# - Production: https://yourdomain.com/api/auth/callback/google\n# GOOGLE_CLIENT_ID=xxxxx.apps.googleusercontent.com\n# GOOGLE_CLIENT_SECRET=GOCSPX-xxxxxxxxxxxxxxxxxxxx\n\n# GitHub OAuth Configuration (for Better-Auth)\n# Get credentials from: https://github.com/settings/developers\n# Create a new OAuth App with:\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/github\n# - Production: https://yourdomain.com/api/auth/callback/github\n# GITHUB_CLIENT_ID=Ov23xxxxxxxxxxxxx\n# GITHUB_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# AWS Cognito OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.aws.amazon.com/cognito\n# Setup steps:\n# 1. Create a User Pool with App Client\n# 2. Configure Hosted UI domain\n# 3. Enable \"Authorization code grant\" OAuth flow\n# 4. Set OAuth scopes: openid, profile, email\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/cognito\n# - Production: https://yourdomain.com/api/auth/callback/cognito\n# COGNITO_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxx\n# COGNITO_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# COGNITO_DOMAIN=your-app.auth.us-east-1.amazoncognito.com\n# COGNITO_REGION=us-east-1\n# COGNITO_USERPOOL_ID=us-east-1_xxxxxxxxx\n\n# Microsoft OAuth Configuration (for Better-Auth)\n# Get credentials from: https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade\n# Create a new App Registration in Microsoft Entra ID (Azure AD)\n# Authorized redirect URL:\n# - Development: http://localhost:3210/api/auth/callback/microsoft\n# - Production: https://yourdomain.com/api/auth/callback/microsoft\n# MICROSOFT_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n# MICROSOFT_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ########## Email Service ##############\n# #######################################\n\n# SMTP Server Configuration (required for email verification with Better-Auth)\n\n# SMTP server hostname (e.g., smtp.gmail.com, smtp.office365.com)\n# SMTP_HOST=smtp.example.com\n\n# SMTP server port (usually 587 for TLS, or 465 for SSL)\n# SMTP_PORT=587\n\n# Use secure connection (set to 'true' for port 465, 'false' for port 587)\n# SMTP_SECURE=false\n\n# SMTP authentication username (usually your email address)\n# SMTP_USER=your-email@example.com\n\n# SMTP authentication password (use app-specific password for Gmail)\n# SMTP_PASS=your-password-or-app-specific-password\n\n# Sender email address (optional, defaults to SMTP_USER)\n# Required for AWS SES where SMTP_USER is not a valid email address\n# SMTP_FROM=noreply@example.com\n\n# #######################################\n# ######### Server Database #############\n# #######################################\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# Embedding batch size for processing (default: 50)\n# EMBEDDING_BATCH_SIZE=50\n\n# Embedding concurrency for parallel processing (default: 10)\n# EMBEDDING_CONCURRENCY=10\n\n# #######################################\n# ######### MCP Service Config ##########\n# #######################################\n\n# MCP tool call timeout (milliseconds)\n# MCP_TOOL_TIMEOUT=60000\n\n# #######################################\n# ######### Klavis Service ##############\n# #######################################\n\n# Klavis API Key for accessing Strata hosted MCP servers\n# Get your API key from: https://klavis.io\n# IMPORTANT: This key is stored server-side only and NEVER exposed to the client\n# When this key is set, Klavis integration will be automatically enabled\n# KLAVIS_API_KEY=your_klavis_api_key_here\n\n# #######################################\n# #### Message Gateway (IM Integration) ##\n# #######################################\n\n# External message-gateway for unified IM platform connection management.\n# Set ENABLED=1 to activate. To migrate away, remove ENABLED first (keep URL/TOKEN)\n# so LobeHub can automatically disconnect leftover gateway connections.\n# MESSAGE_GATEWAY_ENABLED=1\n# MESSAGE_GATEWAY_URL=https://message-gateway.lobehub.com\n# MESSAGE_GATEWAY_SERVICE_TOKEN=your_service_token_here\n\n# #######################################\n# ########### Messenger Bot #############\n# #######################################\n\n# LobeHub-operated bots that users link their account to once and then chat\n# with any of their agents from. Credentials (Telegram / Slack / Discord) are\n# now managed in dc-center → Agent → System Bots and stored in the\n# `system_bot_providers` table. See docs/development/messenger/managed-by-dc-center.md.\n#\n# Webhook URLs are registered against APP_URL:\n# Telegram: <APP_URL>/api/agent/messenger/webhooks/telegram\n# Slack: <APP_URL>/api/agent/messenger/webhooks/slack\n# Discord: <APP_URL>/api/agent/messenger/webhooks/discord\n#\n# For local dev with bot platforms, point APP_URL at your tunnel\n# (ngrok / cloudflared) so platforms can reach your machine.\n\n# Verify-im link token TTL in seconds (default 1800 = 30 min)\n# LOBE_LINK_TOKEN_TTL_SECONDS=1800\n"}, "75fd477bffefa06c41f0f859b821c97a78df0da0": {"t": 1785769811.6407099, "n": 14638, "h": "88f0251133d198e3", "c": "# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n# #######################################\n# ########## Security Settings ###########\n# #######################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n# SSRF Protection Settings\n# Set to '1' to allow connections to private IP addresses (disable SSRF protection)\n# WARNING: Only enable this in trusted environments\n# Default is '0' (SSRF protection enabled)\n# SSRF_ALLOW_PRIVATE_IP_ADDRESS=0\n\n# Whitelist of allowed private IP addresses (comma-separated)\n# Only takes effect when SSRF_ALLOW_PRIVATE_IP_ADDRESS is '0'\n# Example: Allow specific internal servers while keeping SSRF protection\n# SSRF_ALLOW_IP_ADDRESS_LIST=192.168.1.100,10.0.0.50\n\n# #######################################\n# ########### Redis Settings ############\n# #######################################\n\n# Connection string for self-hosted Redis (Docker/K8s/managed). Use container hostname when running via docker-compose.\n# REDIS_URL=redis://localhost:6379\n\n# Optional database index.\n# REDIS_DATABASE=0\n\n# Optional authentication for managed Redis.\n# REDIS_USERNAME=default\n# REDIS_PASSWORD=yourpassword\n\n# Set to '1' to enforce TLS when connecting to managed Redis or rediss:// endpoints.\n# REDIS_TLS=0\n\n# Namespace prefix for cache/queue keys.\n# REDIS_PREFIX=lobechat\n\n# #######################################\n# ######### AI Provider Service #########\n# #######################################\n\n# ## OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=gpt-3.5-turbo\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# ## 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# ## Google AI ####\n\n# GOOGLE_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\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# ## 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# ## OpenRouter Service ###\n\n# OPENROUTER_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# OPENROUTER_MODEL_LIST=model1,model2,model3\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# ## Kimi Code Plan ####\n\n# KIMICODINGPLAN_PROXY_URL=https://api.kimi.com/coding\n# KIMICODINGPLAN_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# ## 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# ## 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# ## BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## FAL ###\n\n# FAL_API_KEY=fal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ######## AI Image Settings ############\n# #######################################\n\n# Default image generation count (range: 1-20, default: 4)\n# AI_IMAGE_DEFAULT_IMAGE_NUM=4\n\n# ## Nebius ###\n\n# NEBIUS_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## NewAPI Service ###\n\n# NEWAPI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# NEWAPI_PROXY_URL=https://your-newapi-server.com\n\n# ## Vercel AI Gateway ###\n\n# VERCELAIGATEWAY_API_KEY=your_vercel_ai_gateway_api_key\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# ### Mobile SPA S3 Workflow ############\n# #######################################\n\n# Used by `bun run workflow:mobile-spa` to build mobile SPA, upload assets to S3, and generate template\n# MOBILE_S3_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_BUCKET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_ENDPOINT=https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_REGION=auto\n# MOBILE_S3_PUBLIC_DOMAIN=https://cdn.example.com\n# MOBILE_S3_KEY_PREFIX=mobile/latest # optional, S3 key path prefix\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# 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# ########### Auth Service ##############\n# #######################################\n\n# Auth Secret (use `openssl rand -base64 32` to generate)\n# AUTH_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# Require email verification before allowing users to sign in (default: false)\n# Set to '1' to force users to verify their email before signing in\n# AUTH_EMAIL_VERIFICATION=0\n\n# SSO Providers Configuration (for Better-Auth)\n# Comma-separated list of enabled OAuth providers\n# Supported providers: auth0, authelia, authentik, casdoor, cloudflare-zero-trust, cognito, generic-oidc, github, google, keycloak, logto, microsoft, microsoft-entra-id, okta, zitadel\n# Example: AUTH_SSO_PROVIDERS=google,github,auth0,microsoft-entra-id\n# AUTH_SSO_PROVIDERS=\n\n# Email whitelist for registration (comma-separated)\n# Supports full email (user@example.com) or domain (example.com)\n# Leave empty to allow all emails\n# AUTH_ALLOWED_EMAILS=example.com,admin@other.com\n\n# Disable email/password authentication (SSO-only mode)\n# Set to '1' to disable email/password sign-in and registration, only allowing SSO login\n# AUTH_DISABLE_EMAIL_PASSWORD=0\n\n# Google OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.cloud.google.com/apis/credentials\n# Authorized redirect URIs:\n# - Development: http://localhost:3210/api/auth/callback/google\n# - Production: https://yourdomain.com/api/auth/callback/google\n# GOOGLE_CLIENT_ID=xxxxx.apps.googleusercontent.com\n# GOOGLE_CLIENT_SECRET=GOCSPX-xxxxxxxxxxxxxxxxxxxx\n\n# GitHub OAuth Configuration (for Better-Auth)\n# Get credentials from: https://github.com/settings/developers\n# Create a new OAuth App with:\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/github\n# - Production: https://yourdomain.com/api/auth/callback/github\n# GITHUB_CLIENT_ID=Ov23xxxxxxxxxxxxx\n# GITHUB_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# AWS Cognito OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.aws.amazon.com/cognito\n# Setup steps:\n# 1. Create a User Pool with App Client\n# 2. Configure Hosted UI domain\n# 3. Enable \"Authorization code grant\" OAuth flow\n# 4. Set OAuth scopes: openid, profile, email\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/cognito\n# - Production: https://yourdomain.com/api/auth/callback/cognito\n# COGNITO_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxx\n# COGNITO_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# COGNITO_DOMAIN=your-app.auth.us-east-1.amazoncognito.com\n# COGNITO_REGION=us-east-1\n# COGNITO_USERPOOL_ID=us-east-1_xxxxxxxxx\n\n# Microsoft OAuth Configuration (for Better-Auth)\n# Get credentials from: https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade\n# Create a new App Registration in Microsoft Entra ID (Azure AD)\n# Authorized redirect URL:\n# - Development: http://localhost:3210/api/auth/callback/microsoft\n# - Production: https://yourdomain.com/api/auth/callback/microsoft\n# MICROSOFT_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n# MICROSOFT_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ########## Email Service ##############\n# #######################################\n\n# SMTP Server Configuration (required for email verification with Better-Auth)\n\n# SMTP server hostname (e.g., smtp.gmail.com, smtp.office365.com)\n# SMTP_HOST=smtp.example.com\n\n# SMTP server port (usually 587 for TLS, or 465 for SSL)\n# SMTP_PORT=587\n\n# Use secure connection (set to 'true' for port 465, 'false' for port 587)\n# SMTP_SECURE=false\n\n# SMTP authentication username (usually your email address)\n# SMTP_USER=your-email@example.com\n\n# SMTP authentication password (use app-specific password for Gmail)\n# SMTP_PASS=your-password-or-app-specific-password\n\n# Sender email address (optional, defaults to SMTP_USER)\n# Required for AWS SES where SMTP_USER is not a valid email address\n# SMTP_FROM=noreply@example.com\n\n# #######################################\n# ######### Server Database #############\n# #######################################\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# Embedding batch size for processing (default: 50)\n# EMBEDDING_BATCH_SIZE=50\n\n# Embedding concurrency for parallel processing (default: 10)\n# EMBEDDING_CONCURRENCY=10\n\n# #######################################\n# ######### MCP Service Config ##########\n# #######################################\n\n# MCP tool call timeout (milliseconds)\n# MCP_TOOL_TIMEOUT=60000\n\n# #######################################\n# ######### Klavis Service ##############\n# #######################################\n\n# Klavis API Key for accessing Strata hosted MCP servers\n# Get your API key from: https://klavis.io\n# IMPORTANT: This key is stored server-side only and NEVER exposed to the client\n# When this key is set, Klavis integration will be automatically enabled\n# KLAVIS_API_KEY=your_klavis_api_key_here\n\n# #######################################\n# #### Message Gateway (IM Integration) ##\n# #######################################\n\n# External message-gateway for unified IM platform connection management.\n# Set ENABLED=1 to activate. To migrate away, remove ENABLED first (keep URL/TOKEN)\n# so LobeHub can automatically disconnect leftover gateway connections.\n# MESSAGE_GATEWAY_ENABLED=1\n# MESSAGE_GATEWAY_URL=https://message-gateway.lobehub.com\n# MESSAGE_GATEWAY_SERVICE_TOKEN=your_service_token_here\n\n# #######################################\n# ########### Messenger Bot #############\n# #######################################\n\n# LobeHub-operated bots that users link their account to once and then chat\n# with any of their agents from. Credentials (Telegram / Slack / Discord) are\n# now managed in dc-center → Agent → System Bots and stored in the\n# `system_bot_providers` table. See docs/development/messenger/managed-by-dc-center.md.\n#\n# Webhook URLs are registered against APP_URL:\n# Telegram: <APP_URL>/api/agent/messenger/webhooks/telegram\n# Slack: <APP_URL>/api/agent/messenger/webhooks/slack\n# Discord: <APP_URL>/api/agent/messenger/webhooks/discord\n#\n# For local dev with bot platforms, point APP_URL at your tunnel\n# (ngrok / cloudflared) so platforms can reach your machine.\n\n# Verify-im link token TTL in seconds (default 1800 = 30 min)\n# LOBE_LINK_TOKEN_TTL_SECONDS=1800\n"}, "a939962fa1e2e03018227acdc9c3d87a05f245ae": {"t": 1785769813.7719874, "n": 13755, "h": "6e59fdec40c5b994", "c": "# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n# #######################################\n# ########## Security Settings ###########\n# #######################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n# SSRF Protection Settings\n# Set to '1' to allow connections to private IP addresses (disable SSRF protection)\n# WARNING: Only enable this in trusted environments\n# Default is '0' (SSRF protection enabled)\n# SSRF_ALLOW_PRIVATE_IP_ADDRESS=0\n\n# Whitelist of allowed private IP addresses (comma-separated)\n# Only takes effect when SSRF_ALLOW_PRIVATE_IP_ADDRESS is '0'\n# Example: Allow specific internal servers while keeping SSRF protection\n# SSRF_ALLOW_IP_ADDRESS_LIST=192.168.1.100,10.0.0.50\n\n# #######################################\n# ########### Redis Settings ############\n# #######################################\n\n# Connection string for self-hosted Redis (Docker/K8s/managed). Use container hostname when running via docker-compose.\n# REDIS_URL=redis://localhost:6379\n\n# Optional database index.\n# REDIS_DATABASE=0\n\n# Optional authentication for managed Redis.\n# REDIS_USERNAME=default\n# REDIS_PASSWORD=yourpassword\n\n# Set to '1' to enforce TLS when connecting to managed Redis or rediss:// endpoints.\n# REDIS_TLS=0\n\n# Namespace prefix for cache/queue keys.\n# REDIS_PREFIX=lobechat\n\n# #######################################\n# ######### AI Provider Service #########\n# #######################################\n\n# ## OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=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# ## Kimi Code Plan ####\n\n# KIMICODINGPLAN_PROXY_URL=https://api.kimi.com/coding\n# KIMICODINGPLAN_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# ## BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## FAL ###\n\n# FAL_API_KEY=fal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ######## AI Image Settings ############\n# #######################################\n\n# Default image generation count (range: 1-20, default: 4)\n# AI_IMAGE_DEFAULT_IMAGE_NUM=4\n\n# ## Nebius ###\n\n# NEBIUS_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## NewAPI Service ###\n\n# NEWAPI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# NEWAPI_PROXY_URL=https://your-newapi-server.com\n\n# ## Vercel AI Gateway ###\n\n# VERCELAIGATEWAY_API_KEY=your_vercel_ai_gateway_api_key\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# ### Mobile SPA S3 Workflow ############\n# #######################################\n\n# Used by `bun run workflow:mobile-spa` to build mobile SPA, upload assets to S3, and generate template\n# MOBILE_S3_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_BUCKET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_ENDPOINT=https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_REGION=auto\n# MOBILE_S3_PUBLIC_DOMAIN=https://cdn.example.com\n# MOBILE_S3_KEY_PREFIX=mobile/latest # optional, S3 key path prefix\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# 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# Auth Secret (use `openssl rand -base64 32` to generate)\n# AUTH_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# Require email verification before allowing users to sign in (default: false)\n# Set to '1' to force users to verify their email before signing in\n# AUTH_EMAIL_VERIFICATION=0\n\n# SSO Providers Configuration (for Better-Auth)\n# Comma-separated list of enabled OAuth providers\n# Supported providers: auth0, authelia, authentik, casdoor, cloudflare-zero-trust, cognito, generic-oidc, github, google, keycloak, logto, microsoft, microsoft-entra-id, okta, zitadel\n# Example: AUTH_SSO_PROVIDERS=google,github,auth0,microsoft-entra-id\n# AUTH_SSO_PROVIDERS=\n\n# Email whitelist for registration (comma-separated)\n# Supports full email (user@example.com) or domain (example.com)\n# Leave empty to allow all emails\n# AUTH_ALLOWED_EMAILS=example.com,admin@other.com\n\n# Disable email/password authentication (SSO-only mode)\n# Set to '1' to disable email/password sign-in and registration, only allowing SSO login\n# AUTH_DISABLE_EMAIL_PASSWORD=0\n\n# Google OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.cloud.google.com/apis/credentials\n# Authorized redirect URIs:\n# - Development: http://localhost:3210/api/auth/callback/google\n# - Production: https://yourdomain.com/api/auth/callback/google\n# GOOGLE_CLIENT_ID=xxxxx.apps.googleusercontent.com\n# GOOGLE_CLIENT_SECRET=GOCSPX-xxxxxxxxxxxxxxxxxxxx\n\n# GitHub OAuth Configuration (for Better-Auth)\n# Get credentials from: https://github.com/settings/developers\n# Create a new OAuth App with:\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/github\n# - Production: https://yourdomain.com/api/auth/callback/github\n# GITHUB_CLIENT_ID=Ov23xxxxxxxxxxxxx\n# GITHUB_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# AWS Cognito OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.aws.amazon.com/cognito\n# Setup steps:\n# 1. Create a User Pool with App Client\n# 2. Configure Hosted UI domain\n# 3. Enable \"Authorization code grant\" OAuth flow\n# 4. Set OAuth scopes: openid, profile, email\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/cognito\n# - Production: https://yourdomain.com/api/auth/callback/cognito\n# COGNITO_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxx\n# COGNITO_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# COGNITO_DOMAIN=your-app.auth.us-east-1.amazoncognito.com\n# COGNITO_REGION=us-east-1\n# COGNITO_USERPOOL_ID=us-east-1_xxxxxxxxx\n\n# Microsoft OAuth Configuration (for Better-Auth)\n# Get credentials from: https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade\n# Create a new App Registration in Microsoft Entra ID (Azure AD)\n# Authorized redirect URL:\n# - Development: http://localhost:3210/api/auth/callback/microsoft\n# - Production: https://yourdomain.com/api/auth/callback/microsoft\n# MICROSOFT_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n# MICROSOFT_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ########## Email Service ##############\n# #######################################\n\n# SMTP Server Configuration (required for email verification with Better-Auth)\n\n# SMTP server hostname (e.g., smtp.gmail.com, smtp.office365.com)\n# SMTP_HOST=smtp.example.com\n\n# SMTP server port (usually 587 for TLS, or 465 for SSL)\n# SMTP_PORT=587\n\n# Use secure connection (set to 'true' for port 465, 'false' for port 587)\n# SMTP_SECURE=false\n\n# SMTP authentication username (usually your email address)\n# SMTP_USER=your-email@example.com\n\n# SMTP authentication password (use app-specific password for Gmail)\n# SMTP_PASS=your-password-or-app-specific-password\n\n# Sender email address (optional, defaults to SMTP_USER)\n# Required for AWS SES where SMTP_USER is not a valid email address\n# SMTP_FROM=noreply@example.com\n\n# #######################################\n# ######### Server Database #############\n# #######################################\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# Embedding batch size for processing (default: 50)\n# EMBEDDING_BATCH_SIZE=50\n\n# Embedding concurrency for parallel processing (default: 10)\n# EMBEDDING_CONCURRENCY=10\n\n# #######################################\n# ######### MCP Service Config ##########\n# #######################################\n\n# MCP tool call timeout (milliseconds)\n# MCP_TOOL_TIMEOUT=60000\n\n# #######################################\n# ######### Klavis Service ##############\n# #######################################\n\n# Klavis API Key for accessing Strata hosted MCP servers\n# Get your API key from: https://klavis.io\n# IMPORTANT: This key is stored server-side only and NEVER exposed to the client\n# When this key is set, Klavis integration will be automatically enabled\n# KLAVIS_API_KEY=your_klavis_api_key_here\n\n# #######################################\n# #### Message Gateway (IM Integration) ##\n# #######################################\n\n# External message-gateway for unified IM platform connection management.\n# Set ENABLED=1 to activate. To migrate away, remove ENABLED first (keep URL/TOKEN)\n# so LobeHub can automatically disconnect leftover gateway connections.\n# MESSAGE_GATEWAY_ENABLED=1\n# MESSAGE_GATEWAY_URL=https://message-gateway.lobehub.com\n# MESSAGE_GATEWAY_SERVICE_TOKEN=your_service_token_here\n"}, "636a3b77c398dc0a563412418ed35a5e1aa0103d": {"t": 1785769817.5779645, "n": 13606, "h": "c396d234d41b0b02", "c": "# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n# #######################################\n# ########## Security Settings ###########\n# #######################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n# SSRF Protection Settings\n# Set to '1' to allow connections to private IP addresses (disable SSRF protection)\n# WARNING: Only enable this in trusted environments\n# Default is '0' (SSRF protection enabled)\n# SSRF_ALLOW_PRIVATE_IP_ADDRESS=0\n\n# Whitelist of allowed private IP addresses (comma-separated)\n# Only takes effect when SSRF_ALLOW_PRIVATE_IP_ADDRESS is '0'\n# Example: Allow specific internal servers while keeping SSRF protection\n# SSRF_ALLOW_IP_ADDRESS_LIST=192.168.1.100,10.0.0.50\n\n# #######################################\n# ########### Redis Settings ############\n# #######################################\n\n# Connection string for self-hosted Redis (Docker/K8s/managed). Use container hostname when running via docker-compose.\n# REDIS_URL=redis://localhost:6379\n\n# Optional database index.\n# REDIS_DATABASE=0\n\n# Optional authentication for managed Redis.\n# REDIS_USERNAME=default\n# REDIS_PASSWORD=yourpassword\n\n# Set to '1' to enforce TLS when connecting to managed Redis or rediss:// endpoints.\n# REDIS_TLS=0\n\n# Namespace prefix for cache/queue keys.\n# REDIS_PREFIX=lobechat\n\n# #######################################\n# ######### AI Provider Service #########\n# #######################################\n\n# ## OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=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# ## BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## FAL ###\n\n# FAL_API_KEY=fal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ######## AI Image Settings ############\n# #######################################\n\n# Default image generation count (range: 1-20, default: 4)\n# AI_IMAGE_DEFAULT_IMAGE_NUM=4\n\n# ## Nebius ###\n\n# NEBIUS_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## NewAPI Service ###\n\n# NEWAPI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# NEWAPI_PROXY_URL=https://your-newapi-server.com\n\n# ## Vercel AI Gateway ###\n\n# VERCELAIGATEWAY_API_KEY=your_vercel_ai_gateway_api_key\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# ### Mobile SPA S3 Workflow ############\n# #######################################\n\n# Used by `bun run workflow:mobile-spa` to build mobile SPA, upload assets to S3, and generate template\n# MOBILE_S3_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_BUCKET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_ENDPOINT=https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_REGION=auto\n# MOBILE_S3_PUBLIC_DOMAIN=https://cdn.example.com\n# MOBILE_S3_KEY_PREFIX=mobile/latest # optional, S3 key path prefix\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# 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# Auth Secret (use `openssl rand -base64 32` to generate)\n# AUTH_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# Require email verification before allowing users to sign in (default: false)\n# Set to '1' to force users to verify their email before signing in\n# AUTH_EMAIL_VERIFICATION=0\n\n# SSO Providers Configuration (for Better-Auth)\n# Comma-separated list of enabled OAuth providers\n# Supported providers: auth0, authelia, authentik, casdoor, cloudflare-zero-trust, cognito, generic-oidc, github, google, keycloak, logto, microsoft, microsoft-entra-id, okta, zitadel\n# Example: AUTH_SSO_PROVIDERS=google,github,auth0,microsoft-entra-id\n# AUTH_SSO_PROVIDERS=\n\n# Email whitelist for registration (comma-separated)\n# Supports full email (user@example.com) or domain (example.com)\n# Leave empty to allow all emails\n# AUTH_ALLOWED_EMAILS=example.com,admin@other.com\n\n# Disable email/password authentication (SSO-only mode)\n# Set to '1' to disable email/password sign-in and registration, only allowing SSO login\n# AUTH_DISABLE_EMAIL_PASSWORD=0\n\n# Google OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.cloud.google.com/apis/credentials\n# Authorized redirect URIs:\n# - Development: http://localhost:3210/api/auth/callback/google\n# - Production: https://yourdomain.com/api/auth/callback/google\n# GOOGLE_CLIENT_ID=xxxxx.apps.googleusercontent.com\n# GOOGLE_CLIENT_SECRET=GOCSPX-xxxxxxxxxxxxxxxxxxxx\n\n# GitHub OAuth Configuration (for Better-Auth)\n# Get credentials from: https://github.com/settings/developers\n# Create a new OAuth App with:\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/github\n# - Production: https://yourdomain.com/api/auth/callback/github\n# GITHUB_CLIENT_ID=Ov23xxxxxxxxxxxxx\n# GITHUB_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# AWS Cognito OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.aws.amazon.com/cognito\n# Setup steps:\n# 1. Create a User Pool with App Client\n# 2. Configure Hosted UI domain\n# 3. Enable \"Authorization code grant\" OAuth flow\n# 4. Set OAuth scopes: openid, profile, email\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/cognito\n# - Production: https://yourdomain.com/api/auth/callback/cognito\n# COGNITO_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxx\n# COGNITO_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# COGNITO_DOMAIN=your-app.auth.us-east-1.amazoncognito.com\n# COGNITO_REGION=us-east-1\n# COGNITO_USERPOOL_ID=us-east-1_xxxxxxxxx\n\n# Microsoft OAuth Configuration (for Better-Auth)\n# Get credentials from: https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade\n# Create a new App Registration in Microsoft Entra ID (Azure AD)\n# Authorized redirect URL:\n# - Development: http://localhost:3210/api/auth/callback/microsoft\n# - Production: https://yourdomain.com/api/auth/callback/microsoft\n# MICROSOFT_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n# MICROSOFT_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ########## Email Service ##############\n# #######################################\n\n# SMTP Server Configuration (required for email verification with Better-Auth)\n\n# SMTP server hostname (e.g., smtp.gmail.com, smtp.office365.com)\n# SMTP_HOST=smtp.example.com\n\n# SMTP server port (usually 587 for TLS, or 465 for SSL)\n# SMTP_PORT=587\n\n# Use secure connection (set to 'true' for port 465, 'false' for port 587)\n# SMTP_SECURE=false\n\n# SMTP authentication username (usually your email address)\n# SMTP_USER=your-email@example.com\n\n# SMTP authentication password (use app-specific password for Gmail)\n# SMTP_PASS=your-password-or-app-specific-password\n\n# Sender email address (optional, defaults to SMTP_USER)\n# Required for AWS SES where SMTP_USER is not a valid email address\n# SMTP_FROM=noreply@example.com\n\n# #######################################\n# ######### Server Database #############\n# #######################################\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# Embedding batch size for processing (default: 50)\n# EMBEDDING_BATCH_SIZE=50\n\n# Embedding concurrency for parallel processing (default: 10)\n# EMBEDDING_CONCURRENCY=10\n\n# #######################################\n# ######### MCP Service Config ##########\n# #######################################\n\n# MCP tool call timeout (milliseconds)\n# MCP_TOOL_TIMEOUT=60000\n\n# #######################################\n# ######### Klavis Service ##############\n# #######################################\n\n# Klavis API Key for accessing Strata hosted MCP servers\n# Get your API key from: https://klavis.io\n# IMPORTANT: This key is stored server-side only and NEVER exposed to the client\n# When this key is set, Klavis integration will be automatically enabled\n# KLAVIS_API_KEY=your_klavis_api_key_here\n\n# #######################################\n# #### Message Gateway (IM Integration) ##\n# #######################################\n\n# External message-gateway for unified IM platform connection management.\n# Set ENABLED=1 to activate. To migrate away, remove ENABLED first (keep URL/TOKEN)\n# so LobeHub can automatically disconnect leftover gateway connections.\n# MESSAGE_GATEWAY_ENABLED=1\n# MESSAGE_GATEWAY_URL=https://message-gateway.lobehub.com\n# MESSAGE_GATEWAY_SERVICE_TOKEN=your_service_token_here\n"}, "73be58ba123bfd5ed7fa12ae1fd8b02e45f2802f": {"t": 1785769821.101386, "n": 13520, "h": "3381073aa3a59f62", "c": "# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n# #######################################\n# ########## Security Settings ###########\n# #######################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n# SSRF Protection Settings\n# Set to '1' to allow connections to private IP addresses (disable SSRF protection)\n# WARNING: Only enable this in trusted environments\n# Default is '0' (SSRF protection enabled)\n# SSRF_ALLOW_PRIVATE_IP_ADDRESS=0\n\n# Whitelist of allowed private IP addresses (comma-separated)\n# Only takes effect when SSRF_ALLOW_PRIVATE_IP_ADDRESS is '0'\n# Example: Allow specific internal servers while keeping SSRF protection\n# SSRF_ALLOW_IP_ADDRESS_LIST=192.168.1.100,10.0.0.50\n\n# #######################################\n# ########### Redis Settings ############\n# #######################################\n\n# Connection string for self-hosted Redis (Docker/K8s/managed). Use container hostname when running via docker-compose.\n# REDIS_URL=redis://localhost:6379\n\n# Optional database index.\n# REDIS_DATABASE=0\n\n# Optional authentication for managed Redis.\n# REDIS_USERNAME=default\n# REDIS_PASSWORD=yourpassword\n\n# Set to '1' to enforce TLS when connecting to managed Redis or rediss:// endpoints.\n# REDIS_TLS=0\n\n# Namespace prefix for cache/queue keys.\n# REDIS_PREFIX=lobechat\n\n# #######################################\n# ######### AI Provider Service #########\n# #######################################\n\n# ## OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=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# ## BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## FAL ###\n\n# FAL_API_KEY=fal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ######## AI Image Settings ############\n# #######################################\n\n# Default image generation count (range: 1-20, default: 4)\n# AI_IMAGE_DEFAULT_IMAGE_NUM=4\n\n# ## Nebius ###\n\n# NEBIUS_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## NewAPI Service ###\n\n# NEWAPI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# NEWAPI_PROXY_URL=https://your-newapi-server.com\n\n# ## Vercel AI Gateway ###\n\n# VERCELAIGATEWAY_API_KEY=your_vercel_ai_gateway_api_key\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# ### Mobile SPA S3 Workflow ############\n# #######################################\n\n# Used by `bun run workflow:mobile-spa` to build mobile SPA, upload assets to S3, and generate template\n# MOBILE_S3_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_BUCKET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_ENDPOINT=https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_REGION=auto\n# MOBILE_S3_PUBLIC_DOMAIN=https://cdn.example.com\n# MOBILE_S3_KEY_PREFIX=mobile/latest # optional, S3 key path prefix\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# 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# Auth Secret (use `openssl rand -base64 32` to generate)\n# AUTH_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# Require email verification before allowing users to sign in (default: false)\n# Set to '1' to force users to verify their email before signing in\n# AUTH_EMAIL_VERIFICATION=0\n\n# SSO Providers Configuration (for Better-Auth)\n# Comma-separated list of enabled OAuth providers\n# Supported providers: auth0, authelia, authentik, casdoor, cloudflare-zero-trust, cognito, generic-oidc, github, google, keycloak, logto, microsoft, microsoft-entra-id, okta, zitadel\n# Example: AUTH_SSO_PROVIDERS=google,github,auth0,microsoft-entra-id\n# AUTH_SSO_PROVIDERS=\n\n# Email whitelist for registration (comma-separated)\n# Supports full email (user@example.com) or domain (example.com)\n# Leave empty to allow all emails\n# AUTH_ALLOWED_EMAILS=example.com,admin@other.com\n\n# Disable email/password authentication (SSO-only mode)\n# Set to '1' to disable email/password sign-in and registration, only allowing SSO login\n# AUTH_DISABLE_EMAIL_PASSWORD=0\n\n# Google OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.cloud.google.com/apis/credentials\n# Authorized redirect URIs:\n# - Development: http://localhost:3210/api/auth/callback/google\n# - Production: https://yourdomain.com/api/auth/callback/google\n# GOOGLE_CLIENT_ID=xxxxx.apps.googleusercontent.com\n# GOOGLE_CLIENT_SECRET=GOCSPX-xxxxxxxxxxxxxxxxxxxx\n\n# GitHub OAuth Configuration (for Better-Auth)\n# Get credentials from: https://github.com/settings/developers\n# Create a new OAuth App with:\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/github\n# - Production: https://yourdomain.com/api/auth/callback/github\n# GITHUB_CLIENT_ID=Ov23xxxxxxxxxxxxx\n# GITHUB_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# AWS Cognito OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.aws.amazon.com/cognito\n# Setup steps:\n# 1. Create a User Pool with App Client\n# 2. Configure Hosted UI domain\n# 3. Enable \"Authorization code grant\" OAuth flow\n# 4. Set OAuth scopes: openid, profile, email\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/cognito\n# - Production: https://yourdomain.com/api/auth/callback/cognito\n# COGNITO_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxx\n# COGNITO_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# COGNITO_DOMAIN=your-app.auth.us-east-1.amazoncognito.com\n# COGNITO_REGION=us-east-1\n# COGNITO_USERPOOL_ID=us-east-1_xxxxxxxxx\n\n# Microsoft OAuth Configuration (for Better-Auth)\n# Get credentials from: https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade\n# Create a new App Registration in Microsoft Entra ID (Azure AD)\n# Authorized redirect URL:\n# - Development: http://localhost:3210/api/auth/callback/microsoft\n# - Production: https://yourdomain.com/api/auth/callback/microsoft\n# MICROSOFT_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n# MICROSOFT_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ########## Email Service ##############\n# #######################################\n\n# SMTP Server Configuration (required for email verification with Better-Auth)\n\n# SMTP server hostname (e.g., smtp.gmail.com, smtp.office365.com)\n# SMTP_HOST=smtp.example.com\n\n# SMTP server port (usually 587 for TLS, or 465 for SSL)\n# SMTP_PORT=587\n\n# Use secure connection (set to 'true' for port 465, 'false' for port 587)\n# SMTP_SECURE=false\n\n# SMTP authentication username (usually your email address)\n# SMTP_USER=your-email@example.com\n\n# SMTP authentication password (use app-specific password for Gmail)\n# SMTP_PASS=your-password-or-app-specific-password\n\n# Sender email address (optional, defaults to SMTP_USER)\n# Required for AWS SES where SMTP_USER is not a valid email address\n# SMTP_FROM=noreply@example.com\n\n# #######################################\n# ######### Server Database #############\n# #######################################\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# Embedding batch size for processing (default: 50)\n# EMBEDDING_BATCH_SIZE=50\n\n# Embedding concurrency for parallel processing (default: 10)\n# EMBEDDING_CONCURRENCY=10\n\n# #######################################\n# ######### MCP Service Config ##########\n# #######################################\n\n# MCP tool call timeout (milliseconds)\n# MCP_TOOL_TIMEOUT=60000\n\n# #######################################\n# ######### Klavis Service ##############\n# #######################################\n\n# Klavis API Key for accessing Strata hosted MCP servers\n# Get your API key from: https://klavis.io\n# IMPORTANT: This key is stored server-side only and NEVER exposed to the client\n# When this key is set, Klavis integration will be automatically enabled\n# KLAVIS_API_KEY=your_klavis_api_key_here\n\n# #######################################\n# #### Message Gateway (IM Integration) ##\n# #######################################\n\n# URL of the message-gateway Cloudflare Worker for unified IM platform connection management\n# When set, LobeHub delegates all platform connections to the external gateway\n# MESSAGE_GATEWAY_URL=https://message-gateway.lobehub.com\n# MESSAGE_GATEWAY_SERVICE_TOKEN=your_service_token_here\n"}, "687b36c81cc1927a5c7944a4512ceaa3636a9cfc": {"t": 1785769822.5484552, "n": 13105, "h": "80727bb468878cd4", "c": "# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n# #######################################\n# ########## Security Settings ###########\n# #######################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n# SSRF Protection Settings\n# Set to '1' to allow connections to private IP addresses (disable SSRF protection)\n# WARNING: Only enable this in trusted environments\n# Default is '0' (SSRF protection enabled)\n# SSRF_ALLOW_PRIVATE_IP_ADDRESS=0\n\n# Whitelist of allowed private IP addresses (comma-separated)\n# Only takes effect when SSRF_ALLOW_PRIVATE_IP_ADDRESS is '0'\n# Example: Allow specific internal servers while keeping SSRF protection\n# SSRF_ALLOW_IP_ADDRESS_LIST=192.168.1.100,10.0.0.50\n\n# #######################################\n# ########### Redis Settings ############\n# #######################################\n\n# Connection string for self-hosted Redis (Docker/K8s/managed). Use container hostname when running via docker-compose.\n# REDIS_URL=redis://localhost:6379\n\n# Optional database index.\n# REDIS_DATABASE=0\n\n# Optional authentication for managed Redis.\n# REDIS_USERNAME=default\n# REDIS_PASSWORD=yourpassword\n\n# Set to '1' to enforce TLS when connecting to managed Redis or rediss:// endpoints.\n# REDIS_TLS=0\n\n# Namespace prefix for cache/queue keys.\n# REDIS_PREFIX=lobechat\n\n# #######################################\n# ######### AI Provider Service #########\n# #######################################\n\n# ## OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=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# ## BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## FAL ###\n\n# FAL_API_KEY=fal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ######## AI Image Settings ############\n# #######################################\n\n# Default image generation count (range: 1-20, default: 4)\n# AI_IMAGE_DEFAULT_IMAGE_NUM=4\n\n# ## Nebius ###\n\n# NEBIUS_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## NewAPI Service ###\n\n# NEWAPI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# NEWAPI_PROXY_URL=https://your-newapi-server.com\n\n# ## Vercel AI Gateway ###\n\n# VERCELAIGATEWAY_API_KEY=your_vercel_ai_gateway_api_key\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# ### Mobile SPA S3 Workflow ############\n# #######################################\n\n# Used by `bun run workflow:mobile-spa` to build mobile SPA, upload assets to S3, and generate template\n# MOBILE_S3_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_BUCKET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_ENDPOINT=https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# MOBILE_S3_REGION=auto\n# MOBILE_S3_PUBLIC_DOMAIN=https://cdn.example.com\n# MOBILE_S3_KEY_PREFIX=mobile/latest # optional, S3 key path prefix\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# 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# Auth Secret (use `openssl rand -base64 32` to generate)\n# AUTH_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# Require email verification before allowing users to sign in (default: false)\n# Set to '1' to force users to verify their email before signing in\n# AUTH_EMAIL_VERIFICATION=0\n\n# SSO Providers Configuration (for Better-Auth)\n# Comma-separated list of enabled OAuth providers\n# Supported providers: auth0, authelia, authentik, casdoor, cloudflare-zero-trust, cognito, generic-oidc, github, google, keycloak, logto, microsoft, microsoft-entra-id, okta, zitadel\n# Example: AUTH_SSO_PROVIDERS=google,github,auth0,microsoft-entra-id\n# AUTH_SSO_PROVIDERS=\n\n# Email whitelist for registration (comma-separated)\n# Supports full email (user@example.com) or domain (example.com)\n# Leave empty to allow all emails\n# AUTH_ALLOWED_EMAILS=example.com,admin@other.com\n\n# Disable email/password authentication (SSO-only mode)\n# Set to '1' to disable email/password sign-in and registration, only allowing SSO login\n# AUTH_DISABLE_EMAIL_PASSWORD=0\n\n# Google OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.cloud.google.com/apis/credentials\n# Authorized redirect URIs:\n# - Development: http://localhost:3210/api/auth/callback/google\n# - Production: https://yourdomain.com/api/auth/callback/google\n# GOOGLE_CLIENT_ID=xxxxx.apps.googleusercontent.com\n# GOOGLE_CLIENT_SECRET=GOCSPX-xxxxxxxxxxxxxxxxxxxx\n\n# GitHub OAuth Configuration (for Better-Auth)\n# Get credentials from: https://github.com/settings/developers\n# Create a new OAuth App with:\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/github\n# - Production: https://yourdomain.com/api/auth/callback/github\n# GITHUB_CLIENT_ID=Ov23xxxxxxxxxxxxx\n# GITHUB_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# AWS Cognito OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.aws.amazon.com/cognito\n# Setup steps:\n# 1. Create a User Pool with App Client\n# 2. Configure Hosted UI domain\n# 3. Enable \"Authorization code grant\" OAuth flow\n# 4. Set OAuth scopes: openid, profile, email\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/cognito\n# - Production: https://yourdomain.com/api/auth/callback/cognito\n# COGNITO_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxx\n# COGNITO_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# COGNITO_DOMAIN=your-app.auth.us-east-1.amazoncognito.com\n# COGNITO_REGION=us-east-1\n# COGNITO_USERPOOL_ID=us-east-1_xxxxxxxxx\n\n# Microsoft OAuth Configuration (for Better-Auth)\n# Get credentials from: https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade\n# Create a new App Registration in Microsoft Entra ID (Azure AD)\n# Authorized redirect URL:\n# - Development: http://localhost:3210/api/auth/callback/microsoft\n# - Production: https://yourdomain.com/api/auth/callback/microsoft\n# MICROSOFT_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n# MICROSOFT_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ########## Email Service ##############\n# #######################################\n\n# SMTP Server Configuration (required for email verification with Better-Auth)\n\n# SMTP server hostname (e.g., smtp.gmail.com, smtp.office365.com)\n# SMTP_HOST=smtp.example.com\n\n# SMTP server port (usually 587 for TLS, or 465 for SSL)\n# SMTP_PORT=587\n\n# Use secure connection (set to 'true' for port 465, 'false' for port 587)\n# SMTP_SECURE=false\n\n# SMTP authentication username (usually your email address)\n# SMTP_USER=your-email@example.com\n\n# SMTP authentication password (use app-specific password for Gmail)\n# SMTP_PASS=your-password-or-app-specific-password\n\n# Sender email address (optional, defaults to SMTP_USER)\n# Required for AWS SES where SMTP_USER is not a valid email address\n# SMTP_FROM=noreply@example.com\n\n# #######################################\n# ######### Server Database #############\n# #######################################\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# Embedding batch size for processing (default: 50)\n# EMBEDDING_BATCH_SIZE=50\n\n# Embedding concurrency for parallel processing (default: 10)\n# EMBEDDING_CONCURRENCY=10\n\n# #######################################\n# ######### MCP Service Config ##########\n# #######################################\n\n# MCP tool call timeout (milliseconds)\n# MCP_TOOL_TIMEOUT=60000\n\n# #######################################\n# ######### Klavis Service ##############\n# #######################################\n\n# Klavis API Key for accessing Strata hosted MCP servers\n# Get your API key from: https://klavis.io\n# IMPORTANT: This key is stored server-side only and NEVER exposed to the client\n# When this key is set, Klavis integration will be automatically enabled\n# KLAVIS_API_KEY=your_klavis_api_key_here\n"}, "0674eee0d472432327afb2fa2396335d52334bc9": {"t": 1785769823.9842663, "n": 12507, "h": "559d16ecf0519e98", "c": "# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n# #######################################\n# ########## Security Settings ###########\n# #######################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n# SSRF Protection Settings\n# Set to '1' to allow connections to private IP addresses (disable SSRF protection)\n# WARNING: Only enable this in trusted environments\n# Default is '0' (SSRF protection enabled)\n# SSRF_ALLOW_PRIVATE_IP_ADDRESS=0\n\n# Whitelist of allowed private IP addresses (comma-separated)\n# Only takes effect when SSRF_ALLOW_PRIVATE_IP_ADDRESS is '0'\n# Example: Allow specific internal servers while keeping SSRF protection\n# SSRF_ALLOW_IP_ADDRESS_LIST=192.168.1.100,10.0.0.50\n\n# #######################################\n# ########### Redis Settings ############\n# #######################################\n\n# Connection string for self-hosted Redis (Docker/K8s/managed). Use container hostname when running via docker-compose.\n# REDIS_URL=redis://localhost:6379\n\n# Optional database index.\n# REDIS_DATABASE=0\n\n# Optional authentication for managed Redis.\n# REDIS_USERNAME=default\n# REDIS_PASSWORD=yourpassword\n\n# Set to '1' to enforce TLS when connecting to managed Redis or rediss:// endpoints.\n# REDIS_TLS=0\n\n# Namespace prefix for cache/queue keys.\n# REDIS_PREFIX=lobechat\n\n# #######################################\n# ######### AI Provider Service #########\n# #######################################\n\n# ## OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=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# ## BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## FAL ###\n\n# FAL_API_KEY=fal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ######## AI Image Settings ############\n# #######################################\n\n# Default image generation count (range: 1-20, default: 4)\n# AI_IMAGE_DEFAULT_IMAGE_NUM=4\n\n# ## Nebius ###\n\n# NEBIUS_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## NewAPI Service ###\n\n# NEWAPI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# NEWAPI_PROXY_URL=https://your-newapi-server.com\n\n# ## Vercel AI Gateway ###\n\n# VERCELAIGATEWAY_API_KEY=your_vercel_ai_gateway_api_key\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# 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# Auth Secret (use `openssl rand -base64 32` to generate)\n# AUTH_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# Require email verification before allowing users to sign in (default: false)\n# Set to '1' to force users to verify their email before signing in\n# AUTH_EMAIL_VERIFICATION=0\n\n# SSO Providers Configuration (for Better-Auth)\n# Comma-separated list of enabled OAuth providers\n# Supported providers: auth0, authelia, authentik, casdoor, cloudflare-zero-trust, cognito, generic-oidc, github, google, keycloak, logto, microsoft, microsoft-entra-id, okta, zitadel\n# Example: AUTH_SSO_PROVIDERS=google,github,auth0,microsoft-entra-id\n# AUTH_SSO_PROVIDERS=\n\n# Email whitelist for registration (comma-separated)\n# Supports full email (user@example.com) or domain (example.com)\n# Leave empty to allow all emails\n# AUTH_ALLOWED_EMAILS=example.com,admin@other.com\n\n# Disable email/password authentication (SSO-only mode)\n# Set to '1' to disable email/password sign-in and registration, only allowing SSO login\n# AUTH_DISABLE_EMAIL_PASSWORD=0\n\n# Google OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.cloud.google.com/apis/credentials\n# Authorized redirect URIs:\n# - Development: http://localhost:3210/api/auth/callback/google\n# - Production: https://yourdomain.com/api/auth/callback/google\n# GOOGLE_CLIENT_ID=xxxxx.apps.googleusercontent.com\n# GOOGLE_CLIENT_SECRET=GOCSPX-xxxxxxxxxxxxxxxxxxxx\n\n# GitHub OAuth Configuration (for Better-Auth)\n# Get credentials from: https://github.com/settings/developers\n# Create a new OAuth App with:\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/github\n# - Production: https://yourdomain.com/api/auth/callback/github\n# GITHUB_CLIENT_ID=Ov23xxxxxxxxxxxxx\n# GITHUB_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# AWS Cognito OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.aws.amazon.com/cognito\n# Setup steps:\n# 1. Create a User Pool with App Client\n# 2. Configure Hosted UI domain\n# 3. Enable \"Authorization code grant\" OAuth flow\n# 4. Set OAuth scopes: openid, profile, email\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/cognito\n# - Production: https://yourdomain.com/api/auth/callback/cognito\n# COGNITO_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxx\n# COGNITO_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# COGNITO_DOMAIN=your-app.auth.us-east-1.amazoncognito.com\n# COGNITO_REGION=us-east-1\n# COGNITO_USERPOOL_ID=us-east-1_xxxxxxxxx\n\n# Microsoft OAuth Configuration (for Better-Auth)\n# Get credentials from: https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade\n# Create a new App Registration in Microsoft Entra ID (Azure AD)\n# Authorized redirect URL:\n# - Development: http://localhost:3210/api/auth/callback/microsoft\n# - Production: https://yourdomain.com/api/auth/callback/microsoft\n# MICROSOFT_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n# MICROSOFT_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ########## Email Service ##############\n# #######################################\n\n# SMTP Server Configuration (required for email verification with Better-Auth)\n\n# SMTP server hostname (e.g., smtp.gmail.com, smtp.office365.com)\n# SMTP_HOST=smtp.example.com\n\n# SMTP server port (usually 587 for TLS, or 465 for SSL)\n# SMTP_PORT=587\n\n# Use secure connection (set to 'true' for port 465, 'false' for port 587)\n# SMTP_SECURE=false\n\n# SMTP authentication username (usually your email address)\n# SMTP_USER=your-email@example.com\n\n# SMTP authentication password (use app-specific password for Gmail)\n# SMTP_PASS=your-password-or-app-specific-password\n\n# Sender email address (optional, defaults to SMTP_USER)\n# Required for AWS SES where SMTP_USER is not a valid email address\n# SMTP_FROM=noreply@example.com\n\n# #######################################\n# ######### Server Database #############\n# #######################################\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# Embedding batch size for processing (default: 50)\n# EMBEDDING_BATCH_SIZE=50\n\n# Embedding concurrency for parallel processing (default: 10)\n# EMBEDDING_CONCURRENCY=10\n\n# #######################################\n# ######### MCP Service Config ##########\n# #######################################\n\n# MCP tool call timeout (milliseconds)\n# MCP_TOOL_TIMEOUT=60000\n\n# #######################################\n# ######### Klavis Service ##############\n# #######################################\n\n# Klavis API Key for accessing Strata hosted MCP servers\n# Get your API key from: https://klavis.io\n# IMPORTANT: This key is stored server-side only and NEVER exposed to the client\n# When this key is set, Klavis integration will be automatically enabled\n# KLAVIS_API_KEY=your_klavis_api_key_here\n"}, "4a87b31246d4afec1f12bee09718f203edff7377": {"t": 1785769825.777107, "n": 12338, "h": "6c3327cd9eee30a9", "c": "# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n# #######################################\n# ########## Security Settings ###########\n# #######################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n# SSRF Protection Settings\n# Set to '1' to allow connections to private IP addresses (disable SSRF protection)\n# WARNING: Only enable this in trusted environments\n# Default is '0' (SSRF protection enabled)\n# SSRF_ALLOW_PRIVATE_IP_ADDRESS=0\n\n# Whitelist of allowed private IP addresses (comma-separated)\n# Only takes effect when SSRF_ALLOW_PRIVATE_IP_ADDRESS is '0'\n# Example: Allow specific internal servers while keeping SSRF protection\n# SSRF_ALLOW_IP_ADDRESS_LIST=192.168.1.100,10.0.0.50\n\n# #######################################\n# ########### Redis Settings ############\n# #######################################\n\n# Connection string for self-hosted Redis (Docker/K8s/managed). Use container hostname when running via docker-compose.\n# REDIS_URL=redis://localhost:6379\n\n# Optional database index.\n# REDIS_DATABASE=0\n\n# Optional authentication for managed Redis.\n# REDIS_USERNAME=default\n# REDIS_PASSWORD=yourpassword\n\n# Set to '1' to enforce TLS when connecting to managed Redis or rediss:// endpoints.\n# REDIS_TLS=0\n\n# Namespace prefix for cache/queue keys.\n# REDIS_PREFIX=lobechat\n\n# #######################################\n# ######### AI Provider Service #########\n# #######################################\n\n# ## OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=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# ## BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## FAL ###\n\n# FAL_API_KEY=fal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ######## AI Image Settings ############\n# #######################################\n\n# Default image generation count (range: 1-20, default: 4)\n# AI_IMAGE_DEFAULT_IMAGE_NUM=4\n\n# ## Nebius ###\n\n# NEBIUS_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## NewAPI Service ###\n\n# NEWAPI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# NEWAPI_PROXY_URL=https://your-newapi-server.com\n\n# ## Vercel AI Gateway ###\n\n# VERCELAIGATEWAY_API_KEY=your_vercel_ai_gateway_api_key\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# 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# Auth Secret (use `openssl rand -base64 32` to generate)\n# AUTH_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# Require email verification before allowing users to sign in (default: false)\n# Set to '1' to force users to verify their email before signing in\n# AUTH_EMAIL_VERIFICATION=0\n\n# SSO Providers Configuration (for Better-Auth)\n# Comma-separated list of enabled OAuth providers\n# Supported providers: auth0, authelia, authentik, casdoor, cloudflare-zero-trust, cognito, generic-oidc, github, google, keycloak, logto, microsoft, microsoft-entra-id, okta, zitadel\n# Example: AUTH_SSO_PROVIDERS=google,github,auth0,microsoft-entra-id\n# AUTH_SSO_PROVIDERS=\n\n# Email whitelist for registration (comma-separated)\n# Supports full email (user@example.com) or domain (example.com)\n# Leave empty to allow all emails\n# AUTH_ALLOWED_EMAILS=example.com,admin@other.com\n\n# Disable email/password authentication (SSO-only mode)\n# Set to '1' to disable email/password sign-in and registration, only allowing SSO login\n# AUTH_DISABLE_EMAIL_PASSWORD=0\n\n# Google OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.cloud.google.com/apis/credentials\n# Authorized redirect URIs:\n# - Development: http://localhost:3210/api/auth/callback/google\n# - Production: https://yourdomain.com/api/auth/callback/google\n# GOOGLE_CLIENT_ID=xxxxx.apps.googleusercontent.com\n# GOOGLE_CLIENT_SECRET=GOCSPX-xxxxxxxxxxxxxxxxxxxx\n\n# GitHub OAuth Configuration (for Better-Auth)\n# Get credentials from: https://github.com/settings/developers\n# Create a new OAuth App with:\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/github\n# - Production: https://yourdomain.com/api/auth/callback/github\n# GITHUB_CLIENT_ID=Ov23xxxxxxxxxxxxx\n# GITHUB_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# AWS Cognito OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.aws.amazon.com/cognito\n# Setup steps:\n# 1. Create a User Pool with App Client\n# 2. Configure Hosted UI domain\n# 3. Enable \"Authorization code grant\" OAuth flow\n# 4. Set OAuth scopes: openid, profile, email\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/cognito\n# - Production: https://yourdomain.com/api/auth/callback/cognito\n# COGNITO_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxx\n# COGNITO_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# COGNITO_DOMAIN=your-app.auth.us-east-1.amazoncognito.com\n# COGNITO_REGION=us-east-1\n# COGNITO_USERPOOL_ID=us-east-1_xxxxxxxxx\n\n# Microsoft OAuth Configuration (for Better-Auth)\n# Get credentials from: https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade\n# Create a new App Registration in Microsoft Entra ID (Azure AD)\n# Authorized redirect URL:\n# - Development: http://localhost:3210/api/auth/callback/microsoft\n# - Production: https://yourdomain.com/api/auth/callback/microsoft\n# MICROSOFT_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n# MICROSOFT_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ########## Email Service ##############\n# #######################################\n\n# SMTP Server Configuration (required for email verification with Better-Auth)\n\n# SMTP server hostname (e.g., smtp.gmail.com, smtp.office365.com)\n# SMTP_HOST=smtp.example.com\n\n# SMTP server port (usually 587 for TLS, or 465 for SSL)\n# SMTP_PORT=587\n\n# Use secure connection (set to 'true' for port 465, 'false' for port 587)\n# SMTP_SECURE=false\n\n# SMTP authentication username (usually your email address)\n# SMTP_USER=your-email@example.com\n\n# SMTP authentication password (use app-specific password for Gmail)\n# SMTP_PASS=your-password-or-app-specific-password\n\n# Sender email address (optional, defaults to SMTP_USER)\n# Required for AWS SES where SMTP_USER is not a valid email address\n# SMTP_FROM=noreply@example.com\n\n# #######################################\n# ######### Server Database #############\n# #######################################\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\n# #######################################\n# ######### Klavis Service ##############\n# #######################################\n\n# Klavis API Key for accessing Strata hosted MCP servers\n# Get your API key from: https://klavis.io\n# IMPORTANT: This key is stored server-side only and NEVER exposed to the client\n# When this key is set, Klavis integration will be automatically enabled\n# KLAVIS_API_KEY=your_klavis_api_key_here\n"}, "f3210a3f577b5955c0776c3f3ff2867e80d158cd": {"t": 1785769827.223529, "n": 12436, "h": "8564c0b3ca7d7c66", "c": "# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n# #######################################\n# ########## Security Settings ###########\n# #######################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n# SSRF Protection Settings\n# Set to '1' to allow connections to private IP addresses (disable SSRF protection)\n# WARNING: Only enable this in trusted environments\n# Default is '0' (SSRF protection enabled)\n# SSRF_ALLOW_PRIVATE_IP_ADDRESS=0\n\n# Whitelist of allowed private IP addresses (comma-separated)\n# Only takes effect when SSRF_ALLOW_PRIVATE_IP_ADDRESS is '0'\n# Example: Allow specific internal servers while keeping SSRF protection\n# SSRF_ALLOW_IP_ADDRESS_LIST=192.168.1.100,10.0.0.50\n\n# #######################################\n# ########### Redis Settings ############\n# #######################################\n\n# Connection string for self-hosted Redis (Docker/K8s/managed). Use container hostname when running via docker-compose.\n# REDIS_URL=redis://localhost:6379\n\n# Optional database index.\n# REDIS_DATABASE=0\n\n# Optional authentication for managed Redis.\n# REDIS_USERNAME=default\n# REDIS_PASSWORD=yourpassword\n\n# Set to '1' to enforce TLS when connecting to managed Redis or rediss:// endpoints.\n# REDIS_TLS=0\n\n# Namespace prefix for cache/queue keys.\n# REDIS_PREFIX=lobechat\n\n# #######################################\n# ######### AI Provider Service #########\n# #######################################\n\n# ## OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=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# ## BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## FAL ###\n\n# FAL_API_KEY=fal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ######## AI Image Settings ############\n# #######################################\n\n# Default image generation count (range: 1-20, default: 4)\n# AI_IMAGE_DEFAULT_IMAGE_NUM=4\n\n# ## Nebius ###\n\n# NEBIUS_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## NewAPI Service ###\n\n# NEWAPI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# NEWAPI_PROXY_URL=https://your-newapi-server.com\n\n# ## Vercel AI Gateway ###\n\n# VERCELAIGATEWAY_API_KEY=your_vercel_ai_gateway_api_key\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# Auth Secret (use `openssl rand -base64 32` to generate)\n# AUTH_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# Require email verification before allowing users to sign in (default: false)\n# Set to '1' to force users to verify their email before signing in\n# AUTH_EMAIL_VERIFICATION=0\n\n# SSO Providers Configuration (for Better-Auth)\n# Comma-separated list of enabled OAuth providers\n# Supported providers: auth0, authelia, authentik, casdoor, cloudflare-zero-trust, cognito, generic-oidc, github, google, keycloak, logto, microsoft, microsoft-entra-id, okta, zitadel\n# Example: AUTH_SSO_PROVIDERS=google,github,auth0,microsoft-entra-id\n# AUTH_SSO_PROVIDERS=\n\n# Email whitelist for registration (comma-separated)\n# Supports full email (user@example.com) or domain (example.com)\n# Leave empty to allow all emails\n# AUTH_ALLOWED_EMAILS=example.com,admin@other.com\n\n# Disable email/password authentication (SSO-only mode)\n# Set to '1' to disable email/password sign-in and registration, only allowing SSO login\n# AUTH_DISABLE_EMAIL_PASSWORD=0\n\n# Google OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.cloud.google.com/apis/credentials\n# Authorized redirect URIs:\n# - Development: http://localhost:3210/api/auth/callback/google\n# - Production: https://yourdomain.com/api/auth/callback/google\n# GOOGLE_CLIENT_ID=xxxxx.apps.googleusercontent.com\n# GOOGLE_CLIENT_SECRET=GOCSPX-xxxxxxxxxxxxxxxxxxxx\n\n# GitHub OAuth Configuration (for Better-Auth)\n# Get credentials from: https://github.com/settings/developers\n# Create a new OAuth App with:\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/github\n# - Production: https://yourdomain.com/api/auth/callback/github\n# GITHUB_CLIENT_ID=Ov23xxxxxxxxxxxxx\n# GITHUB_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# AWS Cognito OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.aws.amazon.com/cognito\n# Setup steps:\n# 1. Create a User Pool with App Client\n# 2. Configure Hosted UI domain\n# 3. Enable \"Authorization code grant\" OAuth flow\n# 4. Set OAuth scopes: openid, profile, email\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/cognito\n# - Production: https://yourdomain.com/api/auth/callback/cognito\n# COGNITO_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxx\n# COGNITO_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# COGNITO_DOMAIN=your-app.auth.us-east-1.amazoncognito.com\n# COGNITO_REGION=us-east-1\n# COGNITO_USERPOOL_ID=us-east-1_xxxxxxxxx\n\n# Microsoft OAuth Configuration (for Better-Auth)\n# Get credentials from: https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade\n# Create a new App Registration in Microsoft Entra ID (Azure AD)\n# Authorized redirect URL:\n# - Development: http://localhost:3210/api/auth/callback/microsoft\n# - Production: https://yourdomain.com/api/auth/callback/microsoft\n# MICROSOFT_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n# MICROSOFT_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ########## Email Service ##############\n# #######################################\n\n# SMTP Server Configuration (required for email verification with Better-Auth)\n\n# SMTP server hostname (e.g., smtp.gmail.com, smtp.office365.com)\n# SMTP_HOST=smtp.example.com\n\n# SMTP server port (usually 587 for TLS, or 465 for SSL)\n# SMTP_PORT=587\n\n# Use secure connection (set to 'true' for port 465, 'false' for port 587)\n# SMTP_SECURE=false\n\n# SMTP authentication username (usually your email address)\n# SMTP_USER=your-email@example.com\n\n# SMTP authentication password (use app-specific password for Gmail)\n# SMTP_PASS=your-password-or-app-specific-password\n\n# Sender email address (optional, defaults to SMTP_USER)\n# Required for AWS SES where SMTP_USER is not a valid email address\n# SMTP_FROM=noreply@example.com\n\n# #######################################\n# ######### Server Database #############\n# #######################################\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\n# #######################################\n# ######### Klavis Service ##############\n# #######################################\n\n# Klavis API Key for accessing Strata hosted MCP servers\n# Get your API key from: https://klavis.io\n# IMPORTANT: This key is stored server-side only and NEVER exposed to the client\n# When this key is set, Klavis integration will be automatically enabled\n# KLAVIS_API_KEY=your_klavis_api_key_here\n"}, "1eff8646f73eb74edba63a9d5a7f18e5bc0f0320": {"t": 1785769828.61443, "n": 12438, "h": "70cc9684c577939a", "c": "# add a access code to lock your lobe-chat application, you can set a long password to avoid leaking. If this value contains a comma, it is a password array.\n# ACCESS_CODE=lobe66\n\n# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n# #######################################\n# ########## Security Settings ###########\n# #######################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n# SSRF Protection Settings\n# Set to '1' to allow connections to private IP addresses (disable SSRF protection)\n# WARNING: Only enable this in trusted environments\n# Default is '0' (SSRF protection enabled)\n# SSRF_ALLOW_PRIVATE_IP_ADDRESS=0\n\n# Whitelist of allowed private IP addresses (comma-separated)\n# Only takes effect when SSRF_ALLOW_PRIVATE_IP_ADDRESS is '0'\n# Example: Allow specific internal servers while keeping SSRF protection\n# SSRF_ALLOW_IP_ADDRESS_LIST=192.168.1.100,10.0.0.50\n\n# #######################################\n# ########### Redis Settings ############\n# #######################################\n\n# Connection string for self-hosted Redis (Docker/K8s/managed). Use container hostname when running via docker-compose.\n# REDIS_URL=redis://localhost:6379\n\n# Optional database index.\n# REDIS_DATABASE=0\n\n# Optional authentication for managed Redis.\n# REDIS_USERNAME=default\n# REDIS_PASSWORD=yourpassword\n\n# Set to '1' to enforce TLS when connecting to managed Redis or rediss:// endpoints.\n# REDIS_TLS=0\n\n# Namespace prefix for cache/queue keys.\n# REDIS_PREFIX=lobechat\n\n# #######################################\n# ######### AI Provider Service #########\n# #######################################\n\n# ## OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=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# ## BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## FAL ###\n\n# FAL_API_KEY=fal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ######## AI Image Settings ############\n# #######################################\n\n# Default image generation count (range: 1-20, default: 4)\n# AI_IMAGE_DEFAULT_IMAGE_NUM=4\n\n# ## Nebius ###\n\n# NEBIUS_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## NewAPI Service ###\n\n# NEWAPI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# NEWAPI_PROXY_URL=https://your-newapi-server.com\n\n# ## Vercel AI Gateway ###\n\n# VERCELAIGATEWAY_API_KEY=your_vercel_ai_gateway_api_key\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# Auth Secret (use `openssl rand -base64 32` to generate)\n# AUTH_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# Require email verification before allowing users to sign in (default: false)\n# Set to '1' to force users to verify their email before signing in\n# AUTH_EMAIL_VERIFICATION=0\n\n# SSO Providers Configuration (for Better-Auth)\n# Comma-separated list of enabled OAuth providers\n# Supported providers: auth0, authelia, authentik, casdoor, cloudflare-zero-trust, cognito, generic-oidc, github, google, keycloak, logto, microsoft, microsoft-entra-id, okta, zitadel\n# Example: AUTH_SSO_PROVIDERS=google,github,auth0,microsoft-entra-id\n# AUTH_SSO_PROVIDERS=\n\n# Email whitelist for registration (comma-separated)\n# Supports full email (user@example.com) or domain (example.com)\n# Leave empty to allow all emails\n# AUTH_ALLOWED_EMAILS=example.com,admin@other.com\n\n# Google OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.cloud.google.com/apis/credentials\n# Authorized redirect URIs:\n# - Development: http://localhost:3210/api/auth/callback/google\n# - Production: https://yourdomain.com/api/auth/callback/google\n# GOOGLE_CLIENT_ID=xxxxx.apps.googleusercontent.com\n# GOOGLE_CLIENT_SECRET=GOCSPX-xxxxxxxxxxxxxxxxxxxx\n\n# GitHub OAuth Configuration (for Better-Auth)\n# Get credentials from: https://github.com/settings/developers\n# Create a new OAuth App with:\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/github\n# - Production: https://yourdomain.com/api/auth/callback/github\n# GITHUB_CLIENT_ID=Ov23xxxxxxxxxxxxx\n# GITHUB_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# AWS Cognito OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.aws.amazon.com/cognito\n# Setup steps:\n# 1. Create a User Pool with App Client\n# 2. Configure Hosted UI domain\n# 3. Enable \"Authorization code grant\" OAuth flow\n# 4. Set OAuth scopes: openid, profile, email\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/cognito\n# - Production: https://yourdomain.com/api/auth/callback/cognito\n# COGNITO_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxx\n# COGNITO_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# COGNITO_DOMAIN=your-app.auth.us-east-1.amazoncognito.com\n# COGNITO_REGION=us-east-1\n# COGNITO_USERPOOL_ID=us-east-1_xxxxxxxxx\n\n# Microsoft OAuth Configuration (for Better-Auth)\n# Get credentials from: https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade\n# Create a new App Registration in Microsoft Entra ID (Azure AD)\n# Authorized redirect URL:\n# - Development: http://localhost:3210/api/auth/callback/microsoft\n# - Production: https://yourdomain.com/api/auth/callback/microsoft\n# MICROSOFT_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n# MICROSOFT_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ########## Email Service ##############\n# #######################################\n\n# SMTP Server Configuration (required for email verification with Better-Auth)\n\n# SMTP server hostname (e.g., smtp.gmail.com, smtp.office365.com)\n# SMTP_HOST=smtp.example.com\n\n# SMTP server port (usually 587 for TLS, or 465 for SSL)\n# SMTP_PORT=587\n\n# Use secure connection (set to 'true' for port 465, 'false' for port 587)\n# SMTP_SECURE=false\n\n# SMTP authentication username (usually your email address)\n# SMTP_USER=your-email@example.com\n\n# SMTP authentication password (use app-specific password for Gmail)\n# SMTP_PASS=your-password-or-app-specific-password\n\n# Sender email address (optional, defaults to SMTP_USER)\n# Required for AWS SES where SMTP_USER is not a valid email address\n# SMTP_FROM=noreply@example.com\n\n# #######################################\n# ######### Server Database #############\n# #######################################\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\n# #######################################\n# ######### Klavis Service ##############\n# #######################################\n\n# Klavis API Key for accessing Strata hosted MCP servers\n# Get your API key from: https://klavis.io\n# IMPORTANT: This key is stored server-side only and NEVER exposed to the client\n# When this key is set, Klavis integration will be automatically enabled\n# KLAVIS_API_KEY=your_klavis_api_key_here\n"}, "395595a2c82c340f793b8bd40725f67c42e25af1": {"t": 1785769830.226831, "n": 12399, "h": "da6c330ae4576a56", "c": "# add a access code to lock your lobe-chat application, you can set a long password to avoid leaking. If this value contains a comma, it is a password array.\n# ACCESS_CODE=lobe66\n\n# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n# #######################################\n# ########## Security Settings ###########\n# #######################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n# SSRF Protection Settings\n# Set to '1' to allow connections to private IP addresses (disable SSRF protection)\n# WARNING: Only enable this in trusted environments\n# Default is '0' (SSRF protection enabled)\n# SSRF_ALLOW_PRIVATE_IP_ADDRESS=0\n\n# Whitelist of allowed private IP addresses (comma-separated)\n# Only takes effect when SSRF_ALLOW_PRIVATE_IP_ADDRESS is '0'\n# Example: Allow specific internal servers while keeping SSRF protection\n# SSRF_ALLOW_IP_ADDRESS_LIST=192.168.1.100,10.0.0.50\n\n########################################\n############ Redis Settings ############\n########################################\n\n# Connection string for self-hosted Redis (Docker/K8s/managed). Use container hostname when running via docker-compose.\n# REDIS_URL=redis://localhost:6379\n\n# Optional database index.\n# REDIS_DATABASE=0\n\n# Optional authentication for managed Redis.\n# REDIS_USERNAME=default\n# REDIS_PASSWORD=yourpassword\n\n# Set to '1' to enforce TLS when connecting to managed Redis or rediss:// endpoints.\n# REDIS_TLS=0\n\n# Namespace prefix for cache/queue keys.\n# REDIS_PREFIX=lobechat\n\n########################################\n########## AI Provider Service #########\n########################################\n\n# ## OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=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# ## BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## FAL ###\n\n# FAL_API_KEY=fal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ######## AI Image Settings ############\n# #######################################\n\n# Default image generation count (range: 1-20, default: 4)\n# AI_IMAGE_DEFAULT_IMAGE_NUM=4\n\n# ## Nebius ###\n\n# NEBIUS_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## NewAPI Service ###\n\n# NEWAPI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# NEWAPI_PROXY_URL=https://your-newapi-server.com\n\n# ## Vercel AI Gateway ###\n\n# VERCELAIGATEWAY_API_KEY=your_vercel_ai_gateway_api_key\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# 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# Better-Auth related configurations\n# NEXT_PUBLIC_ENABLE_BETTER_AUTH=1\n\n# Auth Secret (use `openssl rand -base64 32` to generate)\n# Shared between Better-Auth and Next-Auth\n# AUTH_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# Require email verification before allowing users to sign in (default: false)\n# Set to '1' to force users to verify their email before signing in\n# NEXT_PUBLIC_AUTH_EMAIL_VERIFICATION=0\n\n# SSO Providers Configuration (for Better-Auth)\n# Comma-separated list of enabled OAuth providers\n# Supported providers: auth0, authelia, authentik, casdoor, cloudflare-zero-trust, cognito, generic-oidc, github, google, keycloak, logto, microsoft, microsoft-entra-id, okta, zitadel\n# Example: AUTH_SSO_PROVIDERS=google,github,auth0,microsoft-entra-id\n# AUTH_SSO_PROVIDERS=\n\n# Google OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.cloud.google.com/apis/credentials\n# Authorized redirect URIs:\n# - Development: http://localhost:3210/api/auth/callback/google\n# - Production: https://yourdomain.com/api/auth/callback/google\n# GOOGLE_CLIENT_ID=xxxxx.apps.googleusercontent.com\n# GOOGLE_CLIENT_SECRET=GOCSPX-xxxxxxxxxxxxxxxxxxxx\n\n# GitHub OAuth Configuration (for Better-Auth)\n# Get credentials from: https://github.com/settings/developers\n# Create a new OAuth App with:\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/github\n# - Production: https://yourdomain.com/api/auth/callback/github\n# GITHUB_CLIENT_ID=Ov23xxxxxxxxxxxxx\n# GITHUB_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# AWS Cognito OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.aws.amazon.com/cognito\n# Setup steps:\n# 1. Create a User Pool with App Client\n# 2. Configure Hosted UI domain\n# 3. Enable \"Authorization code grant\" OAuth flow\n# 4. Set OAuth scopes: openid, profile, email\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/cognito\n# - Production: https://yourdomain.com/api/auth/callback/cognito\n# COGNITO_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxx\n# COGNITO_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# COGNITO_DOMAIN=your-app.auth.us-east-1.amazoncognito.com\n# COGNITO_REGION=us-east-1\n# COGNITO_USERPOOL_ID=us-east-1_xxxxxxxxx\n\n# Microsoft OAuth Configuration (for Better-Auth)\n# Get credentials from: https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade\n# Create a new App Registration in Microsoft Entra ID (Azure AD)\n# Authorized redirect URL:\n# - Development: http://localhost:3210/api/auth/callback/microsoft\n# - Production: https://yourdomain.com/api/auth/callback/microsoft\n# MICROSOFT_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n# MICROSOFT_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ########## Email Service ##############\n# #######################################\n\n# SMTP Server Configuration (required for email verification with Better-Auth)\n\n# SMTP server hostname (e.g., smtp.gmail.com, smtp.office365.com)\n# SMTP_HOST=smtp.example.com\n\n# SMTP server port (usually 587 for TLS, or 465 for SSL)\n# SMTP_PORT=587\n\n# Use secure connection (set to 'true' for port 465, 'false' for port 587)\n# SMTP_SECURE=false\n\n# SMTP authentication username (usually your email address)\n# SMTP_USER=your-email@example.com\n\n# SMTP authentication password (use app-specific password for Gmail)\n# SMTP_PASS=your-password-or-app-specific-password\n\n# #######################################\n# ######### Server Database #############\n# #######################################\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\n# #######################################\n# ######### Klavis Service ##############\n# #######################################\n\n# Klavis API Key for accessing Strata hosted MCP servers\n# Get your API key from: https://klavis.io\n# IMPORTANT: This key is stored server-side only and NEVER exposed to the client\n# When this key is set, Klavis integration will be automatically enabled\n# KLAVIS_API_KEY=your_klavis_api_key_here\n"}, "c0f98751954bf648d555360fc29e248c2276d43a": {"t": 1785769832.982799, "n": 12974, "h": "18b9200157ad3187", "c": "# add a access code to lock your lobe-chat application, you can set a long password to avoid leaking. If this value contains a comma, it is a password array.\n# ACCESS_CODE=lobe66\n\n# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n# #######################################\n# ########## Security Settings ###########\n# #######################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n# SSRF Protection Settings\n# Set to '1' to allow connections to private IP addresses (disable SSRF protection)\n# WARNING: Only enable this in trusted environments\n# Default is '0' (SSRF protection enabled)\n# SSRF_ALLOW_PRIVATE_IP_ADDRESS=0\n\n# Whitelist of allowed private IP addresses (comma-separated)\n# Only takes effect when SSRF_ALLOW_PRIVATE_IP_ADDRESS is '0'\n# Example: Allow specific internal servers while keeping SSRF protection\n# SSRF_ALLOW_IP_ADDRESS_LIST=192.168.1.100,10.0.0.50\n\n########################################\n############ Redis Settings ############\n########################################\n\n# Connection string for self-hosted Redis (Docker/K8s/managed). Use container hostname when running via docker-compose.\n# REDIS_URL=redis://localhost:6379\n\n# Optional database index.\n# REDIS_DATABASE=0\n\n# Optional authentication for managed Redis.\n# REDIS_USERNAME=default\n# REDIS_PASSWORD=yourpassword\n\n# Set to '1' to enforce TLS when connecting to managed Redis or rediss:// endpoints.\n# REDIS_TLS=0\n\n# Namespace prefix for cache/queue keys.\n# REDIS_PREFIX=lobechat\n\n########################################\n########## AI Provider Service #########\n########################################\n\n# ## OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=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# ## BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## FAL ###\n\n# FAL_API_KEY=fal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ######## AI Image Settings ############\n# #######################################\n\n# Default image generation count (range: 1-20, default: 4)\n# AI_IMAGE_DEFAULT_IMAGE_NUM=4\n\n# ## Nebius ###\n\n# NEBIUS_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## NewAPI Service ###\n\n# NEWAPI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# NEWAPI_PROXY_URL=https://your-newapi-server.com\n\n# ## Vercel AI Gateway ###\n\n# VERCELAIGATEWAY_API_KEY=your_vercel_ai_gateway_api_key\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# Clear allow origin https://clerk.com/docs/guides/dashboard/dns-domains/satellite-domains\n# Authentication across different domains , use,to splite different origin\n# NEXT_PUBLIC_CLERK_AUTH_ALLOW_ORIGINS='https://market.lobehub.com,https://lobehub.com'\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# Better-Auth related configurations\n# NEXT_PUBLIC_ENABLE_BETTER_AUTH=1\n\n# Auth Secret (use `openssl rand -base64 32` to generate)\n# Shared between Better-Auth and Next-Auth\n# AUTH_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# Require email verification before allowing users to sign in (default: false)\n# Set to '1' to force users to verify their email before signing in\n# NEXT_PUBLIC_AUTH_EMAIL_VERIFICATION=0\n\n# SSO Providers Configuration (for Better-Auth)\n# Comma-separated list of enabled OAuth providers\n# Supported providers: auth0, authelia, authentik, casdoor, cloudflare-zero-trust, cognito, generic-oidc, github, google, keycloak, logto, microsoft, microsoft-entra-id, okta, zitadel\n# Example: AUTH_SSO_PROVIDERS=google,github,auth0,microsoft-entra-id\n# AUTH_SSO_PROVIDERS=\n\n# Google OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.cloud.google.com/apis/credentials\n# Authorized redirect URIs:\n# - Development: http://localhost:3210/api/auth/callback/google\n# - Production: https://yourdomain.com/api/auth/callback/google\n# GOOGLE_CLIENT_ID=xxxxx.apps.googleusercontent.com\n# GOOGLE_CLIENT_SECRET=GOCSPX-xxxxxxxxxxxxxxxxxxxx\n\n# GitHub OAuth Configuration (for Better-Auth)\n# Get credentials from: https://github.com/settings/developers\n# Create a new OAuth App with:\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/github\n# - Production: https://yourdomain.com/api/auth/callback/github\n# GITHUB_CLIENT_ID=Ov23xxxxxxxxxxxxx\n# GITHUB_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# AWS Cognito OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.aws.amazon.com/cognito\n# Setup steps:\n# 1. Create a User Pool with App Client\n# 2. Configure Hosted UI domain\n# 3. Enable \"Authorization code grant\" OAuth flow\n# 4. Set OAuth scopes: openid, profile, email\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/cognito\n# - Production: https://yourdomain.com/api/auth/callback/cognito\n# COGNITO_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxx\n# COGNITO_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# COGNITO_DOMAIN=your-app.auth.us-east-1.amazoncognito.com\n# COGNITO_REGION=us-east-1\n# COGNITO_USERPOOL_ID=us-east-1_xxxxxxxxx\n\n# Microsoft OAuth Configuration (for Better-Auth)\n# Get credentials from: https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade\n# Create a new App Registration in Microsoft Entra ID (Azure AD)\n# Authorized redirect URL:\n# - Development: http://localhost:3210/api/auth/callback/microsoft\n# - Production: https://yourdomain.com/api/auth/callback/microsoft\n# MICROSOFT_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n# MICROSOFT_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ########## Email Service ##############\n# #######################################\n\n# SMTP Server Configuration (required for email verification with Better-Auth)\n\n# SMTP server hostname (e.g., smtp.gmail.com, smtp.office365.com)\n# SMTP_HOST=smtp.example.com\n\n# SMTP server port (usually 587 for TLS, or 465 for SSL)\n# SMTP_PORT=587\n\n# Use secure connection (set to 'true' for port 465, 'false' for port 587)\n# SMTP_SECURE=false\n\n# SMTP authentication username (usually your email address)\n# SMTP_USER=your-email@example.com\n\n# SMTP authentication password (use app-specific password for Gmail)\n# SMTP_PASS=your-password-or-app-specific-password\n\n# #######################################\n# ######### Server Database #############\n# #######################################\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\n# #######################################\n# ######### Klavis Service ##############\n# #######################################\n\n# Klavis API Key for accessing Strata hosted MCP servers\n# Get your API key from: https://klavis.io\n# IMPORTANT: This key is stored server-side only and NEVER exposed to the client\n# When this key is set, Klavis integration will be automatically enabled\n# KLAVIS_API_KEY=your_klavis_api_key_here\n"}, "e3ec79e28d0e570c4e6d9fa940b6b36477fd611a": {"t": 1785769834.5399528, "n": 13082, "h": "099efba357bd52a8", "c": "# add a access code to lock your lobe-chat application, you can set a long password to avoid leaking. If this value contains a comma, it is a password array.\n# ACCESS_CODE=lobe66\n\n# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n# #######################################\n# ########## Security Settings ###########\n# #######################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n# SSRF Protection Settings\n# Set to '1' to allow connections to private IP addresses (disable SSRF protection)\n# WARNING: Only enable this in trusted environments\n# Default is '0' (SSRF protection enabled)\n# SSRF_ALLOW_PRIVATE_IP_ADDRESS=0\n\n# Whitelist of allowed private IP addresses (comma-separated)\n# Only takes effect when SSRF_ALLOW_PRIVATE_IP_ADDRESS is '0'\n# Example: Allow specific internal servers while keeping SSRF protection\n# SSRF_ALLOW_IP_ADDRESS_LIST=192.168.1.100,10.0.0.50\n\n########################################\n############ Redis Settings ############\n########################################\n\n# Connection string for self-hosted Redis (Docker/K8s/managed). Use container hostname when running via docker-compose.\n# REDIS_URL=redis://localhost:6379\n\n# Optional database index.\n# REDIS_DATABASE=0\n\n# Optional authentication for managed Redis.\n# REDIS_USERNAME=default\n# REDIS_PASSWORD=yourpassword\n\n# Set to '1' to enforce TLS when connecting to managed Redis or rediss:// endpoints.\n# REDIS_TLS=0\n\n# Namespace prefix for cache/queue keys.\n# REDIS_PREFIX=lobechat\n\n########################################\n########## AI Provider Service #########\n########################################\n\n# ## OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=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# ## BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## FAL ###\n\n# FAL_API_KEY=fal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ######## AI Image Settings ############\n# #######################################\n\n# Default image generation count (range: 1-20, default: 4)\n# AI_IMAGE_DEFAULT_IMAGE_NUM=4\n\n# ## Nebius ###\n\n# NEBIUS_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## NewAPI Service ###\n\n# NEWAPI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# NEWAPI_PROXY_URL=https://your-newapi-server.com\n\n# ## Vercel AI Gateway ###\n\n# VERCELAIGATEWAY_API_KEY=your_vercel_ai_gateway_api_key\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# Clear allow origin https://clerk.com/docs/guides/dashboard/dns-domains/satellite-domains\n# Authentication across different domains , use,to splite different origin\n# NEXT_PUBLIC_CLERK_AUTH_ALLOW_ORIGINS='https://market.lobehub.com,https://lobehub.com'\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# Better-Auth related configurations\n# NEXT_PUBLIC_ENABLE_BETTER_AUTH=1\n\n# Auth Secret (use `openssl rand -base64 32` to generate)\n# Shared between Better-Auth and Next-Auth\n# AUTH_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# Auth URL (accessible from browser, optional if same domain)\n# NEXT_PUBLIC_AUTH_URL=http://localhost:3210\n\n# Require email verification before allowing users to sign in (default: false)\n# Set to '1' to force users to verify their email before signing in\n# NEXT_PUBLIC_AUTH_EMAIL_VERIFICATION=0\n\n# SSO Providers Configuration (for Better-Auth)\n# Comma-separated list of enabled OAuth providers\n# Supported providers: auth0, authelia, authentik, casdoor, cloudflare-zero-trust, cognito, generic-oidc, github, google, keycloak, logto, microsoft, microsoft-entra-id, okta, zitadel\n# Example: AUTH_SSO_PROVIDERS=google,github,auth0,microsoft-entra-id\n# AUTH_SSO_PROVIDERS=\n\n# Google OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.cloud.google.com/apis/credentials\n# Authorized redirect URIs:\n# - Development: http://localhost:3210/api/auth/callback/google\n# - Production: https://yourdomain.com/api/auth/callback/google\n# GOOGLE_CLIENT_ID=xxxxx.apps.googleusercontent.com\n# GOOGLE_CLIENT_SECRET=GOCSPX-xxxxxxxxxxxxxxxxxxxx\n\n# GitHub OAuth Configuration (for Better-Auth)\n# Get credentials from: https://github.com/settings/developers\n# Create a new OAuth App with:\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/github\n# - Production: https://yourdomain.com/api/auth/callback/github\n# GITHUB_CLIENT_ID=Ov23xxxxxxxxxxxxx\n# GITHUB_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# AWS Cognito OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.aws.amazon.com/cognito\n# Setup steps:\n# 1. Create a User Pool with App Client\n# 2. Configure Hosted UI domain\n# 3. Enable \"Authorization code grant\" OAuth flow\n# 4. Set OAuth scopes: openid, profile, email\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/cognito\n# - Production: https://yourdomain.com/api/auth/callback/cognito\n# COGNITO_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxx\n# COGNITO_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# COGNITO_DOMAIN=your-app.auth.us-east-1.amazoncognito.com\n# COGNITO_REGION=us-east-1\n# COGNITO_USERPOOL_ID=us-east-1_xxxxxxxxx\n\n# Microsoft OAuth Configuration (for Better-Auth)\n# Get credentials from: https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade\n# Create a new App Registration in Microsoft Entra ID (Azure AD)\n# Authorized redirect URL:\n# - Development: http://localhost:3210/api/auth/callback/microsoft\n# - Production: https://yourdomain.com/api/auth/callback/microsoft\n# MICROSOFT_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n# MICROSOFT_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ########## Email Service ##############\n# #######################################\n\n# SMTP Server Configuration (required for email verification with Better-Auth)\n\n# SMTP server hostname (e.g., smtp.gmail.com, smtp.office365.com)\n# SMTP_HOST=smtp.example.com\n\n# SMTP server port (usually 587 for TLS, or 465 for SSL)\n# SMTP_PORT=587\n\n# Use secure connection (set to 'true' for port 465, 'false' for port 587)\n# SMTP_SECURE=false\n\n# SMTP authentication username (usually your email address)\n# SMTP_USER=your-email@example.com\n\n# SMTP authentication password (use app-specific password for Gmail)\n# SMTP_PASS=your-password-or-app-specific-password\n\n# #######################################\n# ######### Server Database #############\n# #######################################\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\n# #######################################\n# ######### Klavis Service ##############\n# #######################################\n\n# Klavis API Key for accessing Strata hosted MCP servers\n# Get your API key from: https://klavis.io\n# IMPORTANT: This key is stored server-side only and NEVER exposed to the client\n# When this key is set, Klavis integration will be automatically enabled\n# KLAVIS_API_KEY=your_klavis_api_key_here\n"}, "36750adc3a8b6a52183954478e20e6fd76559aa9": {"t": 1785769836.2939427, "n": 12658, "h": "da3582fd95a46351", "c": "# add a access code to lock your lobe-chat application, you can set a long password to avoid leaking. If this value contains a comma, it is a password array.\n# ACCESS_CODE=lobe66\n\n# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n# #######################################\n# ########## Security Settings ###########\n# #######################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n# SSRF Protection Settings\n# Set to '1' to allow connections to private IP addresses (disable SSRF protection)\n# WARNING: Only enable this in trusted environments\n# Default is '0' (SSRF protection enabled)\n# SSRF_ALLOW_PRIVATE_IP_ADDRESS=0\n\n# Whitelist of allowed private IP addresses (comma-separated)\n# Only takes effect when SSRF_ALLOW_PRIVATE_IP_ADDRESS is '0'\n# Example: Allow specific internal servers while keeping SSRF protection\n# SSRF_ALLOW_IP_ADDRESS_LIST=192.168.1.100,10.0.0.50\n\n########################################\n############ Redis Settings ############\n########################################\n\n# Connection string for self-hosted Redis (Docker/K8s/managed). Use container hostname when running via docker-compose.\n# REDIS_URL=redis://localhost:6379\n\n# Optional database index.\n# REDIS_DATABASE=0\n\n# Optional authentication for managed Redis.\n# REDIS_USERNAME=default\n# REDIS_PASSWORD=yourpassword\n\n# Set to '1' to enforce TLS when connecting to managed Redis or rediss:// endpoints.\n# REDIS_TLS=0\n\n# Namespace prefix for cache/queue keys.\n# REDIS_PREFIX=lobechat\n\n########################################\n########## AI Provider Service #########\n########################################\n\n# ## OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=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# ## BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## FAL ###\n\n# FAL_API_KEY=fal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ######## AI Image Settings ############\n# #######################################\n\n# Default image generation count (range: 1-20, default: 4)\n# AI_IMAGE_DEFAULT_IMAGE_NUM=4\n\n# ## Nebius ###\n\n# NEBIUS_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## NewAPI Service ###\n\n# NEWAPI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# NEWAPI_PROXY_URL=https://your-newapi-server.com\n\n# ## Vercel AI Gateway ###\n\n# VERCELAIGATEWAY_API_KEY=your_vercel_ai_gateway_api_key\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# Clear allow origin https://clerk.com/docs/guides/dashboard/dns-domains/satellite-domains\n# Authentication across different domains , use,to splite different origin\n# NEXT_PUBLIC_CLERK_AUTH_ALLOW_ORIGINS='https://market.lobehub.com,https://lobehub.com'\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# Better-Auth related configurations\n# NEXT_PUBLIC_ENABLE_BETTER_AUTH=1\n\n# Auth Secret (use `openssl rand -base64 32` to generate)\n# Shared between Better-Auth and Next-Auth\n# AUTH_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# Auth URL (accessible from browser, optional if same domain)\n# NEXT_PUBLIC_AUTH_URL=http://localhost:3210\n\n# Require email verification before allowing users to sign in (default: false)\n# Set to '1' to force users to verify their email before signing in\n# NEXT_PUBLIC_AUTH_EMAIL_VERIFICATION=0\n\n# SSO Providers Configuration (for Better-Auth)\n# Comma-separated list of enabled OAuth providers\n# Supported providers: auth0, authelia, authentik, casdoor, cloudflare-zero-trust, cognito, generic-oidc, github, google, keycloak, logto, microsoft, microsoft-entra-id, okta, zitadel\n# Example: AUTH_SSO_PROVIDERS=google,github,auth0,microsoft-entra-id\n# AUTH_SSO_PROVIDERS=\n\n# Google OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.cloud.google.com/apis/credentials\n# Authorized redirect URIs:\n# - Development: http://localhost:3210/api/auth/callback/google\n# - Production: https://yourdomain.com/api/auth/callback/google\n# GOOGLE_CLIENT_ID=xxxxx.apps.googleusercontent.com\n# GOOGLE_CLIENT_SECRET=GOCSPX-xxxxxxxxxxxxxxxxxxxx\n\n# GitHub OAuth Configuration (for Better-Auth)\n# Get credentials from: https://github.com/settings/developers\n# Create a new OAuth App with:\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/github\n# - Production: https://yourdomain.com/api/auth/callback/github\n# GITHUB_CLIENT_ID=Ov23xxxxxxxxxxxxx\n# GITHUB_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# AWS Cognito OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.aws.amazon.com/cognito\n# Setup steps:\n# 1. Create a User Pool with App Client\n# 2. Configure Hosted UI domain\n# 3. Enable \"Authorization code grant\" OAuth flow\n# 4. Set OAuth scopes: openid, profile, email\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/cognito\n# - Production: https://yourdomain.com/api/auth/callback/cognito\n# COGNITO_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxx\n# COGNITO_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# COGNITO_DOMAIN=your-app.auth.us-east-1.amazoncognito.com\n# COGNITO_REGION=us-east-1\n# COGNITO_USERPOOL_ID=us-east-1_xxxxxxxxx\n\n# Microsoft OAuth Configuration (for Better-Auth)\n# Get credentials from: https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade\n# Create a new App Registration in Microsoft Entra ID (Azure AD)\n# Authorized redirect URL:\n# - Development: http://localhost:3210/api/auth/callback/microsoft\n# - Production: https://yourdomain.com/api/auth/callback/microsoft\n# MICROSOFT_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n# MICROSOFT_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ########## Email Service ##############\n# #######################################\n\n# SMTP Server Configuration (required for email verification with Better-Auth)\n\n# SMTP server hostname (e.g., smtp.gmail.com, smtp.office365.com)\n# SMTP_HOST=smtp.example.com\n\n# SMTP server port (usually 587 for TLS, or 465 for SSL)\n# SMTP_PORT=587\n\n# Use secure connection (set to 'true' for port 465, 'false' for port 587)\n# SMTP_SECURE=false\n\n# SMTP authentication username (usually your email address)\n# SMTP_USER=your-email@example.com\n\n# SMTP authentication password (use app-specific password for Gmail)\n# SMTP_PASS=your-password-or-app-specific-password\n\n# #######################################\n# ######### Server Database #############\n# #######################################\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"}, "dc62cc969dd0b3e63c35ed73c14a490ccfa13d73": {"t": 1785769837.9402285, "n": 12067, "h": "1a1e0a17bac80de8", "c": "# add a access code to lock your lobe-chat application, you can set a long password to avoid leaking. If this value contains a comma, it is a password array.\n# ACCESS_CODE=lobe66\n\n# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n# #######################################\n# ########## Security Settings ###########\n# #######################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n# SSRF Protection Settings\n# Set to '1' to allow connections to private IP addresses (disable SSRF protection)\n# WARNING: Only enable this in trusted environments\n# Default is '0' (SSRF protection enabled)\n# SSRF_ALLOW_PRIVATE_IP_ADDRESS=0\n\n# Whitelist of allowed private IP addresses (comma-separated)\n# Only takes effect when SSRF_ALLOW_PRIVATE_IP_ADDRESS is '0'\n# Example: Allow specific internal servers while keeping SSRF protection\n# SSRF_ALLOW_IP_ADDRESS_LIST=192.168.1.100,10.0.0.50\n\n# #######################################\n# ######### AI Provider Service #########\n# #######################################\n\n# ## OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=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# ## BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## FAL ###\n\n# FAL_API_KEY=fal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ######## AI Image Settings ############\n# #######################################\n\n# Default image generation count (range: 1-20, default: 4)\n# AI_IMAGE_DEFAULT_IMAGE_NUM=4\n\n# ## Nebius ###\n\n# NEBIUS_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# ## NewAPI Service ###\n\n# NEWAPI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# NEWAPI_PROXY_URL=https://your-newapi-server.com\n\n# ## Vercel AI Gateway ###\n\n# VERCELAIGATEWAY_API_KEY=your_vercel_ai_gateway_api_key\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# Clear allow origin https://clerk.com/docs/guides/dashboard/dns-domains/satellite-domains\n# Authentication across different domains , use,to splite different origin\n# NEXT_PUBLIC_CLERK_AUTH_ALLOW_ORIGINS='https://market.lobehub.com,https://lobehub.com'\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# Better-Auth related configurations\n# NEXT_PUBLIC_ENABLE_BETTER_AUTH=1\n\n# Auth Secret (use `openssl rand -base64 32` to generate)\n# Shared between Better-Auth and Next-Auth\n# AUTH_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# Auth URL (accessible from browser, optional if same domain)\n# NEXT_PUBLIC_AUTH_URL=http://localhost:3210\n\n# Require email verification before allowing users to sign in (default: false)\n# Set to '1' to force users to verify their email before signing in\n# NEXT_PUBLIC_AUTH_EMAIL_VERIFICATION=0\n\n# SSO Providers Configuration (for Better-Auth)\n# Comma-separated list of enabled OAuth providers\n# Supported providers: auth0, authelia, authentik, casdoor, cloudflare-zero-trust, cognito, generic-oidc, github, google, keycloak, logto, microsoft, microsoft-entra-id, okta, zitadel\n# Example: AUTH_SSO_PROVIDERS=google,github,auth0,microsoft-entra-id\n# AUTH_SSO_PROVIDERS=\n\n# Google OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.cloud.google.com/apis/credentials\n# Authorized redirect URIs:\n# - Development: http://localhost:3210/api/auth/callback/google\n# - Production: https://yourdomain.com/api/auth/callback/google\n# GOOGLE_CLIENT_ID=xxxxx.apps.googleusercontent.com\n# GOOGLE_CLIENT_SECRET=GOCSPX-xxxxxxxxxxxxxxxxxxxx\n\n# GitHub OAuth Configuration (for Better-Auth)\n# Get credentials from: https://github.com/settings/developers\n# Create a new OAuth App with:\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/github\n# - Production: https://yourdomain.com/api/auth/callback/github\n# GITHUB_CLIENT_ID=Ov23xxxxxxxxxxxxx\n# GITHUB_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# AWS Cognito OAuth Configuration (for Better-Auth)\n# Get credentials from: https://console.aws.amazon.com/cognito\n# Setup steps:\n# 1. Create a User Pool with App Client\n# 2. Configure Hosted UI domain\n# 3. Enable \"Authorization code grant\" OAuth flow\n# 4. Set OAuth scopes: openid, profile, email\n# Authorized callback URL:\n# - Development: http://localhost:3210/api/auth/callback/cognito\n# - Production: https://yourdomain.com/api/auth/callback/cognito\n# COGNITO_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxx\n# COGNITO_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# COGNITO_DOMAIN=your-app.auth.us-east-1.amazoncognito.com\n# COGNITO_REGION=us-east-1\n# COGNITO_USERPOOL_ID=us-east-1_xxxxxxxxx\n\n# Microsoft OAuth Configuration (for Better-Auth)\n# Get credentials from: https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade\n# Create a new App Registration in Microsoft Entra ID (Azure AD)\n# Authorized redirect URL:\n# - Development: http://localhost:3210/api/auth/callback/microsoft\n# - Production: https://yourdomain.com/api/auth/callback/microsoft\n# MICROSOFT_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n# MICROSOFT_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# #######################################\n# ########## Email Service ##############\n# #######################################\n\n# SMTP Server Configuration (required for email verification with Better-Auth)\n\n# SMTP server hostname (e.g., smtp.gmail.com, smtp.office365.com)\n# SMTP_HOST=smtp.example.com\n\n# SMTP server port (usually 587 for TLS, or 465 for SSL)\n# SMTP_PORT=587\n\n# Use secure connection (set to 'true' for port 465, 'false' for port 587)\n# SMTP_SECURE=false\n\n# SMTP authentication username (usually your email address)\n# SMTP_USER=your-email@example.com\n\n# SMTP authentication password (use app-specific password for Gmail)\n# SMTP_PASS=your-password-or-app-specific-password\n\n# #######################################\n# ######### Server Database #############\n# #######################################\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"}, "4f7bc5acd2d38f8e6be3ce44c2d80c8f915546a5": {"t": 1785769839.456756, "n": 8477, "h": "da3189f5c6792639", "c": "# add a access code to lock your lobe-chat application, you can set a long password to avoid leaking. If this value contains a comma, it is a password array.\n# ACCESS_CODE=lobe66\n\n# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n########################################\n########### Security Settings ###########\n########################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n# SSRF Protection Settings\n# Set to '1' to allow connections to private IP addresses (disable SSRF protection)\n# WARNING: Only enable this in trusted environments\n# Default is '0' (SSRF protection enabled)\n# SSRF_ALLOW_PRIVATE_IP_ADDRESS=0\n\n# Whitelist of allowed private IP addresses (comma-separated)\n# Only takes effect when SSRF_ALLOW_PRIVATE_IP_ADDRESS is '0'\n# Example: Allow specific internal servers while keeping SSRF protection\n# SSRF_ALLOW_IP_ADDRESS_LIST=192.168.1.100,10.0.0.50\n\n########################################\n########## AI Provider Service #########\n########################################\n\n### OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=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### BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### FAL ###\n\n# FAL_API_KEY=fal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n########################################\n######### AI Image Settings ############\n########################################\n\n# Default image generation count (range: 1-20, default: 4)\n# AI_IMAGE_DEFAULT_IMAGE_NUM=4\n\n### Nebius ###\n\n# NEBIUS_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### NewAPI Service ###\n\n# NEWAPI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# NEWAPI_PROXY_URL=https://your-newapi-server.com\n\n### Vercel AI Gateway ###\n\n# VERCELAIGATEWAY_API_KEY=your_vercel_ai_gateway_api_key\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# Clear allow origin https://clerk.com/docs/guides/dashboard/dns-domains/satellite-domains\n# Authentication across different domains , use,to splite different origin\n# NEXT_PUBLIC_CLERK_AUTH_ALLOW_ORIGINS='https://market.lobehub.com,https://lobehub.com'\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# 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"}, "f2ab2fcef6a7a9bacfad9404b9ee56bc112f19dd": {"t": 1785769840.7394896, "n": 7985, "h": "e97090c7e5583a05", "c": "# add a access code to lock your lobe-chat application, you can set a long password to avoid leaking. If this value contains a comma, it is a password array.\n# ACCESS_CODE=lobe66\n\n# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n########################################\n########### Security Settings ###########\n########################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n########################################\n########## AI Provider Service #########\n########################################\n\n### OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=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### BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### FAL ###\n\n# FAL_API_KEY=fal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n########################################\n######### AI Image Settings ############\n########################################\n\n# Default image generation count (range: 1-20, default: 4)\n# AI_IMAGE_DEFAULT_IMAGE_NUM=4\n\n### Nebius ###\n\n# NEBIUS_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### NewAPI Service ###\n\n# NEWAPI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# NEWAPI_PROXY_URL=https://your-newapi-server.com\n\n### Vercel AI Gateway ###\n\n# VERCELAIGATEWAY_API_KEY=your_vercel_ai_gateway_api_key\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# Clear allow origin https://clerk.com/docs/guides/dashboard/dns-domains/satellite-domains\n# Authentication across different domains , use,to splite different origin\n# NEXT_PUBLIC_CLERK_AUTH_ALLOW_ORIGINS='https://market.lobehub.com,https://lobehub.com'\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# 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"}, "490fee002ef6aa78512ccd76dec6b459806499a9": {"t": 1785769842.4342215, "n": 8096, "h": "d02cd793e11f96ef", "c": "# add a access code to lock your lobe-chat application, you can set a long password to avoid leaking. If this value contains a comma, it is a password array.\n# ACCESS_CODE=lobe66\n\n# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n########################################\n########### Security Settings ###########\n########################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n########################################\n########## AI Provider Service #########\n########################################\n\n### OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=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### BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### FAL ###\n\n# FAL_API_KEY=fal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n########################################\n######### AI Image Settings ############\n########################################\n\n# Default image generation count (range: 1-20, default: 4)\n# AI_IMAGE_DEFAULT_IMAGE_NUM=4\n\n### Nebius ###\n\n# NEBIUS_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### NewAPI Service ###\n\n# NEWAPI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# NEWAPI_PROXY_URL=https://your-newapi-server.com\n\n### Vercel AI Gateway ###\n\n# VERCELAIGATEWAY_API_KEY=your_vercel_ai_gateway_api_key\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# Clear allow origin https://clerk.com/docs/guides/dashboard/dns-domains/satellite-domains\n# Authentication across different domains , use,to splite different origin\n# NEXT_PUBLIC_CLERK_AUTH_ALLOW_ORIGINS='https://market.lobehub.com,https://lobehub.com'\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"}, "de7368bc25a6916d408ed5364a1c419316ba71fc": {"t": 1785769844.1810458, "n": 7842, "h": "02c128d4bb257641", "c": "# add a access code to lock your lobe-chat application, you can set a long password to avoid leaking. If this value contains a comma, it is a password array.\n# ACCESS_CODE=lobe66\n\n# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n########################################\n########### Security Settings ###########\n########################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n########################################\n########## AI Provider Service #########\n########################################\n\n### OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=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### BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### FAL ###\n\n# FAL_API_KEY=fal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n########################################\n######### AI Image Settings ############\n########################################\n\n# Default image generation count (range: 1-20, default: 4)\n# AI_IMAGE_DEFAULT_IMAGE_NUM=4\n\n### Nebius ###\n\n# NEBIUS_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### NewAPI Service ###\n\n# NEWAPI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# NEWAPI_PROXY_URL=https://your-newapi-server.com\n\n### Vercel AI Gateway ###\n\n# VERCELAIGATEWAY_API_KEY=your_vercel_ai_gateway_api_key\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"}, "5a4b0fd344e98010104462276d26ca3407192419": {"t": 1785769847.1670697, "n": 7627, "h": "023d604e19d98c86", "c": "# add a access code to lock your lobe-chat application, you can set a long password to avoid leaking. If this value contains a comma, it is a password array.\n# ACCESS_CODE=lobe66\n\n# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n########################################\n########### Security Settings ###########\n########################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n########################################\n########## AI Provider Service #########\n########################################\n\n### OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=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### BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### FAL ###\n\n# FAL_API_KEY=fal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### Nebius ###\n\n# NEBIUS_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### NewAPI Service ###\n\n# NEWAPI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# NEWAPI_PROXY_URL=https://your-newapi-server.com\n\n### Vercel AI Gateway ###\n\n# VERCELAIGATEWAY_API_KEY=your_vercel_ai_gateway_api_key\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"}, "a66856dc83e2ac44184dbe542fae2d7209bb23e2": {"t": 1785769849.4432275, "n": 7541, "h": "14656b73f0b5e078", "c": "# add a access code to lock your lobe-chat application, you can set a long password to avoid leaking. If this value contains a comma, it is a password array.\n# ACCESS_CODE=lobe66\n\n# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n########################################\n########### Security Settings ###########\n########################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n########################################\n########## AI Provider Service #########\n########################################\n\n### OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=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### BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### FAL ###\n\n# FAL_API_KEY=fal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### Nebius ###\n\n# NEBIUS_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### NewAPI Service ###\n\n# NEWAPI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n# NEWAPI_PROXY_URL=https://your-newapi-server.com\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"}, "c15791d8520ebc146c183c00528cca54a14516d8": {"t": 1785769851.2869225, "n": 7413, "h": "34baac2d6fe9d5aa", "c": "# add a access code to lock your lobe-chat application, you can set a long password to avoid leaking. If this value contains a comma, it is a password array.\n# ACCESS_CODE=lobe66\n\n# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n########################################\n########### Security Settings ###########\n########################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n########################################\n########## AI Provider Service #########\n########################################\n\n### OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=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### BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### FAL ###\n\n# FAL_API_KEY=fal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### Nebius ###\n\n# NEBIUS_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\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"}, "92505409120354b01d33e16f7302aee6ccd34b44": {"t": 1785769852.85372, "n": 7344, "h": "6c79330243454b82", "c": "# add a access code to lock your lobe-chat application, you can set a long password to avoid leaking. If this value contains a comma, it is a password array.\n# ACCESS_CODE=lobe66\n\n# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n########################################\n########### Security Settings ###########\n########################################\n\n# Control Content Security Policy headers\n# Set to '1' to enable X-Frame-Options and Content-Security-Policy headers\n# Default is '0' (enabled)\n# ENABLED_CSP=1\n\n########################################\n########## AI Provider Service #########\n########################################\n\n### OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=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### BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### FAL ###\n\n# FAL_API_KEY=fal-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"}, "45f05a01697b9d101263bfc77c317b7317ace3d6": {"t": 1785769854.1355605, "n": 7059, "h": "b8c21eded77d71af", "c": "# add a access code to lock your lobe-chat application, you can set a long password to avoid leaking. If this value contains a comma, it is a password array.\n# ACCESS_CODE=lobe66\n\n# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n\n########################################\n########## AI Provider Service #########\n########################################\n\n### OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=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### BFL ###\n\n# BFL_API_KEY=bfl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n### FAL ###\n\n# FAL_API_KEY=fal-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"}, "e172055a525e4be6ea78b52ffd1f915d26160d18": {"t": 1785769855.319706, "n": 6929, "h": "e06e2a927858fe1d", "c": "# add a access code to lock your lobe-chat application, you can set a long password to avoid leaking. If this value contains a comma, it is a password array.\n# ACCESS_CODE=lobe66\n\n# Specify your API Key selection method, currently supporting `random` and `turn`.\n# API_KEY_SELECT_MODE=random\n\n\n########################################\n########## AI Provider Service #########\n########################################\n\n### OpenAI ###\n\n# you openai api key\nOPENAI_API_KEY=sk-xxxxxxxxx\n\n# use a proxy to connect to the OpenAI API\n# OPENAI_PROXY_URL=https://api.openai.com/v1\n\n# add your custom model name, multi model separate by comma. for example gpt-3.5-1106,gpt-4-1106\n# OPENAI_MODEL_LIST=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"}}, "src/.env.example": {"ab601b2ced51e606fcd3554040adcd1129eadaf9": {"t": 1785747139.3847437, "n": 482, "h": "046c22d4e12c54a3", "c": "# Credenciais: copie para `.env.local` (tem prioridade sobre `.env`) ou exporte no shell.\n\n# xAI Grok (primário para perguntas normais)\nXAI_API_KEY=xai-your-key-here\nGROK_API_KEY=\nAI_PROVIDER=grok\nGROKAI_MODEL=grok-4.3-latest\n\n# DeepSeek (fallback do Grok + reasoner para perguntas complexas)\nDEEPSEEK_API_KEY=sk-your-key-here\nDEEPSEEK_MODEL_CHAT=deepseek-chat\nDEEPSEEK_MODEL_REASONER=deepseek-reasoner\n\n# OpenAI (opcional, último fallback)\nOPENAI_API_KEY=\nOPENAI_MODEL=gpt-4o-mini\n"}, "2556b7db17f5032ca18689effc72f56c0ec96254": {"t": 1785769798.9398298, "n": 482, "h": "046c22d4e12c54a3", "c": "# Credenciais: copie para `.env.local` (tem prioridade sobre `.env`) ou exporte no shell.\n\n# xAI Grok (primário para perguntas normais)\nXAI_API_KEY=xai-your-key-here\nGROK_API_KEY=\nAI_PROVIDER=grok\nGROKAI_MODEL=grok-4.3-latest\n\n# DeepSeek (fallback do Grok + reasoner para perguntas complexas)\nDEEPSEEK_API_KEY=sk-your-key-here\nDEEPSEEK_MODEL_CHAT=deepseek-chat\nDEEPSEEK_MODEL_REASONER=deepseek-reasoner\n\n# OpenAI (opcional, último fallback)\nOPENAI_API_KEY=\nOPENAI_MODEL=gpt-4o-mini\n"}}, "graphify-out/GRAPH_REPORT.md": {"ab601b2ced51e606fcd3554040adcd1129eadaf9": {"t": 1785809833.5033958, "n": 41498, "h": "909a10b93eaa89e3", "c": "# Graph Report - . (2026-07-07)\n\n## Corpus Check\n- Large corpus: 504 files · ~220,716 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder.\n\n## Summary\n- 971 nodes · 1274 edges · 93 communities (84 shown, 9 thin omitted)\n- Extraction: 72% EXTRACTED · 27% INFERRED · 0% AMBIGUOUS · INFERRED: 350 edges (avg confidence: 0.9)\n- Token cost: 0 input · 0 output\n\n## Community Hubs (Navigation)\n- SSO & OIDC Authentication\n- OpenAI-Compatible Providers\n- Changelog: Model Releases\n- Architecture & Contribution Guides\n- Model List & Reasoning Features\n- Agent Tasks & Gateway\n- Object Storage & Embeddings\n- JSON Schema Definitions\n- Auth Provider Configuration\n- Dev Tooling & Linting\n- Layered Architecture & Data Flow\n- LLM Provider Guides (AI21/302/360)\n- Database Deployment (Docker)\n- Bot Platform & Connectors\n- Email Service & Better Auth\n- Provider API Key Setup\n- Major LLM Providers\n- Auth Migration (Clerk→Better Auth)\n- Messaging Channels (LINE/QQ/WeChat)\n- UI Appearance & Misc Providers\n- Deployment & Online Search\n- Changelog: DeepSeek R1 & CoT\n- Multimodal Generation & Pages\n- Image Generation (FLUX/ComfyUI)\n- Cloud Sandbox & Scheduled Tasks\n- Messaging Channels (Discord/Feishu)\n- Bot Usage on Platforms\n- Changelog: Server DB & Flags\n- Agent Builder & Memory\n- Glossary Concepts\n- Observability & Monitoring\n- Claude Code & Codex\n- Changelog: Custom Providers\n- Provider Billing & Plans\n- Ollama Local Models\n- Cloud Provider API Keys (Bedrock/Spark)\n- Topics & Conversation Sharing\n- TTS/STT & Translation\n- MCP & Skills\n- Changelog: Database Docker Image\n- Changelog: Artifacts & Code Interpreter\n- Agent Marketplace\n- Changelog: Plugins & TTS\n- Changelog: Vision Models\n- Analytics Integrations\n- Redis Cache\n- Changelog: Knowledge Base\n- Task Lifecycle & Branching\n- Cloud Sandbox & S3 Config\n- Skills & Tools\n- RAG & Knowledge Base\n- Command Menu & Shortcuts\n- Agent Groups\n- Integrations & Plugins\n- Desktop Sync\n- Changelog: Persistent Sidebar\n- Changelog: Export Formats\n- Changelog Index Schema\n- Claude Code Sub-agents\n- GitHub Models\n- Tongyi Qianwen (Qwen)\n- URL Settings Sharing (keyVaults/language\n- Changelog: OpenAI O1 Models (v1.17.0, en\n- Conversation branching (continuation / s\n- Data statistics dashboard & activity car\n- BlueBubbles bridge (iMessage relay)\n- Vercel Fluid Compute (300s max duration)\n- pluginSelectors object\n- DALL-E 3 Text-to-Image Changelog (2023-1\n- Branching\n- Cloudflare Workers AI (serverless AI on \n- Fireworks AI (generative model inference\n- Gitee AI (Git-based AI dev platform, Ser\n- SambaNova (AI hardware/software, Palo Al\n- SiliconCloud (SiliconFlow, GenAI platfor\n- StepFun\n- Taichu (Institute of Automation, CAS)\n- Together AI\n- Upstage (Solar)\n- Google Vertex AI\n- Baidu Wenxin (ERNIE)\n- xAI (Grok)\n- 01.AI (Yi)\n- Zhipu AI (GLM)\n- Image & Video Generation Redesign\n- Lighthouse Reports\n- Channels\n- Scheduled Task\n- Configure Redis Cache Service\n- Model Runtime & Auth Improvements (zh-CN\n- Artifact\n- Video Generation\n- Workspace\n\n## God Nodes (most connected - your core abstractions)\n1. `LobeHub AI Agent Workspace` - 39 edges\n2. `Better Auth (authentication framework)` - 23 edges\n3. `Legacy Authentication (NextAuth & Clerk)` - 20 edges\n4. `Authentication Service Environment Variables` - 20 edges\n5. `API Key configuration flow` - 17 edges\n6. `LobeHub Single Sign-On (Auth.js/NextAuth)` - 14 edges\n7. `NextAuth / Auth.js` - 13 edges\n8. `Technical Development Getting Started Guide (en)` - 12 edges\n9. `S3-compatible Object Storage (RustFS/MinIO)` - 12 edges\n10. `Auth Environment Variables (AUTH_SECRET, AUTH_SSO_PROVIDERS)` - 12 edges\n\n## Surprising Connections (you probably didn't know these)\n- `Agent (Getting Started)` --semantically_similar_to--> `助理 (Agent, zh-CN)` [INFERRED] [semantically similar]\n docs/usage/getting-started/agent.mdx → docs/usage/getting-started/agent.zh-CN.mdx\n- `Changelog Index` --references--> `Plugin System Changelog (2023-09-09)` [EXTRACTED]\n docs/changelog/index.json → docs/changelog/2023-09-09-plugin-system.mdx\n- `Changelog Index` --references--> `GPT-4 Vision Changelog (2023-11-14)` [EXTRACTED]\n docs/changelog/index.json → docs/changelog/2023-11-14-gpt4-vision.mdx\n- `Changelog Index` --references--> `TTS & STT Changelog (2023-11-19)` [EXTRACTED]\n docs/changelog/index.json → docs/changelog/2023-11-19-tts-stt.mdx\n- `Changelog Index` --references--> `DALL-E 3 Text-to-Image Changelog (2023-12-22)` [EXTRACTED]\n docs/changelog/index.json → docs/changelog/2023-12-22-dalle-3.mdx\n\n## Import Cycles\n- None detected.\n\n## Hyperedges (group relationships)\n- **RAG / Semantic Search Pipeline** — docs_glossary_rag, docs_glossary_embedding, docs_glossary_file_chunk, docs_glossary_knowledge_base [INFERRED 0.85]\n- **Terminal Coding Agents** — docs_glossary_claude_code, docs_glossary_codex, docs_glossary_sub_agents, docs_glossary_working_directory [INFERRED 0.85]\n- **LobeHub Server Deployment Stack** — changelog_concept_server_database, changelog_concept_authentication, changelog_concept_docker_image, docs_glossary_self_hosting [INFERRED 0.85]\n- **Reasoning models with chain-of-thought display** — changelog_deepseek_r1, changelog_claude_3_7_sonnet, changelog_openai_o3_mini, changelog_chain_of_thought [INFERRED 0.85]\n- **November four new model providers** — changelog_gitee_ai, changelog_internlm, changelog_xai, changelog_cloudflare_workers_ai [INFERRED 0.95]\n- **Server database self-hosting stack** — changelog_docker_database_image, changelog_postgres, changelog_nextauth, changelog_cloud_data_sync [INFERRED 0.75]\n- **MCP Tool Ecosystem Evolution (desktop → marketplace → cloud endpoints)** — changelog_desktop_app_release, changelog_mcp_market_release, changelog_mcp_release, changelog_mcp_marketplace_concept [INFERRED 0.85]\n- **AI Image Generation Rollout across releases** — changelog_image_generation_release, changelog_gemini_release, changelog_comfy_ui_release, changelog_image_generation_concept [INFERRED 0.75]\n- **Claude Model Adoption Timeline (3.7 → 4 → Sonnet 4.5 → Haiku 4.5 → Opus 4.6)** — changelog_claude_4_release, changelog_python_release, changelog_comfy_ui_release, changelog_runtime_auth_release, changelog_claude_model_family [INFERRED 0.75]\n- **Delegated Coding Agents (Claude Code & Codex) across releases** — concept_claude_code, concept_codex, concept_heterogeneous_agent, docs_changelog_2026_05_11_agent_tasks_ga [INFERRED 0.85]\n- **Agent Task System from intro to GA to CAO orchestration** — concept_agent_tasks, docs_changelog_2026_03_30_agent_tasks, docs_changelog_2026_05_11_agent_tasks_ga, concept_cao [INFERRED 0.75]\n- **Search & Agent Document storage foundation** — concept_bm25_search, concept_agent_documents, docs_changelog_2026_03_16_search [INFERRED 0.85]\n- **Chat execution runtime stack** — concept_agent_runtime, concept_model_runtime, concept_general_chat_agent, concept_chat_service [INFERRED 0.85]\n- **ComfyUI four-layer service architecture** — concept_comfyui, concept_prompt_builder, concept_flux_sd_models [INFERRED 0.85]\n- **Code quality & release pipeline** — concept_gitmoji, concept_semantic_release, concept_lobehub_lint, concept_canary_branch [INFERRED 0.75]\n- **Feature Development Full Chain** — basic_feature_drizzle_orm, basic_feature_layered_architecture, basic_feature_zustand, i18n_implementation_i18next [INFERRED 0.85]\n- **Developer Onboarding Documentation Set** — docs_development_basic_setup_development, docs_development_basic_folder_structure, basic_contributing_guidelines_zhcn, docs_development_basic_test [INFERRED 0.75]\n- **i18n Workflow** — i18n_implementation_i18next, i18n_lobe_i18n, i18n_i18nrc_config, i18n_glossary [INFERRED 0.85]\n- **Self-Hosting Core Service Stack** — concept_postgres_pgvector, concept_redis, concept_s3_storage, concept_searxng [INFERRED 0.85]\n- **Better Auth Authentication Flow** — concept_better_auth, concept_sso_providers, concept_smtp_email, concept_redis [INFERRED 0.85]\n- **Knowledge Base RAG Pipeline** — concept_s3_storage, concept_openai_embedding, concept_postgres_pgvector, concept_unstructured_io [INFERRED 0.85]\n- **S3-compatible storage backends** — concept_s3_storage, concept_cloudflare_r2, concept_rustfs, concept_tencent_cos [INFERRED 0.85]\n- **LobeHub observability integrations** — concept_langfuse, concept_grafana_stack [INFERRED 0.75]\n- **Self-hosting auth mechanisms** — concept_clerk, concept_email_service, concept_better_auth [INFERRED 0.75]\n- **NextAuth SSO Provider Configuration** — concept_next_auth_sso_providers, provider_auth0, provider_github, provider_google, provider_keycloak, provider_microsoft_entra_id [INFERRED 0.85]\n- **Webhook-capable identity providers** — concept_webhook_support, provider_casdoor, provider_logto [INFERRED 0.75]\n- **Email service enabling verification and magic link** — concept_resend, concept_nodemailer_smtp, concept_email_verification, concept_magic_link [INFERRED 0.85]\n- **LobeHub SSO provider integrations** — docs_self_hosting_auth_next_auth_okta, docs_self_hosting_auth_next_auth_zitadel, docs_self_hosting_auth_providers_auth0, docs_self_hosting_auth_providers_authelia, docs_self_hosting_auth_providers_authentik, docs_self_hosting_auth_providers_casdoor, docs_self_hosting_auth_providers_cloudflare_zero_trust, docs_self_hosting_auth_providers_cognito, docs_self_hosting_auth_providers_feishu, docs_self_hosting_auth_providers_apple [INFERRED 0.85]\n- **OIDC-based auth providers for LobeHub** — docs_self_hosting_auth_next_auth_okta, docs_self_hosting_auth_next_auth_zitadel, docs_self_hosting_auth_providers_authelia, docs_self_hosting_auth_providers_authentik, docs_self_hosting_auth_providers_casdoor, docs_self_hosting_auth_providers_cloudflare_zero_trust, docs_self_hosting_auth_providers_cognito [INFERRED 0.85]\n- **Shared AUTH_SECRET / AUTH_SSO_PROVIDERS env config** — auth_env_variables, docs_self_hosting_auth_next_auth_okta, docs_self_hosting_auth_providers_auth0, docs_self_hosting_auth_providers_cognito, docs_self_hosting_auth_providers_feishu [INFERRED 0.75]\n- **OIDC-based SSO Providers** — docs_self_hosting_auth_providers_generic_oidc, docs_self_hosting_auth_providers_keycloak, docs_self_hosting_auth_providers_logto, docs_self_hosting_auth_providers_okta, docs_self_hosting_auth_providers_zitadel [INFERRED 0.85]\n- **Shared SSO Env Vars (AUTH_SECRET, AUTH_SSO_PROVIDERS)** — docs_self_hosting_environment_variables_auth_env_auth_secret, docs_self_hosting_environment_variables_auth_env_sso_providers, envvars_auth [INFERRED 0.85]\n- **LobeHub Analytics/Observability Integrations** — docs_self_hosting_environment_variables_analytics_vercel, docs_self_hosting_environment_variables_analytics_google, docs_self_hosting_environment_variables_analytics_posthog, docs_self_hosting_environment_variables_analytics_umami, docs_self_hosting_environment_variables_analytics_langfuse [INFERRED 0.75]\n- **Self-Hosting Environment Variable Reference Set** — docs_self_hosting_environment_variables_basic, docs_self_hosting_environment_variables_model_provider, docs_self_hosting_environment_variables_s3, docs_self_hosting_environment_variables_redis, docs_self_hosting_environment_variables_cloud_sandbox [INFERRED 0.75]\n- **Docs Sharing Model List Syntax** — docs_self_hosting_environment_variables_model_provider, docs_self_hosting_examples_azure_openai, concept_model_list_syntax [INFERRED 0.85]\n- **LobeHub 2.0 Better Auth Migration** — docs_self_hosting_migration_v2_breaking_changes, concept_better_auth, environment-variables_auth_zhcn [INFERRED 0.85]\n- **V2 Better Auth Migration (Clerk/NextAuth to Better Auth)** — docs_self_hosting_migration_v2_auth_clerk_to_betterauth, docs_self_hosting_migration_v2_auth_nextauth_to_betterauth, docs_self_hosting_migration_v2_auth_migration_internals, concept_better_auth [INFERRED 0.85]\n- **Server DB Platform Deployment Guides** — docs_self_hosting_platform_docker_compose, docs_self_hosting_platform_docker, docs_self_hosting_platform_dokploy, docs_self_hosting_platform_sealos, docs_self_hosting_platform_vercel, docs_self_hosting_platform_zeabur [INFERRED 0.85]\n- **Server DB Required Services (Postgres + S3 + Auth)** — concept_postgres, concept_s3_storage, concept_better_auth, concept_server_db_mode [INFERRED 0.75]\n- **Coding agents delegated in desktop app** — docs_usage_agent_claude_code, docs_usage_agent_codex, concept_execution_device [INFERRED 0.85]\n- **Built-in Agent Skills (Notebook/GTD/Sandbox)** — concept_notebook, concept_gtd, concept_cloud_sandbox [INFERRED 0.75]\n- **Agent Group collaboration** — concept_agent_group, concept_moderator, concept_collaboration_modes [INFERRED 0.85]\n- **Channel access policies shared across messaging platforms** — docs_usage_channels_discord_en, docs_usage_channels_feishu_en, docs_usage_channels_lark_en, channels_access_policy [INFERRED 0.85]\n- **LobeHub messaging channel integrations** — docs_usage_channels_discord_en, docs_usage_channels_feishu_en, docs_usage_channels_lark_en, docs_usage_channels_imessage_en, docs_usage_channels_line_en [INFERRED 0.75]\n- **Agent conversation productivity features** — docs_usage_agent_share_en, docs_usage_agent_topic_en, docs_usage_agent_translate_en, agent_ttsstt_en [INFERRED 0.75]\n- **Messaging channel integrations** — docs_usage_channels_qq, docs_usage_channels_slack, docs_usage_channels_telegram, docs_usage_channels_wechat, channels_line_zhcn [INFERRED 0.85]\n- **Cross-platform access policy model** — concept_access_policies, concept_pairing_approval, docs_usage_channels_overview, docs_usage_channels_qq, docs_usage_channels_slack, docs_usage_channels_telegram [INFERRED 0.75]\n- **Skills and MCP ecosystem** — concept_skills, concept_mcp, docs_usage_community_mcp_market, docs_usage_community_custom_mcp, docs_usage_community_skill_management [INFERRED 0.85]\n- **Getting Started onboarding surfaces** — docs_usage_getting_started_get_lobehub, docs_usage_getting_started_lobe_ai, docs_usage_getting_started_agent [INFERRED 0.75]\n- **File → Resource Library → Agent grounding pipeline** — docs_usage_getting_started_file_upload, docs_usage_getting_started_resource, concept_semantic_search [INFERRED 0.85]\n- **Skills, Tools and MCP capability stack** — concept_skill, concept_tool, concept_mcp [INFERRED 0.85]\n- **Messenger Supported Platforms** — docs_usage_messenger_telegram, docs_usage_messenger_slack, docs_usage_messenger_discord [INFERRED 0.75]\n- **API-Key Provider Setup Guides** — docs_usage_providers_ai21, docs_usage_providers_ai302, docs_usage_providers_ai360, docs_usage_providers_anthropic, docs_usage_providers_azure [INFERRED 0.75]\n- **LLM chat providers configured via API key in LobeHub** — docs_usage_providers_baichuan, docs_usage_providers_deepseek, docs_usage_providers_fireworksai, docs_usage_providers_giteeai, docs_usage_providers_github_models, docs_usage_providers_google_gemini, docs_usage_providers_cloudflare, docs_usage_providers_bedrock [INFERRED 0.85]\n- **Image/video generation providers in LobeHub** — docs_usage_providers_bfl, docs_usage_providers_fal, docs_usage_providers_comfyui, providers_image_generation [INFERRED 0.85]\n- **Common API-key setup flow (obtain key then configure in Settings)** — providers_api_key_config, providers_ai_providers_settings, providers_lobehub [INFERRED 0.75]\n- **LobeHub AI provider integration guides** — docs_usage_providers_groq, docs_usage_providers_mistral, docs_usage_providers_novita, docs_usage_providers_lmstudio, docs_usage_providers_modelscope [INFERRED 0.85]\n- **China-market LLM providers** — docs_usage_providers_hunyuan_provider, docs_usage_providers_internlm_provider, docs_usage_providers_minimax_provider, docs_usage_providers_modelscope_provider, docs_usage_providers_moonshot_provider, docs_usage_providers_infiniai_provider [INFERRED 0.75]\n- **OpenAI-compatible open-model hosts** — docs_usage_providers_modelscope_provider, docs_usage_providers_novita_provider, docs_usage_providers_lmstudio_provider [INFERRED 0.65]\n- **Provider API-key integration flow in LobeHub** — providers_api_key_config, providers_ai_providers_settings, providers_lobehub [INFERRED 0.85]\n- **Chinese LLM cloud providers** — docs_usage_providers_qwen_tongyi, docs_usage_providers_qiniu, docs_usage_providers_sensenova, docs_usage_providers_siliconcloud [INFERRED 0.75]\n- **Open-source model API aggregators** — docs_usage_providers_openrouter, docs_usage_providers_ppio, docs_usage_providers_siliconcloud [INFERRED 0.65]\n- **Chinese LLM Providers in LobeHub** — docs_usage_providers_spark, docs_usage_providers_stepfun, docs_usage_providers_taichu, docs_usage_providers_tencentcloud, docs_usage_providers_volcengine, docs_usage_providers_wenxin [INFERRED 0.75]\n- **Self-hosted / Gateway Inference Endpoints** — docs_usage_providers_vllm, docs_usage_providers_vercel_ai_gateway, docs_usage_providers_togetherai [INFERRED 0.65]\n- **Local Open Models via Ollama** — docs_usage_providers_ollama, docs_usage_providers_ollama_gemma, docs_usage_providers_ollama_qwen [EXTRACTED 1.00]\n- **User Interface Customization Surface** — user_interface_theme, docs_usage_user_interface_command_menu, docs_usage_user_interface_shortcuts, docs_usage_user_interface_stats [INFERRED 0.75]\n\n## Communities (93 total, 9 thin omitted)\n\n### Community 0 - \"SSO & OIDC Authentication\"\nCohesion: 0.05\nNodes (69): Legacy Authentication (zh-CN), OpenID Connect (OIDC), Single Sign-On (SSO) Authentication, AUTH_SECRET / Auth.js session token key, Database Session Strategy, NEXT_AUTH_SSO_PROVIDERS env var, NextAuth / Auth.js, Single Sign-On (SSO) (+61 more)\n\n### Community 1 - \"OpenAI-Compatible Providers\"\nCohesion: 0.06\nNodes (42): AI Providers Settings Panel, Alibaba Cloud account linking (mandatory for API access), Provider API Key, LPU Inference Engine, Image URL whitelist / base64 vision workaround, Local API service (port 1234, CORS enabled), ModelScope env vars (ENABLED_MODELSCOPE, MODELSCOPE_API_KEY, MODEL_LIST), OpenAI-compatible API format (+34 more)\n\n### Community 2 - \"Changelog: Model Releases\"\nCohesion: 0.07\nNodes (40): Agent Builder, Agent Memory, Chain-of-Thought / Reasoning Display, Changelog: Prompt Variables & Claude 4 Reasoning Model Support, 更新日志: 提示词变量与 Claude 4 推理模型支持 (zh-CN), Claude Model Family (3.7 Sonnet, 4, Opus 4.1, Sonnet 4.5, Haiku 4.5, Opus 4.6), Changelog: ComfyUI Integration & Knowledge Base Improvements, 更新日志: ComfyUI 集成与知识库优化 (zh-CN) (+32 more)\n\n### Community 3 - \"Architecture & Contribution Guides\"\nCohesion: 0.07\nNodes (38): Architecture Design (zh-CN), Chat API Client-Server Interaction Logic (zh-CN), ComfyUI Extension Development Guide (en), ComfyUI Extension Development Guide (zh-CN), Code Style and Contribution Guidelines, Adding New Image Models (en), Adding New Image Models (zh-CN), Agent Runtime (@lobechat/agent-runtime) (+30 more)\n\n### Community 4 - \"Model List & Reasoning Features\"\nCohesion: 0.07\nNodes (37): Customizing Provider Model List (zh-CN), Artifacts (zh-CN), Chain of Thought (zh-CN), GTD Tools (zh-CN), Notebook (zh-CN), Azure OpenAI, Chain of Thought reasoning, GTD (Getting Things Done) (+29 more)\n\n### Community 5 - \"Agent Tasks & Gateway\"\nCohesion: 0.08\nNodes (34): Search Optimization & Agent Documents (zh-CN), Agent Tasks and Agent Management (zh-CN), AI Auto-Completion & Real-Time Gateway (zh-CN), Agent Gateway & Customizable Sidebar (zh-CN), Daily Brief, Document History & Approval Flow (zh-CN), Coding Agent: Claude Code & Codex on Desktop (zh-CN), Delegate Claude Code and Codex (Review Tab) (zh-CN), Agent Tasks GA & Cloud Heterogeneous Agent (zh-CN) (+26 more)\n\n### Community 6 - \"Object Storage & Embeddings\"\nCohesion: 0.09\nNodes (32): Feature Flags Configuration (zh-CN), Knowledge Base / File Upload (zh-CN), 配置 S3 存储服务 (zh-CN), Cloudflare R2, FEATURE_FLAGS variable, Agent Gateway Mode, INTERNAL_APP_URL, MinIO (+24 more)\n\n### Community 7 - \"JSON Schema Definitions\"\nCohesion: 0.07\nNodes (31): additionalProperties, items, type, items, type, pattern, type, type (+23 more)\n\n### Community 8 - \"Auth Provider Configuration\"\nCohesion: 0.13\nNodes (29): Apple JWT client secret (ES256, 180-day expiry), OAuth Callback URL Pattern (/api/auth/callback/<provider>), Casdoor Webhook user-data sync, Auth Environment Variables (AUTH_SECRET, AUTH_SSO_PROVIDERS), LobeHub (self-hosted AI workspace), LobeHub Single Sign-On (Auth.js/NextAuth), OpenID Connect (OIDC), Configure Okta Identity Verification for LobeHub (+21 more)\n\n### Community 9 - \"Dev Tooling & Linting\"\nCohesion: 0.09\nNodes (24): canary Development Branch, Commitlint, Gitmoji Commit Convention, Code Style & Contributing Guidelines (zh-CN), @lobehub/lint, Semantic Release, Resources and References (zh-CN), Testing Guide (zh-CN) (+16 more)\n\n### Community 10 - \"Layered Architecture & Data Flow\"\nCohesion: 0.10\nNodes (22): Feature Development Complete Guide (zh-CN), Drizzle ORM, Frontend/Backend Layered Architecture, RFC 021 - Custom Assistant Opening Guidance, Zustand State Management, Next.js App Router Route Groups, Layered Data Flow (UI->Store->Service->tRPC->DB), Hybrid Routing (Next.js + React Router DOM) (+14 more)\n\n### Community 11 - \"LLM Provider Guides (AI21/302/360)\"\nCohesion: 0.10\nNodes (22): Using AI21 Labs in LobeHub, AI21 Labs (Jamba model series), Using AI21 Labs in LobeHub (zh-CN), Using 302.AI in LobeHub, 302.AI (pay-as-you-go AI aggregation platform), Using 302.AI in LobeHub (zh-CN), Using 360 Zhinao in LobeHub, 360 Zhinao (Qihoo 360 LLM) (+14 more)\n\n### Community 12 - \"Database Deployment (Docker)\"\nCohesion: 0.14\nNodes (20): Auth Env Vars (AUTH_SECRET / JWKS_KEY), Casdoor (identity provider), Logto (IAM / auth provider), ParadeDB image (paradedb/paradedb:latest-pg17), pg_search (full-text search), pgvector (vector search), PostgreSQL, Server Database Mode (+12 more)\n\n### Community 13 - \"Bot Platform & Connectors\"\nCohesion: 0.11\nNodes (19): Adding a New Bot Platform (en), Adding a New Bot Platform (zh-CN), Browser Pairing & Live Run Status (changelog, en), Browser Pairing & Live Run Status (changelog, zh-CN), Connectors & Connect Agents (changelog, en), Connectors & Connect Agents (changelog, zh-CN), Delivery Checks & Audio Messages (changelog, en), Delivery Checks & Audio Messages (changelog, zh-CN) (+11 more)\n\n### Community 14 - \"Email Service & Better Auth\"\nCohesion: 0.14\nNodes (18): Email Service Configuration (zh-CN), New Authentication Provider Guide (en), New Authentication Provider Guide (zh-CN), Better Auth (authentication framework), Email Service (Nodemailer/Resend), Email Verification (AUTH_EMAIL_VERIFICATION), Magic Link Login (AUTH_ENABLE_MAGIC_LINK), Nodemailer (SMTP) (+10 more)\n\n### Community 15 - \"Provider API Key Setup\"\nCohesion: 0.11\nNodes (18): Using Baichuan API Key in LobeHub (EN), Using Nvidia NIM in LobeHub, Nvidia NIM, Tencent Cloud (Hunyuan), Using Tencent Cloud in LobeHub, Vercel AI Gateway, Using Vercel AI Gateway in LobeHub, vLLM (+10 more)\n\n### Community 16 - \"Major LLM Providers\"\nCohesion: 0.11\nNodes (18): DeepSeek (V3 / R1 open-source LLM), Using DeepSeek API Key in LobeHub (EN), Using Google Gemini API Key in LobeHub (EN), Google Gemini (Google AI multimodal LLM suite), OpenAI (GPT-4o/GPT-4-turbo), Using OpenAI in LobeHub, OpenRouter (multi-model API aggregator), Using OpenRouter in LobeHub (+10 more)\n\n### Community 17 - \"Auth Migration (Clerk→Better Auth)\"\nCohesion: 0.19\nNodes (17): Migrating from Clerk to Better Auth (zh-CN), 配置 Clerk 身份验证服务 (zh-CN), Auth Migration Technical Deep Dive (zh-CN), Migrating from NextAuth to Better Auth (zh-CN), Clerk Authentication, Full Migration (accounts preserved), LobeHub 2.0, Migration tsx scripts (dry-run + verify) (+9 more)\n\n### Community 18 - \"Messaging Channels (LINE/QQ/WeChat)\"\nCohesion: 0.18\nNodes (16): Connect LobeHub to LINE (zh-CN), Channels Overview (zh-CN), Connect LobeHub to QQ (zh-CN), Connect LobeHub to Slack (zh-CN), Connect LobeHub to Telegram (zh-CN), Connect LobeHub to WeChat (zh-CN), Access Policies (DM/Group Policy + Allowed Users), iLink Bot API (WeChat long-polling) (+8 more)\n\n### Community 19 - \"UI Appearance & Misc Providers\"\nCohesion: 0.13\nNodes (15): Perplexity AI, Using Perplexity AI in LobeHub, SenseTime SenseNova, Using SenseTime SenseNova in LobeHub, Interface Appearance, Usage Statistics Dashboard, Usage Statistics, Wiki Home (moved to lobehub.com docs) (+7 more)\n\n### Community 20 - \"Deployment & Online Search\"\nCohesion: 0.19\nNodes (13): Data Analytics Integration (zh-CN), Online Search Configuration (zh-CN), Docker Compose Deployment, SearXNG, Vercel Deployment, Vercel Analytics, Web Crawlers (Browserless/Firecrawl/Tavily/Jina), Data Analytics Integration (+5 more)\n\n### Community 21 - \"Changelog: DeepSeek R1 & CoT\"\nCohesion: 0.23\nNodes (13): Changelog: DeepSeek R1 + CoT (v1.49.12, zh-CN), @AmAzing129 (contributor), @arvinxx (contributor), Chain-of-Thought reasoning display, Claude 3.7 Sonnet, DeepSeek R1 model, @hezhijie0327 (contributor), Online search & deep web crawling (+5 more)\n\n### Community 22 - \"Multimodal Generation & Pages\"\nCohesion: 0.18\nNodes (13): Generation Models (DALL-E 3, Flux, Sora, Veo, Kling), Vision / OCR Multimodal Understanding, Pages Agent, Vector Semantic Search / Embeddings, File Upload & Management, Image & Video Generation, 图像与视频生成 (Generation, zh-CN), Pages (+5 more)\n\n### Community 23 - \"Image Generation (FLUX/ComfyUI)\"\nCohesion: 0.18\nNodes (13): Black Forest Labs (FLUX image generation lab), Using Black Forest Labs API Key in LobeHub (EN), ComfyUI (node-based Stable Diffusion GUI), ComfyUI auth methods (None, Basic, Bearer, Custom), Using ComfyUI in LobeHub for Image Generation (EN), FLUX model series (Schnell, Dev, Kontext-dev), Comfy-Manager extension manager, Fal.ai (image/video inference: FLUX, Kling, HiDream) (+5 more)\n\n### Community 24 - \"Cloud Sandbox & Scheduled Tasks\"\nCohesion: 0.21\nNodes (12): Cloud Sandbox isolated code execution, Cloud Sandbox (云沙箱), CronJob scheduled Agent execution, Scheduled Tasks, 定时任务 (Scheduled Tasks), Web Search, Search grounding & citations, 网络搜索 (Web Search) (+4 more)\n\n### Community 25 - \"Messaging Channels (Discord/Feishu)\"\nCohesion: 0.27\nNodes (12): Channel access policies (DM Policy / Group Policy / Allowlist / Pairing), 将 LobeHub 连接到 Discord, Event Subscription im.message.receive_v1 webhook, 将 LobeHub 连接到飞书, 将 LobeHub 连接到 Lark, Platform User ID (pairing approval, AI tools push, anti-lockout), Connect LobeHub to Discord, Connect LobeHub to Feishu (飞书) (+4 more)\n\n### Community 26 - \"Bot Usage on Platforms\"\nCohesion: 0.27\nNodes (12): Use LobeHub on Discord, Use LobeHub on Discord (zh-CN), Messenger Overview, Account Linking (OAuth-style link flow), Active Agent Switching (/agents), Channels (public agent, bring-your-own bot), Official LobeHub Bot, Messenger Overview (zh-CN) (+4 more)\n\n### Community 27 - \"Changelog: Server DB & Flags\"\nCohesion: 0.27\nNodes (11): Authentication (next-auth / Clerk), Database Docker Image, Server-Side Database (Postgres), SSO / OAuth Auth Changelog (2024-02-08), SSO / OAuth Changelog (zh-CN), LobeHub 1.0 Changelog (2024-06-19), LobeHub 1.0 Changelog (zh-CN), Database Docker Image Changelog (2024-08-02) (+3 more)\n\n### Community 28 - \"Agent Builder & Memory\"\nCohesion: 0.22\nNodes (11): Agent Builder, Memory Agent, System Prompt / System Role, Web Search (built-in skill), Agent (Getting Started), Getting LobeHub, 获取 LobeHub (zh-CN), Lobe AI (built-in assistant) (+3 more)\n\n### Community 29 - \"Glossary Concepts\"\nCohesion: 0.18\nNodes (11): Agent, Agent Builder, Cloud Sandbox, Fork, LobeHub Glossary, Group (Agent Group), Lobe AI (Inbox), Memory (+3 more)\n\n### Community 30 - \"Observability & Monitoring\"\nCohesion: 0.33\nNodes (10): 启动自动更新 (zh-CN), Docker / Docker Compose, Grafana/Prometheus/Tempo/OpenTelemetry, Langfuse, Vercel / Zeabur Deployment & Upstream Sync, Observability with Grafana, Prometheus, Tempo, Monitor LobeHub with Langfuse, Upstream Sync and Docker Deployment (+2 more)\n\n### Community 31 - \"Claude Code & Codex\"\nCohesion: 0.31\nNodes (10): Claude Code (zh-CN), Codex (zh-CN), Artifacts (self-contained AI output), Claude Code CLI (Anthropic), Cloud Sandbox execution environment, Codex CLI (OpenAI), Execution Device (local/cloud/remote), Claude Code in LobeHub (+2 more)\n\n### Community 32 - \"Changelog: Custom Providers\"\nCohesion: 0.24\nNodes (10): Changelog: Four New Providers (Nov, zh-CN), Changelog: Custom AI Provider Management (zh-CN), Cloudflare Workers AI provider, Custom AI provider/model management, Gitee AI provider, InternLM provider (Shanghai AI Laboratory), OpenAI-compatible API endpoint, xAI provider (Grok) (+2 more)\n\n### Community 33 - \"Provider Billing & Plans\"\nCohesion: 0.20\nNodes (10): Ollama Local LLMs, Ollama Local Models Changelog (2024-02-14), Ollama Changelog (zh-CN), Budget, Credits, Custom API, LobeHub Provider, Model Provider (+2 more)\n\n### Community 34 - \"Ollama Local Models\"\nCohesion: 0.20\nNodes (10): Ollama (local LLM framework), Gemma (Google open model), Using Gemma via Ollama in LobeHub, Using Ollama in LobeHub, OLLAMA_ORIGINS cross-origin env var, Qwen (Alibaba open model), Using Qwen via Ollama in LobeHub, Using Gemma via Ollama in LobeHub (zh-CN) (+2 more)\n\n### Community 35 - \"Cloud Provider API Keys (Bedrock/Spark)\"\nCohesion: 0.22\nNodes (9): Baichuan AI, Amazon Bedrock (managed foundation model API), AWS IAM access keys (Access Key ID + Secret), Using Amazon Bedrock API Key in LobeHub (EN), iFLYTEK Spark, Using iFLYTEK Spark in LobeHub, AI Providers settings section, Using Amazon Bedrock API Key in LobeHub (zh-CN) (+1 more)\n\n### Community 36 - \"Topics & Conversation Sharing\"\nCohesion: 0.32\nNodes (8): 分享会话 (Share Conversations), 话题 (Topics), Share Conversations, Conversation export formats (Screenshot/Text/PDF/JSON/Link), Topics, Topic conversation management (search/rename/favorite/duplicate), Notebook, Agent Marketplace\n\n### Community 37 - \"TTS/STT & Translation\"\nCohesion: 0.32\nNodes (8): 会话翻译 (Conversation Translation), Microsoft Edge Speech (Azure Neural Voices), Text-to-Speech & Speech-to-Text, OpenAI Voices (Alloy/Echo/Fable/Onyx/Nova/Shimmer), Voice capabilities (TTS/STT/hands-free), 文字转语音与语音转文字 (TTS & STT), Translation Assistant (System Assistant model), Conversation Translation\n\n### Community 38 - \"MCP & Skills\"\nCohesion: 0.39\nNodes (8): Custom MCP (zh-CN), MCP Marketplace (zh-CN), Composio Integrations, Model Context Protocol (MCP) tools, Skills, Custom MCP, MCP Marketplace, Skill Management\n\n### Community 39 - \"Changelog: Database Docker Image\"\nCohesion: 0.29\nNodes (7): Changelog: Database Docker Image (v1.8.0, zh-CN), Auth0 / third-party SSO integration, Cloud data synchronization, Official Database Docker Image (90MB), LobeHub, NextAuth authentication, Server Postgres\n\n### Community 40 - \"Changelog: Artifacts & Code Interpreter\"\nCohesion: 0.33\nNodes (7): Changelog: Artifacts Era (v1.19, zh-CN), Claude Artifacts feature (SVG, HTML, rich documents), @CloudPassenger (contributor), Python code execution / OpenAI Code Interpreter, Redesigned discovery page, GitHub Models provider, Changelog: Artifacts Era (v1.19, en-US)\n\n### Community 41 - \"Agent Marketplace\"\nCohesion: 0.33\nNodes (7): Agent Marketplace (zh-CN), Community Creators (zh-CN), Publish Your Agent (zh-CN), Agent Marketplace (concept), Agent Marketplace, Community Creators, Publish Your Agent\n\n### Community 42 - \"Changelog: Plugins & TTS\"\nCohesion: 0.29\nNodes (7): Plugin System Changelog (2023-09-09), Plugin System Changelog (zh-CN), TTS & STT Changelog (2023-11-19), TTS & STT Changelog (zh-CN), STT (Speech-to-Text), TTS (Text-to-Speech), Web Search\n\n### Community 43 - \"Changelog: Vision Models\"\nCohesion: 0.29\nNodes (7): GPT-4 Vision Changelog (2023-11-14), GPT-4 Vision Changelog (zh-CN), GPT-4o Mini Changelog (2024-07-19), GPT-4o Mini Changelog (zh-CN), Model, OCR, Vision\n\n### Community 44 - \"Analytics Integrations\"\nCohesion: 0.43\nNodes (7): Google Analytics, Langfuse LLM Observability, PostHog Analytics, Umami Analytics, Vercel Analytics, Integrating Analytics in LobeHub (Env Vars), Analytics Environment Variables (zh-CN)\n\n### Community 45 - \"Redis Cache\"\nCohesion: 0.53\nNodes (6): 配置 Redis 缓存服务 (zh-CN), Redis (ioredis), Upstash Serverless Redis, Redis Cache Service Configuration, Configuring Upstash Redis Service, 配置 Upstash Redis 服务 (zh-CN)\n\n### Community 46 - \"Changelog: Knowledge Base\"\nCohesion: 0.40\nNodes (6): Changelog: Knowledge Base (en-US), Changelog: Knowledge Base (zh-CN), Files sidebar / file management, Knowledge Base feature, Portal interaction pattern, Automatic chunking and vectorization\n\n### Community 47 - \"Task Lifecycle & Branching\"\nCohesion: 0.33\nNodes (6): Agent (persistent teammate), Conversation Branching, Task Lifecycle (Backlog→In Progress→Pending Review→Done), Chat Interface & Branching, Task, 任务 (Task, zh-CN)\n\n### Community 48 - \"Cloud Sandbox & S3 Config\"\nCohesion: 0.33\nNodes (6): Market Sandbox, Onlyboxes Sandbox Provider, Cloud Sandbox Config, Configuring S3 Storage Service, Cloud Sandbox Config (zh-CN), Configuring S3 Storage Service (zh-CN)\n\n### Community 49 - \"Skills & Tools\"\nCohesion: 0.33\nNodes (6): Skill, Skill Store / Marketplace, Tool / Function Calling, 技能管理 (Skill Management, zh-CN), Skills and Tools, 助理 (Agent, zh-CN)\n\n### Community 50 - \"RAG & Knowledge Base\"\nCohesion: 0.47\nNodes (6): Embedding, File Chunk, File Upload, Knowledge Base (Library), RAG (Retrieval-Augmented Generation), Resources\n\n### Community 51 - \"Command Menu & Shortcuts\"\nCohesion: 0.33\nNodes (6): Command Menu (quick actions), Command Menu, Keyboard Shortcuts, Keyboard Shortcuts, Command Menu (zh-CN), Keyboard Shortcuts (zh-CN)\n\n### Community 52 - \"Agent Groups\"\nCohesion: 0.60\nNodes (5): Agent Groups (zh-CN), Agent Group, Collaboration Modes (Sequential/Parallel/Iterative/Debate), Group Moderator, Agent Groups\n\n### Community 53 - \"Integrations & Plugins\"\nCohesion: 0.50\nNodes (5): Integrations, MCP (Model Context Protocol), Skill (Plugin), Skill Store, Tool\n\n### Community 54 - \"Desktop Sync\"\nCohesion: 0.50\nNodes (4): LobeHub Desktop Sync (zh-CN), LobeHub Desktop (Electron), OIDC / JWKS_KEY (Desktop Sync), Automatic Sync with LobeHub Desktop\n\n### Community 55 - \"Changelog: Persistent Sidebar\"\nCohesion: 0.67\nNodes (4): Changelog: Persistent Agent Sidebar (v1.26.0, zh-CN), Persistent Agent sidebar, FEATURE_FLAGS=+pin_list, Changelog: Persistent Agent Sidebar (v1.26.0, en-US)\n\n### Community 56 - \"Changelog: Export Formats\"\nCohesion: 0.67\nNodes (4): Changelog: Markdown/OpenAI JSON Export (v1.28.0, zh-CN), Conversation export (Markdown / OpenAI JSON), Tool Calling data structure, Changelog: Markdown/OpenAI JSON Export (v1.28.0, en-US)\n\n### Community 57 - \"Changelog Index Schema\"\nCohesion: 0.50\nNodes (3): cloud, community, $schema\n\n### Community 58 - \"Claude Code Sub-agents\"\nCohesion: 0.67\nNodes (4): Claude Code, Codex, Sub-agents, Working Directory\n\n### Community 59 - \"GitHub Models\"\nCohesion: 0.50\nNodes (4): Using GitHub Models in LobeHub (EN), GitHub Models (marketplace model sandbox), GitHub Models rate limits (per model tier), Using GitHub Models in LobeHub (zh-CN)\n\n### Community 60 - \"Tongyi Qianwen (Qwen)\"\nCohesion: 0.67\nNodes (4): DashScope Model Service, Using Tongyi Qianwen in LobeHub, Tongyi Qianwen (Qwen, Alibaba Cloud), Using Tongyi Qianwen in LobeHub (zh-CN)\n\n### Community 61 - \"URL Settings Sharing (keyVaults/language\"\nCohesion: 1.00\nNodes (3): URL 分享设置参数 (zh-CN), URL Settings Sharing (keyVaults/languageModel), Share settings via URL\n\n### Community 62 - \"Changelog: OpenAI O1 Models (v1.17.0, en\"\nCohesion: 1.00\nNodes (3): Changelog: OpenAI O1 Models (v1.17.0, en-US), Changelog: OpenAI O1 Models (v1.17.0, zh-CN), OpenAI O1 series (o1-preview, o1-mini)\n\n### Community 63 - \"Conversation branching (continuation / s\"\nCohesion: 1.00\nNodes (3): Changelog: Branch Conversations (zh-CN), Conversation branching (continuation / standalone mode), Changelog: Branch Conversations (en-US)\n\n### Community 64 - \"Data statistics dashboard & activity car\"\nCohesion: 1.00\nNodes (3): Changelog: Personal Statistics & Activity Sharing (zh-CN), Data statistics dashboard & activity card, Changelog: Personal Statistics & Activity Sharing (en-US)\n\n### Community 65 - \"BlueBubbles bridge (iMessage relay)\"\nCohesion: 1.00\nNodes (3): BlueBubbles bridge (iMessage relay), 将 LobeHub 连接到 iMessage, Connect LobeHub to iMessage\n\n### Community 66 - \"Vercel Fluid Compute (300s max duration)\"\nCohesion: 0.67\nNodes (3): Vercel Fluid Compute (300s max duration), Vercel AI Image Generation Timeout FAQ, Vercel AI Image Generation Timeout FAQ (zh-CN)\n\n### Community 67 - \"pluginSelectors object\"\nCohesion: 1.00\nNodes (3): pluginSelectors object, Zustand Selectors, Data Store Selectors Module (zh-CN)\n\n### Community 68 - \"DALL-E 3 Text-to-Image Changelog (2023-1\"\nCohesion: 0.67\nNodes (3): DALL-E 3 Text-to-Image Changelog (2023-12-22), DALL-E 3 Changelog (zh-CN), Image Generation\n\n### Community 69 - \"Branching\"\nCohesion: 0.67\nNodes (3): Branching, Thread (Subtopic), Topic\n\n### Community 70 - \"Cloudflare Workers AI (serverless AI on \"\nCohesion: 0.67\nNodes (3): Cloudflare Workers AI (serverless AI on global edge), Using Cloudflare Workers AI in LobeHub (EN), Using Cloudflare Workers AI in LobeHub (zh-CN)\n\n### Community 71 - \"Fireworks AI (generative model inference\"\nCohesion: 0.67\nNodes (3): Fireworks AI (generative model inference platform), Using Fireworks AI in LobeHub (EN), Using Fireworks AI in LobeHub (zh-CN)\n\n### Community 72 - \"Gitee AI (Git-based AI dev platform, Ser\"\nCohesion: 0.67\nNodes (3): Gitee AI (Git-based AI dev platform, Serverless API), Using Gitee AI in LobeHub (EN), Using Gitee AI in LobeHub (zh-CN)\n\n### Community 73 - \"SambaNova (AI hardware/software, Palo Al\"\nCohesion: 0.67\nNodes (3): SambaNova (AI hardware/software, Palo Alto), Using SambaNova in LobeHub, Using SambaNova in LobeHub (zh-CN)\n\n### Community 74 - \"SiliconCloud (SiliconFlow, GenAI platfor\"\nCohesion: 0.67\nNodes (3): SiliconCloud (SiliconFlow, GenAI platform), Using SiliconCloud in LobeHub, Using SiliconCloud in LobeHub (zh-CN)\n\n### Community 75 - \"StepFun\"\nCohesion: 0.67\nNodes (3): StepFun, Using StepFun in LobeHub, Using StepFun in LobeHub (zh-CN)\n\n### Community 76 - \"Taichu (Institute of Automation, CAS)\"\nCohesion: 0.67\nNodes (3): Taichu (Institute of Automation, CAS), Using Taichu in LobeHub, Using Taichu in LobeHub (zh-CN)\n\n### Community 77 - \"Together AI\"\nCohesion: 0.67\nNodes (3): Together AI, Using Together AI in LobeHub, Using Together AI in LobeHub (zh-CN)\n\n### Community 78 - \"Upstage (Solar)\"\nCohesion: 0.67\nNodes (3): Upstage (Solar), Using Upstage in LobeHub, Using Upstage in LobeHub (zh-CN)\n\n### Community 79 - \"Google Vertex AI\"\nCohesion: 0.67\nNodes (3): Google Vertex AI, Using Google Vertex AI in LobeHub, Using Google Vertex AI in LobeHub (zh-CN)\n\n### Community 80 - \"Baidu Wenxin (ERNIE)\"\nCohesion: 0.67\nNodes (3): Baidu Wenxin (ERNIE), Using Wenxin (ERNIE) in LobeHub, Using Wenxin (ERNIE) in LobeHub (zh-CN)\n\n### Community 81 - \"xAI (Grok)\"\nCohesion: 0.67\nNodes (3): xAI (Grok), Using xAI (Grok) in LobeHub, Using xAI (Grok) in LobeHub (zh-CN)\n\n### Community 82 - \"01.AI (Yi)\"\nCohesion: 0.67\nNodes (3): 01.AI (Yi), Using 01.AI (Yi) in LobeHub, Using 01.AI (Yi) in LobeHub (zh-CN)\n\n### Community 83 - \"Zhipu AI (GLM)\"\nCohesion: 0.67\nNodes (3): Zhipu AI (GLM), Using Zhipu (GLM) in LobeHub, Using Zhipu (GLM) in LobeHub (zh-CN)\n\n## Ambiguous Edges - Review These\n- `Help & Support (zh-CN)` → `Migrate from v1.x Local Database to v2.x` [AMBIGUOUS]\n docs/usage/migrate-from-local-database.mdx · relation: references\n\n## Knowledge Gaps\n- **406 isolated node(s):** `$schema`, `cloud`, `community`, `additionalProperties`, `type` (+401 more)\n These have ≤1 connection - possible missing edges or undocumented components.\n- **9 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.\n\n## Suggested Questions\n_Questions this graph is uniquely positioned to answer:_\n\n- **What is the exact relationship between `Help & Support (zh-CN)` and `Migrate from v1.x Local Database to v2.x`?**\n _Edge tagged AMBIGUOUS (relation: references) - confidence is low._\n- **Why does `Better Auth (authentication framework)` connect `Email Service & Better Auth` to `SSO & OIDC Authentication`, `Architecture & Contribution Guides`, `Database Deployment (Docker)`, `Redis Cache`, `Auth Migration (Clerk→Better Auth)`?**\n _High betweenness centrality (0.084) - this node is a cross-community bridge._\n- **Why does `Architecture Design (en)` connect `Architecture & Contribution Guides` to `Email Service & Better Auth`?**\n _High betweenness centrality (0.067) - this node is a cross-community bridge._\n- **Why does `Model Context Protocol (MCP) tools` connect `MCP & Skills` to `Skills & Tools`, `Architecture & Contribution Guides`, `Model List & Reasoning Features`, `Bot Platform & Connectors`?**\n _High betweenness centrality (0.061) - this node is a cross-community bridge._\n- **Are the 3 inferred relationships involving `Better Auth (authentication framework)` (e.g. with `Clerk Authentication` and `Email Verification (AUTH_EMAIL_VERIFICATION)`) actually correct?**\n _`Better Auth (authentication framework)` has 3 INFERRED edges - model-reasoned connections that need verification._\n- **What connects `$schema`, `cloud`, `community` to the rest of the system?**\n _406 weakly-connected nodes found - possible documentation gaps or missing edges._\n- **Should `SSO & OIDC Authentication` be split into smaller, more focused modules?**\n _Cohesion score 0.05115089514066496 - nodes in this community are weakly interconnected._"}}, "graphify-out/cache/semantic/5b93a4e001854573d067bd48b3441fc2826f891f86ef10a8f6018f02084dc032.json": {"ab601b2ced51e606fcd3554040adcd1129eadaf9": {"t": 1785809833.8710093, "n": 1017, "h": "5b7f5c6f61a99c08", "c": "{\"nodes\": [{\"id\": \"providers_ai360\", \"label\": \"Using 360 Zhinao in LobeHub\", \"file_type\": \"document\", \"source_file\": \"docs/usage/providers/ai360.mdx\", \"source_location\": null, \"source_url\": null, \"captured_at\": null, \"author\": null, \"contributor\": null}, {\"id\": \"providers_ai360_company\", \"label\": \"360 Zhinao (Qihoo 360 LLM)\", \"file_type\": \"concept\", \"source_file\": \"docs/usage/providers/ai360.mdx\", \"source_location\": null, \"source_url\": null, \"captured_at\": null, \"author\": null, \"contributor\": null}], \"edges\": [{\"source\": \"providers_ai360\", \"target\": \"providers_ai360_company\", \"relation\": \"references\", \"confidence\": \"EXTRACTED\", \"confidence_score\": 1.0, \"source_file\": \"docs/usage/providers/ai360.mdx\", \"source_location\": null, \"weight\": 1.0}, {\"source\": \"providers_ai360\", \"target\": \"providers_api_key_setup\", \"relation\": \"conceptually_related_to\", \"confidence\": \"INFERRED\", \"confidence_score\": 0.85, \"source_file\": \"docs/usage/providers/ai360.mdx\", \"source_location\": null, \"weight\": 1.0}], \"hyperedges\": []}"}}, "packages/model-runtime/src/providers/ai360/index.test.ts": {"ab601b2ced51e606fcd3554040adcd1129eadaf9": {"t": 1785809835.8056192, "n": 37882, "h": "42ae92f0bcba4815", "c": "// @vitest-environment node\nimport { ModelProvider } from 'model-bank';\nimport { beforeEach, describe, expect, it, vi } from 'vitest';\n\nimport { testProvider } from '../../providerTestUtils';\nimport { LobeAi360AI, params } from './index';\n\ntestProvider({\n Runtime: LobeAi360AI,\n provider: ModelProvider.Ai360,\n defaultBaseURL: 'https://api.360.cn/v1',\n chatDebugEnv: 'DEBUG_AI360_CHAT_COMPLETION',\n chatModel: 'deepseek-r1',\n invalidErrorType: 'InvalidProviderAPIKey',\n bizErrorType: 'ProviderBizError',\n test: {\n skipAPICall: true,\n skipErrorHandle: true,\n },\n});\n\ndescribe('LobeAi360AI - custom features', () => {\n let instance: InstanceType<typeof LobeAi360AI>;\n\n beforeEach(() => {\n instance = new LobeAi360AI({ apiKey: 'test_api_key' });\n vi.spyOn(instance['client'].chat.completions, 'create').mockResolvedValue(\n new ReadableStream() as any,\n );\n });\n\n describe('params.debug', () => {\n it('should disable debug mode by default', () => {\n delete process.env.DEBUG_AI360_CHAT_COMPLETION;\n const result = params.debug.chatCompletion();\n expect(result).toBe(false);\n });\n\n it('should enable debug mode when DEBUG_AI360_CHAT_COMPLETION is set to 1', () => {\n process.env.DEBUG_AI360_CHAT_COMPLETION = '1';\n const result = params.debug.chatCompletion();\n expect(result).toBe(true);\n delete process.env.DEBUG_AI360_CHAT_COMPLETION;\n });\n\n it('should disable debug mode when DEBUG_AI360_CHAT_COMPLETION is not 1', () => {\n process.env.DEBUG_AI360_CHAT_COMPLETION = '0';\n const result = params.debug.chatCompletion();\n expect(result).toBe(false);\n delete process.env.DEBUG_AI360_CHAT_COMPLETION;\n });\n });\n\n describe('params.chatCompletion.handlePayload', () => {\n it('should add web_search tool when enabledSearch is true', () => {\n const payload = {\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n enabledSearch: true,\n } as any;\n\n const result = params.chatCompletion.handlePayload!(payload);\n\n expect(result.tools).toBeDefined();\n expect(result.tools?.some((tool: any) => tool.type === 'web_search')).toBe(true);\n expect(result.tools?.find((tool: any) => tool.type === 'web_search')).toEqual({\n type: 'web_search',\n web_search: {\n search_mode: 'auto',\n },\n });\n });\n\n it('should correctly set web_search properties', () => {\n const payload = {\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n enabledSearch: true,\n } as any;\n\n const result = params.chatCompletion.handlePayload!(payload);\n const webSearchTool = result.tools?.find((tool: any) => tool.type === 'web_search');\n\n expect(webSearchTool).toBeDefined();\n expect(webSearchTool.type).toBe('web_search');\n expect(webSearchTool.web_search).toBeDefined();\n expect(webSearchTool.web_search.search_mode).toBe('auto');\n });\n\n it('should not add web_search tool when enabledSearch is false', () => {\n const payload = {\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n enabledSearch: false,\n } as any;\n\n const result = params.chatCompletion.handlePayload!(payload);\n\n expect(result.tools).toBeUndefined();\n });\n\n it('should not add web_search tool when enabledSearch is not present', () => {\n const payload = {\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n } as any;\n\n const result = params.chatCompletion.handlePayload!(payload);\n\n expect(result.tools).toBeUndefined();\n });\n\n it('should disable stream when tools are present', () => {\n const payload = {\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n tools: [{ type: 'function', function: { name: 'test' } }],\n } as any;\n\n const result = params.chatCompletion.handlePayload!(payload);\n\n expect(result.stream).toBe(false);\n });\n\n it('should disable stream when enabledSearch is true', () => {\n const payload = {\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n enabledSearch: true,\n } as any;\n\n const result = params.chatCompletion.handlePayload!(payload);\n\n expect(result.stream).toBe(false);\n });\n\n it('should not set stream to false when no tools', () => {\n const payload = {\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n } as any;\n\n const result = params.chatCompletion.handlePayload!(payload);\n\n expect(result.stream).not.toBe(false);\n });\n\n it('should merge tools with web_search when enabledSearch is true', () => {\n const existingTool = { type: 'function', function: { name: 'existing_tool' } };\n const payload = {\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n enabledSearch: true,\n tools: [existingTool],\n } as any;\n\n const result = params.chatCompletion.handlePayload!(payload);\n\n expect(result.tools).toHaveLength(2);\n expect(result.tools).toContainEqual(existingTool);\n expect(result.tools?.some((tool: any) => tool.type === 'web_search')).toBe(true);\n });\n\n it('should remove enabledSearch from payload', () => {\n const payload = {\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n enabledSearch: true,\n } as any;\n\n const result = params.chatCompletion.handlePayload!(payload);\n\n expect(result.enabledSearch).toBeUndefined();\n });\n\n it('should preserve other payload properties', () => {\n const payload = {\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n temperature: 0.7,\n max_tokens: 1024,\n top_p: 0.9,\n } as any;\n\n const result = params.chatCompletion.handlePayload!(payload);\n\n expect(result.messages).toEqual(payload.messages);\n expect(result.model).toBe(payload.model);\n expect(result.temperature).toBe(payload.temperature);\n expect(result.max_tokens).toBe(payload.max_tokens);\n expect(result.top_p).toBe(payload.top_p);\n });\n\n it('should handle empty tools array when enabledSearch is true', () => {\n const payload = {\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n enabledSearch: true,\n tools: [],\n } as any;\n\n const result = params.chatCompletion.handlePayload!(payload);\n\n expect(result.tools).toHaveLength(1);\n expect(result.tools?.[0].type).toBe('web_search');\n });\n\n it('should handle multiple existing tools when enabledSearch is true', () => {\n const payload = {\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n enabledSearch: true,\n tools: [\n { type: 'function', function: { name: 'tool1' } },\n { type: 'function', function: { name: 'tool2' } },\n ],\n } as any;\n\n const result = params.chatCompletion.handlePayload!(payload);\n\n expect(result.tools).toHaveLength(3);\n expect(result.tools?.[0].function.name).toBe('tool1');\n expect(result.tools?.[1].function.name).toBe('tool2');\n expect(result.tools?.[2].type).toBe('web_search');\n });\n });\n\n describe('params.models', () => {\n it('should fetch and process models successfully', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockResolvedValue({\n data: [\n {\n id: '360gpt-pro',\n max_tokens: 4096,\n total_tokens: 8192,\n },\n {\n id: '360gpt2-o1',\n max_tokens: 8192,\n total_tokens: 16384,\n },\n ],\n }),\n },\n };\n\n const models = await params.models!({ client: mockClient as any });\n\n expect(models).toHaveLength(2);\n expect(mockClient.models.list).toHaveBeenCalled();\n });\n\n it('should correctly map model properties', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockResolvedValue({\n data: [\n {\n id: '360gpt-pro',\n max_tokens: 4096,\n total_tokens: 8192,\n },\n ],\n }),\n },\n };\n\n const models = await params.models!({ client: mockClient as any });\n const model = models[0];\n\n expect(model.id).toBe('360gpt-pro');\n expect(model.contextWindowTokens).toBe(8192);\n expect(model.maxOutput).toBe(4096);\n });\n\n it('should detect 360gpt-pro as function call capable', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockResolvedValue({\n data: [\n {\n id: '360gpt-pro',\n max_tokens: 4096,\n total_tokens: 8192,\n },\n ],\n }),\n },\n };\n\n const models = await params.models!({ client: mockClient as any });\n const model = models[0];\n\n expect(model.functionCall).toBe(true);\n });\n\n it('should detect reasoning models with 360gpt2-o1 keyword', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockResolvedValue({\n data: [\n {\n id: '360gpt2-o1',\n max_tokens: 8192,\n total_tokens: 16384,\n },\n ],\n }),\n },\n };\n\n const models = await params.models!({ client: mockClient as any });\n const model = models[0];\n\n expect(model.reasoning).toBe(true);\n });\n\n it('should detect reasoning models with 360zhinao2-o1 keyword', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockResolvedValue({\n data: [\n {\n id: '360zhinao2-o1-preview',\n max_tokens: 8192,\n total_tokens: 16384,\n },\n ],\n }),\n },\n };\n\n const models = await params.models!({ client: mockClient as any });\n const model = models[0];\n\n expect(model.reasoning).toBe(true);\n });\n\n it('should handle case-insensitive reasoning keyword matching', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockResolvedValue({\n data: [\n {\n id: '360GPT2-O1',\n max_tokens: 8192,\n total_tokens: 16384,\n },\n ],\n }),\n },\n };\n\n const models = await params.models!({ client: mockClient as any });\n const model = models[0];\n\n expect(model.reasoning).toBe(true);\n });\n\n it('should merge with LOBE_DEFAULT_MODEL_LIST for known models', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockResolvedValue({\n data: [\n {\n id: '360gpt-pro',\n max_tokens: 4096,\n total_tokens: 8192,\n },\n ],\n }),\n },\n };\n\n const models = await params.models!({ client: mockClient as any });\n const model = models[0];\n\n // Known models from LOBE_DEFAULT_MODEL_LIST should have displayName and enabled flag\n expect(model.displayName).toBeDefined();\n expect(model.enabled).toBeDefined();\n });\n\n it('should handle models not in LOBE_DEFAULT_MODEL_LIST', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockResolvedValue({\n data: [\n {\n id: 'unknown-model',\n max_tokens: 2048,\n total_tokens: 4096,\n },\n ],\n }),\n },\n };\n\n const models = await params.models!({ client: mockClient as any });\n const model = models[0];\n\n expect(model.id).toBe('unknown-model');\n expect(model.displayName).toBeUndefined();\n expect(model.enabled).toBe(false);\n });\n\n it('should inherit abilities from LOBE_DEFAULT_MODEL_LIST', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockResolvedValue({\n data: [\n {\n id: '360gpt-pro',\n max_tokens: 4096,\n total_tokens: 8192,\n },\n ],\n }),\n },\n };\n\n const models = await params.models!({ client: mockClient as any });\n const model = models[0];\n\n // Check that abilities are inherited from known model\n expect(typeof model.functionCall).toBe('boolean');\n expect(typeof model.vision).toBe('boolean');\n expect(typeof model.reasoning).toBe('boolean');\n });\n\n it('should handle models with non-number max_tokens', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockResolvedValue({\n data: [\n {\n id: 'test-model',\n max_tokens: 'unlimited' as any,\n total_tokens: 8192,\n },\n ],\n }),\n },\n };\n\n const models = await params.models!({ client: mockClient as any });\n const model = models[0];\n\n expect(model.maxOutput).toBeUndefined();\n });\n\n it('should handle models with null max_tokens', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockResolvedValue({\n data: [\n {\n id: 'test-model',\n max_tokens: null as any,\n total_tokens: 8192,\n },\n ],\n }),\n },\n };\n\n const models = await params.models!({ client: mockClient as any });\n const model = models[0];\n\n expect(model.maxOutput).toBeUndefined();\n });\n\n it('should handle empty model list', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockResolvedValue({\n data: [],\n }),\n },\n };\n\n const models = await params.models!({ client: mockClient as any });\n\n expect(models).toEqual([]);\n });\n\n it('should handle model list with valid models only', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockResolvedValue({\n data: [\n {\n id: 'model1',\n max_tokens: 4096,\n total_tokens: 8192,\n },\n {\n id: 'model2',\n max_tokens: 2048,\n total_tokens: 4096,\n },\n ],\n }),\n },\n };\n\n const models = await params.models!({ client: mockClient as any });\n\n expect(models).toHaveLength(2);\n expect(models.every((m) => m !== null && m.id)).toBe(true);\n });\n\n it('should handle API errors gracefully', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockRejectedValue(new Error('API Error')),\n },\n };\n\n await expect(params.models!({ client: mockClient as any })).rejects.toThrow('API Error');\n });\n\n it('should set reasoning to false for non-reasoning models', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockResolvedValue({\n data: [\n {\n id: '360gpt-base',\n max_tokens: 4096,\n total_tokens: 8192,\n },\n ],\n }),\n },\n };\n\n const models = await params.models!({ client: mockClient as any });\n const model = models[0];\n\n expect(model.reasoning).toBe(false);\n });\n\n it('should set functionCall to false for non-360gpt-pro models without functionCall ability', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockResolvedValue({\n data: [\n {\n id: 'test-model',\n max_tokens: 4096,\n total_tokens: 8192,\n },\n ],\n }),\n },\n };\n\n const models = await params.models!({ client: mockClient as any });\n const model = models[0];\n\n expect(model.functionCall).toBe(false);\n });\n\n it('should set vision to false for models without vision ability', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockResolvedValue({\n data: [\n {\n id: 'test-model',\n max_tokens: 4096,\n total_tokens: 8192,\n },\n ],\n }),\n },\n };\n\n const models = await params.models!({ client: mockClient as any });\n const model = models[0];\n\n expect(model.vision).toBe(false);\n });\n\n it('should handle case-insensitive model ID matching with LOBE_DEFAULT_MODEL_LIST', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockResolvedValue({\n data: [\n {\n id: '360GPT-PRO',\n max_tokens: 4096,\n total_tokens: 8192,\n },\n ],\n }),\n },\n };\n\n const models = await params.models!({ client: mockClient as any });\n const model = models[0];\n\n // Should match case-insensitively with LOBE_DEFAULT_MODEL_LIST\n expect(model.id).toBe('360GPT-PRO');\n expect(model.displayName).toBeDefined();\n });\n\n it('should handle models with all properties present', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockResolvedValue({\n data: [\n {\n id: '360gpt-pro',\n max_tokens: 4096,\n total_tokens: 8192,\n },\n ],\n }),\n },\n };\n\n const models = await params.models!({ client: mockClient as any });\n const model = models[0];\n\n expect(model).toHaveProperty('id');\n expect(model).toHaveProperty('contextWindowTokens');\n expect(model).toHaveProperty('maxOutput');\n expect(model).toHaveProperty('functionCall');\n expect(model).toHaveProperty('vision');\n expect(model).toHaveProperty('reasoning');\n expect(model).toHaveProperty('enabled');\n });\n\n it('should detect all reasoning model variants correctly', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockResolvedValue({\n data: [\n {\n id: '360gpt2-o1',\n max_tokens: 8192,\n total_tokens: 16384,\n },\n {\n id: '360gpt2-o1-preview',\n max_tokens: 8192,\n total_tokens: 16384,\n },\n {\n id: '360zhinao2-o1',\n max_tokens: 8192,\n total_tokens: 16384,\n },\n {\n id: '360zhinao2-o1-mini',\n max_tokens: 8192,\n total_tokens: 16384,\n },\n ],\n }),\n },\n };\n\n const models = await params.models!({ client: mockClient as any });\n\n expect(models).toHaveLength(4);\n expect(models.every((m) => m.reasoning === true)).toBe(true);\n });\n\n it('should handle models with zero context window', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockResolvedValue({\n data: [\n {\n id: 'test-model',\n max_tokens: 0,\n total_tokens: 0,\n },\n ],\n }),\n },\n };\n\n const models = await params.models!({ client: mockClient as any });\n const model = models[0];\n\n expect(model.contextWindowTokens).toBe(0);\n expect(model.maxOutput).toBe(0);\n });\n\n it('should handle very large context window values', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockResolvedValue({\n data: [\n {\n id: 'large-context-model',\n max_tokens: 128000,\n total_tokens: 1000000,\n },\n ],\n }),\n },\n };\n\n const models = await params.models!({ client: mockClient as any });\n const model = models[0];\n\n expect(model.contextWindowTokens).toBe(1000000);\n expect(model.maxOutput).toBe(128000);\n });\n\n it('should handle models with special characters in ID', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockResolvedValue({\n data: [\n {\n id: '360gpt-pro-v2.0-beta',\n max_tokens: 4096,\n total_tokens: 8192,\n },\n ],\n }),\n },\n };\n\n const models = await params.models!({ client: mockClient as any });\n const model = models[0];\n\n expect(model.id).toBe('360gpt-pro-v2.0-beta');\n });\n\n it('should detect 360gpt-pro as functionCall capable', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockResolvedValue({\n data: [\n {\n id: '360gpt-pro',\n max_tokens: 4096,\n total_tokens: 8192,\n },\n ],\n }),\n },\n };\n\n const models = await params.models!({ client: mockClient as any });\n const model = models[0];\n\n expect(model.id).toBe('360gpt-pro');\n expect(model.functionCall).toBe(true);\n });\n\n it('should prioritize reasoning from keyword over knownModel', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockResolvedValue({\n data: [\n {\n id: '360gpt2-o1-custom',\n max_tokens: 8192,\n total_tokens: 16384,\n },\n ],\n }),\n },\n };\n\n const models = await params.models!({ client: mockClient as any });\n const model = models[0];\n\n // Should detect reasoning from keyword even if not in LOBE_DEFAULT_MODEL_LIST\n expect(model.reasoning).toBe(true);\n });\n\n it('should prioritize functionCall from model ID check over knownModel', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockResolvedValue({\n data: [\n {\n id: '360gpt-pro',\n max_tokens: 4096,\n total_tokens: 8192,\n },\n ],\n }),\n },\n };\n\n const models = await params.models!({ client: mockClient as any });\n const model = models[0];\n\n expect(model.functionCall).toBe(true);\n });\n\n it('should merge multiple capabilities correctly', async () => {\n const mockClient = {\n models: {\n list: vi.fn().mockResolvedValue({\n data: [\n {\n id: '360gpt2-o1',\n max_tokens: 8192,\n total_tokens: 16384,\n },\n ],\n }),\n },\n };\n\n const models = await params.models!({ client: mockClient as any });\n const model = models[0];\n\n expect(model.reasoning).toBe(true);\n expect(typeof model.functionCall).toBe('boolean');\n expect(typeof model.vision).toBe('boolean');\n });\n });\n\n describe('LobeAi360AI instance - integration tests', () => {\n it('should add web_search tool when enabledSearch is true', async () => {\n await instance.chat({\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n enabledSearch: true,\n });\n\n const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];\n expect(calledPayload.tools).toBeDefined();\n expect(calledPayload.tools?.some((tool: any) => tool.type === 'web_search')).toBe(true);\n });\n\n it('should disable stream when tools are present', async () => {\n await instance.chat({\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n tools: [{ type: 'function', function: { name: 'test' } }],\n });\n\n const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];\n expect(calledPayload.stream).toBe(false);\n });\n\n it('should enable stream when no tools', async () => {\n await instance.chat({\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n });\n\n const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];\n expect(calledPayload.stream).not.toBe(false);\n });\n\n it('should merge tools with web_search when enabledSearch is true', async () => {\n await instance.chat({\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n enabledSearch: true,\n tools: [{ type: 'function', function: { name: 'existing_tool' } }],\n });\n\n const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];\n expect(calledPayload.tools).toHaveLength(2);\n expect(calledPayload.tools?.some((tool: any) => tool.type === 'function')).toBe(true);\n expect(calledPayload.tools?.some((tool: any) => tool.type === 'web_search')).toBe(true);\n });\n\n it('should preserve temperature without normalization', async () => {\n await instance.chat({\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n temperature: 0.7,\n });\n\n const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];\n expect(calledPayload.temperature).toBe(0.7);\n });\n\n it('should preserve top_p without modification', async () => {\n await instance.chat({\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n top_p: 0.9,\n });\n\n const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];\n expect(calledPayload.top_p).toBe(0.9);\n });\n\n it('should preserve max_tokens without modification', async () => {\n await instance.chat({\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n max_tokens: 1024,\n });\n\n const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];\n expect(calledPayload.max_tokens).toBe(1024);\n });\n\n it('should preserve messages as-is', async () => {\n const messages = [\n { content: 'Hello', role: 'user' as const },\n { content: 'Hi there!', role: 'assistant' as const },\n { content: 'How are you?', role: 'user' as const },\n ];\n\n await instance.chat({\n messages,\n model: '360gpt-pro',\n });\n\n const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];\n expect(calledPayload.messages).toEqual(messages);\n });\n\n it('should preserve model name', async () => {\n await instance.chat({\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt2-o1',\n });\n\n const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];\n expect(calledPayload.model).toBe('360gpt2-o1');\n });\n\n it('should handle combined parameters correctly', async () => {\n await instance.chat({\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n temperature: 0.8,\n top_p: 0.85,\n max_tokens: 2048,\n });\n\n const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];\n expect(calledPayload.model).toBe('360gpt-pro');\n expect(calledPayload.temperature).toBe(0.8);\n expect(calledPayload.top_p).toBe(0.85);\n expect(calledPayload.max_tokens).toBe(2048);\n });\n\n it('should not include undefined parameters in payload', async () => {\n await instance.chat({\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n });\n\n const callArgs = vi.mocked(instance['client'].chat.completions.create).mock.calls[0][0];\n expect(callArgs).not.toHaveProperty('temperature');\n expect(callArgs).not.toHaveProperty('top_p');\n expect(callArgs).not.toHaveProperty('max_tokens');\n });\n });\n\n describe('exports', () => {\n it('should export params object', () => {\n expect(params).toBeDefined();\n expect(params.provider).toBe(ModelProvider.Ai360);\n expect(params.baseURL).toBe('https://api.360.cn/v1');\n });\n\n it('should export LobeAi360AI class', () => {\n expect(LobeAi360AI).toBeDefined();\n expect(typeof LobeAi360AI).toBe('function');\n });\n\n it('should export params with all required properties', () => {\n expect(params).toHaveProperty('provider');\n expect(params).toHaveProperty('baseURL');\n expect(params).toHaveProperty('chatCompletion');\n expect(params).toHaveProperty('debug');\n expect(params).toHaveProperty('models');\n });\n\n it('should have chatCompletion.handlePayload function', () => {\n expect(params.chatCompletion).toBeDefined();\n expect(params.chatCompletion.handlePayload).toBeDefined();\n expect(typeof params.chatCompletion.handlePayload).toBe('function');\n });\n\n it('should have debug.chatCompletion function', () => {\n expect(params.debug).toBeDefined();\n expect(params.debug.chatCompletion).toBeDefined();\n expect(typeof params.debug.chatCompletion).toBe('function');\n });\n\n it('should have models function', () => {\n expect(params.models).toBeDefined();\n expect(typeof params.models).toBe('function');\n });\n });\n\n describe('edge cases and comprehensive coverage', () => {\n it('should handle payload with undefined tools', () => {\n const payload = {\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n tools: undefined,\n } as any;\n\n const result = params.chatCompletion.handlePayload!(payload);\n expect(result.tools).toBeUndefined();\n });\n\n it('should handle payload with null tools', () => {\n const payload = {\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n tools: null as any,\n } as any;\n\n const result = params.chatCompletion.handlePayload!(payload);\n expect(result.tools).toBeNull();\n });\n\n it('should handle empty messages array', async () => {\n await instance.chat({\n messages: [],\n model: '360gpt-pro',\n });\n\n const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];\n expect(calledPayload.messages).toEqual([]);\n });\n\n it('should handle very small temperature values', async () => {\n await instance.chat({\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n temperature: 0.01,\n });\n\n const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];\n expect(calledPayload.temperature).toBe(0.01);\n });\n\n it('should handle temperature of 0', async () => {\n await instance.chat({\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n temperature: 0,\n });\n\n const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];\n expect(calledPayload.temperature).toBe(0);\n });\n\n it('should handle temperature of 1', async () => {\n await instance.chat({\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n temperature: 1,\n });\n\n const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];\n expect(calledPayload.temperature).toBe(1);\n });\n\n it('should handle high temperature values', async () => {\n await instance.chat({\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n temperature: 2,\n });\n\n const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];\n expect(calledPayload.temperature).toBe(2);\n });\n\n it('should handle top_p of 0', async () => {\n await instance.chat({\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n top_p: 0,\n });\n\n const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];\n expect(calledPayload.top_p).toBe(0);\n });\n\n it('should handle top_p of 1', async () => {\n await instance.chat({\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n top_p: 1,\n });\n\n const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];\n expect(calledPayload.top_p).toBe(1);\n });\n\n it('should handle very small top_p values', async () => {\n await instance.chat({\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n top_p: 0.01,\n });\n\n const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];\n expect(calledPayload.top_p).toBe(0.01);\n });\n\n it('should handle large max_tokens values', async () => {\n await instance.chat({\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n max_tokens: 100000,\n });\n\n const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];\n expect(calledPayload.max_tokens).toBe(100000);\n });\n\n it('should handle complex message history with multiple roles', async () => {\n const messages = [\n { content: 'You are a helpful assistant', role: 'system' as const },\n { content: 'Hello', role: 'user' as const },\n { content: 'Hi! How can I help?', role: 'assistant' as const },\n { content: 'What is 2+2?', role: 'user' as const },\n { content: '2+2 equals 4', role: 'assistant' as const },\n { content: 'Thanks', role: 'user' as const },\n ];\n\n await instance.chat({\n messages,\n model: '360gpt-pro',\n });\n\n const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];\n expect(calledPayload.messages).toEqual(messages);\n });\n\n it('should handle combined parameters with web search', async () => {\n await instance.chat({\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n temperature: 0.8,\n top_p: 0.85,\n max_tokens: 2048,\n enabledSearch: true,\n });\n\n const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];\n expect(calledPayload.temperature).toBe(0.8);\n expect(calledPayload.top_p).toBe(0.85);\n expect(calledPayload.max_tokens).toBe(2048);\n expect(calledPayload.stream).toBe(false);\n expect(calledPayload.tools?.some((tool: any) => tool.type === 'web_search')).toBe(true);\n });\n\n it('should handle combined parameters with tools and no web search', async () => {\n await instance.chat({\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n temperature: 0.9,\n top_p: 0.95,\n max_tokens: 4096,\n tools: [{ type: 'function', function: { name: 'test_tool' } }],\n });\n\n const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];\n expect(calledPayload.temperature).toBe(0.9);\n expect(calledPayload.top_p).toBe(0.95);\n expect(calledPayload.max_tokens).toBe(4096);\n expect(calledPayload.stream).toBe(false);\n expect(calledPayload.tools).toHaveLength(1);\n });\n\n it('should preserve all model parameters', async () => {\n await instance.chat({\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360zhinao2-o1-preview',\n });\n\n const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];\n expect(calledPayload.model).toBe('360zhinao2-o1-preview');\n });\n\n it('should handle multiple function tools', async () => {\n const tools = [\n { type: 'function' as const, function: { name: 'tool1', description: 'First tool' } },\n { type: 'function' as const, function: { name: 'tool2', description: 'Second tool' } },\n { type: 'function' as const, function: { name: 'tool3', description: 'Third tool' } },\n ];\n\n await instance.chat({\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n tools,\n });\n\n const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];\n expect(calledPayload.tools).toHaveLength(3);\n expect(calledPayload.stream).toBe(false);\n });\n\n it('should handle enabledSearch with multiple function tools', async () => {\n const tools = [\n { type: 'function' as const, function: { name: 'tool1', description: 'First tool' } },\n { type: 'function' as const, function: { name: 'tool2', description: 'Second tool' } },\n ];\n\n await instance.chat({\n messages: [{ content: 'Hello', role: 'user' }],\n model: '360gpt-pro',\n enabledSearch: true,\n tools,\n });\n\n const calledPayload = (instance['client'].chat.completions.create as any).mock.calls[0][0];\n expect(calledPayload.tools).toHaveLength(3);\n expect(calledPayload.tools?.filter((t: any) => t.type === 'function')).toHaveLength(2);\n expect(calledPayload.tools?.filter((t: any) => t.type === 'web_search')).toHaveLength(1);\n expect(calledPayload.stream).toBe(false);\n });\n });\n});\n"}}}}