-- Represent provider-specific request model names as presets on the canonical -- base model instead of duplicating the base model catalog row. WITH preset AS ( SELECT jsonb_build_object( 'providerKey', 'volces-openai', 'providerCode', 'volces-openai', 'providerModelName', 'glm-4-7-251222', 'modelAlias', 'GLM-4.7', 'displayName', 'GLM-4.7', 'modelType', jsonb_build_array('text_generate', 'image_analysis', 'tools_call'), 'source', 'server-main.integration-platform', 'sourceProviderName', '火山引擎(OpenAI兼容)', 'baseProviderKey', 'zhipu-openai', 'baseProviderModelName', 'glm-4.7' ) AS item ), target AS ( SELECT b.id, COALESCE(( SELECT jsonb_agg(existing.item) FROM jsonb_array_elements( COALESCE(b.metadata->'providerModelPresets', '[]'::jsonb) ) AS existing(item) WHERE existing.item->>'providerKey' <> 'volces-openai' ), '[]'::jsonb) || jsonb_build_array(preset.item) AS presets FROM base_model_catalog b CROSS JOIN preset WHERE b.provider_key = 'zhipu-openai' AND b.provider_model_name = 'glm-4.7' ) UPDATE base_model_catalog b SET metadata = (b.metadata - 'providerModelPresets') || jsonb_build_object('providerModelPresets', target.presets), default_snapshot = CASE WHEN COALESCE(b.default_snapshot, '{}'::jsonb) = '{}'::jsonb THEN b.default_snapshot ELSE jsonb_set( b.default_snapshot, '{metadata}', (COALESCE(b.default_snapshot->'metadata', '{}'::jsonb) - 'providerModelPresets') || jsonb_build_object('providerModelPresets', target.presets), true ) END, updated_at = now() FROM target WHERE b.id = target.id; WITH canonical_ref AS ( SELECT jsonb_build_object( 'providerKey', 'zhipu-openai', 'providerCode', 'zhipu-openai', 'modelAlias', 'GLM-4.7', 'providerModelName', 'glm-4.7', 'canonicalModelKey', canonical_model_key ) AS ref FROM base_model_catalog WHERE provider_key = 'zhipu-openai' AND provider_model_name = 'glm-4.7' LIMIT 1 ), deprecated_payload AS ( SELECT jsonb_build_object( 'canonicalBaseModelRef', canonical_ref.ref, 'realModelNameOverride', 'glm-4-7-251222', 'selectable', false, 'hiddenReason', 'represented_by_provider_model_preset' ) AS metadata_patch FROM canonical_ref ) UPDATE base_model_catalog b SET status = 'hidden', metadata = b.metadata || deprecated_payload.metadata_patch, default_snapshot = CASE WHEN COALESCE(b.default_snapshot, '{}'::jsonb) = '{}'::jsonb THEN b.default_snapshot ELSE jsonb_set( b.default_snapshot || jsonb_build_object('status', 'hidden'), '{metadata}', COALESCE(b.default_snapshot->'metadata', '{}'::jsonb) || deprecated_payload.metadata_patch, true ) END, updated_at = now() FROM deprecated_payload WHERE b.provider_key = 'volces-openai' AND b.provider_model_name = 'glm-4-7-251222'; WITH canonical AS ( SELECT id, provider_model_name FROM base_model_catalog WHERE provider_key = 'zhipu-openai' AND provider_model_name = 'glm-4.7' LIMIT 1 ), deprecated AS ( SELECT id FROM base_model_catalog WHERE provider_key = 'volces-openai' AND provider_model_name = 'glm-4-7-251222' LIMIT 1 ) UPDATE platform_models model SET base_model_id = canonical.id, model_name = canonical.provider_model_name, provider_model_name = 'glm-4-7-251222', model_alias = COALESCE(NULLIF(model.model_alias, ''), NULLIF(model.display_name, ''), 'GLM-4.7'), display_name = COALESCE(NULLIF(model.display_name, ''), NULLIF(model.model_alias, ''), 'GLM-4.7'), model_type = jsonb_build_array('text_generate', 'image_analysis', 'tools_call'), enabled = true, updated_at = now() FROM integration_platforms platform, canonical, deprecated WHERE model.platform_id = platform.id AND platform.provider = 'volces-openai' AND ( model.base_model_id = deprecated.id OR model.model_name = 'glm-4-7-251222' OR model.provider_model_name = 'glm-4-7-251222' ) AND NOT EXISTS ( SELECT 1 FROM platform_models peer WHERE peer.platform_id = model.platform_id AND peer.id <> model.id AND peer.model_name = canonical.provider_model_name ); WITH canonical AS ( SELECT id, provider_model_name FROM base_model_catalog WHERE provider_key = 'zhipu-openai' AND provider_model_name = 'glm-4.7' LIMIT 1 ), deprecated AS ( SELECT id FROM base_model_catalog WHERE provider_key = 'volces-openai' AND provider_model_name = 'glm-4-7-251222' LIMIT 1 ) UPDATE platform_models peer SET base_model_id = canonical.id, model_name = canonical.provider_model_name, provider_model_name = 'glm-4-7-251222', model_alias = COALESCE( NULLIF(( SELECT legacy.model_alias FROM platform_models legacy WHERE legacy.platform_id = peer.platform_id AND legacy.id <> peer.id AND ( legacy.base_model_id = deprecated.id OR legacy.model_name = 'glm-4-7-251222' OR legacy.provider_model_name = 'glm-4-7-251222' ) LIMIT 1 ), ''), NULLIF(( SELECT legacy.display_name FROM platform_models legacy WHERE legacy.platform_id = peer.platform_id AND legacy.id <> peer.id AND ( legacy.base_model_id = deprecated.id OR legacy.model_name = 'glm-4-7-251222' OR legacy.provider_model_name = 'glm-4-7-251222' ) LIMIT 1 ), ''), NULLIF(peer.model_alias, ''), NULLIF(peer.display_name, ''), 'GLM-4.7' ), display_name = COALESCE( NULLIF(( SELECT legacy.display_name FROM platform_models legacy WHERE legacy.platform_id = peer.platform_id AND legacy.id <> peer.id AND ( legacy.base_model_id = deprecated.id OR legacy.model_name = 'glm-4-7-251222' OR legacy.provider_model_name = 'glm-4-7-251222' ) LIMIT 1 ), ''), NULLIF(( SELECT legacy.model_alias FROM platform_models legacy WHERE legacy.platform_id = peer.platform_id AND legacy.id <> peer.id AND ( legacy.base_model_id = deprecated.id OR legacy.model_name = 'glm-4-7-251222' OR legacy.provider_model_name = 'glm-4-7-251222' ) LIMIT 1 ), ''), NULLIF(peer.display_name, ''), NULLIF(peer.model_alias, ''), 'GLM-4.7' ), model_type = jsonb_build_array('text_generate', 'image_analysis', 'tools_call'), enabled = true, updated_at = now() FROM integration_platforms platform, canonical, deprecated WHERE peer.platform_id = platform.id AND platform.provider = 'volces-openai' AND peer.model_name = canonical.provider_model_name AND EXISTS ( SELECT 1 FROM platform_models legacy WHERE legacy.platform_id = peer.platform_id AND legacy.id <> peer.id AND ( legacy.base_model_id = deprecated.id OR legacy.model_name = 'glm-4-7-251222' OR legacy.provider_model_name = 'glm-4-7-251222' ) ); WITH canonical AS ( SELECT id, provider_model_name FROM base_model_catalog WHERE provider_key = 'zhipu-openai' AND provider_model_name = 'glm-4.7' LIMIT 1 ) UPDATE platform_models peer SET base_model_id = canonical.id, model_name = canonical.provider_model_name, provider_model_name = 'glm-4-7-251222', model_alias = COALESCE(NULLIF(peer.model_alias, ''), NULLIF(peer.display_name, ''), 'GLM-4.7'), display_name = COALESCE(NULLIF(peer.display_name, ''), NULLIF(peer.model_alias, ''), 'GLM-4.7'), model_type = jsonb_build_array('text_generate', 'image_analysis', 'tools_call'), enabled = true, updated_at = now() FROM integration_platforms platform, canonical WHERE peer.platform_id = platform.id AND platform.provider = 'volces-openai' AND ( peer.model_name = canonical.provider_model_name OR peer.provider_model_name = 'glm-4-7-251222' ); WITH canonical AS ( SELECT id, provider_model_name FROM base_model_catalog WHERE provider_key = 'zhipu-openai' AND provider_model_name = 'glm-4.7' LIMIT 1 ), deprecated AS ( SELECT id FROM base_model_catalog WHERE provider_key = 'volces-openai' AND provider_model_name = 'glm-4-7-251222' LIMIT 1 ) DELETE FROM platform_models model USING integration_platforms platform, canonical, deprecated WHERE model.platform_id = platform.id AND platform.provider = 'volces-openai' AND ( model.base_model_id = deprecated.id OR model.model_name = 'glm-4-7-251222' OR model.provider_model_name = 'glm-4-7-251222' ) AND EXISTS ( SELECT 1 FROM platform_models peer WHERE peer.platform_id = model.platform_id AND peer.id <> model.id AND peer.model_name = canonical.provider_model_name ); -- DeepSeek V4 belongs to the DeepSeek base-model provider. Aliyun Bailian is -- represented as a provider preset on those canonical base models. WITH source_provider(provider_key, provider_code, provider_type, display_name, icon_path) AS ( VALUES ( 'deepseek-openai', 'deepseek-openai', 'openai', 'DeepSeek', 'https://static.51easyai.com/deepseek-color%20%281%29.webp' ) ) INSERT INTO model_catalog_providers ( provider_key, provider_code, provider_type, display_name, icon_path, source, capability_schema, default_rate_limit_policy, metadata, status ) SELECT provider_key, provider_code, provider_type, display_name, icon_path, 'server-main.integration-platform', '{}'::jsonb, '{}'::jsonb, jsonb_build_object( 'seed', 'server-main-provider-defaults', 'syncSource', 'server-main.integration-platform', 'sourceCode', provider_code, 'sourceSpecType', provider_type ), 'active' FROM source_provider ON CONFLICT (provider_key) DO UPDATE SET provider_code = EXCLUDED.provider_code, display_name = EXCLUDED.display_name, provider_type = EXCLUDED.provider_type, icon_path = EXCLUDED.icon_path, source = EXCLUDED.source, metadata = model_catalog_providers.metadata || EXCLUDED.metadata, status = EXCLUDED.status, updated_at = now(); WITH source_models(provider_model_name, model_alias, display_name) AS ( VALUES ('deepseek-v4-pro', 'DeepSeek-V4-Pro', 'DeepSeek-V4-Pro'), ('deepseek-v4-flash', 'DeepSeek-V4-Flash', 'DeepSeek-V4-Flash') ), source_rows AS ( SELECT source_models.provider_model_name, source_models.model_alias, source_models.display_name, COALESCE( aliyun.capabilities, jsonb_build_object('originalTypes', jsonb_build_array('text_generate', 'tools_call')) ) AS capabilities, COALESCE(aliyun.base_billing_config, '{}'::jsonb) AS base_billing_config, COALESCE(aliyun.default_rate_limit_policy, '{}'::jsonb) AS default_rate_limit_policy, COALESCE(aliyun.pricing_version, 1) AS pricing_version, COALESCE(aliyun.metadata, '{}'::jsonb) AS metadata FROM source_models LEFT JOIN base_model_catalog aliyun ON aliyun.provider_key = 'aliyun-bailian-openai' AND aliyun.provider_model_name = source_models.provider_model_name ), provider AS ( SELECT id FROM model_catalog_providers WHERE provider_key = 'deepseek-openai' LIMIT 1 ) INSERT INTO base_model_catalog ( provider_id, provider_key, canonical_model_key, provider_model_name, model_type, display_name, capabilities, base_billing_config, default_rate_limit_policy, pricing_version, status, metadata ) SELECT provider.id, 'deepseek-openai', 'deepseek-openai:' || source_rows.provider_model_name, source_rows.provider_model_name, jsonb_build_array('text_generate', 'tools_call'), source_rows.display_name, source_rows.capabilities, source_rows.base_billing_config, source_rows.default_rate_limit_policy, source_rows.pricing_version, 'active', (source_rows.metadata - 'providerModelPresets') || jsonb_build_object( 'source', 'server-main.integration-platform', 'sourceProviderCode', 'deepseek-openai', 'sourceProviderName', 'DeepSeek', 'sourceSpecType', 'openai', 'alias', source_rows.model_alias, 'iconPath', 'https://static.51easyai.com/deepseek-color%20%281%29.webp', 'selectable', true ) FROM source_rows, provider ON CONFLICT (canonical_model_key) DO UPDATE SET provider_id = EXCLUDED.provider_id, provider_key = EXCLUDED.provider_key, provider_model_name = EXCLUDED.provider_model_name, model_type = EXCLUDED.model_type, display_name = EXCLUDED.display_name, capabilities = EXCLUDED.capabilities, base_billing_config = EXCLUDED.base_billing_config, default_rate_limit_policy = EXCLUDED.default_rate_limit_policy, metadata = (base_model_catalog.metadata - 'providerModelPresets') || EXCLUDED.metadata, status = 'active', updated_at = now(); WITH preset_source(provider_model_name, model_alias, display_name) AS ( VALUES ('deepseek-v4-pro', 'DeepSeek-V4-Pro', 'DeepSeek-V4-Pro'), ('deepseek-v4-flash', 'DeepSeek-V4-Flash', 'DeepSeek-V4-Flash') ), target AS ( SELECT b.id, COALESCE(( SELECT jsonb_agg(existing.item) FROM jsonb_array_elements( COALESCE(b.metadata->'providerModelPresets', '[]'::jsonb) ) AS existing(item) WHERE existing.item->>'providerKey' <> 'aliyun-bailian-openai' ), '[]'::jsonb) || jsonb_build_array( jsonb_build_object( 'providerKey', 'aliyun-bailian-openai', 'providerCode', 'aliyun-bailian-openai', 'providerModelName', preset_source.provider_model_name, 'modelAlias', preset_source.model_alias, 'displayName', preset_source.display_name, 'modelType', jsonb_build_array('text_generate', 'tools_call'), 'source', 'server-main.integration-platform', 'sourceProviderName', '阿里云百炼(OpenAI兼容)', 'baseProviderKey', 'deepseek-openai', 'baseProviderModelName', preset_source.provider_model_name ) ) AS presets FROM base_model_catalog b JOIN preset_source ON preset_source.provider_model_name = b.provider_model_name WHERE b.provider_key = 'deepseek-openai' ) UPDATE base_model_catalog b SET metadata = (b.metadata - 'providerModelPresets') || jsonb_build_object('providerModelPresets', target.presets), default_snapshot = CASE WHEN COALESCE(b.default_snapshot, '{}'::jsonb) = '{}'::jsonb THEN b.default_snapshot ELSE jsonb_set( b.default_snapshot, '{metadata}', (COALESCE(b.default_snapshot->'metadata', '{}'::jsonb) - 'providerModelPresets') || jsonb_build_object('providerModelPresets', target.presets), true ) END, updated_at = now() FROM target WHERE b.id = target.id; WITH canonical AS ( SELECT id, provider_model_name, canonical_model_key FROM base_model_catalog WHERE provider_key = 'deepseek-openai' AND provider_model_name IN ('deepseek-v4-pro', 'deepseek-v4-flash') ) UPDATE base_model_catalog b SET status = 'hidden', metadata = b.metadata || jsonb_build_object( 'canonicalBaseModelRef', jsonb_build_object( 'providerKey', 'deepseek-openai', 'providerCode', 'deepseek-openai', 'providerModelName', canonical.provider_model_name, 'canonicalModelKey', canonical.canonical_model_key ), 'selectable', false, 'hiddenReason', 'represented_by_provider_model_preset' ), updated_at = now() FROM canonical WHERE b.provider_key = 'aliyun-bailian-openai' AND b.provider_model_name = canonical.provider_model_name; WITH canonical AS ( SELECT id, provider_model_name, CASE provider_model_name WHEN 'deepseek-v4-pro' THEN 'DeepSeek-V4-Pro' WHEN 'deepseek-v4-flash' THEN 'DeepSeek-V4-Flash' ELSE provider_model_name END AS model_alias FROM base_model_catalog WHERE provider_key = 'deepseek-openai' AND provider_model_name IN ('deepseek-v4-pro', 'deepseek-v4-flash') ) UPDATE platform_models model SET base_model_id = canonical.id, model_name = canonical.provider_model_name, provider_model_name = canonical.provider_model_name, model_alias = COALESCE(NULLIF(model.model_alias, ''), NULLIF(model.display_name, ''), canonical.model_alias), display_name = COALESCE(NULLIF(model.display_name, ''), NULLIF(model.model_alias, ''), canonical.model_alias), model_type = jsonb_build_array('text_generate', 'tools_call'), enabled = true, updated_at = now() FROM integration_platforms platform, canonical WHERE model.platform_id = platform.id AND platform.provider = 'aliyun-bailian-openai' AND ( model.model_name = canonical.provider_model_name OR model.provider_model_name = canonical.provider_model_name OR model.base_model_id IN ( SELECT deprecated.id FROM base_model_catalog deprecated WHERE deprecated.provider_key = 'aliyun-bailian-openai' AND deprecated.provider_model_name = canonical.provider_model_name ) ); -- DeepSeek-R1 and DeepSeek-V3 belong to the DeepSeek base-model provider. -- SiliconFlow exposes them with a deepseek-ai/ request-name prefix. WITH source_models(provider_model_name, model_alias, display_name, siliconflow_model_name) AS ( VALUES ('DeepSeek-R1', 'DeepSeek-R1', 'DeepSeek-R1', 'deepseek-ai/DeepSeek-R1'), ('DeepSeek-V3', 'DeepSeek-V3', 'DeepSeek-V3', 'deepseek-ai/DeepSeek-V3') ), source_rows AS ( SELECT source_models.provider_model_name, source_models.model_alias, source_models.display_name, source_models.siliconflow_model_name, COALESCE( siliconflow.capabilities, jsonb_build_object('originalTypes', jsonb_build_array('text_generate')) ) AS capabilities, COALESCE(siliconflow.base_billing_config, '{}'::jsonb) AS base_billing_config, COALESCE(siliconflow.default_rate_limit_policy, '{}'::jsonb) AS default_rate_limit_policy, COALESCE(siliconflow.pricing_version, 1) AS pricing_version, COALESCE(siliconflow.metadata, '{}'::jsonb) AS metadata FROM source_models LEFT JOIN base_model_catalog siliconflow ON siliconflow.provider_key = 'silicon-flow-openai' AND siliconflow.provider_model_name = source_models.siliconflow_model_name ), provider AS ( SELECT id FROM model_catalog_providers WHERE provider_key = 'deepseek-openai' LIMIT 1 ) INSERT INTO base_model_catalog ( provider_id, provider_key, canonical_model_key, provider_model_name, model_type, display_name, capabilities, base_billing_config, default_rate_limit_policy, pricing_version, status, metadata ) SELECT provider.id, 'deepseek-openai', 'deepseek-openai:' || source_rows.provider_model_name, source_rows.provider_model_name, jsonb_build_array('text_generate'), source_rows.display_name, source_rows.capabilities, source_rows.base_billing_config, source_rows.default_rate_limit_policy, source_rows.pricing_version, 'active', (source_rows.metadata - 'providerModelPresets') || jsonb_build_object( 'source', 'server-main.integration-platform', 'sourceProviderCode', 'deepseek-openai', 'sourceProviderName', 'DeepSeek', 'sourceSpecType', 'openai', 'alias', source_rows.model_alias, 'iconPath', 'https://static.51easyai.com/deepseek-color%20%281%29.webp', 'selectable', true ) FROM source_rows, provider ON CONFLICT (canonical_model_key) DO UPDATE SET provider_id = EXCLUDED.provider_id, provider_key = EXCLUDED.provider_key, provider_model_name = EXCLUDED.provider_model_name, model_type = EXCLUDED.model_type, display_name = EXCLUDED.display_name, capabilities = EXCLUDED.capabilities, base_billing_config = EXCLUDED.base_billing_config, default_rate_limit_policy = EXCLUDED.default_rate_limit_policy, metadata = (base_model_catalog.metadata - 'providerModelPresets') || EXCLUDED.metadata, status = 'active', updated_at = now(); WITH preset_source(provider_model_name, model_alias, display_name, siliconflow_model_name) AS ( VALUES ('DeepSeek-R1', 'DeepSeek-R1', 'DeepSeek-R1', 'deepseek-ai/DeepSeek-R1'), ('DeepSeek-V3', 'DeepSeek-V3', 'DeepSeek-V3', 'deepseek-ai/DeepSeek-V3') ), target AS ( SELECT b.id, COALESCE(( SELECT jsonb_agg(existing.item) FROM jsonb_array_elements( COALESCE(b.metadata->'providerModelPresets', '[]'::jsonb) ) AS existing(item) WHERE existing.item->>'providerKey' <> 'silicon-flow-openai' ), '[]'::jsonb) || jsonb_build_array( jsonb_build_object( 'providerKey', 'silicon-flow-openai', 'providerCode', 'silicon-flow-openai', 'providerModelName', preset_source.siliconflow_model_name, 'modelAlias', preset_source.model_alias, 'displayName', preset_source.display_name, 'modelType', jsonb_build_array('text_generate'), 'source', 'server-main.integration-platform', 'sourceProviderName', '硅基流动', 'baseProviderKey', 'deepseek-openai', 'baseProviderModelName', preset_source.provider_model_name ) ) AS presets FROM base_model_catalog b JOIN preset_source ON preset_source.provider_model_name = b.provider_model_name WHERE b.provider_key = 'deepseek-openai' ) UPDATE base_model_catalog b SET metadata = (b.metadata - 'providerModelPresets') || jsonb_build_object('providerModelPresets', target.presets), default_snapshot = CASE WHEN COALESCE(b.default_snapshot, '{}'::jsonb) = '{}'::jsonb THEN b.default_snapshot ELSE jsonb_set( b.default_snapshot, '{metadata}', (COALESCE(b.default_snapshot->'metadata', '{}'::jsonb) - 'providerModelPresets') || jsonb_build_object('providerModelPresets', target.presets), true ) END, updated_at = now() FROM target WHERE b.id = target.id; WITH canonical AS ( SELECT id, provider_model_name, canonical_model_key, CASE provider_model_name WHEN 'DeepSeek-R1' THEN 'deepseek-ai/DeepSeek-R1' WHEN 'DeepSeek-V3' THEN 'deepseek-ai/DeepSeek-V3' END AS siliconflow_model_name FROM base_model_catalog WHERE provider_key = 'deepseek-openai' AND provider_model_name IN ('DeepSeek-R1', 'DeepSeek-V3') ) UPDATE base_model_catalog b SET status = 'hidden', metadata = b.metadata || jsonb_build_object( 'canonicalBaseModelRef', jsonb_build_object( 'providerKey', 'deepseek-openai', 'providerCode', 'deepseek-openai', 'providerModelName', canonical.provider_model_name, 'canonicalModelKey', canonical.canonical_model_key ), 'realModelNameOverride', canonical.siliconflow_model_name, 'selectable', false, 'hiddenReason', 'represented_by_provider_model_preset' ), default_snapshot = CASE WHEN COALESCE(b.default_snapshot, '{}'::jsonb) = '{}'::jsonb THEN b.default_snapshot ELSE jsonb_set( b.default_snapshot || jsonb_build_object('status', 'hidden'), '{metadata}', COALESCE(b.default_snapshot->'metadata', '{}'::jsonb) || jsonb_build_object( 'canonicalBaseModelRef', jsonb_build_object( 'providerKey', 'deepseek-openai', 'providerCode', 'deepseek-openai', 'providerModelName', canonical.provider_model_name, 'canonicalModelKey', canonical.canonical_model_key ), 'realModelNameOverride', canonical.siliconflow_model_name, 'selectable', false, 'hiddenReason', 'represented_by_provider_model_preset' ), true ) END, updated_at = now() FROM canonical WHERE b.provider_key = 'silicon-flow-openai' AND b.provider_model_name = canonical.siliconflow_model_name; WITH canonical AS ( SELECT id, provider_model_name, provider_model_name AS model_alias, CASE provider_model_name WHEN 'DeepSeek-R1' THEN 'deepseek-ai/DeepSeek-R1' WHEN 'DeepSeek-V3' THEN 'deepseek-ai/DeepSeek-V3' END AS siliconflow_model_name FROM base_model_catalog WHERE provider_key = 'deepseek-openai' AND provider_model_name IN ('DeepSeek-R1', 'DeepSeek-V3') ) UPDATE platform_models peer SET base_model_id = canonical.id, provider_model_name = canonical.siliconflow_model_name, model_alias = COALESCE(NULLIF(peer.model_alias, ''), NULLIF(peer.display_name, ''), canonical.model_alias), model_type = jsonb_build_array('text_generate'), display_name = COALESCE(NULLIF(peer.display_name, ''), NULLIF(peer.model_alias, ''), canonical.model_alias), enabled = true, updated_at = now() FROM integration_platforms platform, canonical WHERE peer.platform_id = platform.id AND platform.provider = 'silicon-flow-openai' AND peer.model_name = canonical.provider_model_name; WITH canonical AS ( SELECT id, provider_model_name, provider_model_name AS model_alias, CASE provider_model_name WHEN 'DeepSeek-R1' THEN 'deepseek-ai/DeepSeek-R1' WHEN 'DeepSeek-V3' THEN 'deepseek-ai/DeepSeek-V3' END AS siliconflow_model_name FROM base_model_catalog WHERE provider_key = 'deepseek-openai' AND provider_model_name IN ('DeepSeek-R1', 'DeepSeek-V3') ) UPDATE platform_models model SET base_model_id = canonical.id, model_name = canonical.provider_model_name, provider_model_name = canonical.siliconflow_model_name, model_alias = COALESCE(NULLIF(model.model_alias, ''), NULLIF(model.display_name, ''), canonical.model_alias), model_type = jsonb_build_array('text_generate'), display_name = COALESCE(NULLIF(model.display_name, ''), NULLIF(model.model_alias, ''), canonical.model_alias), enabled = true, updated_at = now() FROM integration_platforms platform, canonical WHERE model.platform_id = platform.id AND platform.provider = 'silicon-flow-openai' AND ( model.model_name = canonical.siliconflow_model_name OR model.provider_model_name = canonical.siliconflow_model_name OR model.base_model_id IN ( SELECT deprecated.id FROM base_model_catalog deprecated WHERE deprecated.provider_key = 'silicon-flow-openai' AND deprecated.provider_model_name = canonical.siliconflow_model_name ) ) AND NOT EXISTS ( SELECT 1 FROM platform_models peer WHERE peer.platform_id = model.platform_id AND peer.id <> model.id AND peer.model_name = canonical.provider_model_name ); WITH canonical AS ( SELECT provider_model_name, CASE provider_model_name WHEN 'DeepSeek-R1' THEN 'deepseek-ai/DeepSeek-R1' WHEN 'DeepSeek-V3' THEN 'deepseek-ai/DeepSeek-V3' END AS siliconflow_model_name FROM base_model_catalog WHERE provider_key = 'deepseek-openai' AND provider_model_name IN ('DeepSeek-R1', 'DeepSeek-V3') ) DELETE FROM platform_models model USING integration_platforms platform, canonical WHERE model.platform_id = platform.id AND platform.provider = 'silicon-flow-openai' AND ( model.model_name = canonical.siliconflow_model_name OR model.provider_model_name = canonical.siliconflow_model_name OR model.base_model_id IN ( SELECT deprecated.id FROM base_model_catalog deprecated WHERE deprecated.provider_key = 'silicon-flow-openai' AND deprecated.provider_model_name = canonical.siliconflow_model_name ) ) AND EXISTS ( SELECT 1 FROM platform_models peer WHERE peer.platform_id = model.platform_id AND peer.id <> model.id AND peer.model_name = canonical.provider_model_name );