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

80 lines
2.4 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.
## ADDED Requirements
### Requirement: 解析统一模型 ID
系统 SHALL 提供 `ParseUnifiedModelID` 函数,将 `provider_id/model_name` 格式的字符串解析为独立的 providerID 和 modelName。
#### Scenario: 标准格式解析
- **WHEN** 传入 `"openai/gpt-4"`
- **THEN** SHALL 返回 providerID=`"openai"`, modelName=`"gpt-4"`
#### Scenario: model_name 含斜杠的解析
- **WHEN** 传入 `"azure/accounts/org-123/models/gpt-4"`
- **THEN** SHALL 在第一个 `/` 处分割,返回 providerID=`"azure"`, modelName=`"accounts/org-123/models/gpt-4"`
#### Scenario: 缺少分隔符
- **WHEN** 传入不含 `/` 的字符串(如 `"gpt-4"`
- **THEN** SHALL 返回错误
#### Scenario: 空字符串
- **WHEN** 传入空字符串
- **THEN** SHALL 返回错误
#### Scenario: 只有分隔符
- **WHEN** 传入 `"/model"``"provider/"``"/"`
- **THEN** SHALL 返回错误
#### Scenario: providerID 不符合字符集
- **WHEN** 传入 `"open-ai/gpt-4"``"open.ai/gpt-4"``"供应商/gpt-4"`providerID 含非 `[a-zA-Z0-9_]` 字符)
- **THEN** SHALL 返回错误
### Requirement: 格式化统一模型 ID
系统 SHALL 提供 `FormatUnifiedModelID` 函数,将 providerID 和 modelName 组合格式化为统一模型 ID。
#### Scenario: 格式化
- **WHEN** 传入 providerID=`"openai"`, modelName=`"gpt-4"`
- **THEN** SHALL 返回 `"openai/gpt-4"`
### Requirement: 校验供应商 ID
系统 SHALL 提供 `ValidateProviderID` 函数,校验 providerID 仅包含字母、数字、下划线。
#### Scenario: 合法 ID
- **WHEN** 传入 `"openai"`, `"deep_seek"`, `"provider01"`, `"OpenAI"`
- **THEN** SHALL 校验通过
#### Scenario: 含非法字符
- **WHEN** 传入含 `-``.``/`、空格、中文等非 `[a-zA-Z0-9_]` 字符的 ID
- **THEN** SHALL 返回错误
#### Scenario: 空字符串或过长
- **WHEN** 传入空字符串
- **THEN** SHALL 返回错误
- **WHEN** 传入超过 64 个字符的 ID
- **THEN** SHALL 返回错误
### Requirement: 校验统一模型 ID
系统 SHALL 提供 `IsValidUnifiedModelID` 函数,判断字符串是否为合法的统一模型 ID 格式。
#### Scenario: 合法 ID
- **WHEN** 传入 `"openai/gpt-4"`
- **THEN** SHALL 返回 `true`
#### Scenario: 非法 ID
- **WHEN** 传入不含 `/` 的字符串、空字符串、providerID 不符合 `[a-zA-Z0-9_]+` 的字符串
- **THEN** SHALL 返回 `false`