feat: 新增模型管理功能(供应商 + 模型 CRUD)
- 新增 providers/models 数据库表、迁移和数据访问层 - 新增 15 个后端 API 路由(供应商/模型 CRUD + 连通性测试) - 新增 AI 服务层(registry.ts: buildProviderRegistry + testProviderConnection) - 新增前端模型管理页面(Tabs: 供应商/模型,含表格、表单、工具栏) - 新增前端 hooks(use-providers, use-models) - 新增共享类型和 MODEL_CAPABILITIES 常量 - 新增 10 个测试文件(66 个测试用例,4 个因 bun test ESM 兼容问题待修复) - 更新开发文档(architecture, backend, frontend) - 附带 apply-review 修复:统一错误响应、提取共享常量、清理重复测试 注意:registry.test.ts 中 4 个测试因 bun test 无法解析 createProviderRegistry ESM 导出而失败,详情见 context.md
This commit is contained in:
@@ -43,6 +43,42 @@ export function startServer(options: StartServerOptions) {
|
||||
return handleMeta(mode, resolvedVersion);
|
||||
},
|
||||
},
|
||||
"/api/models": {
|
||||
GET: async (req) => {
|
||||
const { handleListModels } = await import("./routes/models/list");
|
||||
return handleListModels(req, db, mode);
|
||||
},
|
||||
POST: async (req) => {
|
||||
const { handleCreateModel } = await import("./routes/models/create");
|
||||
return handleCreateModel(req, db, mode);
|
||||
},
|
||||
},
|
||||
"/api/models/:id": {
|
||||
DELETE: async (req) => {
|
||||
const { handleDeleteModel } = await import("./routes/models/delete");
|
||||
return handleDeleteModel(req, db, mode);
|
||||
},
|
||||
GET: async (req) => {
|
||||
const { handleGetModel } = await import("./routes/models/get");
|
||||
return handleGetModel(req, db, mode);
|
||||
},
|
||||
PATCH: async (req) => {
|
||||
const { handleUpdateModel } = await import("./routes/models/update");
|
||||
return handleUpdateModel(req, db, mode);
|
||||
},
|
||||
},
|
||||
"/api/models/:id/disable": {
|
||||
POST: async (req) => {
|
||||
const { handleDisableModel } = await import("./routes/models/disable");
|
||||
return handleDisableModel(req, db, mode);
|
||||
},
|
||||
},
|
||||
"/api/models/:id/enable": {
|
||||
POST: async (req) => {
|
||||
const { handleEnableModel } = await import("./routes/models/enable");
|
||||
return handleEnableModel(req, db, mode);
|
||||
},
|
||||
},
|
||||
"/api/projects": {
|
||||
GET: async (req) => {
|
||||
const { handleListProjects } = await import("./routes/projects/list");
|
||||
@@ -79,6 +115,48 @@ export function startServer(options: StartServerOptions) {
|
||||
return handleRestoreProject(req, db, mode);
|
||||
},
|
||||
},
|
||||
"/api/providers": {
|
||||
GET: async (req) => {
|
||||
const { handleListProviders } = await import("./routes/providers/list");
|
||||
return handleListProviders(req, db, mode);
|
||||
},
|
||||
POST: async (req) => {
|
||||
const { handleCreateProvider } = await import("./routes/providers/create");
|
||||
return handleCreateProvider(req, db, mode);
|
||||
},
|
||||
},
|
||||
"/api/providers/:id": {
|
||||
DELETE: async (req) => {
|
||||
const { handleDeleteProvider } = await import("./routes/providers/delete");
|
||||
return handleDeleteProvider(req, db, mode);
|
||||
},
|
||||
GET: async (req) => {
|
||||
const { handleGetProvider } = await import("./routes/providers/get");
|
||||
return handleGetProvider(req, db, mode);
|
||||
},
|
||||
PATCH: async (req) => {
|
||||
const { handleUpdateProvider } = await import("./routes/providers/update");
|
||||
return handleUpdateProvider(req, db, mode);
|
||||
},
|
||||
},
|
||||
"/api/providers/:id/disable": {
|
||||
POST: async (req) => {
|
||||
const { handleDisableProvider } = await import("./routes/providers/disable");
|
||||
return handleDisableProvider(req, db, mode);
|
||||
},
|
||||
},
|
||||
"/api/providers/:id/enable": {
|
||||
POST: async (req) => {
|
||||
const { handleEnableProvider } = await import("./routes/providers/enable");
|
||||
return handleEnableProvider(req, db, mode);
|
||||
},
|
||||
},
|
||||
"/api/providers/:id/test": {
|
||||
POST: async (req) => {
|
||||
const { handleTestProvider } = await import("./routes/providers/test");
|
||||
return handleTestProvider(req, db, mode);
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user