WITH aliyun_model_defs AS ( SELECT 'aliyun-bailian-openai' AS provider_key, 'aliyun-bailian-openai:text-embedding-v4' AS canonical_model_key, 'text-embedding-v4' AS provider_model_name, 'Qwen3-Embedding-v4' AS display_name, 'Qwen3-Embedding-v4' AS model_alias, 'Qwen3-Embedding 系列,默认维度 1024,最长输入 8192 tokens;支持 100+ 语种与多种编程语言。' AS description, 'https://static.51easyai.com/qwen-color.webp' AS icon_path, jsonb_build_array('text_embedding') AS model_type, jsonb_build_object( 'text_embedding', jsonb_build_object( 'dimensions', jsonb_build_array(2048, 1536, 1024, 768, 512, 256, 128, 64), 'defaultDimension', 1024, 'maxRows', 10, 'maxTokensPerRow', 8192 ), 'originalTypes', jsonb_build_array('text_embedding') ) AS capabilities UNION ALL SELECT 'aliyun-bailian-openai', 'aliyun-bailian-openai:text-embedding-v3', 'text-embedding-v3', 'Qwen3-Embedding-v3', 'Qwen3-Embedding-v3', 'Qwen3-Embedding 系列,默认维度 1024;支持中文、英文及 50+ 主流语种。', 'https://static.51easyai.com/qwen-color.webp', jsonb_build_array('text_embedding'), jsonb_build_object( 'text_embedding', jsonb_build_object( 'dimensions', jsonb_build_array(1024, 768, 512, 256, 128, 64), 'defaultDimension', 1024 ), 'originalTypes', jsonb_build_array('text_embedding') ) UNION ALL SELECT 'aliyun-bailian-openai', 'aliyun-bailian-openai:text-embedding-v2', 'text-embedding-v2', 'Text-Embedding-v2', 'Text-Embedding-v2', '固定维度 1536,最长输入 2048 tokens;支持中英西法葡印尼日韩德俄等语种。', 'https://static.51easyai.com/qwen-color.webp', jsonb_build_array('text_embedding'), jsonb_build_object( 'text_embedding', jsonb_build_object( 'dimensions', jsonb_build_array(1536), 'defaultDimension', 1536, 'maxRows', 25, 'maxTokensPerRow', 2048 ), 'originalTypes', jsonb_build_array('text_embedding') ) UNION ALL SELECT 'aliyun-bailian-openai', 'aliyun-bailian-openai:text-embedding-v1', 'text-embedding-v1', 'Text-Embedding-v1', 'Text-Embedding-v1', '百炼 OpenAI 兼容渠道 embedding 基础模型。', 'https://static.51easyai.com/qwen-color.webp', jsonb_build_array('text_embedding'), jsonb_build_object('originalTypes', jsonb_build_array('text_embedding')) UNION ALL SELECT 'aliyun-bailian-openai', 'aliyun-bailian-openai:qwen3-rerank', 'qwen3-rerank', 'Qwen3-Rerank', 'Qwen3-Rerank', '阿里云百炼 OpenAI 兼容重排序模型,支持 100+ 语种,适用于语义文本搜索和 RAG。', 'https://static.51easyai.com/qwen-color.webp', jsonb_build_array('text_rerank'), jsonb_build_object( 'text_rerank', jsonb_build_object( 'maxDocuments', 500, 'maxTokensPerDocument', 4000, 'maxRequestTokens', 120000, 'supportTopN', true, 'supportInstruct', true ), 'originalTypes', jsonb_build_array('text_rerank') ) ), source_rows AS ( SELECT providers.id AS provider_id, defs.provider_key, defs.canonical_model_key, defs.provider_model_name, defs.model_type, defs.display_name, defs.model_alias, defs.description, defs.icon_path, defs.capabilities, COALESCE(template.base_billing_config, '{"text":{"basePrice":0.01,"baseWeight":1}}'::jsonb) AS base_billing_config, COALESCE(template.default_rate_limit_policy, '{}'::jsonb) AS default_rate_limit_policy, COALESCE( template.pricing_rule_set_id, (SELECT id FROM model_pricing_rule_sets WHERE rule_set_key = 'default-multimodal-v1' LIMIT 1) ) AS pricing_rule_set_id, COALESCE( template.runtime_policy_set_id, (SELECT id FROM model_runtime_policy_sets WHERE policy_key = 'default-runtime-v1' LIMIT 1) ) AS runtime_policy_set_id, COALESCE(template.runtime_policy_override, '{}'::jsonb) AS runtime_policy_override, COALESCE(template.pricing_version, 1) AS pricing_version FROM aliyun_model_defs defs LEFT JOIN model_catalog_providers providers ON providers.provider_key = defs.provider_key OR providers.provider_code = defs.provider_key LEFT JOIN base_model_catalog template ON template.canonical_model_key = 'aliyun-bailian-openai:text-embedding-v4' ), payload AS ( SELECT source_rows.*, jsonb_build_object( 'source', 'aliyun.model-studio.docs', 'sourceProviderCode', provider_key, 'sourceProviderName', '阿里云百炼(OpenAI兼容)', 'sourceSpecType', 'openai', 'originalTypes', model_type, 'alias', model_alias, 'description', description, 'iconPath', icon_path, 'billingType', 'external-api', 'billingMode', '', 'referenceModel', '', 'modelWeight', NULL, 'selectable', true, 'rawModel', jsonb_build_object( 'name', provider_model_name, 'types', model_type, 'icon_path', icon_path, 'alias', model_alias, 'description', description, 'capabilities', capabilities - 'originalTypes' ) ) AS metadata FROM source_rows ), snapshot AS ( SELECT payload.*, jsonb_build_object( 'providerKey', provider_key, 'canonicalModelKey', canonical_model_key, 'providerModelName', provider_model_name, 'modelType', model_type, 'modelAlias', model_alias, 'capabilities', capabilities, 'baseBillingConfig', base_billing_config, 'defaultRateLimitPolicy', default_rate_limit_policy, 'pricingRuleSetId', COALESCE(pricing_rule_set_id::text, ''), 'runtimePolicySetId', COALESCE(runtime_policy_set_id::text, ''), 'runtimePolicyOverride', runtime_policy_override, 'metadata', metadata, 'pricingVersion', pricing_version, 'status', 'active' ) AS default_snapshot FROM payload ) 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_rule_set_id, runtime_policy_set_id, runtime_policy_override, metadata, catalog_type, default_snapshot, pricing_version, status ) SELECT provider_id, provider_key, canonical_model_key, provider_model_name, model_type, display_name, capabilities, base_billing_config, default_rate_limit_policy, pricing_rule_set_id, runtime_policy_set_id, runtime_policy_override, metadata, 'system', default_snapshot, pricing_version, 'active' FROM snapshot ON CONFLICT (canonical_model_key) DO UPDATE SET provider_id = EXCLUDED.provider_id, provider_key = EXCLUDED.provider_key, provider_model_name = CASE WHEN base_model_catalog.customized_at IS NULL THEN EXCLUDED.provider_model_name ELSE base_model_catalog.provider_model_name END, model_type = CASE WHEN base_model_catalog.customized_at IS NULL THEN EXCLUDED.model_type ELSE base_model_catalog.model_type END, display_name = CASE WHEN base_model_catalog.customized_at IS NULL THEN EXCLUDED.display_name ELSE base_model_catalog.display_name END, capabilities = CASE WHEN base_model_catalog.customized_at IS NULL THEN EXCLUDED.capabilities ELSE base_model_catalog.capabilities END, base_billing_config = CASE WHEN base_model_catalog.customized_at IS NULL THEN EXCLUDED.base_billing_config ELSE base_model_catalog.base_billing_config END, default_rate_limit_policy = CASE WHEN base_model_catalog.customized_at IS NULL THEN EXCLUDED.default_rate_limit_policy ELSE base_model_catalog.default_rate_limit_policy END, pricing_rule_set_id = COALESCE(base_model_catalog.pricing_rule_set_id, EXCLUDED.pricing_rule_set_id), runtime_policy_set_id = COALESCE(base_model_catalog.runtime_policy_set_id, EXCLUDED.runtime_policy_set_id), runtime_policy_override = CASE WHEN base_model_catalog.customized_at IS NULL THEN EXCLUDED.runtime_policy_override ELSE base_model_catalog.runtime_policy_override END, metadata = CASE WHEN base_model_catalog.customized_at IS NULL THEN EXCLUDED.metadata ELSE base_model_catalog.metadata END, catalog_type = 'system', default_snapshot = EXCLUDED.default_snapshot, pricing_version = CASE WHEN base_model_catalog.customized_at IS NULL THEN EXCLUDED.pricing_version ELSE base_model_catalog.pricing_version END, status = CASE WHEN base_model_catalog.customized_at IS NULL THEN 'active' ELSE base_model_catalog.status END, updated_at = now();