1- import React from 'react'
1+ import React , { useState } from 'react'
22import Layout from '@theme/Layout'
33import 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
50123export 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