TIF_E41253368/.github/copilot-instructions.md

4.8 KiB

GitHub Copilot Instructions — Prediksi Harga Cabai

Project

This repository is the FastAPI deployment backend for the D4 thesis: "Analisis Model Long Short-Term Memory dalam Sistem Prediksi Harga Cabai dengan Visualisasi Peta Digital Interaktif di Kabupaten Jember"

The API serves one-day-ahead LSTM predictions for cabai rawit at:

  • Pasar_Tanjung
  • Pasar_Kreongan
  • Pasar_Tegal_Besar
  • Pasar_Mangli
  • Pasar_Wirolegi

Environment

Use the existing Anaconda environment:

  • Conda: tf_gpu39
  • Python: 3.9.23
  • Interpreter: C:\Users\alfia\anaconda3\envs\tf_gpu39\python.exe

Do not create another Conda environment unless explicitly requested.

ML artifacts

The models are already trained and deployed. Do NOT retrain them in the API.

Each market has:

  • model.h5
  • scaler.pkl
  • config.json

Final deployment configuration:

  • neurons: 64
  • activation: tanh
  • learning_rate: 0.05
  • batch_size: 32
  • epochs: 50
  • optimizer: Adam
  • time_step: 7
  • seed: 42
  • shuffle: true

These values are reference metadata. Do not hard-code predictions.

Inference rules

For each request:

  1. Accept exactly 7 recent prices.
  2. Convert to numeric shape (7, 1).
  3. Use the saved market-specific scaler.
  4. Transform the 7 values.
  5. Reshape to (1, 7, 1).
  6. Run the saved .h5 model once.
  7. Inverse-transform the output.
  8. Return the predicted next price.

The model unit is thousand rupiah:

  • 22.0 means approximately Rp22,000.

Do not fit a new scaler on request data.

Model loading

Load all five model/scaler/config artifacts once during FastAPI startup/lifespan and keep them in memory.

Do NOT:

  • load models on every request
  • call model.fit()
  • retrain on startup
  • recreate a different LSTM architecture when the saved model can be loaded directly

For inference, loading Keras .h5 with compile=False is preferred.

Suggested project structure

C:\PrediksiHargaCabe
├── api/ │ ├── main.py │ ├── requirements.txt │ └── models/ │ └── rawit/ │ ├── pasar_tanjung/ │ │ ├── model.h5 │ │ ├── scaler.pkl │ │ └── config.json │ ├── pasar_kreongan/ │ ├── pasar_tegal_besar/ │ ├── pasar_mangli/ │ └── pasar_wirolegi/ ├── website/ └── .github/ └── copilot-instructions.md

Inspect the workspace first and reuse existing files instead of creating duplicates.

Required API

Implement at least:

GET / Basic status response.

GET /api/markets Return Rawit and the five supported markets.

GET /api/health Report API status and whether all five model artifacts loaded successfully.

POST /api/prediction/rawit/{market} Request example: { "prices": [18, 16, 19, 19, 22, 22, 22] }

Response should include:

  • chili
  • market
  • time_step
  • input_prices
  • predicted_price_thousand
  • predicted_price_rupiah

Use Pydantic validation.

Reject:

  • unknown markets
  • fewer/more than 7 prices
  • non-numeric values
  • NaN/infinite values
  • negative prices

CORS

Prepare CORS so a React/React Native frontend can call the API during development. Keep allowed origins configurable and avoid recommending unrestricted wildcard CORS for production.

Testing

Before declaring the API complete:

  1. Start from the api directory with: python -m uvicorn main:app --reload
  2. Verify /.
  3. Verify /api/markets.
  4. Verify /api/health.
  5. Verify /docs.
  6. Test prediction for all five markets.
  7. Compare at least one known API prediction with the validated notebook inference, allowing normal floating-point differences.

Thesis safety

Do not silently:

  • change hyperparameters
  • change time_step
  • change the scaler method
  • retrain models
  • introduce another ML model
  • modify the validated ML methodology

Never call the final configuration a "global optimum". Use wording such as: "konfigurasi terbaik yang diperoleh dari skema eksperimen yang diterapkan pada dataset penelitian."

Agent workflow

Before editing:

  1. Inspect the workspace.
  2. Inspect existing files and model paths.
  3. Reuse correct code.
  4. Avoid duplicate entry points or model directories.

When editing:

  1. Make small coherent changes.
  2. Preserve validated ML inference logic.
  3. Use clear Python/FastAPI structure.
  4. Run a practical validation after each important change.
  5. If a command fails, inspect and fix the actual error; do not fake success.

The immediate priority is Rawit only:

  1. Build the FastAPI backend.
  2. Load the five saved artifacts.
  3. Verify startup.
  4. Implement /api/markets, /api/health, and /api/prediction/rawit/{market}.
  5. Test the API.
  6. Prepare it for connection to the thesis frontend.

Communication preference: Explain important decisions briefly in Indonesian, give exact commands, state which files are changed, and avoid unrelated technologies.