| | 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) |
| |
|