Skip to content

Commit 6abbc02

Browse files
committed
add paper section
Signed-off-by: bitliu <[email protected]>
1 parent bdb1cd4 commit 6abbc02

File tree

3 files changed

+352
-54
lines changed

3 files changed

+352
-54
lines changed

website/docusaurus.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ const config: Config = {
9191
},
9292
{
9393
to: '/publications',
94-
label: 'Publications',
94+
label: 'Publications & Talks',
9595
position: 'left',
9696
},
9797
{

website/src/pages/publications.js

Lines changed: 153 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
import React from 'react'
1+
import React, { useState } from 'react'
22
import Layout from '@theme/Layout'
33
import styles from './publications.module.css'
44

5-
const publications = [
5+
const papers = [
66
{
77
id: 1,
8+
type: 'paper',
89
title: 'When to Reason: Semantic Router for vLLM',
910
authors: 'Chen Wang, Xunzhuo Liu, Yuhan Liu, Yue Zhu, Xiangxi Mo, Junchen Jiang, Huamin Chen',
1011
venue: 'NeurIPS - MLForSys',
@@ -15,59 +16,178 @@ const publications = [
1516
],
1617
featured: true,
1718
},
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+
},
1832
]
1933

20-
function PublicationCard({ publication }) {
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: 'Red Hat',
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: true,
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: 'vLLM Community',
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: 'vLLM Community',
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+
2180
return (
22-
<div className={styles.publicationCard}>
23-
<h3 className={styles.paperTitle}>{publication.title}</h3>
24-
<p className={styles.paperAuthors}>{publication.authors}</p>
25-
<span className={styles.paperVenue}>
26-
{publication.venue}
27-
{' '}
28-
{publication.year}
29-
</span>
30-
<p className={styles.paperAbstract}>{publication.abstract}</p>
31-
<div className={styles.paperLinks}>
32-
{publication.links.map((link, index) => (
33-
<a
34-
key={index}
35-
href={link.url}
36-
className={`${styles.paperLink} ${
37-
link.type === 'paper' ? styles.paperLinkPrimary : styles.paperLinkSecondary
38-
}`}
39-
target="_blank"
40-
rel="noopener noreferrer"
41-
>
42-
{link.label}
43-
</a>
44-
))}
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>}
4587
</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 && <span className={styles.organization}>{item.organization}</span>}
94+
</p>
95+
96+
<span className={styles.itemVenue}>
97+
{item.venue} {item.year}
98+
</span>
99+
100+
<p className={styles.itemAbstract}>{item.abstract}</p>
101+
102+
{item.links && item.links.length > 0 && (
103+
<div className={styles.itemLinks}>
104+
{item.links.map((link, index) => (
105+
<a
106+
key={index}
107+
href={link.url}
108+
className={`${styles.itemLink} ${
109+
link.type === 'paper' ? styles.linkPrimary : styles.linkSecondary
110+
}`}
111+
target="_blank"
112+
rel="noopener noreferrer"
113+
>
114+
{link.label}
115+
</a>
116+
))}
117+
</div>
118+
)}
46119
</div>
47120
)
48121
}
49122

50123
export default function Publications() {
124+
const [activeFilter, setActiveFilter] = useState('all')
125+
126+
const allItems = [...papers, ...talks].sort((a, b) => {
127+
// Sort by featured first, then by year (descending), then by id
128+
if (a.featured && !b.featured) return -1
129+
if (!a.featured && b.featured) return 1
130+
if (a.year !== b.year) return parseInt(b.year) - parseInt(a.year)
131+
return a.id - b.id
132+
})
133+
134+
const filteredItems = activeFilter === 'all'
135+
? allItems
136+
: allItems.filter(item => item.type === activeFilter)
137+
138+
const paperCount = papers.length
139+
const talkCount = talks.length
140+
const totalCount = paperCount + talkCount
141+
51142
return (
52143
<Layout
53-
title="Publications"
54-
description="Latest research publications and scientific contributions from the vLLM Semantic Router project"
144+
title="Publications & Talks"
145+
description="Latest research publications, talks, and scientific contributions from the vLLM Semantic Router project"
55146
>
56147
<div className={styles.container}>
57148
<header className={styles.header}>
58-
<h1 className={styles.title}>🎓 Publications</h1>
149+
<h1 className={styles.title}>🎓 Publications & Talks</h1>
59150
<p className={styles.subtitle}>
60-
Discover community-driven latest research contributions in LLM and intelligent routing systems.
61-
Our work pushes the boundaries of efficient LLM inference.
151+
Discover community-driven research contributions and presentations in LLM and intelligent routing systems.
152+
Our work pushes the boundaries of efficient LLM inference through papers, talks, and community engagement.
62153
</p>
63154
</header>
64155

156+
<div className={styles.filterSection}>
157+
<div className={styles.filterButtons}>
158+
<button
159+
className={`${styles.filterButton} ${activeFilter === 'all' ? styles.active : ''}`}
160+
onClick={() => setActiveFilter('all')}
161+
>
162+
All ({totalCount})
163+
</button>
164+
<button
165+
className={`${styles.filterButton} ${activeFilter === 'paper' ? styles.active : ''}`}
166+
onClick={() => setActiveFilter('paper')}
167+
>
168+
📄 Papers ({paperCount})
169+
</button>
170+
<button
171+
className={`${styles.filterButton} ${activeFilter === 'talk' ? styles.active : ''}`}
172+
onClick={() => setActiveFilter('talk')}
173+
>
174+
🎤 Talks ({talkCount})
175+
</button>
176+
</div>
177+
</div>
178+
65179
<main>
66180
<div className={styles.publicationsList}>
67-
{publications.map(publication => (
68-
<PublicationCard key={publication.id} publication={publication} />
181+
{filteredItems.map(item => (
182+
<PublicationCard key={item.id} item={item} />
69183
))}
70184
</div>
185+
186+
{filteredItems.length === 0 && (
187+
<div className={styles.emptyState}>
188+
<p>No {activeFilter === 'all' ? 'items' : activeFilter + 's'} found.</p>
189+
</div>
190+
)}
71191
</main>
72192
</div>
73193
</Layout>

0 commit comments

Comments
 (0)