Files
easyai-ai-gateway/apps/api/internal/acceptancesnapshot/snapshot.go
T
wangbo e05922b0f4 feat(acceptance): 建立同构验收与弹性容量体系
实现本地三节点 K3s 同构环境、脱敏生产快照、Gemini 图片和多参考图视频协议模拟、统一验收报告及故障注入。\n\n新增 Worker 容量控制器、资源与连接预算、任务恢复保护,并将生产验收拆分为 validation 执行和人工 CAS 放量。\n\n验证包括 Go 全量测试、PostgreSQL HTTP 集成测试、go vet、OpenAPI、ShellCheck、前端检查、迁移及发布脚本测试。
2026-07-31 18:02:24 +08:00

1102 lines
36 KiB
Go

package acceptancesnapshot
import (
"bytes"
"context"
"crypto/sha256"
"encoding/hex"
"encoding/json"
"errors"
"fmt"
"net/url"
"regexp"
"sort"
"strconv"
"strings"
"time"
"github.com/jackc/pgx/v5"
"github.com/jackc/pgx/v5/pgxpool"
)
const (
SchemaVersion = "acceptance-snapshot/v1"
LocalClusterSettingKey = "acceptance_local_cluster_id"
)
var (
fullSHAPattern = regexp.MustCompile(`^[0-9a-f]{40}$`)
hashPattern = regexp.MustCompile(`^[0-9a-f]{64}$`)
)
type Source struct {
ReleaseSHA string `json:"releaseSha"`
ConfigHash string `json:"configHash"`
CreatedAt time.Time `json:"createdAt"`
}
type Snapshot struct {
SchemaVersion string `json:"schemaVersion"`
Source Source `json:"source"`
Candidates []Candidate `json:"candidates"`
SnapshotSHA256 string `json:"snapshotSha256"`
SecretSafe bool `json:"secretSafe"`
}
type Candidate struct {
Workload string `json:"workload"`
Provider Provider `json:"provider"`
BaseModel BaseModel `json:"baseModel"`
Platform Platform `json:"platform"`
PlatformModel PlatformModel `json:"platformModel"`
RuntimePolicy RuntimePolicy `json:"runtimePolicy"`
PricingRules []PricingRule `json:"pricingRules"`
Metadata CandidateSource `json:"metadata"`
}
type Provider struct {
ProviderKey string `json:"providerKey"`
ProviderCode string `json:"providerCode"`
DisplayName string `json:"displayName"`
ProviderType string `json:"providerType"`
CapabilitySchema map[string]any `json:"capabilitySchema"`
DefaultRateLimitPolicy map[string]any `json:"defaultRateLimitPolicy"`
}
type BaseModel struct {
CanonicalModelKey string `json:"canonicalModelKey"`
InvocationName string `json:"invocationName"`
ProviderModelName string `json:"providerModelName"`
ModelType []string `json:"modelType"`
DisplayName string `json:"displayName"`
Capabilities map[string]any `json:"capabilities"`
BaseBillingConfig map[string]any `json:"baseBillingConfig"`
DefaultRateLimitPolicy map[string]any `json:"defaultRateLimitPolicy"`
RuntimePolicyOverride map[string]any `json:"runtimePolicyOverride"`
PricingVersion int `json:"pricingVersion"`
}
type Platform struct {
Provider string `json:"provider"`
PlatformKey string `json:"platformKey"`
Name string `json:"name"`
BaseURLPath string `json:"baseUrlPath"`
AuthType string `json:"authType"`
Config map[string]any `json:"config"`
DefaultPricingMode string `json:"defaultPricingMode"`
DefaultDiscountFactor string `json:"defaultDiscountFactor"`
RetryPolicy map[string]any `json:"retryPolicy"`
RateLimitPolicy map[string]any `json:"rateLimitPolicy"`
Priority int `json:"priority"`
}
type PlatformModel struct {
ModelName string `json:"modelName"`
ProviderModelName string `json:"providerModelName"`
ModelAlias string `json:"modelAlias"`
ModelType []string `json:"modelType"`
DisplayName string `json:"displayName"`
CapabilityOverride map[string]any `json:"capabilityOverride"`
Capabilities map[string]any `json:"capabilities"`
PricingMode string `json:"pricingMode"`
DiscountFactor string `json:"discountFactor"`
BillingConfigOverride map[string]any `json:"billingConfigOverride"`
BillingConfig map[string]any `json:"billingConfig"`
PermissionConfig map[string]any `json:"permissionConfig"`
RetryPolicy map[string]any `json:"retryPolicy"`
RateLimitPolicy map[string]any `json:"rateLimitPolicy"`
RuntimePolicyOverride map[string]any `json:"runtimePolicyOverride"`
}
type RuntimePolicy struct {
RateLimitPolicy map[string]any `json:"rateLimitPolicy"`
RetryPolicy map[string]any `json:"retryPolicy"`
AutoDisablePolicy map[string]any `json:"autoDisablePolicy"`
DegradePolicy map[string]any `json:"degradePolicy"`
}
type PricingRule struct {
RuleKey string `json:"ruleKey"`
DisplayName string `json:"displayName"`
ResourceType string `json:"resourceType"`
Unit string `json:"unit"`
BasePrice string `json:"basePrice"`
Currency string `json:"currency"`
BaseWeight map[string]any `json:"baseWeight"`
DynamicWeight map[string]any `json:"dynamicWeight"`
CalculatorType string `json:"calculatorType"`
DimensionSchema map[string]any `json:"dimensionSchema"`
FormulaConfig map[string]any `json:"formulaConfig"`
Priority int `json:"priority"`
}
type CandidateSource struct {
PlatformID string `json:"platformId"`
PlatformModelID string `json:"platformModelId"`
BaseModelID string `json:"baseModelId"`
}
type ExportOptions struct {
ReleaseSHA string
Now func() time.Time
}
func Export(ctx context.Context, pool *pgxpool.Pool, options ExportOptions) (Snapshot, error) {
releaseSHA := strings.ToLower(strings.TrimSpace(options.ReleaseSHA))
if !fullSHAPattern.MatchString(releaseSHA) {
return Snapshot{}, errors.New("source release SHA must be a full lowercase Git SHA")
}
now := options.Now
if now == nil {
now = time.Now
}
snapshot := Snapshot{
SchemaVersion: SchemaVersion,
Source: Source{
ReleaseSHA: releaseSHA,
CreatedAt: now().UTC(),
},
SecretSafe: true,
}
for _, workload := range []string{"gemini_image_edit", "multi_reference_video"} {
candidate, err := exportCandidate(ctx, pool, workload)
if err != nil {
return Snapshot{}, err
}
snapshot.Candidates = append(snapshot.Candidates, candidate)
}
sort.Slice(snapshot.Candidates, func(i, j int) bool {
return snapshot.Candidates[i].Workload < snapshot.Candidates[j].Workload
})
configHash, err := candidateConfigHash(snapshot.Candidates)
if err != nil {
return Snapshot{}, err
}
snapshot.Source.ConfigHash = configHash
snapshot.SnapshotSHA256, err = snapshotHash(snapshot)
if err != nil {
return Snapshot{}, err
}
if err := Validate(snapshot); err != nil {
return Snapshot{}, err
}
return snapshot, nil
}
func Decode(payload []byte) (Snapshot, error) {
decoder := json.NewDecoder(bytes.NewReader(payload))
decoder.UseNumber()
decoder.DisallowUnknownFields()
var snapshot Snapshot
if err := decoder.Decode(&snapshot); err != nil {
return Snapshot{}, fmt.Errorf("decode acceptance snapshot: %w", err)
}
if err := Validate(snapshot); err != nil {
return Snapshot{}, err
}
return snapshot, nil
}
func Encode(snapshot Snapshot) ([]byte, error) {
if err := Validate(snapshot); err != nil {
return nil, err
}
payload, err := json.MarshalIndent(snapshot, "", " ")
if err != nil {
return nil, err
}
return append(payload, '\n'), nil
}
func Validate(snapshot Snapshot) error {
if snapshot.SchemaVersion != SchemaVersion {
return fmt.Errorf("unsupported acceptance snapshot schema %q", snapshot.SchemaVersion)
}
if !fullSHAPattern.MatchString(snapshot.Source.ReleaseSHA) {
return errors.New("snapshot source release SHA is invalid")
}
if !hashPattern.MatchString(snapshot.Source.ConfigHash) || !hashPattern.MatchString(snapshot.SnapshotSHA256) {
return errors.New("snapshot hashes must be lowercase SHA-256 values")
}
if !snapshot.SecretSafe {
return errors.New("snapshot is not marked secret-safe")
}
if len(snapshot.Candidates) != 2 {
return fmt.Errorf("snapshot must contain exactly two workload candidates, got %d", len(snapshot.Candidates))
}
workloads := map[string]bool{}
for index := range snapshot.Candidates {
candidate := &snapshot.Candidates[index]
if candidate.Workload != "gemini_image_edit" && candidate.Workload != "multi_reference_video" {
return fmt.Errorf("unsupported snapshot workload %q", candidate.Workload)
}
if workloads[candidate.Workload] {
return fmt.Errorf("duplicate snapshot workload %q", candidate.Workload)
}
workloads[candidate.Workload] = true
if err := validateCandidate(*candidate); err != nil {
return fmt.Errorf("%s: %w", candidate.Workload, err)
}
}
configHash, err := candidateConfigHash(snapshot.Candidates)
if err != nil {
return err
}
if configHash != snapshot.Source.ConfigHash {
return errors.New("snapshot candidate config hash does not match")
}
hash, err := snapshotHash(snapshot)
if err != nil {
return err
}
if hash != snapshot.SnapshotSHA256 {
return errors.New("snapshot SHA-256 does not match its content")
}
payload, err := json.Marshal(snapshot)
if err != nil {
return err
}
if unsafePath, ok := findUnsafeJSON(payload); ok {
return fmt.Errorf("snapshot contains forbidden secret-like field %s", unsafePath)
}
return nil
}
func Import(ctx context.Context, pool *pgxpool.Pool, snapshot Snapshot, localClusterID string) error {
if err := Validate(snapshot); err != nil {
return err
}
localClusterID = strings.TrimSpace(localClusterID)
if localClusterID == "" {
return errors.New("local cluster ID is required")
}
var marker string
err := pool.QueryRow(ctx, `
SELECT COALESCE(value->>'clusterId', '')
FROM system_settings
WHERE setting_key = $1`, LocalClusterSettingKey).Scan(&marker)
if err != nil {
return fmt.Errorf("read local acceptance cluster marker: %w", err)
}
if marker != localClusterID {
return fmt.Errorf("refusing snapshot import: local cluster marker mismatch")
}
tx, err := pool.Begin(ctx)
if err != nil {
return err
}
defer func() { _ = tx.Rollback(ctx) }()
platformKeys := make([]string, 0, len(snapshot.Candidates))
for _, candidate := range snapshot.Candidates {
if err := importCandidate(ctx, tx, candidate, snapshot.Source.ConfigHash); err != nil {
return fmt.Errorf("import %s candidate: %w", candidate.Workload, err)
}
platformKeys = append(platformKeys, candidate.Platform.PlatformKey)
}
if _, err := tx.Exec(ctx, `
UPDATE integration_platforms
SET status = 'disabled',
disabled_reason = 'local_acceptance_snapshot_isolation',
updated_at = now()
WHERE deleted_at IS NULL
AND NOT (platform_key = ANY($1::text[]))`, platformKeys); err != nil {
return err
}
_, err = tx.Exec(ctx, `
INSERT INTO system_settings (setting_key, value)
VALUES ('acceptance_snapshot', $1::jsonb)
ON CONFLICT (setting_key) DO UPDATE
SET value = EXCLUDED.value, updated_at = now()`,
mustJSON(map[string]any{
"schemaVersion": snapshot.SchemaVersion,
"releaseSha": snapshot.Source.ReleaseSHA,
"configHash": snapshot.Source.ConfigHash,
"snapshotSha256": snapshot.SnapshotSHA256,
}),
)
if err != nil {
return err
}
return tx.Commit(ctx)
}
func exportCandidate(ctx context.Context, pool *pgxpool.Pool, workload string) (Candidate, error) {
row := pool.QueryRow(ctx, exportCandidateSQL, workload)
var candidate Candidate
var providerCapability, providerRateLimit []byte
var baseModelType, baseCapabilities, baseBilling, baseRateLimit, baseRuntimeOverride []byte
var platformConfig, platformRetry, platformRateLimit []byte
var modelType, modelCapabilityOverride, modelCapabilities []byte
var modelBillingOverride, modelBilling, modelPermission, modelRetry, modelRateLimit, modelRuntimeOverride []byte
var runtimeRateLimit, runtimeRetry, runtimeAutoDisable, runtimeDegrade []byte
var pricingRules []byte
var baseURL string
err := row.Scan(
&candidate.Provider.ProviderKey,
&candidate.Provider.ProviderCode,
&candidate.Provider.DisplayName,
&candidate.Provider.ProviderType,
&providerCapability,
&providerRateLimit,
&candidate.BaseModel.CanonicalModelKey,
&candidate.BaseModel.InvocationName,
&candidate.BaseModel.ProviderModelName,
&baseModelType,
&candidate.BaseModel.DisplayName,
&baseCapabilities,
&baseBilling,
&baseRateLimit,
&baseRuntimeOverride,
&candidate.BaseModel.PricingVersion,
&candidate.Platform.Provider,
&candidate.Platform.PlatformKey,
&candidate.Platform.Name,
&baseURL,
&candidate.Platform.AuthType,
&platformConfig,
&candidate.Platform.DefaultPricingMode,
&candidate.Platform.DefaultDiscountFactor,
&platformRetry,
&platformRateLimit,
&candidate.Platform.Priority,
&candidate.PlatformModel.ModelName,
&candidate.PlatformModel.ProviderModelName,
&candidate.PlatformModel.ModelAlias,
&modelType,
&candidate.PlatformModel.DisplayName,
&modelCapabilityOverride,
&modelCapabilities,
&candidate.PlatformModel.PricingMode,
&candidate.PlatformModel.DiscountFactor,
&modelBillingOverride,
&modelBilling,
&modelPermission,
&modelRetry,
&modelRateLimit,
&modelRuntimeOverride,
&runtimeRateLimit,
&runtimeRetry,
&runtimeAutoDisable,
&runtimeDegrade,
&pricingRules,
&candidate.Metadata.PlatformID,
&candidate.Metadata.PlatformModelID,
&candidate.Metadata.BaseModelID,
)
if errors.Is(err, pgx.ErrNoRows) {
return Candidate{}, fmt.Errorf("no enabled production candidate found for %s", workload)
}
if err != nil {
return Candidate{}, err
}
candidate.Workload = workload
candidate.Provider.CapabilitySchema = decodeObject(providerCapability)
candidate.Provider.DefaultRateLimitPolicy = decodeObject(providerRateLimit)
candidate.BaseModel.ModelType = decodeStringArray(baseModelType)
candidate.BaseModel.Capabilities = decodeObject(baseCapabilities)
candidate.BaseModel.BaseBillingConfig = decodeObject(baseBilling)
candidate.BaseModel.DefaultRateLimitPolicy = decodeObject(baseRateLimit)
candidate.BaseModel.RuntimePolicyOverride = decodeObject(baseRuntimeOverride)
candidate.Platform.BaseURLPath = safeBaseURLPath(baseURL)
candidate.Platform.Config = sanitizeMap(decodeObject(platformConfig))
candidate.Platform.RetryPolicy = decodeObject(platformRetry)
candidate.Platform.RateLimitPolicy = decodeObject(platformRateLimit)
candidate.PlatformModel.ModelType = decodeStringArray(modelType)
candidate.PlatformModel.CapabilityOverride = decodeObject(modelCapabilityOverride)
candidate.PlatformModel.Capabilities = decodeObject(modelCapabilities)
candidate.PlatformModel.BillingConfigOverride = decodeObject(modelBillingOverride)
candidate.PlatformModel.BillingConfig = decodeObject(modelBilling)
candidate.PlatformModel.PermissionConfig = decodeObject(modelPermission)
candidate.PlatformModel.RetryPolicy = decodeObject(modelRetry)
candidate.PlatformModel.RateLimitPolicy = decodeObject(modelRateLimit)
candidate.PlatformModel.RuntimePolicyOverride = decodeObject(modelRuntimeOverride)
candidate.RuntimePolicy = RuntimePolicy{
RateLimitPolicy: decodeObject(runtimeRateLimit),
RetryPolicy: decodeObject(runtimeRetry),
AutoDisablePolicy: decodeObject(runtimeAutoDisable),
DegradePolicy: decodeObject(runtimeDegrade),
}
if err := decodeJSON(pricingRules, &candidate.PricingRules); err != nil {
return Candidate{}, err
}
return candidate, nil
}
func importCandidate(ctx context.Context, tx pgx.Tx, candidate Candidate, configHash string) error {
var providerID string
err := tx.QueryRow(ctx, `
INSERT INTO model_catalog_providers (
provider_key, provider_code, display_name, provider_type, source,
capability_schema, default_rate_limit_policy, metadata, status
)
VALUES ($1, $2, $3, $4, 'acceptance-snapshot',
$5::jsonb, $6::jsonb, $7::jsonb, 'active')
ON CONFLICT (provider_key) DO UPDATE
SET provider_code = EXCLUDED.provider_code,
display_name = EXCLUDED.display_name,
provider_type = EXCLUDED.provider_type,
source = EXCLUDED.source,
capability_schema = EXCLUDED.capability_schema,
default_rate_limit_policy = EXCLUDED.default_rate_limit_policy,
metadata = EXCLUDED.metadata,
status = 'active',
updated_at = now()
RETURNING id::text`,
candidate.Provider.ProviderKey,
candidate.Provider.ProviderCode,
candidate.Provider.DisplayName,
candidate.Provider.ProviderType,
mustJSON(candidate.Provider.CapabilitySchema),
mustJSON(candidate.Provider.DefaultRateLimitPolicy),
mustJSON(map[string]any{"acceptanceSnapshot": true, "configHash": configHash}),
).Scan(&providerID)
if err != nil {
return err
}
runtimePolicyID, err := importRuntimePolicy(ctx, tx, candidate, configHash)
if err != nil {
return err
}
pricingRuleSetID, err := importPricingRules(ctx, tx, candidate, configHash)
if err != nil {
return err
}
var baseModelID string
err = tx.QueryRow(ctx, `
INSERT INTO base_model_catalog (
provider_id, provider_key, canonical_model_key, invocation_name,
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, pricing_version,
catalog_type, status, metadata
)
VALUES (
$1::uuid, $2, $3, $4, $5, $6::jsonb, $7, $8::jsonb,
$9::jsonb, $10::jsonb, NULLIF($11, '')::uuid,
NULLIF($12, '')::uuid, $13::jsonb, $14,
'custom', 'active', $15::jsonb
)
ON CONFLICT (canonical_model_key) DO UPDATE
SET provider_id = EXCLUDED.provider_id,
provider_key = EXCLUDED.provider_key,
invocation_name = EXCLUDED.invocation_name,
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,
pricing_rule_set_id = EXCLUDED.pricing_rule_set_id,
runtime_policy_set_id = EXCLUDED.runtime_policy_set_id,
runtime_policy_override = EXCLUDED.runtime_policy_override,
pricing_version = EXCLUDED.pricing_version,
metadata = EXCLUDED.metadata,
status = 'active',
updated_at = now()
RETURNING id::text`,
providerID,
candidate.Provider.ProviderKey,
candidate.BaseModel.CanonicalModelKey,
candidate.BaseModel.InvocationName,
candidate.BaseModel.ProviderModelName,
mustJSON(candidate.BaseModel.ModelType),
candidate.BaseModel.DisplayName,
mustJSON(candidate.BaseModel.Capabilities),
mustJSON(candidate.BaseModel.BaseBillingConfig),
mustJSON(candidate.BaseModel.DefaultRateLimitPolicy),
pricingRuleSetID,
runtimePolicyID,
mustJSON(candidate.BaseModel.RuntimePolicyOverride),
max(candidate.BaseModel.PricingVersion, 1),
mustJSON(map[string]any{"acceptanceSnapshot": true, "configHash": configHash}),
).Scan(&baseModelID)
if err != nil {
return err
}
var platformID string
platformConfig := sanitizeMap(candidate.Platform.Config)
platformConfig["testMode"] = false
platformConfig["acceptanceSnapshot"] = true
err = tx.QueryRow(ctx, `
INSERT INTO integration_platforms (
provider, platform_key, name, base_url, auth_type, credentials, config,
default_pricing_mode, default_discount_factor, pricing_rule_set_id,
retry_policy, rate_limit_policy, priority, status, disabled_reason,
cooldown_until, deleted_at
)
VALUES (
$1, $2, $3, 'https://acceptance.invalid' || $4, $5,
'{"apiKey":"local-acceptance-placeholder"}'::jsonb, $6::jsonb,
$7, $8::numeric, NULLIF($9, '')::uuid,
$10::jsonb, $11::jsonb, $12, 'enabled', NULL, NULL, NULL
)
ON CONFLICT (platform_key) DO UPDATE
SET provider = EXCLUDED.provider,
name = EXCLUDED.name,
base_url = EXCLUDED.base_url,
auth_type = EXCLUDED.auth_type,
credentials = EXCLUDED.credentials,
config = EXCLUDED.config,
default_pricing_mode = EXCLUDED.default_pricing_mode,
default_discount_factor = EXCLUDED.default_discount_factor,
pricing_rule_set_id = EXCLUDED.pricing_rule_set_id,
retry_policy = EXCLUDED.retry_policy,
rate_limit_policy = EXCLUDED.rate_limit_policy,
priority = EXCLUDED.priority,
status = 'enabled',
disabled_reason = NULL,
cooldown_until = NULL,
deleted_at = NULL,
updated_at = now()
RETURNING id::text`,
candidate.Platform.Provider,
candidate.Platform.PlatformKey,
candidate.Platform.Name,
candidate.Platform.BaseURLPath,
candidate.Platform.AuthType,
mustJSON(platformConfig),
candidate.Platform.DefaultPricingMode,
decimalOrDefault(candidate.Platform.DefaultDiscountFactor, "1"),
pricingRuleSetID,
mustJSON(candidate.Platform.RetryPolicy),
mustJSON(candidate.Platform.RateLimitPolicy),
candidate.Platform.Priority,
).Scan(&platformID)
if err != nil {
return err
}
_, err = tx.Exec(ctx, `
INSERT INTO platform_models (
platform_id, base_model_id, model_name, provider_model_name, model_alias,
model_type, display_name, capability_override, capabilities,
pricing_mode, discount_factor, pricing_rule_set_id,
billing_config_override, billing_config, permission_config,
retry_policy, rate_limit_policy, runtime_policy_set_id,
runtime_policy_override, enabled, cooldown_until
)
VALUES (
$1::uuid, $2::uuid, $3, $4, NULLIF($5, ''),
$6::jsonb, $7, $8::jsonb, $9::jsonb,
$10, NULLIF($11, '')::numeric, NULLIF($12, '')::uuid,
$13::jsonb, $14::jsonb, $15::jsonb,
$16::jsonb, $17::jsonb, NULLIF($18, '')::uuid,
$19::jsonb, true, NULL
)
ON CONFLICT (platform_id, model_name) DO UPDATE
SET base_model_id = EXCLUDED.base_model_id,
provider_model_name = EXCLUDED.provider_model_name,
model_alias = EXCLUDED.model_alias,
model_type = EXCLUDED.model_type,
display_name = EXCLUDED.display_name,
capability_override = EXCLUDED.capability_override,
capabilities = EXCLUDED.capabilities,
pricing_mode = EXCLUDED.pricing_mode,
discount_factor = EXCLUDED.discount_factor,
pricing_rule_set_id = EXCLUDED.pricing_rule_set_id,
billing_config_override = EXCLUDED.billing_config_override,
billing_config = EXCLUDED.billing_config,
permission_config = EXCLUDED.permission_config,
retry_policy = EXCLUDED.retry_policy,
rate_limit_policy = EXCLUDED.rate_limit_policy,
runtime_policy_set_id = EXCLUDED.runtime_policy_set_id,
runtime_policy_override = EXCLUDED.runtime_policy_override,
enabled = true,
cooldown_until = NULL,
updated_at = now()`,
platformID,
baseModelID,
candidate.PlatformModel.ModelName,
candidate.PlatformModel.ProviderModelName,
candidate.PlatformModel.ModelAlias,
mustJSON(candidate.PlatformModel.ModelType),
candidate.PlatformModel.DisplayName,
mustJSON(candidate.PlatformModel.CapabilityOverride),
mustJSON(candidate.PlatformModel.Capabilities),
candidate.PlatformModel.PricingMode,
decimalOrDefault(candidate.PlatformModel.DiscountFactor, ""),
pricingRuleSetID,
mustJSON(candidate.PlatformModel.BillingConfigOverride),
mustJSON(candidate.PlatformModel.BillingConfig),
mustJSON(candidate.PlatformModel.PermissionConfig),
mustJSON(candidate.PlatformModel.RetryPolicy),
mustJSON(candidate.PlatformModel.RateLimitPolicy),
runtimePolicyID,
mustJSON(candidate.PlatformModel.RuntimePolicyOverride),
)
return err
}
func importRuntimePolicy(ctx context.Context, tx pgx.Tx, candidate Candidate, configHash string) (string, error) {
key := "acceptance-" + strings.ReplaceAll(candidate.Workload, "_", "-") + "-runtime-v1"
var id string
err := tx.QueryRow(ctx, `
INSERT INTO model_runtime_policy_sets (
policy_key, name, description, rate_limit_policy, retry_policy,
auto_disable_policy, degrade_policy, metadata, status
)
VALUES ($1, $2, 'Imported from a secret-safe production acceptance snapshot',
$3::jsonb, $4::jsonb, $5::jsonb, $6::jsonb, $7::jsonb, 'active')
ON CONFLICT (policy_key) DO UPDATE
SET rate_limit_policy = EXCLUDED.rate_limit_policy,
retry_policy = EXCLUDED.retry_policy,
auto_disable_policy = EXCLUDED.auto_disable_policy,
degrade_policy = EXCLUDED.degrade_policy,
metadata = EXCLUDED.metadata,
status = 'active',
updated_at = now()
RETURNING id::text`,
key,
"Acceptance "+candidate.Workload+" runtime policy",
mustJSON(candidate.RuntimePolicy.RateLimitPolicy),
mustJSON(candidate.RuntimePolicy.RetryPolicy),
mustJSON(candidate.RuntimePolicy.AutoDisablePolicy),
mustJSON(candidate.RuntimePolicy.DegradePolicy),
mustJSON(map[string]any{"acceptanceSnapshot": true, "configHash": configHash}),
).Scan(&id)
return id, err
}
func importPricingRules(ctx context.Context, tx pgx.Tx, candidate Candidate, configHash string) (string, error) {
key := "acceptance-" + strings.ReplaceAll(candidate.Workload, "_", "-") + "-pricing-v1"
var id string
err := tx.QueryRow(ctx, `
INSERT INTO model_pricing_rule_sets (
rule_set_key, name, description, category, currency, status, metadata
)
VALUES ($1, $2, 'Imported from a secret-safe production acceptance snapshot',
'acceptance', 'resource', 'active', $3::jsonb)
ON CONFLICT (rule_set_key) DO UPDATE
SET name = EXCLUDED.name,
description = EXCLUDED.description,
status = 'active',
metadata = EXCLUDED.metadata,
updated_at = now()
RETURNING id::text`,
key,
"Acceptance "+candidate.Workload+" pricing",
mustJSON(map[string]any{"acceptanceSnapshot": true, "configHash": configHash}),
).Scan(&id)
if err != nil {
return "", err
}
if _, err := tx.Exec(ctx, `DELETE FROM model_pricing_rules WHERE rule_set_id = $1::uuid`, id); err != nil {
return "", err
}
for _, rule := range candidate.PricingRules {
_, err := tx.Exec(ctx, `
INSERT INTO model_pricing_rules (
rule_set_id, rule_key, display_name, scope_type, scope_id,
resource_type, unit, base_price, currency, base_weight, dynamic_weight,
calculator_type, dimension_schema, formula_config, priority, status, metadata
)
VALUES (
$1::uuid, $2, $3, 'rule_set', $1::uuid,
$4, $5, $6::numeric, $7, $8::jsonb, $9::jsonb,
$10, $11::jsonb, $12::jsonb, $13, 'active',
'{"acceptanceSnapshot":true}'::jsonb
)`,
id,
rule.RuleKey,
rule.DisplayName,
rule.ResourceType,
rule.Unit,
decimalOrDefault(rule.BasePrice, "0"),
rule.Currency,
mustJSON(rule.BaseWeight),
mustJSON(rule.DynamicWeight),
rule.CalculatorType,
mustJSON(rule.DimensionSchema),
mustJSON(rule.FormulaConfig),
rule.Priority,
)
if err != nil {
return "", err
}
}
return id, nil
}
func validateCandidate(candidate Candidate) error {
required := []string{
candidate.Provider.ProviderKey,
candidate.Provider.ProviderCode,
candidate.BaseModel.CanonicalModelKey,
candidate.BaseModel.InvocationName,
candidate.BaseModel.ProviderModelName,
candidate.Platform.Provider,
candidate.Platform.PlatformKey,
candidate.Platform.Name,
candidate.Platform.AuthType,
candidate.PlatformModel.ModelName,
candidate.PlatformModel.ProviderModelName,
}
for _, value := range required {
if strings.TrimSpace(value) == "" {
return errors.New("candidate contains an empty required identity field")
}
}
if len(candidate.BaseModel.ModelType) == 0 || len(candidate.PlatformModel.ModelType) == 0 {
return errors.New("candidate model type is empty")
}
if candidate.Workload == "gemini_image_edit" && !contains(candidate.PlatformModel.ModelType, "image_edit") {
return errors.New("Gemini candidate does not support image_edit")
}
if candidate.Workload == "multi_reference_video" {
if !contains(candidate.PlatformModel.ModelType, "omni_video") {
return errors.New("video candidate does not support omni_video")
}
maxImages := nestedInt(
candidate.PlatformModel.CapabilityOverride,
candidate.PlatformModel.Capabilities,
candidate.BaseModel.Capabilities,
"omni_video",
"max_images",
)
if maxImages < 9 {
return fmt.Errorf("video candidate max_images=%d, want at least 9", maxImages)
}
}
if candidate.Platform.BaseURLPath == "" || !strings.HasPrefix(candidate.Platform.BaseURLPath, "/") {
return errors.New("platform base URL path must be absolute")
}
if _, err := strconv.ParseFloat(decimalOrDefault(candidate.Platform.DefaultDiscountFactor, "1"), 64); err != nil {
return errors.New("platform discount factor is invalid")
}
return nil
}
func candidateConfigHash(candidates []Candidate) (string, error) {
payload, err := json.Marshal(candidates)
if err != nil {
return "", err
}
sum := sha256.Sum256(payload)
return hex.EncodeToString(sum[:]), nil
}
func snapshotHash(snapshot Snapshot) (string, error) {
snapshot.SnapshotSHA256 = ""
payload, err := json.Marshal(snapshot)
if err != nil {
return "", err
}
sum := sha256.Sum256(payload)
return hex.EncodeToString(sum[:]), nil
}
func safeBaseURLPath(value string) string {
parsed, err := url.Parse(strings.TrimSpace(value))
if err != nil || parsed.Path == "" {
return "/"
}
path := parsed.EscapedPath()
if path == "" {
path = "/"
}
return path
}
func sanitizeMap(input map[string]any) map[string]any {
value := sanitizeValue(input)
out, _ := value.(map[string]any)
if out == nil {
return map[string]any{}
}
return out
}
func sanitizeValue(value any) any {
switch typed := value.(type) {
case map[string]any:
out := make(map[string]any, len(typed))
for key, item := range typed {
if unsafeJSONKey(key) {
continue
}
out[key] = sanitizeValue(item)
}
return out
case []any:
out := make([]any, 0, len(typed))
for _, item := range typed {
out = append(out, sanitizeValue(item))
}
return out
default:
return value
}
}
func findUnsafeJSON(payload []byte) (string, bool) {
decoder := json.NewDecoder(bytes.NewReader(payload))
decoder.UseNumber()
var value any
if err := decoder.Decode(&value); err != nil {
return "$", true
}
var walk func(any, string) (string, bool)
walk = func(current any, path string) (string, bool) {
switch typed := current.(type) {
case map[string]any:
for key, item := range typed {
next := path + "." + key
if unsafeJSONKey(key) {
return next, true
}
if found, ok := walk(item, next); ok {
return found, true
}
}
case []any:
for index, item := range typed {
if found, ok := walk(item, fmt.Sprintf("%s[%d]", path, index)); ok {
return found, true
}
}
case string:
lower := strings.ToLower(strings.TrimSpace(typed))
if strings.HasPrefix(lower, "postgres://") ||
strings.HasPrefix(lower, "postgresql://") ||
strings.HasPrefix(lower, "mongodb://") ||
strings.HasPrefix(lower, "redis://") {
return path, true
}
if parsed, err := url.Parse(typed); err == nil && parsed.User != nil {
return path, true
}
}
return "", false
}
return walk(value, "$")
}
func unsafeJSONKey(key string) bool {
normalized := strings.ToLower(strings.NewReplacer("_", "", "-", "", ".", "").Replace(strings.TrimSpace(key)))
if normalized == "secretsafe" {
return false
}
for _, marker := range []string{
"credential", "password", "secret", "token", "authorization",
"apikey", "accesskey", "privatekey", "connectionstring",
"proxy",
} {
if strings.Contains(normalized, marker) {
return true
}
}
return false
}
func decodeObject(payload []byte) map[string]any {
var out map[string]any
if err := decodeJSON(payload, &out); err != nil || out == nil {
return map[string]any{}
}
return out
}
func decodeStringArray(payload []byte) []string {
var out []string
if err := decodeJSON(payload, &out); err != nil {
return nil
}
return out
}
func decodeJSON(payload []byte, target any) error {
if len(bytes.TrimSpace(payload)) == 0 {
payload = []byte("null")
}
decoder := json.NewDecoder(bytes.NewReader(payload))
decoder.UseNumber()
return decoder.Decode(target)
}
func mustJSON(value any) string {
payload, err := json.Marshal(value)
if err != nil {
panic(err)
}
return string(payload)
}
func decimalOrDefault(value string, fallback string) string {
value = strings.TrimSpace(value)
if value == "" {
return fallback
}
if _, err := strconv.ParseFloat(value, 64); err != nil {
return fallback
}
return value
}
func contains(items []string, expected string) bool {
for _, item := range items {
if item == expected {
return true
}
}
return false
}
func nestedInt(objects ...any) int {
if len(objects) < 2 {
return 0
}
path, ok := objects[len(objects)-2].(string)
if !ok {
return 0
}
key, ok := objects[len(objects)-1].(string)
if !ok {
return 0
}
for _, raw := range objects[:len(objects)-2] {
object, _ := raw.(map[string]any)
nested, _ := object[path].(map[string]any)
switch value := nested[key].(type) {
case json.Number:
number, _ := strconv.Atoi(value.String())
if number > 0 {
return number
}
case float64:
if value > 0 {
return int(value)
}
case int:
if value > 0 {
return value
}
case string:
number, _ := strconv.Atoi(value)
if number > 0 {
return number
}
}
}
return 0
}
const exportCandidateSQL = `
SELECT provider.provider_key,
provider.provider_code,
provider.display_name,
provider.provider_type,
provider.capability_schema,
provider.default_rate_limit_policy,
base_model.canonical_model_key,
base_model.invocation_name,
base_model.provider_model_name,
base_model.model_type,
base_model.display_name,
base_model.capabilities,
base_model.base_billing_config,
base_model.default_rate_limit_policy,
base_model.runtime_policy_override,
base_model.pricing_version,
platform.provider,
platform.platform_key,
platform.name,
COALESCE(platform.base_url, ''),
platform.auth_type,
platform.config,
platform.default_pricing_mode,
platform.default_discount_factor::text,
platform.retry_policy,
platform.rate_limit_policy,
platform.priority,
model.model_name,
COALESCE(NULLIF(model.provider_model_name, ''), model.model_name),
COALESCE(model.model_alias, ''),
model.model_type,
model.display_name,
model.capability_override,
model.capabilities,
model.pricing_mode,
COALESCE(model.discount_factor::text, ''),
model.billing_config_override,
model.billing_config,
model.permission_config,
model.retry_policy,
model.rate_limit_policy,
model.runtime_policy_override,
COALESCE(runtime_policy.rate_limit_policy, '{}'::jsonb),
COALESCE(runtime_policy.retry_policy, '{}'::jsonb),
COALESCE(runtime_policy.auto_disable_policy, '{}'::jsonb),
COALESCE(runtime_policy.degrade_policy, '{}'::jsonb),
COALESCE((
SELECT jsonb_agg(
jsonb_build_object(
'ruleKey', rule.rule_key,
'displayName', rule.display_name,
'resourceType', rule.resource_type,
'unit', rule.unit,
'basePrice', rule.base_price::text,
'currency', rule.currency,
'baseWeight', rule.base_weight,
'dynamicWeight', rule.dynamic_weight,
'calculatorType', rule.calculator_type,
'dimensionSchema', rule.dimension_schema,
'formulaConfig', rule.formula_config,
'priority', rule.priority
)
ORDER BY rule.priority, rule.rule_key
)
FROM model_pricing_rules rule
WHERE rule.rule_set_id = COALESCE(
model.pricing_rule_set_id,
platform.pricing_rule_set_id,
base_model.pricing_rule_set_id
)
AND rule.status = 'active'
), '[]'::jsonb),
platform.id::text,
model.id::text,
base_model.id::text
FROM platform_models model
JOIN integration_platforms platform ON platform.id = model.platform_id
JOIN base_model_catalog base_model ON base_model.id = model.base_model_id
JOIN model_catalog_providers provider ON provider.provider_key = base_model.provider_key
LEFT JOIN model_runtime_policy_sets runtime_policy
ON runtime_policy.id = COALESCE(model.runtime_policy_set_id, base_model.runtime_policy_set_id)
WHERE platform.status = 'enabled'
AND platform.deleted_at IS NULL
AND model.enabled = true
AND base_model.status = 'active'
AND (
(
$1 = 'gemini_image_edit'
AND lower(platform.provider) IN ('gemini', 'google-gemini', 'gemini-openai')
AND model.model_type @> '["image_edit"]'::jsonb
)
OR
(
$1 = 'multi_reference_video'
AND model.model_type @> '["omni_video"]'::jsonb
AND COALESCE(
NULLIF(model.capability_override #>> '{omni_video,max_images}', '')::int,
NULLIF(model.capabilities #>> '{omni_video,max_images}', '')::int,
NULLIF(base_model.capabilities #>> '{omni_video,max_images}', '')::int,
0
) >= 9
)
)
ORDER BY
CASE
WHEN $1 = 'gemini_image_edit' AND lower(base_model.invocation_name) = 'gemini-3.1-flash-image' THEN 0
WHEN $1 = 'gemini_image_edit'
AND lower(base_model.invocation_name) LIKE '%gemini%image%'
AND lower(base_model.invocation_name) NOT LIKE '%preview%' THEN 1
WHEN $1 = 'multi_reference_video'
AND lower(base_model.invocation_name) LIKE '%seedance%2%fast%' THEN 0
WHEN $1 = 'multi_reference_video'
AND lower(base_model.invocation_name) LIKE '%seedance%2%' THEN 1
ELSE 2
END,
platform.priority,
model.created_at
LIMIT 1`