Skip to content

Commit 79777a7

Browse files
committed
add paper section
Signed-off-by: bitliu <[email protected]>
1 parent 1a4e1e6 commit 79777a7

File tree

3 files changed

+634
-4
lines changed

3 files changed

+634
-4
lines changed

website/docusaurus.config.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,11 @@ const config: Config = {
8484
position: 'left',
8585
label: 'Documentation',
8686
},
87+
{
88+
to: '/publications',
89+
label: 'Publications',
90+
position: 'left',
91+
},
8792
{
8893
to: '/blog',
8994
label: 'Blog',
@@ -92,18 +97,18 @@ const config: Config = {
9297
{
9398
type: 'dropdown',
9499
label: 'Community',
95-
position: 'left',
100+
position: 'right',
96101
items: [
97102
{
98-
label: 'Team',
103+
label: 'vLLM-SR Team',
99104
to: '/community/team',
100105
},
101106
{
102107
label: 'Work Groups',
103108
to: '/community/work-groups',
104109
},
105110
{
106-
label: 'Promotion',
111+
label: 'Membership Promotion',
107112
to: '/community/promotion',
108113
},
109114
{
@@ -131,7 +136,7 @@ const config: Config = {
131136
{
132137
type: 'dropdown',
133138
label: 'Roadmap',
134-
position: 'left',
139+
position: 'right',
135140
items: [
136141
{
137142
label: 'v0.1',

website/src/pages/publications.js

Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
1+
import React, { useState } from 'react'
2+
import Layout from '@theme/Layout'
3+
import styles from './publications.module.css'
4+
5+
const papers = [
6+
{
7+
id: 1,
8+
type: 'paper',
9+
title: 'When to Reason: Semantic Router for vLLM',
10+
authors: 'Chen Wang, Xunzhuo Liu, Yuhan Liu, Yue Zhu, Xiangxi Mo, Junchen Jiang, Huamin Chen',
11+
venue: 'NeurIPS - MLForSys',
12+
year: '2025',
13+
abstract: 'We propose vLLM semantic router integrated with vLLM that selectively applies reasoning only when beneficial, achieving over 10 percentage point accuracy gains while nearly halving latency and token usage',
14+
links: [
15+
{ type: 'paper', url: 'https://mlforsystems.org', label: '📄 Paper' },
16+
],
17+
featured: true,
18+
},
19+
{
20+
id: 2,
21+
type: 'paper',
22+
title: 'Semantic Inference Routing Protocol (SIRP)',
23+
authors: 'Huamin Chen, Luay Jalil',
24+
venue: 'IETF Draft',
25+
year: '2025',
26+
abstract: 'A protocol specification for semantic inference routing that enables intelligent request routing based on semantic understanding and inference requirements.',
27+
links: [
28+
{ type: 'paper', url: 'https://datatracker.ietf.org/doc/html/draft-chen-nmrg-semantic-inference-routing', label: '📄 IETF Draft' },
29+
],
30+
featured: true,
31+
},
32+
]
33+
34+
const talks = [
35+
{
36+
id: 3,
37+
type: 'talk',
38+
title: 'Intelligent LLM Routing: A New Paradigm for Multi-Model AI Orchestration in Kubernetes',
39+
speakers: 'Chen Wang, Huamin Chen',
40+
venue: 'KubeCon NA 2025',
41+
organization: '',
42+
year: '2025',
43+
abstract: 'Exploring how intelligent LLM routing transforms multi-model AI orchestration in Kubernetes environments, enabling efficient resource utilization and improved performance.',
44+
links: [
45+
{ type: 'event', url: 'https://kccncna2025.sched.com/event/27FaI?iframe=no', label: '🎤 Event Page' },
46+
],
47+
featured: false,
48+
},
49+
{
50+
id: 4,
51+
type: 'talk',
52+
title: 'vLLM Semantic Router: Unlock the Power of Intelligent Routing',
53+
speakers: 'Xunzhuo Liu',
54+
venue: 'vLLM Meetup Beijing',
55+
organization: '',
56+
year: '2025',
57+
abstract: 'A deep dive into vLLM Semantic Router capabilities, demonstrating how intelligent routing can unlock new possibilities for efficient LLM inference.',
58+
links: [],
59+
featured: false,
60+
},
61+
{
62+
id: 5,
63+
type: 'talk',
64+
title: 'AI-Powered vLLM Semantic Router',
65+
speakers: 'Huamin Chen',
66+
venue: 'vLLM Office Hours',
67+
organization: '',
68+
year: '2025',
69+
abstract: 'An overview of AI-powered features in vLLM Semantic Router, showcasing the latest developments and community contributions.',
70+
links: [
71+
{ type: 'video', url: 'https://www.youtube.com/live/b-ciRqvbtsk', label: '📹 Watch Recording' },
72+
],
73+
featured: false,
74+
},
75+
]
76+
77+
function PublicationCard({ item }) {
78+
const isPaper = item.type === 'paper'
79+
80+
return (
81+
<div className={`${styles.publicationCard} ${isPaper ? styles.paperCard : styles.talkCard}`}>
82+
<div className={styles.cardHeader}>
83+
<span className={`${styles.typeTag} ${isPaper ? styles.paperTag : styles.talkTag}`}>
84+
{isPaper ? '📄 Paper' : '🎤 Talk'}
85+
</span>
86+
{item.featured && <span className={styles.featuredTag}>⭐ Featured</span>}
87+
</div>
88+
89+
<h3 className={styles.itemTitle}>{item.title}</h3>
90+
91+
<p className={styles.itemAuthors}>
92+
{isPaper ? item.authors : item.speakers}
93+
{item.organization && (
94+
<span className={styles.organization}>
95+
{' '}
96+
97+
{item.organization}
98+
</span>
99+
)}
100+
</p>
101+
102+
<span className={styles.itemVenue}>
103+
{item.venue}
104+
{' '}
105+
{item.year}
106+
</span>
107+
108+
<p className={styles.itemAbstract}>{item.abstract}</p>
109+
110+
{item.links && item.links.length > 0 && (
111+
<div className={styles.itemLinks}>
112+
{item.links.map((link, index) => (
113+
<a
114+
key={index}
115+
href={link.url}
116+
className={`${styles.itemLink} ${
117+
link.type === 'paper' ? styles.linkPrimary : styles.linkSecondary
118+
}`}
119+
target="_blank"
120+
rel="noopener noreferrer"
121+
>
122+
{link.label}
123+
</a>
124+
))}
125+
</div>
126+
)}
127+
</div>
128+
)
129+
}
130+
131+
export default function Publications() {
132+
const [activeFilter, setActiveFilter] = useState('all')
133+
134+
const allItems = [...papers, ...talks].sort((a, b) => {
135+
// Sort by featured first, then by year (descending), then by id
136+
if (a.featured && !b.featured) return -1
137+
if (!a.featured && b.featured) return 1
138+
if (a.year !== b.year) return parseInt(b.year) - parseInt(a.year)
139+
return a.id - b.id
140+
})
141+
142+
const filteredItems = activeFilter === 'all'
143+
? allItems
144+
: allItems.filter(item => item.type === activeFilter)
145+
146+
const paperCount = papers.length
147+
const talkCount = talks.length
148+
const totalCount = paperCount + talkCount
149+
150+
return (
151+
<Layout
152+
title="Papers & Talks"
153+
description="Latest research publications, talks, and scientific contributions from the vLLM Semantic Router project"
154+
>
155+
<div className={styles.container}>
156+
<header className={styles.header}>
157+
<h1 className={styles.title}>🎓 Papers & Talks</h1>
158+
<p className={styles.subtitle}>
159+
Innovation thrives when great minds come together ❤️
160+
<br></br>
161+
162+
Let us explore the next-gen
163+
{' '}
164+
<bold>System Intelligence</bold>
165+
{' '}
166+
in LLM Era 🚀
167+
</p>
168+
</header>
169+
170+
<div className={styles.filterSection}>
171+
<div className={styles.filterButtons}>
172+
<button
173+
className={`${styles.filterButton} ${activeFilter === 'all' ? styles.active : ''}`}
174+
onClick={() => setActiveFilter('all')}
175+
>
176+
All (
177+
{totalCount}
178+
)
179+
</button>
180+
<button
181+
className={`${styles.filterButton} ${activeFilter === 'paper' ? styles.active : ''}`}
182+
onClick={() => setActiveFilter('paper')}
183+
>
184+
📄 Papers (
185+
{paperCount}
186+
)
187+
</button>
188+
<button
189+
className={`${styles.filterButton} ${activeFilter === 'talk' ? styles.active : ''}`}
190+
onClick={() => setActiveFilter('talk')}
191+
>
192+
🎤 Talks (
193+
{talkCount}
194+
)
195+
</button>
196+
</div>
197+
</div>
198+
199+
<main>
200+
<div className={styles.publicationsList}>
201+
{filteredItems.map(item => (
202+
<PublicationCard key={item.id} item={item} />
203+
))}
204+
</div>
205+
206+
{filteredItems.length === 0 && (
207+
<div className={styles.emptyState}>
208+
<p>
209+
No
210+
{activeFilter === 'all' ? 'items' : activeFilter + 's'}
211+
{' '}
212+
found.
213+
</p>
214+
</div>
215+
)}
216+
</main>
217+
</div>
218+
</Layout>
219+
)
220+
}

0 commit comments

Comments
 (0)