| import os |
| import sys |
| import pickle |
| import json |
| from flask import Flask, jsonify, request, render_template |
|
|
| |
| 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) |
|
|
| |
| |
| |
| app = Flask(__name__) |
|
|
| |
| |
| |
| RESULT_CACHE = {} |
|
|
|
|
| |
| |
| |
| 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) |
|
|
|
|
| |
| |
| |
| def run_agent_for_dataset(dataset): |
| """ |
| ⚠️ 用你自己的 router / agent 替换这里 |
| 必须返回 List[Dict] |
| """ |
| |
| |
| |
| return [ |
| |
| ] |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| @app.route("/") |
| def index(): |
| return render_template( |
| "index.html", |
| datasets=list_available_datasets(), |
| default_dataset="Authorship", |
| ) |
|
|
|
|
| |
| |
| |
| @app.route("/api/results") |
| def get_results(): |
| dataset = request.args.get("dataset", "Authorship") |
|
|
| |
| |
| |
| |
| |
| |
| 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) |
|
|
| |
| 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) |
| |
| |
| |
| 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) |
|
|
|
|
| |
| |
| |
| @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) |
|
|