Files
easyai-ai-gateway/apps/api/migrations/0044_openai_compatible_embedding_rerank.sql
T

254 lines
8.6 KiB
SQL

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();