Spaces:
Sleeping
Sleeping
File size: 3,212 Bytes
b26c0e7 151dd65 27b1242 30234c6 bbbb9f6 30234c6 bbbb9f6 fb6d199 30234c6 bbbb9f6 30234c6 bbbb9f6 30234c6 bbbb9f6 513792d c9544f5 bbbb9f6 30234c6 c9544f5 bbbb9f6 30234c6 bbbb9f6 9f14943 151dd65 fb6d199 151dd65 9f14943 bbbb9f6 9f14943 bbbb9f6 9f14943 bbbb9f6 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | import gradio as gr
import numpy as np
import tensorflow as tf
import joblib
import os
from huggingface_hub import InferenceClient
# === Load model & scaler ===
lstm_model = tf.keras.models.load_model('retrained_lstm_model.h5', compile=False)
lstm_model.compile(optimizer='adam', loss='mse', metrics=['mae'])
scaler_X = joblib.load('scaler_X.joblib')
scaler_y = joblib.load('scaler_y.joblib')
window_size = 7
# === Setup Inference Client for Gemma 2-27B ===
api_key = os.environ.get("hf_") # Pastikan HF_TOKEN diset di Secrets
client = InferenceClient(
provider="nebius",
api_key=api_key
)
def interpret_rainfall_with_gemma2(tavg, rh_avg, rainfall_mm):
prompt = f"""
Data cuaca:
- Temperatur Rata-rata: {tavg}°C
- Kelembaban Rata-rata: {rh_avg}%
- Prediksi Curah Hujan: {rainfall_mm:.2f} mm
Berikan analisis cuaca berdasarkan data di atas. Apakah hujan tergolong ringan, sedang, atau lebat?
Apa rekomendasi aktivitas harian, terutama jika saya ingin keluar rumah?
"""
try:
completion = client.chat.completions.create(
model="google/gemma-2-27b-it",
messages=[{"role": "user", "content": prompt}],
max_tokens=300
)
return completion.choices[0].message.content
except Exception as e:
return f"Gagal mendapatkan interpretasi: {str(e)}"
# === Gradio App ===
with gr.Blocks(fill_height=True, title="Prediksi Curah Hujan & Interpretasi AI") as demo:
gr.Markdown("# Prediksi Curah Hujan dengan LSTM + Interpretasi Gemma 2")
gr.Markdown("Masukkan data cuaca harian dan dapatkan prediksi serta analisis bahasa alami.")
with gr.Row():
with gr.Column():
tavg_input = gr.Number(label="Temperatur Rata-rata (°C)", value=25.0)
rh_avg_input = gr.Number(label="Kelembaban Rata-rata (%)", value=80.0)
ss_input = gr.Number(label="Durasi Sinar Matahari (jam)", value=5.0)
predict_btn = gr.Button("Prediksi Curah Hujan")
with gr.Column():
rainfall_output = gr.Textbox(label="Hasil Prediksi (mm)")
interpretation_output = gr.Textbox(label="Interpretasi AI", lines=12)
def predict_and_interpret(tavg, rh_avg, ss):
user_input = np.array([[tavg, rh_avg, ss]] * window_size)
user_input_scaled = scaler_X.transform(user_input)
user_input_scaled = user_input_scaled.reshape(1, window_size, 3)
predicted_scaled = lstm_model.predict(user_input_scaled)
predicted_rainfall = scaler_y.inverse_transform(predicted_scaled)
rainfall_mm = float(predicted_rainfall[0][0])
explanation = interpret_rainfall_with_gemma2(tavg, rh_avg, rainfall_mm)
return f"{rainfall_mm:.2f}", explanation
predict_btn.click(
predict_and_interpret,
inputs=[tavg_input, rh_avg_input, ss_input],
outputs=[rainfall_output, interpretation_output]
)
gr.Markdown("### Tentang Aplikasi")
gr.Markdown("""
Aplikasi ini memanfaatkan:
- Model LSTM untuk prediksi curah hujan berdasarkan data suhu, kelembaban, dan durasi sinar matahari
- Model bahasa besar Gemma 2 (27B) untuk menjelaskan hasil prediksi
""")
demo.launch()
|