Fancy-yousa's picture
Upload 18 files
94e0fc9 verified
import os
import sys
import pickle
import json
from flask import Flask, jsonify, request, render_template
# Add project root to sys.path to import leaderboard
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
from leaderboard import rank_results
# ===============================
# 基本路径配置
# ===============================
PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
RESULT_DIR = os.path.join(PROJECT_ROOT, "results")
DATASET_DIR = os.path.join(PROJECT_ROOT, "datasets")
os.makedirs(RESULT_DIR, exist_ok=True)
os.makedirs(DATASET_DIR, exist_ok=True)
# ===============================
# Flask App
# ===============================
app = Flask(__name__)
# ===============================
# 内存缓存
# ===============================
RESULT_CACHE = {} # {dataset_name: results}
# ===============================
# PKL IO 工具
# ===============================
def save_result_json(dataset, results):
path = os.path.join(RESULT_DIR, f"{dataset}.json")
with open(path, "w", encoding='utf-8') as f:
json.dump(results, f, indent=4)
def load_result_json(dataset):
path = os.path.join(RESULT_DIR, f"{dataset}.json")
if not os.path.exists(path):
return None
with open(path, 'r', encoding='utf-8') as f:
return json.load(f)
def list_available_datasets():
datasets = set()
for f in os.listdir(RESULT_DIR):
if f.endswith(".json"):
datasets.add(f.replace(".json", ""))
# 默认展示数据集
datasets.add("Authorship")
return sorted(datasets)
# ===============================
# ⚠️ 你自己的 Agent 入口
# ===============================
def run_agent_for_dataset(dataset):
"""
⚠️ 用你自己的 router / agent 替换这里
必须返回 List[Dict]
"""
# ---------------------------
# 示例(占位)
# ---------------------------
return [
]
# {
# "algorithm": "shibaile",
# "num_features": 15,
# "mean_f1": 0.9233716475,
# "mean_auc": 0.9816098520,
# "time": 5.75,
# "score": 0.9408431088,
# },
# {
# "algorithm": "JMchongxinzailai",
# "num_features": 15,
# "mean_f1": 0.918,
# "mean_auc": 0.979,
# "time": 7.32,
# "score": 0.932,
# },
# ===============================
# 页面
# ===============================
@app.route("/")
def index():
return render_template(
"index.html",
datasets=list_available_datasets(),
default_dataset="Authorship",
)
# ===============================
# API:获取结果
# ===============================
@app.route("/api/results")
def get_results():
dataset = request.args.get("dataset", "Authorship")
# ① 内存缓存 (Disabled for debugging)
# if dataset in RESULT_CACHE:
# print("------------------------------------------------------------------zoude cache")
# return jsonify(RESULT_CACHE[dataset])
# ② 磁盘 pkl/json
results = load_result_json(dataset)
print(111,results)
if results is not None:
print("------------------------------------------------------------------zoude json\n",results)
RESULT_CACHE[dataset] = results
leaderboard = rank_results(results)
return jsonify(leaderboard)
# ③ Agent 实时运行
results = run_agent_for_dataset(dataset)
print(222,results)
# ④ 存储
if results and len(results) > 0:
save_result_json(dataset, results)
RESULT_CACHE[dataset] = results
print("------------------------------------------------------------------zoude agent")
leaderboard = rank_results(results)
#
return jsonify(leaderboard)
# print(333,leaderboard)
# @app.route("/api/results")
# def get_results():
dataset = request.args.get("dataset", "Authorship")
print(f"[DEBUG] request dataset = {dataset}")
if dataset in RESULT_CACHE:
print("[DEBUG] hit memory cache")
return jsonify(RESULT_CACHE[dataset])
results = load_result_pkl(dataset)
if results is not None:
print("[DEBUG] hit pkl cache")
RESULT_CACHE[dataset] = results
return jsonify(results)
print("[DEBUG] run agent")
results = run_agent_for_dataset(dataset)
print("[DEBUG] agent results =", results)
save_result_pkl(dataset, results)
RESULT_CACHE[dataset] = results
return jsonify(results)
# ===============================
# API:数据集列表
# ===============================
@app.route("/api/datasets")
def api_datasets():
return jsonify(list_available_datasets())
if __name__ == "__main__":
port = int(os.environ.get("PORT", 5000))
app.run(host="0.0.0.0", port=port, debug=True)