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

254 lines
8.6 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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