feat: support image quality control

This commit is contained in:
2026-05-28 00:17:27 +08:00
parent 1d3a4f1da9
commit f5c69b9852
9 changed files with 243 additions and 9 deletions
@@ -57,6 +57,7 @@ const embeddingFields: FieldDefinition[] = [
const imageFields: FieldDefinition[] = [
{ key: 'support_base64_input', label: 'Base64 输入', type: 'boolean' },
{ key: 'support_url_input', label: 'URL 输入', type: 'boolean' },
{ key: 'support_quality_control', label: '生成质量控制', hint: '支持请求中的 quality 参数', type: 'boolean' },
{ key: 'input_multiple_images', label: '多图输入', type: 'boolean' },
{ key: 'input_max_images_count', label: '最多输入图片', placeholder: '10', type: 'number' },
{ key: 'output_multiple_images', label: '多图输出', type: 'boolean' },
@@ -778,6 +779,7 @@ function enabledBooleanLabels(config?: Record<string, unknown>) {
supportWebSearch: '联网搜索',
support_base64_input: 'Base64 输入',
support_url_input: 'URL 输入',
support_quality_control: '质量控制',
input_multiple_images: '多图输入',
output_multiple_images: '多图输出',
input_audio: '音频输入',
@@ -17,6 +17,7 @@ export type CapabilityFlagKey =
| 'supportThinkingModeSwitch'
| 'supportStructuredOutput'
| 'supportWebSearch'
| 'supportQualityControl'
| 'inputMultipleImages'
| 'outputMultipleImages'
| 'supportBase64Input'
@@ -81,6 +82,7 @@ const flagKeys: CapabilityFlagKey[] = [
'supportThinkingModeSwitch',
'supportStructuredOutput',
'supportWebSearch',
'supportQualityControl',
'inputMultipleImages',
'outputMultipleImages',
'supportBase64Input',
@@ -114,6 +116,7 @@ const managedRootKeys = new Set<string>([
'supportWebSearch',
'supportBase64Input',
'supportUrlInput',
'supportQualityControl',
'maxContextTokens',
'maxInputTokens',
'maxOutputTokens',
@@ -135,6 +138,7 @@ const managedNestedKeys = new Set<string>([
'dimensions',
'support_base64_input',
'support_url_input',
'support_quality_control',
'input_multiple_images',
'input_max_images_count',
'output_multiple_images',
@@ -204,6 +208,7 @@ export function capabilitiesToForm(value?: Record<string, unknown>, modelType =
state.flags.supportWebSearch = boolFrom(source.supportWebSearch ?? nestedValue(source, 'supportWebSearch'));
state.flags.supportBase64Input = boolFrom(source.supportBase64Input ?? nestedValue(source, 'support_base64_input'));
state.flags.supportUrlInput = boolFrom(source.supportUrlInput ?? nestedValue(source, 'support_url_input'));
state.flags.supportQualityControl = boolFrom(source.supportQualityControl ?? nestedValue(source, 'support_quality_control'));
state.flags.inputMultipleImages = nestedBool(source, 'input_multiple_images');
state.flags.outputMultipleImages = nestedBool(source, 'output_multiple_images');
state.flags.outputAudio = nestedBool(source, 'output_audio');
@@ -278,10 +283,10 @@ export function defaultCapabilityConfig(type: string): Record<string, unknown> {
}
if (type === 'text_embedding') return { dimensions: [] };
if (type === 'image_generate') {
return { output_resolutions: ['1K'], output_multiple_images: false };
return { output_resolutions: ['1K'], output_multiple_images: false, support_quality_control: false };
}
if (type === 'image_edit') {
return { input_multiple_images: false, output_resolutions: ['1K'], output_multiple_images: false };
return { input_multiple_images: false, output_resolutions: ['1K'], output_multiple_images: false, support_quality_control: false };
}
if (type === 'video_generate') {
return { output_resolutions: ['720p'], duration_range: [5, 10], output_audio: false };
@@ -346,6 +351,7 @@ function rootCompatibilityConfig(source: Record<string, unknown>) {
'supportWebSearch',
'supportBase64Input',
'supportUrlInput',
'supportQualityControl',
'maxContextTokens',
'maxInputTokens',
'maxOutputTokens',
@@ -361,6 +367,7 @@ function toCapabilityKey(key: string) {
const map: Record<string, string> = {
supportBase64Input: 'support_base64_input',
supportUrlInput: 'support_url_input',
supportQualityControl: 'support_quality_control',
maxContextTokens: 'max_context_tokens',
maxInputTokens: 'max_input_tokens',
maxOutputTokens: 'max_output_tokens',