# 模型管理 ## Purpose TBD - 提供模型配置的管理功能,模型关联到供应商 ## Requirements ### Requirement: 创建模型配置 网关 SHALL 允许为供应商创建新的模型配置。 #### Scenario: 使用有效数据创建模型 - **WHEN** 向 `/api/models` 发送 POST 请求,携带有效的模型数据(id, provider_id, model_name) - **THEN** 网关 SHALL 在数据库中创建新的模型记录 - **THEN** 网关 SHALL 返回创建的模型,状态码为 201 - **THEN** 模型 SHALL 默认启用 #### Scenario: 使用不存在的供应商创建模型 - **WHEN** 向 `/api/models` 发送 POST 请求,携带不存在的 provider_id - **THEN** 网关 SHALL 返回错误,状态码为 400 (Bad Request) - **THEN** 错误 SHALL 指示供应商不存在 #### Scenario: 使用重复 ID 创建模型 - **WHEN** 向 `/api/models` 发送 POST 请求,携带已存在的 ID - **THEN** 网关 SHALL 返回错误,状态码为 409 (Conflict) #### Scenario: 创建模型时缺少必需字段 - **WHEN** 向 `/api/models` 发送 POST 请求,缺少必需字段(id, provider_id 或 model_name) - **THEN** 网关 SHALL 返回错误,状态码为 400 (Bad Request) - **THEN** 错误 SHALL 指示缺少哪些字段 ### Requirement: 列出所有模型 网关 SHALL 允许获取所有模型配置。 #### Scenario: 成功列出模型 - **WHEN** 向 `/api/models` 发送 GET 请求 - **THEN** 网关 SHALL 返回所有模型的列表 - **THEN** 每个模型 SHALL 包含 id, provider_id, model_name, enabled, created_at #### Scenario: 列出模型时为空 - **WHEN** 向 `/api/models` 发送 GET 请求,且不存在模型 - **THEN** 网关 SHALL 返回空列表 ### Requirement: 按供应商列出模型 网关 SHALL 允许获取特定供应商的模型。 #### Scenario: 列出存在供应商的模型 - **WHEN** 向 `/api/models?provider_id=` 发送 GET 请求 - **THEN** 网关 SHALL 返回指定供应商的模型列表 #### Scenario: 列出不存在供应商的模型 - **WHEN** 向 `/api/models?provider_id=` 发送 GET 请求 - **THEN** 网关 SHALL 返回空列表 ### Requirement: 获取特定模型 网关 SHALL 允许通过 ID 获取特定模型。 #### Scenario: 获取存在的模型 - **WHEN** 向 `/api/models/:id` 发送 GET 请求,携带有效的模型 ID - **THEN** 网关 SHALL 返回模型详情 #### Scenario: 获取不存在的模型 - **WHEN** 向 `/api/models/:id` 发送 GET 请求,携带不存在的 ID - **THEN** 网关 SHALL 返回错误,状态码为 404 (Not Found) ### Requirement: 更新模型配置 网关 SHALL 允许更新现有模型配置。 #### Scenario: 使用有效数据更新模型 - **WHEN** 向 `/api/models/:id` 发送 PUT 请求,携带有效的模型数据 - **THEN** 网关 SHALL 更新数据库中的模型记录 - **THEN** 网关 SHALL 返回更新后的模型 #### Scenario: 更新不存在的模型 - **WHEN** 向 `/api/models/:id` 发送 PUT 请求,携带不存在的 ID - **THEN** 网关 SHALL 返回错误,状态码为 404 (Not Found) #### Scenario: 更新模型供应商 - **WHEN** 向 `/api/models/:id` 发送 PUT 请求,携带新的 provider_id - **THEN** 网关 SHALL 验证新供应商是否存在 - **THEN** 网关 SHALL 更新模型的供应商关联 #### Scenario: 部分更新 - **WHEN** 向 `/api/models/:id` 发送 PUT 请求,仅包含部分字段 - **THEN** 网关 SHALL 仅更新提供的字段 - **THEN** 网关 SHALL 保留未更改的字段 ### Requirement: 删除模型配置 网关 SHALL 允许删除模型配置。 #### Scenario: 删除存在的模型 - **WHEN** 向 `/api/models/:id` 发送 DELETE 请求,携带有效的模型 ID - **THEN** 网关 SHALL 删除模型记录 - **THEN** 网关 SHALL 返回状态码 204 (No Content) #### Scenario: 删除不存在的模型 - **WHEN** 向 `/api/models/:id` 发送 DELETE 请求,携带不存在的 ID - **THEN** 网关 SHALL 返回错误,状态码为 404 (Not Found) ### Requirement: 启用和禁用模型 网关 SHALL 支持启用和禁用模型。 #### Scenario: 禁用模型 - **WHEN** 模型的 `enabled` 字段设置为 false - **THEN** 网关 SHALL 不向该模型路由请求 - **THEN** 模型 SHALL 保留在数据库中 #### Scenario: 启用模型 - **WHEN** 已禁用模型的 `enabled` 字段设置为 true - **THEN** 网关 SHALL 恢复向该模型路由请求 ### Requirement: 验证模型配置 网关 SHALL 验证模型配置数据。 #### Scenario: 验证供应商存在 - **WHEN** 创建或更新模型时携带 provider_id - **THEN** 网关 SHALL 验证供应商存在于数据库中 #### Scenario: 验证必需字段 - **WHEN** 创建或更新模型 - **THEN** 网关 SHALL 验证 id, provider_id 和 model_name 存在且非空 ### Requirement: 支持透明的模型名称 网关 SHALL 使用模型名称透明传输,不做转换。 #### Scenario: 模型名称保留 - **WHEN** 模型配置了 model_name - **THEN** 网关 SHALL 在路由请求时使用该确切名称 - **THEN** 网关 SHALL 不修改或转换模型名称 #### Scenario: 不同供应商的同名模型 - **WHEN** 多个供应商拥有相同 model_name 的模型 - **THEN** 每个模型 SHALL 通过其唯一 ID 和 provider_id 区分 - **THEN** 网关 SHALL 基于模型名称和供应商关联的组合进行路由 ### Requirement: 随供应商级联删除 网关 SHALL 在删除关联供应商时删除模型。 #### Scenario: 供应商删除级联到模型 - **WHEN** 供应商被删除 - **THEN** 该供应商关联的所有模型 SHALL 自动删除