import os import pandas as pd from huggingface_hub import hf_hub_download, upload_file, login # --- 配置區 --- DATASET_REPO_ID = "My-Project-Team/Digital-Bodyguard-Dataset" CSV_FILENAME = "baseline_logs.csv" HF_TOKEN = os.getenv("HF_TOKEN") # 🌟 批次上傳門檻 (每累積幾筆資料才備份到雲端一次) BATCH_SIZE = 30 unsynced_count = 0 if HF_TOKEN: login(token=HF_TOKEN) # 🌟 把這個啟動時需要用到的「下載功能」加回來! # def sync_from_hf(): # """從雲端下載最新的 CSV 並回傳 DataFrame (系統啟動時只會呼叫一次)""" # try: # path = hf_hub_download( # repo_id=DATASET_REPO_ID, # filename=CSV_FILENAME, # repo_type="dataset", # token=HF_TOKEN # ) # return pd.read_csv(path) # except Exception as e: # print(f"⚠️ 無法下載雲端資料,可能為首次運行: {e}") # return pd.DataFrame(columns=["timestamp", "ip_address", "cookie_id", "account", "role", "action", "status"]) def upload_to_hf(): """將本地的 CSV 檔案同步回雲端""" try: upload_file( path_or_fileobj=CSV_FILENAME, path_in_repo=CSV_FILENAME, repo_id=DATASET_REPO_ID, repo_type="dataset", token=HF_TOKEN, commit_message=f"System auto-log batch update ({BATCH_SIZE} logs)" ) return True except Exception as e: print(f"❌ 雲端同步失敗: {e}") return False def push_new_log(new_log_dict): """ 接收新紀錄並計數。達到 BATCH_SIZE 門檻時才執行雲端上傳。 有效避免 429 Rate Limit 並大幅提升網頁操作流暢度。 """ global unsynced_count unsynced_count += 1 if unsynced_count >= BATCH_SIZE: print(f"📦 已累積 {BATCH_SIZE} 筆操作,正在打包同步至 Hugging Face...") success = upload_to_hf() if success: print("✅ 批次同步成功!") unsynced_count = 0 return success return True