feat: implement workflow to sync LMSYS SGLang blog (#23438)
This commit is contained in:
@@ -21,8 +21,10 @@ documentation:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- '**/*.md'
|
||||
- '**/*.mdx'
|
||||
- 'docs/**/*'
|
||||
- 'README*'
|
||||
- 'docs_new/**/*'
|
||||
|
||||
# Dependencies
|
||||
dependencies:
|
||||
|
||||
+5
-4
@@ -23,17 +23,18 @@ jobs:
|
||||
- name: Sync blog cards
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: python scripts/update_lmsys_sglang_blogs.py
|
||||
run: python docs_new/scripts/update_lmsys_sglang_blogs.py
|
||||
|
||||
- name: Commit and push changes
|
||||
run: |
|
||||
if git diff --quiet; then
|
||||
echo "No changes to commit."
|
||||
if git diff --quiet -- docs_new/index.mdx; then
|
||||
echo "No blog card changes to commit."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
git config user.name "github-actions[bot]"
|
||||
git config user.email "github-actions[bot]@users.noreply.github.com"
|
||||
git add index.mdx src/generated/lmsys_sglang_blogs.json
|
||||
git add docs_new/index.mdx
|
||||
git diff --cached --quiet && exit 0
|
||||
git commit -m "docs: sync LMSYS SGLang blog cards"
|
||||
git push
|
||||
+110
-110
@@ -82,6 +82,116 @@ It is designed to deliver low-latency and high-throughput inference across a wid
|
||||
alignItems: "stretch",
|
||||
}}
|
||||
>
|
||||
<a
|
||||
href="https://lmsys.org/blog/2026-04-25-deepseek-v4/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
style={{
|
||||
display: "block",
|
||||
border: "1px solid rgba(128, 128, 128, 0.3)",
|
||||
borderRadius: "0.75rem",
|
||||
overflow: "hidden",
|
||||
textDecoration: "none",
|
||||
color: "inherit",
|
||||
height: "100%",
|
||||
}}
|
||||
>
|
||||
<div
|
||||
style={{
|
||||
aspectRatio: "16 / 9",
|
||||
overflow: "hidden",
|
||||
background: "rgba(128, 128, 128, 0.15)",
|
||||
}}
|
||||
>
|
||||
<img
|
||||
src="https://lmsys.org/images/blog/deepseek_v4/benchmark_vs_oss.png"
|
||||
alt="DeepSeek-V4 on Day 0: From Fast Inference to Verified RL with SGLang and Miles"
|
||||
style={{
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
objectFit: "cover",
|
||||
objectPosition: "center",
|
||||
display: "block",
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
<div style={{ padding: "0.9rem 1rem 1rem" }}>
|
||||
<p
|
||||
style={{
|
||||
margin: 0,
|
||||
fontWeight: 600,
|
||||
lineHeight: 1.35,
|
||||
fontSize: "0.98rem",
|
||||
}}
|
||||
>
|
||||
{"DeepSeek-V4 on Day 0: From Fast Inference to Verified RL with SGLang and Miles"}
|
||||
</p>
|
||||
<p
|
||||
style={{
|
||||
margin: "0.55rem 0 0",
|
||||
fontSize: "0.85rem",
|
||||
opacity: 0.75,
|
||||
}}
|
||||
>
|
||||
{"April 25, 2026"}
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
<a
|
||||
href="https://lmsys.org/blog/2026-04-10-sglang-hisparse/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
style={{
|
||||
display: "block",
|
||||
border: "1px solid rgba(128, 128, 128, 0.3)",
|
||||
borderRadius: "0.75rem",
|
||||
overflow: "hidden",
|
||||
textDecoration: "none",
|
||||
color: "inherit",
|
||||
height: "100%",
|
||||
}}
|
||||
>
|
||||
<div
|
||||
style={{
|
||||
aspectRatio: "16 / 9",
|
||||
overflow: "hidden",
|
||||
background: "rgba(128, 128, 128, 0.15)",
|
||||
}}
|
||||
>
|
||||
<img
|
||||
src="https://lmsys.org/images/blog/hisparse/hisparse_overview.png"
|
||||
alt="HiSparse: Turbocharging Sparse Attention with Hierarchical Memory"
|
||||
style={{
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
objectFit: "cover",
|
||||
objectPosition: "center",
|
||||
display: "block",
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
<div style={{ padding: "0.9rem 1rem 1rem" }}>
|
||||
<p
|
||||
style={{
|
||||
margin: 0,
|
||||
fontWeight: 600,
|
||||
lineHeight: 1.35,
|
||||
fontSize: "0.98rem",
|
||||
}}
|
||||
>
|
||||
{"HiSparse: Turbocharging Sparse Attention with Hierarchical Memory"}
|
||||
</p>
|
||||
<p
|
||||
style={{
|
||||
margin: "0.55rem 0 0",
|
||||
fontSize: "0.85rem",
|
||||
opacity: 0.75,
|
||||
}}
|
||||
>
|
||||
{"April 10, 2026"}
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
<a
|
||||
href="https://lmsys.org/blog/2026-03-25-gtc2026/"
|
||||
target="_blank"
|
||||
@@ -302,116 +412,6 @@ It is designed to deliver low-latency and high-throughput inference across a wid
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
<a
|
||||
href="https://lmsys.org/blog/2026-02-20-gb300-inferencex/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
style={{
|
||||
display: "block",
|
||||
border: "1px solid rgba(128, 128, 128, 0.3)",
|
||||
borderRadius: "0.75rem",
|
||||
overflow: "hidden",
|
||||
textDecoration: "none",
|
||||
color: "inherit",
|
||||
height: "100%",
|
||||
}}
|
||||
>
|
||||
<div
|
||||
style={{
|
||||
aspectRatio: "16 / 9",
|
||||
overflow: "hidden",
|
||||
background: "rgba(128, 128, 128, 0.15)",
|
||||
}}
|
||||
>
|
||||
<img
|
||||
src="https://lmsys.org/images/blog/gb300_inferencex/img-1.png"
|
||||
alt="Unlocking 25x Inference Performance with SGLang on NVIDIA GB300 NVL72"
|
||||
style={{
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
objectFit: "cover",
|
||||
objectPosition: "center",
|
||||
display: "block",
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
<div style={{ padding: "0.9rem 1rem 1rem" }}>
|
||||
<p
|
||||
style={{
|
||||
margin: 0,
|
||||
fontWeight: 600,
|
||||
lineHeight: 1.35,
|
||||
fontSize: "0.98rem",
|
||||
}}
|
||||
>
|
||||
{"Unlocking 25x Inference Performance with SGLang on NVIDIA GB300 NVL72"}
|
||||
</p>
|
||||
<p
|
||||
style={{
|
||||
margin: "0.55rem 0 0",
|
||||
fontSize: "0.85rem",
|
||||
opacity: 0.75,
|
||||
}}
|
||||
>
|
||||
{"February 20, 2026"}
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
<a
|
||||
href="https://lmsys.org/blog/2026-02-19-gb300-longctx/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
style={{
|
||||
display: "block",
|
||||
border: "1px solid rgba(128, 128, 128, 0.3)",
|
||||
borderRadius: "0.75rem",
|
||||
overflow: "hidden",
|
||||
textDecoration: "none",
|
||||
color: "inherit",
|
||||
height: "100%",
|
||||
}}
|
||||
>
|
||||
<div
|
||||
style={{
|
||||
aspectRatio: "16 / 9",
|
||||
overflow: "hidden",
|
||||
background: "rgba(128, 128, 128, 0.15)",
|
||||
}}
|
||||
>
|
||||
<img
|
||||
src="https://lmsys.org/images/blog/gb300_longctx/cover.png"
|
||||
alt="Deploying DeepSeek on GB300 NVL72: Big Wins in Long-Context Inference"
|
||||
style={{
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
objectFit: "cover",
|
||||
objectPosition: "center",
|
||||
display: "block",
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
<div style={{ padding: "0.9rem 1rem 1rem" }}>
|
||||
<p
|
||||
style={{
|
||||
margin: 0,
|
||||
fontWeight: 600,
|
||||
lineHeight: 1.35,
|
||||
fontSize: "0.98rem",
|
||||
}}
|
||||
>
|
||||
{"Deploying DeepSeek on GB300 NVL72: Big Wins in Long-Context Inference"}
|
||||
</p>
|
||||
<p
|
||||
style={{
|
||||
margin: "0.55rem 0 0",
|
||||
fontSize: "0.85rem",
|
||||
opacity: 0.75,
|
||||
}}
|
||||
>
|
||||
{"February 19, 2026"}
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
{/* END_LMSYS_SGLANG_BLOG_CARDS */}
|
||||
|
||||
@@ -7,13 +7,11 @@ import json
|
||||
import os
|
||||
import re
|
||||
import urllib.request
|
||||
from dataclasses import asdict, dataclass
|
||||
from datetime import datetime, timezone
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
INDEX_PATH = ROOT / "index.mdx"
|
||||
OUTPUT_JSON_PATH = ROOT / "src" / "generated" / "lmsys_sglang_blogs.json"
|
||||
|
||||
START_MARKER = "{/* BEGIN_LMSYS_SGLANG_BLOG_CARDS */}"
|
||||
END_MARKER = "{/* END_LMSYS_SGLANG_BLOG_CARDS */}"
|
||||
@@ -256,20 +254,6 @@ def replace_generated_block(index_text: str, generated_cards: str) -> str:
|
||||
return updated_text
|
||||
|
||||
|
||||
def write_metadata(posts: list[BlogPost], total_blog_files: int) -> None:
|
||||
OUTPUT_JSON_PATH.parent.mkdir(parents=True, exist_ok=True)
|
||||
payload = {
|
||||
"generatedAt": datetime.now(timezone.utc).isoformat().replace("+00:00", "Z"),
|
||||
"sourceRepo": "https://github.com/lm-sys/lm-sys.github.io/tree/main/blog",
|
||||
"keywords": KEYWORDS,
|
||||
"maxCards": MAX_CARDS,
|
||||
"totalBlogFilesScanned": total_blog_files,
|
||||
"cardsPublished": len(posts),
|
||||
"posts": [asdict(post) for post in posts],
|
||||
}
|
||||
OUTPUT_JSON_PATH.write_text(json.dumps(payload, indent=2) + "\n", encoding="utf-8")
|
||||
|
||||
|
||||
def main() -> None:
|
||||
sources = download_blog_sources()
|
||||
relevant_posts: list[BlogPost] = []
|
||||
@@ -291,7 +275,6 @@ def main() -> None:
|
||||
if updated_index != current_index:
|
||||
INDEX_PATH.write_text(updated_index, encoding="utf-8")
|
||||
|
||||
write_metadata(posts=selected_posts, total_blog_files=len(sources))
|
||||
print(
|
||||
"Scanned "
|
||||
f"{len(sources)} blog files, matched {len(relevant_posts)} posts, "
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
{
|
||||
"generatedAt": "2026-04-07T00:14:40.777335Z",
|
||||
"sourceRepo": "https://github.com/lm-sys/lm-sys.github.io/tree/main/blog",
|
||||
"keywords": [
|
||||
"sglang",
|
||||
"sgl-project/sglang",
|
||||
"sgl-kernel",
|
||||
"sglang-jax",
|
||||
"sgl diffusion",
|
||||
"sglang diffusion"
|
||||
],
|
||||
"maxCards": 6,
|
||||
"totalBlogFilesScanned": 80,
|
||||
"cardsPublished": 6,
|
||||
"posts": [
|
||||
{
|
||||
"slug": "2026-03-25-gtc2026",
|
||||
"title": "Highlights of SGLang at NVIDIA GTC 2026",
|
||||
"url": "https://lmsys.org/blog/2026-03-25-gtc2026/",
|
||||
"image": "https://lmsys.org/images/blog/gtc2026/happyhour-crowd.jpg",
|
||||
"date": "March 31, 2026"
|
||||
},
|
||||
{
|
||||
"slug": "2026-03-25-eep-partial-failure-tolerance",
|
||||
"title": "Elastic EP in SGLang: Achieving Partial Failure Tolerance for DeepSeek MoE Deployments",
|
||||
"url": "https://lmsys.org/blog/2026-03-25-eep-partial-failure-tolerance/",
|
||||
"image": "https://lmsys.org/images/blog/eep-partial-failure-tolerance/figure.png",
|
||||
"date": "March 25, 2026"
|
||||
},
|
||||
{
|
||||
"slug": "2026-03-17-rocm-miles-rl-amd",
|
||||
"title": "ROCm Support for Miles: Large-Scale RL Post-Training on AMD Instinct\u2122 GPUs",
|
||||
"url": "https://lmsys.org/blog/2026-03-17-rocm-miles-rl-amd/",
|
||||
"image": "https://lmsys.org/images/blog/rocm_miles_rl/fig_1.png",
|
||||
"date": "March 17, 2026"
|
||||
},
|
||||
{
|
||||
"slug": "2026-03-11-run-nvidia-nemotron-3-super",
|
||||
"title": "SGLang Adds Day-0 Support for NVIDIA Nemotron 3 Super for building High-Efficiency Multi-Agent Systems",
|
||||
"url": "https://lmsys.org/blog/2026-03-11-run-nvidia-nemotron-3-super/",
|
||||
"image": "https://lmsys.org/images/blog/nemotron-3-super/figure_1.svg",
|
||||
"date": "March 11, 2026"
|
||||
},
|
||||
{
|
||||
"slug": "2026-02-20-gb300-inferencex",
|
||||
"title": "Unlocking 25x Inference Performance with SGLang on NVIDIA GB300 NVL72",
|
||||
"url": "https://lmsys.org/blog/2026-02-20-gb300-inferencex/",
|
||||
"image": "https://lmsys.org/images/blog/gb300_inferencex/img-1.png",
|
||||
"date": "February 20, 2026"
|
||||
},
|
||||
{
|
||||
"slug": "2026-02-19-gb300-longctx",
|
||||
"title": "Deploying DeepSeek on GB300 NVL72: Big Wins in Long-Context Inference",
|
||||
"url": "https://lmsys.org/blog/2026-02-19-gb300-longctx/",
|
||||
"image": "https://lmsys.org/images/blog/gb300_longctx/cover.png",
|
||||
"date": "February 19, 2026"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user