UNPKG

blade-ai

Version:

🗡️ Blade - 智能 AI 助手命令行工具

206 lines (203 loc) 7.34 kB
#!/usr/bin/env node import { __esm, __export } from "./chunk-7N7GSU6K.js"; // src/config/defaults.ts var defaults_exports = {}; __export(defaults_exports, { DEFAULT_CONFIG: () => DEFAULT_CONFIG, MODEL_DESCRIPTIONS: () => MODEL_DESCRIPTIONS, getModelDescription: () => getModelDescription, getModelsWithDescriptions: () => getModelsWithDescriptions, getProviderConfig: () => getProviderConfig, getSupportedProviders: () => getSupportedProviders, isProviderSupported: () => isProviderSupported, loadConfigFromEnv: () => loadConfigFromEnv, validateApiKey: () => validateApiKey }); import { existsSync, readFileSync } from "fs"; import { dirname, join } from "path"; import { fileURLToPath } from "url"; function loadConfigFile() { const possiblePaths = [ join(process.cwd(), "config.env"), // 当前工作目录 join(__dirname, "..", "..", "config.env"), // 源码结构 join(__dirname, "..", "..", "..", "config.env") // 构建后结构 ]; for (const configPath of possiblePaths) { if (existsSync(configPath)) { try { const content = readFileSync(configPath, "utf-8"); const lines = content.split("\n"); for (const line of lines) { const trimmedLine = line.trim(); if (trimmedLine && !trimmedLine.startsWith("#")) { const [key, ...valueParts] = trimmedLine.split("="); if (key && valueParts.length > 0) { const value = valueParts.join("=").trim(); if (!process.env[key.trim()]) { process.env[key.trim()] = value; } } } } console.log(`\u2705 \u5DF2\u52A0\u8F7D\u914D\u7F6E\u6587\u4EF6: ${configPath}`); break; } catch (error) { console.warn(`Warning: Failed to load config file ${configPath}`); } } } } function getProviderConfig(provider) { const config = DEFAULT_CONFIG.llm[provider]; if (!config) { throw new Error(`\u4E0D\u652F\u6301\u7684 LLM \u63D0\u4F9B\u5546: ${provider}`); } return config; } function getSupportedProviders() { return Object.keys(DEFAULT_CONFIG.llm); } function isProviderSupported(provider) { return getSupportedProviders().includes(provider); } function loadConfigFromEnv() { return { llm: { qwen: { apiKey: process.env.QWEN_API_KEY || "", defaultModel: process.env.QWEN_DEFAULT_MODEL || DEFAULT_CONFIG.llm.qwen.defaultModel, baseURL: process.env.QWEN_BASE_URL || DEFAULT_CONFIG.llm.qwen.baseURL, supportedModels: DEFAULT_CONFIG.llm.qwen.supportedModels }, volcengine: { apiKey: process.env.VOLCENGINE_API_KEY || "", defaultModel: process.env.VOLCENGINE_DEFAULT_MODEL || DEFAULT_CONFIG.llm.volcengine.defaultModel, baseURL: process.env.VOLCENGINE_BASE_URL || DEFAULT_CONFIG.llm.volcengine.baseURL, supportedModels: DEFAULT_CONFIG.llm.volcengine.supportedModels } } }; } function validateApiKey(provider, apiKey) { if (apiKey) { return apiKey; } const config = getProviderConfig(provider); if (config.apiKey) { return config.apiKey; } throw new Error( `${provider} API\u5BC6\u94A5\u672A\u914D\u7F6E\u3002\u8BF7\u901A\u8FC7\u4EE5\u4E0B\u65B9\u5F0F\u4E4B\u4E00\u63D0\u4F9BAPI\u5BC6\u94A5\uFF1A 1. \u4F7F\u7528 --api-key \u53C2\u6570 2. \u8BBE\u7F6E\u73AF\u5883\u53D8\u91CF ${provider.toUpperCase()}_API_KEY 3. \u5728 .env \u6587\u4EF6\u4E2D\u914D\u7F6E` ); } function getModelDescription(provider, modelId) { const descriptions = MODEL_DESCRIPTIONS[provider]; return descriptions[modelId] || modelId; } function getModelsWithDescriptions(provider) { const config = getProviderConfig(provider); return config.supportedModels.map((modelId) => ({ id: modelId, description: getModelDescription(provider, modelId) })); } var __filename, __dirname, DEFAULT_CONFIG, MODEL_DESCRIPTIONS; var init_defaults = __esm({ "src/config/defaults.ts"() { __filename = fileURLToPath(import.meta.url); __dirname = dirname(__filename); loadConfigFile(); DEFAULT_CONFIG = { llm: { qwen: { apiKey: process.env.QWEN_API_KEY || "", defaultModel: process.env.QWEN_DEFAULT_MODEL || "qwen-plus-2025-04-28", baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1", supportedModels: [ "qwen3-235b-a22b", "qwen-plus-latest", "qwen-turbo-latest", "qwen-turbo-2025-04-28", "qwen-plus-2025-04-28", "qwen-max-latest", "qwen-max-longcontext", "qwen-72b-chat", "qwen-14b-chat", "qwen-7b-chat", "qwen-1.8b-chat", "qwen-32b-chat", "qwen-vl-plus", "qwen-vl-max", "qwen-audio-chat", "qwen-coder-plus" ] }, volcengine: { apiKey: process.env.VOLCENGINE_API_KEY || "", defaultModel: process.env.VOLCENGINE_DEFAULT_MODEL || "ep-20250612135125-br9k7", baseURL: "https://ark.cn-beijing.volces.com/api/v3", supportedModels: [ "ep-20250417144747-rgffm", // Doubao-1.5-thinking-pro "ep-20250530171307-rrcc5", // DeepSeek R1 250528 "ep-20250530171222-q42h8", // DeepSeek V3 "ep-20250612135125-br9k7" // Doubao-Seed-1.6-thinking ] } } }; MODEL_DESCRIPTIONS = { // Qwen 模型说明 qwen: { "qwen3-235b-a22b": "\u901A\u4E49\u5343\u95EE3-235B-A22B", "qwen-plus-latest": "\u901A\u4E49\u5343\u95EE-Plus-Latest (Qwen3)", "qwen-turbo-latest": "\u901A\u4E49\u5343\u95EE-Turbo-Latest (Qwen3)", "qwen-turbo-2025-04-28": "\u901A\u4E49\u5343\u95EE-Turbo-2025-04-28 (1M\u4E0A\u4E0B\u6587)", "qwen-plus-2025-04-28": "\u901A\u4E49\u5343\u95EE-Plus-2025-04-28 (128K\u4E0A\u4E0B\u6587) (\u9ED8\u8BA4)", "qwen-max-latest": "\u901A\u4E49\u5343\u95EE-Max-Latest (Qwen3)", "qwen-max-longcontext": "\u901A\u4E49\u5343\u95EE-Max-\u957F\u4E0A\u4E0B\u6587", "qwen-72b-chat": "\u901A\u4E49\u5343\u95EE-72B-Chat", "qwen-14b-chat": "\u901A\u4E49\u5343\u95EE-14B-Chat", "qwen-7b-chat": "\u901A\u4E49\u5343\u95EE-7B-Chat", "qwen-1.8b-chat": "\u901A\u4E49\u5343\u95EE-1.8B-Chat", "qwen-32b-chat": "\u901A\u4E49\u5343\u95EE-32B-Chat", "qwen-vl-plus": "\u901A\u4E49\u5343\u95EE-VL-Plus (\u89C6\u89C9)", "qwen-vl-max": "\u901A\u4E49\u5343\u95EE-VL-Max (\u89C6\u89C9)", "qwen-audio-chat": "\u901A\u4E49\u5343\u95EE-Audio-Chat (\u97F3\u9891)", "qwen-coder-plus": "\u901A\u4E49\u5343\u95EE-Coder-Plus (\u4EE3\u7801)" }, // VolcEngine 模型说明 volcengine: { "ep-20250417144747-rgffm": "Doubao-1.5-thinking-pro", "ep-20250530171307-rrcc5": "DeepSeek R1 250528", "ep-20250530171222-q42h8": "DeepSeek V3", "ep-20250612135125-br9k7": "Doubao-Seed-1.6-thinking" } }; } }); export { DEFAULT_CONFIG, getProviderConfig, getSupportedProviders, isProviderSupported, loadConfigFromEnv, validateApiKey, MODEL_DESCRIPTIONS, getModelDescription, getModelsWithDescriptions, defaults_exports, init_defaults };