From 937cbfd648ed2b56381ec6c254f6ace676489b79 Mon Sep 17 00:00:00 2001 From: Liang Juhao Date: Tue, 19 May 2026 12:23:25 +0800 Subject: [PATCH 1/3] chore: update urls after transfer to FreedomIntelligence org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Repo has been transferred from JuhaoLiang1997 (personal) to FreedomIntelligence (organisation). GitHub installs HTTP redirects for github.com//AccelMark/* automatically, but GitHub Pages does *not* redirect across owners — the live leaderboard URL must be updated explicitly. Replacements (across docs, frontend, leaderboard generator): - juhaoliang1997.github.io/AccelMark → freedomintelligence.github.io/AccelMark - github.com/JuhaoLiang1997/AccelMark → github.com/FreedomIntelligence/AccelMark Intentionally left untouched: - "submitted_by" fields in results/**/result.json and runners/*/meta.json — these record historical attribution under the submitter's actual GitHub identity at submission time and must not change when the repo moves. - pyproject.toml maintainer email (juhaoliang1997@gmail.com) — that is the maintainer's personal address, not a repo URL. - DEVELOPMENT.md submitted_by example value — kept as the real historical handle so the docs match what readers see in results/. Verified: - runners/validate_runners.py: 9/9 folders, hashes intact. - runners/validate_suites.py: 7/7 suites valid. Co-authored-by: Cursor --- .github/ISSUE_TEMPLATE/new_suite.md | 2 +- CODE_OF_CONDUCT.md | 2 +- CONTRIBUTING.md | 4 ++-- DEVELOPMENT.md | 2 +- NOTICE | 2 +- README.md | 18 +++++++++--------- SECURITY.md | 2 +- leaderboard/generate.py | 4 ++-- leaderboard/site/assets/js/modal.js | 2 +- leaderboard/site/assets/js/views/home.js | 4 ++-- leaderboard/site/assets/js/views/suites.js | 2 +- leaderboard/site/index.html | 8 ++++---- pyproject.toml | 12 ++++++------ suites/README.md | 2 +- 14 files changed, 33 insertions(+), 33 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/new_suite.md b/.github/ISSUE_TEMPLATE/new_suite.md index 4c358a1..d3104b7 100644 --- a/.github/ISSUE_TEMPLATE/new_suite.md +++ b/.github/ISSUE_TEMPLATE/new_suite.md @@ -14,7 +14,7 @@ assignees: '' merging. Full walk-through: DEVELOPMENT.md "Adding a new suite" - https://github.com/JuhaoLiang1997/AccelMark/blob/main/DEVELOPMENT.md + https://github.com/FreedomIntelligence/AccelMark/blob/main/DEVELOPMENT.md --> ## Why this suite? diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 354654b..a476a44 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -75,7 +75,7 @@ appointed representative at an online or offline event. Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the project maintainers by opening a confidential security -advisory at +advisory at or, when GitHub access is not available, by emailing the maintainer listed in the repository profile. All complaints will be reviewed and investigated promptly and fairly. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a3044cd..e05cf66 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -36,7 +36,7 @@ gh pr create # or open the PR via the GitHub web UI That's it. CI validates the result automatically; merging the PR publishes it to the leaderboard. -> _Prefer not to use git?_ Open a [Community Submission issue](https://github.com/JuhaoLiang1997/AccelMark/issues/new?template=community_submission.md), paste your `result.json`, and the CI bot will draft the PR on your behalf. +> _Prefer not to use git?_ Open a [Community Submission issue](https://github.com/FreedomIntelligence/AccelMark/issues/new?template=community_submission.md), paste your `result.json`, and the CI bot will draft the PR on your behalf. --- @@ -338,7 +338,7 @@ Actions workflow regenerates them on every merge to `main`. ### Alternative: open a submission issue (no git required) If you'd rather not use git, paste your `result.json` into a -[Community Submission issue](https://github.com/JuhaoLiang1997/AccelMark/issues/new?template=community_submission.md). +[Community Submission issue](https://github.com/FreedomIntelligence/AccelMark/issues/new?template=community_submission.md). A bot will validate the JSON, draft a PR with the files in the right place, and link it back to your issue. You don't need to touch git or fork the repo. diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 98cddbc..990f73b 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -1134,6 +1134,6 @@ python runners/validate_submission.py --dir /tmp/accelmark_test/ ## Questions and Support - **Bug in LoadGen or schema:** Open a GitHub Issue -- **New suite proposal:** Open a GitHub Issue with the [**Propose a new suite**](https://github.com/JuhaoLiang1997/AccelMark/issues/new?template=new_suite.md) template +- **New suite proposal:** Open a GitHub Issue with the [**Propose a new suite**](https://github.com/FreedomIntelligence/AccelMark/issues/new?template=new_suite.md) template - **New platform support:** Open a PR with a working platform script and at least one verified result - **Leaderboard question:** Check `leaderboard/generate.py` — it's well-commented \ No newline at end of file diff --git a/NOTICE b/NOTICE index d904b63..a018112 100644 --- a/NOTICE +++ b/NOTICE @@ -2,7 +2,7 @@ AccelMark Copyright 2024-2026 Juhao Liang and The AccelMark Contributors This product includes software developed as part of the AccelMark project -(https://github.com/JuhaoLiang1997/AccelMark). +(https://github.com/FreedomIntelligence/AccelMark). Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/README.md b/README.md index 5fb2f69..893985b 100644 --- a/README.md +++ b/README.md @@ -10,16 +10,16 @@

- Live Leaderboard + Live Leaderboard License: Apache 2.0 Contributions welcome

- → Live Leaderboard · + → Live Leaderboard · Contributing · Suites · - Discussions · + Discussions · Development

@@ -49,7 +49,7 @@ ```bash # 1. Clone and install -git clone https://github.com/JuhaoLiang1997/AccelMark.git +git clone https://github.com/FreedomIntelligence/AccelMark.git cd AccelMark pip install -e . # installs framework dependencies (Python >=3.10 required) pip install -r runners/nvidia_vllm_47f5d58e/requirements.txt # installs runner dependencies @@ -70,7 +70,7 @@ python run.py --runner nvidia_vllm_47f5d58e --suite suite_A # your result.json and env_info.json; no manual file moves are needed. ``` -See [CONTRIBUTING.md](CONTRIBUTING.md) for the full guide. If you'd rather skip the PR workflow, [open a submission issue](https://github.com/JuhaoLiang1997/AccelMark/issues/new?template=community_submission.md) instead and a bot will draft the PR for you. +See [CONTRIBUTING.md](CONTRIBUTING.md) for the full guide. If you'd rather skip the PR workflow, [open a submission issue](https://github.com/FreedomIntelligence/AccelMark/issues/new?template=community_submission.md) instead and a bot will draft the PR for you. --- @@ -100,7 +100,7 @@ See [suites/README.md](suites/README.md) for full specs, time budgets, SLA defin width="980">

-A snapshot of accelerators that have at least one submission on the leaderboard. Tile size is proportional to submission count; colour denotes vendor. See the [**live leaderboard**](https://juhaoliang1997.github.io/AccelMark) for current rankings, per-suite breakdowns, and the underlying `result.json` files. +A snapshot of accelerators that have at least one submission on the leaderboard. Tile size is proportional to submission count; colour denotes vendor. See the [**live leaderboard**](https://freedomintelligence.github.io/AccelMark) for current rankings, per-suite breakdowns, and the underlying `result.json` files. --- @@ -150,8 +150,8 @@ The most valuable contribution is running the benchmark on hardware not yet in t - **Submit a result** → [Submitting a result](CONTRIBUTING.md#submitting-a-result) - **Add a new runner** → [Adding a new runner](CONTRIBUTING.md#adding-a-new-runner) - **Add a new accelerator family** → [Platform plug-in guide](runners/README.md#adding-a-new-accelerator-family) -- **Report a bug** → [Open an issue](https://github.com/JuhaoLiang1997/AccelMark/issues/new?template=bug_report.md) -- **Ask a question / share results** → [Discussions](https://github.com/JuhaoLiang1997/AccelMark/discussions) +- **Report a bug** → [Open an issue](https://github.com/FreedomIntelligence/AccelMark/issues/new?template=bug_report.md) +- **Ask a question / share results** → [Discussions](https://github.com/FreedomIntelligence/AccelMark/discussions) - **Extend the leaderboard** → [Development guide](DEVELOPMENT.md) > _Optional:_ AccelMark also ships a small voice-driven launcher for the [OpenClaw](https://clawhub.ai) ecosystem — see [`openclaw_skill/`](openclaw_skill/README.md). It's not required to run, contribute, or submit results. @@ -167,7 +167,7 @@ If you use AccelMark results in research, please cite: title = {Beyond NVIDIA! A Multi-Regime Framework for Benchmarking Heterogeneous AI Accelerators}, author = {Liang, Juhao and Zhang, Zhiyuan and Li, Siyu and Lin, Zhihang and Yu, Minchen and Zeng, Li and Chen, Zizhong and Sun, Ruoyu and Wang, Benyou}, year = {2026}, - url = {https://github.com/JuhaoLiang1997/AccelMark} + url = {https://github.com/FreedomIntelligence/AccelMark} } ``` diff --git a/SECURITY.md b/SECURITY.md index 67be232..11d96f5 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -40,7 +40,7 @@ providing an initial assessment. We aim to publish a fix and credit the reporter within **30 days** of acknowledgement; if a fix is going to take longer we will say so in the response. -[advisory]: https://github.com/JuhaoLiang1997/AccelMark/security/advisories/new +[advisory]: https://github.com/FreedomIntelligence/AccelMark/security/advisories/new When reporting, please include: diff --git a/leaderboard/generate.py b/leaderboard/generate.py index 4a9ac5a..bf35de2 100644 --- a/leaderboard/generate.py +++ b/leaderboard/generate.py @@ -273,8 +273,8 @@ def extract_impl(result: dict) -> dict | None: "created": meta.get("created"), "supersedes_chain": meta.get("supersedes_chain"), "deprecated_by": meta.get("deprecated_by"), - "github_url": f"https://github.com/JuhaoLiang1997/AccelMark/tree/main/runners/{impl_id}", - "runner_url": f"https://github.com/JuhaoLiang1997/AccelMark/blob/main/runners/{impl_id}/runner.py", + "github_url": f"https://github.com/FreedomIntelligence/AccelMark/tree/main/runners/{impl_id}", + "runner_url": f"https://github.com/FreedomIntelligence/AccelMark/blob/main/runners/{impl_id}/runner.py", } diff --git a/leaderboard/site/assets/js/modal.js b/leaderboard/site/assets/js/modal.js index a52a3e1..3461dbb 100644 --- a/leaderboard/site/assets/js/modal.js +++ b/leaderboard/site/assets/js/modal.js @@ -306,7 +306,7 @@ function _fillModal(row) { const impl = row.impl || {}; let scriptUrl = null; if (d.meta_reproduce_script) { - scriptUrl = `https://github.com/JuhaoLiang1997/AccelMark/blob/main/${d.meta_reproduce_script}`; + scriptUrl = `https://github.com/FreedomIntelligence/AccelMark/blob/main/${d.meta_reproduce_script}`; // If the result references an old (superseded) runner path, point to // the current runner.py instead. if (impl.supersedes_chain && Array.isArray(impl.supersedes_chain)) { diff --git a/leaderboard/site/assets/js/views/home.js b/leaderboard/site/assets/js/views/home.js index 3274431..db4a91f 100644 --- a/leaderboard/site/assets/js/views/home.js +++ b/leaderboard/site/assets/js/views/home.js @@ -107,10 +107,10 @@ export function render({ el }) {

diff --git a/leaderboard/site/assets/js/views/suites.js b/leaderboard/site/assets/js/views/suites.js index 15e22ae..f1177b6 100644 --- a/leaderboard/site/assets/js/views/suites.js +++ b/leaderboard/site/assets/js/views/suites.js @@ -7,7 +7,7 @@ import { } from "../data.js"; import { esc, fmtNum, buildHash, shortModel } from "../utils.js"; -const GH_BASE = "https://github.com/JuhaoLiang1997/AccelMark"; +const GH_BASE = "https://github.com/FreedomIntelligence/AccelMark"; // One concrete finding per suite, distilled from the paper. Kept short // enough to fit inside a single card but specific enough to be useful. diff --git a/leaderboard/site/index.html b/leaderboard/site/index.html index 1001384..3ccc280 100644 --- a/leaderboard/site/index.html +++ b/leaderboard/site/index.html @@ -46,7 +46,7 @@ diff --git a/openclaw_skill/accelmark_skill.py b/openclaw_skill/accelmark_skill.py index 698bb93..7f55cc1 100644 --- a/openclaw_skill/accelmark_skill.py +++ b/openclaw_skill/accelmark_skill.py @@ -10,9 +10,13 @@ 3. Runs the benchmark (5 min max) 4. Queries AccelMark leaderboard for ranking 5. Returns human-readable report to user -6. Optionally submits result to community leaderboard +6. On "submit", returns copy-pasteable PR submission instructions + (AccelMark uses a PR-only submission flow; the skill no longer posts + to GitHub directly) """ +from __future__ import annotations + import json import os import subprocess @@ -22,7 +26,8 @@ ACCELMARK_REPO = os.environ.get("ACCELMARK_PATH", "~/accelmark") -LEADERBOARD_API = "https://juhaoliang1997.github.io/AccelMark/api" +LEADERBOARD_API = "https://freedomintelligence.github.io/AccelMark/api" +REPO_URL = "https://github.com/FreedomIntelligence/AccelMark" def ensure_accelmark_installed() -> Path: @@ -31,7 +36,7 @@ def ensure_accelmark_installed() -> Path: if not repo_path.exists(): subprocess.run( - ["git", "clone", "https://github.com/JuhaoLiang1997/AccelMark.git", str(repo_path)], + ["git", "clone", f"{REPO_URL}.git", str(repo_path)], check=True ) @@ -102,49 +107,39 @@ def query_submission_rank(submission_name: str) -> dict | None: def handle_submit(result: dict, openclaw_username: str) -> str: """ - Submit result to AccelMark leaderboard via GitHub Issue. - The issue is processed by the process_submissions.yml CI workflow - which validates and creates a PR automatically. - """ - import urllib.request + Format submission instructions for the user. + AccelMark uses a pull-request-only submission flow — bot-driven + automation via GitHub Issues was removed because it required org-level + permissions and added a hard-to-audit attack surface. This function + returns the finalised result.json (with ``submitted_by`` set) and the + copy-pasteable steps the user needs to follow to open a PR themselves. + """ result["meta"]["submitted_by"] = openclaw_username - - issue_body = f"""## AccelMark Community Submission - -**Chip**: {result['chip']['name']} -**Suite**: {result['suite_id']} -**Date**: {result['meta']['date']} -**Submitted via**: OpenClaw AccelMark Skill - -```json -{json.dumps(result, indent=2)} -``` -""" - payload = json.dumps({ - "title": f"[submission] {result['chip']['name']} {result['suite_id']}", - "body": issue_body, - "labels": ["community-submission"], - }).encode() - - req = urllib.request.Request( - "https://api.github.com/repos/JuhaoLiang1997/AccelMark/issues", - data=payload, - headers={"Content-Type": "application/json"}, + run_name = ( + result.get("meta", {}).get("run_name") + or f"{result.get('chip', {}).get('name', 'unknown')}_{result.get('suite_id', 'unknown')}" + ) + result_json = json.dumps(result, indent=2) + + return ( + "📦 Your benchmark result is ready to submit.\n" + "\n" + "AccelMark uses a pull-request-only submission flow. To add this\n" + "result to the public leaderboard:\n" + "\n" + f" 1. Fork and clone {REPO_URL}\n" + f" 2. mkdir -p results/community/{run_name}\n" + f" 3. Save the JSON below as results/community/{run_name}/result.json\n" + " 4. Commit, push, and open a pull request — CI auto-validates.\n" + "\n" + f"Full guide: {REPO_URL}/blob/main/CONTRIBUTING.md\n" + "\n" + "--- result.json ---\n" + "```json\n" + f"{result_json}\n" + "```" ) - - try: - urllib.request.urlopen(req, timeout=10) - return ( - "✅ Submitted! Your result will appear on the leaderboard " - "after automated validation (usually within a few minutes).\n" - f"View leaderboard: {LEADERBOARD_API.replace('/api', '/')}" - ) - except Exception as e: - return ( - f"❌ Submission failed: {str(e)}\n" - "You can submit manually at: https://github.com/JuhaoLiang1997/AccelMark" - ) def format_details(result: dict) -> str: diff --git a/openclaw_skill/tests/test_accelmark_skill.py b/openclaw_skill/tests/test_accelmark_skill.py index d0a2a7a..b09f001 100644 --- a/openclaw_skill/tests/test_accelmark_skill.py +++ b/openclaw_skill/tests/test_accelmark_skill.py @@ -4,7 +4,8 @@ Covers the skill entry point functions — no real GPU, no real network. All external calls (urllib, subprocess) are mocked. - main(): follow-up flows for "submit" and "details" -- handle_submit(): GitHub Issue posting, success and failure paths +- handle_submit(): renders PR submission instructions (the skill no + longer auto-creates a GitHub Issue — AccelMark is PR-only) - query_ranking(): graceful None on any network error - format_details(): table rendering, ← best marker - _summarize_chips(): GPU env and CPU-only env @@ -99,36 +100,38 @@ def test_query_ranking_returns_none_for_unknown_chip(): # ── handle_submit ───────────────────────────────────────────────────────────── -def test_handle_submit_success(): - mock_resp = MagicMock() - mock_resp.__enter__ = lambda s: s - mock_resp.__exit__ = MagicMock(return_value=False) - - with patch("urllib.request.urlopen", return_value=mock_resp): - msg = handle_submit(_make_result(), openclaw_username="testuser") +def test_handle_submit_returns_pr_instructions(): + msg = handle_submit(_make_result(), openclaw_username="testuser") - assert "✅" in msg - assert "leaderboard" in msg.lower() + # Instructions, not auto-submission confirmation + assert "pull request" in msg.lower() or "pr" in msg.lower() + assert "results/community/" in msg + assert "CONTRIBUTING.md" in msg def test_handle_submit_sets_submitted_by(): result = _make_result() - mock_resp = MagicMock() - mock_resp.__enter__ = lambda s: s - mock_resp.__exit__ = MagicMock(return_value=False) + handle_submit(result, openclaw_username="alice") + assert result["meta"]["submitted_by"] == "alice" - with patch("urllib.request.urlopen", return_value=mock_resp): - handle_submit(result, openclaw_username="alice") - assert result["meta"]["submitted_by"] == "alice" +def test_handle_submit_embeds_result_json(): + result = _make_result(chip_name="NVIDIA H100") + msg = handle_submit(result, openclaw_username="bob") + # The full result.json is embedded in a ```json fenced block so the + # user can copy it directly into their PR. + assert "```json" in msg + assert "NVIDIA H100" in msg + assert '"submitted_by": "bob"' in msg -def test_handle_submit_failure_returns_error_message(): - with patch("urllib.request.urlopen", side_effect=Exception("connection refused")): - msg = handle_submit(_make_result(), openclaw_username="bob") - assert "❌" in msg - assert "manually" in msg.lower() or "github" in msg.lower() +def test_handle_submit_makes_no_network_call(): + # Regression: this function used to POST to api.github.com. The new + # implementation must be purely local — no urllib usage at all. + with patch("urllib.request.urlopen") as mock_urlopen: + handle_submit(_make_result(), openclaw_username="carol") + mock_urlopen.assert_not_called() # ── format_details ──────────────────────────────────────────────────────────── @@ -163,14 +166,11 @@ def test_main_details_without_pending_result(): def test_main_submit_with_pending_result(): ctx = {"accelmark_pending_result": _make_result(), "user": {"username": "carol"}} - mock_resp = MagicMock() - mock_resp.__enter__ = lambda s: s - mock_resp.__exit__ = MagicMock(return_value=False) - - with patch("urllib.request.urlopen", return_value=mock_resp): - msg = main("submit", ctx) + msg = main("submit", ctx) - assert "✅" in msg + # New flow: hand the user PR instructions instead of auto-posting. + assert "pull request" in msg.lower() or "pr" in msg.lower() + assert "CONTRIBUTING.md" in msg def test_main_details_with_pending_result(): diff --git a/runners/gen_pr_summary.py b/runners/gen_pr_summary.py deleted file mode 100644 index e7c056f..0000000 --- a/runners/gen_pr_summary.py +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/env python3 -""" -Generate a markdown summary table from a result.json file. -Used by .github/workflows/process_submissions.yml to build PR descriptions. -Usage: python runners/gen_pr_summary.py -""" -import json, sys - -with open(sys.argv[1]) as f: - r = json.load(f) - -chip = r.get('chip', {}) -model = r.get('model', {}) -sw = r.get('software', {}) -metrics = r.get('metrics', {}) -acc = r.get('accuracy') or {} -meta = r.get('meta', {}) -suite = r.get('suite_id', '') -dash = '—' - -# ── Primary throughput — varies by suite ───────────────────────────────────── -thr = None - -# Suite A/B/D: standard offline block -offline = metrics.get('offline', {}) -rows = (offline.get('results_by_concurrency') or - offline.get('results_by_batch_size') or []) -valid = [x for x in rows if not x.get('oom') and x.get('throughput_tokens_per_sec')] -if valid: - thr = round(max(x['throughput_tokens_per_sec'] for x in valid)) - -# Suite C: best throughput across precision formats -if thr is None: - quant = metrics.get('quantization', {}) - entries = quant.get('results_by_precision', []) - vals = [e.get('best_throughput_tokens_per_sec') for e in entries - if e.get('best_throughput_tokens_per_sec')] - if vals: - thr = round(max(vals)) - -# Suite E: base throughput from scaling block -if thr is None: - scaling = metrics.get('scaling', {}) - base = scaling.get('base_throughput_tokens_per_sec') - if base: - thr = round(base) - else: - for entry in scaling.get('results_by_chip_count', []): - if entry.get('chip_count') == 1: - t = entry.get('best_throughput_tokens_per_sec') - if t: - thr = round(t) - break - -# ── Online / interactive ────────────────────────────────────────────────────── -online = metrics.get('online', {}) -iv = metrics.get('interactive', {}) -qps = online.get('max_valid_qps') -ttft = iv.get('ttft_ms_p99') -# Treat 0 or None as no result -if not qps: - qps = None - -# ── Suite C: accuracy per format ───────────────────────────────────────────── -if suite == 'suite_C': - quant = metrics.get('quantization', {}) - entries = quant.get('results_by_precision', []) - bf16 = next((e for e in entries if e.get('precision') == 'BF16'), {}) - acc_val = f"{bf16.get('accuracy_score', dash)} (BF16)" if bf16 else dash -elif suite == 'suite_E': - acc_val = dash # Suite E does not run accuracy -elif acc: - acc_val = acc.get('valid', dash) -else: - acc_val = dash - -# ── Suite E: scaling efficiency ─────────────────────────────────────────────── -scaling_note = '' -if suite == 'suite_E': - scaling = metrics.get('scaling', {}) - parts = [] - for entry in scaling.get('results_by_chip_count', []): - count = entry.get('chip_count') - eff = entry.get('scaling_efficiency') - if count and count > 1 and eff is not None: - parts.append(f'{count}×: {round(eff * 100)}%') - scaling_note = ', '.join(parts) if parts else dash - -# ── Print table ─────────────────────────────────────────────────────────────── -print('| Field | Value |') -print('|---|---|') -print(f"| Chip | {chip.get('name', dash)} |") -print(f"| Chip count | {chip.get('count', 1)} |") -print(f"| Suite | {suite or dash} |") -print(f"| Runner | {r.get('implementation_id', dash)} |") -print(f"| Framework | {sw.get('framework', dash)} {sw.get('framework_version', '')} |") -print(f"| Model | {model.get('model_id', dash)} |") -print(f"| Precision | {model.get('precision', dash)} |") -print(f"| Offline throughput | {thr if thr else dash} tok/s |") -if suite == 'suite_E' and scaling_note: - print(f"| Scaling efficiency | {scaling_note} |") -else: - print(f"| Online max QPS | {round(qps, 1) if qps is not None else dash} |") - print(f"| Interactive TTFT p99 | {round(ttft, 1) if ttft is not None else dash} ms |") -print(f"| Accuracy valid | {acc_val} |") -print(f"| Submitted by | {meta.get('submitted_by', dash)} |") -date_str = meta.get('date', dash) -time_str = meta.get('time', '') -print(f"| Date | {date_str}{' ' + time_str if time_str else ''} |") -print(f"| Run ID | `{meta.get('run_id', dash)}` |") -print(f"| Run name | `{meta.get('run_name', dash)}` |") -if meta.get('flagged'): - print(f"| ⚠️ Flagged | {meta['flagged']} |") \ No newline at end of file diff --git a/runners/validate_runners.py b/runners/validate_runners.py index 14db0a9..5cb350a 100644 --- a/runners/validate_runners.py +++ b/runners/validate_runners.py @@ -49,8 +49,8 @@ "collect_env.py", "validate_submission.py", "validate_runners.py", + "validate_suites.py", "hash_runner.py", - "gen_pr_summary.py", "meta.schema.json", "protocol.py", "template", diff --git a/tools/generate_platforms_matrix.py b/tools/generate_platforms_matrix.py index 5e24b12..fc104b3 100644 --- a/tools/generate_platforms_matrix.py +++ b/tools/generate_platforms_matrix.py @@ -40,8 +40,8 @@ "collect_env.py", "validate_submission.py", "validate_runners.py", + "validate_suites.py", "hash_runner.py", - "gen_pr_summary.py", "meta.schema.json", "protocol.py", "template",