feat: 优化模型管理和配置验证逻辑

本次提交主要改进了模型管理器的配置处理和验证机制:

- 更新 ModelManager 中的配置验证方法,提供更详细的错误信息
- 修改模型编辑逻辑,支持保留原有 API Key
- 调整 Gemini 模型默认配置
- 增加配置验证的严格性和错误处理
- 优化模型更新和启用流程的健壮性
This commit is contained in:
linshen committed 2025-02-10 22:14:28 +08:00
1 parent 0563ece5bc
commit 6cb24a352d
5 files changed
+57 -21

No files matched your search

+2 -1
View File
@@ -30,4 +30,5 @@ dist-ssr
.env.test.local
.env.production.local
.vscode
.vscode
.vercel
+12
View File
@@ -106,6 +106,18 @@ npm run build
构建后的文件将生成在 `dist` 目录下
### 发布到vercel
```bash
# 第一次使用需要安装vercel
npm install -g vercel
# 登录vercel
vercel login
# 发布项目
vercel --prod
```
## 使用说明
1. 首次使用需要配置 API 密钥:
+10 -6
View File
@@ -221,19 +221,23 @@ const cancelEdit = () => {
// 保存编辑
const saveEdit = () => {
try {
// 获取原始配置
const originalConfig = modelManager.getModel(editingModel.value.key);
if (!originalConfig) {
throw new Error('找不到原始配置');
}
// 构建更新配置,保留原有的 apiKey
const config = {
name: editingModel.value.name,
baseURL: editingModel.value.baseURL,
models: [editingModel.value.defaultModel],
defaultModel: editingModel.value.defaultModel
defaultModel: editingModel.value.defaultModel,
apiKey: editingModel.value.apiKey.trim() || originalConfig.apiKey // 如果没有新的 apiKey,保留原有的
};
// 更新配置
modelManager.updateModel(editingModel.value.key, config);
// 如果提供了新的 API 密钥,则更新
if (editingModel.value.apiKey) {
modelManager.setApiKey(editingModel.value.key, editingModel.value.apiKey);
}
loadModels();
isEditing.value = false;
+2 -2
View File
@@ -20,8 +20,8 @@ export const defaultModels: Record<string, ModelConfig> = {
gemini: {
name: 'Google Gemini',
baseURL: 'https://geminiapi.always200.com/v1beta/openai',
models: ['gemini-2.0-flash-001'],
defaultModel: 'gemini-2.0-flash-001',
models: ['gemini-2.0-flash'],
defaultModel: 'gemini-2.0-flash',
apiKey: GEMINI_API_KEY,
enabled: !!GEMINI_API_KEY,
provider: 'gemini'
+31 -12
View File
@@ -96,8 +96,8 @@ export class ModelManager implements IModelManager {
throw new ModelConfigError(`未知的模型: ${key}`);
}
// 验证配置完整性
this.validateConfig(this.models[key]);
// 使用完整验证
this.validateEnableConfig(this.models[key]);
this.models[key].enabled = true;
this.saveToStorage();
@@ -119,16 +119,35 @@ export class ModelManager implements IModelManager {
* 验证模型配置
*/
private validateConfig(config: ModelConfig): void {
if (
!config.name ||
!config.baseURL ||
!config.apiKey ||
!Array.isArray(config.models) ||
config.models.length === 0 ||
!config.defaultModel ||
!config.models.includes(config.defaultModel)
) {
throw new ModelConfigError('无效的模型配置:配置不完整或缺少必要字段');
const errors: string[] = [];
if (!config.name) {
errors.push('缺少模型名称(name)');
}
if (!config.baseURL) {
errors.push('缺少基础URL(baseURL)');
}
if (!Array.isArray(config.models)) {
errors.push('模型列表(models)必须是数组');
} else if (config.models.length === 0) {
errors.push('模型列表(models)不能为空');
}
if (!config.defaultModel) {
errors.push('缺少默认模型(defaultModel)');
} else if (!config.models?.includes(config.defaultModel)) {
errors.push('默认模型必须在模型列表中');
}
if (errors.length > 0) {
throw new ModelConfigError('无效的模型配置:' + errors.join('、'));
}
}
private validateEnableConfig(config: ModelConfig): void {
this.validateConfig(config);
if (!config.apiKey) {
throw new ModelConfigError('启用模型需要提供API密钥');
}
}