# ============================================================================ # Script 3: Run API Server # ============================================================================ # ------------------------------------------------------------------------- # 🟢 PENYESUAIAN HUGGING FACE: Penarikan Model & File Pendukung # ------------------------------------------------------------------------- library(plumber) if (!dir.exists("models")) { dir.create("models") } # Fungsi pembantu agar tidak menulis kode download berulang-ulang download_from_hf <- function(file_name) { hf_url <- paste0("https://huggingface.co/aephidayatuloh/mpg_highway_model/resolve/main/", file_name) local_path <- paste0("models/", file_name) if (!file.exists(local_path)) { message(paste("--- Menarik", file_name, "dari Hugging Face... ---")) tryCatch({ download.file(hf_url, local_path, mode = "wb") }, error = function(e) { message(paste("⚠️ Gagal mengunduh", file_name, ":", e$message)) }) } } # Tarik semua file yang dibutuhkan API dan Dashboard Anda download_from_hf("mpg_highway_model.rds") download_from_hf("train_statistics.rds") download_from_hf("train_data.rds") # Jika Anda punya file metadata, buka tanda pagar di bawah ini: # download_from_hf("model_metadata.rds") source("02_api_plumber.R") # Deteksi Port Dinamis (Kritis untuk Hugging Face Spaces!) # Jika variabel PORT kosong (saat dijalankan di laptop lokal), otomatis pakai 8000. port <- as.numeric(Sys.getenv("PORT", 8000)) # Run server cat("🚀 Starting API server...\n") cat(paste0("📊 API documentation available at /__docs__/\n")) cat("💚 Prediction endpoint: /predict_custom\n") cat("💚 Health check: /ping\n") cat("🔍 Metadata info: /metadata\n") api %>% pr_run( host = "0.0.0.0", port = port, docs = TRUE )