seedling-classifier / python-api /SUPABASE_SETUP.md
hanya70999's picture
Upload 13 files
72b9a21 verified

πŸ”— Setup Koneksi Supabase untuk Python API

Python API sekarang bisa menyimpan hasil prediksi langsung ke Supabase database.

πŸ“‹ Yang Dibutuhkan

Anda perlu 2 environment variables:

  1. SUPABASE_URL - URL project Supabase Anda
  2. SUPABASE_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

  1. Login ke https://supabase.com
  2. Pilih project Anda
  3. Sidebar β†’ Settings β†’ API
  4. Copy:
    • Project URL β†’ SUPABASE_URL
    • anon public key β†’ SUPABASE_ANON_KEY

πŸš€ Setup per Platform Deployment

Hugging Face Spaces

  1. 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...
    
  2. 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

  1. Login Supabase Dashboard
  2. Table Editor β†’ predictions
  3. 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_URL dan SUPABASE_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

  1. NEVER commit credentials ke git (sudah di .gitignore)
  2. Use environment variables untuk semua secrets
  3. Anon key is safe untuk public API karena dilindungi RLS
  4. 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

πŸ“š Reference