#!/usr/bin/env python import datetime import gradio as gr import pandas as pd from apscheduler.schedulers.background import BackgroundScheduler from gradio_calendar import Calendar from papers import PaperList, get_df DESCRIPTION = "# Papers Leaderboard\nExplore the latest papers and filter by date, title, or abstract keywords." FOOT_NOTE = "Community: https://discord.gg/openfreeai" paper_list = PaperList(get_df()) def update_paper_list() -> None: global paper_list paper_list = PaperList(get_df()) scheduler = BackgroundScheduler() scheduler.add_job(func=update_paper_list, trigger="cron", hour="*", timezone="UTC", misfire_grace_time=60) scheduler.start() def update_df() -> gr.Dataframe: return gr.Dataframe(value=paper_list.df_prettified) def update_num_papers(df: pd.DataFrame) -> str: return f"{len(df)} / {len(paper_list.df_raw)}" def search( start_date: datetime.datetime, end_date: datetime.datetime, search_title: str, search_abstract: str, max_num_to_retrieve: int, ) -> pd.DataFrame: return paper_list.search(start_date, end_date, search_title, search_abstract, max_num_to_retrieve) # ------------------------------------------------------------------ # CSS # ------------------------------------------------------------------ css = """ body { margin: 0; padding: 0; background: linear-gradient(135deg, #eef2ff 0%, #fdfdfd 100%); font-family: "Helvetica Neue", Arial, sans-serif; } #hero-section { background: linear-gradient(135deg, #3b82f6 0%, #9333ea 100%); padding: 2rem; border-radius: 0.5rem; margin-bottom: 1rem; color: white; } #hero-section h1 { font-size: 2.2rem; margin-bottom: 0.5rem; } .search-container { background-color: #ffffffdd; backdrop-filter: blur(6px); border-radius: 0.75rem; padding: 1rem 1.5rem; box-shadow: 0 3px 5px rgba(0,0,0,0.1); margin-bottom: 1rem; } .card { background-color: #fff; border-radius: 0.75rem; padding: 1.5rem; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); margin-bottom: 1rem; } #table table { border-collapse: collapse; width: 100%; background: #fafafa; } #table th, #table td { border: 1px solid #e5e7eb; padding: 0.5rem; text-align: left; } #table thead { background-color: #f3f4f6; font-weight: 600; } .footer { color: #6b7280; font-size: 0.9rem; text-align: center; margin-top: 2rem; } """ with gr.Blocks(css=css) as demo: # Hero 섹션 gr.HTML( """
Explore the latest papers and filter by date, title, or abstract keywords.