blade-ai
Version:
🗡️ Blade - 智能 AI 助手命令行工具
206 lines (203 loc) • 7.34 kB
JavaScript
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
};