BEGIN; CREATE TABLE content_model_config ( id uuid PRIMARY KEY DEFAULT gen_random_uuid(), public_id uuid NOT NULL UNIQUE DEFAULT gen_random_uuid(), tenant_id uuid NOT NULL REFERENCES tenant(id), display_name varchar(120) NOT NULL CHECK (length(trim(display_name)) BETWEEN 1 AND 120), provider varchar(32) NOT NULL CHECK (provider IN ('ark','openai_compatible')), base_url varchar(500) NOT NULL CHECK (length(trim(base_url)) BETWEEN 8 AND 500), model_id varchar(200) NOT NULL CHECK (length(trim(model_id)) BETWEEN 1 AND 200), encrypted_api_key bytea NOT NULL, nonce bytea NOT NULL, key_version bigint NOT NULL DEFAULT 1 CHECK (key_version > 0), credential_hint varchar(16) NOT NULL, temperature numeric(3,2) NOT NULL DEFAULT 0.20 CHECK (temperature >= 0 AND temperature <= 2), max_tokens integer NOT NULL DEFAULT 1200 CHECK (max_tokens BETWEEN 256 AND 8192), status varchar(16) NOT NULL DEFAULT 'inactive' CHECK (status IN ('inactive','active','revoked')), test_status varchar(16) NOT NULL DEFAULT 'untested' CHECK (test_status IN ('untested','passed','failed')), last_tested_at timestamptz, last_error_code varchar(80), activated_at timestamptz, created_by uuid NOT NULL, updated_by uuid NOT NULL, version bigint NOT NULL DEFAULT 1 CHECK (version > 0), created_at timestamptz NOT NULL DEFAULT now(), updated_at timestamptz NOT NULL DEFAULT now(), CONSTRAINT content_model_creator_tenant_fk FOREIGN KEY (created_by,tenant_id) REFERENCES user_account(id,tenant_id), CONSTRAINT content_model_updater_tenant_fk FOREIGN KEY (updated_by,tenant_id) REFERENCES user_account(id,tenant_id), CONSTRAINT content_model_identity_unique UNIQUE (tenant_id,provider,base_url,model_id) ); CREATE UNIQUE INDEX content_model_one_active_per_tenant ON content_model_config(tenant_id) WHERE status='active'; CREATE INDEX content_model_list_idx ON content_model_config(tenant_id,status,updated_at DESC); COMMIT;