π Setup Koneksi Supabase untuk Python API
Python API sekarang bisa menyimpan hasil prediksi langsung ke Supabase database.
π Yang Dibutuhkan
Anda perlu 2 environment variables:
SUPABASE_URL- URL project Supabase AndaSUPABASE_ANON_KEY- Anonymous key dari Supabase
π Cara Mendapatkan Credentials
Dari File .env Project
Credentials sudah ada di file .env project Anda:
SUPABASE_URL=https://xyddxrfiacdcnipdclas.supabase.co
SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Atau dari Supabase Dashboard
- Login ke https://supabase.com
- Pilih project Anda
- Sidebar β Settings β API
- Copy:
- Project URL β
SUPABASE_URL - anon public key β
SUPABASE_ANON_KEY
- Project URL β
π Setup per Platform Deployment
Hugging Face Spaces
Via Web Interface:
- Buka Space Settings
- Tab "Variables and secrets"
- Klik "New secret"
- Tambahkan 2 secrets:
Name: SUPABASE_URL Value: https://xyddxrfiacdcnipdclas.supabase.co Name: SUPABASE_ANON_KEY Value: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...Restart Space untuk apply changes
Railway
# Set secrets via CLI
railway variables set SUPABASE_URL=https://xyddxrfiacdcnipdclas.supabase.co
railway variables set SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
# Atau via Dashboard:
# Project β Variables β Add Variable
Google Cloud Run
gcloud run services update palm-classifier \
--set-env-vars SUPABASE_URL=https://xyddxrfiacdcnipdclas.supabase.co,SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Local Testing
Buat file .env di folder python-api/:
PORT=5000
SUPABASE_URL=https://xyddxrfiacdcnipdclas.supabase.co
SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Lalu jalankan dengan:
cd python-api
pip install python-dotenv
python -c "from dotenv import load_dotenv; load_dotenv(); import app"
# Atau install dan gunakan python-dotenv di app.py
β Verifikasi Setup
1. Check Logs saat Startup
Setelah deploy/restart, cek logs. Anda harus melihat:
β Supabase client initialized
β SVM model loaded successfully
β Metadata loaded: ['3 Bulan', '6 Bulan', '9 Bulan']
Jika TIDAK melihat "β Supabase client initialized", berarti credentials belum diset dengan benar.
2. Test API Endpoint
# Health check
curl https://your-api-url.com/health
# Response harus include supabase status
{
"status": "healthy",
"model_loaded": true,
"device": "cpu",
"classes": ["3 Bulan", "6 Bulan", "9 Bulan"]
}
3. Test Classification & Save
# Classify image (dengan base64 image)
curl -X POST https://your-api-url.com/classify \
-H "Content-Type: application/json" \
-d '{"image": "data:image/jpeg;base64,..."}'
# Response harus include:
{
"predicted_class": "6 Bulan",
"confidence": 0.8543,
"probabilities": {...},
"mode": "real",
"saved_to_db": true, β Ini yang penting!
"id": "uuid-here" β ID dari database
}
Jika saved_to_db: false, berarti ada masalah dengan koneksi Supabase.
4. Check Database
- Login Supabase Dashboard
- Table Editor β predictions
- Anda harus melihat record baru setiap kali classify
π Data yang Disimpan
Setiap prediction menyimpan:
{
"id": "uuid",
"predicted_class": "6 Bulan",
"confidence": 0.8543,
"probabilities": {
"3 Bulan": 0.0812,
"6 Bulan": 0.8543,
"9 Bulan": 0.0645
},
"mode": "real",
"image_data": "data:image/...", // First 1000 chars
"created_at": "2024-01-01T12:00:00Z"
}
β οΈ Troubleshooting
"Supabase credentials not found"
Problem: Environment variables tidak diset
Solution:
- Cek apakah sudah set
SUPABASE_URLdanSUPABASE_ANON_KEY - Restart service setelah set env vars
- Verifikasi nilai env vars tidak ada typo
"Failed to initialize Supabase"
Problem: Credentials salah atau URL tidak valid
Solution:
- Double check URL dan key dari Supabase Dashboard
- Pastikan URL format:
https://xxx.supabase.co - Pastikan key adalah anon key (public), bukan service role key
"saved_to_db: false"
Problem: API tidak bisa save ke database
Solution:
- Cek RLS policies di table
predictions - Pastikan anon role punya permission INSERT
- Cek logs untuk error message detail
RLS Policy Error
Jika ada error "new row violates row-level security policy":
-- Tambahkan policy di Supabase SQL Editor:
CREATE POLICY "Allow anon insert"
ON predictions
FOR INSERT
TO anon
WITH CHECK (true);
π Security Notes
- NEVER commit credentials ke git (sudah di .gitignore)
- Use environment variables untuk semua secrets
- Anon key is safe untuk public API karena dilindungi RLS
- Monitor usage via Supabase Dashboard
π‘ Optional: Disable Database Saving
Jika Anda tidak ingin save ke database, cukup jangan set environment variables.
API akan tetap berjalan normal, tapi tidak save predictions ke database.
Response akan include: "saved_to_db": false