diff --git a/.env.example b/.env.example index 1b1e082..f10d863 100644 --- a/.env.example +++ b/.env.example @@ -23,7 +23,7 @@ PI_BIN= SUMMARY_SKILL=daily-paper-summary SUMMARY_CONCURRENCY=3 SUMMARY_TIMEOUT_SECONDS=900 -SUMMARY_MAX_RETRIES=1 +SUMMARY_MAX_RETRIES=2 SUMMARY_PDF_MODE=auto # ─── 调度 ───────────────────────────────── diff --git a/app/config.py b/app/config.py index d2f3ebc..a838f0d 100644 --- a/app/config.py +++ b/app/config.py @@ -33,7 +33,7 @@ class Settings(BaseSettings): SUMMARY_SKILL: str = "daily-paper-summary" SUMMARY_CONCURRENCY: int = 3 SUMMARY_TIMEOUT_SECONDS: int = 900 - SUMMARY_MAX_RETRIES: int = 1 + SUMMARY_MAX_RETRIES: int = 2 SUMMARY_PDF_MODE: str = "auto" # "auto" = ≤80k 用 inject,>80k 用 search;也可强制 "inject" / "search" # 调度 diff --git a/app/services/pdf_image_extractor.py b/app/services/pdf_image_extractor.py index ed7ea34..c733687 100644 --- a/app/services/pdf_image_extractor.py +++ b/app/services/pdf_image_extractor.py @@ -145,8 +145,11 @@ def _find_figure_top(page, caption: dict) -> float: bbox = img_info.get("bbox") if bbox is None: continue - # Rect 对象: x0, y0, x1, y1 - ix0, iy0, ix1, iy1 = bbox.x0, bbox.y0, bbox.x1, bbox.y1 + # bbox 可能是 Rect 对象或 tuple,兼容两种格式 + if hasattr(bbox, 'x0'): + ix0, iy0, ix1, iy1 = bbox.x0, bbox.y0, bbox.x1, bbox.y1 + else: + ix0, iy0, ix1, iy1 = bbox[0], bbox[1], bbox[2], bbox[3] if iy1 <= caption_y and iy1 > caption_y - _FIGURE_MAX_HEIGHT: if ix1 > cx0 and ix0 < cx1: above_blocks.append((ix0, iy0, ix1, iy1)) diff --git a/app/static/css/style.css b/app/static/css/style.css index 03d2313..946052a 100644 --- a/app/static/css/style.css +++ b/app/static/css/style.css @@ -1356,7 +1356,7 @@ mark { /* 管理后台日期输入框样式 */ .kami-date-input { cursor: pointer; - width: 110px; + min-width: 130px; } .kami-date-input::placeholder { color: var(--ink-muted); diff --git a/app/templates/admin_dashboard.html b/app/templates/admin_dashboard.html index e58d84d..3adfde5 100644 --- a/app/templates/admin_dashboard.html +++ b/app/templates/admin_dashboard.html @@ -92,7 +92,7 @@ {% for log in scheduler_history %} - {{ log.started_at.strftime('%m-%d %H:%M') if log.started_at else '-' }} + {{ log.started_at.strftime('%Y-%m-%d %H:%M') if log.started_at else '-' }} {% if log.status == 'success' %}✓{% elif log.status == 'running' %}⟳{% elif log.status == 'failed' %}✗{% else %}{{ log.status }}{% endif %} @@ -158,8 +158,8 @@ {{ log.date or '-' }} {{ log.papers_found or 0 }} {{ log.papers_new or 0 }} - {{ log.started_at.strftime('%m-%d %H:%M') if log.started_at else '-' }} - {{ log.completed_at.strftime('%m-%d %H:%M') if log.completed_at else '-' }} + {{ log.started_at.strftime('%Y-%m-%d %H:%M') if log.started_at else '-' }} + {{ log.completed_at.strftime('%Y-%m-%d %H:%M') if log.completed_at else '-' }} {{ (log.error[:60] + '...') if log.error and log.error|length > 60 else (log.error or '-') }} diff --git a/app/templates/admin_logs.html b/app/templates/admin_logs.html index 24ea1fd..0babb4c 100644 --- a/app/templates/admin_logs.html +++ b/app/templates/admin_logs.html @@ -34,8 +34,8 @@ {{ log.date or '-' }} {{ log.papers_found or 0 }} {{ log.papers_new or 0 }} - {{ log.started_at.strftime('%m-%d %H:%M') if log.started_at else '-' }} - {{ log.completed_at.strftime('%m-%d %H:%M') if log.completed_at else '-' }} + {{ log.started_at.strftime('%Y-%m-%d %H:%M') if log.started_at else '-' }} + {{ log.completed_at.strftime('%Y-%m-%d %H:%M') if log.completed_at else '-' }} {{ log.error[:80] + '...' if log.error and log.error|length > 80 else (log.error or '-') }} @@ -73,8 +73,8 @@ {% if job.status == 'success' %}✓ 成功{% elif job.status == 'running' %}⟳ 运行中{% elif job.status == 'failed' %}✗ 失败{% else %}{{ job.status }}{% endif %} {# djlint:on #} - {{ job.started_at.strftime('%m-%d %H:%M') if job.started_at else '-' }} - {{ job.completed_at.strftime('%m-%d %H:%M') if job.completed_at else '-' }} + {{ job.started_at.strftime('%Y-%m-%d %H:%M') if job.started_at else '-' }} + {{ job.completed_at.strftime('%Y-%m-%d %H:%M') if job.completed_at else '-' }} {{ job.error[:80] + '...' if job.error and job.error|length > 80 else (job.error or '-') }} diff --git a/app/templates/admin_papers.html b/app/templates/admin_papers.html index e1f1949..84cc263 100644 --- a/app/templates/admin_papers.html +++ b/app/templates/admin_papers.html @@ -62,7 +62,7 @@ {{ (paper.title_zh or paper.title_en)[:70] }}{% if (paper.title_zh or paper.title_en)|length > 70 %}...{% endif %} - {{ paper.paper_date.strftime('%m-%d') if paper.paper_date else '-' }} + {{ paper.paper_date.strftime('%Y-%m-%d') if paper.paper_date else '-' }} {{ paper.upvotes or 0 }} {% set st = paper_summary_statuses.get(paper.arxiv_id, 'none') %} diff --git a/app/templates/detail.html b/app/templates/detail.html index 06f6224..56e6925 100644 --- a/app/templates/detail.html +++ b/app/templates/detail.html @@ -23,7 +23,7 @@ endblock %} {% block content %} > 👍 {{ paper.upvotes }} {% if paper.crawled_at %} - {{ paper.crawled_at.strftime('%m-%d %H:%M') }} + {{ paper.crawled_at.strftime('%Y-%m-%d %H:%M') }} {% endif %} diff --git a/app/templates/partials/paper_card.html b/app/templates/partials/paper_card.html index 3a18e87..0338b25 100644 --- a/app/templates/partials/paper_card.html +++ b/app/templates/partials/paper_card.html @@ -20,7 +20,7 @@ {% endif %} - 👍 {{ paper.upvotes }} + 👍 {{ paper.upvotes }} {% if variant == 'search' and distances and paper.arxiv_id in distances %} 🎯 {{ "%.3f"|format(distances[paper.arxiv_id]) }} diff --git a/app/templates/partials/summary_list.html b/app/templates/partials/summary_list.html index d41014e..f1be5a3 100644 --- a/app/templates/partials/summary_list.html +++ b/app/templates/partials/summary_list.html @@ -21,7 +21,7 @@ {{ (paper.title_zh or paper.title_en)[:60] }}{% if (paper.title_zh or paper.title_en)|length > 60 %}...{% endif %} - {{ paper.paper_date.strftime('%m-%d') if paper.paper_date else '-' }} + {{ paper.paper_date.strftime('%Y-%m-%d') if paper.paper_date else '-' }} {% set st = ss.status if ss else 'none' %}