Skip to content

Commit 16c31c0

Browse files
LauraGPTSplitzo
andauthored
ops(growth): track SGLang Fun-ASR CI gate (#3510)
Signed-off-by: LauraGPT <170200537+LauraGPT@users.noreply.github.com> Co-authored-by: LauraGPT <170200537+LauraGPT@users.noreply.github.com>
1 parent 4a58b27 commit 16c31c0

4 files changed

Lines changed: 125 additions & 2 deletions

File tree

docs/community_growth_20k.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,12 @@ As of 2026-08-17 00:48 UTC, the ecosystem has 36,584 combined GitHub stars, or 5
7171
- Local evidence passed 109 Python tests and 22 Playwright tests, including desktop and mobile order, visibility, row-layout, overflow, console, and network assertions. Two clean builds each generated 27 product pages and validated 102 public pages with no diff; exact-head GitHub Actions passed both required checks.
7272
- Production release `20260817T012430Z` was built twice from the exact merge commit, atomically replaced `20260817T004144Z`, and retained that previous release for rollback. The 7,175,781-byte archive has SHA-256 `5c5b96595d4cb893c83aedeca4d5dfe5a4cf0a665a1b4d489808886a7aacc1a3`; preflight, staging, post-switch, Chinese and English public-page, all four redirect, nginx, cache-header, and security-header checks passed.
7373

74+
### 2026-08-17 SGLang Omni Fun-ASR prefill coalescing
75+
76+
- SGLang Omni PR [#1460](https://github.com/sgl-project/sglang-omni/pull/1460) enables prefill coalescing for Fun-ASR-Nano. Its published benchmark holds corpus WER at `0.01710`, improves concurrency-32 throughput by 19.9% over current main, and reports a 5.7% gain at concurrency 8, with the expected latency trade-off at concurrency 1.
77+
- Exact head `54361fb022a7da13e1f18a85d5125ac24752c382` had a red Omni CI run `31439644442`, but log inspection proved the failure was only the missing `run-ci` opt-in label: environment setup and all ASR GPU tests were skipped before any PR code ran.
78+
- The repository's trusted slash-command handler permits the PR author, but not LauraGPT, to start the model-specific run. The [author handoff](https://github.com/sgl-project/sglang-omni/pull/1460#issuecomment-5310829913) gives the exact first-line command `/tag-and-rerun-ci fun-asr`, which adds both `run-ci` and `run-fun-asr` before a full exact-head rerun. This PR is now part of the default integration patrol until real GPU CI completes or a maintainer closes the lane.
79+
7480
### 2026-08-16 OpenClaw realtime transcription SDK unblock
7581

7682
- OpenClaw PR [#118977](https://github.com/openclaw/openclaw/pull/118977) was synchronized with `openclaw/main@2d3612da6bd28f6a7956d82b0795c31fd18bab8a`, resolving its only merge conflict while preserving both upstream SDK surface-budget changes and the FunASR WebSocket subprotocol work.

scripts/collect_growth_metrics.py

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
"huggingface/optimum-intel#1874",
3838
"yuekaizhang/Fun-ASR-vllm#21",
3939
"ray-project/ray#64053",
40+
"sgl-project/sglang-omni#1460",
4041
"huggingface/speech-to-speech#319",
4142
"livekit/agents#6176",
4243
"punkpeye/awesome-mcp-servers#7153",
@@ -113,7 +114,15 @@
113114
},
114115
"reason": "Current Ray failures are Buildkite/ReadTheDocs gates already triaged; the remaining PR-local Black fix is waiting on the contributor branch owner",
115116
"action": "wait for contributor branch update",
116-
}
117+
},
118+
"sgl-project/sglang-omni#1460": {
119+
"failed_check_names": {"omni-ci-gate"},
120+
"reason": (
121+
"Omni CI stopped at the missing run-ci opt-in before setup or ASR GPU tests; "
122+
"the PR author must run `/tag-and-rerun-ci fun-asr`"
123+
),
124+
"action": "wait for PR author CI opt-in",
125+
},
117126
}
118127
KNOWN_REVIEW_GATES = {
119128
"punkpeye/awesome-mcp-servers#7153": {
@@ -301,6 +310,7 @@
301310
MANUAL_HANDOFF_ACTIONS = {
302311
"submit Glama",
303312
"wait for author CLA",
313+
"wait for PR author CI opt-in",
304314
"wait for contributor conflict resolution",
305315
"wait for preview authorization",
306316
}
@@ -491,6 +501,25 @@ def summarize_commit_checks(repo: str, head_sha: str) -> Dict[str, Any]:
491501
github_headers(),
492502
)
493503
check_runs = check_runs_payload.get("check_runs", [])
504+
latest_check_runs: Dict[tuple[str, Any], tuple[tuple[str, int, int], Dict[str, Any]]] = {}
505+
for position, check_run in enumerate(check_runs):
506+
app = check_run.get("app") or {}
507+
key = (str(check_run.get("name") or ""), app.get("slug") or app.get("id"))
508+
timestamp = str(
509+
check_run.get("completed_at")
510+
or check_run.get("started_at")
511+
or check_run.get("created_at")
512+
or ""
513+
)
514+
try:
515+
run_id = int(check_run.get("id") or 0)
516+
except (TypeError, ValueError):
517+
run_id = 0
518+
rank = (timestamp, run_id, -position)
519+
previous = latest_check_runs.get(key)
520+
if previous is None or rank > previous[0]:
521+
latest_check_runs[key] = (rank, check_run)
522+
check_runs = [entry[1] for entry in latest_check_runs.values()]
494523
failed_check_runs = []
495524
pending_check_runs = []
496525
for check_run in check_runs:
@@ -1061,7 +1090,11 @@ def format_integration_markdown(metrics: Dict[str, Any]) -> str:
10611090
if manual_handoff_integrations:
10621091
lines.extend(["", "## Manual handoff gates", ""])
10631092
for integration in manual_handoff_integrations:
1064-
reason = integration.get("known_review_gate_reason") or "manual action required"
1093+
reason = (
1094+
integration.get("known_review_gate_reason")
1095+
or integration.get("known_external_failure_reason")
1096+
or "manual action required"
1097+
)
10651098
lines.append(
10661099
f"- [{integration['pr']}]({integration.get('html_url')}): "
10671100
f"{integration.get('next_action') or 'inspect'}; {reason}"

tests/test_collect_growth_metrics.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,75 @@ def load_growth_metrics_module():
1919
def test_default_integration_prs_include_sglang_omni_fun_asr():
2020
module = load_growth_metrics_module()
2121

22+
assert "sgl-project/sglang-omni#1460" in module.DEFAULT_INTEGRATION_PRS
2223
assert "sgl-project/sglang-omni#1078" not in module.DEFAULT_INTEGRATION_PRS
2324
assert "sgl-project/sglang-omni#898" not in module.DEFAULT_INTEGRATION_PRS
2425

2526

27+
def test_sglang_omni_fun_asr_ci_gate_waits_for_pr_author_opt_in():
28+
module = load_growth_metrics_module()
29+
30+
failure = module.KNOWN_EXTERNAL_CHECK_FAILURES["sgl-project/sglang-omni#1460"]
31+
32+
assert failure["failed_check_names"] == {"omni-ci-gate"}
33+
assert failure["action"] == "wait for PR author CI opt-in"
34+
assert "`/tag-and-rerun-ci fun-asr`" in failure["reason"]
35+
assert "before setup or ASR GPU tests" in failure["reason"]
36+
assert failure["action"] in module.MANUAL_HANDOFF_ACTIONS
37+
38+
39+
def test_summarize_commit_checks_uses_latest_run_for_each_check_name(monkeypatch):
40+
module = load_growth_metrics_module()
41+
42+
def fake_fetch_json(url, headers=None):
43+
if url.endswith("/commits/head/status"):
44+
return {"state": "success", "statuses": []}
45+
if url.endswith("/commits/head/check-runs?per_page=100"):
46+
return {
47+
"total_count": 4,
48+
"check_runs": [
49+
{
50+
"id": 4,
51+
"name": "build-docs",
52+
"status": "completed",
53+
"conclusion": "success",
54+
"completed_at": "2026-08-10T22:46:02Z",
55+
},
56+
{
57+
"id": 3,
58+
"name": "omni-ci-gate",
59+
"status": "completed",
60+
"conclusion": "failure",
61+
"completed_at": "2026-08-10T22:45:59Z",
62+
},
63+
{
64+
"id": 2,
65+
"name": "build-docs",
66+
"status": "completed",
67+
"conclusion": "cancelled",
68+
"completed_at": "2026-08-10T22:45:58Z",
69+
},
70+
{
71+
"id": 1,
72+
"name": "omni-ci-gate",
73+
"status": "completed",
74+
"conclusion": "cancelled",
75+
"completed_at": "2026-08-10T22:45:57Z",
76+
},
77+
],
78+
}
79+
raise AssertionError(f"unexpected URL: {url}")
80+
81+
monkeypatch.setattr(module, "fetch_json", fake_fetch_json)
82+
83+
checks = module.summarize_commit_checks("sgl-project/sglang-omni", "head")
84+
85+
assert checks["total_check_runs"] == 4
86+
assert checks["failed_check_runs"] == [
87+
{"name": "omni-ci-gate", "conclusion": "failure", "url": None}
88+
]
89+
90+
2691
def test_github_headers_falls_back_to_gh_auth_token(monkeypatch):
2792
module = load_growth_metrics_module()
2893
monkeypatch.delenv("GITHUB_TOKEN", raising=False)

tests/test_growth_plan_doc.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -428,3 +428,22 @@ def test_growth_plan_records_four_repo_homepage_routing_release():
428428
]
429429
for marker in required_markers:
430430
assert marker in text
431+
432+
433+
def test_growth_plan_records_sglang_funasr_ci_handoff():
434+
text = PLAN.read_text()
435+
436+
required_markers = [
437+
"### 2026-08-17 SGLang Omni Fun-ASR prefill coalescing",
438+
"[#1460](https://github.com/sgl-project/sglang-omni/pull/1460)",
439+
"concurrency-32 throughput by 19.9%",
440+
"corpus WER at `0.01710`",
441+
"`54361fb022a7da13e1f18a85d5125ac24752c382`",
442+
"`31439644442`",
443+
"setup and all ASR GPU tests were skipped",
444+
"`/tag-and-rerun-ci fun-asr`",
445+
"#issuecomment-5310829913",
446+
"default integration patrol",
447+
]
448+
for marker in required_markers:
449+
assert marker in text

0 commit comments

Comments
 (0)