1
0
Files
nex/openspec/changes/unified-model-id/tasks.md

54 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
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.
## 1. 数据库迁移
- [ ] 1.1 新增迁移脚本DROP 旧 models 表 + CREATE 新 models 表id UUID PK, provider_id, model_name, enabled, created_atUNIQUE(provider_id, model_name)
- [ ] 1.2 更新 config/models.goModel 结构体适配id 改为 UUID 自动生成model_name 保持不变)
- [ ] 1.3 编写迁移脚本测试
## 2. 统一模型 ID 工具包
- [ ] 2.1 新增 pkg/modelid/model_id.go实现 ParseUnifiedModelID、FormatUnifiedModelID、ValidateProviderID、IsValidUnifiedModelID
- [ ] 2.2 新增 pkg/modelid/model_id_test.go覆盖标准格式、含斜杠 model_name、空字符串、非法字符等边界情况
## 3. Domain 层适配
- [ ] 3.1 修改 domain/model.goModel 结构体字段适配,新增 UnifiedModelID() 方法
- [ ] 3.2 修改 domain/route.goRouteResult 适配新字段
## 4. Repository 层适配
- [ ] 4.1 修改 repository/model_repo.go接口变更 — GetByModelName 改为 FindByProviderAndModelName新增 ListEnabled
- [ ] 4.2 修改 repository/model_repo_impl.go实现 FindByProviderAndModelNameWHERE provider_id=? AND model_name=?、ListEnabledJOIN providers WHERE enabled
- [ ] 4.3 编写 repository 层测试
## 5. Service 层适配
- [ ] 5.1 修改 service/routing_service.goRoute 接口改为 RouteByModelName(providerID, modelName string)
- [ ] 5.2 修改 service/routing_service_impl.go调用 FindByProviderAndModelName 替代 GetByModelName
- [ ] 5.3 修改 service/model_service.goCreate 生成 UUID、新增联合唯一校验方法
- [ ] 5.4 修改 service/model_service_impl.go实现联合唯一校验、UUID 生成
- [ ] 5.5 修改 service/provider_service_impl.goCreate 时调用 ValidateProviderID 校验 ID 字符集
- [ ] 5.6 编写 service 层测试
## 6. Conversion 层适配
- [ ] 6.1 修改 conversion/adapter.goProtocolAdapter 接口新增 ExtractUnifiedModelID、ExtractModelName、RewriteRequestModelName、RewriteResponseModelName 四个方法
- [ ] 6.2 修改 conversion/engine.goConvertHttpResponse 新增 modelOverride 参数(跨协议场景),各 convert*ResponseBody 中覆写 canonical ModelCreateStreamConverter 新增 modelOverride 参数
- [ ] 6.3 修改 conversion/openai/adapter.go实现 ExtractUnifiedModelID、ExtractModelName按 ifaceType 提取 model、RewriteRequestModelName 和 RewriteResponseModelNamejson.RawMessage 最小化改写,按 ifaceType 定位 model 字段,请求/响应独立实现),修改 isModelInfoPath 允许 suffix 含 "/"
- [ ] 6.4 修改 conversion/anthropic/adapter.go实现 ExtractUnifiedModelID、ExtractModelName、RewriteRequestModelName、RewriteResponseModelName修改 isModelInfoPath 允许 suffix 含 "/"
- [ ] 6.5 编写 conversion 层测试ExtractUnifiedModelID、ExtractModelName 各 ifaceType、RewriteRequestModelName/RewriteResponseModelName 保真性含未知参数不丢失、isModelInfoPath 含斜杠路径、modelOverride 覆写
## 7. Handler 层改造
- [ ] 7.1 修改 handler/proxy_handler.goHandleProxy 按接口类型分发 — Models/ModelInfo 本地聚合Chat/Embed/Rerank 用 adapter.ExtractModelName 提取统一 ID 路由,同协议走 Smart Passthroughadapter.RewriteRequestModelName 改写请求、adapter.RewriteResponseModelName 改写响应跨协议走全量转换modelOverride删除 forwardPassthrough 和硬编码的 extractModelName
- [ ] 7.2 修改 handler/model_handler.go请求体字段适配移除 id 输入、保留 provider_id 和 model_name响应新增 unified_idCreate 使用 UUID
- [ ] 7.3 修改 handler/provider_handler.goCreateProvider 校验 ID 字符集
- [ ] 7.4 编写 handler 层测试:统一模型 ID 路由、同协议 Smart Passthrough 保真性、跨协议 modelOverride、Models 聚合、ModelInfo 查询、流式场景 model 覆写、provider ID 校验
## 8. 路由注册适配
- [ ] 8.1 修改 cmd/server/main.gosetupRoutes 适配 handler 签名变更,传递新增依赖
## 9. 文档更新
- [ ] 9.1 按需更新 README.md同步 models 表结构、API 接口字段、统一模型 ID 格式、Smart Passthrough 策略等变更说明