Files
linshen ba63eff9ad feat: 重构图像模型管理架构并优化用户界面
## 核心改进

### 🏗️ 架构重构
- 实现ImageModelManager组件分离设计,关注点明确分离
- 重构ModelManager.vue为统一模型管理入口,支持文本/图像双模式
- 采用组件复用和扩展性设计,易于添加新模型类型

### 🎨 界面优化
- 摒弃5步导航式编辑,改为一体化界面设计
- 优化ImageModelEditModal为单页滚动布局,提升操作效率
- 统一文本和图像模型管理的交互体验和视觉风格

### 🔌 适配器扩展
- 新增OpenRouter和SiliconFlow图像适配器支持
- 完善AbstractImageProviderAdapter抽象基类设计
- 优化适配器注册表和动态模型发现机制

### 💻 类型系统
- 完善ImageModelConfig和相关类型定义
- 增强TypeScript类型安全和智能提示
- 优化服务层接口设计和依赖注入架构

### 🧪 测试覆盖
- 新增图像适配器单元测试和集成测试
- 添加E2E验收测试保证功能完整性
- 增强连接测试和参数验证测试覆盖

### 📚 文档完善
- 新增图像模型管理架构设计文档
- 添加一体化界面改进方案文档
- 更新项目结构和开发指南

## 技术特点

- **SOLID原则**:清晰的单一职责和开闭扩展设计
- **组合模式**:ImageModelManager + ModelManager.vue 组合架构
- **响应式设计**:基于Vue 3 Composition API的状态管理
- **依赖注入**:松耦合的服务架构和组件通信

这次重构显著提升了图像模型管理的用户体验和代码可维护性,
为后续音频、视频等多模态功能扩展奠定了坚实基础。
2025-09-21 20:17:03 +08:00

2.6 KiB
Raw Permalink Blame History

连接测试修复总结

🔍 问题描述

用户在使用图像模型管理器进行连接测试时,当填写自定义/随意的模型ID(如 user-custom-model-123),系统报错:

Connection test failed: Error: 选中的模型未找到
    at he (useImageModelManager.ts:329:15)

🎯 根本原因

连接测试函数只在静态模型列表 models.value 中查找用户输入的模型ID:

// 🚫 旧逻辑(问题代码)
const selectedModel = models.value.find(m => m.id === configForm.value.modelId)
if (!selectedModel) {
  throw new Error('选中的模型未找到')  // 这里报错
}

但保存配置功能有完整的后备机制:

// ✅ 保存配置的正确逻辑
let cachedModel = models.value.find(m => m.id === selectedModelId.value)
if (!cachedModel) {
  const adapter = registry.getAdapter(selectedProviderId.value)
  cachedModel = adapter.buildDefaultModel(selectedModelId.value)  // 后备机制
}

✅ 修复方案

在连接测试函数中添加与保存配置一致的 buildDefaultModel 后备机制:

// ✅ 修复后的逻辑
let selectedModel = models.value.find(m => m.id === configForm.value.modelId)
if (!selectedModel) {
  // 对于自定义模型ID,使用adapter的buildDefaultModel方法构建
  try {
    const adapter = registry.getAdapter(selectedProviderId.value)
    selectedModel = adapter.buildDefaultModel(configForm.value.modelId)
  } catch (error) {
    throw new Error(`无法构建模型 ${configForm.value.modelId}: ${error instanceof Error ? error.message : String(error)}`)
  }
}

📋 修复内容

  1. 模型查找逻辑统一: 连接测试与保存配置使用相同的模型查找策略
  2. 支持自定义模型ID: 用户可以使用任意模型ID进行连接测试
  3. 错误处理完善: 提供清晰的错误信息,便于调试

🧪 验证结果

创建了4个测试用例验证修复效果:

  • ✅ 静态模型列表中的模型查找正常
  • ✅ 自定义模型ID通过 buildDefaultModel 正确处理
  • ✅ buildDefaultModel 错误能被正确捕获
  • ✅ 修复前后行为对比验证

🎉 预期效果

  • 用户现在可以使用任意模型ID进行连接测试
  • 系统行为与保存配置功能完全一致
  • 错误信息更加友好和具体
  • 提升了整体的用户体验

现在用户填写随意的模型ID(如 my-custom-model)进行连接测试时,系统将:

  1. 首先在静态模型列表中查找
  2. 如果未找到,自动构建默认模型配置
  3. 继续进行连接测试,而不是直接报错