Spaces:
Running
Running
File size: 8,063 Bytes
78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 ba9d716 78e29c5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 |
-- ============================================
-- K-AI API Gateway - Complete Supabase SQL Setup
-- ============================================
-- This script handles both creating tables with kaiapi_ prefix
-- and migrating data from old tables (if they exist)
-- ============================================
-- STEP 1: Rename existing tables to add kaiapi_ prefix
-- ============================================
-- Rename api_keys table if it exists
DO $$
BEGIN
IF EXISTS (SELECT FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name = 'api_keys') THEN
ALTER TABLE api_keys RENAME TO kaiapi_api_keys;
RAISE NOTICE 'Renamed api_keys to kaiapi_api_keys';
END IF;
END $$;
-- Rename model_stats table if it exists
DO $$
BEGIN
IF EXISTS (SELECT FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name = 'model_stats') THEN
ALTER TABLE model_stats RENAME TO kaiapi_model_stats;
RAISE NOTICE 'Renamed model_stats to kaiapi_model_stats';
END IF;
END $$;
-- Rename provider_sessions table if it exists
DO $$
BEGIN
IF EXISTS (SELECT FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name = 'provider_sessions') THEN
ALTER TABLE provider_sessions RENAME TO kaiapi_provider_sessions;
RAISE NOTICE 'Renamed provider_sessions to kaiapi_provider_sessions';
END IF;
END $$;
-- Rename provider_states table if it exists (for consistency)
DO $$
BEGIN
IF EXISTS (SELECT FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name = 'provider_states') THEN
ALTER TABLE provider_states RENAME TO kaiapi_provider_states;
RAISE NOTICE 'Renamed provider_states to kaiapi_provider_states';
END IF;
END $$;
-- ============================================
-- STEP 2: Create kaiapi_api_keys table (if not exists)
-- ============================================
CREATE TABLE IF NOT EXISTS kaiapi_api_keys (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
token VARCHAR(255) UNIQUE NOT NULL,
usage_tokens INTEGER NOT NULL DEFAULT 0,
limit_tokens INTEGER NOT NULL DEFAULT 1000000,
is_active BOOLEAN NOT NULL DEFAULT true,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_kaiapi_api_keys_token ON kaiapi_api_keys(token);
CREATE INDEX IF NOT EXISTS idx_kaiapi_api_keys_is_active ON kaiapi_api_keys(is_active);
-- ============================================
-- STEP 3: Create kaiapi_model_stats table (if not exists)
-- ============================================
CREATE TABLE IF NOT EXISTS kaiapi_model_stats (
id VARCHAR(255) PRIMARY KEY,
success INTEGER NOT NULL DEFAULT 0,
failure INTEGER NOT NULL DEFAULT 0,
consecutive_failures INTEGER NOT NULL DEFAULT 0,
avg_time_ms FLOAT NOT NULL DEFAULT 0,
total_time_ms FLOAT NOT NULL DEFAULT 0,
count_samples INTEGER NOT NULL DEFAULT 0,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_kaiapi_model_stats_id ON kaiapi_model_stats(id);
-- ============================================
-- STEP 4: Create kaiapi_provider_sessions table (if not exists)
-- ============================================
CREATE TABLE IF NOT EXISTS kaiapi_provider_sessions (
id SERIAL PRIMARY KEY,
provider VARCHAR(50) UNIQUE NOT NULL,
cookies JSONB,
session_data JSONB,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_kaiapi_provider_sessions_provider ON kaiapi_provider_sessions(provider);
-- ============================================
-- STEP 5: Create kaiapi_provider_states table (NEW - for toggle management)
-- ============================================
CREATE TABLE IF NOT EXISTS kaiapi_provider_states (
id SERIAL PRIMARY KEY,
provider_id VARCHAR(50) UNIQUE NOT NULL,
name VARCHAR(100) NOT NULL,
type VARCHAR(20) NOT NULL DEFAULT 'api',
enabled BOOLEAN NOT NULL DEFAULT true,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_kaiapi_provider_states_provider_id ON kaiapi_provider_states(provider_id);
CREATE INDEX IF NOT EXISTS idx_kaiapi_provider_states_enabled ON kaiapi_provider_states(enabled);
-- Insert default providers (if table is empty)
INSERT INTO kaiapi_provider_states (provider_id, name, type, enabled) VALUES
('g4f', 'G4F (Free GPT-4)', 'api', true),
('zai', 'Z.ai (GLM-5)', 'api', true),
('gemini', 'Google Gemini', 'api', true),
('pollinations', 'Pollinations', 'api', true),
('huggingchat', 'HuggingChat', 'browser', true),
('copilot', 'Microsoft Copilot', 'browser', false),
('chatgpt', 'ChatGPT', 'browser', false)
ON CONFLICT (provider_id) DO NOTHING;
-- ============================================
-- STEP 6: Create helper functions and triggers
-- ============================================
-- Create updated_at trigger function
CREATE OR REPLACE FUNCTION update_updated_at_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = NOW();
RETURN NEW;
END;
$$ language 'plpgsql';
-- Create triggers for all tables
DROP TRIGGER IF EXISTS update_kaiapi_api_keys_updated_at ON kaiapi_api_keys;
CREATE TRIGGER update_kaiapi_api_keys_updated_at
BEFORE UPDATE ON kaiapi_api_keys
FOR EACH ROW
EXECUTE FUNCTION update_updated_at_column();
DROP TRIGGER IF EXISTS update_kaiapi_model_stats_updated_at ON kaiapi_model_stats;
CREATE TRIGGER update_kaiapi_model_stats_updated_at
BEFORE UPDATE ON kaiapi_model_stats
FOR EACH ROW
EXECUTE FUNCTION update_updated_at_column();
DROP TRIGGER IF EXISTS update_kaiapi_provider_sessions_updated_at ON kaiapi_provider_sessions;
CREATE TRIGGER update_kaiapi_provider_sessions_updated_at
BEFORE UPDATE ON kaiapi_provider_sessions
FOR EACH ROW
EXECUTE FUNCTION update_updated_at_column();
DROP TRIGGER IF EXISTS update_kaiapi_provider_states_updated_at ON kaiapi_provider_states;
CREATE TRIGGER update_kaiapi_provider_states_updated_at
BEFORE UPDATE ON kaiapi_provider_states
FOR EACH ROW
EXECUTE FUNCTION update_updated_at_column();
-- ============================================
-- STEP 7: Enable Row Level Security (Optional)
-- ============================================
-- Uncomment the following lines if you want to enable RLS
-- ALTER TABLE kaiapi_api_keys ENABLE ROW LEVEL SECURITY;
-- ALTER TABLE kaiapi_model_stats ENABLE ROW LEVEL SECURITY;
-- ALTER TABLE kaiapi_provider_sessions ENABLE ROW LEVEL SECURITY;
-- ALTER TABLE kaiapi_provider_states ENABLE ROW LEVEL SECURITY;
-- Create policy to allow all operations (adjust as needed)
-- CREATE POLICY "Allow all operations on kaiapi_api_keys"
-- ON kaiapi_api_keys
-- FOR ALL
-- TO anon, authenticated
-- USING (true)
-- WITH CHECK (true);
-- CREATE POLICY "Allow all operations on kaiapi_model_stats"
-- ON kaiapi_model_stats
-- FOR ALL
-- TO anon, authenticated
-- USING (true)
-- WITH CHECK (true);
-- CREATE POLICY "Allow all operations on kaiapi_provider_sessions"
-- ON kaiapi_provider_sessions
-- FOR ALL
-- TO anon, authenticated
-- USING (true)
-- WITH CHECK (true);
-- CREATE POLICY "Allow all operations on kaiapi_provider_states"
-- ON kaiapi_provider_states
-- FOR ALL
-- TO anon, authenticated
-- USING (true)
-- WITH CHECK (true);
-- ============================================
-- VERIFICATION: Check all created tables
-- ============================================
SELECT 'Tables created successfully:' as message;
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name LIKE 'kaiapi_%'
ORDER BY table_name;
|