Download database_schema.sql from taijichat/chat: direct link, hf CLI and curl.
- Browser
- Download file 2.95 kB
-
https://huggingface.co/spaces/taijichat/chat/resolve/main/database_schema.sql
- Command line
-
hf download hf://spaces/taijichat/chat/database_schema.sql
-
curl -L -o database_schema.sql https://huggingface.co/spaces/taijichat/chat/resolve/main/database_schema.sql
2.95 kB
| -- Supabase Database Schema for TaijiChat | |
| -- Execute this SQL in your Supabase project to create the required tables | |
| -- Users table | |
| -- Stores user information and token quota | |
| CREATE TABLE IF NOT EXISTS users ( | |
| id UUID PRIMARY KEY DEFAULT gen_random_uuid(), | |
| hf_user_id TEXT UNIQUE NOT NULL, | |
| hf_username TEXT NOT NULL, | |
| email TEXT, | |
| token_quota INTEGER DEFAULT 100000, | |
| tokens_used INTEGER DEFAULT 0, | |
| created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), | |
| last_login TIMESTAMP WITH TIME ZONE, | |
| is_active BOOLEAN DEFAULT TRUE | |
| ); | |
| -- Usage logs table | |
| -- Stores comprehensive logs of every query with token usage and errors | |
| CREATE TABLE IF NOT EXISTS usage_logs ( | |
| id UUID PRIMARY KEY DEFAULT gen_random_uuid(), | |
| user_id UUID REFERENCES users(id) ON DELETE SET NULL, | |
| hf_user_id TEXT NOT NULL, | |
| timestamp TIMESTAMP WITH TIME ZONE DEFAULT NOW(), | |
| query_text TEXT NOT NULL, | |
| prompt_tokens INTEGER DEFAULT 0, | |
| completion_tokens INTEGER DEFAULT 0, | |
| total_tokens INTEGER DEFAULT 0, | |
| model TEXT, | |
| response_text TEXT, | |
| error_message TEXT, | |
| conversation_history JSONB, | |
| is_image_response BOOLEAN DEFAULT FALSE, | |
| image_path TEXT | |
| ); | |
| -- Create indexes for performance | |
| CREATE INDEX IF NOT EXISTS idx_users_hf_id ON users(hf_user_id); | |
| CREATE INDEX IF NOT EXISTS idx_users_active ON users(is_active); | |
| CREATE INDEX IF NOT EXISTS idx_logs_user_id ON usage_logs(user_id); | |
| CREATE INDEX IF NOT EXISTS idx_logs_hf_user_id ON usage_logs(hf_user_id); | |
| CREATE INDEX IF NOT EXISTS idx_logs_timestamp ON usage_logs(timestamp DESC); | |
| CREATE INDEX IF NOT EXISTS idx_logs_error ON usage_logs(error_message) WHERE error_message IS NOT NULL; | |
| -- Create a view for user statistics | |
| CREATE OR REPLACE VIEW user_stats AS | |
| SELECT | |
| u.id, | |
| u.hf_user_id, | |
| u.hf_username, | |
| u.token_quota, | |
| u.tokens_used, | |
| u.token_quota - u.tokens_used AS tokens_remaining, | |
| ROUND(100.0 * u.tokens_used / NULLIF(u.token_quota, 0), 2) AS usage_percentage, | |
| COUNT(l.id) AS total_queries, | |
| COUNT(CASE WHEN l.error_message IS NOT NULL THEN 1 END) AS error_count, | |
| MAX(l.timestamp) AS last_query_time | |
| FROM users u | |
| LEFT JOIN usage_logs l ON u.id = l.user_id | |
| GROUP BY u.id, u.hf_user_id, u.hf_username, u.token_quota, u.tokens_used; | |
| -- Enable Row Level Security (RLS) - Optional, uncomment if needed | |
| -- ALTER TABLE users ENABLE ROW LEVEL SECURITY; | |
| -- ALTER TABLE usage_logs ENABLE ROW LEVEL SECURITY; | |
| -- Create policies for RLS (if needed) | |
| -- CREATE POLICY "Users can view own data" ON users FOR SELECT USING (hf_user_id = auth.jwt() ->> 'sub'); | |
| -- CREATE POLICY "Users can view own logs" ON usage_logs FOR SELECT USING (hf_user_id = auth.jwt() ->> 'sub'); | |
| COMMENT ON TABLE users IS 'Stores user authentication and token quota information'; | |
| COMMENT ON TABLE usage_logs IS 'Logs every query with token usage, response, and errors'; | |
| COMMENT ON VIEW user_stats IS 'Provides aggregated statistics for each user'; | |