import streamlit as st import torch import numpy as np import pandas as pd import time import json import io import base64 import pickle import matplotlib.pyplot as plt from model import GRUModel, load_model, save_model_info from utils import (init_firebase, get_data_from_firebase, save_data_to_firebase, preprocess_data, create_sequences, load_scalers_and_encoders, prepare_input_data, get_file_download_link, save_scaler_to_bytes, save_encoders_to_bytes, create_default_scaler, create_default_encoders) # ตั้งค่าหน้าเว็บ st.set_page_config(page_title="GRU Model for PM0.1 Prediction", layout="wide") st.title("GRU Model for PM0.1 Prediction") # สร้าง session state สำหรับเก็บข้อมูลระหว่าง rerun if 'prediction_history' not in st.session_state: st.session_state.prediction_history = [] st.session_state.timestamp_history = [] st.session_state.initialized = False st.session_state.model_loaded = False st.session_state.firebase_connected = False # โหลดโมเดลและ hyperparameters @st.cache_resource def load_model_resources(): model_path = "model.pth" try: model, hyperparams = load_model(model_path) numeric_scaler, label_encoders, y_scaler = load_scalers_and_encoders(model_path) # บันทึกข้อมูลโมเดลเป็น JSON สำหรับการตรวจสอบ if model is not None and hyperparams is not None: save_model_info(model, hyperparams, "model_info.json") return model, hyperparams, numeric_scaler, label_encoders, y_scaler except Exception as e: st.error(f"เกิดข้อผิดพลาดในการโหลดโมเดล: {str(e)}") return None, None, None, None, None # ส่วนของ sidebar สำหรับการตั้งค่า with st.sidebar: st.header("การตั้งค่า") # การตั้งค่า Firebase st.subheader("Firebase Configuration") # ใช้ secrets หรือป้อนข้อมูลโดยตรง use_secrets = st.checkbox("ใช้ Secrets", value=True, help="เลือกว่าจะใช้ค่า Secrets หรือป้อนข้อมูลโดยตรง") if use_secrets: firebase_credentials = st.secrets.get("firebase_credentials", "{}") firebase_url = st.secrets.get("firebase_url", "https://your-project-id.firebaseio.com") else: firebase_credentials = st.text_area("Firebase Service Account JSON", value="", height=100, help="ใส่ข้อมูล JSON ของ Service Account สำหรับเชื่อมต่อกับ Firebase") firebase_url = st.text_input("Firebase Database URL", value="https://your-project-id.firebaseio.com", help="URL ของ Firebase Realtime Database") input_path = st.text_input("Firebase Input Path", value="input_data", help="พาธสำหรับดึงข้อมูลจาก Firebase") output_path = st.text_input("Firebase Output Path", value="prediction_results", help="พาธสำหรับบันทึกผลลัพธ์ลงใน Firebase") # การตั้งค่าการทำนาย st.subheader("Prediction Configuration") auto_predict = st.checkbox("Auto-predict", value=False, help="เปิดใช้การทำนายอัตโนมัติตามระยะเวลาที่กำหนด") if auto_predict: predict_interval = st.number_input("Prediction Interval (seconds)", min_value=10, max_value=3600, value=60, help="ความถี่ในการทำนายอัตโนมัติ (วินาที)") # โหลดโมเดลและ hyperparameters model, hyperparams, numeric_scaler, label_