diff --git a/dev/en/model-selector.md b/dev/en/model-selector.md index 2a6cf15a..e7943ce7 100644 --- a/dev/en/model-selector.md +++ b/dev/en/model-selector.md @@ -17,9 +17,9 @@ AI Foundation registers the FormKit input type `aiModelSelector`. Its saved valu `modelType` accepts `language`, `embedding`, `rerank`, or `image-generation`. -## Capability filters +## Capability requirements -Common feature filter: +Common feature requirements: ```yaml - $formkit: aiModelSelector @@ -32,6 +32,10 @@ Common feature filter: Other feature values include `streaming`, `vision`, `audio-input`, `structured-output`, and `reasoning`. +`requiredFeatures` declares requirements rather than filtering: models missing the required +features are still listed and selectable, with a warning hint on the option. Use +`requiredCapabilities` when a hard filter is needed. + Fine-grained language capability: ```yaml @@ -74,7 +78,7 @@ values do not count as support. | `providerType` | Filter by provider type. | | `enabled` | Filter by model enabled state. | | `available` | Show only usable models; defaults to `true`. | -| `requiredFeatures` | Require all common feature flags. | +| `requiredFeatures` | Declare common feature requirements; non-matching models stay selectable with a warning. | | `requiredCapabilities` | Require all fine-grained capability fields. | | `placeholder` | Empty selection text. | | `searchPlaceholder` | Search field placeholder. | diff --git a/dev/zh-CN/dev.md b/dev/zh-CN/dev.md index 50ca0b32..57dbde52 100644 --- a/dev/zh-CN/dev.md +++ b/dev/zh-CN/dev.md @@ -1087,15 +1087,17 @@ formSchema: | `providerType` | 筛选指定供应方类型 | | `enabled` | 按 `AiModel.spec.enabled` 筛选 | | `available` | 只显示可用模型,默认 `true` | -| `requiredFeatures` | 只显示具备指定粗能力的模型 | +| `requiredFeatures` | 声明粗能力要求;不满足的模型显示警告但仍可选中 | | `requiredCapabilities` | 只显示满足细粒度能力要求的模型 | | `placeholder` | 未选择模型时的占位文本 | | `searchPlaceholder` | 搜索框的占位文本 | | `clearable` | 是否允许清空 | | `fullWidth` | 是否占满容器宽度 | -`requiredFeatures` 适合筛选流式、图片识别、音频识别、工具调用等常用粗能力;`requiredCapabilities` -适合在确实需要时筛选媒体输入来源、媒体类型、图生图、单次生成数量等细粒度能力。没有匹配模型通常表示供应方未配置、模型被禁用,或模型能力不满足筛选条件。 +`requiredFeatures` 适合声明流式、图片识别、音频识别、工具调用等常用粗能力要求(不满足的模型 +仍会列出,仅在选项上显示警告);`requiredCapabilities` +适合在确实需要时硬性筛选媒体输入来源、媒体类型、图生图、单次生成数量等细粒度能力。 +`requiredCapabilities` 没有匹配模型通常表示供应方未配置、模型被禁用,或模型能力不满足筛选条件。 `requiredCapabilities` 支持两个顶层域:`language` 和 `imageGeneration`。所有填写的条件都是 “全部满足”关系;未知能力不会被当作支持。 diff --git a/dev/zh-CN/model-selector.md b/dev/zh-CN/model-selector.md index 6691abeb..fdd02ad1 100644 --- a/dev/zh-CN/model-selector.md +++ b/dev/zh-CN/model-selector.md @@ -43,7 +43,7 @@ formSchema: `modelType` 支持 `language`、`embedding`、`rerank` 和 `image-generation`。 -## 按常用能力筛选 +## 按常用能力提醒 图片理解: @@ -67,8 +67,9 @@ formSchema: - audio-input ``` -`requiredFeatures` 适合筛选流式、图片输入、音频输入、工具等常用粗粒度能力。没有匹配结果通常 -表示模型未配置、已禁用或没有声明所需能力。 +`requiredFeatures` 适合声明流式、图片输入、音频输入、工具等常用粗粒度能力要求。不满足要求的 +模型仍会列出并可选中,仅在选项上显示警告提示(如"当前模型不支持工具调用,可能无法正常使用")。 +如需硬性过滤,请使用 `requiredCapabilities`。 ## 细粒度语言能力 @@ -143,7 +144,7 @@ AI Foundation 不会替模型下载 URL。要求 `url` 时,模型必须声明 | `providerType` | 按 Provider 类型筛选 | | `enabled` | 按模型启用状态筛选 | | `available` | 只显示可用模型,默认 `true` | -| `requiredFeatures` | 按常用粗粒度能力全部匹配 | +| `requiredFeatures` | 声明常用粗粒度能力要求,不满足的模型显示警告但仍可选中 | | `requiredCapabilities` | 按细粒度 capability 全部匹配 | | `placeholder` | 未选择时的占位文本 | | `searchPlaceholder` | 搜索框占位文本 | diff --git a/ui/src/formkit/AiModelSelectOption.vue b/ui/src/formkit/AiModelSelectOption.vue index 36378c47..954594bb 100644 --- a/ui/src/formkit/AiModelSelectOption.vue +++ b/ui/src/formkit/AiModelSelectOption.vue @@ -2,9 +2,11 @@ import type { ModelOption } from '@/api/generated' import { capabilityUnavailableDetailsLabel } from '@/utils/capabilities' import { SelectItem, SelectItemIndicator, SelectItemText } from 'reka-ui' +import { computed } from 'vue' import MingcuteCheckLine from '~icons/mingcute/check-line' import { isModelOptionSelectable, + missingRequiredFeatureLabels, modelDetailLabels, modelOptionDisplayName, modelOptionUnavailableReasonLabel, @@ -15,11 +17,19 @@ import { const props = defineProps<{ model: ModelOption selected: boolean + requiredFeatures?: string[] }>() const emit = defineEmits<{ select: [model: ModelOption] }>() + +const missingFeatureLabels = computed(() => { + if (!isModelOptionSelectable(props.model)) { + return [] + } + return missingRequiredFeatureLabels(props.model, props.requiredFeatures) +})