feat: implement AI gateway phase one runtime
This commit is contained in:
@@ -3,8 +3,11 @@ CREATE EXTENSION IF NOT EXISTS pgcrypto;
|
||||
CREATE TABLE IF NOT EXISTS model_catalog_providers (
|
||||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
provider_key text NOT NULL UNIQUE,
|
||||
provider_code text NOT NULL,
|
||||
display_name text NOT NULL,
|
||||
provider_type text NOT NULL DEFAULT 'openai_compatible',
|
||||
provider_type text NOT NULL DEFAULT 'openai',
|
||||
icon_path text,
|
||||
source text NOT NULL DEFAULT 'gateway',
|
||||
capability_schema jsonb NOT NULL DEFAULT '{}'::jsonb,
|
||||
default_rate_limit_policy jsonb NOT NULL DEFAULT '{}'::jsonb,
|
||||
status text NOT NULL DEFAULT 'active',
|
||||
@@ -45,6 +48,7 @@ CREATE TABLE IF NOT EXISTS integration_platforms (
|
||||
tenant_key text,
|
||||
default_pricing_mode text NOT NULL DEFAULT 'inherit_discount',
|
||||
default_discount_factor numeric NOT NULL DEFAULT 1,
|
||||
pricing_rule_set_id uuid,
|
||||
retry_policy jsonb NOT NULL DEFAULT '{}'::jsonb,
|
||||
rate_limit_policy jsonb NOT NULL DEFAULT '{}'::jsonb,
|
||||
priority integer NOT NULL DEFAULT 100,
|
||||
@@ -64,6 +68,7 @@ ALTER TABLE IF EXISTS integration_platforms
|
||||
ADD COLUMN IF NOT EXISTS tenant_key text,
|
||||
ADD COLUMN IF NOT EXISTS default_pricing_mode text NOT NULL DEFAULT 'inherit_discount',
|
||||
ADD COLUMN IF NOT EXISTS default_discount_factor numeric NOT NULL DEFAULT 1,
|
||||
ADD COLUMN IF NOT EXISTS pricing_rule_set_id uuid,
|
||||
ADD COLUMN IF NOT EXISTS retry_policy jsonb NOT NULL DEFAULT '{}'::jsonb,
|
||||
ADD COLUMN IF NOT EXISTS rate_limit_policy jsonb NOT NULL DEFAULT '{}'::jsonb,
|
||||
ADD COLUMN IF NOT EXISTS dynamic_priority integer,
|
||||
@@ -79,8 +84,24 @@ ALTER TABLE IF EXISTS integration_platforms
|
||||
ALTER COLUMN platform_key SET DEFAULT ('platform_' || replace(gen_random_uuid()::text, '-', '')),
|
||||
ALTER COLUMN platform_key SET NOT NULL;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS model_pricing_rule_sets (
|
||||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
rule_set_key text NOT NULL UNIQUE,
|
||||
name text NOT NULL,
|
||||
description text,
|
||||
category text NOT NULL DEFAULT 'general',
|
||||
currency text NOT NULL DEFAULT 'resource',
|
||||
status text NOT NULL DEFAULT 'active',
|
||||
metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
||||
created_at timestamptz NOT NULL DEFAULT now(),
|
||||
updated_at timestamptz NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS model_pricing_rules (
|
||||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
rule_set_id uuid REFERENCES model_pricing_rule_sets(id) ON DELETE CASCADE,
|
||||
rule_key text NOT NULL DEFAULT ('rule_' || replace(gen_random_uuid()::text, '-', '')),
|
||||
display_name text NOT NULL DEFAULT '',
|
||||
scope_type text NOT NULL,
|
||||
scope_id uuid,
|
||||
resource_type text NOT NULL,
|
||||
@@ -89,12 +110,29 @@ CREATE TABLE IF NOT EXISTS model_pricing_rules (
|
||||
currency text NOT NULL DEFAULT 'resource',
|
||||
base_weight jsonb NOT NULL DEFAULT '{}'::jsonb,
|
||||
dynamic_weight jsonb NOT NULL DEFAULT '{}'::jsonb,
|
||||
calculator_type text NOT NULL DEFAULT 'unit_weight',
|
||||
dimension_schema jsonb NOT NULL DEFAULT '{}'::jsonb,
|
||||
formula_config jsonb NOT NULL DEFAULT '{}'::jsonb,
|
||||
priority integer NOT NULL DEFAULT 100,
|
||||
status text NOT NULL DEFAULT 'active',
|
||||
metadata jsonb NOT NULL DEFAULT '{}'::jsonb,
|
||||
effective_from timestamptz,
|
||||
effective_to timestamptz,
|
||||
created_at timestamptz NOT NULL DEFAULT now(),
|
||||
updated_at timestamptz NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
ALTER TABLE IF EXISTS model_pricing_rules
|
||||
ADD COLUMN IF NOT EXISTS rule_set_id uuid REFERENCES model_pricing_rule_sets(id) ON DELETE CASCADE,
|
||||
ADD COLUMN IF NOT EXISTS rule_key text NOT NULL DEFAULT ('rule_' || replace(gen_random_uuid()::text, '-', '')),
|
||||
ADD COLUMN IF NOT EXISTS display_name text NOT NULL DEFAULT '',
|
||||
ADD COLUMN IF NOT EXISTS calculator_type text NOT NULL DEFAULT 'unit_weight',
|
||||
ADD COLUMN IF NOT EXISTS dimension_schema jsonb NOT NULL DEFAULT '{}'::jsonb,
|
||||
ADD COLUMN IF NOT EXISTS formula_config jsonb NOT NULL DEFAULT '{}'::jsonb,
|
||||
ADD COLUMN IF NOT EXISTS priority integer NOT NULL DEFAULT 100,
|
||||
ADD COLUMN IF NOT EXISTS status text NOT NULL DEFAULT 'active',
|
||||
ADD COLUMN IF NOT EXISTS metadata jsonb NOT NULL DEFAULT '{}'::jsonb;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS gateway_user_groups (
|
||||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
group_key text NOT NULL UNIQUE,
|
||||
@@ -290,6 +328,7 @@ CREATE TABLE IF NOT EXISTS platform_models (
|
||||
capabilities jsonb NOT NULL DEFAULT '{}'::jsonb,
|
||||
pricing_mode text NOT NULL DEFAULT 'inherit_discount',
|
||||
discount_factor numeric,
|
||||
pricing_rule_set_id uuid REFERENCES model_pricing_rule_sets(id) ON DELETE SET NULL,
|
||||
billing_config_override jsonb NOT NULL DEFAULT '{}'::jsonb,
|
||||
billing_config jsonb NOT NULL DEFAULT '{}'::jsonb,
|
||||
permission_config jsonb NOT NULL DEFAULT '{}'::jsonb,
|
||||
@@ -307,6 +346,7 @@ ALTER TABLE IF EXISTS platform_models
|
||||
ADD COLUMN IF NOT EXISTS capability_override jsonb NOT NULL DEFAULT '{}'::jsonb,
|
||||
ADD COLUMN IF NOT EXISTS pricing_mode text NOT NULL DEFAULT 'inherit_discount',
|
||||
ADD COLUMN IF NOT EXISTS discount_factor numeric,
|
||||
ADD COLUMN IF NOT EXISTS pricing_rule_set_id uuid REFERENCES model_pricing_rule_sets(id) ON DELETE SET NULL,
|
||||
ADD COLUMN IF NOT EXISTS billing_config_override jsonb NOT NULL DEFAULT '{}'::jsonb,
|
||||
ADD COLUMN IF NOT EXISTS permission_config jsonb NOT NULL DEFAULT '{}'::jsonb,
|
||||
ADD COLUMN IF NOT EXISTS retry_policy jsonb NOT NULL DEFAULT '{}'::jsonb,
|
||||
@@ -553,6 +593,11 @@ CREATE INDEX IF NOT EXISTS idx_integration_platforms_tenant_scope
|
||||
ON integration_platforms(visibility_scope, tenant_id, tenant_key, status);
|
||||
CREATE INDEX IF NOT EXISTS idx_model_pricing_scope
|
||||
ON model_pricing_rules(scope_type, scope_id, resource_type);
|
||||
CREATE INDEX IF NOT EXISTS idx_model_pricing_rule_set
|
||||
ON model_pricing_rules(rule_set_id, resource_type, priority);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS idx_model_pricing_rule_set_key
|
||||
ON model_pricing_rules(rule_set_id, rule_key)
|
||||
WHERE rule_set_id IS NOT NULL;
|
||||
CREATE INDEX IF NOT EXISTS idx_model_pricing_effective
|
||||
ON model_pricing_rules(effective_from, effective_to);
|
||||
CREATE INDEX IF NOT EXISTS idx_gateway_user_groups_status_priority
|
||||
|
||||
Reference in New Issue
Block a user