feat(seedance): 同步输入图片约束与自动转换
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
-- Tencent Seedance SE accepts input images only within the observed provider
|
||||
-- limits. The runtime uses these capability fields to auto-convert images
|
||||
-- before forwarding the request.
|
||||
WITH input_constraints AS (
|
||||
SELECT jsonb_build_object(
|
||||
'input_image_resolution_range',
|
||||
'{"min":{"long_edge":360,"short_edge":360},"max":{"long_edge":1920,"short_edge":1080}}'::jsonb,
|
||||
'input_image_aspect_ratio_range',
|
||||
'[0.39,2.5]'::jsonb
|
||||
) AS value
|
||||
),
|
||||
target_base_models AS (
|
||||
SELECT
|
||||
base_model.id,
|
||||
COALESCE(base_model.capabilities, '{}'::jsonb) || jsonb_build_object(
|
||||
'image_to_video',
|
||||
COALESCE(base_model.capabilities->'image_to_video', '{}'::jsonb) || input_constraints.value,
|
||||
'omni_video',
|
||||
COALESCE(base_model.capabilities->'omni_video', '{}'::jsonb) || input_constraints.value
|
||||
) AS image_capabilities
|
||||
FROM base_model_catalog base_model
|
||||
CROSS JOIN input_constraints
|
||||
WHERE base_model.canonical_model_key IN (
|
||||
'easyai:豆包Seedance-2.0',
|
||||
'easyai:豆包Seedance-2.0-fast'
|
||||
)
|
||||
OR (
|
||||
base_model.provider_key = 'easyai'
|
||||
AND base_model.provider_model_name IN ('豆包Seedance-2.0', '豆包Seedance-2.0-fast')
|
||||
)
|
||||
OR (
|
||||
base_model.provider_key = 'tencent-hunyuan-video'
|
||||
AND lower(base_model.provider_model_name) IN ('2.0', '2.0-fast')
|
||||
)
|
||||
),
|
||||
updated_base_models AS (
|
||||
UPDATE base_model_catalog base_model
|
||||
SET capabilities = target.image_capabilities,
|
||||
metadata = jsonb_set(
|
||||
COALESCE(base_model.metadata, '{}'::jsonb) || jsonb_build_object(
|
||||
'rawModel',
|
||||
COALESCE(base_model.metadata->'rawModel', '{}'::jsonb)
|
||||
),
|
||||
'{rawModel,capabilities}',
|
||||
target.image_capabilities - 'originalTypes',
|
||||
true
|
||||
),
|
||||
default_snapshot = CASE
|
||||
WHEN COALESCE(base_model.default_snapshot, '{}'::jsonb) = '{}'::jsonb
|
||||
THEN base_model.default_snapshot
|
||||
ELSE jsonb_set(
|
||||
jsonb_set(
|
||||
base_model.default_snapshot || jsonb_build_object(
|
||||
'metadata',
|
||||
COALESCE(base_model.default_snapshot->'metadata', '{}'::jsonb) || jsonb_build_object(
|
||||
'rawModel',
|
||||
COALESCE(base_model.default_snapshot#>'{metadata,rawModel}', '{}'::jsonb)
|
||||
)
|
||||
),
|
||||
'{capabilities}',
|
||||
target.image_capabilities,
|
||||
true
|
||||
),
|
||||
'{metadata,rawModel,capabilities}',
|
||||
target.image_capabilities - 'originalTypes',
|
||||
true
|
||||
)
|
||||
END,
|
||||
updated_at = now()
|
||||
FROM target_base_models target
|
||||
WHERE base_model.id = target.id
|
||||
RETURNING base_model.id
|
||||
)
|
||||
UPDATE platform_models platform_model
|
||||
SET capabilities = COALESCE(platform_model.capabilities, '{}'::jsonb) || jsonb_build_object(
|
||||
'image_to_video',
|
||||
COALESCE(platform_model.capabilities->'image_to_video', '{}'::jsonb) || input_constraints.value,
|
||||
'omni_video',
|
||||
COALESCE(platform_model.capabilities->'omni_video', '{}'::jsonb) || input_constraints.value
|
||||
),
|
||||
updated_at = now()
|
||||
FROM integration_platforms platform
|
||||
CROSS JOIN input_constraints
|
||||
WHERE platform_model.platform_id = platform.id
|
||||
AND platform.deleted_at IS NULL
|
||||
AND (
|
||||
platform_model.base_model_id IN (SELECT id FROM updated_base_models)
|
||||
OR (
|
||||
platform.provider = 'easyai'
|
||||
AND COALESCE(NULLIF(platform_model.provider_model_name, ''), platform_model.model_name)
|
||||
IN ('豆包Seedance-2.0', '豆包Seedance-2.0-fast')
|
||||
)
|
||||
OR (
|
||||
platform.provider = 'tencent-hunyuan-video'
|
||||
AND lower(COALESCE(NULLIF(platform_model.provider_model_name, ''), platform_model.model_name))
|
||||
IN ('2.0', '2.0-fast')
|
||||
)
|
||||
);
|
||||
Reference in New Issue
Block a user