From 9f2e0abe25fe1f42523a86c2a4464b69ea905d3b Mon Sep 17 00:00:00 2001 From: FenjuFu <92919259+FenjuFu@users.noreply.github.com> Date: Wed, 11 Nov 2026 14:32:20 +0800 Subject: [PATCH] feat: group SparkLLM download breakthroughs on one timeline row Signed-off-by: FenjuFu <92919259+FenjuFu@users.noreply.github.com> --- src/pages/milestone.astro | 235 ++++++++++++++++++++++++++------------ 1 file changed, 159 insertions(+), 76 deletions(-) diff --git a/src/pages/milestone.astro b/src/pages/milestone.astro index a9c217c..7006993 100644 --- a/src/pages/milestone.astro +++ b/src/pages/milestone.astro @@ -22,6 +22,56 @@ const projectMeta: Record `${point.dateZh}:${point.descriptionZh}`).join(' '), + descriptionEn: sparkDownloadCheckpoints.map((point) => `${point.dateEn}: ${point.descriptionEn}`).join(' '), }, { id: 'spark-pocketpal', @@ -341,20 +390,7 @@ const milestones: Array<{ 'In the PocketPal Agentic Web Search evaluation, Spark-X2.5-4B and Spark-X2.5-1.7B appear first and third in the table, with Fresh accuracy of 89% and 87%, respectively. Both are marked on the accuracy-versus-model-size Pareto frontier, with Q4_K_M weights of 2.6 GB and 1.1 GB. Positions refer to table order; the leading group has overlapping 90% confidence intervals.', link: { href: 'https://pocketpal.dev/evals/web-search', zh: 'PocketPal 评测', en: 'PocketPal evaluation' }, }, - { - id: 'spark-3-5m-downloads', - dateZh: '2026.10.30', - dateEn: 'Oct 30, 2026', - datetime: '2026-10-30', - project: 'sparkllm', - icon: 'tabler:download', - titleZh: 'Spark-X2.5 和 Spark-X2.6 累计下载突破 350 万', - titleEn: 'Spark-X2.5 and Spark-X2.6 passed 3.5 million downloads', - descriptionZh: - 'Spark-X2.5 和 Spark-X2.6 官方模型及社区衍生模型(第三方量化、微调和格式转换)在 Hugging Face 的累计下载量合计突破 350 万次。', - descriptionEn: - 'Combined cumulative downloads of the official Spark-X2.5 and Spark-X2.6 models and their community derivatives (third-party quantizations, fine-tunes, and format conversions) on Hugging Face passed 3.5 million.', - }, + { id: 'agent-shanghai-award', dateZh: '2026.10.30', @@ -383,30 +419,12 @@ const milestones: Array<{ descriptionEn: 'Astron Agent’s 2026 OSCAR Open Source+ Peak Practice recognition is scheduled for November 10, 2026.', }, - { - id: 'spark-5m-downloads', - dateZh: '2026.11.09', - dateEn: 'Nov 9, 2026', - datetime: '2026-11-09T03:36:39+08:00', - project: 'sparkllm', - icon: 'tabler:download', - titleZh: 'Spark-X2.5 和 Spark-X2.6 累计下载 / 拉取突破 500 万', - titleEn: 'Spark-X2.5 and Spark-X2.6 passed 5M downloads / pulls', - descriptionZh: - 'SparkLLM 于北京时间 2026 年 11 月 9 日 03:36 发布:Spark-X2.5 和 Spark-X2.6 在六个平台累计下载 / 拉取突破 500 万,包含 276 个社区衍生模型。此为跨平台累计口径,不是单一平台下载量或独立用户数。', - descriptionEn: - 'Announced by SparkLLM on November 9, 2026 at 03:36 Beijing time: Spark-X2.5 and Spark-X2.6 passed 5M cumulative downloads / pulls across six platforms, including 276 community derivatives. This is a cross-platform total, not downloads on a single platform or unique users.', - link: { - href: 'https://x.com/SparkLLM/status/2119514456971485233', - zh: '查看官方公告', - en: 'View the official announcement', - }, - }, ]; type GanttItem = { sourceId: string; - kind: 'range' | 'point'; + kind: 'range' | 'point' | 'checkpoints'; + checkpoints?: typeof sparkDownloadCheckpoints; start: number; end?: number; titleZh: string; @@ -671,16 +689,19 @@ const ganttGroups: Array<{ project: ProjectKey; items: GanttItem[] }> = [ barZh: '奖项 · 09.11', barEn: 'Award · Sep 11', }, + { - sourceId: 'spark-million-downloads', - kind: 'point', + sourceId: 'spark-downloads', + kind: 'checkpoints', start: 13, - titleZh: 'Spark-X2.5 累计下载突破百万', - titleEn: 'Spark-X2.5 passed 1M downloads', - dateZh: '2026.09.29', - dateEn: 'Sep 29, 2026', - barZh: '百万下载 · 09.29', - barEn: '1M downloads · Sep 29', + end: 15, + titleZh: 'SparkLLM 下载量突破', + titleEn: 'SparkLLM download milestones', + dateZh: '2026.09.29—2026.11.09', + dateEn: 'Sep 29—Nov 9, 2026', + barZh: '100 万 → 350 万 → 500 万', + barEn: '1M → 3.5M → 5M', + checkpoints: sparkDownloadCheckpoints, }, { sourceId: 'spark-pocketpal', @@ -693,28 +714,6 @@ const ganttGroups: Array<{ project: ProjectKey; items: GanttItem[] }> = [ barZh: '#1 & #3 · 10.05', barEn: '#1 & #3 · Oct 5', }, - { - sourceId: 'spark-3-5m-downloads', - kind: 'point', - start: 14, - titleZh: 'Spark-X2.5 和 Spark-X2.6 累计下载突破 350 万', - titleEn: 'Spark-X2.5 and Spark-X2.6 passed 3.5M downloads', - dateZh: '2026.10.30', - dateEn: 'Oct 30, 2026', - barZh: '350 万下载 · 10.30', - barEn: '3.5M downloads · Oct 30', - }, - { - sourceId: 'spark-5m-downloads', - kind: 'point', - start: 15, - titleZh: 'Spark-X2.5 和 Spark-X2.6 累计下载 / 拉取突破 500 万', - titleEn: 'Spark-X2.5 and Spark-X2.6 passed 5M downloads / pulls', - dateZh: '2026.11.09', - dateEn: 'Nov 9, 2026', - barZh: '500 万下载 / 拉取 · 11.09', - barEn: '5M downloads / pulls · Nov 9', - }, ], }, { @@ -774,7 +773,10 @@ for (const milestone of milestones) { } } -const ganttSignalCount = ganttGroups.reduce((total, group) => total + group.items.length, 0); +const ganttSignalCount = ganttGroups.reduce( + (total, group) => total + group.items.reduce((count, item) => count + (item.checkpoints?.length ?? 1), 0), + 0 +); const stats = [ { @@ -1036,7 +1038,10 @@ const periodEn = 'Sep 2025 — Nov 2026';
))}
- {item.kind === 'range' ? ( + {item.kind === 'checkpoints' ? ( + item.checkpoints?.map((point, index) => ( +
+
+ )) + ) : item.kind === 'range' ? (
.milestone-gantt__point { + left: 50%; + } + + .milestone-gantt__checkpoint-copy { + position: absolute; + right: calc(50% + 1rem); + display: grid; + width: max-content; + max-width: 15rem; + gap: 0.2rem; + text-align: right; + font-size: 0.75rem; + line-height: 1.4; + } + + .milestone-gantt__checkpoint-copy time { + color: var(--rc-text-faint); + } + + .milestone-gantt__checkpoint-copy a { + color: var(--rc-blue); + text-decoration: underline; + }