From 15d81e4f88d2e2a22952138b46dcd6039e4b19b8 Mon Sep 17 00:00:00 2001 From: Color2333 <1552429809@qq.com> Date: Tue, 17 Mar 2026 15:33:12 +0800 Subject: [PATCH 01/17] =?UTF-8?q?feat(brief):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E7=A0=94=E7=A9=B6=E7=AE=80=E6=8A=A5=E6=8E=92=E7=89=88=E5=92=8C?= =?UTF-8?q?=E8=A7=86=E8=A7=89=E5=B1=82=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增「今日焦点」区域,整合 AI 洞察和精读精选 - 增强卡片视觉层次:焦点卡 > 精读卡 > 推荐卡 > 普通论文卡 - 优化暗色模式适配,所有卡片支持深色主题 - 添加 hover 动画效果和渐变样式 - 增强统计卡片、徽章和标签的视觉表现 - 支持摘要折叠/展开交互 影响范围: - packages/ai/brief_service.py: HTML 模板重构 - frontend/src/pages/DailyBrief.tsx: CSS 样式覆盖增强 --- frontend/src/pages/DailyBrief.tsx | 541 ++++++++++++++++++++---------- packages/ai/brief_service.py | 249 ++++++++------ 2 files changed, 511 insertions(+), 279 deletions(-) diff --git a/frontend/src/pages/DailyBrief.tsx b/frontend/src/pages/DailyBrief.tsx index 4104859..7455c6e 100644 --- a/frontend/src/pages/DailyBrief.tsx +++ b/frontend/src/pages/DailyBrief.tsx @@ -304,11 +304,11 @@ export default function DailyBrief() { } /** - * 覆盖后端生成的 HTML 简报样式,适配 app 主题 + 暗色模式 + * 覆盖后端生成的 HTML 简报样式,适配 app 主题 + 暗色模式 + 增强视觉层次 */ const briefContentStyles = ` .brief-content { - max-width: 720px; + max-width: 800px; margin: 0 auto; color: var(--color-ink, #1a1a2e); font-family: inherit; @@ -326,319 +326,504 @@ const briefContentStyles = ` box-sizing: border-box; } -/* 标题 */ +/* 标题增强 */ .brief-content h1 { - font-size: 1.5rem; - font-weight: 800; - margin-bottom: 4px; - color: var(--color-ink, #111); + font-size: 1.75rem; + font-weight: 900; + margin-bottom: 8px; + background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-primary) 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; } .brief-content .subtitle { - font-size: 0.8rem; + font-size: 0.85rem; color: var(--color-ink-tertiary, #888); - margin-bottom: 1.5rem; + margin-bottom: 2rem; + display: flex; + align-items: center; + gap: 6px; +} +.brief-content .subtitle::before { + content: "📅"; } -/* 统计卡片 */ +/* 统计卡片增强 */ .brief-content .stats { display: grid !important; grid-template-columns: repeat(4, 1fr) !important; - gap: 12px; - margin-bottom: 2rem; + gap: 16px !important; + margin-bottom: 2.5rem; } .brief-content .stat-card { - background: var(--color-page, #f8f9fa) !important; + background: linear-gradient(135deg, var(--color-surface) 0%, color-mix(in srgb, var(--color-primary) 3%, var(--color-surface)) 100%) !important; border: 1px solid var(--color-border, #e2e8f0) !important; - border-radius: 12px !important; - padding: 16px !important; + border-radius: 14px !important; + padding: 20px !important; text-align: center; + transition: transform 0.2s, box-shadow 0.2s; +} +.brief-content .stat-card:hover { + transform: translateY(-3px); + box-shadow: 0 8px 20px color-mix(in srgb, var(--color-primary) 15%, transparent); } .brief-content .stat-num { - font-size: 2rem !important; - font-weight: 800 !important; - color: var(--color-primary, #6366f1) !important; + font-size: 2.25rem !important; + font-weight: 900 !important; + background: linear-gradient(135deg, var(--color-primary) 0%, color-mix(in srgb, var(--color-primary) 80%, black) 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; line-height: 1.2; } .brief-content .stat-label { font-size: 0.7rem !important; color: var(--color-ink-tertiary, #888) !important; - margin-top: 4px; + margin-top: 8px; text-transform: uppercase; - letter-spacing: 0.05em; + letter-spacing: 0.08em; + font-weight: 700; +} + +/* 焦点区域 - 最高优先级 */ +.brief-content .focus-zone { + background: linear-gradient(135deg, color-mix(in srgb, var(--color-success) 8%, var(--color-surface)) 0%, color-mix(in srgb, var(--color-success) 12%, var(--color-surface)) 100%) !important; + border: 2px solid var(--color-success, #22c55e) !important; + border-radius: 18px !important; + padding: 24px !important; + margin-bottom: 36px !important; +} +.brief-content .focus-title { + font-size: 1.25rem !important; + font-weight: 900 !important; + color: color-mix(in srgb, var(--color-success) 80%, black) !important; + margin-bottom: 20px !important; + display: flex; + align-items: center; + gap: 10px; +} +.brief-content .focus-title::before { + content: "🎯"; + font-size: 1.5rem; } -/* 区块标题 */ +/* AI 洞察盒子增强 */ +.brief-content .ai-insight-box { + background: var(--color-surface) !important; + border-radius: 14px !important; + padding: 20px !important; + border-left: 5px solid var(--color-success, #22c55e) !important; + box-shadow: 0 4px 12px color-mix(in srgb, var(--color-success) 10%, transparent); +} +.brief-content .ai-insight-header { + display: flex; + align-items: center; + gap: 10px; + margin-bottom: 14px; +} +.brief-content .ai-insight-icon { + font-size: 1.5rem; +} +.brief-content .ai-insight-title { + font-weight: 800 !important; + color: color-mix(in srgb, var(--color-success) 80%, black) !important; + font-size: 1rem !important; +} +.brief-content .ai-insight-content { + font-size: 0.9rem; + line-height: 1.9; + color: var(--color-ink-secondary, #4b5563); +} + +/* 区块标题增强 */ .brief-content .section { - margin-bottom: 2rem; + margin-bottom: 2.5rem; } .brief-content .section-title { - font-size: 1rem !important; - font-weight: 700 !important; + font-size: 1.1rem !important; + font-weight: 800 !important; color: var(--color-ink, #111) !important; - margin-bottom: 0.75rem; - padding-bottom: 0.5rem; - border-bottom: 2px solid var(--color-primary, #6366f1) !important; + margin-bottom: 1rem; + padding-bottom: 10px; + border-bottom: 2px solid var(--color-border, #e2e8f0) !important; display: flex; align-items: center; - gap: 6px; + gap: 10px; +} +.brief-content .section-title::before { + content: ""; + display: inline-block; + width: 10px; + height: 10px; + border-radius: 3px; + background: linear-gradient(135deg, var(--color-primary) 0%, color-mix(in srgb, var(--color-primary) 70%, black) 100%); } -/* 推荐卡片 */ +/* 推荐卡片增强 */ .brief-content .rec-card { - background: var(--color-surface, #fff) !important; - border: 1px solid var(--color-border, #e2e8f0) !important; - border-left: 3px solid var(--color-primary, #6366f1) !important; - border-radius: 10px !important; - padding: 14px 16px !important; - margin-bottom: 10px; - transition: box-shadow 0.2s; + background: linear-gradient(135deg, color-mix(in srgb, var(--color-primary) 8%, var(--color-surface)) 0%, color-mix(in srgb, var(--color-primary) 12%, var(--color-surface)) 100%) !important; + border: 2px solid color-mix(in srgb, var(--color-primary) 30%, var(--color-border)) !important; + border-left: 4px solid var(--color-primary) !important; + border-radius: 14px !important; + padding: 18px !important; + margin-bottom: 14px; + transition: all 0.2s; + cursor: pointer; } .brief-content .rec-card:hover { - box-shadow: 0 2px 8px rgba(0,0,0,0.06); + transform: translateY(-2px); + box-shadow: 0 6px 16px color-mix(in srgb, var(--color-primary) 20%, transparent); + border-color: var(--color-primary); } .brief-content .rec-title { - font-weight: 600 !important; - font-size: 0.85rem !important; + font-weight: 700 !important; + font-size: 0.95rem !important; color: var(--color-ink, #111) !important; - line-height: 1.4; + line-height: 1.5; } .brief-content .rec-meta { - font-size: 0.7rem !important; - color: var(--color-ink-tertiary, #999) !important; - margin-top: 4px; + font-size: 0.75rem !important; + color: var(--color-ink-tertiary, #6b7280) !important; + margin-top: 8px; + display: flex; + align-items: center; + gap: 6px; + flex-wrap: wrap; } .brief-content .rec-reason { - font-size: 0.8rem !important; - color: var(--color-ink-secondary, #666) !important; - margin-top: 6px; - line-height: 1.5; + font-size: 0.85rem !important; + color: var(--color-ink-secondary, #4b5563) !important; + margin-top: 10px; + line-height: 1.7; + font-style: italic; } -/* 关键词标签 */ +/* 关键词标签增强 */ .brief-content .kw-tag { display: inline-flex !important; align-items: center; - background: var(--color-primary, #6366f1) !important; - background: color-mix(in srgb, var(--color-primary, #6366f1) 12%, transparent) !important; - color: var(--color-primary, #6366f1) !important; + gap: 5px; + background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%) !important; + color: #92400e !important; border-radius: 9999px !important; - padding: 4px 12px !important; - font-size: 0.72rem !important; - font-weight: 500 !important; - margin: 3px !important; - border: 1px solid color-mix(in srgb, var(--color-primary, #6366f1) 20%, transparent); + padding: 7px 14px !important; + font-size: 0.8rem !important; + font-weight: 700 !important; + margin: 5px !important; + border: 2px solid #f59e0b !important; + transition: transform 0.2s; +} +.brief-content .kw-tag:hover { + transform: scale(1.08); +} +.brief-content .kw-tag::before { + content: "🔥"; + font-size: 0.9rem; +} + +/* 主题分组增强 */ +.brief-content .topic-group { + margin-bottom: 28px; + background: var(--color-surface) !important; + border-radius: 14px !important; + padding: 18px !important; + border: 1px solid var(--color-border, #e2e8f0) !important; +} +.brief-content .topic-name { + font-size: 0.95rem !important; + font-weight: 800 !important; + color: var(--color-primary, #6366f1) !important; + margin-bottom: 14px; + display: flex; + align-items: center; + gap: 8px; + padding-bottom: 10px; + border-bottom: 1px dashed var(--color-border, #e2e8f0) !important; +} +.brief-content .topic-name::before { + content: "📁"; + font-size: 1rem; } -/* 论文卡片 */ +/* 论文卡片增强 */ .brief-content .paper-item { background: var(--color-surface, #fff) !important; - border: 1px solid var(--color-border, #e2e8f0) !important; - border-radius: 10px !important; - padding: 14px 16px !important; - margin-bottom: 8px; - transition: border-color 0.2s; + border: 1.5px solid var(--color-border, #e2e8f0) !important; + border-radius: 12px !important; + padding: 16px !important; + margin-bottom: 12px; + transition: all 0.2s; + cursor: pointer; } .brief-content .paper-item:hover { - border-color: color-mix(in srgb, var(--color-primary, #6366f1) 40%, var(--color-border, #e2e8f0)); + border-color: color-mix(in srgb, var(--color-primary) 50%, var(--color-border)); + box-shadow: 0 4px 12px color-mix(in srgb, var(--color-primary) 10%, transparent); + transform: translateY(-2px); +} +.brief-content .paper-header { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 12px; + margin-bottom: 10px; } .brief-content .paper-title { - font-weight: 600 !important; - font-size: 0.85rem !important; + font-weight: 700 !important; + font-size: 0.9rem !important; color: var(--color-ink, #111) !important; - line-height: 1.4; + line-height: 1.5; } .brief-content .paper-id { - font-size: 0.65rem !important; - color: var(--color-ink-tertiary, #aaa) !important; - margin-top: 3px; + font-size: 0.7rem !important; + color: var(--color-ink-tertiary, #9ca3af) !important; font-family: ui-monospace, monospace !important; + margin-bottom: 8px; } .brief-content .paper-summary { - font-size: 0.8rem !important; - color: var(--color-ink-secondary, #555) !important; - margin-top: 8px !important; - line-height: 1.6; - white-space: pre-wrap; -} - -/* 主题分组 */ -.brief-content .topic-group { - margin-bottom: 1.5rem; -} -.brief-content .topic-name { font-size: 0.85rem !important; - font-weight: 700 !important; - color: var(--color-primary, #6366f1) !important; - margin-bottom: 8px; - display: flex; - align-items: center; - gap: 6px; -} -.brief-content .topic-name::before { - content: ""; - display: inline-block; - width: 6px; - height: 6px; - border-radius: 50%; - background: var(--color-primary, #6366f1); + color: var(--color-ink-secondary, #6b7280) !important; + margin-top: 10px !important; + line-height: 1.7; + max-height: 65px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + transition: max-height 0.3s; } - -/* 页脚 */ -.brief-content .footer { - text-align: center; - color: var(--color-ink-tertiary, #aaa) !important; - font-size: 0.7rem !important; - margin-top: 2.5rem; - padding-top: 1rem; - border-top: 1px solid var(--color-border, #e2e8f0) !important; +.brief-content .paper-item:hover .paper-summary { + max-height: 300px; } -/* Deep read cards */ +/* Deep read cards 增强 */ .brief-content .deep-card { - background: linear-gradient(135deg, color-mix(in srgb, var(--color-primary) 5%, var(--color-surface)) 0%, color-mix(in srgb, var(--color-primary) 10%, var(--color-surface)) 100%) !important; - border: 1px solid color-mix(in srgb, var(--color-primary) 30%, var(--color-border)) !important; - border-left: 4px solid var(--color-primary) !important; - border-radius: 12px !important; - padding: 18px !important; - margin-bottom: 14px; - transition: box-shadow 0.2s; + background: linear-gradient(135deg, color-mix(in srgb, var(--color-primary) 10%, var(--color-surface)) 0%, color-mix(in srgb, var(--color-primary) 15%, var(--color-surface)) 100%) !important; + border: 2px solid color-mix(in srgb, var(--color-primary) 40%, var(--color-border)) !important; + border-left: 5px solid var(--color-primary) !important; + border-radius: 16px !important; + padding: 20px !important; + margin-bottom: 18px; + transition: all 0.2s; + cursor: pointer; } .brief-content .deep-card:hover { - box-shadow: 0 4px 12px rgba(99, 102, 241, 0.12); + transform: translateY(-3px); + box-shadow: 0 8px 20px color-mix(in srgb, var(--color-primary) 20%, transparent); + border-color: var(--color-primary); +} +.brief-content .deep-header { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 14px; + margin-bottom: 14px; } .brief-content .deep-title { - font-weight: 700 !important; - font-size: 0.9rem !important; + font-weight: 800 !important; + font-size: 1rem !important; color: var(--color-ink) !important; + line-height: 1.4; } .brief-content .deep-section { - margin-top: 10px !important; + margin-top: 14px !important; } .brief-content .deep-section-label { font-size: 0.7rem !important; - font-weight: 600 !important; + font-weight: 800 !important; color: var(--color-primary) !important; - margin-bottom: 4px !important; + margin-bottom: 6px !important; + display: flex; + align-items: center; + gap: 4px; + text-transform: uppercase; + letter-spacing: 0.08em; } .brief-content .deep-text { - font-size: 0.8rem !important; + font-size: 0.85rem !important; color: var(--color-ink-secondary) !important; - line-height: 1.6; + line-height: 1.7; margin: 0 !important; } .brief-content .risk-list { - margin: 4px 0 0 16px !important; + margin: 8px 0 0 20px !important; padding: 0 !important; - font-size: 0.72rem !important; - color: #b45309 !important; + font-size: 0.75rem !important; + color: color-mix(in srgb, #f59e0b 80%, black) !important; } .brief-content .risk-list li { - margin-bottom: 2px; + margin-bottom: 5px; + line-height: 1.5; } -/* Score badges */ +/* 分数徽章增强 */ .brief-content .score-badge { - font-weight: 700 !important; + display: inline-flex !important; + align-items: center; + justify-content: center; border-radius: 9999px !important; - white-space: nowrap; -} -.brief-content .score-sm { - font-size: 0.65rem !important; - padding: 1px 6px !important; + font-weight: 800 !important; + font-size: 0.7rem !important; + padding: 4px 10px !important; + min-width: 52px; + border: 1.5px solid transparent; } .brief-content .score-high { - background: #dcfce7 !important; - color: #15803d !important; + background: linear-gradient(135deg, #dcfce7 0%, #bbf7d0 100%) !important; + color: #166534 !important; + border-color: #22c55e !important; } .brief-content .score-mid { - background: #fef3c7 !important; - color: #b45309 !important; + background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%) !important; + color: #92400e !important; + border-color: #f59e0b !important; } .brief-content .score-low { - background: #fee2e2 !important; - color: #dc2626 !important; + background: linear-gradient(135deg, #fee2e2 0%, #fecaca 100%) !important; + color: #991b1b !important; + border-color: #ef4444 !important; +} + +/* Deep badge 增强 */ +.brief-content .deep-badge { + display: inline-flex !important; + align-items: center; + gap: 3px; + background: linear-gradient(135deg, #ede9fe 0%, #ddd6fe 100%) !important; + color: #6d28d9 !important; + padding: 3px 10px !important; + border-radius: 8px !important; + font-size: 0.65rem !important; + font-weight: 800 !important; + border: 1.5px solid #a855f7 !important; +} +.brief-content .deep-badge::before { + content: "✨"; + font-size: 0.7rem; } -/* Innovation tags */ +/* 创新标签增强 */ .brief-content .innovation-tags { display: flex !important; flex-wrap: wrap !important; - gap: 4px !important; - margin-top: 6px !important; + gap: 8px !important; + margin-top: 10px !important; } .brief-content .innovation-tag { + display: inline-flex !important; + align-items: center; + gap: 4px; + background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%) !important; + color: #78350f !important; + border-radius: 10px !important; + padding: 5px 12px !important; + font-size: 0.7rem !important; + font-weight: 700 !important; + border: 1.5px solid #f59e0b !important; +} +.brief-content .innovation-tag::before { + content: "💡"; + font-size: 0.8rem; +} + +/* 按钮增强 */ +.brief-content .btn { display: inline-block !important; - background: color-mix(in srgb, #f59e0b 12%, transparent) !important; - color: #92400e !important; - border-radius: 6px !important; - padding: 3px 8px !important; - font-size: 0.68rem !important; + padding: 9px 18px !important; + background: linear-gradient(135deg, var(--color-primary) 0%, color-mix(in srgb, var(--color-primary) 80%, black) 100%) !important; + color: #fff !important; + text-decoration: none !important; + border-radius: 10px !important; + font-size: 0.75rem !important; + font-weight: 700 !important; + margin-top: 10px !important; + transition: all 0.2s; + border: none; + cursor: pointer; +} +.brief-content .btn:hover { + transform: translateY(-2px); + box-shadow: 0 6px 16px color-mix(in srgb, var(--color-primary) 30%, transparent); } -/* Deep badge */ -.brief-content .deep-badge { - background: color-mix(in srgb, var(--color-primary) 15%, transparent) !important; +/* 页脚 */ +.brief-content .footer { + text-align: center; + color: var(--color-ink-tertiary, #9ca3af) !important; + font-size: 0.75rem !important; + margin-top: 56px; + padding-top: 24px; + border-top: 2px solid var(--color-border, #e2e8f0) !important; +} +.brief-content .footer a { color: var(--color-primary) !important; - padding: 1px 6px !important; - border-radius: 4px !important; - font-size: 0.6rem !important; - font-weight: 600 !important; + text-decoration: none; + font-weight: 700; } - -/* Paper header */ -.brief-content .paper-header { - display: flex !important; - align-items: flex-start !important; - justify-content: space-between !important; - gap: 8px !important; +.brief-content .footer a:hover { + text-decoration: underline; } -/* 暗色模式 */ +/* 暗色模式增强 */ :root.dark .brief-content, .dark .brief-content { color: var(--color-ink, #e2e8f0); } .dark .brief-content .stat-card { - background: var(--color-surface, #1e1e2e) !important; + background: linear-gradient(135deg, var(--color-surface, #1e1e2e) 0%, color-mix(in srgb, var(--color-primary) 8%, var(--color-surface)) 100%) !important; border-color: var(--color-border, #333) !important; } -.dark .brief-content .rec-card { - background: var(--color-surface, #1e1e2e) !important; - border-color: var(--color-border, #333) !important; +.dark .brief-content .focus-zone { + background: linear-gradient(135deg, color-mix(in srgb, var(--color-success) 12%, var(--color-surface)) 0%, color-mix(in srgb, var(--color-success) 18%, var(--color-surface)) 100%) !important; + border-color: color-mix(in srgb, var(--color-success) 60%, var(--color-border)) !important; } -.dark .brief-content .paper-item { +.dark .brief-content .ai-insight-box, +.dark .brief-content .rec-card, +.dark .brief-content .paper-item, +.dark .brief-content .topic-group { background: var(--color-surface, #1e1e2e) !important; border-color: var(--color-border, #333) !important; } -.dark .brief-content .rec-card:hover, -.dark .brief-content .paper-item:hover, -.dark .brief-content .deep-card:hover { - box-shadow: 0 2px 8px rgba(0,0,0,0.3); -} .dark .brief-content .deep-card { - background: linear-gradient(135deg, color-mix(in srgb, var(--color-primary) 8%, var(--color-surface)) 0%, color-mix(in srgb, var(--color-primary) 12%, var(--color-surface)) 100%) !important; - border-color: color-mix(in srgb, var(--color-primary) 30%, var(--color-border)) !important; + background: linear-gradient(135deg, color-mix(in srgb, var(--color-primary) 15%, var(--color-surface)) 0%, color-mix(in srgb, var(--color-primary) 22%, var(--color-surface)) 100%) !important; + border-color: color-mix(in srgb, var(--color-primary) 50%, var(--color-border)) !important; } -.dark .brief-content .deep-card:hover { - box-shadow: 0 4px 12px rgba(99, 102, 241, 0.2); +.dark .brief-content .kw-tag { + background: linear-gradient(135deg, color-mix(in srgb, #f59e0b 20%, transparent) 0%, color-mix(in srgb, #f59e0b 30%, transparent) 100%) !important; + color: #fbbf24 !important; + border-color: #f59e0b !important; } .dark .brief-content .innovation-tag { - background: color-mix(in srgb, #f59e0b 15%, transparent) !important; + background: linear-gradient(135deg, color-mix(in srgb, #f59e0b 18%, transparent) 0%, color-mix(in srgb, #f59e0b 28%, transparent) 100%) !important; color: #fbbf24 !important; } .dark .brief-content .score-high { - background: #052e16 !important; + background: linear-gradient(135deg, #052e16 0%, #064e3b 100%) !important; color: #4ade80 !important; + border-color: #22c55e !important; } .dark .brief-content .score-mid { - background: #451a03 !important; + background: linear-gradient(135deg, #451a03 0%, #78350f 100%) !important; color: #fbbf24 !important; + border-color: #f59e0b !important; } .dark .brief-content .score-low { - background: #450a0a !important; + background: linear-gradient(135deg, #450a0a 0%, #7f1d1d 100%) !important; color: #f87171 !important; + border-color: #ef4444 !important; +} +.dark .brief-content .deep-badge { + background: linear-gradient(135deg, color-mix(in srgb, var(--color-primary) 20%, transparent) 0%, color-mix(in srgb, var(--color-primary) 30%, transparent) 100%) !important; + color: #c4b5fd !important; + border-color: #a855f7 !important; } .dark .brief-content .risk-list { color: #fbbf24 !important; } +.dark .brief-content .rec-card:hover, +.dark .brief-content .paper-item:hover, +.dark .brief-content .deep-card:hover, +.dark .brief-content .stat-card:hover { + box-shadow: 0 6px 20px rgba(0,0,0,0.4); +} `; diff --git a/packages/ai/brief_service.py b/packages/ai/brief_service.py index c283934..31aa889 100644 --- a/packages/ai/brief_service.py +++ b/packages/ai/brief_service.py @@ -56,64 +56,99 @@ def _parse_deep_dive(md: str) -> dict: -

🧠 PaperMind 研究日报

+

PaperMind 研究日报

{{ date }} · 由 AI 自动生成
@@ -135,67 +170,79 @@ def _parse_deep_dive(md: str) -> dict:
-{% if ai_summary %} -
-
🤖 AI 今日洞察
-
-
核心发现
-

{{ ai_summary }}

-
-
-{% endif %} - -{% if deep_read_highlights %} -
-
🔬 精读精选
- {% for d in deep_read_highlights %} -
-
- {{ d.title }} - {% if d.skim_score %} - - {{ "%.0f"|format(d.skim_score * 100) }}分 - - {% endif %} -
-
arXiv: {{ d.arxiv_id }}
- {% if d.method %} -
- -

{{ d.method[:300] }}

+{% if ai_summary or deep_read_highlights %} +
+
今日焦点
+ + {% if ai_summary %} +
+
+ 🤖 + AI 核心洞察
- {% endif %} - {% if d.experiments %} -
- -

{{ d.experiments[:300] }}

+
{{ ai_summary }}
+
+ {% endif %} + + {% if deep_read_highlights %} +
+
+ 🔬 精读精选 ({{ deep_read_highlights|length }}篇)
- {% endif %} - {% if d.risks %} -
- -
    - {% for risk in d.risks[:3] %} -
  • {{ risk }}
  • - {% endfor %} -
+ {% for d in deep_read_highlights %} +
+
+ {{ d.title }} + {% if d.skim_score %} + + {{ "%.0f"|format(d.skim_score * 100) }}分 + + {% endif %} +
+ + {% if d.method %} +
+ +

{{ d.method[:280] }}{% if d.method|length > 280 %}...{% endif %}

+
+ {% endif %} + {% if d.experiments %} +
+ +

{{ d.experiments[:280] }}{% if d.experiments|length > 280 %}...{% endif %}

+
+ {% endif %} + {% if d.risks %} +
+ +
    + {% for risk in d.risks[:3] %} +
  • {{ risk }}
  • + {% endfor %} +
+
+ {% endif %} + 查看详情
- {% endif %} - 查看详情 + {% endfor %}
- {% endfor %} + {% endif %}
{% endif %} {% if recommendations %}
-
🎯 AI 为你推荐
+
💡 AI 为你推荐
{% for r in recommendations %}
-
arXiv: {{ r.arxiv_id }} · 相似度:{{ "%.0f"|format(r.similarity * 100) }}%
+
+ arXiv: {{ r.arxiv_id }} + · + {{ "%.0f"|format(r.similarity * 100) }}% 匹配 +
{% if r.title_zh %}
💡 {{ r.title_zh }}
{% endif %} @@ -210,7 +257,7 @@ def _parse_deep_dive(md: str) -> dict:
🔥 本周热点
{% for kw in hot_keywords %} - {{ kw.keyword }} ({{ kw.count }}) + {{ kw.keyword }} ({{ kw.count }}) {% endfor %}
@@ -221,7 +268,7 @@ def _parse_deep_dive(md: str) -> dict:
📋 论文分类概览
{% for topic_name, papers in topic_groups.items() %}
-
📁 {{ topic_name }}({{ papers|length }}篇)
+
{{ topic_name }} ({{ papers|length }}篇)
{% for p in papers %}
@@ -238,7 +285,7 @@ def _parse_deep_dive(md: str) -> dict: {% if p.innovations %}
{% for inn in p.innovations[:3] %} - 💡 {{ inn[:60] }} + {{ inn[:50] }} {% endfor %}
{% endif %} @@ -272,7 +319,7 @@ def _parse_deep_dive(md: str) -> dict: {% if p.innovations %}
{% for inn in p.innovations[:3] %} - 💡 {{ inn[:60] }} + {{ inn[:50] }} {% endfor %}
{% endif %} From 847722fd4b90d172aaa84efdad5e984fa2be4d81 Mon Sep 17 00:00:00 2001 From: Color2333 <1552429809@qq.com> Date: Tue, 17 Mar 2026 15:46:28 +0800 Subject: [PATCH 02/17] =?UTF-8?q?feat(config):=20=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E6=97=A5=E6=8A=A5=E9=85=8D=E7=BD=AE=E5=88=B0=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=20(#=E9=85=8D=E7=BD=AE=E8=A7=84=E8=8C=83=E5=8C=96)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 核心改造: - 将 DAILY_CRON 和 NOTIFY_DEFAULT_TO 从.env 迁移到数据库 - 所有配置统一在「系统设置」→「邮箱与报告」页面管理 - .env 只保留默认值,不再作为运行时配置来源 影响范围: - packages/storage/models.py: DailyReportConfig 新增 cron_expression 字段 - packages/ai/auto_read_service.py: get_config/update_config 返回 cron_expression - packages/ai/brief_service.py: publish() 从数据库读取收件人 - packages/ai/daily_runner.py: run_daily_brief() 从数据库读取收件人 - apps/worker/main.py: 从数据库读取 cron 表达式 - apps/api/routers/settings.py: DailyReportConfigUpdate 支持 cron_expression - apps/api/routers/content.py: daily_brief() 从数据库读取收件人 - frontend/src/types/index.ts: DailyReportConfig 类型新增 cron_expression - frontend/src/components/SettingsDialog.tsx: 新增 cron 表达式输入框 - .env: 移除 DAILY_CRON 和 NOTIFY_DEFAULT_TO,保留默认值 - infra/migrations/versions/: 添加数据库迁移脚本 配置优先级: 数据库配置 > .env 默认值 用户现在只需在设置页面配置一次,所有地方自动生效。 --- apps/api/routers/content.py | 11 +- apps/api/routers/settings.py | 4 +- apps/worker/main.py | 21 +- frontend/src/components/SettingsDialog.tsx | 26 +- frontend/src/types/index.ts | 3 +- ...012_add_cron_expression_to_daily_report.py | 32 + logs/backend.log | 7718 ++--------------- packages/ai/auto_read_service.py | 33 +- packages/ai/brief_service.py | 11 + packages/ai/daily_runner.py | 17 +- packages/storage/models.py | 16 +- scripts/copy_env_from_deploy.sh | 88 + 12 files changed, 720 insertions(+), 7260 deletions(-) create mode 100644 infra/migrations/versions/20260317_0012_add_cron_expression_to_daily_report.py create mode 100755 scripts/copy_env_from_deploy.sh diff --git a/apps/api/routers/content.py b/apps/api/routers/content.py index 8bfee1c..66b3d59 100644 --- a/apps/api/routers/content.py +++ b/apps/api/routers/content.py @@ -168,7 +168,16 @@ def daily_brief(req: DailyBriefRequest) -> dict: """生成每日简报(异步任务)""" from packages.domain.task_tracker import global_tracker - recipient = req.recipient or settings.notify_default_to + # 如果没有指定收件人,从数据库读取配置 + recipient = req.recipient + if not recipient: + from packages.storage.db import session_scope + from packages.storage.repositories import DailyReportConfigRepository + + with session_scope() as session: + config = DailyReportConfigRepository(session).get_config() + if config.send_email_report and config.recipient_emails: + recipient = config.recipient_emails.split(",")[0] def _generate_fn(progress_callback=None): # publish() 内部已写入 generated_content 表,无需重复 diff --git a/apps/api/routers/settings.py b/apps/api/routers/settings.py index 400366d..363665c 100644 --- a/apps/api/routers/settings.py +++ b/apps/api/routers/settings.py @@ -45,14 +45,14 @@ class EmailConfigUpdate(BaseModel): class DailyReportConfigUpdate(BaseModel): - """更新每日报告配置请求""" + """每日报告配置更新请求""" enabled: bool | None = None auto_deep_read: bool | None = None deep_read_limit: int | None = None send_email_report: bool | None = None recipient_emails: str | None = None - report_time_utc: int | None = None + cron_expression: str | None = None # 新增:cron 表达式配置 include_paper_details: bool | None = None include_graph_insights: bool | None = None diff --git a/apps/worker/main.py b/apps/worker/main.py index 4ec40e9..6b8ee25 100644 --- a/apps/worker/main.py +++ b/apps/worker/main.py @@ -188,9 +188,19 @@ def run_worker() -> None: ) logger.info("✅ 已添加:主题分发任务(每小时整点,UTC)") - # 每日简报(UTC 4 点生成,4 点半发送) - # 默认配置:DAILY_CRON=0 4 * * * - daily_trigger = CronTrigger.from_crontab(getattr(settings, "daily_cron", "0 4 * * *")) + # 每日简报(从数据库读取 cron 表达式) + from packages.storage.db import session_scope + from packages.storage.repositories import DailyReportConfigRepository + + try: + with session_scope() as session: + config = DailyReportConfigRepository(session).get_config() + daily_cron = config.cron_expression or "0 4 * * *" + except Exception as e: + logger.warning(f"从数据库读取 cron 失败:{e},使用默认值") + daily_cron = "0 4 * * *" + + daily_trigger = CronTrigger.from_crontab(daily_cron) scheduler.add_job( brief_job, trigger=daily_trigger, @@ -198,9 +208,8 @@ def run_worker() -> None: replace_existing=True, ) logger.info( - "✅ 已添加:每日简报任务(UTC %s,北京时间%s)", - getattr(settings, "daily_cron", "0 4 * * *"), - "12:00" if getattr(settings, "daily_cron", "").startswith("0 4") else "计算中", + "✅ 已添加:每日简报任务(cron: %s)", + daily_cron, ) # 每周图谱维护(UTC 周日 22 点 = 北京时间周一 6 点) diff --git a/frontend/src/components/SettingsDialog.tsx b/frontend/src/components/SettingsDialog.tsx index c8a09dc..ea8d3da 100644 --- a/frontend/src/components/SettingsDialog.tsx +++ b/frontend/src/components/SettingsDialog.tsx @@ -1074,20 +1074,26 @@ function EmailTab() { disabled={submitting} className="w-full rounded border border-border bg-surface px-2 py-1.5 text-xs text-ink placeholder:text-ink-placeholder" /> -
- + {/* Cron 表达式配置 */} +
+ handleInputChange("report_time_utc", parseInt(e.target.value) || 21)} - onBlur={() => handleInputBlur("report_time_utc")} + type="text" + placeholder="0 4 * * *" + value={localConfig?.cron_expression ?? dailyReportConfig.cron_expression ?? "0 4 * * *"} + onChange={(e) => handleInputChange("cron_expression", e.target.value)} + onBlur={() => handleInputBlur("cron_expression")} disabled={submitting} - className="w-16 rounded border border-border bg-surface px-2 py-0.5 text-center text-xs text-ink" + className="w-full rounded border border-border bg-surface px-2 py-1.5 text-xs font-mono text-ink placeholder:text-ink-placeholder" /> - (北京时间 = UTC + 8) +

+ 默认:0 4 * * *(UTC 4 点 = 北京时间 12 点) +
+ 格式:分 时 日 月 周 +

+ {/* 旧的 report_time_utc 保留但隐藏,向后兼容 */} +
)}
diff --git a/frontend/src/types/index.ts b/frontend/src/types/index.ts index 65aacdd..27d1b98 100644 --- a/frontend/src/types/index.ts +++ b/frontend/src/types/index.ts @@ -861,7 +861,8 @@ export interface DailyReportConfig { deep_read_limit: number; send_email_report: boolean; recipient_emails: string[]; - report_time_utc: number; + cron_expression: string; // 新增:cron 表达式 + report_time_utc: number; // 保留:向后兼容 include_paper_details: boolean; include_graph_insights: boolean; } diff --git a/infra/migrations/versions/20260317_0012_add_cron_expression_to_daily_report.py b/infra/migrations/versions/20260317_0012_add_cron_expression_to_daily_report.py new file mode 100644 index 0000000..eaf3c5e --- /dev/null +++ b/infra/migrations/versions/20260317_0012_add_cron_expression_to_daily_report.py @@ -0,0 +1,32 @@ +"""add cron_expression to daily_report_configs + +Revision ID: 20260317_0012 +Revises: 5ae0d73c1013 +Create Date: 2026-03-17 + +""" + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = "20260317_0012" +down_revision = "5ae0d73c1013" +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # 添加 cron_expression 字段 + op.add_column( + "daily_report_configs", + sa.Column("cron_expression", sa.String(64), nullable=False, server_default="0 4 * * *"), + ) + + # 标记 report_time_utc 为废弃(保留字段兼容性) + # 不删除,保持向后兼容 + + +def downgrade() -> None: + op.drop_column("daily_report_configs", "cron_expression") diff --git a/logs/backend.log b/logs/backend.log index 5a5cfa6..5f30151 100644 --- a/logs/backend.log +++ b/logs/backend.log @@ -1,7246 +1,514 @@ INFO: Will watch for changes in these directories: ['/Users/haojiang/Documents/2026/PaperMind'] -INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit) -INFO: Started reloader process [83780] using StatReload -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:190: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [83789] -INFO: Waiting for application startup. -INFO: Application startup complete. -2026-02-26 13:21:14,899 [INFO] papermind.api: [f31ffae1] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:57096 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:14,982 [INFO] papermind.api: [11f283b6] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57096 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:17,892 [INFO] papermind.api: [582eb10d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57115 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:17,980 [INFO] papermind.api: [032dcd16] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57115 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:20,889 [INFO] papermind.api: [a3b0ee99] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57115 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:20,981 [INFO] papermind.api: [d92cf9c4] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57117 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:22,910 [INFO] papermind.api: [7f1cf14e] GET /tasks/active → 200 (17ms) -INFO: 127.0.0.1:57138 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:22,913 [INFO] papermind.api: [c13504b5] GET /papers/folder-stats → 200 (22ms) -INFO: 127.0.0.1:57117 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:21:22,914 [INFO] papermind.api: [0b2ed767] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:57138 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:22,917 [INFO] papermind.api: [46e4e3c6] GET /topics → 200 (8ms) -INFO: 127.0.0.1:57142 - "GET /topics?enabled_only=false HTTP/1.1" 200 OK -2026-02-26 13:21:22,920 [INFO] papermind.api: [74aa00cc] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:57144 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:21:22,925 [INFO] papermind.api: [0b32f624] GET /topics → 200 (4ms) -INFO: 127.0.0.1:57138 - "GET /topics?enabled_only=false HTTP/1.1" 200 OK -2026-02-26 13:21:23,890 [INFO] papermind.api: [f02dc70d] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57138 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:25,553 [INFO] papermind.api: [031527ec] GET /settings/llm-providers → 200 (7ms) -INFO: 127.0.0.1:57138 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:21:25,554 [INFO] papermind.api: [ba3d2ebe] GET /settings/llm-providers/active → 200 (7ms) -INFO: 127.0.0.1:57144 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:21:25,558 [INFO] papermind.api: [83a3abe3] GET /settings/llm-providers → 200 (3ms) -INFO: 127.0.0.1:57142 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:21:25,559 [INFO] papermind.api: [50e6e0a0] GET /settings/llm-providers/active → 200 (3ms) -INFO: 127.0.0.1:57117 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:21:25,891 [INFO] papermind.api: [4ffe3138] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57117 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:26,890 [INFO] papermind.api: [e890307c] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57156 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:26,962 [INFO] papermind.api: [8b656fb6] GET /settings/email-configs → 200 (2ms) -INFO: 127.0.0.1:57156 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:21:26,964 [INFO] papermind.api: [12514584] GET /settings/email-configs → 200 (1ms) -INFO: 127.0.0.1:57156 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:21:26,966 [INFO] papermind.api: [2c75ec89] GET /settings/daily-report-config → 200 (5ms) -INFO: 127.0.0.1:57158 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:21:26,968 [INFO] papermind.api: [311a3f6c] GET /settings/daily-report-config → 200 (0ms) -INFO: 127.0.0.1:57156 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:21:28,628 [INFO] papermind.api: [d8ca66b1] POST /jobs/daily-report/run-once → 200 (0ms) -INFO: 127.0.0.1:57156 - "POST /jobs/daily-report/run-once HTTP/1.1" 200 OK -ERROR: Exception in ASGI application -Traceback (most recent call last): - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/protocols/http/h11_impl.py", line 410, in run_asgi - result = await app( # type: ignore[func-returns-value] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - self.scope, self.receive, self.send - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - ) - ^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__ - return await self.app(scope, receive, send) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/applications.py", line 1160, in __call__ - await super().__call__(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/applications.py", line 107, in __call__ - await self.middleware_stack(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/errors.py", line 186, in __call__ - raise exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/errors.py", line 164, in __call__ - await self.app(scope, receive, _send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/cors.py", line 95, in __call__ - await self.simple_response(scope, receive, send, request_headers=headers) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/cors.py", line 153, in simple_response - await self.app(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/base.py", line 198, in __call__ - raise app_exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/base.py", line 144, in coro - await self.app(scope, receive_or_disconnect, send_no_error) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/exceptions.py", line 63, in __call__ - await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app - raise exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app - await app(scope, receive, sender) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ - await self.app(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/routing.py", line 716, in __call__ - await self.middleware_stack(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/routing.py", line 736, in app - await route.handle(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/routing.py", line 290, in handle - await self.app(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/routing.py", line 119, in app - await wrap_app_handling_exceptions(app, request)(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app - raise exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app - await app(scope, receive, sender) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/routing.py", line 106, in app - await response(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/responses.py", line 167, in __call__ - await self.background() - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/background.py", line 36, in __call__ - await task() - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/background.py", line 23, in __call__ - await run_in_threadpool(self.func, *self.args, **self.kwargs) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool - return await anyio.to_thread.run_sync(func) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/anyio/to_thread.py", line 63, in run_sync - return await get_async_backend().run_sync_in_worker_thread( - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - func, args, abandon_on_cancel=abandon_on_cancel, limiter=limiter - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - ) - ^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 2502, in run_sync_in_worker_thread - return await future - ^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 986, in run - result = context.run(func, *args) - File "/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py", line 1936, in _run_daily_workflow_bg - task_id = f"daily_report_{uuid.uuid4().hex[:8]}" - ^^^^ -NameError: name 'uuid' is not defined. Did you mean: '_uuid'? Or did you forget to import 'uuid'? -2026-02-26 13:21:28,892 [INFO] papermind.api: [1ba08db3] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57158 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:29,891 [INFO] papermind.api: [72b442ba] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57158 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:31,892 [INFO] papermind.api: [70928e4e] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57181 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:32,712 [INFO] papermind.api: [f763dd91] GET /papers/folder-stats → 200 (3ms) -INFO: 127.0.0.1:57181 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:21:32,891 [INFO] papermind.api: [4ed188db] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57181 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:34,050 [INFO] papermind.api: [fe824864] GET /papers/folder-stats → 200 (6ms) -INFO: 127.0.0.1:57181 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:21:34,052 [INFO] papermind.api: [c1386d4a] GET /pipelines/runs → 200 (6ms) -INFO: 127.0.0.1:57197 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:21:34,056 [INFO] papermind.api: [1a229080] GET /pipelines/runs → 200 (3ms) -INFO: 127.0.0.1:57181 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:21:34,065 [INFO] papermind.api: [75da3276] GET /metrics/costs → 200 (20ms) -INFO: 127.0.0.1:57194 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:21:34,068 [INFO] papermind.api: [301a1fb1] GET /metrics/costs → 200 (2ms) -INFO: 127.0.0.1:57181 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:21:34,145 [INFO] papermind.api: [d1cf9fe5] GET /system/status → 200 (99ms) -INFO: 127.0.0.1:57193 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:21:34,149 [INFO] papermind.api: [b7740926] GET /today → 200 (104ms) -INFO: 127.0.0.1:57198 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:21:34,150 [INFO] papermind.api: [3b4de799] GET /today → 200 (0ms) -INFO: 127.0.0.1:57193 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:21:34,169 [INFO] papermind.api: [13d4b991] GET /system/status → 200 (23ms) -INFO: 127.0.0.1:57181 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:21:34,892 [INFO] papermind.api: [fcf5b6ed] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57181 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:35,889 [INFO] papermind.api: [41667dd4] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57181 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:37,893 [INFO] papermind.api: [7e72e0dc] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57213 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:38,132 [INFO] papermind.api: [b8963d04] GET /papers/folder-stats → 200 (2ms) -INFO: 127.0.0.1:57213 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:21:38,133 [INFO] papermind.api: [35f649cb] GET /topics → 200 (3ms) -INFO: 127.0.0.1:57217 - "GET /topics?enabled_only=false HTTP/1.1" 200 OK -2026-02-26 13:21:38,135 [INFO] papermind.api: [f9307bc4] GET /topics → 200 (2ms) -INFO: 127.0.0.1:57213 - "GET /topics?enabled_only=false HTTP/1.1" 200 OK -2026-02-26 13:21:38,889 [INFO] papermind.api: [0d7179cf] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57213 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:40,895 [INFO] papermind.api: [950b10aa] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57213 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:41,890 [INFO] papermind.api: [4c7616ca] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57221 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:43,674 [INFO] papermind.api: [4d8a0247] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:57246 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:43,675 [INFO] papermind.api: [da0846b0] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:57221 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:21:43,677 [INFO] papermind.api: [47684caa] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:57246 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:43,679 [INFO] papermind.api: [63d20944] GET /topics → 200 (3ms) -INFO: 127.0.0.1:57221 - "GET /topics?enabled_only=false HTTP/1.1" 200 OK -2026-02-26 13:21:43,680 [INFO] papermind.api: [2c9989d8] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:57248 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:21:43,682 [INFO] papermind.api: [57df6074] GET /topics → 200 (2ms) -INFO: 127.0.0.1:57246 - "GET /topics?enabled_only=false HTTP/1.1" 200 OK -2026-02-26 13:21:44,890 [INFO] papermind.api: [ada465f3] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57246 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:44,953 [INFO] papermind.api: [6219511d] GET /actions → 200 (5ms) -INFO: 127.0.0.1:57248 - "GET /actions?limit=30 HTTP/1.1" 200 OK -2026-02-26 13:21:44,954 [INFO] papermind.api: [8d6b0cf8] GET /papers/folder-stats → 200 (6ms) -INFO: 127.0.0.1:57246 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:21:44,959 [INFO] papermind.api: [6eb99a63] GET /papers/latest → 200 (10ms) -INFO: 127.0.0.1:57221 - "GET /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:21:44,961 [INFO] papermind.api: [0f8ed31a] GET /actions → 200 (4ms) -INFO: 127.0.0.1:57248 - "GET /actions?limit=30 HTTP/1.1" 200 OK -2026-02-26 13:21:44,963 [INFO] papermind.api: [9ac2fc27] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:57254 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:21:44,966 [INFO] papermind.api: [709e7988] GET /papers/latest → 200 (6ms) -INFO: 127.0.0.1:57246 - "GET /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:21:44,967 [INFO] papermind.api: [bd5edb4a] GET /papers/folder-stats → 200 (2ms) -INFO: 127.0.0.1:57248 - "GET /papers/folder-stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:57263 - "OPTIONS /generated/list?type=daily_brief&limit=50 HTTP/1.1" 200 OK -INFO: 127.0.0.1:57264 - "OPTIONS /generated/list?type=daily_brief&limit=50 HTTP/1.1" 200 OK -2026-02-26 13:21:46,096 [INFO] papermind.api: [e77ca274] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:57262 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:21:46,098 [INFO] papermind.api: [7b0e7c24] GET /generated/list → 200 (4ms) -INFO: 127.0.0.1:57264 - "GET /generated/list?type=daily_brief&limit=50 HTTP/1.1" 200 OK -2026-02-26 13:21:46,099 [INFO] papermind.api: [74a952cf] GET /generated/list → 200 (1ms) -INFO: 127.0.0.1:57262 - "GET /generated/list?type=daily_brief&limit=50 HTTP/1.1" 200 OK -INFO: 127.0.0.1:57262 - "OPTIONS /generated/936d8d45-1fce-4c33-aa26-39c997638593 HTTP/1.1" 200 OK -2026-02-26 13:21:46,103 [INFO] papermind.api: [9a457d11] GET /generated/936d8d45-1fce-4c33-aa26-39c997638593 → 200 (2ms) -INFO: 127.0.0.1:57262 - "GET /generated/936d8d45-1fce-4c33-aa26-39c997638593 HTTP/1.1" 200 OK -2026-02-26 13:21:46,105 [INFO] papermind.api: [367aa39a] GET /generated/936d8d45-1fce-4c33-aa26-39c997638593 → 200 (1ms) -INFO: 127.0.0.1:57264 - "GET /generated/936d8d45-1fce-4c33-aa26-39c997638593 HTTP/1.1" 200 OK -2026-02-26 13:21:46,664 [INFO] papermind.api: [dabf7d9f] GET /today → 200 (3ms) -INFO: 127.0.0.1:57272 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:21:46,666 [INFO] papermind.api: [f0b81427] GET /metrics/costs → 200 (6ms) -INFO: 127.0.0.1:57263 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:21:46,666 [INFO] papermind.api: [20e9dfa0] GET /pipelines/runs → 200 (5ms) -INFO: 127.0.0.1:57271 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:21:46,667 [INFO] papermind.api: [31588048] GET /papers/folder-stats → 200 (8ms) -INFO: 127.0.0.1:57264 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:21:46,668 [INFO] papermind.api: [b5653f3d] GET /today → 200 (3ms) -INFO: 127.0.0.1:57272 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:21:46,670 [INFO] papermind.api: [5785d44a] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:57274 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:46,672 [INFO] papermind.api: [7a3e3042] GET /pipelines/runs → 200 (4ms) -INFO: 127.0.0.1:57271 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:21:46,674 [INFO] papermind.api: [543a25fc] GET /metrics/costs → 200 (7ms) -INFO: 127.0.0.1:57263 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:21:46,696 [INFO] papermind.api: [2f527953] GET /system/status → 200 (37ms) -INFO: 127.0.0.1:57262 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:21:46,719 [INFO] papermind.api: [99334087] GET /system/status → 200 (22ms) -INFO: 127.0.0.1:57263 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:21:47,892 [INFO] papermind.api: [4403c4e4] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57263 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:49,669 [INFO] papermind.api: [c4e88105] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57263 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:50,889 [INFO] papermind.api: [5593ae5a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57263 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:52,671 [INFO] papermind.api: [6bc7df92] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57290 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:52,780 [INFO] papermind.api: [74ce9372] GET /today → 200 (2ms) -INFO: 127.0.0.1:57296 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:21:52,780 [INFO] papermind.api: [3165f7d3] GET /pipelines/runs → 200 (3ms) -INFO: 127.0.0.1:57295 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:21:52,781 [INFO] papermind.api: [b5c398bb] GET /metrics/costs → 200 (3ms) -INFO: 127.0.0.1:57293 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:21:52,805 [INFO] papermind.api: [66177b7f] GET /system/status → 200 (29ms) -INFO: 127.0.0.1:57290 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:21:53,415 [INFO] papermind.api: [0dd60352] GET /today → 200 (4ms) -INFO: 127.0.0.1:57296 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:21:53,416 [INFO] papermind.api: [910ca483] GET /pipelines/runs → 200 (5ms) -INFO: 127.0.0.1:57295 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:21:53,419 [INFO] papermind.api: [3c8cb658] GET /metrics/costs → 200 (7ms) -INFO: 127.0.0.1:57293 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:21:53,448 [INFO] papermind.api: [d484132e] GET /system/status → 200 (37ms) -INFO: 127.0.0.1:57290 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:21:53,596 [INFO] papermind.api: [d059235a] GET /pipelines/runs → 200 (2ms) -INFO: 127.0.0.1:57295 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:21:53,597 [INFO] papermind.api: [ad99f28e] GET /today → 200 (2ms) -INFO: 127.0.0.1:57296 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:21:53,626 [INFO] papermind.api: [3085ee3e] GET /metrics/costs → 200 (32ms) -INFO: 127.0.0.1:57293 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:21:53,626 [INFO] papermind.api: [42004a4c] GET /system/status → 200 (32ms) -INFO: 127.0.0.1:57290 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:21:53,781 [INFO] papermind.api: [fe2f066e] GET /today → 200 (3ms) -INFO: 127.0.0.1:57295 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:21:53,781 [INFO] papermind.api: [1f95e5cd] GET /pipelines/runs → 200 (3ms) -INFO: 127.0.0.1:57296 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:21:53,782 [INFO] papermind.api: [5ce09e51] GET /metrics/costs → 200 (4ms) -INFO: 127.0.0.1:57293 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:21:53,807 [INFO] papermind.api: [5616d063] GET /system/status → 200 (29ms) -INFO: 127.0.0.1:57290 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:21:53,890 [INFO] papermind.api: [cde42f46] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57290 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:53,946 [INFO] papermind.api: [d2a5dc45] GET /today → 200 (2ms) -INFO: 127.0.0.1:57295 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:21:53,947 [INFO] papermind.api: [1fae92f4] GET /pipelines/runs → 200 (3ms) -INFO: 127.0.0.1:57296 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:21:53,947 [INFO] papermind.api: [485d9955] GET /metrics/costs → 200 (3ms) -INFO: 127.0.0.1:57293 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:21:53,969 [INFO] papermind.api: [dd88eb31] GET /system/status → 200 (26ms) -INFO: 127.0.0.1:57290 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:21:55,344 [INFO] papermind.api: [becb2b48] GET /papers/folder-stats → 200 (8ms) -INFO: 127.0.0.1:57290 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:21:55,344 [INFO] papermind.api: [02cae13c] GET /actions → 200 (8ms) -INFO: 127.0.0.1:57293 - "GET /actions?limit=30 HTTP/1.1" 200 OK -2026-02-26 13:21:55,349 [INFO] papermind.api: [2edd69ab] GET /papers/latest → 200 (13ms) -INFO: 127.0.0.1:57296 - "GET /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:21:55,353 [INFO] papermind.api: [1a580672] GET /actions → 200 (6ms) -INFO: 127.0.0.1:57290 - "GET /actions?limit=30 HTTP/1.1" 200 OK -2026-02-26 13:21:55,354 [INFO] papermind.api: [0eace1b4] GET /papers/folder-stats → 200 (8ms) -INFO: 127.0.0.1:57295 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:21:55,359 [INFO] papermind.api: [651cfbe7] GET /papers/latest → 200 (8ms) -INFO: 127.0.0.1:57293 - "GET /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:21:55,361 [INFO] papermind.api: [b02f8579] GET /papers/folder-stats → 200 (6ms) -INFO: 127.0.0.1:57290 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:21:55,668 [INFO] papermind.api: [839162f0] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57290 - "GET /tasks/active HTTP/1.1" 200 OK -INFO: 127.0.0.1:57311 - "OPTIONS /generated/list?type=topic_wiki&limit=50 HTTP/1.1" 200 OK -INFO: 127.0.0.1:57312 - "OPTIONS /generated/list?type=topic_wiki&limit=50 HTTP/1.1" 200 OK -2026-02-26 13:21:56,085 [INFO] papermind.api: [3a5b8e6f] GET /papers/folder-stats → 200 (3ms) -INFO: 127.0.0.1:57310 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:21:56,092 [INFO] papermind.api: [487cd44e] GET /generated/list → 200 (8ms) -INFO: 127.0.0.1:57312 - "GET /generated/list?type=topic_wiki&limit=50 HTTP/1.1" 200 OK -2026-02-26 13:21:56,095 [INFO] papermind.api: [191a3ea1] GET /generated/list → 200 (3ms) -INFO: 127.0.0.1:57310 - "GET /generated/list?type=topic_wiki&limit=50 HTTP/1.1" 200 OK -INFO: 127.0.0.1:57312 - "OPTIONS /writing/templates HTTP/1.1" 200 OK -INFO: 127.0.0.1:57311 - "OPTIONS /writing/templates HTTP/1.1" 200 OK -2026-02-26 13:21:56,561 [INFO] papermind.api: [a0fbcf97] GET /papers/folder-stats → 200 (2ms) -INFO: 127.0.0.1:57310 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:21:56,564 [INFO] papermind.api: [ce93dbed] GET /writing/templates → 200 (3ms) -INFO: 127.0.0.1:57311 - "GET /writing/templates HTTP/1.1" 200 OK -2026-02-26 13:21:56,565 [INFO] papermind.api: [eec64725] GET /writing/templates → 200 (0ms) -INFO: 127.0.0.1:57310 - "GET /writing/templates HTTP/1.1" 200 OK -2026-02-26 13:21:56,890 [INFO] papermind.api: [f8dc02c3] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57310 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:57,149 [INFO] papermind.api: [b19bac67] GET /topics → 200 (8ms) -INFO: 127.0.0.1:57311 - "GET /topics?enabled_only=false HTTP/1.1" 200 OK -2026-02-26 13:21:57,149 [INFO] papermind.api: [96a3c9dc] GET /papers/folder-stats → 200 (9ms) -INFO: 127.0.0.1:57310 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:21:57,154 [INFO] papermind.api: [05cdbd8b] GET /topics → 200 (3ms) -INFO: 127.0.0.1:57312 - "GET /topics?enabled_only=false HTTP/1.1" 200 OK -INFO: 127.0.0.1:57310 - "OPTIONS /graph/overview HTTP/1.1" 200 OK -INFO: 127.0.0.1:57311 - "OPTIONS /graph/bridges HTTP/1.1" 200 OK -INFO: 127.0.0.1:57329 - "OPTIONS /graph/frontier?days=90 HTTP/1.1" 200 OK -INFO: 127.0.0.1:57331 - "OPTIONS /graph/cocitation-clusters?min_cocite=2 HTTP/1.1" 200 OK -INFO: 127.0.0.1:57332 - "OPTIONS /graph/similarity-map?topic_id=&limit=200 HTTP/1.1" 200 OK -2026-02-26 13:21:57,820 [INFO] papermind.api: [06e7fabb] GET /papers/folder-stats → 200 (6ms) -INFO: 127.0.0.1:57312 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:21:57,956 [INFO] papermind.api: [fa4e68e1] GET /graph/cocitation-clusters → 200 (137ms) -INFO: 127.0.0.1:57334 - "GET /graph/cocitation-clusters?min_cocite=2 HTTP/1.1" 200 OK -2026-02-26 13:21:57,978 [INFO] papermind.api: [b00df21f] GET /graph/frontier → 200 (160ms) -INFO: 127.0.0.1:57329 - "GET /graph/frontier?days=90 HTTP/1.1" 200 OK -2026-02-26 13:21:57,984 [INFO] papermind.api: [95dfa47d] GET /graph/overview → 200 (168ms) -INFO: 127.0.0.1:57311 - "GET /graph/overview HTTP/1.1" 200 OK -2026-02-26 13:21:57,986 [INFO] papermind.api: [0e98824a] GET /graph/bridges → 200 (169ms) -INFO: 127.0.0.1:57310 - "GET /graph/bridges HTTP/1.1" 200 OK -2026-02-26 13:21:58,114 [WARNING] packages.ai.graph_service: UMAP failed: No module named 'umap', falling back to PCA -2026-02-26 13:21:58,687 [INFO] papermind.api: [ae695240] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57310 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:21:58,915 [INFO] papermind.api: [16079e11] GET /papers/folder-stats → 200 (27ms) -INFO: 127.0.0.1:57310 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:21:58,916 [INFO] papermind.api: [6b8cd12d] GET /generated/list → 200 (17ms) -INFO: 127.0.0.1:57311 - "GET /generated/list?type=topic_wiki&limit=50 HTTP/1.1" 200 OK -2026-02-26 13:21:58,921 [INFO] papermind.api: [84c6d136] GET /generated/list → 200 (4ms) -INFO: 127.0.0.1:57329 - "GET /generated/list?type=topic_wiki&limit=50 HTTP/1.1" 200 OK -2026-02-26 13:21:59,535 [INFO] papermind.api: [5fa97a5f] GET /generated/list → 200 (22ms) -INFO: 127.0.0.1:57311 - "GET /generated/list?type=daily_brief&limit=50 HTTP/1.1" 200 OK -2026-02-26 13:21:59,537 [INFO] papermind.api: [f63b8728] GET /papers/folder-stats → 200 (56ms) -INFO: 127.0.0.1:57329 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:21:59,566 [INFO] papermind.api: [7f1df100] GET /generated/936d8d45-1fce-4c33-aa26-39c997638593 → 200 (1ms) -INFO: 127.0.0.1:57311 - "GET /generated/936d8d45-1fce-4c33-aa26-39c997638593 HTTP/1.1" 200 OK -2026-02-26 13:21:59,566 [INFO] papermind.api: [64d272ab] GET /generated/list → 200 (6ms) -INFO: 127.0.0.1:57310 - "GET /generated/list?type=daily_brief&limit=50 HTTP/1.1" 200 OK -2026-02-26 13:21:59,896 [INFO] papermind.api: [da8707b8] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57310 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:01,141 [INFO] papermind.api: [b1df64f2] GET /graph/similarity-map → 200 (3324ms) -INFO: 127.0.0.1:57332 - "GET /graph/similarity-map?topic_id=&limit=200 HTTP/1.1" 200 OK -2026-02-26 13:22:01,435 [INFO] papermind.api: [c0cf49cd] GET /actions → 200 (4ms) -INFO: 127.0.0.1:57343 - "GET /actions?limit=30 HTTP/1.1" 200 OK -2026-02-26 13:22:01,438 [INFO] papermind.api: [35d5961f] GET /papers/folder-stats → 200 (7ms) -INFO: 127.0.0.1:57332 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:22:01,443 [INFO] papermind.api: [3d5fa18f] GET /actions → 200 (6ms) -INFO: 127.0.0.1:57343 - "GET /actions?limit=30 HTTP/1.1" 200 OK -2026-02-26 13:22:01,445 [INFO] papermind.api: [17cacc99] GET /papers/latest → 200 (13ms) -INFO: 127.0.0.1:57344 - "GET /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:22:01,446 [INFO] papermind.api: [f3ce3b12] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:57346 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:22:01,450 [INFO] papermind.api: [7a2b44c0] GET /papers/latest → 200 (5ms) -INFO: 127.0.0.1:57343 - "GET /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:22:01,452 [INFO] papermind.api: [f311f195] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:57344 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:22:01,668 [INFO] papermind.api: [d395a091] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57344 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:02,474 [INFO] papermind.api: [af8d8c04] GET /generated/list → 200 (4ms) -INFO: 127.0.0.1:57343 - "GET /generated/list?type=daily_brief&limit=50 HTTP/1.1" 200 OK -2026-02-26 13:22:02,476 [INFO] papermind.api: [41ad934a] GET /papers/folder-stats → 200 (6ms) -INFO: 127.0.0.1:57344 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:22:02,477 [INFO] papermind.api: [b76d55ec] GET /generated/list → 200 (2ms) -INFO: 127.0.0.1:57346 - "GET /generated/list?type=daily_brief&limit=50 HTTP/1.1" 200 OK -2026-02-26 13:22:02,479 [INFO] papermind.api: [8c014756] GET /generated/936d8d45-1fce-4c33-aa26-39c997638593 → 200 (1ms) -INFO: 127.0.0.1:57346 - "GET /generated/936d8d45-1fce-4c33-aa26-39c997638593 HTTP/1.1" 200 OK -2026-02-26 13:22:02,481 [INFO] papermind.api: [99913a83] GET /generated/936d8d45-1fce-4c33-aa26-39c997638593 → 200 (1ms) -INFO: 127.0.0.1:57346 - "GET /generated/936d8d45-1fce-4c33-aa26-39c997638593 HTTP/1.1" 200 OK -2026-02-26 13:22:02,712 [INFO] papermind.api: [2ba86de0] GET /papers/folder-stats → 200 (2ms) -INFO: 127.0.0.1:57346 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:22:02,889 [INFO] papermind.api: [1a8f3ee3] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57346 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:04,514 [INFO] papermind.api: [56ede169] GET /settings/llm-providers → 200 (1ms) -INFO: 127.0.0.1:57346 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:22:04,514 [INFO] papermind.api: [9fed4e08] GET /settings/llm-providers/active → 200 (1ms) -INFO: 127.0.0.1:57344 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:22:04,516 [INFO] papermind.api: [02e154a1] GET /settings/llm-providers/active → 200 (1ms) -INFO: 127.0.0.1:57346 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:22:04,517 [INFO] papermind.api: [412cf2de] GET /settings/llm-providers → 200 (2ms) -INFO: 127.0.0.1:57343 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:22:04,669 [INFO] papermind.api: [741ac8fa] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57343 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:05,732 [INFO] papermind.api: [187bb084] GET /settings/daily-report-config → 200 (2ms) -INFO: 127.0.0.1:57346 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:22:05,732 [INFO] papermind.api: [a2b382ce] GET /settings/email-configs → 200 (3ms) -INFO: 127.0.0.1:57343 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:22:05,735 [INFO] papermind.api: [727ef3a0] GET /settings/daily-report-config → 200 (2ms) -INFO: 127.0.0.1:57344 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:22:05,736 [INFO] papermind.api: [d56bcdac] GET /settings/email-configs → 200 (3ms) -INFO: 127.0.0.1:57343 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:22:05,890 [INFO] papermind.api: [6ac4618a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57343 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:07,669 [INFO] papermind.api: [8b260c0c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57359 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:08,890 [INFO] papermind.api: [04769e5e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57359 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:10,670 [INFO] papermind.api: [140e8a97] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57359 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:11,890 [INFO] papermind.api: [831508d9] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57367 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:13,667 [INFO] papermind.api: [728dc056] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57367 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:14,890 [INFO] papermind.api: [5357bc7b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57367 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:16,667 [INFO] papermind.api: [6859c6aa] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57374 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:17,889 [INFO] papermind.api: [c249e24d] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57374 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:19,667 [INFO] papermind.api: [fe3fce32] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57374 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:20,890 [INFO] papermind.api: [880a2be5] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57374 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:22,668 [INFO] papermind.api: [321db3de] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57385 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:23,895 [INFO] papermind.api: [f881b10b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57385 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:25,667 [INFO] papermind.api: [2917d25b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57385 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:26,891 [INFO] papermind.api: [6d90b9e6] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57390 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:28,668 [INFO] papermind.api: [6c228488] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57390 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:29,896 [INFO] papermind.api: [b578dabd] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:57390 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:31,668 [INFO] papermind.api: [dc5641ab] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57401 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:32,480 [INFO] papermind.api: [01c4874d] GET /papers/folder-stats → 200 (9ms) -INFO: 127.0.0.1:57401 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:22:32,712 [INFO] papermind.api: [cea89136] GET /papers/folder-stats → 200 (1ms) -INFO: 127.0.0.1:57401 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:22:32,892 [INFO] papermind.api: [1e5075a6] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57401 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:34,668 [INFO] papermind.api: [5a058080] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57401 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:35,893 [INFO] papermind.api: [f9621b95] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57401 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:37,671 [INFO] papermind.api: [20ca5867] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57420 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:38,890 [INFO] papermind.api: [d29d040f] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57420 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:40,668 [INFO] papermind.api: [e4d4b674] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57420 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:41,891 [INFO] papermind.api: [ce3e8c67] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57433 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:43,671 [INFO] papermind.api: [009b5fdf] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57433 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:44,889 [INFO] papermind.api: [9eb64e5a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57433 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:46,674 [INFO] papermind.api: [db2ec487] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:57450 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:47,890 [INFO] papermind.api: [9f11027b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57450 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:49,669 [INFO] papermind.api: [8bf52251] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57450 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:50,890 [INFO] papermind.api: [8e39f360] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57450 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:51,873 [INFO] papermind.api: [0a99a3b3] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57459 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:52,671 [INFO] papermind.api: [6d40faca] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57461 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:53,891 [INFO] papermind.api: [12c19e19] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57461 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:55,668 [INFO] papermind.api: [7907a9dd] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57461 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:56,710 [INFO] papermind.api: [b705fd5c] POST /jobs/daily/run-once → 200 (1ms) -INFO: 127.0.0.1:57472 - "POST /jobs/daily/run-once HTTP/1.1" 200 OK -2026-02-26 13:22:56,721 [INFO] packages.integrations.arxiv_client: ArXiv search: 3D texture mapping textured surface → all:3D AND all:texture AND all:mapping (sort=submittedDate start=0) -2026-02-26 13:22:56,899 [INFO] papermind.api: [2efa6b4d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57475 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:58,230 [INFO] httpx: HTTP Request: GET https://export.arxiv.org/api/query?search_query=all%3A3D+AND+all%3Atexture+AND+all%3Amapping&sortBy=submittedDate&sortOrder=descending&start=0&max_results=20 "HTTP/1.1 200 OK" -2026-02-26 13:22:58,668 [INFO] papermind.api: [12cbc8d8] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57475 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:58,738 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.21893v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:22:58,756 [INFO] papermind.api: [7477c562] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57485 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:22:58,839 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.21893v1 "HTTP/1.1 200 OK" -2026-02-26 13:22:59,663 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.21141v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:22:59,767 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.21141v1 "HTTP/1.1 200 OK" -2026-02-26 13:22:59,892 [INFO] papermind.api: [df37327e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57475 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:01,046 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.19874v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:23:01,146 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.19874v1 "HTTP/1.1 200 OK" -2026-02-26 13:23:01,670 [INFO] papermind.api: [45c21743] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57493 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:02,476 [INFO] papermind.api: [3b6a2c5c] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:57493 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:23:02,715 [INFO] papermind.api: [53febd63] GET /papers/folder-stats → 200 (3ms) -INFO: 127.0.0.1:57493 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:23:02,891 [INFO] papermind.api: [670660be] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57493 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:04,557 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.18741v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:23:04,658 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.18741v1 "HTTP/1.1 200 OK" -2026-02-26 13:23:04,669 [INFO] papermind.api: [e7d7a063] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57493 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:05,890 [INFO] papermind.api: [29357c1d] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57493 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:07,669 [INFO] papermind.api: [c75fa8b1] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57509 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:07,774 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.18258v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:23:07,874 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.18258v1 "HTTP/1.1 200 OK" -2026-02-26 13:23:08,891 [INFO] papermind.api: [1a263638] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57509 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:09,414 [INFO] papermind.api: [1b26e8bc] GET /papers/folder-stats → 200 (14ms) -INFO: 127.0.0.1:57509 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:23:09,417 [INFO] papermind.api: [82f24615] GET /topics → 200 (17ms) -INFO: 127.0.0.1:57516 - "GET /topics?enabled_only=false HTTP/1.1" 200 OK -2026-02-26 13:23:09,422 [INFO] papermind.api: [24bddc4f] GET /topics → 200 (4ms) -INFO: 127.0.0.1:57509 - "GET /topics?enabled_only=false HTTP/1.1" 200 OK -2026-02-26 13:23:10,254 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.18174v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:23:10,356 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.18174v1 "HTTP/1.1 200 OK" -2026-02-26 13:23:10,668 [INFO] papermind.api: [f5ff132b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57509 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:11,272 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.13909v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:23:11,382 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.13909v1 "HTTP/1.1 200 OK" -2026-02-26 13:23:11,891 [INFO] papermind.api: [aa0d24bd] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57522 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:12,573 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.12157v2.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:23:12,677 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.12157v2 "HTTP/1.1 200 OK" -2026-02-26 13:23:12,711 [INFO] papermind.api: [924fd253] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:57522 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:23:12,711 [INFO] papermind.api: [d09a55f2] GET /actions → 200 (5ms) -INFO: 127.0.0.1:57525 - "GET /actions?limit=30 HTTP/1.1" 200 OK -2026-02-26 13:23:12,714 [INFO] papermind.api: [12109969] GET /actions → 200 (2ms) -INFO: 127.0.0.1:57525 - "GET /actions?limit=30 HTTP/1.1" 200 OK -2026-02-26 13:23:12,717 [INFO] papermind.api: [0d7e849c] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:57522 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:23:12,717 [INFO] papermind.api: [f79550c5] GET /papers/latest → 200 (10ms) -INFO: 127.0.0.1:57526 - "GET /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:23:12,724 [INFO] papermind.api: [eb009c1a] GET /papers/folder-stats → 200 (6ms) -INFO: 127.0.0.1:57525 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:23:12,725 [INFO] papermind.api: [d63759e4] GET /papers/latest → 200 (7ms) -INFO: 127.0.0.1:57522 - "GET /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:23:13,668 [INFO] papermind.api: [5bfe29f8] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57522 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:13,761 [INFO] papermind.api: [3a30fb0e] GET /today → 200 (2ms) -INFO: 127.0.0.1:57525 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:23:13,762 [INFO] papermind.api: [35c698a3] GET /today → 200 (1ms) -INFO: 127.0.0.1:57526 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:23:13,763 [INFO] papermind.api: [d773151e] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:57522 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:23:14,128 [INFO] papermind.api: [c6d7a7a8] GET /papers/folder-stats → 200 (21ms) -INFO: 127.0.0.1:57522 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:23:14,129 [INFO] papermind.api: [52c06b98] GET /tasks/active → 200 (21ms) -INFO: 127.0.0.1:57526 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:14,130 [INFO] papermind.api: [18b02cfc] GET /today → 200 (17ms) -INFO: 127.0.0.1:57528 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:23:14,137 [INFO] papermind.api: [6ae1a911] GET /topics → 200 (25ms) -INFO: 127.0.0.1:57525 - "GET /topics?enabled_only=false HTTP/1.1" 200 OK -2026-02-26 13:23:14,144 [INFO] papermind.api: [4887459d] GET /papers/folder-stats → 200 (12ms) -INFO: 127.0.0.1:57522 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:23:14,153 [INFO] papermind.api: [2034abca] GET /tasks/active → 200 (19ms) -INFO: 127.0.0.1:57547 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:14,154 [INFO] papermind.api: [421e4b49] GET /today → 200 (20ms) -INFO: 127.0.0.1:57526 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:23:14,159 [INFO] papermind.api: [427c7819] GET /topics → 200 (16ms) -INFO: 127.0.0.1:57528 - "GET /topics?enabled_only=false HTTP/1.1" 200 OK -2026-02-26 13:23:14,160 [INFO] papermind.api: [fa528f38] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:57525 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:23:14,163 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.08397v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:23:14,165 [INFO] papermind.api: [702a5550] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:57528 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:23:14,621 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.08397v1 "HTTP/1.1 200 OK" -2026-02-26 13:23:14,898 [INFO] papermind.api: [48f5be85] POST /jobs/daily/run-once → 200 (1ms) -INFO: 127.0.0.1:57553 - "POST /jobs/daily/run-once HTTP/1.1" 200 OK -2026-02-26 13:23:14,901 [INFO] packages.integrations.arxiv_client: ArXiv search: 3D texture mapping textured surface → all:3D AND all:texture AND all:mapping (sort=submittedDate start=0) -2026-02-26 13:23:15,390 [INFO] httpx: HTTP Request: GET https://export.arxiv.org/api/query?search_query=all%3A3D+AND+all%3Atexture+AND+all%3Amapping&sortBy=submittedDate&sortOrder=descending&start=0&max_results=20 "HTTP/1.1 200 OK" -2026-02-26 13:23:16,105 [INFO] papermind.api: [eb337c81] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57557 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:16,108 [INFO] papermind.api: [cb12b444] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57557 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:17,918 [INFO] papermind.api: [033135a2] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57564 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:18,105 [INFO] papermind.api: [e6c7aa10] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57557 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:18,108 [INFO] papermind.api: [10e04b8e] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57557 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:20,105 [INFO] papermind.api: [1dfc7c16] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57557 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:20,107 [INFO] papermind.api: [869a6710] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57557 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:22,104 [INFO] papermind.api: [72ebe885] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57570 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:22,107 [INFO] papermind.api: [1ddce009] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57570 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:24,105 [INFO] papermind.api: [4dce02c7] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57570 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:24,108 [INFO] papermind.api: [552f9624] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57570 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:24,998 [INFO] papermind.api: [ce1d8531] POST /citations/sync/incremental → 200 (1ms) -INFO: 127.0.0.1:57575 - "POST /citations/sync/incremental HTTP/1.1" 200 OK -2026-02-26 13:23:26,021 [INFO] papermind.api: [7dccfe63] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57579 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:26,105 [INFO] papermind.api: [0d4bd246] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57581 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:26,108 [INFO] papermind.api: [3ae7d677] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57581 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:27,195 [INFO] papermind.api: [5d807f0d] GET /today → 200 (3ms) -INFO: 127.0.0.1:57591 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:23:27,197 [INFO] papermind.api: [2201c07d] GET /pipelines/runs → 200 (6ms) -INFO: 127.0.0.1:57590 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:23:27,197 [INFO] papermind.api: [660c43fb] GET /papers/folder-stats → 200 (8ms) -INFO: 127.0.0.1:57581 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:23:27,198 [INFO] papermind.api: [4047c93e] GET /today → 200 (1ms) -INFO: 127.0.0.1:57591 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:23:27,200 [INFO] papermind.api: [8c10382b] GET /metrics/costs → 200 (8ms) -INFO: 127.0.0.1:57589 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:23:27,201 [INFO] papermind.api: [db201907] GET /pipelines/runs → 200 (3ms) -INFO: 127.0.0.1:57593 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:23:27,204 [INFO] papermind.api: [9e62022a] GET /metrics/costs → 200 (3ms) -INFO: 127.0.0.1:57591 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:23:27,229 [INFO] papermind.api: [255faf74] GET /system/status → 200 (37ms) -INFO: 127.0.0.1:57587 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:23:27,255 [INFO] papermind.api: [f8b44eb4] GET /system/status → 200 (26ms) -INFO: 127.0.0.1:57591 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:23:27,396 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Enhanced+Diffusion+Sampling%3A+Efficient+Rare+Event+Sampling+and+Free+Energy+Calculation+with+Diffusion+Models%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:23:27,805 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7130542318&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:23:28,104 [INFO] papermind.api: [bf8be357] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57591 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:28,107 [INFO] papermind.api: [cedf2299] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57591 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:28,843 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Enhanced+Diffusion+Sampling%3A+Efficient+Rare+Event+Sampling+and+Free+Energy+Calculation+with+Diffusion+Models&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:23:29,403 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/8b305a5b5d043fef8b823f75f964dd8495199537?fields=references.title%2Ccitations.title "HTTP/1.1 200 OK" -2026-02-26 13:23:30,105 [INFO] papermind.api: [23d75665] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57591 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:30,107 [INFO] papermind.api: [4e3437b9] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57591 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:32,105 [INFO] papermind.api: [8adff1a5] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57608 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:32,108 [INFO] papermind.api: [fc05bf2a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57608 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:32,204 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.06122v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:23:32,576 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.06122v1 "HTTP/1.1 200 OK" -2026-02-26 13:23:34,106 [INFO] papermind.api: [45d1b019] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57608 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:34,110 [INFO] papermind.api: [9250c490] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57608 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:36,106 [INFO] papermind.api: [1a3ddbea] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57617 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:36,108 [INFO] papermind.api: [00dfefcd] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57617 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:36,636 [INFO] papermind.api: [21c01c26] POST /jobs/batch-process-unread → 200 (4ms) -INFO: 127.0.0.1:57621 - "POST /jobs/batch-process-unread?max_papers=10 HTTP/1.1" 200 OK -2026-02-26 13:23:37,213 [INFO] httpx: HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" -2026-02-26 13:23:37,224 [INFO] httpx: HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" -2026-02-26 13:23:37,269 [INFO] httpx: HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" -2026-02-26 13:23:37,654 [INFO] papermind.api: [6c1cd7d8] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57635 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:38,104 [INFO] papermind.api: [fe196071] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57617 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:38,107 [INFO] papermind.api: [141b3ad9] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57617 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:39,706 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.17895v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:23:39,807 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.17895v1 "HTTP/1.1 200 OK" -2026-02-26 13:23:40,106 [INFO] papermind.api: [8605b1c4] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:57617 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:40,108 [INFO] papermind.api: [25787766] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57617 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:40,998 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.14703v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:23:41,354 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.14703v1 "HTTP/1.1 200 OK" -2026-02-26 13:23:41,859 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.13706v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:23:42,106 [INFO] papermind.api: [49235888] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57646 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:42,107 [INFO] papermind.api: [3a8dc7df] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57646 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:42,233 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.13706v1 "HTTP/1.1 200 OK" -2026-02-26 13:23:44,106 [INFO] papermind.api: [6c89a83d] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:57646 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:44,109 [INFO] papermind.api: [d499cd35] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57646 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:44,110 [INFO] papermind.api: [369b529b] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:57651 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:23:46,106 [INFO] papermind.api: [357601f5] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57671 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:46,108 [INFO] papermind.api: [c52f0314] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57671 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:46,569 [INFO] packages.integrations.arxiv_client: ArXiv search: 3D texture mapping textured surface → all:3D AND all:texture AND all:mapping (sort=submittedDate start=0) -2026-02-26 13:23:46,936 [INFO] httpx: HTTP Request: GET https://export.arxiv.org/api/query?search_query=all%3A3D+AND+all%3Atexture+AND+all%3Amapping&sortBy=submittedDate&sortOrder=descending&start=0&max_results=20 "HTTP/1.1 200 OK" -2026-02-26 13:23:48,105 [INFO] papermind.api: [fcd9971a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57671 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:48,107 [INFO] papermind.api: [966e1c4d] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57671 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:50,105 [INFO] papermind.api: [cbc16115] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57671 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:50,108 [INFO] papermind.api: [6cfcf3d9] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57671 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:52,106 [INFO] papermind.api: [d88a6c81] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57688 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:52,108 [INFO] papermind.api: [49fb6dcf] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57688 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:54,055 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.13371v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:23:54,104 [INFO] papermind.api: [9f048cac] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57688 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:54,108 [INFO] papermind.api: [3307bd27] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57688 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:55,579 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.13371v1 "HTTP/1.1 200 OK" -2026-02-26 13:23:56,107 [INFO] papermind.api: [b5f97606] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57699 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:56,110 [INFO] papermind.api: [9bcbf36b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57699 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:57,195 [INFO] papermind.api: [4a8b40fb] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:57699 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:23:58,105 [INFO] papermind.api: [5bb1a959] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57699 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:23:58,107 [INFO] papermind.api: [b775d217] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57699 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:00,106 [INFO] papermind.api: [920ebc1d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57699 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:00,108 [INFO] papermind.api: [8feb5414] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57699 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:00,546 [WARNING] packages.ai.graph_service: sync_incremental skip 7f946b67: (sqlite3.OperationalError) database is locked -[SQL: INSERT INTO papers (id, title, arxiv_id, abstract, pdf_path, publication_date, read_status, metadata, favorited, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)] -[parameters: ('54278752-8e32-4a9f-9c32-c812f8c6c788', 'Enhanced Diffusion Sampling: Efficient Rare Event Sampling and Free Energy Calculation with Diffusion Models', 'ss-enhanced-diffusion-sampling--efficient-rare-even', '', None, None, 'unread', '{"source": "semantic_scholar"}', 0, '2026-02-26 05:23:29.433902', '2026-02-26 05:23:29.433905')] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2026-02-26 13:24:02,107 [INFO] papermind.api: [3eefaa50] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:57712 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:02,108 [INFO] papermind.api: [5b804f03] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57712 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:02,488 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22AREG%3A+Adversarial+Resource+Extraction+Game+for+Evaluating+Persuasion+and+Resistance+in+Large+Language+Models%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:24:02,892 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7130573691&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:24:03,442 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=AREG%3A+Adversarial+Resource+Extraction+Game+for+Evaluating+Persuasion+and+Resistance+in+Large+Language+Models&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:24:03,442 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:24:04,117 [INFO] papermind.api: [eafdf2f2] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57712 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:04,119 [INFO] papermind.api: [39aa40ac] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57714 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:06,056 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=AREG%3A+Adversarial+Resource+Extraction+Game+for+Evaluating+Persuasion+and+Resistance+in+Large+Language+Models&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:24:06,056 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:24:06,106 [INFO] papermind.api: [4da35af7] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57719 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:06,109 [INFO] papermind.api: [166df90d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57719 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:07,754 [WARNING] packages.ai.daily_runner: skim 082d2d12 failed: (sqlite3.OperationalError) database is locked -[SQL: INSERT INTO pipeline_runs (id, paper_id, pipeline_name, status, retry_count, elapsed_ms, decision_note, error_message, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)] -[parameters: ('2c450082-673a-4875-99bb-f08b07daf974', '082d2d12-70ea-45c5-a308-80448c5a50db', 'skim', 'running', 0, None, None, None, '2026-02-26 05:23:36.641710', '2026-02-26 05:23:36.641713')] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2026-02-26 13:24:07,768 [WARNING] packages.ai.daily_runner: skim 228a4e67 failed: (sqlite3.OperationalError) database is locked -[SQL: INSERT INTO pipeline_runs (id, paper_id, pipeline_name, status, retry_count, elapsed_ms, decision_note, error_message, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)] -[parameters: ('314befb3-6f01-4c7d-a509-e9b74c74fd88', '228a4e67-5607-4150-9c17-a9d7bda9259d', 'skim', 'running', 0, None, None, None, '2026-02-26 05:23:36.643224', '2026-02-26 05:23:36.643225')] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2026-02-26 13:24:07,780 [WARNING] packages.ai.daily_runner: skim 1b8826bb failed: (sqlite3.OperationalError) database is locked -[SQL: INSERT INTO pipeline_runs (id, paper_id, pipeline_name, status, retry_count, elapsed_ms, decision_note, error_message, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)] -[parameters: ('a0fb56ad-b017-417e-a802-104a29cb004a', '1b8826bb-b7ad-4672-9ede-f3f58f93feca', 'skim', 'running', 0, None, None, None, '2026-02-26 05:23:36.638935', '2026-02-26 05:23:36.638942')] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2026-02-26 13:24:08,105 [INFO] papermind.api: [0aaa3ccd] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57719 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:08,108 [INFO] papermind.api: [2eb25c5b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57719 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:10,105 [INFO] papermind.api: [c278cea3] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57719 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:10,108 [INFO] papermind.api: [eff66423] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57719 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:10,654 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=AREG%3A+Adversarial+Resource+Extraction+Game+for+Evaluating+Persuasion+and+Resistance+in+Large+Language+Models&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:24:10,655 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:24:12,107 [INFO] papermind.api: [744586cc] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57741 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:12,110 [INFO] papermind.api: [da41cb4a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57741 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:14,107 [INFO] papermind.api: [bbf9ca9c] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:57741 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:14,108 [INFO] papermind.api: [0bb426ef] GET /papers/folder-stats → 200 (2ms) -INFO: 127.0.0.1:57743 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:24:14,109 [INFO] papermind.api: [0b07407d] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57741 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:16,106 [INFO] papermind.api: [f151af5d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57755 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:16,108 [INFO] papermind.api: [c11364cc] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57755 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:18,106 [INFO] papermind.api: [e80ee6a9] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57755 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:18,107 [INFO] papermind.api: [4a774cd2] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57755 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:18,171 [INFO] packages.integrations.arxiv_client: ArXiv search: 3D texture mapping textured surface → all:3D AND all:texture AND all:mapping (sort=submittedDate start=0) -2026-02-26 13:24:18,580 [INFO] httpx: HTTP Request: GET https://export.arxiv.org/api/query?search_query=all%3A3D+AND+all%3Atexture+AND+all%3Amapping&sortBy=submittedDate&sortOrder=descending&start=0&max_results=20 "HTTP/1.1 200 OK" -2026-02-26 13:24:19,241 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=AREG%3A+Adversarial+Resource+Extraction+Game+for+Evaluating+Persuasion+and+Resistance+in+Large+Language+Models&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:24:19,241 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:24:20,105 [INFO] papermind.api: [ca5c7149] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57755 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:20,107 [INFO] papermind.api: [156d6e68] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57755 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:22,107 [INFO] papermind.api: [acac6809] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57776 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:22,109 [INFO] papermind.api: [52c1bfcc] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57776 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:24,105 [INFO] papermind.api: [53fd21b8] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57776 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:24,107 [INFO] papermind.api: [99690505] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57776 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:26,106 [INFO] papermind.api: [c5924fac] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57779 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:26,108 [INFO] papermind.api: [e84a2367] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57779 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:27,195 [INFO] papermind.api: [826f9912] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:57779 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:24:28,104 [INFO] papermind.api: [fa95c2e7] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57779 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:28,107 [INFO] papermind.api: [1fb95c7b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57779 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:30,106 [INFO] papermind.api: [7bf990d0] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57779 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:30,108 [INFO] papermind.api: [726b0587] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57779 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:32,105 [INFO] papermind.api: [97a603a1] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57798 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:32,108 [INFO] papermind.api: [5e33ae9b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57798 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:34,105 [INFO] papermind.api: [5eeb2f13] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57798 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:34,108 [INFO] papermind.api: [9de5dbfb] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57798 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:35,122 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=AREG%3A+Adversarial+Resource+Extraction+Game+for+Evaluating+Persuasion+and+Resistance+in+Large+Language+Models&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:24:35,122 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:24:36,106 [INFO] papermind.api: [004728df] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57807 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:36,109 [INFO] papermind.api: [38cf1082] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57807 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:38,105 [INFO] papermind.api: [75077cea] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57807 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:38,108 [INFO] papermind.api: [087bdb8b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57807 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:39,460 [WARNING] packages.ai.daily_runner: embed 228a4e67 failed: (sqlite3.OperationalError) database is locked -[SQL: UPDATE papers SET embedding=?, updated_at=? WHERE papers.id = ?] -[parameters: ('[-0.011545514, -0.014175208, -0.0018845274, -0.000897737, 0.0039314465, -0.0024437304, 0.005772757, -0.016773473, 0.010833086, 0.008942011, -0.013075 ... (27518 characters truncated) ... .025479754, -0.0026611255, -0.004601966, 0.021854756, -0.0069356896, 0.0034128411, -0.02489305, 0.016459167, 0.016427737, -0.05980199, -0.0040702648]', '2026-02-26 05:24:08.363881', '228a4e67-5607-4150-9c17-a9d7bda9259d')] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2026-02-26 13:24:39,490 [WARNING] packages.ai.daily_runner: embed 082d2d12 failed: (sqlite3.OperationalError) database is locked -[SQL: UPDATE papers SET embedding=?, updated_at=? WHERE papers.id = ?] -[parameters: ('[-0.01096707, -0.003603252, 0.011027, 0.0017604246, -0.00801555, -0.028346581, -0.017369522, 0.0078107915, -0.002936538, -0.00043261496, 0.025789596, ... (27548 characters truncated) ... 3116326, 0.024650939, -0.0038379752, -0.013394209, -0.0025282693, -0.0027367736, -0.024291363, -0.008704738, 0.009768483, -0.028286653, 0.0049167033]', '2026-02-26 05:24:08.349930', '082d2d12-70ea-45c5-a308-80448c5a50db')] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2026-02-26 13:24:39,519 [WARNING] packages.ai.daily_runner: embed 1b8826bb failed: (sqlite3.OperationalError) database is locked -[SQL: UPDATE papers SET embedding=?, updated_at=? WHERE papers.id = ?] -[parameters: ('[-0.028504645, 0.004618321, 0.020841654, -0.0016065441, -0.018894328, -0.0035867644, 0.0038130754, -0.0045709535, -0.023262653, 0.010178727, -0.00855 ... (27542 characters truncated) ... -0.025599446, 0.025894176, 0.005410409, 0.0012302365, -0.010399775, -0.023304759, 0.0367571, -0.003936757, -0.007820883, -0.018241711, -0.0108523965]', '2026-02-26 05:24:08.379012', '1b8826bb-b7ad-4672-9ede-f3f58f93feca')] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2026-02-26 13:24:39,731 [INFO] httpx: HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" -2026-02-26 13:24:39,870 [INFO] httpx: HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" -2026-02-26 13:24:39,870 [INFO] httpx: HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" -2026-02-26 13:24:40,106 [INFO] papermind.api: [cfc2c18c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57807 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:40,108 [INFO] papermind.api: [aa2120fa] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57807 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:42,105 [INFO] papermind.api: [b9797054] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57836 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:42,109 [INFO] papermind.api: [97d325ac] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57836 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:44,106 [INFO] papermind.api: [eaf4a155] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57836 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:44,109 [INFO] papermind.api: [03717b3f] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57836 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:44,111 [INFO] papermind.api: [f6343aa1] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:57841 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:24:46,106 [INFO] papermind.api: [48acdf68] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57851 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:46,108 [INFO] papermind.api: [63845059] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57851 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:48,106 [INFO] papermind.api: [1f8c14bb] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57851 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:48,108 [INFO] papermind.api: [290bdfbe] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57851 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:49,834 [INFO] packages.integrations.arxiv_client: ArXiv search: texture mapping 3D → all:texture AND all:mapping AND all:3D (sort=submittedDate start=0) -2026-02-26 13:24:50,107 [INFO] papermind.api: [34b8f736] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57851 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:50,111 [INFO] papermind.api: [17c961b8] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57851 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:50,127 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:24:50,736 [INFO] httpx: HTTP Request: GET https://export.arxiv.org/api/query?search_query=all%3Atexture+AND+all%3Amapping+AND+all%3A3D&sortBy=submittedDate&sortOrder=descending&start=0&max_results=20 "HTTP/1.1 200 OK" -2026-02-26 13:24:51,375 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Quecto-V1%3A+Empirical+Analysis+of+8-bit+Quantized+Small+Language+Models+for+On-Device+Legal+Retrieval%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:24:51,802 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7130617415&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:24:52,105 [INFO] papermind.api: [f594cf2d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57872 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:52,108 [INFO] papermind.api: [5b73e7ed] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57872 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:52,385 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Quecto-V1%3A+Empirical+Analysis+of+8-bit+Quantized+Small+Language+Models+for+On-Device+Legal+Retrieval&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:24:52,386 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:24:54,105 [INFO] papermind.api: [2b19efd9] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57872 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:54,108 [INFO] papermind.api: [a2c5a48f] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57872 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:54,676 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Quecto-V1%3A+Empirical+Analysis+of+8-bit+Quantized+Small+Language+Models+for+On-Device+Legal+Retrieval&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:24:54,676 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:24:56,107 [INFO] papermind.api: [60f38879] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57877 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:56,109 [INFO] papermind.api: [0233b310] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57877 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:56,631 [INFO] papermind.api: [a6377cf3] GET /today → 200 (3ms) -INFO: 127.0.0.1:57889 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:24:58,106 [INFO] papermind.api: [46648995] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57896 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:58,108 [INFO] papermind.api: [20b65dd6] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57896 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:24:58,968 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Quecto-V1%3A+Empirical+Analysis+of+8-bit+Quantized+Small+Language+Models+for+On-Device+Legal+Retrieval&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:24:58,968 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:25:00,106 [INFO] papermind.api: [a4050eba] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57896 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:00,108 [INFO] papermind.api: [8dc431e1] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57896 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:02,105 [INFO] papermind.api: [b0ac7b88] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57904 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:02,108 [INFO] papermind.api: [b1318caf] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57904 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:04,106 [INFO] papermind.api: [289d0e05] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57904 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:04,107 [INFO] papermind.api: [fe938d1d] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57904 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:06,105 [INFO] papermind.api: [56f3d008] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57911 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:06,108 [INFO] papermind.api: [e3b8b83d] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57911 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:07,448 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Quecto-V1%3A+Empirical+Analysis+of+8-bit+Quantized+Small+Language+Models+for+On-Device+Legal+Retrieval&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:25:07,448 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:25:08,107 [INFO] papermind.api: [699592a7] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57911 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:08,110 [INFO] papermind.api: [1dac6b90] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57911 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:10,105 [INFO] papermind.api: [8919fdfd] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57911 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:10,108 [INFO] papermind.api: [d9ef3069] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57911 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:10,336 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.10814v2.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:25:10,440 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.10814v2 "HTTP/1.1 200 OK" -2026-02-26 13:25:10,602 [WARNING] packages.ai.daily_runner: skim 0adc4a13 failed: (sqlite3.OperationalError) database is locked -[SQL: INSERT INTO pipeline_runs (id, paper_id, pipeline_name, status, retry_count, elapsed_ms, decision_note, error_message, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)] -[parameters: ('045cca09-e468-4d31-9830-50bf50fc1ea3', '0adc4a13-766b-4e0d-873e-83ca660aa9e3', 'skim', 'running', 0, None, None, None, '2026-02-26 05:24:39.492079', '2026-02-26 05:24:39.492086')] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2026-02-26 13:25:10,609 [INFO] papermind.api: [f5982fc4] GET /metrics/costs → 200 (13981ms) -INFO: 127.0.0.1:57886 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:25:10,610 [INFO] papermind.api: [a570a5a6] GET /pipelines/runs → 200 (13982ms) -INFO: 127.0.0.1:57887 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:25:10,611 [INFO] papermind.api: [a3a3d42d] GET /system/status → 200 (13984ms) -INFO: 127.0.0.1:57877 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:25:10,612 [INFO] papermind.api: [d086bf6c] GET /papers/folder-stats → 200 (13421ms) -INFO: 127.0.0.1:57889 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:25:10,624 [WARNING] packages.ai.daily_runner: skim 28d49135 failed: (sqlite3.OperationalError) database is locked -[SQL: INSERT INTO pipeline_runs (id, paper_id, pipeline_name, status, retry_count, elapsed_ms, decision_note, error_message, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)] -[parameters: ('4efe01cb-1e4e-40b4-a041-bccef42ec3ca', '28d49135-6c26-405b-b71c-a810271b0355', 'skim', 'running', 0, None, None, None, '2026-02-26 05:24:39.466926', '2026-02-26 05:24:39.466935')] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2026-02-26 13:25:10,695 [WARNING] packages.ai.daily_runner: skim f98771c2 failed: (sqlite3.OperationalError) database is locked -[SQL: INSERT INTO pipeline_runs (id, paper_id, pipeline_name, status, retry_count, elapsed_ms, decision_note, error_message, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)] -[parameters: ('0391865e-e7a9-4412-96eb-f3d89f4c3454', 'f98771c2-8da2-49dc-ac30-eba0ba4b1465', 'skim', 'running', 0, None, None, None, '2026-02-26 05:24:39.520693', '2026-02-26 05:24:39.520695')] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2026-02-26 13:25:11,385 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.07571v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:25:12,110 [INFO] papermind.api: [dd2a192f] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:57927 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:12,113 [INFO] papermind.api: [ed884956] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57927 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:12,417 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.07571v1 "HTTP/1.1 200 OK" -2026-02-26 13:25:14,107 [INFO] papermind.api: [b452cc0e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57927 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:14,108 [INFO] papermind.api: [d1023bc8] GET /papers/folder-stats → 200 (2ms) -INFO: 127.0.0.1:57929 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:25:14,108 [INFO] papermind.api: [49833c42] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57927 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:16,107 [INFO] papermind.api: [173c510b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57936 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:16,109 [INFO] papermind.api: [8141a14b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57938 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:18,105 [INFO] papermind.api: [14726648] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57938 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:18,107 [INFO] papermind.api: [4498a664] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57938 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:20,105 [INFO] papermind.api: [dc6fb32c] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57938 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:20,108 [INFO] papermind.api: [f6218406] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57938 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:22,001 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.04520v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:25:22,025 [INFO] packages.integrations.arxiv_client: ArXiv search: texture mapping 3D → all:texture AND all:mapping AND all:3D (sort=submittedDate start=0) -2026-02-26 13:25:22,107 [INFO] papermind.api: [6a095adf] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57952 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:22,109 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.04520v1 "HTTP/1.1 200 OK" -2026-02-26 13:25:22,110 [INFO] papermind.api: [ab492dff] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57954 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:22,434 [INFO] httpx: HTTP Request: GET https://export.arxiv.org/api/query?search_query=all%3Atexture+AND+all%3Amapping+AND+all%3A3D&sortBy=submittedDate&sortOrder=descending&start=0&max_results=20 "HTTP/1.1 200 OK" -2026-02-26 13:25:23,293 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Quecto-V1%3A+Empirical+Analysis+of+8-bit+Quantized+Small+Language+Models+for+On-Device+Legal+Retrieval&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:25:23,294 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:25:24,105 [INFO] papermind.api: [aeefd5e3] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57954 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:24,109 [INFO] papermind.api: [4a4861a9] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57954 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:24,296 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2512.23635v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:25:24,775 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2512.23635v1 "HTTP/1.1 200 OK" -2026-02-26 13:25:26,105 [INFO] papermind.api: [32f4b702] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57966 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:26,108 [INFO] papermind.api: [0382b3f9] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57966 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:27,194 [INFO] papermind.api: [fb3ccbd7] GET /papers/folder-stats → 200 (3ms) -INFO: 127.0.0.1:57966 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:25:27,743 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2512.22486v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:25:28,105 [INFO] papermind.api: [add654da] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57966 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:28,108 [INFO] papermind.api: [53e6032a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57966 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:28,875 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2512.22486v1 "HTTP/1.1 200 OK" -2026-02-26 13:25:29,847 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2512.19402v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:25:30,107 [INFO] papermind.api: [2a424f20] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57966 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:30,108 [INFO] papermind.api: [12d07825] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57966 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:31,555 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2512.19402v1 "HTTP/1.1 200 OK" -2026-02-26 13:25:32,105 [INFO] papermind.api: [714f5a4e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57977 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:32,108 [INFO] papermind.api: [37a5d641] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57977 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:34,105 [INFO] papermind.api: [5a62753c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57977 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:34,108 [INFO] papermind.api: [550aa16f] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57977 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:36,125 [INFO] papermind.api: [7702b61b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57988 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:36,127 [INFO] papermind.api: [1b178709] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57990 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:36,607 [ERROR] apps.api.main: 每日任务失败: Instance is not bound to a Session; attribute refresh operation cannot proceed (Background on this error at: https://sqlalche.me/e/20/bhk3) -Traceback (most recent call last): - File "/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py", line 1321, in _run_daily - ingest = run_daily_ingest() - File "/Users/haojiang/Documents/2026/PaperMind/packages/ai/daily_runner.py", line 147, in run_daily_ingest - results.append(run_topic_ingest(tid)) - ~~~~~~~~~~~~~~~~^^^^^ - File "/Users/haojiang/Documents/2026/PaperMind/packages/ai/daily_runner.py", line 106, in run_topic_ingest - futs = {pool.submit(_process_paper, p.id): p for p in unique} - ^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/sqlalchemy/orm/attributes.py", line 569, in __get__ - return self.impl.get(state, dict_) # type: ignore[no-any-return] - ~~~~~~~~~~~~~^^^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/sqlalchemy/orm/attributes.py", line 1096, in get - value = self._fire_loader_callables(state, key, passive) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/sqlalchemy/orm/attributes.py", line 1126, in _fire_loader_callables - return state._load_expired(state, passive) - ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/sqlalchemy/orm/state.py", line 828, in _load_expired - self.manager.expired_attribute_loader(self, toload, passive) - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/sqlalchemy/orm/loading.py", line 1607, in load_scalar_attributes - raise orm_exc.DetachedInstanceError( - ...<2 lines>... - ) -sqlalchemy.orm.exc.DetachedInstanceError: Instance is not bound to a Session; attribute refresh operation cannot proceed (Background on this error at: https://sqlalche.me/e/20/bhk3) -2026-02-26 13:25:36,924 [INFO] httpx: HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" -2026-02-26 13:25:38,105 [INFO] papermind.api: [fa42b281] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:57990 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:38,108 [INFO] papermind.api: [4453d801] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57990 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:38,299 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:25:38,566 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22EndoDDC%3A+Learning+Sparse+to+Dense+Reconstruction+for+Endoscopic+Robotic+Navigation+via+Diffusion+Depth+Completion%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:25:40,062 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Optimizer+choice+matters+for+the+emergence+of+Neural+Collapse%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:25:40,105 [INFO] papermind.api: [27632aa8] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57990 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:40,109 [INFO] papermind.api: [58625a62] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:57990 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:40,441 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7130618016&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:25:40,967 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Optimizer+choice+matters+for+the+emergence+of+Neural+Collapse&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:25:40,967 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:25:41,130 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=EndoDDC%3A+Learning+Sparse+to+Dense+Reconstruction+for+Endoscopic+Robotic+Navigation+via+Diffusion+Depth+Completion&limit=1&fields=title "HTTP/1.1 500 Internal Server Error" -2026-02-26 13:25:41,130 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 500 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:25:42,052 [WARNING] packages.ai.daily_runner: embed 0adc4a13 failed: (sqlite3.OperationalError) database is locked -[SQL: UPDATE papers SET embedding=?, updated_at=? WHERE papers.id = ?] -[parameters: ('[-0.011054196, -0.0021972682, -0.0037702706, 0.0077231326, -0.02003573, -0.01949289, -0.034978636, -0.0049595837, -0.0068743285, -0.008458435, -0.002 ... (27551 characters truncated) ... 02175308, 0.013807876, -0.010540966, -0.010077084, -0.009243085, 0.0020701943, 0.0034346967, 0.0073135355, -0.0047794594, -0.008739724, -0.020252867]', '2026-02-26 05:25:10.927785', '0adc4a13-766b-4e0d-873e-83ca660aa9e3')] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2026-02-26 13:25:42,106 [INFO] papermind.api: [eb2315d0] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58027 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:42,108 [INFO] papermind.api: [f1cbf185] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58027 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:42,262 [WARNING] packages.ai.daily_runner: embed 28d49135 failed: (sqlite3.OperationalError) database is locked -[SQL: UPDATE papers SET embedding=?, updated_at=? WHERE papers.id = ?] -[parameters: ('[-0.019162674, 0.012785112, 0.008881604, 0.020832036, -0.02451063, -0.01564402, 0.008181872, -0.005947726, 0.028389147, 0.02487049, -0.0009758769, 0. ... (27527 characters truncated) ... 15753977, 0.033207305, -0.014334519, 0.0021304355, -0.009851233, 0.027109634, -0.00074409053, -0.0028664041, 0.023870872, -0.012585188, -0.018782819]', '2026-02-26 05:25:11.110385', '28d49135-6c26-405b-b71c-a810271b0355')] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2026-02-26 13:25:42,295 [INFO] httpx: HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" -2026-02-26 13:25:42,588 [INFO] httpx: HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" -2026-02-26 13:25:43,413 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=EndoDDC%3A+Learning+Sparse+to+Dense+Reconstruction+for+Endoscopic+Robotic+Navigation+via+Diffusion+Depth+Completion&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:25:43,414 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:25:43,566 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Optimizer+choice+matters+for+the+emergence+of+Neural+Collapse&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:25:43,566 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:25:44,110 [INFO] papermind.api: [472cf710] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:58027 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:44,115 [INFO] papermind.api: [6c94f29e] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:58027 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:44,123 [INFO] papermind.api: [e242dcc7] GET /papers/folder-stats → 200 (14ms) -INFO: 127.0.0.1:58044 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:25:46,105 [INFO] papermind.api: [181a7b55] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58060 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:46,108 [INFO] papermind.api: [5f6610f0] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58060 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:47,836 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Optimizer+choice+matters+for+the+emergence+of+Neural+Collapse&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:25:47,837 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:25:48,103 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=EndoDDC%3A+Learning+Sparse+to+Dense+Reconstruction+for+Endoscopic+Robotic+Navigation+via+Diffusion+Depth+Completion&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:25:48,108 [INFO] papermind.api: [caab9488] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58060 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:48,109 [INFO] papermind.api: [9494173b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58060 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:49,673 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22SynthRender+and+IRIS%3A+Open-Source+Framework+and+Dataset+for+Bidirectional+Sim-Real+Transfer+in+Industrial+Object+Perception%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:25:50,107 [INFO] papermind.api: [98a50dc1] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58060 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:50,111 [INFO] papermind.api: [7d620bd9] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58060 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:50,140 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=SynthRender+and+IRIS%3A+Open-Source+Framework+and+Dataset+for+Bidirectional+Sim-Real+Transfer+in+Industrial+Object+Perception&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:25:50,982 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/7d9d8f49ecc464bc2dfc86193d18e7e4a0943898?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 200 OK" -2026-02-26 13:25:52,106 [INFO] papermind.api: [11981075] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58079 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:52,108 [INFO] papermind.api: [66168eeb] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58079 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:52,242 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22BigMaQ%3A+A+Big+Macaque+Motion+and+Animation+Dataset+Bridging+Image+and+3D+Pose+Representations%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:25:52,764 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7131319101&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:25:53,444 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=BigMaQ%3A+A+Big+Macaque+Motion+and+Animation+Dataset+Bridging+Image+and+3D+Pose+Representations&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:25:53,444 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:25:53,687 [INFO] packages.integrations.arxiv_client: ArXiv search: texture mapping 3D → all:texture AND all:mapping AND all:3D (sort=submittedDate start=0) -2026-02-26 13:25:54,066 [INFO] httpx: HTTP Request: GET https://export.arxiv.org/api/query?search_query=all%3Atexture+AND+all%3Amapping+AND+all%3A3D&sortBy=submittedDate&sortOrder=descending&start=0&max_results=20 "HTTP/1.1 200 OK" -2026-02-26 13:25:54,106 [INFO] papermind.api: [f547d2e2] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58079 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:54,109 [INFO] papermind.api: [e1d9969a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58079 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:56,046 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=BigMaQ%3A+A+Big+Macaque+Motion+and+Animation+Dataset+Bridging+Image+and+3D+Pose+Representations&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:25:56,046 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:25:56,106 [INFO] papermind.api: [257d149c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58090 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:56,108 [INFO] papermind.api: [b98a0ed9] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58090 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:56,676 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Optimizer+choice+matters+for+the+emergence+of+Neural+Collapse&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:25:56,677 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:25:56,913 [INFO] httpx: HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/chat/completions "HTTP/1.1 200 OK" -2026-02-26 13:25:57,194 [INFO] papermind.api: [a16deed6] GET /papers/folder-stats → 200 (3ms) -INFO: 127.0.0.1:58090 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:25:58,106 [INFO] papermind.api: [62de5c49] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58090 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:25:58,108 [INFO] papermind.api: [a57ac789] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58090 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:00,107 [INFO] papermind.api: [5367f84c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58090 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:00,110 [INFO] papermind.api: [955d5074] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58090 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:00,642 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=BigMaQ%3A+A+Big+Macaque+Motion+and+Animation+Dataset+Bridging+Image+and+3D+Pose+Representations&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:26:00,642 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:26:00,899 [INFO] papermind.api: [608fa2cc] GET /today → 200 (2ms) -INFO: 127.0.0.1:58111 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:26:00,902 [INFO] papermind.api: [4f0775de] GET /pipelines/runs → 200 (5ms) -INFO: 127.0.0.1:58109 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:26:00,904 [INFO] papermind.api: [75001e87] GET /metrics/costs → 200 (7ms) -INFO: 127.0.0.1:58108 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:26:00,930 [INFO] papermind.api: [5a9aa231] GET /system/status → 200 (34ms) -INFO: 127.0.0.1:58090 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:26:02,106 [INFO] papermind.api: [57ca24ce] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58115 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:02,109 [INFO] papermind.api: [bdf314b3] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58115 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:04,106 [INFO] papermind.api: [12297801] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58115 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:04,109 [INFO] papermind.api: [2748427c] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58115 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:06,106 [INFO] papermind.api: [d04bbca8] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58122 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:06,109 [INFO] papermind.api: [9a25a2be] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58122 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:08,106 [INFO] papermind.api: [6f97c0a4] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58122 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:08,108 [INFO] papermind.api: [3ace04cd] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58122 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:09,186 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=BigMaQ%3A+A+Big+Macaque+Motion+and+Animation+Dataset+Bridging+Image+and+3D+Pose+Representations&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:26:09,187 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:26:10,051 [INFO] papermind.api: [2834c4a4] GET /today → 200 (2ms) -INFO: 127.0.0.1:58151 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:26:10,051 [INFO] papermind.api: [1ee419c9] GET /pipelines/runs → 200 (2ms) -INFO: 127.0.0.1:58150 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:26:10,054 [INFO] papermind.api: [35a14b1f] GET /metrics/costs → 200 (5ms) -INFO: 127.0.0.1:58148 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:26:10,080 [INFO] papermind.api: [d16c2a46] GET /system/status → 200 (32ms) -INFO: 127.0.0.1:58122 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:26:10,105 [INFO] papermind.api: [19868b97] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58122 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:10,109 [INFO] papermind.api: [a94eb0af] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58122 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:12,106 [INFO] papermind.api: [26115da8] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58157 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:12,109 [INFO] papermind.api: [d5e292a5] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58157 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:12,922 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Optimizer+choice+matters+for+the+emergence+of+Neural+Collapse&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:26:13,345 [WARNING] packages.ai.daily_runner: skim 4f986c68 failed: (sqlite3.OperationalError) database is locked -[SQL: INSERT INTO pipeline_runs (id, paper_id, pipeline_name, status, retry_count, elapsed_ms, decision_note, error_message, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)] -[parameters: ('6b200659-3131-4c0e-a096-c5b9e71163aa', '4f986c68-6f7e-4fbe-a66f-5bf5345a494e', 'skim', 'running', 0, None, None, None, '2026-02-26 05:25:42.264050', '2026-02-26 05:25:42.264054')] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2026-02-26 13:26:13,507 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/47e11b6ab7f7894cb37d44a6f859c24025804be9?fields=references.title%2Ccitations.title "HTTP/1.1 429 " -2026-02-26 13:26:13,507 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/47e11b6ab7f7894cb37d44a6f859c24025804be9, retry 1/5 in 2.0s -2026-02-26 13:26:14,109 [INFO] papermind.api: [dd97a120] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:58157 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:14,112 [INFO] papermind.api: [ebd3e93c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58157 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:14,113 [INFO] papermind.api: [219a6676] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:58166 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:26:16,092 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/47e11b6ab7f7894cb37d44a6f859c24025804be9?fields=references.title%2Ccitations.title "HTTP/1.1 429 " -2026-02-26 13:26:16,093 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/47e11b6ab7f7894cb37d44a6f859c24025804be9, retry 2/5 in 4.0s -2026-02-26 13:26:16,106 [INFO] papermind.api: [e0429787] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58174 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:16,108 [INFO] papermind.api: [e82b298b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58174 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:18,106 [INFO] papermind.api: [4b1590ed] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58174 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:18,109 [INFO] papermind.api: [51d455b5] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58174 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:20,107 [INFO] papermind.api: [c93ff83d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58174 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:20,109 [INFO] papermind.api: [092958fd] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58174 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:20,425 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/47e11b6ab7f7894cb37d44a6f859c24025804be9?fields=references.title%2Ccitations.title "HTTP/1.1 200 OK" -2026-02-26 13:26:22,107 [INFO] papermind.api: [6e68b74f] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58187 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:22,109 [INFO] papermind.api: [42f9345d] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58187 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:24,108 [INFO] papermind.api: [2936c998] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58187 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:24,111 [INFO] papermind.api: [d3ba70e7] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58187 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:24,550 [INFO] httpx: HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/chat/completions "HTTP/1.1 200 OK" -2026-02-26 13:26:24,971 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.21893v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:26:25,061 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.21893v1 "HTTP/1.1 200 OK" -2026-02-26 13:26:25,102 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=BigMaQ%3A+A+Big+Macaque+Motion+and+Animation+Dataset+Bridging+Image+and+3D+Pose+Representations&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:26:25,103 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:26:25,545 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.21141v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:26:25,634 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.21141v1 "HTTP/1.1 200 OK" -2026-02-26 13:26:26,106 [INFO] papermind.api: [486c74ed] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58207 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:26,108 [INFO] papermind.api: [17be82b0] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58207 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:26,673 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.19874v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:26:26,762 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.19874v1 "HTTP/1.1 200 OK" -2026-02-26 13:26:27,194 [INFO] papermind.api: [9237d273] GET /papers/folder-stats → 200 (2ms) -INFO: 127.0.0.1:58207 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:26:28,107 [INFO] papermind.api: [336cde7d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58207 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:28,111 [INFO] papermind.api: [a28b07ee] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58207 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:29,771 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.18741v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:26:29,860 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.18741v1 "HTTP/1.1 200 OK" -2026-02-26 13:26:30,106 [INFO] papermind.api: [cf9a3471] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58207 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:30,109 [INFO] papermind.api: [1bc58af3] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58207 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:32,106 [INFO] papermind.api: [50d8e617] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58220 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:32,109 [INFO] papermind.api: [b4dd6e4f] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58220 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:32,579 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.18258v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:26:32,676 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.18258v1 "HTTP/1.1 200 OK" -2026-02-26 13:26:34,105 [INFO] papermind.api: [134351ee] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58220 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:34,109 [INFO] papermind.api: [79540194] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58220 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:34,275 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.18174v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:26:34,365 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.18174v1 "HTTP/1.1 200 OK" -2026-02-26 13:26:34,955 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.13909v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:26:35,050 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.13909v1 "HTTP/1.1 200 OK" -2026-02-26 13:26:36,109 [INFO] papermind.api: [d8102a68] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:58235 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:36,111 [INFO] papermind.api: [861d955c] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58235 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:36,214 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.12157v2.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:26:36,308 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.12157v2 "HTTP/1.1 200 OK" -2026-02-26 13:26:37,501 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.08397v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:26:37,593 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.08397v1 "HTTP/1.1 200 OK" -2026-02-26 13:26:38,106 [INFO] papermind.api: [8df23599] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58235 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:38,109 [INFO] papermind.api: [78cc1e87] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58235 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:39,211 [WARNING] packages.ai.daily_runner: embed 44fc9319 failed: (sqlite3.OperationalError) database is locked -[SQL: UPDATE papers SET updated_at=? WHERE papers.id = ?] -[parameters: ('2026-02-26 05:26:08.080128', '44fc9319-f3e8-48b0-a0dd-dc2148208563')] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2026-02-26 13:26:40,106 [INFO] papermind.api: [f6c7ca4c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58235 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:40,108 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:26:40,110 [INFO] papermind.api: [c9f5f4e4] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58235 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:40,289 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.06122v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:26:40,379 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2602.06122v1 "HTTP/1.1 200 OK" -2026-02-26 13:26:41,208 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.17895v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:26:41,305 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.17895v1 "HTTP/1.1 200 OK" -2026-02-26 13:26:41,660 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Compact+Hadamard+Latent+Codes+for+Efficient+Spectral+Rendering%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:26:42,090 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7131319533&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:26:42,107 [INFO] papermind.api: [4b5e1a37] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58256 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:42,109 [INFO] papermind.api: [69567a86] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58256 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:42,252 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.14703v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:26:42,341 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.14703v1 "HTTP/1.1 200 OK" -2026-02-26 13:26:42,498 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.13706v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:26:42,589 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.13706v1 "HTTP/1.1 200 OK" -2026-02-26 13:26:44,108 [INFO] papermind.api: [4d5cca76] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:58256 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:44,110 [INFO] papermind.api: [eb2dcf0c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58256 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:44,112 [INFO] papermind.api: [1c3da37e] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:58265 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:26:44,566 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Compact+Hadamard+Latent+Codes+for+Efficient+Spectral+Rendering&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:26:44,611 [WARNING] packages.ai.daily_runner: embed 005ace55 failed: (sqlite3.OperationalError) database is locked -[SQL: UPDATE papers SET embedding=?, updated_at=? WHERE papers.id = ?] -[parameters: ('[0.006871188, 0.009001206, 0.01389273, 0.0028391888, -0.013150983, -0.013150983, 0.0016313433, 0.021069638, 0.006064287, 0.011477039, 0.0013519351, - ... (27479 characters truncated) ... 0.013952872, 0.015316083, -0.02387625, 0.031514246, -0.0016426198, -0.012439306, 0.014333769, -0.0036110072, -0.004550721, -0.022833794, -0.03241637]', '2026-02-26 05:26:13.459510', '005ace55-b3f3-46bf-a1ab-810390f8c1fd')] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2026-02-26 13:26:44,884 [WARNING] packages.ai.daily_runner: embed 4f986c68 failed: (sqlite3.OperationalError) database is locked -[SQL: UPDATE papers SET updated_at=? WHERE papers.id = ?] -[parameters: ('2026-02-26 05:26:13.778127', '4f986c68-6f7e-4fbe-a66f-5bf5345a494e')] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2026-02-26 13:26:45,340 [INFO] httpx: HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/embeddings "HTTP/1.1 200 OK" -2026-02-26 13:26:45,694 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22RoEL%3A+Robust+Event-based+3D+Line+Reconstruction%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:26:46,074 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.13371v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:26:46,106 [INFO] papermind.api: [9cb49dd0] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58275 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:46,109 [INFO] papermind.api: [92749b0b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58275 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:46,114 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7131191878&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:26:46,164 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.13371v1 "HTTP/1.1 200 OK" -2026-02-26 13:26:47,132 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=RoEL%3A+Robust+Event-based+3D+Line+Reconstruction&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:26:47,839 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/c7240b74b1809cf16a85dca2ff6d54a21456df56?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 200 OK" -2026-02-26 13:26:48,115 [INFO] papermind.api: [f3ff0415] GET /tasks/active → 200 (6ms) -INFO: 127.0.0.1:58275 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:48,117 [INFO] papermind.api: [6b5e4f88] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58275 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:48,644 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Have+We+Mastered+Scale+in+Deep+Monocular+Visual+SLAM%3F+The+ScaleMaster+Dataset+and+Benchmark%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:26:49,034 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7131089518&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:26:49,652 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Have+We+Mastered+Scale+in+Deep+Monocular+Visual+SLAM%3F+The+ScaleMaster+Dataset+and+Benchmark&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:26:49,652 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:26:50,106 [INFO] papermind.api: [d8624f01] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58275 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:50,109 [INFO] papermind.api: [15a35239] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58275 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:51,587 [WARNING] packages.ai.graph_service: sync_incremental skip 798bbc27: (sqlite3.OperationalError) database is locked -[SQL: INSERT INTO papers (id, title, arxiv_id, abstract, pdf_path, publication_date, read_status, metadata, favorited, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)] -[parameters: ('996885fb-fd41-412c-96d4-853102d9c2c3', 'Optimizer choice matters for the emergence of Neural Collapse', 'ss-optimizer-choice-matters-for-the-emergence-of-ne', '', None, None, 'unread', '{"source": "semantic_scholar"}', 0, '2026-02-26 05:26:20.428782', '2026-02-26 05:26:20.428786')] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2026-02-26 13:26:52,107 [INFO] papermind.api: [bb7789ae] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58296 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:52,109 [INFO] papermind.api: [89b21d97] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58296 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:52,246 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Have+We+Mastered+Scale+in+Deep+Monocular+Visual+SLAM%3F+The+ScaleMaster+Dataset+and+Benchmark&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:26:52,246 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:26:53,850 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Factorization+Machine+with+Quadratic-Optimization+Annealing+for+RNA+Inverse+Folding+and+Evaluation+of+Binary-Integer+Encoding+and+Nucleotide+Assignment%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:26:53,860 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.10814v2.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:26:53,949 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.10814v2 "HTTP/1.1 200 OK" -2026-02-26 13:26:54,106 [INFO] papermind.api: [95f85729] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58296 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:54,109 [INFO] papermind.api: [506b49b3] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58296 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:54,485 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.07571v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:26:54,575 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.07571v1 "HTTP/1.1 200 OK" -2026-02-26 13:26:55,208 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7130618067&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:26:55,793 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.04520v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:26:55,830 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Factorization+Machine+with+Quadratic-Optimization+Annealing+for+RNA+Inverse+Folding+and+Evaluation+of+Binary-Integer+Encoding+and+Nucleotide+Assignment&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:26:55,831 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:26:55,883 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2601.04520v1 "HTTP/1.1 200 OK" -2026-02-26 13:26:56,109 [INFO] papermind.api: [be2782a4] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58303 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:56,110 [INFO] papermind.api: [ecbd0396] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58303 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:56,263 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2512.23635v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:26:56,351 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2512.23635v1 "HTTP/1.1 200 OK" -2026-02-26 13:26:57,196 [INFO] papermind.api: [2ce75481] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:58303 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:26:57,492 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2512.22486v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:26:57,581 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2512.22486v1 "HTTP/1.1 200 OK" -2026-02-26 13:26:57,822 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2512.19402v1.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:26:57,923 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/2512.19402v1 "HTTP/1.1 200 OK" -2026-02-26 13:26:58,106 [INFO] papermind.api: [8176918f] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58303 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:58,109 [INFO] papermind.api: [36bedcd6] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58303 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:26:58,439 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Factorization+Machine+with+Quadratic-Optimization+Annealing+for+RNA+Inverse+Folding+and+Evaluation+of+Binary-Integer+Encoding+and+Nucleotide+Assignment&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:26:58,439 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:26:59,377 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Have+We+Mastered+Scale+in+Deep+Monocular+Visual+SLAM%3F+The+ScaleMaster+Dataset+and+Benchmark&limit=1&fields=title "HTTP/1.1 500 Internal Server Error" -2026-02-26 13:26:59,377 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 500 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:26:59,588 [ERROR] apps.api.main: 每日任务失败: Instance is not bound to a Session; attribute refresh operation cannot proceed (Background on this error at: https://sqlalche.me/e/20/bhk3) -Traceback (most recent call last): - File "/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py", line 1321, in _run_daily - ingest = run_daily_ingest() - File "/Users/haojiang/Documents/2026/PaperMind/packages/ai/daily_runner.py", line 147, in run_daily_ingest - results.append(run_topic_ingest(tid)) - ~~~~~~~~~~~~~~~~^^^^^ - File "/Users/haojiang/Documents/2026/PaperMind/packages/ai/daily_runner.py", line 106, in run_topic_ingest - futs = {pool.submit(_process_paper, p.id): p for p in unique} - ^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/sqlalchemy/orm/attributes.py", line 569, in __get__ - return self.impl.get(state, dict_) # type: ignore[no-any-return] - ~~~~~~~~~~~~~^^^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/sqlalchemy/orm/attributes.py", line 1096, in get - value = self._fire_loader_callables(state, key, passive) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/sqlalchemy/orm/attributes.py", line 1126, in _fire_loader_callables - return state._load_expired(state, passive) - ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/sqlalchemy/orm/state.py", line 828, in _load_expired - self.manager.expired_attribute_loader(self, toload, passive) - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/sqlalchemy/orm/loading.py", line 1607, in load_scalar_attributes - raise orm_exc.DetachedInstanceError( - ...<2 lines>... - ) -sqlalchemy.orm.exc.DetachedInstanceError: Instance is not bound to a Session; attribute refresh operation cannot proceed (Background on this error at: https://sqlalche.me/e/20/bhk3) -2026-02-26 13:27:00,107 [INFO] papermind.api: [1d74dfaa] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58303 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:00,109 [INFO] papermind.api: [ac11f831] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58303 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:00,361 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/ss-deepperfusion--a-comprehensible-two-branched-dee.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:27:00,746 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/ss-deepperfusion--a-comprehensible-two-branched-dee "HTTP/1.1 404 Not Found" -2026-02-26 13:27:00,746 [WARNING] packages.ai.daily_runner: deep_dive 005ace55 failed: Client error '404 Not Found' for url 'https://arxiv.org/pdf/ss-deepperfusion--a-comprehensible-two-branched-dee' -For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404 -2026-02-26 13:27:01,145 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22EndoDDC%3A+Learning+Sparse+to+Dense+Reconstruction+for+Endoscopic+Robotic+Navigation+via+Diffusion+Depth+Completion%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:27:02,106 [INFO] papermind.api: [1a37805e] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58330 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:02,109 [INFO] papermind.api: [011a9601] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58330 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:02,713 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Factorization+Machine+with+Quadratic-Optimization+Annealing+for+RNA+Inverse+Folding+and+Evaluation+of+Binary-Integer+Encoding+and+Nucleotide+Assignment&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:27:02,714 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:27:02,893 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=EndoDDC%3A+Learning+Sparse+to+Dense+Reconstruction+for+Endoscopic+Robotic+Navigation+via+Diffusion+Depth+Completion&limit=1&fields=title "HTTP/1.1 500 Internal Server Error" -2026-02-26 13:27:02,893 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 500 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:27:04,107 [INFO] papermind.api: [b70b85e1] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58330 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:04,109 [INFO] papermind.api: [acc3d1b5] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58330 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:05,200 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=EndoDDC%3A+Learning+Sparse+to+Dense+Reconstruction+for+Endoscopic+Robotic+Navigation+via+Diffusion+Depth+Completion&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:27:05,201 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:27:06,107 [INFO] papermind.api: [473b761d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58349 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:06,109 [INFO] papermind.api: [f0e57437] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58349 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:08,106 [INFO] papermind.api: [5e086134] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58349 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:08,109 [INFO] papermind.api: [db25fc92] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58349 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:08,606 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Have+We+Mastered+Scale+in+Deep+Monocular+Visual+SLAM%3F+The+ScaleMaster+Dataset+and+Benchmark&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:27:09,200 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/16dce0cedad31ed2b1924fd706788550d95bb3fb?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 429 " -2026-02-26 13:27:09,200 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/16dce0cedad31ed2b1924fd706788550d95bb3fb, retry 1/5 in 2.0s -2026-02-26 13:27:09,681 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=EndoDDC%3A+Learning+Sparse+to+Dense+Reconstruction+for+Endoscopic+Robotic+Navigation+via+Diffusion+Depth+Completion&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:27:10,107 [INFO] papermind.api: [06b359e5] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58349 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:10,110 [INFO] papermind.api: [c1278a35] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58349 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:10,337 [WARNING] packages.ai.daily_runner: deep_dive 44fc9319 failed: (sqlite3.OperationalError) database is locked -[SQL: INSERT INTO pipeline_runs (id, paper_id, pipeline_name, status, retry_count, elapsed_ms, decision_note, error_message, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)] -[parameters: ('20716090-8896-4956-ae47-2437a6c3fce3', '44fc9319-f3e8-48b0-a0dd-dc2148208563', 'deep_dive', 'running', 0, None, None, None, '2026-02-26 05:26:39.212026', '2026-02-26 05:26:39.212029')] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2026-02-26 13:27:11,255 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Factorization+Machine+with+Quadratic-Optimization+Annealing+for+RNA+Inverse+Folding+and+Evaluation+of+Binary-Integer+Encoding+and+Nucleotide+Assignment&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:27:11,255 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:27:11,481 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/16dce0cedad31ed2b1924fd706788550d95bb3fb?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 429 " -2026-02-26 13:27:11,481 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/16dce0cedad31ed2b1924fd706788550d95bb3fb, retry 2/5 in 4.0s -2026-02-26 13:27:11,623 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22SynthRender+and+IRIS%3A+Open-Source+Framework+and+Dataset+for+Bidirectional+Sim-Real+Transfer+in+Industrial+Object+Perception%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:27:11,917 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=SynthRender+and+IRIS%3A+Open-Source+Framework+and+Dataset+for+Bidirectional+Sim-Real+Transfer+in+Industrial+Object+Perception&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:27:11,917 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:27:12,106 [INFO] papermind.api: [99661020] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58366 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:12,109 [INFO] papermind.api: [91f5dc48] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58366 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:14,109 [INFO] papermind.api: [e5f1f37a] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:58366 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:14,112 [INFO] papermind.api: [549fd75f] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58366 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:14,112 [INFO] papermind.api: [fcee5938] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:58371 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:27:14,197 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=SynthRender+and+IRIS%3A+Open-Source+Framework+and+Dataset+for+Bidirectional+Sim-Real+Transfer+in+Industrial+Object+Perception&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:27:14,198 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:27:15,761 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/16dce0cedad31ed2b1924fd706788550d95bb3fb?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 429 " -2026-02-26 13:27:15,761 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/16dce0cedad31ed2b1924fd706788550d95bb3fb, retry 3/5 in 8.0s -2026-02-26 13:27:16,108 [INFO] papermind.api: [352c22c7] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58377 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:16,110 [INFO] papermind.api: [33344f36] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58377 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:18,106 [INFO] papermind.api: [dd845c75] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58377 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:18,109 [INFO] papermind.api: [92c103ef] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58377 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:18,803 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=SynthRender+and+IRIS%3A+Open-Source+Framework+and+Dataset+for+Bidirectional+Sim-Real+Transfer+in+Industrial+Object+Perception&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:27:18,803 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:27:20,107 [INFO] papermind.api: [ed91de1a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58377 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:20,110 [INFO] papermind.api: [3736b965] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58377 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:22,106 [INFO] papermind.api: [bef813dc] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58386 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:22,109 [INFO] papermind.api: [2e6ba1ab] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58386 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:24,107 [INFO] papermind.api: [d9946e18] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58386 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:24,109 [INFO] papermind.api: [dcc8bd5d] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58386 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:24,324 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/16dce0cedad31ed2b1924fd706788550d95bb3fb?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 429 " -2026-02-26 13:27:24,324 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/16dce0cedad31ed2b1924fd706788550d95bb3fb, retry 4/5 in 15.0s -2026-02-26 13:27:26,109 [INFO] papermind.api: [f35b152d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58402 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:26,111 [INFO] papermind.api: [8c344736] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58402 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:26,827 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Factorization+Machine+with+Quadratic-Optimization+Annealing+for+RNA+Inverse+Folding+and+Evaluation+of+Binary-Integer+Encoding+and+Nucleotide+Assignment&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:27:26,827 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:27:26,847 [INFO] httpx: HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/chat/completions "HTTP/1.1 200 OK" -2026-02-26 13:27:27,215 [INFO] papermind.api: [ccd0b449] GET /papers/folder-stats → 200 (21ms) -INFO: 127.0.0.1:58402 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:27:27,597 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/ss-super4dr--4d-radar-centric-self-supervised-odome.pdf "HTTP/1.1 301 Moved Permanently" -2026-02-26 13:27:27,666 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=SynthRender+and+IRIS%3A+Open-Source+Framework+and+Dataset+for+Bidirectional+Sim-Real+Transfer+in+Industrial+Object+Perception&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:27:27,666 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:27:28,016 [INFO] httpx: HTTP Request: GET https://arxiv.org/pdf/ss-super4dr--4d-radar-centric-self-supervised-odome "HTTP/1.1 404 Not Found" -2026-02-26 13:27:28,017 [WARNING] packages.ai.daily_runner: deep_dive 1bcfd820 failed: Client error '404 Not Found' for url 'https://arxiv.org/pdf/ss-super4dr--4d-radar-centric-self-supervised-odome' -For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404 -2026-02-26 13:27:28,018 [INFO] apps.api.main: 批量处理完成: 10 成功, 0 失败 -2026-02-26 13:27:28,106 [INFO] papermind.api: [c77894f8] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58402 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:28,109 [INFO] papermind.api: [becd30f9] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58402 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:30,107 [INFO] papermind.api: [38f18365] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58402 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:30,110 [INFO] papermind.api: [d8707778] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58402 - "GET /tasks/active HTTP/1.1" 200 OK -INFO: 127.0.0.1:58422 - "OPTIONS /actions?limit=30 HTTP/1.1" 200 OK -INFO: 127.0.0.1:58424 - "OPTIONS /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -INFO: 127.0.0.1:58425 - "OPTIONS /actions?limit=30 HTTP/1.1" 200 OK -INFO: 127.0.0.1:58428 - "OPTIONS /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:27:32,111 [INFO] papermind.api: [4fad1737] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:58429 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:32,112 [INFO] papermind.api: [3bc5e667] GET /papers/folder-stats → 200 (6ms) -INFO: 127.0.0.1:58419 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:27:32,113 [INFO] papermind.api: [aad9c10e] GET /actions → 200 (5ms) -INFO: 127.0.0.1:58422 - "GET /actions?limit=30 HTTP/1.1" 200 OK -2026-02-26 13:27:32,113 [INFO] papermind.api: [baaf032e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58428 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:32,117 [INFO] papermind.api: [e31401ab] GET /papers/latest → 200 (9ms) -INFO: 127.0.0.1:58425 - "GET /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:27:32,118 [INFO] papermind.api: [58c2e6c0] GET /actions → 200 (4ms) -INFO: 127.0.0.1:58419 - "GET /actions?limit=30 HTTP/1.1" 200 OK -2026-02-26 13:27:32,118 [INFO] papermind.api: [ed9f8efe] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:58429 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:27:32,124 [INFO] papermind.api: [756a9ebd] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:58419 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:27:32,126 [INFO] papermind.api: [25e59ef3] GET /papers/latest → 200 (8ms) -INFO: 127.0.0.1:58428 - "GET /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:27:34,108 [INFO] papermind.api: [78e9b720] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58428 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:34,109 [INFO] papermind.api: [c61c4fe7] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58428 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:36,109 [INFO] papermind.api: [eb60f5a2] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58438 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:36,111 [INFO] papermind.api: [9dc82bd2] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58438 - "GET /tasks/active HTTP/1.1" 200 OK -INFO: 127.0.0.1:58440 - "OPTIONS /topics?enabled_only=false HTTP/1.1" 200 OK -INFO: 127.0.0.1:58446 - "OPTIONS /topics?enabled_only=false HTTP/1.1" 200 OK -2026-02-26 13:27:38,092 [INFO] papermind.api: [a90e17a4] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:58438 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:27:38,092 [INFO] papermind.api: [0d9c2dac] GET /topics → 200 (3ms) -INFO: 127.0.0.1:58440 - "GET /topics?enabled_only=false HTTP/1.1" 200 OK -2026-02-26 13:27:38,094 [INFO] papermind.api: [55feb3e8] GET /topics → 200 (2ms) -INFO: 127.0.0.1:58438 - "GET /topics?enabled_only=false HTTP/1.1" 200 OK -2026-02-26 13:27:38,106 [INFO] papermind.api: [645d6097] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58438 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:38,109 [INFO] papermind.api: [b5ae10c6] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58438 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:39,256 [INFO] papermind.api: [7809c4fb] GET /papers/folder-stats → 200 (2ms) -INFO: 127.0.0.1:58438 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:27:39,264 [INFO] papermind.api: [699b785e] GET /generated/list → 200 (9ms) -INFO: 127.0.0.1:58440 - "GET /generated/list?type=topic_wiki&limit=50 HTTP/1.1" 200 OK -2026-02-26 13:27:39,269 [INFO] papermind.api: [1889483e] GET /generated/list → 200 (4ms) -INFO: 127.0.0.1:58438 - "GET /generated/list?type=topic_wiki&limit=50 HTTP/1.1" 200 OK -2026-02-26 13:27:39,874 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/16dce0cedad31ed2b1924fd706788550d95bb3fb?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 429 " -2026-02-26 13:27:39,874 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/16dce0cedad31ed2b1924fd706788550d95bb3fb, retry 5/5 in 15.0s -2026-02-26 13:27:40,041 [INFO] papermind.api: [101c3d20] GET /writing/templates → 200 (2ms) -INFO: 127.0.0.1:58440 - "GET /writing/templates HTTP/1.1" 200 OK -2026-02-26 13:27:40,043 [INFO] papermind.api: [60feedfd] GET /writing/templates → 200 (1ms) -INFO: 127.0.0.1:58446 - "GET /writing/templates HTTP/1.1" 200 OK -2026-02-26 13:27:40,043 [INFO] papermind.api: [286abcc9] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:58438 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:27:40,106 [INFO] papermind.api: [d6901d7b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58438 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:40,110 [INFO] papermind.api: [b69196b1] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58438 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:41,190 [INFO] papermind.api: [1d713c20] GET /papers/folder-stats → 200 (3ms) -INFO: 127.0.0.1:58460 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:27:41,191 [INFO] papermind.api: [ef88819e] GET /generated/list → 200 (4ms) -INFO: 127.0.0.1:58461 - "GET /generated/list?type=daily_brief&limit=50 HTTP/1.1" 200 OK -2026-02-26 13:27:41,193 [INFO] papermind.api: [9ed3d321] GET /generated/list → 200 (1ms) -INFO: 127.0.0.1:58460 - "GET /generated/list?type=daily_brief&limit=50 HTTP/1.1" 200 OK -2026-02-26 13:27:41,195 [INFO] papermind.api: [a9df9b6b] GET /generated/936d8d45-1fce-4c33-aa26-39c997638593 → 200 (1ms) -INFO: 127.0.0.1:58460 - "GET /generated/936d8d45-1fce-4c33-aa26-39c997638593 HTTP/1.1" 200 OK -2026-02-26 13:27:41,196 [INFO] papermind.api: [4e91cc1a] GET /generated/936d8d45-1fce-4c33-aa26-39c997638593 → 200 (1ms) -INFO: 127.0.0.1:58460 - "GET /generated/936d8d45-1fce-4c33-aa26-39c997638593 HTTP/1.1" 200 OK -2026-02-26 13:27:41,832 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:27:42,106 [INFO] papermind.api: [f791fd8b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58460 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:42,110 [INFO] papermind.api: [82a9da38] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58460 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:42,267 [INFO] papermind.api: [90f4b146] GET /papers/folder-stats → 200 (113ms) -INFO: 127.0.0.1:58460 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:27:42,373 [INFO] papermind.api: [e4b1b7d4] GET /graph/frontier → 200 (109ms) -INFO: 127.0.0.1:58468 - "GET /graph/frontier?days=90 HTTP/1.1" 200 OK -2026-02-26 13:27:42,376 [INFO] papermind.api: [01aa7b8d] GET /graph/cocitation-clusters → 200 (112ms) -INFO: 127.0.0.1:58470 - "GET /graph/cocitation-clusters?min_cocite=2 HTTP/1.1" 200 OK -2026-02-26 13:27:42,383 [WARNING] packages.ai.graph_service: UMAP failed: No module named 'umap', falling back to PCA -2026-02-26 13:27:42,392 [INFO] papermind.api: [d6b97e7b] GET /graph/overview → 200 (238ms) -INFO: 127.0.0.1:58461 - "GET /graph/overview HTTP/1.1" 200 OK -2026-02-26 13:27:42,392 [INFO] papermind.api: [f9afc775] GET /graph/bridges → 200 (129ms) -INFO: 127.0.0.1:58467 - "GET /graph/bridges HTTP/1.1" 200 OK -2026-02-26 13:27:42,415 [INFO] papermind.api: [a68637c9] GET /graph/similarity-map → 200 (152ms) -INFO: 127.0.0.1:58471 - "GET /graph/similarity-map?topic_id=&limit=200 HTTP/1.1" 200 OK -2026-02-26 13:27:42,711 [INFO] papermind.api: [2a302a60] GET /actions → 200 (4ms) -INFO: 127.0.0.1:58467 - "GET /actions?limit=30 HTTP/1.1" 200 OK -2026-02-26 13:27:42,712 [INFO] papermind.api: [e00f3d7d] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:58471 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:27:42,713 [INFO] papermind.api: [c2c0e37f] GET /papers/latest → 200 (6ms) -INFO: 127.0.0.1:58461 - "GET /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:27:42,715 [INFO] papermind.api: [045d4c94] GET /actions → 200 (3ms) -INFO: 127.0.0.1:58470 - "GET /actions?limit=30 HTTP/1.1" 200 OK -2026-02-26 13:27:42,715 [INFO] papermind.api: [656cf971] GET /papers/folder-stats → 200 (3ms) -INFO: 127.0.0.1:58467 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:27:42,720 [INFO] papermind.api: [6a5aa369] GET /papers/latest → 200 (5ms) -INFO: 127.0.0.1:58471 - "GET /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:27:42,721 [INFO] papermind.api: [662d80e1] GET /papers/folder-stats → 200 (3ms) -INFO: 127.0.0.1:58470 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:27:43,264 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=SynthRender+and+IRIS%3A+Open-Source+Framework+and+Dataset+for+Bidirectional+Sim-Real+Transfer+in+Industrial+Object+Perception&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:27:43,265 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:27:43,741 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Investigating+Nonlinear+Quenching+Effects+on+Polar+Field+Buildup+in+the+Sun+Using+Physics-Informed+Neural+Networks%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:27:44,108 [INFO] papermind.api: [64e132ad] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:58470 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:44,110 [INFO] papermind.api: [e5661f45] GET /papers/folder-stats → 200 (3ms) -INFO: 127.0.0.1:58471 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:27:44,111 [INFO] papermind.api: [0fe72e89] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58470 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:44,133 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7130534694&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:27:44,159 [INFO] papermind.api: [82a1c13a] GET /papers/folder-stats → 200 (3ms) -INFO: 127.0.0.1:58470 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:27:44,160 [INFO] papermind.api: [5cefbe06] GET /topics → 200 (4ms) -INFO: 127.0.0.1:58471 - "GET /topics?enabled_only=false HTTP/1.1" 200 OK -2026-02-26 13:27:44,162 [INFO] papermind.api: [6b00d3f9] GET /topics → 200 (1ms) -INFO: 127.0.0.1:58470 - "GET /topics?enabled_only=false HTTP/1.1" 200 OK -2026-02-26 13:27:44,716 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Investigating+Nonlinear+Quenching+Effects+on+Polar+Field+Buildup+in+the+Sun+Using+Physics-Informed+Neural+Networks&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:27:44,716 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:27:46,106 [INFO] papermind.api: [66fc2697] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58490 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:46,110 [INFO] papermind.api: [e9e89f9a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58490 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:46,991 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Investigating+Nonlinear+Quenching+Effects+on+Polar+Field+Buildup+in+the+Sun+Using+Physics-Informed+Neural+Networks&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:27:46,991 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:27:48,107 [INFO] papermind.api: [1c8143fa] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58490 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:48,109 [INFO] papermind.api: [e7f85980] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58490 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:50,106 [INFO] papermind.api: [c04c4de0] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58490 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:50,110 [INFO] papermind.api: [60041e00] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58490 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:51,608 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Investigating+Nonlinear+Quenching+Effects+on+Polar+Field+Buildup+in+the+Sun+Using+Physics-Informed+Neural+Networks&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:27:51,610 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:27:52,108 [INFO] papermind.api: [e6bffb24] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58501 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:52,110 [INFO] papermind.api: [6202919d] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58501 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:53,427 [INFO] papermind.api: [cfffef61] GET /actions → 200 (5ms) -INFO: 127.0.0.1:58503 - "GET /actions?limit=30 HTTP/1.1" 200 OK -2026-02-26 13:27:53,428 [INFO] papermind.api: [53c76f28] GET /papers/folder-stats → 200 (6ms) -INFO: 127.0.0.1:58501 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:27:53,430 [INFO] papermind.api: [f48ca6a5] GET /papers/latest → 200 (7ms) -INFO: 127.0.0.1:58505 - "GET /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:27:53,432 [INFO] papermind.api: [348624b3] GET /actions → 200 (3ms) -INFO: 127.0.0.1:58503 - "GET /actions?limit=30 HTTP/1.1" 200 OK -2026-02-26 13:27:53,434 [INFO] papermind.api: [5075c422] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:58507 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:27:53,435 [INFO] papermind.api: [e0aeb80f] GET /papers/latest → 200 (4ms) -INFO: 127.0.0.1:58501 - "GET /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:27:53,437 [INFO] papermind.api: [d8fbf65c] GET /papers/folder-stats → 200 (2ms) -INFO: 127.0.0.1:58503 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:27:54,106 [INFO] papermind.api: [0a95eb2b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58503 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:54,109 [INFO] papermind.api: [4543e95b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58503 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:54,803 [INFO] papermind.api: [1c039b92] GET /generated/list → 200 (5ms) -INFO: 127.0.0.1:58501 - "GET /generated/list?type=daily_brief&limit=50 HTTP/1.1" 200 OK -2026-02-26 13:27:54,805 [INFO] papermind.api: [adc96592] GET /papers/folder-stats → 200 (7ms) -INFO: 127.0.0.1:58503 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:27:54,807 [INFO] papermind.api: [9f8f006f] GET /generated/list → 200 (2ms) -INFO: 127.0.0.1:58507 - "GET /generated/list?type=daily_brief&limit=50 HTTP/1.1" 200 OK -2026-02-26 13:27:54,809 [INFO] papermind.api: [ef138990] GET /generated/936d8d45-1fce-4c33-aa26-39c997638593 → 200 (1ms) -INFO: 127.0.0.1:58503 - "GET /generated/936d8d45-1fce-4c33-aa26-39c997638593 HTTP/1.1" 200 OK -2026-02-26 13:27:54,811 [INFO] papermind.api: [c05c7f14] GET /generated/936d8d45-1fce-4c33-aa26-39c997638593 → 200 (1ms) -INFO: 127.0.0.1:58503 - "GET /generated/936d8d45-1fce-4c33-aa26-39c997638593 HTTP/1.1" 200 OK -2026-02-26 13:27:54,878 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/16dce0cedad31ed2b1924fd706788550d95bb3fb -2026-02-26 13:27:55,411 [INFO] papermind.api: [fa1ae631] GET /papers/folder-stats → 200 (6ms) -INFO: 127.0.0.1:58503 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:27:55,518 [INFO] papermind.api: [4f63b328] GET /graph/frontier → 200 (113ms) -INFO: 127.0.0.1:58505 - "GET /graph/frontier?days=90 HTTP/1.1" 200 OK -2026-02-26 13:27:55,524 [WARNING] packages.ai.graph_service: UMAP failed: No module named 'umap', falling back to PCA -2026-02-26 13:27:55,524 [INFO] papermind.api: [9e1e1b52] GET /graph/cocitation-clusters → 200 (117ms) -INFO: 127.0.0.1:58515 - "GET /graph/cocitation-clusters?min_cocite=2 HTTP/1.1" 200 OK -2026-02-26 13:27:55,525 [INFO] papermind.api: [16f65b33] GET /graph/overview → 200 (120ms) -INFO: 127.0.0.1:58507 - "GET /graph/overview HTTP/1.1" 200 OK -2026-02-26 13:27:55,525 [INFO] papermind.api: [5f980ddd] GET /graph/bridges → 200 (120ms) -INFO: 127.0.0.1:58501 - "GET /graph/bridges HTTP/1.1" 200 OK -2026-02-26 13:27:55,530 [INFO] papermind.api: [488c5f6f] GET /graph/similarity-map → 200 (123ms) -INFO: 127.0.0.1:58516 - "GET /graph/similarity-map?topic_id=&limit=200 HTTP/1.1" 200 OK -2026-02-26 13:27:56,107 [INFO] papermind.api: [a34f977f] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58518 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:56,109 [INFO] papermind.api: [d0dedaad] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58518 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:56,141 [INFO] papermind.api: [f0cc3a31] GET /writing/templates → 200 (2ms) -INFO: 127.0.0.1:58520 - "GET /writing/templates HTTP/1.1" 200 OK -2026-02-26 13:27:56,141 [INFO] papermind.api: [2ac8e538] GET /papers/folder-stats → 200 (3ms) -INFO: 127.0.0.1:58518 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:27:56,142 [INFO] papermind.api: [0e5283f3] GET /writing/templates → 200 (0ms) -INFO: 127.0.0.1:58520 - "GET /writing/templates HTTP/1.1" 200 OK -2026-02-26 13:27:56,444 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22High-fidelity+3D+reconstruction+for+planetary+exploration%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:27:56,997 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7129673408&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:27:57,042 [INFO] papermind.api: [d4117893] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:58520 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:27:57,043 [INFO] papermind.api: [a086b1fb] GET /topics → 200 (4ms) -INFO: 127.0.0.1:58518 - "GET /topics?enabled_only=false HTTP/1.1" 200 OK -2026-02-26 13:27:57,045 [INFO] papermind.api: [c91010b6] GET /topics → 200 (2ms) -INFO: 127.0.0.1:58520 - "GET /topics?enabled_only=false HTTP/1.1" 200 OK -2026-02-26 13:27:57,529 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=High-fidelity+3D+reconstruction+for+planetary+exploration&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:27:57,530 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:27:58,109 [INFO] papermind.api: [4bfed7a2] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58520 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:58,112 [INFO] papermind.api: [fb6d9418] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58518 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:27:58,270 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -INFO: 127.0.0.1:58520 - "OPTIONS /system/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:58522 - "OPTIONS /metrics/costs?days=7 HTTP/1.1" 200 OK -INFO: 127.0.0.1:58533 - "OPTIONS /pipelines/runs?limit=10 HTTP/1.1" 200 OK -INFO: 127.0.0.1:58520 - "OPTIONS /metrics/costs?days=7 HTTP/1.1" 200 OK -INFO: 127.0.0.1:58522 - "OPTIONS /pipelines/runs?limit=10 HTTP/1.1" 200 OK -INFO: 127.0.0.1:58534 - "OPTIONS /today HTTP/1.1" 200 OK -INFO: 127.0.0.1:58535 - "OPTIONS /system/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:58533 - "OPTIONS /today HTTP/1.1" 200 OK -2026-02-26 13:27:58,625 [INFO] papermind.api: [e978ea26] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:58518 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:27:58,626 [INFO] papermind.api: [b5d11fad] GET /pipelines/runs → 200 (3ms) -INFO: 127.0.0.1:58534 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:27:58,628 [INFO] papermind.api: [1a9b18d8] GET /metrics/costs → 200 (4ms) -INFO: 127.0.0.1:58537 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:27:58,632 [INFO] papermind.api: [0817d454] GET /pipelines/runs → 200 (5ms) -INFO: 127.0.0.1:58518 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:27:58,634 [INFO] papermind.api: [94785400] GET /metrics/costs → 200 (2ms) -INFO: 127.0.0.1:58534 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:27:58,656 [INFO] papermind.api: [16a92b52] GET /system/status → 200 (33ms) -INFO: 127.0.0.1:58520 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:27:58,682 [INFO] papermind.api: [628afbbe] GET /today → 200 (58ms) -INFO: 127.0.0.1:58535 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:27:58,684 [INFO] papermind.api: [70169eaf] GET /today → 200 (1ms) -INFO: 127.0.0.1:58520 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:27:58,703 [INFO] papermind.api: [96517434] GET /system/status → 200 (33ms) -INFO: 127.0.0.1:58534 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:28:00,107 [INFO] papermind.api: [5e858b6d] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58534 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:00,110 [INFO] papermind.api: [8bcc31fd] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58534 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:00,143 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=High-fidelity+3D+reconstruction+for+planetary+exploration&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:28:00,143 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:28:00,282 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22BigMaQ%3A+A+Big+Macaque+Motion+and+Animation+Dataset+Bridging+Image+and+3D+Pose+Representations%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:28:00,486 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Investigating+Nonlinear+Quenching+Effects+on+Polar+Field+Buildup+in+the+Sun+Using+Physics-Informed+Neural+Networks&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:28:00,486 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:28:00,823 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7131319101&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:28:01,368 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=BigMaQ%3A+A+Big+Macaque+Motion+and+Animation+Dataset+Bridging+Image+and+3D+Pose+Representations&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:28:01,368 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:28:02,109 [INFO] papermind.api: [2f7a9975] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58549 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:02,112 [INFO] papermind.api: [37a7436b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58549 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:03,653 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=BigMaQ%3A+A+Big+Macaque+Motion+and+Animation+Dataset+Bridging+Image+and+3D+Pose+Representations&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:28:03,653 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:28:04,106 [INFO] papermind.api: [6e713710] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58549 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:04,110 [INFO] papermind.api: [6cda3e27] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58549 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:04,417 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=High-fidelity+3D+reconstruction+for+planetary+exploration&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:28:04,417 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:28:06,107 [INFO] papermind.api: [6c23c600] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58556 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:06,110 [INFO] papermind.api: [fec59365] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58556 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:08,102 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=BigMaQ%3A+A+Big+Macaque+Motion+and+Animation+Dataset+Bridging+Image+and+3D+Pose+Representations&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:28:08,108 [INFO] papermind.api: [4e380688] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58556 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:08,112 [INFO] papermind.api: [c43d3788] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58556 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:08,701 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/f74d83fae9df475bd4631b54199c449b9c55d257?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 429 " -2026-02-26 13:28:08,701 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/f74d83fae9df475bd4631b54199c449b9c55d257, retry 1/5 in 2.0s -2026-02-26 13:28:10,107 [INFO] papermind.api: [3cfaeea4] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58556 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:10,110 [INFO] papermind.api: [15f80dbe] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58556 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:11,302 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/f74d83fae9df475bd4631b54199c449b9c55d257?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 429 " -2026-02-26 13:28:11,302 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/f74d83fae9df475bd4631b54199c449b9c55d257, retry 2/5 in 4.0s -2026-02-26 13:28:12,109 [INFO] papermind.api: [e68b88d8] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:58595 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:12,111 [INFO] papermind.api: [5c52d035] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58595 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:13,000 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=High-fidelity+3D+reconstruction+for+planetary+exploration&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:28:13,000 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:28:14,110 [INFO] papermind.api: [25becde7] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:58595 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:14,112 [INFO] papermind.api: [5ab83f77] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58604 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:14,112 [INFO] papermind.api: [9b0f5f8c] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:58597 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:28:15,903 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/f74d83fae9df475bd4631b54199c449b9c55d257?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 429 " -2026-02-26 13:28:15,903 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/f74d83fae9df475bd4631b54199c449b9c55d257, retry 3/5 in 8.0s -2026-02-26 13:28:16,044 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Investigating+Nonlinear+Quenching+Effects+on+Polar+Field+Buildup+in+the+Sun+Using+Physics-Informed+Neural+Networks&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:28:16,044 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:28:16,107 [INFO] papermind.api: [074ac1cd] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58624 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:16,110 [INFO] papermind.api: [13cf4aa6] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58624 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:17,635 [INFO] papermind.api: [ce16d52f] GET /today → 200 (3ms) -INFO: 127.0.0.1:58636 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:28:17,636 [INFO] papermind.api: [9598518c] GET /pipelines/runs → 200 (4ms) -INFO: 127.0.0.1:58635 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:28:17,638 [INFO] papermind.api: [5ff96c92] GET /metrics/costs → 200 (6ms) -INFO: 127.0.0.1:58633 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:28:17,671 [INFO] papermind.api: [f8a5693f] GET /system/status → 200 (40ms) -INFO: 127.0.0.1:58624 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:28:18,107 [INFO] papermind.api: [623b0dcb] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58624 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:18,111 [INFO] papermind.api: [53a2ef35] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58624 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:20,106 [INFO] papermind.api: [27108e9e] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58624 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:20,110 [INFO] papermind.api: [fc175474] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58624 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:22,108 [INFO] papermind.api: [9fdbb7ce] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58661 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:22,110 [INFO] papermind.api: [0630d108] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58661 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:24,109 [INFO] papermind.api: [8981ce17] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58661 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:24,112 [INFO] papermind.api: [b44cd272] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58661 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:24,699 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/f74d83fae9df475bd4631b54199c449b9c55d257?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 200 OK" -2026-02-26 13:28:26,107 [INFO] papermind.api: [e085560f] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58677 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:26,110 [INFO] papermind.api: [8f563099] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58677 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:26,812 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Compact+Hadamard+Latent+Codes+for+Efficient+Spectral+Rendering%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:28:27,179 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7131319533&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:28:27,466 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Compact+Hadamard+Latent+Codes+for+Efficient+Spectral+Rendering&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:28:27,468 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:28:28,107 [INFO] papermind.api: [fd85b50d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58677 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:28,111 [INFO] papermind.api: [dc30ddd4] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58677 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:28,623 [INFO] papermind.api: [8ef045be] GET /papers/folder-stats → 200 (2ms) -INFO: 127.0.0.1:58677 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:28:28,941 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=High-fidelity+3D+reconstruction+for+planetary+exploration&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:28:28,942 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:28:29,902 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Compact+Hadamard+Latent+Codes+for+Efficient+Spectral+Rendering&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:28:30,112 [INFO] papermind.api: [3c52aab8] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:58677 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:30,114 [INFO] papermind.api: [3643e147] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58677 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:30,506 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/06dd0fc8d36d46d59fa9ad3b76cc2881f6703183?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 429 " -2026-02-26 13:28:30,507 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/06dd0fc8d36d46d59fa9ad3b76cc2881f6703183, retry 1/5 in 2.0s -2026-02-26 13:28:31,056 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:28:32,107 [INFO] papermind.api: [34690b04] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58735 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:32,111 [INFO] papermind.api: [153672e7] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58735 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:32,490 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Align+Once%2C+Benefit+Multilingually%3A+Enforcing+Multilingual+Consistency+for+LLM+Safety+Alignment%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:28:32,899 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7130552415&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:28:33,370 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/06dd0fc8d36d46d59fa9ad3b76cc2881f6703183?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 200 OK" -2026-02-26 13:28:34,106 [INFO] papermind.api: [4f42e2af] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58735 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:34,111 [INFO] papermind.api: [e56db58f] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58735 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:34,767 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Align+Once%2C+Benefit+Multilingually%3A+Enforcing+Multilingual+Consistency+for+LLM+Safety+Alignment&limit=1&fields=title "HTTP/1.1 500 Internal Server Error" -2026-02-26 13:28:34,767 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 500 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:28:34,838 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22RoEL%3A+Robust+Event-based+3D+Line+Reconstruction%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:28:35,232 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7131191878&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:28:35,827 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=RoEL%3A+Robust+Event-based+3D+Line+Reconstruction&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:28:35,827 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:28:36,107 [INFO] papermind.api: [524174da] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58760 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:36,109 [INFO] papermind.api: [8043b753] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58760 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:37,040 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Align+Once%2C+Benefit+Multilingually%3A+Enforcing+Multilingual+Consistency+for+LLM+Safety+Alignment&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:28:37,040 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:28:38,107 [INFO] papermind.api: [4d198443] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58760 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:38,110 [INFO] papermind.api: [e853c561] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58760 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:38,440 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=RoEL%3A+Robust+Event-based+3D+Line+Reconstruction&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:28:38,440 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:28:40,107 [INFO] papermind.api: [a97af3af] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58760 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:40,110 [INFO] papermind.api: [4f5f9f6c] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58760 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:42,107 [INFO] papermind.api: [baebec9c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58775 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:42,110 [INFO] papermind.api: [df913f6d] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58775 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:42,321 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Align+Once%2C+Benefit+Multilingually%3A+Enforcing+Multilingual+Consistency+for+LLM+Safety+Alignment&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:28:42,917 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/0936e9c8fd95cd382335148c4b69d809a2571db0?fields=references.title%2Ccitations.title "HTTP/1.1 429 " -2026-02-26 13:28:42,917 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/0936e9c8fd95cd382335148c4b69d809a2571db0, retry 1/5 in 2.0s -2026-02-26 13:28:43,943 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:28:43,947 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=RoEL%3A+Robust+Event-based+3D+Line+Reconstruction&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:28:44,108 [INFO] papermind.api: [fb994437] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:58775 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:44,110 [INFO] papermind.api: [e40d0b2f] GET /papers/folder-stats → 200 (3ms) -INFO: 127.0.0.1:58786 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:28:44,110 [INFO] papermind.api: [802becad] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58775 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:44,799 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/c7240b74b1809cf16a85dca2ff6d54a21456df56?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 200 OK" -2026-02-26 13:28:45,188 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/0936e9c8fd95cd382335148c4b69d809a2571db0?fields=references.title%2Ccitations.title "HTTP/1.1 429 " -2026-02-26 13:28:45,188 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/0936e9c8fd95cd382335148c4b69d809a2571db0, retry 2/5 in 4.0s -2026-02-26 13:28:45,536 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22TexSpot%3A+3D+Texture+Enhancement+with+Spatially-uniform+Point+Latent+Representation%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:28:46,014 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Have+We+Mastered+Scale+in+Deep+Monocular+Visual+SLAM%3F+The+ScaleMaster+Dataset+and+Benchmark%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:28:46,109 [INFO] papermind.api: [d4aef563] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58796 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:46,112 [INFO] papermind.api: [4ebc2f04] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58796 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:46,895 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7128840807&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:28:47,294 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7131089518&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:28:47,529 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=TexSpot%3A+3D+Texture+Enhancement+with+Spatially-uniform+Point+Latent+Representation&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:28:47,530 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:28:47,891 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Have+We+Mastered+Scale+in+Deep+Monocular+Visual+SLAM%3F+The+ScaleMaster+Dataset+and+Benchmark&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:28:47,891 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:28:48,107 [INFO] papermind.api: [461342d8] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58796 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:48,110 [INFO] papermind.api: [8c333141] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58796 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:49,790 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/0936e9c8fd95cd382335148c4b69d809a2571db0?fields=references.title%2Ccitations.title "HTTP/1.1 429 " -2026-02-26 13:28:49,790 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/0936e9c8fd95cd382335148c4b69d809a2571db0, retry 3/5 in 8.0s -2026-02-26 13:28:49,825 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=TexSpot%3A+3D+Texture+Enhancement+with+Spatially-uniform+Point+Latent+Representation&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:28:49,825 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:28:50,107 [INFO] papermind.api: [af11f711] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58796 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:50,110 [INFO] papermind.api: [4ec4df50] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58796 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:50,507 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Have+We+Mastered+Scale+in+Deep+Monocular+Visual+SLAM%3F+The+ScaleMaster+Dataset+and+Benchmark&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:28:50,507 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:28:52,110 [INFO] papermind.api: [d2cfe8bc] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58815 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:52,113 [INFO] papermind.api: [25b46169] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58815 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:54,107 [INFO] papermind.api: [4119c6d5] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58815 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:54,110 [INFO] papermind.api: [ad90caf7] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58815 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:54,426 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=TexSpot%3A+3D+Texture+Enhancement+with+Spatially-uniform+Point+Latent+Representation&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:28:54,426 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:28:54,796 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Have+We+Mastered+Scale+in+Deep+Monocular+Visual+SLAM%3F+The+ScaleMaster+Dataset+and+Benchmark&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:28:54,796 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:28:56,109 [INFO] papermind.api: [0a42fe30] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58842 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:56,111 [INFO] papermind.api: [d9fe7ee4] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58842 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:58,109 [INFO] papermind.api: [ebe2261d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58842 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:58,110 [INFO] papermind.api: [475a7f2d] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58842 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:28:58,485 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/0936e9c8fd95cd382335148c4b69d809a2571db0?fields=references.title%2Ccitations.title "HTTP/1.1 200 OK" -2026-02-26 13:28:58,624 [INFO] papermind.api: [390d2ed1] GET /papers/folder-stats → 200 (3ms) -INFO: 127.0.0.1:58842 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:29:00,073 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Towards+a+Science+of+AI+Agent+Reliability%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:29:00,107 [INFO] papermind.api: [3a8a4c99] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58842 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:00,110 [INFO] papermind.api: [82849f6a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58842 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:00,598 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7130615426&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:29:01,627 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Towards+a+Science+of+AI+Agent+Reliability&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:29:01,952 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/59b605dcf17521e13d6cb71d9f4d8406facabb44?fields=references.title%2Ccitations.title "HTTP/1.1 200 OK" -2026-02-26 13:29:02,107 [INFO] papermind.api: [23136548] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58853 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:02,110 [INFO] papermind.api: [a93b805c] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58853 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:02,532 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Neighborhood+Stability+as+a+Measure+of+Nearest+Neighbor+Searchability%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:29:02,999 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=TexSpot%3A+3D+Texture+Enhancement+with+Spatially-uniform+Point+Latent+Representation&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:29:03,000 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:29:03,067 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7130617652&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:29:03,298 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Have+We+Mastered+Scale+in+Deep+Monocular+Visual+SLAM%3F+The+ScaleMaster+Dataset+and+Benchmark&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:29:03,299 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:29:03,676 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Neighborhood+Stability+as+a+Measure+of+Nearest+Neighbor+Searchability&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:29:03,677 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:29:04,109 [INFO] papermind.api: [141a13f9] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58853 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:04,112 [INFO] papermind.api: [c86007a0] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58853 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:06,107 [INFO] papermind.api: [3b43d286] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58864 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:06,110 [INFO] papermind.api: [7546cb17] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58864 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:06,291 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Neighborhood+Stability+as+a+Measure+of+Nearest+Neighbor+Searchability&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:29:06,292 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:29:08,108 [INFO] papermind.api: [8030d7c1] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58864 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:08,111 [INFO] papermind.api: [5120790f] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58864 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:10,108 [INFO] papermind.api: [0221fb16] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58864 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:10,110 [INFO] papermind.api: [9bbb7110] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58864 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:10,581 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Neighborhood+Stability+as+a+Measure+of+Nearest+Neighbor+Searchability&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:29:10,582 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:29:12,107 [INFO] papermind.api: [4caaffed] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58900 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:12,110 [INFO] papermind.api: [62aa809e] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58900 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:14,116 [INFO] papermind.api: [767f6ff8] GET /tasks/active → 200 (8ms) -INFO: 127.0.0.1:58900 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:14,121 [INFO] papermind.api: [cc12ad3b] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:58900 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:14,123 [INFO] papermind.api: [7f2495c9] GET /papers/folder-stats → 200 (13ms) -INFO: 127.0.0.1:58907 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:29:16,107 [INFO] papermind.api: [c9bc78f6] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58919 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:16,110 [INFO] papermind.api: [af2dd7cb] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58919 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:18,109 [INFO] papermind.api: [1897b20a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58919 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:18,111 [INFO] papermind.api: [a94fdcc5] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58919 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:18,835 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Have+We+Mastered+Scale+in+Deep+Monocular+Visual+SLAM%3F+The+ScaleMaster+Dataset+and+Benchmark&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:29:18,836 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:29:19,157 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Neighborhood+Stability+as+a+Measure+of+Nearest+Neighbor+Searchability&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:29:19,158 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:29:20,108 [INFO] papermind.api: [252966f0] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58919 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:20,110 [INFO] papermind.api: [910190d9] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58919 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:21,022 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=TexSpot%3A+3D+Texture+Enhancement+with+Spatially-uniform+Point+Latent+Representation&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:29:21,903 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22RealSynCol%3A+a+high-fidelity+synthetic+colon+dataset+for+3D+reconstruction+applications%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:29:22,109 [INFO] papermind.api: [f6a80304] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58942 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:22,111 [INFO] papermind.api: [13606ef3] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58942 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:22,451 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7128515110&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:29:22,727 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=RealSynCol%3A+a+high-fidelity+synthetic+colon+dataset+for+3D+reconstruction+applications&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:29:22,727 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:29:22,935 [INFO] papermind.api: [a0914f14] GET /today → 200 (2ms) -INFO: 127.0.0.1:58954 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:29:22,936 [INFO] papermind.api: [b771ce5e] GET /pipelines/runs → 200 (3ms) -INFO: 127.0.0.1:58953 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:29:22,938 [INFO] papermind.api: [b00a98e9] GET /metrics/costs → 200 (5ms) -INFO: 127.0.0.1:58951 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:29:22,968 [INFO] papermind.api: [32017038] GET /system/status → 200 (36ms) -INFO: 127.0.0.1:58942 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:29:24,108 [INFO] papermind.api: [109ac52e] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58942 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:24,110 [INFO] papermind.api: [32bb823f] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58942 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:25,205 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=RealSynCol%3A+a+high-fidelity+synthetic+colon+dataset+for+3D+reconstruction+applications&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:29:26,108 [INFO] papermind.api: [d5320771] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58961 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:26,110 [INFO] papermind.api: [b0ff234f] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58961 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:26,160 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/64a4dbd7bd42f8da6d78a501fd21511e6288fae6?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 200 OK" -2026-02-26 13:29:27,652 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22From+Blurry+to+Believable%3A+Enhancing+Low-quality+Talking+Heads+with+3D+Generative+Priors%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:29:28,108 [INFO] papermind.api: [2964bbc5] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58961 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:28,111 [INFO] papermind.api: [d206a086] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58961 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:28,193 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7128408400&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:29:28,623 [INFO] papermind.api: [27fa1215] GET /papers/folder-stats → 200 (2ms) -INFO: 127.0.0.1:58961 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:29:28,792 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=From+Blurry+to+Believable%3A+Enhancing+Low-quality+Talking+Heads+with+3D+Generative+Priors&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:29:28,792 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:29:30,107 [INFO] papermind.api: [6143af79] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58961 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:30,111 [INFO] papermind.api: [23f489bb] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58961 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:31,418 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=From+Blurry+to+Believable%3A+Enhancing+Low-quality+Talking+Heads+with+3D+Generative+Priors&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:29:31,419 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:29:32,109 [INFO] papermind.api: [8d12f12f] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58970 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:32,111 [INFO] papermind.api: [92079195] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58970 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:33,841 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:29:34,108 [INFO] papermind.api: [e44dd111] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58970 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:34,111 [INFO] papermind.api: [2a548957] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58970 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:34,699 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Neighborhood+Stability+as+a+Measure+of+Nearest+Neighbor+Searchability&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:29:34,700 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:29:35,432 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22High-fidelity+3D+reconstruction+for+planetary+exploration%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:29:35,691 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=From+Blurry+to+Believable%3A+Enhancing+Low-quality+Talking+Heads+with+3D+Generative+Priors&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:29:35,691 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:29:35,987 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7129673408&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:29:36,107 [INFO] papermind.api: [c70455e7] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58992 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:36,110 [INFO] papermind.api: [d36596cc] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58992 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:38,108 [INFO] papermind.api: [366df3a0] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58992 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:38,112 [INFO] papermind.api: [56423228] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:58992 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:38,291 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=High-fidelity+3D+reconstruction+for+planetary+exploration&limit=1&fields=title "HTTP/1.1 500 Internal Server Error" -2026-02-26 13:29:38,291 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 500 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:29:40,107 [INFO] papermind.api: [1fe51016] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58992 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:40,111 [INFO] papermind.api: [b07ccc05] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:58992 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:40,896 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=High-fidelity+3D+reconstruction+for+planetary+exploration&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:29:40,897 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:29:42,107 [INFO] papermind.api: [e55ac8bc] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59007 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:42,127 [INFO] papermind.api: [06972cd3] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59007 - "GET /tasks/active HTTP/1.1" 200 OK -INFO: 127.0.0.1:59018 - "OPTIONS /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:29:44,107 [INFO] papermind.api: [b7d9750e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59007 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:44,110 [INFO] papermind.api: [9f6048d3] GET /papers/folder-stats → 200 (2ms) -INFO: 127.0.0.1:59018 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:29:44,111 [INFO] papermind.api: [b4cb3b92] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59007 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:44,195 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=From+Blurry+to+Believable%3A+Enhancing+Low-quality+Talking+Heads+with+3D+Generative+Priors&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:29:44,195 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:29:45,175 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=High-fidelity+3D+reconstruction+for+planetary+exploration&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:29:45,176 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:29:46,107 [INFO] papermind.api: [4c73aafc] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59030 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:46,111 [INFO] papermind.api: [acf67d21] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59030 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:48,109 [INFO] papermind.api: [e4735523] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59030 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:48,112 [INFO] papermind.api: [c8977584] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59030 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:49,703 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:29:50,107 [INFO] papermind.api: [0041dcb4] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59030 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:50,111 [INFO] papermind.api: [72358894] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59030 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:51,605 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Retrieval-Augmented+Foundation+Models+for+Matched+Molecular+Pair+Transformations+to+Recapitulate+Medicinal+Chemistry+Intuition%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:29:52,111 [INFO] papermind.api: [1056a528] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59045 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:52,113 [INFO] papermind.api: [277b1f47] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59045 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:52,847 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7130617881&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:29:53,373 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Retrieval-Augmented+Foundation+Models+for+Matched+Molecular+Pair+Transformations+to+Recapitulate+Medicinal+Chemistry+Intuition&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:29:53,373 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:29:53,709 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=High-fidelity+3D+reconstruction+for+planetary+exploration&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:29:53,710 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:29:54,108 [INFO] papermind.api: [77c83a38] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59045 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:54,111 [INFO] papermind.api: [8962dcb2] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59045 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:55,644 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Retrieval-Augmented+Foundation+Models+for+Matched+Molecular+Pair+Transformations+to+Recapitulate+Medicinal+Chemistry+Intuition&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:29:55,644 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:29:56,107 [INFO] papermind.api: [f070f386] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59056 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:56,111 [INFO] papermind.api: [d1b311e6] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59056 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:58,109 [INFO] papermind.api: [0f68331f] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:59056 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:58,115 [INFO] papermind.api: [3e7335fc] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59056 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:29:58,624 [INFO] papermind.api: [28667a30] GET /papers/folder-stats → 200 (3ms) -INFO: 127.0.0.1:59056 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:29:59,924 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Retrieval-Augmented+Foundation+Models+for+Matched+Molecular+Pair+Transformations+to+Recapitulate+Medicinal+Chemistry+Intuition&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:29:59,925 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:30:00,059 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=From+Blurry+to+Believable%3A+Enhancing+Low-quality+Talking+Heads+with+3D+Generative+Priors&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:30:00,059 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:30:00,113 [INFO] papermind.api: [df29ee89] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:59056 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:00,115 [INFO] papermind.api: [708047bf] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59056 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:02,108 [INFO] papermind.api: [776f14f5] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59093 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:02,111 [INFO] papermind.api: [3d0235ab] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59093 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:04,108 [INFO] papermind.api: [ae9b3d2b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59093 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:04,111 [INFO] papermind.api: [ea2aed79] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59093 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:06,109 [INFO] papermind.api: [e1fbbeb7] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59100 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:06,111 [INFO] papermind.api: [cc2856e3] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59100 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:08,117 [INFO] papermind.api: [33389ed2] GET /tasks/active → 200 (8ms) -INFO: 127.0.0.1:59100 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:08,127 [INFO] papermind.api: [99c801c2] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:59100 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:08,503 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Retrieval-Augmented+Foundation+Models+for+Matched+Molecular+Pair+Transformations+to+Recapitulate+Medicinal+Chemistry+Intuition&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:30:08,503 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:30:09,274 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=High-fidelity+3D+reconstruction+for+planetary+exploration&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:30:09,274 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:30:10,108 [INFO] papermind.api: [515b1838] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59100 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:10,111 [INFO] papermind.api: [c1599ece] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59100 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:12,117 [INFO] papermind.api: [1dae661d] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:59149 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:12,117 [INFO] papermind.api: [31e757c6] GET /today → 200 (5ms) -INFO: 127.0.0.1:59148 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:30:12,118 [INFO] papermind.api: [8ed0ac41] GET /pipelines/runs → 200 (6ms) -INFO: 127.0.0.1:59145 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:30:12,119 [INFO] papermind.api: [1c1a6dbb] GET /papers/folder-stats → 200 (9ms) -INFO: 127.0.0.1:59139 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:30:12,121 [INFO] papermind.api: [8b6ad702] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:59148 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:12,123 [INFO] papermind.api: [a388a599] GET /metrics/costs → 200 (10ms) -INFO: 127.0.0.1:59144 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:30:12,123 [INFO] papermind.api: [31474a85] GET /today → 200 (3ms) -INFO: 127.0.0.1:59145 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:30:12,126 [INFO] papermind.api: [9db02473] GET /topics → 200 (8ms) -INFO: 127.0.0.1:59149 - "GET /topics?enabled_only=false HTTP/1.1" 200 OK -2026-02-26 13:30:12,126 [INFO] papermind.api: [7a5aad77] GET /pipelines/runs → 200 (5ms) -INFO: 127.0.0.1:59139 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:30:12,127 [INFO] papermind.api: [de09602a] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:59144 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:12,129 [INFO] papermind.api: [0e556703] GET /papers/folder-stats → 200 (7ms) -INFO: 127.0.0.1:59148 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:30:12,130 [INFO] papermind.api: [3a634088] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:59139 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:12,131 [INFO] papermind.api: [d7cbc2de] GET /metrics/costs → 200 (6ms) -INFO: 127.0.0.1:59145 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:30:12,133 [INFO] papermind.api: [b173ba10] GET /topics → 200 (5ms) -INFO: 127.0.0.1:59149 - "GET /topics?enabled_only=false HTTP/1.1" 200 OK -2026-02-26 13:30:12,136 [INFO] papermind.api: [d9235aec] GET /papers/folder-stats → 200 (6ms) -INFO: 127.0.0.1:59144 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:30:12,139 [INFO] papermind.api: [43e2fd3b] GET /papers/folder-stats → 200 (2ms) -INFO: 127.0.0.1:59149 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:30:12,165 [INFO] papermind.api: [c247e7b3] GET /system/status → 200 (53ms) -INFO: 127.0.0.1:59141 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:30:12,190 [INFO] papermind.api: [b8fbcb9f] GET /system/status → 200 (25ms) -INFO: 127.0.0.1:59149 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:30:14,112 [INFO] papermind.api: [bbdd71f8] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59149 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:14,113 [INFO] papermind.api: [028370ac] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59141 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:15,063 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:30:15,846 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Masked+Depth+Modeling+for+Spatial+Perception%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:30:16,112 [INFO] papermind.api: [efc1b302] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59160 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:16,113 [INFO] papermind.api: [73d79c5c] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59160 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:16,249 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7125877890&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:30:16,772 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Masked+Depth+Modeling+for+Spatial+Perception&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:30:16,772 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:30:18,111 [INFO] papermind.api: [1be24142] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59160 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:18,112 [INFO] papermind.api: [d59286e6] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59162 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:19,072 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Masked+Depth+Modeling+for+Spatial+Perception&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:30:19,072 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:30:20,112 [INFO] papermind.api: [bb15669f] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59162 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:20,113 [INFO] papermind.api: [9e2eff2e] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59160 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:22,115 [INFO] papermind.api: [ea774d4e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59177 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:22,119 [INFO] papermind.api: [74208c43] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59177 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:23,670 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Masked+Depth+Modeling+for+Spatial+Perception&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:30:23,670 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:30:24,111 [INFO] papermind.api: [64af4792] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59177 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:24,112 [INFO] papermind.api: [57c229ea] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59179 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:24,198 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Retrieval-Augmented+Foundation+Models+for+Matched+Molecular+Pair+Transformations+to+Recapitulate+Medicinal+Chemistry+Intuition&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:30:24,276 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:30:24,812 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/d3893e7202ca9f3dd690dfe7b0ee428f27524428?fields=references.title%2Ccitations.title "HTTP/1.1 429 " -2026-02-26 13:30:24,812 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/d3893e7202ca9f3dd690dfe7b0ee428f27524428, retry 1/5 in 2.0s -2026-02-26 13:30:25,739 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22TexSpot%3A+3D+Texture+Enhancement+with+Spatially-uniform+Point+Latent+Representation%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:30:26,112 [INFO] papermind.api: [2d722acf] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59190 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:26,114 [INFO] papermind.api: [157f4039] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59190 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:26,309 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7128840807&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:30:26,830 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=TexSpot%3A+3D+Texture+Enhancement+with+Spatially-uniform+Point+Latent+Representation&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:30:26,830 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:30:27,094 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/d3893e7202ca9f3dd690dfe7b0ee428f27524428?fields=references.title%2Ccitations.title "HTTP/1.1 429 " -2026-02-26 13:30:27,095 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/d3893e7202ca9f3dd690dfe7b0ee428f27524428, retry 2/5 in 4.0s -2026-02-26 13:30:28,115 [INFO] papermind.api: [e63daf11] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59190 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:28,118 [INFO] papermind.api: [59c4a737] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:59192 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:29,366 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=TexSpot%3A+3D+Texture+Enhancement+with+Spatially-uniform+Point+Latent+Representation&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:30:29,635 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/48c77b4cdd7567544cfd03832494d920abbe082c?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 429 " -2026-02-26 13:30:29,635 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/48c77b4cdd7567544cfd03832494d920abbe082c, retry 1/5 in 2.0s -2026-02-26 13:30:30,112 [INFO] papermind.api: [cbe607c0] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59192 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:30,113 [INFO] papermind.api: [4c53d2bb] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59190 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:31,384 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/d3893e7202ca9f3dd690dfe7b0ee428f27524428?fields=references.title%2Ccitations.title "HTTP/1.1 429 " -2026-02-26 13:30:31,384 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/d3893e7202ca9f3dd690dfe7b0ee428f27524428, retry 3/5 in 8.0s -2026-02-26 13:30:32,112 [INFO] papermind.api: [f7449381] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59213 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:32,113 [INFO] papermind.api: [ddb1307b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59213 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:32,198 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Masked+Depth+Modeling+for+Spatial+Perception&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:30:32,198 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:30:32,230 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/48c77b4cdd7567544cfd03832494d920abbe082c?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 429 " -2026-02-26 13:30:32,230 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/48c77b4cdd7567544cfd03832494d920abbe082c, retry 2/5 in 4.0s -2026-02-26 13:30:34,113 [INFO] papermind.api: [3cf59072] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59213 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:34,114 [INFO] papermind.api: [ebaccee4] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59215 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:36,113 [INFO] papermind.api: [f766518e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59227 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:36,115 [INFO] papermind.api: [4f179679] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59227 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:36,851 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/48c77b4cdd7567544cfd03832494d920abbe082c?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 429 " -2026-02-26 13:30:36,851 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/48c77b4cdd7567544cfd03832494d920abbe082c, retry 3/5 in 8.0s -2026-02-26 13:30:38,112 [INFO] papermind.api: [45b7e4de] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59227 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:38,112 [INFO] papermind.api: [58feb8ad] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59229 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:39,941 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/d3893e7202ca9f3dd690dfe7b0ee428f27524428?fields=references.title%2Ccitations.title "HTTP/1.1 429 " -2026-02-26 13:30:39,941 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/d3893e7202ca9f3dd690dfe7b0ee428f27524428, retry 4/5 in 15.0s -2026-02-26 13:30:40,112 [INFO] papermind.api: [fb72fb86] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59229 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:40,114 [INFO] papermind.api: [eb010d94] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59227 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:42,120 [INFO] papermind.api: [19f00905] GET /tasks/active → 200 (6ms) -INFO: 127.0.0.1:59265 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:42,123 [INFO] papermind.api: [4c4206a1] GET /papers/folder-stats → 200 (9ms) -INFO: 127.0.0.1:59264 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:30:42,126 [INFO] papermind.api: [214ad74a] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:59265 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:42,128 [INFO] papermind.api: [9e11d2fd] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:59267 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:30:44,111 [INFO] papermind.api: [81023b77] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59267 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:44,112 [INFO] papermind.api: [6ec08d09] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59265 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:45,421 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/48c77b4cdd7567544cfd03832494d920abbe082c?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 429 " -2026-02-26 13:30:45,421 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/48c77b4cdd7567544cfd03832494d920abbe082c, retry 4/5 in 15.0s -2026-02-26 13:30:46,112 [INFO] papermind.api: [19563659] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59300 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:46,114 [INFO] papermind.api: [ba8ff86b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59300 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:47,731 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Masked+Depth+Modeling+for+Spatial+Perception&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:30:47,731 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:30:48,112 [INFO] papermind.api: [8a3bf1da] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59300 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:48,113 [INFO] papermind.api: [b11b5e4d] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59302 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:50,112 [INFO] papermind.api: [54f8bfac] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59302 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:50,113 [INFO] papermind.api: [7eb882b7] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59300 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:52,114 [INFO] papermind.api: [908b4e49] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59333 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:52,115 [INFO] papermind.api: [ef8e016f] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59333 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:54,112 [INFO] papermind.api: [f412e493] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59333 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:54,113 [INFO] papermind.api: [0cd34b1f] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59335 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:55,595 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/d3893e7202ca9f3dd690dfe7b0ee428f27524428?fields=references.title%2Ccitations.title "HTTP/1.1 200 OK" -2026-02-26 13:30:56,024 [INFO] papermind.api: [36f4b4a0] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:59358 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:56,112 [INFO] papermind.api: [00a717dc] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59360 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:56,113 [INFO] papermind.api: [ae6bdd3d] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59360 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:56,359 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Scaling+Open+Discrete+Audio+Foundation+Models+with+Interleaved+Semantic%2C+Acoustic%2C+and+Text+Tokens%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:30:56,745 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7130570766&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:30:57,354 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Scaling+Open+Discrete+Audio+Foundation+Models+with+Interleaved+Semantic%2C+Acoustic%2C+and+Text+Tokens&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:30:57,354 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:30:58,111 [INFO] papermind.api: [1a07f2d7] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59360 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:30:58,112 [INFO] papermind.api: [8720d664] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59363 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:00,113 [INFO] papermind.api: [3bc55472] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59363 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:00,114 [INFO] papermind.api: [501eeb71] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59360 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:00,123 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Scaling+Open+Discrete+Audio+Foundation+Models+with+Interleaved+Semantic%2C+Acoustic%2C+and+Text+Tokens&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:31:00,724 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/03d5df97e2302b5f31bda39df350accac244a40d?fields=references.title%2Ccitations.title "HTTP/1.1 429 " -2026-02-26 13:31:00,724 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/03d5df97e2302b5f31bda39df350accac244a40d, retry 1/5 in 2.0s -2026-02-26 13:31:01,565 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/48c77b4cdd7567544cfd03832494d920abbe082c?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 200 OK" -2026-02-26 13:31:02,112 [INFO] papermind.api: [691e61fc] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59408 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:02,113 [INFO] papermind.api: [a8abe21c] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59408 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:02,734 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:31:03,333 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/03d5df97e2302b5f31bda39df350accac244a40d?fields=references.title%2Ccitations.title "HTTP/1.1 429 " -2026-02-26 13:31:03,333 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/03d5df97e2302b5f31bda39df350accac244a40d, retry 2/5 in 4.0s -2026-02-26 13:31:03,380 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22RegFreeNet%3A+A+Registration-Free+Network+for+CBCT-based+3D+Dental+Implant+Planning%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:31:03,599 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22RealSynCol%3A+a+high-fidelity+synthetic+colon+dataset+for+3D+reconstruction+applications%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:31:03,770 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7125379692&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:31:03,969 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7128515110&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:31:04,113 [INFO] papermind.api: [c33803f7] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59408 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:04,115 [INFO] papermind.api: [57bf0d73] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59410 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:04,148 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22ParkingTwin%3A+Training-Free+Streaming+3D+Reconstruction+for+Parking-Lot+Digital+Twins%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:31:04,239 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=RealSynCol%3A+a+high-fidelity+synthetic+colon+dataset+for+3D+reconstruction+applications&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:31:04,239 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:31:04,524 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7125260881&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:31:05,211 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=ParkingTwin%3A+Training-Free+Streaming+3D+Reconstruction+for+Parking-Lot+Digital+Twins&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:31:05,799 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/57dedf7a93ab7a1138459da6069e44907c2086ee?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 200 OK" -2026-02-26 13:31:06,113 [INFO] papermind.api: [e991fead] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59421 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:06,114 [INFO] papermind.api: [452ad9ec] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59421 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:06,552 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Spherical+Geometry+Diffusion%3A+Generating+High-quality+3D+Face+Geometry+via+Sphere-anchored+Representations%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:31:06,897 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=RealSynCol%3A+a+high-fidelity+synthetic+colon+dataset+for+3D+reconstruction+applications&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:31:07,045 [INFO] papermind.api: [04946adf] GET /settings/daily-report → 404 (1ms) -INFO: 127.0.0.1:59425 - "GET /settings/daily-report HTTP/1.1" 404 Not Found -2026-02-26 13:31:07,614 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/03d5df97e2302b5f31bda39df350accac244a40d?fields=references.title%2Ccitations.title "HTTP/1.1 429 " -2026-02-26 13:31:07,614 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/03d5df97e2302b5f31bda39df350accac244a40d, retry 3/5 in 8.0s -2026-02-26 13:31:07,771 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7125227049&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:31:07,796 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/64a4dbd7bd42f8da6d78a501fd21511e6288fae6?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 200 OK" -2026-02-26 13:31:08,112 [INFO] papermind.api: [0a4e32e3] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59421 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:08,113 [INFO] papermind.api: [3442dcaa] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59423 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:08,365 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Spherical+Geometry+Diffusion%3A+Generating+High-quality+3D+Face+Geometry+via+Sphere-anchored+Representations&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:31:08,365 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:31:08,509 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22From+Blurry+to+Believable%3A+Enhancing+Low-quality+Talking+Heads+with+3D+Generative+Priors%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:31:09,044 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7128408400&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:31:09,642 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=From+Blurry+to+Believable%3A+Enhancing+Low-quality+Talking+Heads+with+3D+Generative+Priors&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:31:09,642 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:31:10,115 [INFO] papermind.api: [b0f8f522] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59423 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:10,118 [INFO] papermind.api: [364334b9] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59421 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:10,503 [INFO] papermind.api: [54e48faf] GET /pipelines/runs → 200 (2ms) -INFO: 127.0.0.1:59451 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:31:10,650 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Spherical+Geometry+Diffusion%3A+Generating+High-quality+3D+Face+Geometry+via+Sphere-anchored+Representations&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:31:10,651 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:31:12,114 [INFO] papermind.api: [3cd72d24] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:59459 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:12,117 [INFO] papermind.api: [2657b633] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:59459 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:12,118 [INFO] papermind.api: [87b4a46d] GET /papers/folder-stats → 200 (6ms) -INFO: 127.0.0.1:59458 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:31:12,120 [INFO] papermind.api: [bad55756] GET /papers/folder-stats → 200 (1ms) -INFO: 127.0.0.1:59461 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:31:12,901 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=From+Blurry+to+Believable%3A+Enhancing+Low-quality+Talking+Heads+with+3D+Generative+Priors&limit=1&fields=title "HTTP/1.1 500 Internal Server Error" -2026-02-26 13:31:12,902 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 500 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:31:13,295 [INFO] papermind.api: [0ee598fe] GET /pipelines/runs → 200 (1ms) -INFO: 127.0.0.1:59465 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:31:14,112 [INFO] papermind.api: [d845f387] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59461 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:14,113 [INFO] papermind.api: [1d9b23de] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59458 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:15,271 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Spherical+Geometry+Diffusion%3A+Generating+High-quality+3D+Face+Geometry+via+Sphere-anchored+Representations&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:31:15,271 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:31:16,112 [INFO] papermind.api: [fbc0f6f8] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59472 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:16,114 [INFO] papermind.api: [c2438696] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59472 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:16,318 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/03d5df97e2302b5f31bda39df350accac244a40d?fields=references.title%2Ccitations.title "HTTP/1.1 200 OK" -2026-02-26 13:31:16,394 [INFO] papermind.api: [e5517f46] GET /settings/emails → 404 (0ms) -INFO: 127.0.0.1:59478 - "GET /settings/emails HTTP/1.1" 404 Not Found -2026-02-26 13:31:17,188 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=From+Blurry+to+Believable%3A+Enhancing+Low-quality+Talking+Heads+with+3D+Generative+Priors&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:31:17,189 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:31:18,114 [INFO] papermind.api: [c5108493] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59472 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:18,116 [INFO] papermind.api: [60ed3edf] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59474 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:18,178 [INFO] papermind.api: [392cccdf] GET /settings/emails → 404 (0ms) -INFO: 127.0.0.1:59484 - "GET /settings/emails HTTP/1.1" 404 Not Found -2026-02-26 13:31:18,620 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22On+the+Hardness+of+Approximation+of+the+Fair+k-Center+Problem%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:31:19,186 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7130604222&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:31:20,113 [INFO] papermind.api: [7e063a99] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59474 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:20,114 [INFO] papermind.api: [299ce83d] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59472 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:20,390 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=On+the+Hardness+of+Approximation+of+the+Fair+k-Center+Problem&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:31:20,661 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/851fae962977787822c103424240bb48d6488768?fields=references.title%2Ccitations.title "HTTP/1.1 429 " -2026-02-26 13:31:20,661 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/851fae962977787822c103424240bb48d6488768, retry 1/5 in 2.0s -2026-02-26 13:31:22,118 [INFO] papermind.api: [5b93457f] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:59495 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:22,122 [INFO] papermind.api: [ed5f60ab] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59495 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:22,936 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/851fae962977787822c103424240bb48d6488768?fields=references.title%2Ccitations.title "HTTP/1.1 429 " -2026-02-26 13:31:22,939 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/851fae962977787822c103424240bb48d6488768, retry 2/5 in 4.0s -2026-02-26 13:31:23,871 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Spherical+Geometry+Diffusion%3A+Generating+High-quality+3D+Face+Geometry+via+Sphere-anchored+Representations&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:31:23,871 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:31:24,112 [INFO] papermind.api: [98e7fb7e] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59495 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:24,113 [INFO] papermind.api: [2e454861] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59497 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:26,062 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=From+Blurry+to+Believable%3A+Enhancing+Low-quality+Talking+Heads+with+3D+Generative+Priors&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:31:26,062 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:31:26,112 [INFO] papermind.api: [73f4b199] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59510 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:26,113 [INFO] papermind.api: [d65f647b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59510 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:27,218 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/851fae962977787822c103424240bb48d6488768?fields=references.title%2Ccitations.title "HTTP/1.1 429 " -2026-02-26 13:31:27,218 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/851fae962977787822c103424240bb48d6488768, retry 3/5 in 8.0s -2026-02-26 13:31:28,112 [INFO] papermind.api: [e7af96c8] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59510 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:28,113 [INFO] papermind.api: [b98774d5] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59512 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:30,113 [INFO] papermind.api: [59bba8ad] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59512 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:30,114 [INFO] papermind.api: [f13dae9d] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59510 - "GET /tasks/active HTTP/1.1" 200 OK -INFO: 127.0.0.1:59510 - "OPTIONS /settings/llm-providers HTTP/1.1" 200 OK -INFO: 127.0.0.1:59512 - "OPTIONS /settings/llm-providers/active HTTP/1.1" 200 OK -INFO: 127.0.0.1:59526 - "OPTIONS /settings/llm-providers HTTP/1.1" 200 OK -INFO: 127.0.0.1:59527 - "OPTIONS /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:31:30,765 [INFO] papermind.api: [2fb49f02] GET /settings/llm-providers → 200 (3ms) -INFO: 127.0.0.1:59510 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:31:30,765 [INFO] papermind.api: [ed2eb412] GET /settings/llm-providers/active → 200 (3ms) -INFO: 127.0.0.1:59512 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:31:30,767 [INFO] papermind.api: [7765fe96] GET /settings/llm-providers/active → 200 (1ms) -INFO: 127.0.0.1:59526 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:31:30,768 [INFO] papermind.api: [63f7fb0d] GET /settings/llm-providers → 200 (2ms) -INFO: 127.0.0.1:59527 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:31:31,979 [INFO] papermind.api: [db151270] GET /settings/email-configs → 200 (2ms) -INFO: 127.0.0.1:59530 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:31:31,980 [INFO] papermind.api: [770367f5] GET /settings/daily-report-config → 200 (2ms) -INFO: 127.0.0.1:59531 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:31:31,982 [INFO] papermind.api: [00b6798f] GET /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:59531 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:31:31,982 [INFO] papermind.api: [72b2fad4] GET /settings/email-configs → 200 (1ms) -INFO: 127.0.0.1:59530 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:31:32,113 [INFO] papermind.api: [4536ccfa] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59530 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:32,115 [INFO] papermind.api: [e674874e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59531 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:34,112 [INFO] papermind.api: [8e95a4ee] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59531 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:34,113 [INFO] papermind.api: [a3f8cd70] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59530 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:35,808 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/851fae962977787822c103424240bb48d6488768?fields=references.title%2Ccitations.title "HTTP/1.1 429 " -2026-02-26 13:31:35,809 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/851fae962977787822c103424240bb48d6488768, retry 4/5 in 15.0s -2026-02-26 13:31:36,112 [INFO] papermind.api: [3ee96f82] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59548 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:36,114 [INFO] papermind.api: [779030e9] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59548 - "GET /tasks/active HTTP/1.1" 200 OK -INFO: 127.0.0.1:59548 - "OPTIONS /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:31:36,290 [INFO] papermind.api: [7281c96e] PUT /settings/daily-report-config → 200 (7ms) -INFO: 127.0.0.1:59548 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:31:36,299 [INFO] papermind.api: [69729863] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59548 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:37,494 [INFO] papermind.api: [3705557f] PUT /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:59548 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:31:37,506 [INFO] papermind.api: [c5c3f72f] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59548 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:37,927 [INFO] papermind.api: [e33d2588] PUT /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:59548 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:31:37,939 [INFO] papermind.api: [9c968685] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59548 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:38,096 [INFO] papermind.api: [ee3152f3] PUT /settings/daily-report-config → 200 (4ms) -INFO: 127.0.0.1:59548 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:31:38,107 [INFO] papermind.api: [dbdca940] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59548 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:38,112 [INFO] papermind.api: [586cc803] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59548 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:38,227 [INFO] papermind.api: [f13693e0] PUT /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:59548 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:31:38,239 [INFO] papermind.api: [97a5d95a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59548 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:38,378 [INFO] papermind.api: [3eeaf5a0] PUT /settings/daily-report-config → 200 (2ms) -INFO: 127.0.0.1:59548 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:31:38,390 [INFO] papermind.api: [a560c928] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59548 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:38,512 [INFO] papermind.api: [ced9449d] PUT /settings/daily-report-config → 200 (2ms) -INFO: 127.0.0.1:59548 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:31:38,525 [INFO] papermind.api: [6154a023] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59548 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:38,644 [INFO] papermind.api: [802c7c37] PUT /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:59548 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:31:38,655 [INFO] papermind.api: [860884c8] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59548 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:38,761 [INFO] papermind.api: [a1ba7d62] PUT /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:59548 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:31:38,773 [INFO] papermind.api: [87a06811] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59548 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:39,394 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Spherical+Geometry+Diffusion%3A+Generating+High-quality+3D+Face+Geometry+via+Sphere-anchored+Representations&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:31:39,394 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:31:39,796 [INFO] papermind.api: [66c7a515] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59548 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:40,112 [INFO] papermind.api: [ba03922a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59548 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:41,011 [INFO] papermind.api: [1299df5d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59548 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:41,441 [INFO] papermind.api: [3ec9b032] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59570 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:41,607 [INFO] papermind.api: [958431d5] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59570 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:41,740 [INFO] papermind.api: [c294f92b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59570 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:41,908 [INFO] papermind.api: [6072969a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59570 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:42,015 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=From+Blurry+to+Believable%3A+Enhancing+Low-quality+Talking+Heads+with+3D+Generative+Priors&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:31:42,024 [INFO] papermind.api: [4c699f55] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59570 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:42,114 [INFO] papermind.api: [9bbb8cf7] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59574 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:42,117 [INFO] papermind.api: [cf814f09] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:59570 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:31:42,120 [INFO] papermind.api: [469253db] GET /papers/folder-stats → 200 (2ms) -INFO: 127.0.0.1:59574 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:31:42,157 [INFO] papermind.api: [b0838bcc] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59574 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:42,276 [INFO] papermind.api: [0493fb78] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59574 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:42,445 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/7c100ed2292e7ac9e8c88ca6129cd0dce5494ef7?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 200 OK" -2026-02-26 13:31:44,116 [INFO] papermind.api: [15fe6a64] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59574 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:44,277 [INFO] papermind.api: [65ba475a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59574 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:44,590 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Masked+Depth+Modeling+for+Spatial+Perception%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:31:44,961 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7125877890&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:31:45,229 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Masked+Depth+Modeling+for+Spatial+Perception&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:31:45,229 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:31:46,130 [INFO] papermind.api: [67ef2541] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59595 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:46,277 [INFO] papermind.api: [850a3738] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59595 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:48,112 [INFO] papermind.api: [fa9e6059] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59595 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:48,277 [INFO] papermind.api: [39cc2b6a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59595 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:48,571 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Masked+Depth+Modeling+for+Spatial+Perception&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:31:49,156 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/0e90207e6f0b58815e7b50a87f721f364d8905ac?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 429 " -2026-02-26 13:31:49,156 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/0e90207e6f0b58815e7b50a87f721f364d8905ac, retry 1/5 in 2.0s -2026-02-26 13:31:50,112 [INFO] papermind.api: [fcaff640] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59595 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:50,278 [INFO] papermind.api: [7469b6da] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59595 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:51,389 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/851fae962977787822c103424240bb48d6488768?fields=references.title%2Ccitations.title "HTTP/1.1 429 " -2026-02-26 13:31:51,389 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/851fae962977787822c103424240bb48d6488768, retry 5/5 in 15.0s -2026-02-26 13:31:52,106 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/0e90207e6f0b58815e7b50a87f721f364d8905ac?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 200 OK" -2026-02-26 13:31:52,113 [INFO] papermind.api: [35923a8b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59614 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:52,278 [INFO] papermind.api: [dc587c29] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59614 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:53,579 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22RegFreeNet%3A+A+Registration-Free+Network+for+CBCT-based+3D+Dental+Implant+Planning%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:31:54,115 [INFO] papermind.api: [402948cd] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59614 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:54,180 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7125379692&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:31:54,277 [INFO] papermind.api: [6f8571c2] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59614 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:54,399 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:31:54,719 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22ParkingTwin%3A+Training-Free+Streaming+3D+Reconstruction+for+Parking-Lot+Digital+Twins%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:31:55,235 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7125260881&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:31:55,845 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=ParkingTwin%3A+Training-Free+Streaming+3D+Reconstruction+for+Parking-Lot+Digital+Twins&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:31:55,846 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:31:56,114 [INFO] papermind.api: [b0f88c35] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59625 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:56,277 [INFO] papermind.api: [aa1875c6] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59625 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:56,322 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22SurfSLAM%3A+Sim-to-Real+Underwater+Stereo+Reconstruction+For+Real-Time+SLAM%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:31:56,827 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7124714199&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:31:57,378 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=SurfSLAM%3A+Sim-to-Real+Underwater+Stereo+Reconstruction+For+Real-Time+SLAM&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:31:57,378 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:31:58,117 [INFO] papermind.api: [f88d0934] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:59625 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:58,278 [INFO] papermind.api: [1507012b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59625 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:31:58,447 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=ParkingTwin%3A+Training-Free+Streaming+3D+Reconstruction+for+Parking-Lot+Digital+Twins&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:31:58,447 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:31:59,655 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=SurfSLAM%3A+Sim-to-Real+Underwater+Stereo+Reconstruction+For+Real-Time+SLAM&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:31:59,655 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:32:00,117 [INFO] papermind.api: [58265d18] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:59625 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:00,277 [INFO] papermind.api: [85058688] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59625 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:02,113 [INFO] papermind.api: [83ba84ef] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59658 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:02,277 [INFO] papermind.api: [fc327e90] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59658 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:02,728 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=ParkingTwin%3A+Training-Free+Streaming+3D+Reconstruction+for+Parking-Lot+Digital+Twins&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:32:02,729 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:32:03,925 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=SurfSLAM%3A+Sim-to-Real+Underwater+Stereo+Reconstruction+For+Real-Time+SLAM&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:32:03,925 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:32:04,115 [INFO] papermind.api: [872a7105] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59658 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:04,277 [INFO] papermind.api: [eeb522d5] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59658 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:06,115 [INFO] papermind.api: [90df9e73] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59669 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:06,277 [INFO] papermind.api: [16ccfa85] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59669 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:06,394 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/851fae962977787822c103424240bb48d6488768 -2026-02-26 13:32:07,202 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Are+Object-Centric+Representations+Better+At+Compositional+Generalization%3F%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:32:07,575 [INFO] papermind.api: [eba34468] GET /settings/daily-report-config → 200 (4ms) -INFO: 127.0.0.1:59675 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:32:08,116 [INFO] papermind.api: [7e1c8b26] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59669 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:08,276 [INFO] papermind.api: [9ac6b4c5] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59669 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:08,459 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7130617499&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:32:09,315 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Are+Object-Centric+Representations+Better+At+Compositional+Generalization%3F&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:32:09,315 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:32:10,116 [INFO] papermind.api: [d21c947a] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:59669 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:10,284 [INFO] papermind.api: [56b768da] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:59669 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:12,118 [INFO] papermind.api: [2d82033d] GET /tasks/active → 200 (5ms) -INFO: 127.0.0.1:59698 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:12,120 [INFO] papermind.api: [ea92bc6d] GET /papers/folder-stats → 200 (6ms) -INFO: 127.0.0.1:59696 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:32:12,123 [INFO] papermind.api: [238f2d11] GET /papers/folder-stats → 200 (2ms) -INFO: 127.0.0.1:59698 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:32:12,277 [INFO] papermind.api: [9c96ae4b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59698 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:12,564 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=SurfSLAM%3A+Sim-to-Real+Underwater+Stereo+Reconstruction+For+Real-Time+SLAM&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:32:12,565 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:32:14,115 [INFO] papermind.api: [20bc2f5d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59698 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:14,276 [INFO] papermind.api: [af3119a9] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59698 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:14,416 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=ParkingTwin%3A+Training-Free+Streaming+3D+Reconstruction+for+Parking-Lot+Digital+Twins&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:32:14,971 [INFO] papermind.api: [c109f7e4] PUT /settings/daily-report-config → 200 (3ms) -INFO: 127.0.0.1:59713 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:32:15,265 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Spherical+Geometry+Diffusion%3A+Generating+High-quality+3D+Face+Geometry+via+Sphere-anchored+Representations%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:32:15,470 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Are+Object-Centric+Representations+Better+At+Compositional+Generalization%3F&limit=1&fields=title "HTTP/1.1 500 Internal Server Error" -2026-02-26 13:32:15,470 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 500 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:32:16,112 [INFO] papermind.api: [c8e80c10] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59719 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:16,277 [INFO] papermind.api: [f14286e5] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59719 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:16,728 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7125227049&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:32:17,001 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Spherical+Geometry+Diffusion%3A+Generating+High-quality+3D+Face+Geometry+via+Sphere-anchored+Representations&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:32:17,002 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:32:17,142 [INFO] papermind.api: [914f8de8] PUT /settings/daily-report-config → 200 (3ms) -INFO: 127.0.0.1:59723 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:32:18,113 [INFO] papermind.api: [b4419c2e] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59719 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:18,277 [INFO] papermind.api: [e4a02e4c] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59719 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:19,282 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Spherical+Geometry+Diffusion%3A+Generating+High-quality+3D+Face+Geometry+via+Sphere-anchored+Representations&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:32:19,282 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:32:19,761 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Are+Object-Centric+Representations+Better+At+Compositional+Generalization%3F&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:32:19,761 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:32:20,113 [INFO] papermind.api: [c3effc81] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59719 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:20,277 [INFO] papermind.api: [a4898a1a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59719 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:22,113 [INFO] papermind.api: [3dce06f3] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59738 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:22,276 [INFO] papermind.api: [0fb46f4d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59738 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:23,556 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Spherical+Geometry+Diffusion%3A+Generating+High-quality+3D+Face+Geometry+via+Sphere-anchored+Representations&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:32:23,556 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:32:24,114 [INFO] papermind.api: [d71985e5] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59738 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:24,277 [INFO] papermind.api: [5bdd7621] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59738 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:26,115 [INFO] papermind.api: [74b20163] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59761 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:26,277 [INFO] papermind.api: [9f1a3c7a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59761 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:28,112 [INFO] papermind.api: [45f8bae9] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59761 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:28,278 [INFO] papermind.api: [0a56e63d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59761 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:28,311 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Are+Object-Centric+Representations+Better+At+Compositional+Generalization%3F&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:32:28,312 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:32:28,422 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=SurfSLAM%3A+Sim-to-Real+Underwater+Stereo+Reconstruction+For+Real-Time+SLAM&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:32:28,422 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:32:30,114 [INFO] papermind.api: [b1cfcdd7] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59761 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:30,279 [INFO] papermind.api: [52df6792] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59761 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:32,116 [INFO] papermind.api: [b85abc29] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59788 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:32,277 [INFO] papermind.api: [25d465c4] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59788 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:34,113 [INFO] papermind.api: [b320928a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59788 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:34,278 [INFO] papermind.api: [e83108ea] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59788 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:34,924 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Spherical+Geometry+Diffusion%3A+Generating+High-quality+3D+Face+Geometry+via+Sphere-anchored+Representations&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:32:35,526 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/9e0ca78ff7f834a7d95e7a8dff1f3bdee0bb7e33?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 429 " -2026-02-26 13:32:35,527 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/9e0ca78ff7f834a7d95e7a8dff1f3bdee0bb7e33, retry 1/5 in 2.0s -2026-02-26 13:32:36,113 [INFO] papermind.api: [9805f6e0] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59811 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:36,279 [INFO] papermind.api: [3c2e3b28] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59811 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:38,115 [INFO] papermind.api: [5693d1c2] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59811 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:38,188 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/9e0ca78ff7f834a7d95e7a8dff1f3bdee0bb7e33?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 200 OK" -2026-02-26 13:32:38,277 [INFO] papermind.api: [96f61fe9] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59811 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:40,109 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22SurfSLAM%3A+Sim-to-Real+Underwater+Stereo+Reconstruction+For+Real-Time+SLAM%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:32:40,113 [INFO] papermind.api: [0fcae9b4] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59811 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:40,278 [INFO] papermind.api: [da763f35] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59811 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:40,504 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7124714199&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:32:40,796 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=SurfSLAM%3A+Sim-to-Real+Underwater+Stereo+Reconstruction+For+Real-Time+SLAM&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:32:40,797 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:32:42,115 [INFO] papermind.api: [c43029ee] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59839 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:42,116 [INFO] papermind.api: [2c479173] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:59837 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:32:42,119 [INFO] papermind.api: [19aa70e3] GET /papers/folder-stats → 200 (2ms) -INFO: 127.0.0.1:59839 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:32:42,279 [INFO] papermind.api: [ac5c2cc5] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59839 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:43,071 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=SurfSLAM%3A+Sim-to-Real+Underwater+Stereo+Reconstruction+For+Real-Time+SLAM&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:32:43,071 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:32:43,428 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:32:43,877 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Are+Object-Centric+Representations+Better+At+Compositional+Generalization%3F&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:32:43,877 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:32:44,080 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22GPU+accelerated+surface-based+gaze+mapping+for+XR+experiences%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:32:44,115 [INFO] papermind.api: [adc3ec33] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59839 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:44,277 [INFO] papermind.api: [a50904e1] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59839 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:44,449 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7123802116&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:32:45,199 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=GPU+accelerated+surface-based+gaze+mapping+for+XR+experiences&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:32:45,481 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/f3549378ddf89f07085a2475b19521b21b7cdd73?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 429 " -2026-02-26 13:32:45,481 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/f3549378ddf89f07085a2475b19521b21b7cdd73, retry 1/5 in 2.0s -2026-02-26 13:32:46,116 [INFO] papermind.api: [1603a10b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59867 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:46,277 [INFO] papermind.api: [f069832b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59867 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:47,676 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=SurfSLAM%3A+Sim-to-Real+Underwater+Stereo+Reconstruction+For+Real-Time+SLAM&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:32:47,676 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:32:48,078 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/f3549378ddf89f07085a2475b19521b21b7cdd73?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 429 " -2026-02-26 13:32:48,078 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/f3549378ddf89f07085a2475b19521b21b7cdd73, retry 2/5 in 4.0s -2026-02-26 13:32:48,113 [INFO] papermind.api: [3cf8a6e5] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59867 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:48,279 [INFO] papermind.api: [71c75f39] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59867 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:50,114 [INFO] papermind.api: [9e7102c2] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59867 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:50,277 [INFO] papermind.api: [4b0dff4b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59867 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:51,623 [INFO] papermind.api: [355c527e] GET /settings/daily-report-config → 200 (3ms) -INFO: 127.0.0.1:59910 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:32:52,114 [INFO] papermind.api: [fb39e3af] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59912 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:52,280 [INFO] papermind.api: [600cf8ad] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59912 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:52,361 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/f3549378ddf89f07085a2475b19521b21b7cdd73?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 429 " -2026-02-26 13:32:52,362 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/f3549378ddf89f07085a2475b19521b21b7cdd73, retry 3/5 in 8.0s -2026-02-26 13:32:54,113 [INFO] papermind.api: [38d1b51f] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59912 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:54,277 [INFO] papermind.api: [d28408df] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59912 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:56,114 [INFO] papermind.api: [88d9809d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59927 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:56,218 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=SurfSLAM%3A+Sim-to-Real+Underwater+Stereo+Reconstruction+For+Real-Time+SLAM&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:32:56,219 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:32:56,277 [INFO] papermind.api: [4e277ce7] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59927 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:58,114 [INFO] papermind.api: [61493461] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59927 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:58,279 [INFO] papermind.api: [283ad7b8] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59927 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:32:58,880 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:32:59,712 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Synthetic-Powered+Multiple+Testing+with+FDR+Control%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:33:00,115 [INFO] papermind.api: [1f1b4679] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59927 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:00,133 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7130595924&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:33:00,277 [INFO] papermind.api: [c4e626cf] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59927 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:00,699 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Synthetic-Powered+Multiple+Testing+with+FDR+Control&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:33:00,699 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:33:01,171 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/f3549378ddf89f07085a2475b19521b21b7cdd73?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 200 OK" -2026-02-26 13:33:01,582 [INFO] papermind.api: [7663cd59] PUT /settings/daily-report-config → 200 (2ms) -INFO: 127.0.0.1:59960 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:33:01,591 [INFO] papermind.api: [167a4483] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59960 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:01,943 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22FaceRefiner%3A+High-Fidelity+Facial+Texture+Refinement+with+Differentiable+Rendering-based+Style+Transfer%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:33:02,114 [INFO] papermind.api: [a73e83e5] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59960 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:02,210 [INFO] papermind.api: [bbf9efdc] PUT /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:59960 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:33:02,224 [INFO] papermind.api: [eca0f0c9] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:59960 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:02,341 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7120272730&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:33:02,511 [INFO] papermind.api: [d2512bec] PUT /settings/daily-report-config → 200 (2ms) -INFO: 127.0.0.1:59960 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:33:02,522 [INFO] papermind.api: [ce2f956d] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59960 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:02,621 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=FaceRefiner%3A+High-Fidelity+Facial+Texture+Refinement+with+Differentiable+Rendering-based+Style+Transfer&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:33:02,621 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:33:02,653 [INFO] papermind.api: [da980e08] PUT /settings/daily-report-config → 200 (2ms) -INFO: 127.0.0.1:59960 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:33:02,659 [INFO] papermind.api: [b51102f0] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59960 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:02,878 [INFO] papermind.api: [1ebb2342] PUT /settings/daily-report-config → 200 (3ms) -INFO: 127.0.0.1:59960 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:33:02,888 [INFO] papermind.api: [70ace20a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59960 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:03,044 [INFO] papermind.api: [c652b209] PUT /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:59960 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:33:03,057 [INFO] papermind.api: [37b32d4d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59960 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:03,211 [INFO] papermind.api: [655a65b0] PUT /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:59960 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:33:03,223 [INFO] papermind.api: [ef050666] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59960 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:03,301 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Synthetic-Powered+Multiple+Testing+with+FDR+Control&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:33:03,301 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:33:03,344 [INFO] papermind.api: [ddbb6b8a] PUT /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:59960 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:33:03,355 [INFO] papermind.api: [f738081a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59960 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:03,533 [INFO] papermind.api: [b6c64881] PUT /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:59960 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:33:03,538 [INFO] papermind.api: [f4b99f6f] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59960 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:03,709 [INFO] papermind.api: [76281f09] PUT /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:59960 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:33:03,722 [INFO] papermind.api: [9ea9c5b5] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59960 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:04,113 [INFO] papermind.api: [01f9980d] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59960 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:05,090 [INFO] papermind.api: [0417416a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59960 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:05,216 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=FaceRefiner%3A+High-Fidelity+Facial+Texture+Refinement+with+Differentiable+Rendering-based+Style+Transfer&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:33:05,216 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:33:05,723 [INFO] papermind.api: [b7de0c3e] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59960 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:06,024 [INFO] papermind.api: [18ebc7fb] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59960 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:06,115 [INFO] papermind.api: [e64d7665] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59975 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:06,161 [INFO] papermind.api: [6267c331] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59975 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:06,392 [INFO] papermind.api: [fa096e57] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:59975 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:06,559 [INFO] papermind.api: [cb426781] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59975 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:06,723 [INFO] papermind.api: [e21c9552] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59975 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:06,860 [INFO] papermind.api: [fa9d8969] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59975 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:07,039 [INFO] papermind.api: [40cbd1bd] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59975 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:07,211 [INFO] papermind.api: [3be5f744] PUT /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:59975 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:33:07,223 [INFO] papermind.api: [7c71d55d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59975 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:07,226 [INFO] papermind.api: [8e4bb0e5] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59975 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:07,589 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Synthetic-Powered+Multiple+Testing+with+FDR+Control&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:33:07,589 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:33:07,646 [INFO] papermind.api: [44b8ddae] PUT /settings/daily-report-config → 200 (2ms) -INFO: 127.0.0.1:59975 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:33:07,656 [INFO] papermind.api: [02caf60e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59975 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:08,114 [INFO] papermind.api: [e5d84a7b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59975 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:09,658 [INFO] papermind.api: [1a9149e5] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59975 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:10,114 [INFO] papermind.api: [e5429254] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59975 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:10,722 [INFO] papermind.api: [a5942ccf] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59975 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:11,155 [INFO] papermind.api: [0948f5b7] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59990 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:11,720 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=FaceRefiner%3A+High-Fidelity+Facial+Texture+Refinement+with+Differentiable+Rendering-based+Style+Transfer&limit=1&fields=title "HTTP/1.1 500 Internal Server Error" -2026-02-26 13:33:11,721 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 500 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:33:12,084 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=SurfSLAM%3A+Sim-to-Real+Underwater+Stereo+Reconstruction+For+Real-Time+SLAM&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:33:12,084 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:33:12,118 [INFO] papermind.api: [841b0af3] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:59994 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:12,121 [INFO] papermind.api: [b919b211] GET /papers/folder-stats → 200 (7ms) -INFO: 127.0.0.1:59990 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:33:12,124 [INFO] papermind.api: [c14929e0] GET /papers/folder-stats → 200 (2ms) -INFO: 127.0.0.1:59994 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:33:13,157 [INFO] papermind.api: [4871b593] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59994 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:14,113 [INFO] papermind.api: [562c7fab] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:59994 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:15,155 [INFO] papermind.api: [cdc06180] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:59994 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:16,114 [INFO] papermind.api: [966e0ad2] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60018 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:16,304 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Synthetic-Powered+Multiple+Testing+with+FDR+Control&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:33:16,304 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:33:16,425 [INFO] papermind.api: [34787d99] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60024 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:16,427 [INFO] papermind.api: [c488d0d7] GET /papers/folder-stats → 200 (7ms) -INFO: 127.0.0.1:60018 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:33:16,433 [INFO] papermind.api: [46f30b5f] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:60024 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:16,438 [INFO] papermind.api: [cea5b427] GET /papers/folder-stats → 200 (9ms) -INFO: 127.0.0.1:60030 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:33:16,439 [INFO] papermind.api: [44818824] GET /pipelines/runs → 200 (5ms) -INFO: 127.0.0.1:60034 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:33:16,441 [INFO] papermind.api: [eb941974] GET /pipelines/runs → 200 (2ms) -INFO: 127.0.0.1:60030 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:33:16,443 [INFO] papermind.api: [349b8d8b] GET /metrics/costs → 200 (9ms) -INFO: 127.0.0.1:60033 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:33:16,449 [INFO] papermind.api: [b8f8a3c7] GET /metrics/costs → 200 (6ms) -INFO: 127.0.0.1:60030 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:33:16,485 [INFO] papermind.api: [2efd83cc] GET /system/status → 200 (53ms) -INFO: 127.0.0.1:60018 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:33:16,514 [INFO] papermind.api: [e234edc9] GET /today → 200 (80ms) -INFO: 127.0.0.1:60036 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:33:16,516 [INFO] papermind.api: [a5b62e23] GET /today → 200 (1ms) -INFO: 127.0.0.1:60018 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:33:16,538 [INFO] papermind.api: [0d9e914b] GET /system/status → 200 (52ms) -INFO: 127.0.0.1:60030 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:33:18,114 [INFO] papermind.api: [c7039ef0] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60030 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:18,399 [INFO] papermind.api: [444cecbd] GET /settings/llm-providers/active → 200 (2ms) -INFO: 127.0.0.1:60018 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:33:18,400 [INFO] papermind.api: [e0f96e72] GET /settings/llm-providers → 200 (4ms) -INFO: 127.0.0.1:60030 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:33:18,404 [INFO] papermind.api: [8157d35a] GET /settings/llm-providers/active → 200 (3ms) -INFO: 127.0.0.1:60036 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:33:18,404 [INFO] papermind.api: [3b16f8e2] GET /settings/llm-providers → 200 (3ms) -INFO: 127.0.0.1:60018 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:33:18,421 [INFO] papermind.api: [d95587e1] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60018 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:19,730 [INFO] papermind.api: [0593d14b] GET /settings/email-configs → 200 (2ms) -INFO: 127.0.0.1:60018 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:33:19,730 [INFO] papermind.api: [30c9bd4a] GET /settings/daily-report-config → 200 (2ms) -INFO: 127.0.0.1:60036 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:33:19,732 [INFO] papermind.api: [21fb285f] GET /settings/email-configs → 200 (1ms) -INFO: 127.0.0.1:60030 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:33:19,732 [INFO] papermind.api: [216a7922] GET /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:60036 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:33:20,113 [INFO] papermind.api: [7b4adbfd] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60036 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:20,295 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=FaceRefiner%3A+High-Fidelity+Facial+Texture+Refinement+with+Differentiable+Rendering-based+Style+Transfer&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:33:20,296 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:33:20,421 [INFO] papermind.api: [2393aa30] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60036 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:21,630 [INFO] papermind.api: [f4d3ad4b] PUT /settings/daily-report-config → 200 (4ms) -INFO: 127.0.0.1:60053 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:33:21,640 [INFO] papermind.api: [a82ce97d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60053 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:22,115 [INFO] papermind.api: [d1ed4680] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60053 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:23,643 [INFO] papermind.api: [94337a9e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60053 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:24,114 [INFO] papermind.api: [78d888c6] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60053 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:25,174 [INFO] papermind.api: [c03488eb] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:60053 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:26,124 [INFO] papermind.api: [384ec394] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60062 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:27,089 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:33:27,144 [INFO] papermind.api: [d39cea4b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60062 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:28,115 [INFO] papermind.api: [310a2216] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60062 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:28,718 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22GPU+accelerated+surface-based+gaze+mapping+for+XR+experiences%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:33:29,144 [INFO] papermind.api: [4e97beab] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60062 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:29,196 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7123802116&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:33:29,744 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=GPU+accelerated+surface-based+gaze+mapping+for+XR+experiences&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:33:29,745 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:33:30,115 [INFO] papermind.api: [a9416d9f] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60062 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:31,146 [INFO] papermind.api: [dee74c37] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60080 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:32,103 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Synthetic-Powered+Multiple+Testing+with+FDR+Control&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:33:32,103 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:33:32,113 [INFO] papermind.api: [f9ee56a7] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60080 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:33,144 [INFO] papermind.api: [afc94918] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60080 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:33,825 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=GPU+accelerated+surface-based+gaze+mapping+for+XR+experiences&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:33:34,114 [INFO] papermind.api: [734fb5ad] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60080 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:34,236 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22FaceRefiner%3A+High-Fidelity+Facial+Texture+Refinement+with+Differentiable+Rendering-based+Style+Transfer%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:33:34,713 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7120272730&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:33:34,988 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=FaceRefiner%3A+High-Fidelity+Facial+Texture+Refinement+with+Differentiable+Rendering-based+Style+Transfer&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:33:34,988 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:33:35,144 [INFO] papermind.api: [6262e6b5] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60080 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:35,842 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=FaceRefiner%3A+High-Fidelity+Facial+Texture+Refinement+with+Differentiable+Rendering-based+Style+Transfer&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:33:35,842 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:33:36,113 [INFO] papermind.api: [02eef672] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60097 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:37,145 [INFO] papermind.api: [0c6e7558] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60097 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:37,272 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=FaceRefiner%3A+High-Fidelity+Facial+Texture+Refinement+with+Differentiable+Rendering-based+Style+Transfer&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:33:37,272 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:33:38,113 [INFO] papermind.api: [8ca3b5c5] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60097 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:39,163 [INFO] papermind.api: [b6fdc78a] GET /tasks/active → 200 (10ms) -INFO: 127.0.0.1:60097 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:40,113 [INFO] papermind.api: [7aa254d2] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60097 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:41,145 [INFO] papermind.api: [aad8db2b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60111 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:41,559 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=FaceRefiner%3A+High-Fidelity+Facial+Texture+Refinement+with+Differentiable+Rendering-based+Style+Transfer&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:33:41,560 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:33:42,119 [INFO] papermind.api: [970faa1c] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60113 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:42,125 [INFO] papermind.api: [60d6186a] GET /papers/folder-stats → 200 (10ms) -INFO: 127.0.0.1:60111 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:33:43,144 [INFO] papermind.api: [63b2790b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60111 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:44,113 [INFO] papermind.api: [ad2a50b7] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60111 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:45,145 [INFO] papermind.api: [23446505] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60111 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:46,115 [INFO] papermind.api: [11ae329e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60126 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:46,421 [INFO] papermind.api: [38d6dc51] GET /papers/folder-stats → 200 (1ms) -INFO: 127.0.0.1:60126 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:33:47,108 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:33:47,145 [INFO] papermind.api: [a9839ea5] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60126 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:48,114 [INFO] papermind.api: [3fb83c70] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60126 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:48,687 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Parameter-free+representations+outperform+single-cell+foundation+models+on+downstream+benchmarks%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:33:49,150 [INFO] papermind.api: [1dfb70c6] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60126 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:49,254 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7130599955&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:33:49,766 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Parameter-free+representations+outperform+single-cell+foundation+models+on+downstream+benchmarks&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:33:49,767 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:33:50,113 [INFO] papermind.api: [5af82530] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60126 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:50,133 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=FaceRefiner%3A+High-Fidelity+Facial+Texture+Refinement+with+Differentiable+Rendering-based+Style+Transfer&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:33:50,134 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:33:50,854 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:33:51,145 [INFO] papermind.api: [1ae7a54e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60166 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:52,035 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Parameter-free+representations+outperform+single-cell+foundation+models+on+downstream+benchmarks&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:33:52,035 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:33:52,119 [INFO] papermind.api: [3e5fb2a4] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60166 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:52,414 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Rethinking+the+Spatio-Temporal+Alignment+of+End-to-End+3D+Perception%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:33:53,018 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7117850743&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:33:53,145 [INFO] papermind.api: [da06dcf6] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60166 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:53,574 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Rethinking+the+Spatio-Temporal+Alignment+of+End-to-End+3D+Perception&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:33:53,575 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:33:54,114 [INFO] papermind.api: [5049e0c2] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60166 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:55,147 [INFO] papermind.api: [3858bb0f] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60166 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:55,852 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Rethinking+the+Spatio-Temporal+Alignment+of+End-to-End+3D+Perception&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:33:55,852 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:33:56,113 [INFO] papermind.api: [68e9b084] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60197 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:56,924 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Parameter-free+representations+outperform+single-cell+foundation+models+on+downstream+benchmarks&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:33:57,145 [INFO] papermind.api: [2a87c49d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60197 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:57,304 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/518ba31633357b24a8323a577ff373c6ec77a913?fields=references.title%2Ccitations.title "HTTP/1.1 200 OK" -2026-02-26 13:33:58,122 [INFO] papermind.api: [ca4baa13] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60197 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:58,881 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Protecting+the+Undeleted+in+Machine+Unlearning%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:33:59,145 [INFO] papermind.api: [10017884] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60197 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:33:59,508 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7130569910&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:34:00,114 [INFO] papermind.api: [873cdf58] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60197 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:00,132 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Rethinking+the+Spatio-Temporal+Alignment+of+End-to-End+3D+Perception&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:34:00,132 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:34:00,250 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Protecting+the+Undeleted+in+Machine+Unlearning&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:34:00,250 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:34:01,145 [INFO] papermind.api: [eed74ccf] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60244 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:02,114 [INFO] papermind.api: [5cc508ae] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60244 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:02,826 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Protecting+the+Undeleted+in+Machine+Unlearning&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:34:02,826 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:34:03,145 [INFO] papermind.api: [7c8c2bac] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60244 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:04,115 [INFO] papermind.api: [f31fd001] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60244 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:05,145 [INFO] papermind.api: [350a509e] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60244 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:06,006 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=FaceRefiner%3A+High-Fidelity+Facial+Texture+Refinement+with+Differentiable+Rendering-based+Style+Transfer&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:34:06,006 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:34:06,114 [INFO] papermind.api: [ee93eb4e] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60263 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:07,145 [INFO] papermind.api: [71b5717e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60263 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:07,410 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Protecting+the+Undeleted+in+Machine+Unlearning&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:34:07,411 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:34:07,663 [INFO] papermind.api: [641d7cb1] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60311 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:07,669 [INFO] papermind.api: [cfbe06e1] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60311 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:07,671 [INFO] papermind.api: [1f7d6fc8] GET /papers/folder-stats → 200 (16ms) -INFO: 127.0.0.1:60263 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:34:07,681 [INFO] papermind.api: [873e5dbe] GET /today → 200 (5ms) -INFO: 127.0.0.1:60317 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:34:07,685 [INFO] papermind.api: [4862179e] GET /metrics/costs → 200 (13ms) -INFO: 127.0.0.1:60313 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:34:07,686 [INFO] papermind.api: [77a8bf26] GET /pipelines/runs → 200 (11ms) -INFO: 127.0.0.1:60316 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:34:07,687 [INFO] papermind.api: [1876901f] GET /today → 200 (4ms) -INFO: 127.0.0.1:60263 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:34:07,688 [INFO] papermind.api: [0c3c7bcd] GET /papers/folder-stats → 200 (12ms) -INFO: 127.0.0.1:60319 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:34:07,690 [INFO] papermind.api: [17901583] GET /pipelines/runs → 200 (3ms) -INFO: 127.0.0.1:60313 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:34:07,691 [INFO] papermind.api: [2e85bf47] GET /metrics/costs → 200 (4ms) -INFO: 127.0.0.1:60317 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:34:07,720 [INFO] papermind.api: [0a515824] GET /system/status → 200 (48ms) -INFO: 127.0.0.1:60311 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:34:07,745 [INFO] papermind.api: [b56366fa] GET /system/status → 200 (24ms) -INFO: 127.0.0.1:60317 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:34:08,114 [INFO] papermind.api: [de46ac4b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60317 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:08,996 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Rethinking+the+Spatio-Temporal+Alignment+of+End-to-End+3D+Perception&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:34:08,996 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:34:09,068 [INFO] papermind.api: [ee556a12] GET /settings/llm-providers/active → 200 (2ms) -INFO: 127.0.0.1:60311 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:34:09,069 [INFO] papermind.api: [adc1ab59] GET /settings/llm-providers → 200 (3ms) -INFO: 127.0.0.1:60317 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:34:09,071 [INFO] papermind.api: [b06e145c] GET /settings/llm-providers/active → 200 (1ms) -INFO: 127.0.0.1:60313 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:34:09,072 [INFO] papermind.api: [fb44e9fb] GET /settings/llm-providers → 200 (2ms) -INFO: 127.0.0.1:60311 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:34:09,654 [INFO] papermind.api: [17edc601] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60311 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:10,113 [INFO] papermind.api: [12aed634] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60311 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:10,180 [INFO] papermind.api: [913b69df] GET /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:60313 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:34:10,180 [INFO] papermind.api: [ef5e737b] GET /settings/email-configs → 200 (2ms) -INFO: 127.0.0.1:60311 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:34:10,181 [INFO] papermind.api: [75b885ba] GET /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:60317 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:34:10,182 [INFO] papermind.api: [d02fc186] GET /settings/email-configs → 200 (1ms) -INFO: 127.0.0.1:60313 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:34:11,654 [INFO] papermind.api: [e191c140] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60338 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:12,119 [INFO] papermind.api: [35f391f8] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:60340 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:12,120 [INFO] papermind.api: [6ac4345f] GET /papers/folder-stats → 200 (6ms) -INFO: 127.0.0.1:60338 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:34:12,865 [INFO] papermind.api: [b37d07e3] PUT /settings/daily-report-config → 200 (3ms) -INFO: 127.0.0.1:60338 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:34:12,877 [INFO] papermind.api: [1309b479] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60338 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:13,896 [INFO] papermind.api: [fb1626f5] PUT /settings/daily-report-config → 200 (2ms) -INFO: 127.0.0.1:60338 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:34:13,907 [INFO] papermind.api: [20bab0b0] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60338 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:14,114 [INFO] papermind.api: [be20ec7c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60338 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:15,865 [INFO] papermind.api: [f0cafe3b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60338 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:16,010 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Protecting+the+Undeleted+in+Machine+Unlearning&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:34:16,011 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:34:16,117 [INFO] papermind.api: [50b23802] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60353 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:16,374 [INFO] papermind.api: [ed82d240] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60353 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:17,408 [INFO] papermind.api: [5909b54c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60353 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:18,115 [INFO] papermind.api: [e3895d85] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60353 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:19,409 [INFO] papermind.api: [bdc81fee] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60353 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:20,114 [INFO] papermind.api: [fb2ea144] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60353 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:21,010 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:34:21,435 [INFO] papermind.api: [914bb23d] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:60362 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:22,114 [INFO] papermind.api: [2fde01af] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60362 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:22,566 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Rethinking+the+Spatio-Temporal+Alignment+of+End-to-End+3D+Perception%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:34:23,409 [INFO] papermind.api: [e35b700e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60362 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:23,702 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7117850743&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:34:24,114 [INFO] papermind.api: [e93c8263] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60362 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:24,259 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Rethinking+the+Spatio-Temporal+Alignment+of+End-to-End+3D+Perception&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:34:24,259 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:34:25,411 [INFO] papermind.api: [e6e39870] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60362 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:26,114 [INFO] papermind.api: [6d2c006b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60380 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:26,321 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Rethinking+the+Spatio-Temporal+Alignment+of+End-to-End+3D+Perception&limit=1&fields=title "HTTP/1.1 500 Internal Server Error" -2026-02-26 13:34:26,321 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 500 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:34:26,538 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Rethinking+the+Spatio-Temporal+Alignment+of+End-to-End+3D+Perception&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:34:26,538 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:34:27,409 [INFO] papermind.api: [6fdac885] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60380 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:28,114 [INFO] papermind.api: [52686364] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60380 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:29,409 [INFO] papermind.api: [039f4187] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60380 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:30,114 [INFO] papermind.api: [707d05ca] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60380 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:30,826 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Rethinking+the+Spatio-Temporal+Alignment+of+End-to-End+3D+Perception&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:34:30,826 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:34:31,410 [INFO] papermind.api: [5c001a74] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60387 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:31,919 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Protecting+the+Undeleted+in+Machine+Unlearning&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:34:31,919 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:34:32,122 [INFO] papermind.api: [9e0c4879] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60387 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:33,409 [INFO] papermind.api: [e0abffd7] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60387 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:34,114 [INFO] papermind.api: [277a156a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60387 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:35,411 [INFO] papermind.api: [b92e3073] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60387 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:36,114 [INFO] papermind.api: [8e7dadb2] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60400 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:37,409 [INFO] papermind.api: [0203e730] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60400 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:37,656 [INFO] papermind.api: [085eae47] GET /papers/folder-stats → 200 (3ms) -INFO: 127.0.0.1:60400 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:34:38,122 [INFO] papermind.api: [2e1d7401] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60400 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:39,402 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Rethinking+the+Spatio-Temporal+Alignment+of+End-to-End+3D+Perception&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:34:39,402 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:34:39,411 [INFO] papermind.api: [83df9899] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60400 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:40,115 [INFO] papermind.api: [2f695a78] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60400 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:41,326 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:34:41,410 [INFO] papermind.api: [2f80154c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60429 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:42,121 [INFO] papermind.api: [fbd0778d] GET /tasks/active → 200 (6ms) -INFO: 127.0.0.1:60433 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:42,122 [INFO] papermind.api: [0e4d4761] GET /papers/folder-stats → 200 (7ms) -INFO: 127.0.0.1:60429 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:34:42,827 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Morphology-Preserving+Holotomography%3A+Quantitative+Analysis+of+3D+Organoid+Dynamics%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:34:43,409 [INFO] papermind.api: [f619380d] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60429 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:43,877 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7117681381&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:34:44,114 [INFO] papermind.api: [aba5c906] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60429 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:44,495 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Morphology-Preserving+Holotomography%3A+Quantitative+Analysis+of+3D+Organoid+Dynamics&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:34:44,495 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:34:45,409 [INFO] papermind.api: [cc2a28ee] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60429 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:46,115 [INFO] papermind.api: [c8e76ea0] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60458 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:46,788 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Morphology-Preserving+Holotomography%3A+Quantitative+Analysis+of+3D+Organoid+Dynamics&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:34:46,792 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:34:46,923 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:34:47,409 [INFO] papermind.api: [7e7ade49] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60458 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:48,114 [INFO] papermind.api: [49ff4abb] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60458 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:48,376 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Causality+is+Key+for+Interpretability+Claims+to+Generalise%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:34:49,409 [INFO] papermind.api: [d2ab1a36] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60458 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:49,450 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7130538568&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:34:49,950 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Causality+is+Key+for+Interpretability+Claims+to+Generalise&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:34:49,951 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:34:50,115 [INFO] papermind.api: [a7471bc0] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60458 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:51,087 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Morphology-Preserving+Holotomography%3A+Quantitative+Analysis+of+3D+Organoid+Dynamics&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:34:51,087 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:34:51,410 [INFO] papermind.api: [2c57c484] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60505 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:52,114 [INFO] papermind.api: [2d411b40] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60505 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:52,471 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Causality+is+Key+for+Interpretability+Claims+to+Generalise&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:34:53,083 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/3399b11ecf6f9e214ef895c9c03daec93c1a13c5?fields=references.title%2Ccitations.title "HTTP/1.1 200 OK" -2026-02-26 13:34:53,410 [INFO] papermind.api: [11f84292] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60505 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:54,114 [INFO] papermind.api: [24f6d560] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60505 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:54,336 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Calibrate-Then-Act%3A+Cost-Aware+Exploration+in+LLM+Agents%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:34:54,886 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7130763137&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:34:54,964 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Rethinking+the+Spatio-Temporal+Alignment+of+End-to-End+3D+Perception&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:34:54,967 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:34:55,410 [INFO] papermind.api: [84b2f3cc] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60505 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:55,481 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Calibrate-Then-Act%3A+Cost-Aware+Exploration+in+LLM+Agents&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:34:55,482 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:34:56,115 [INFO] papermind.api: [6dee1d2a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60522 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:57,409 [INFO] papermind.api: [a3fb1cff] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60522 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:58,115 [INFO] papermind.api: [383571ca] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60522 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:58,448 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Calibrate-Then-Act%3A+Cost-Aware+Exploration+in+LLM+Agents&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:34:58,811 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/091291f8df56dfabb46c24dd610bf51ac1f42e2f?fields=references.title%2Ccitations.title "HTTP/1.1 200 OK" -2026-02-26 13:34:59,354 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Reinforced+Fast+Weights+with+Next-Sequence+Prediction%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:34:59,411 [INFO] papermind.api: [9688a6a5] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60522 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:34:59,757 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Morphology-Preserving+Holotomography%3A+Quantitative+Analysis+of+3D+Organoid+Dynamics&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:34:59,878 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7130595718&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:35:00,028 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/5aa840417007fdb9d1e31ea283ff11f9c58f4f54?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 429 " -2026-02-26 13:35:00,028 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/5aa840417007fdb9d1e31ea283ff11f9c58f4f54, retry 1/5 in 2.0s -2026-02-26 13:35:00,117 [INFO] papermind.api: [04daaf12] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60522 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:00,463 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Reinforced+Fast+Weights+with+Next-Sequence+Prediction&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:35:00,463 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:35:01,409 [INFO] papermind.api: [b61ccccc] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60543 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:02,114 [INFO] papermind.api: [9de1992c] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60543 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:02,980 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/5aa840417007fdb9d1e31ea283ff11f9c58f4f54?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 200 OK" -2026-02-26 13:35:03,074 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Reinforced+Fast+Weights+with+Next-Sequence+Prediction&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:35:03,075 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:35:03,411 [INFO] papermind.api: [3f0dce63] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60543 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:04,114 [INFO] papermind.api: [c18b1457] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60543 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:04,781 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Real2Edit2Real%3A+Generating+Robotic+Demonstrations+via+a+3D+Control+Interface%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:35:05,325 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7117125623&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:35:05,412 [INFO] papermind.api: [336bf818] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60543 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:05,611 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Real2Edit2Real%3A+Generating+Robotic+Demonstrations+via+a+3D+Control+Interface&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:35:05,611 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:35:06,116 [INFO] papermind.api: [1ac8392c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60552 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:07,409 [INFO] papermind.api: [7ef3aa03] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60552 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:07,662 [INFO] papermind.api: [ea74c869] GET /papers/folder-stats → 200 (7ms) -INFO: 127.0.0.1:60552 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:35:07,665 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Reinforced+Fast+Weights+with+Next-Sequence+Prediction&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:35:07,666 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:35:07,902 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Real2Edit2Real%3A+Generating+Robotic+Demonstrations+via+a+3D+Control+Interface&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:35:07,902 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:35:08,115 [INFO] papermind.api: [5e2e4610] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60552 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:09,412 [INFO] papermind.api: [83ff264b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60552 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:09,976 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:35:10,114 [INFO] papermind.api: [40045ecf] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60552 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:10,739 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Morphology-Preserving+Holotomography%3A+Quantitative+Analysis+of+3D+Organoid+Dynamics%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:35:11,410 [INFO] papermind.api: [45a464b8] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60568 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:11,983 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7117681381&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:35:12,123 [INFO] papermind.api: [692633f2] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60572 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:12,123 [INFO] papermind.api: [6d4f89c0] GET /papers/folder-stats → 200 (9ms) -INFO: 127.0.0.1:60568 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:35:12,500 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Real2Edit2Real%3A+Generating+Robotic+Demonstrations+via+a+3D+Control+Interface&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:35:12,501 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:35:13,269 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Morphology-Preserving+Holotomography%3A+Quantitative+Analysis+of+3D+Organoid+Dynamics&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:35:13,411 [INFO] papermind.api: [6cc4ec79] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60568 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:13,814 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/5aa840417007fdb9d1e31ea283ff11f9c58f4f54?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 200 OK" -2026-02-26 13:35:14,115 [INFO] papermind.api: [7aa76252] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60568 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:14,595 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Real2Edit2Real%3A+Generating+Robotic+Demonstrations+via+a+3D+Control+Interface%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:35:15,412 [INFO] papermind.api: [d433fd3e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60568 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:15,801 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7117125623&per_page=30&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Cauthorships%2Cabstract_inverted_index&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:35:16,079 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Real2Edit2Real%3A+Generating+Robotic+Demonstrations+via+a+3D+Control+Interface&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:35:16,080 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:35:16,117 [INFO] papermind.api: [382e45ab] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60583 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:16,648 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Reinforced+Fast+Weights+with+Next-Sequence+Prediction&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:35:17,326 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/c511f80677e11d64a4b8c261877e4f0bf7b66259?fields=references.title%2Ccitations.title "HTTP/1.1 200 OK" -2026-02-26 13:35:17,410 [INFO] papermind.api: [b1347f63] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60583 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:18,115 [INFO] papermind.api: [39c0a8fd] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60583 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:18,138 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Knowledge-Embedded+Latent+Projection+for+Robust+Representation+Learning%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:35:18,364 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Real2Edit2Real%3A+Generating+Robotic+Demonstrations+via+a+3D+Control+Interface&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:35:18,364 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:35:18,703 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7130616107&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:35:18,988 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Knowledge-Embedded+Latent+Projection+for+Robust+Representation+Learning&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:35:18,988 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:35:19,411 [INFO] papermind.api: [fc135864] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60583 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:20,115 [INFO] papermind.api: [9d97ce98] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60583 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:21,225 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Real2Edit2Real%3A+Generating+Robotic+Demonstrations+via+a+3D+Control+Interface&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:35:21,412 [INFO] papermind.api: [f99812c1] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60600 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:21,505 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/ad6b50d9440b24a67742137899940cfc81bd6f64?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 429 " -2026-02-26 13:35:21,505 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/ad6b50d9440b24a67742137899940cfc81bd6f64, retry 1/5 in 2.0s -2026-02-26 13:35:21,520 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Knowledge-Embedded+Latent+Projection+for+Robust+Representation+Learning&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:35:22,115 [INFO] papermind.api: [e2512942] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60600 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:22,199 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/58be19a0b5c6f367c81579448d84568a5891177e?fields=references.title%2Ccitations.title "HTTP/1.1 200 OK" -2026-02-26 13:35:22,642 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Real2Edit2Real%3A+Generating+Robotic+Demonstrations+via+a+3D+Control+Interface&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:35:22,642 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:35:22,746 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Nighttime+Autonomous+Driving+Scene+Reconstruction+with+Physically-Based+Gaussian+Splatting%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:35:23,332 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7130236325&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:35:23,410 [INFO] papermind.api: [29bcd966] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60600 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:23,794 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/ad6b50d9440b24a67742137899940cfc81bd6f64?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 429 " -2026-02-26 13:35:23,795 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/ad6b50d9440b24a67742137899940cfc81bd6f64, retry 2/5 in 4.0s -2026-02-26 13:35:23,953 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Nighttime+Autonomous+Driving+Scene+Reconstruction+with+Physically-Based+Gaussian+Splatting&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:35:23,954 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:35:24,116 [INFO] papermind.api: [067a7d22] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60600 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:25,410 [INFO] papermind.api: [7a9976a2] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60600 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:26,115 [INFO] papermind.api: [110f2d3f] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60609 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:26,558 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Nighttime+Autonomous+Driving+Scene+Reconstruction+with+Physically-Based+Gaussian+Splatting&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:35:26,558 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:35:27,412 [INFO] papermind.api: [88202b58] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60609 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:28,116 [INFO] papermind.api: [b3313b80] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60609 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:28,230 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/ad6b50d9440b24a67742137899940cfc81bd6f64?fields=references.paperId%2Creferences.title%2Creferences.year%2Creferences.venue%2Creferences.citationCount%2Creferences.externalIds%2Creferences.abstract%2Ccitations.paperId%2Ccitations.title%2Ccitations.year%2Ccitations.venue%2Ccitations.citationCount%2Ccitations.externalIds%2Ccitations.abstract "HTTP/1.1 200 OK" -2026-02-26 13:35:28,543 [INFO] packages.ai.graph_service: auto_link_citations: 0 edges, 0 errors -2026-02-26 13:35:28,544 [INFO] packages.ai.pipelines: bg auto_link: {'papers': 20, 'edges_linked': 0, 'errors': 0} -2026-02-26 13:35:29,410 [INFO] papermind.api: [a992341a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60609 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:30,115 [INFO] papermind.api: [b4b29c23] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60609 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:31,200 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Nighttime+Autonomous+Driving+Scene+Reconstruction+with+Physically-Based+Gaussian+Splatting&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:35:31,200 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:35:31,301 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Real2Edit2Real%3A+Generating+Robotic+Demonstrations+via+a+3D+Control+Interface&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:35:31,301 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:35:31,412 [INFO] papermind.api: [068a0140] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60620 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:32,115 [INFO] papermind.api: [d00000ff] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60620 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:33,412 [INFO] papermind.api: [b6c216b1] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60620 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:34,117 [INFO] papermind.api: [7557c166] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60620 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:35,410 [INFO] papermind.api: [6d316c27] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60620 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:36,116 [INFO] papermind.api: [3fd75bf7] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60633 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:37,411 [INFO] papermind.api: [5a0a5e83] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60633 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:37,659 [INFO] papermind.api: [ec34dcb6] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:60633 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:35:38,115 [INFO] papermind.api: [5f375342] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60633 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:39,411 [INFO] papermind.api: [84d6b4da] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60633 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:39,728 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Nighttime+Autonomous+Driving+Scene+Reconstruction+with+Physically-Based+Gaussian+Splatting&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:35:39,729 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:35:40,117 [INFO] papermind.api: [ce04ed03] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60633 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:41,410 [INFO] papermind.api: [52965d05] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60646 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:42,117 [INFO] papermind.api: [0e1ad000] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60658 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:42,118 [INFO] papermind.api: [7877ae1c] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:60646 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:35:43,410 [INFO] papermind.api: [de5443bb] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60646 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:44,115 [INFO] papermind.api: [46c7282a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60646 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:45,410 [INFO] papermind.api: [50221314] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60646 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:46,114 [INFO] papermind.api: [b8a73aea] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60697 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:47,194 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Real2Edit2Real%3A+Generating+Robotic+Demonstrations+via+a+3D+Control+Interface&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:35:47,194 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:35:47,411 [INFO] papermind.api: [0300cf69] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60697 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:48,115 [INFO] papermind.api: [4e9f1467] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60697 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:49,411 [INFO] papermind.api: [59155aa8] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60697 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:50,116 [INFO] papermind.api: [289330c4] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60697 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:51,410 [INFO] papermind.api: [0cf73114] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60724 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:52,114 [INFO] papermind.api: [50563f39] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60724 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:53,411 [INFO] papermind.api: [cbf73b38] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60724 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:54,061 [INFO] papermind.api: [07969072] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60746 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:54,067 [INFO] papermind.api: [5888e243] GET /papers/folder-stats → 200 (11ms) -INFO: 127.0.0.1:60724 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:35:54,067 [INFO] papermind.api: [48a9ebb5] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60748 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:54,080 [INFO] papermind.api: [726681ad] GET /papers/folder-stats → 200 (12ms) -INFO: 127.0.0.1:60746 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:35:54,082 [INFO] papermind.api: [01d10cbe] GET /today → 200 (6ms) -INFO: 127.0.0.1:60752 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:35:54,083 [INFO] papermind.api: [f473f9a7] GET /pipelines/runs → 200 (7ms) -INFO: 127.0.0.1:60751 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:35:54,086 [INFO] papermind.api: [e708cfcd] GET /metrics/costs → 200 (12ms) -INFO: 127.0.0.1:60724 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:35:54,087 [INFO] papermind.api: [13663dbc] GET /today → 200 (2ms) -INFO: 127.0.0.1:60746 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:35:54,088 [INFO] papermind.api: [c01bde65] GET /pipelines/runs → 200 (3ms) -INFO: 127.0.0.1:60752 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:35:54,092 [INFO] papermind.api: [8cbea295] GET /metrics/costs → 200 (5ms) -INFO: 127.0.0.1:60751 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:35:54,124 [INFO] papermind.api: [18581ebe] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:60751 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:54,125 [INFO] papermind.api: [eb71dcc3] GET /system/status → 200 (51ms) -INFO: 127.0.0.1:60748 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:35:54,154 [INFO] papermind.api: [2e0e8786] GET /system/status → 200 (28ms) -INFO: 127.0.0.1:60751 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:35:54,776 [INFO] papermind.api: [0e8ecbe1] GET /actions → 200 (4ms) -INFO: 127.0.0.1:60748 - "GET /actions?limit=30 HTTP/1.1" 200 OK -2026-02-26 13:35:54,779 [INFO] papermind.api: [7a0970f2] GET /papers/latest → 200 (8ms) -INFO: 127.0.0.1:60752 - "GET /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:35:54,780 [INFO] papermind.api: [03f3867f] GET /papers/folder-stats → 200 (9ms) -INFO: 127.0.0.1:60751 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:35:54,785 [INFO] papermind.api: [93c9c850] GET /actions → 200 (7ms) -INFO: 127.0.0.1:60746 - "GET /actions?limit=30 HTTP/1.1" 200 OK -2026-02-26 13:35:54,788 [INFO] papermind.api: [e711be24] GET /papers/latest → 200 (6ms) -INFO: 127.0.0.1:60748 - "GET /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:35:54,789 [INFO] papermind.api: [cca06a24] GET /papers/folder-stats → 200 (6ms) -INFO: 127.0.0.1:60752 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:35:54,791 [INFO] papermind.api: [30b40bcf] GET /papers/folder-stats → 200 (1ms) -INFO: 127.0.0.1:60748 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:35:55,454 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Nighttime+Autonomous+Driving+Scene+Reconstruction+with+Physically-Based+Gaussian+Splatting&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:35:56,044 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/3811233ed0f2c5658603afe4c2295a598ef296ab?fields=references.title%2Ccitations.title "HTTP/1.1 429 " -2026-02-26 13:35:56,044 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/3811233ed0f2c5658603afe4c2295a598ef296ab, retry 1/5 in 2.0s -2026-02-26 13:35:56,056 [INFO] papermind.api: [70d18a47] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60748 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:56,114 [INFO] papermind.api: [7ecb5a02] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60759 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:58,057 [INFO] papermind.api: [573fde6d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60759 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:58,115 [INFO] papermind.api: [df2e8477] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60759 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:35:58,314 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/3811233ed0f2c5658603afe4c2295a598ef296ab?fields=references.title%2Ccitations.title "HTTP/1.1 429 " -2026-02-26 13:35:58,314 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/3811233ed0f2c5658603afe4c2295a598ef296ab, retry 2/5 in 4.0s -2026-02-26 13:35:59,241 [INFO] papermind.api: [89bf8da4] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:60759 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:35:59,242 [INFO] papermind.api: [00c83a71] GET /topics → 200 (4ms) -INFO: 127.0.0.1:60769 - "GET /topics?enabled_only=false HTTP/1.1" 200 OK -2026-02-26 13:35:59,244 [INFO] papermind.api: [bc973008] GET /topics → 200 (2ms) -INFO: 127.0.0.1:60759 - "GET /topics?enabled_only=false HTTP/1.1" 200 OK -2026-02-26 13:36:00,056 [INFO] papermind.api: [6eecb4b7] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60759 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:00,115 [INFO] papermind.api: [486af595] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60759 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:02,057 [INFO] papermind.api: [71fb2b82] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60784 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:02,114 [INFO] papermind.api: [534c9c28] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60784 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:02,199 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:36:02,200 [INFO] packages.ai.graph_service: auto_link_citations: 0 edges, 0 errors -2026-02-26 13:36:02,200 [INFO] packages.ai.pipelines: bg auto_link: {'papers': 20, 'edges_linked': 0, 'errors': 0} -2026-02-26 13:36:02,990 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/3811233ed0f2c5658603afe4c2295a598ef296ab?fields=references.title%2Ccitations.title "HTTP/1.1 200 OK" -2026-02-26 13:36:04,057 [INFO] papermind.api: [260acd77] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60784 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:04,117 [INFO] papermind.api: [5bb15094] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60784 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:04,630 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Joint+Orientation+and+Weight+Optimization+for+Robust+Watertight+Surface+Reconstruction+via+Dirichlet-Regularized+Winding+Fields%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:36:05,806 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7129737526&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:36:06,056 [INFO] papermind.api: [83192b1a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60784 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:06,097 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Joint+Orientation+and+Weight+Optimization+for+Robust+Watertight+Surface+Reconstruction+via+Dirichlet-Regularized+Winding+Fields&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:36:06,097 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:36:06,115 [INFO] papermind.api: [e1867f65] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60798 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:08,057 [INFO] papermind.api: [4a23d2f9] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60798 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:08,117 [INFO] papermind.api: [23878390] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60798 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:08,996 [INFO] papermind.api: [0e6c0056] GET /settings/llm-providers → 200 (2ms) -INFO: 127.0.0.1:60798 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:36:08,996 [INFO] papermind.api: [a774bfcd] GET /settings/llm-providers/active → 200 (1ms) -INFO: 127.0.0.1:60811 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:36:08,998 [INFO] papermind.api: [a3c41fa1] GET /settings/llm-providers → 200 (1ms) -INFO: 127.0.0.1:60798 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:36:08,998 [INFO] papermind.api: [8780ce85] GET /settings/llm-providers/active → 200 (1ms) -INFO: 127.0.0.1:60813 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:36:10,057 [INFO] papermind.api: [e513db32] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60813 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:10,114 [INFO] papermind.api: [0f1a5b21] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60813 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:10,211 [INFO] papermind.api: [0dd5d403] GET /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:60798 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:36:10,212 [INFO] papermind.api: [9e28a2d1] GET /settings/email-configs → 200 (2ms) -INFO: 127.0.0.1:60813 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:36:10,213 [INFO] papermind.api: [9272ba82] GET /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:60811 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:36:10,214 [INFO] papermind.api: [d3beceaf] GET /settings/email-configs → 200 (1ms) -INFO: 127.0.0.1:60813 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:36:10,355 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Joint+Orientation+and+Weight+Optimization+for+Robust+Watertight+Surface+Reconstruction+via+Dirichlet-Regularized+Winding+Fields&limit=1&fields=title "HTTP/1.1 500 Internal Server Error" -2026-02-26 13:36:10,355 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 500 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:36:12,057 [INFO] papermind.api: [e2f14d35] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60820 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:12,117 [INFO] papermind.api: [0b6edc27] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60822 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:12,119 [INFO] papermind.api: [48b7d3e7] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:60820 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:36:12,532 [INFO] papermind.api: [1497ce99] PUT /settings/daily-report-config → 200 (4ms) -INFO: 127.0.0.1:60820 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:36:12,544 [INFO] papermind.api: [9c09c664] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60820 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:13,627 [INFO] papermind.api: [f665ee70] PUT /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:60820 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:36:13,643 [INFO] papermind.api: [a29ef57c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60820 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:14,063 [INFO] papermind.api: [144dbc6f] PUT /settings/daily-report-config → 200 (2ms) -INFO: 127.0.0.1:60820 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:36:14,079 [INFO] papermind.api: [211ffda4] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60820 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:14,115 [INFO] papermind.api: [6fdfae5c] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60820 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:14,210 [INFO] papermind.api: [2b5afab8] PUT /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:60820 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:36:14,222 [INFO] papermind.api: [28c92213] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60820 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:14,361 [INFO] papermind.api: [09755bdf] PUT /settings/daily-report-config → 200 (2ms) -INFO: 127.0.0.1:60820 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:36:14,374 [INFO] papermind.api: [c6bd4c96] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60820 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:14,527 [INFO] papermind.api: [1231af8c] PUT /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:60820 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:36:14,539 [INFO] papermind.api: [b34eec17] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60820 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:14,635 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Joint+Orientation+and+Weight+Optimization+for+Robust+Watertight+Surface+Reconstruction+via+Dirichlet-Regularized+Winding+Fields&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:36:14,635 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:36:14,796 [INFO] papermind.api: [613cd99c] PUT /settings/daily-report-config → 200 (2ms) -INFO: 127.0.0.1:60820 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:36:14,809 [INFO] papermind.api: [acddc647] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60820 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:14,927 [INFO] papermind.api: [188dc0d4] PUT /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:60820 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:36:14,938 [INFO] papermind.api: [34313220] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60820 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:15,078 [INFO] papermind.api: [d7a670f8] PUT /settings/daily-report-config → 200 (2ms) -INFO: 127.0.0.1:60820 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:36:15,092 [INFO] papermind.api: [b07a4cc9] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60820 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:15,210 [INFO] papermind.api: [ba9a6241] PUT /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:60820 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:36:15,223 [INFO] papermind.api: [4e0f19aa] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60820 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:16,041 [INFO] papermind.api: [375ca3cf] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60820 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:16,115 [INFO] papermind.api: [0dbc046d] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60825 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:17,139 [INFO] papermind.api: [2ce23cde] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60825 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:17,574 [INFO] papermind.api: [1a1dea39] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60825 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:17,724 [INFO] papermind.api: [b805d605] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60825 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:17,730 [INFO] papermind.api: [43c1b9e8] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60825 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:17,873 [INFO] papermind.api: [de44bbda] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60825 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:18,043 [INFO] papermind.api: [7057f343] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60825 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:18,116 [INFO] papermind.api: [46df22e6] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60825 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:18,297 [INFO] papermind.api: [4df3e64c] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60825 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:18,306 [INFO] papermind.api: [5ae49a6a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60825 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:18,440 [INFO] papermind.api: [5266358f] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60825 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:18,448 [INFO] papermind.api: [ecbcb886] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60825 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:18,588 [INFO] papermind.api: [6f36221f] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60825 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:18,728 [INFO] papermind.api: [76e5736b] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60825 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:20,115 [INFO] papermind.api: [8683028f] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60825 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:20,726 [INFO] papermind.api: [fb93d8ad] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60825 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:20,913 [INFO] papermind.api: [e16f3fb8] GET /settings/llm-providers → 200 (2ms) -INFO: 127.0.0.1:60825 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:36:20,913 [INFO] papermind.api: [d6eab92e] GET /settings/llm-providers/active → 200 (1ms) -INFO: 127.0.0.1:60834 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:36:20,914 [INFO] papermind.api: [9dbe988e] GET /settings/llm-providers/active → 200 (1ms) -INFO: 127.0.0.1:60834 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:36:20,915 [INFO] papermind.api: [dad3f789] GET /settings/llm-providers → 200 (1ms) -INFO: 127.0.0.1:60825 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:36:22,118 [INFO] papermind.api: [45b6623c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60840 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:22,499 [INFO] papermind.api: [7c55aa17] GET /settings/email-configs → 200 (3ms) -INFO: 127.0.0.1:60840 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:36:22,500 [INFO] papermind.api: [5bf0090f] GET /settings/daily-report-config → 200 (3ms) -INFO: 127.0.0.1:60842 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:36:22,505 [INFO] papermind.api: [b87331b9] GET /settings/daily-report-config → 200 (2ms) -INFO: 127.0.0.1:60842 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:36:22,505 [INFO] papermind.api: [8faf0902] GET /settings/email-configs → 200 (3ms) -INFO: 127.0.0.1:60840 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:36:22,727 [INFO] papermind.api: [2c6dc539] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60840 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:23,473 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Joint+Orientation+and+Weight+Optimization+for+Robust+Watertight+Surface+Reconstruction+via+Dirichlet-Regularized+Winding+Fields&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:36:23,474 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:36:24,115 [INFO] papermind.api: [5a44854e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60840 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:24,364 [INFO] papermind.api: [35b12262] PUT /settings/daily-report-config → 200 (4ms) -INFO: 127.0.0.1:60840 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:36:24,374 [INFO] papermind.api: [88d2582a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60840 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:26,116 [INFO] papermind.api: [6b74007c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60855 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:26,183 [INFO] papermind.api: [5e8a1b3d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60855 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:27,873 [INFO] papermind.api: [4f3c9cbf] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60855 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:28,117 [INFO] papermind.api: [3052ee2a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60855 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:29,243 [INFO] papermind.api: [72629f46] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:60855 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:36:29,876 [INFO] papermind.api: [ffecd327] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60855 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:30,154 [INFO] papermind.api: [63e1da0d] GET /tasks/active → 200 (8ms) -INFO: 127.0.0.1:60855 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:31,875 [INFO] papermind.api: [7f8db412] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60872 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:32,116 [INFO] papermind.api: [49cc03d6] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60872 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:33,875 [INFO] papermind.api: [80183ae0] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60872 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:34,115 [INFO] papermind.api: [c50590db] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60872 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:35,874 [INFO] papermind.api: [be9adad0] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60872 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:36,116 [INFO] papermind.api: [c13bb0a7] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60885 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:37,880 [INFO] papermind.api: [94efe743] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60885 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:38,117 [INFO] papermind.api: [fb57101e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60885 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:39,481 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Joint+Orientation+and+Weight+Optimization+for+Robust+Watertight+Surface+Reconstruction+via+Dirichlet-Regularized+Winding+Fields&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:36:39,850 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/1c76d40fa6d41c113979a91abd992e5a77584130?fields=references.title%2Ccitations.title "HTTP/1.1 200 OK" -2026-02-26 13:36:39,875 [INFO] papermind.api: [3c009c75] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60885 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:40,115 [INFO] papermind.api: [2cf7f74e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60885 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:41,351 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Learnable+Multi-level+Discrete+Wavelet+Transforms+for+3D+Gaussian+Splatting+Frequency+Modulation%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:36:41,743 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7130237695&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:36:41,876 [INFO] papermind.api: [b9a2bac6] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60902 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:42,014 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Learnable+Multi-level+Discrete+Wavelet+Transforms+for+3D+Gaussian+Splatting+Frequency+Modulation&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:36:42,014 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:36:42,119 [INFO] papermind.api: [bd0510f3] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60908 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:42,121 [INFO] papermind.api: [b70be18c] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:60902 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:36:43,875 [INFO] papermind.api: [1fe046f4] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60902 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:44,114 [INFO] papermind.api: [1a2d14be] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60902 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:44,291 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Learnable+Multi-level+Discrete+Wavelet+Transforms+for+3D+Gaussian+Splatting+Frequency+Modulation&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:36:44,291 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:36:45,883 [INFO] papermind.api: [da5f54e1] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:60902 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:46,116 [INFO] papermind.api: [c163664f] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60923 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:47,874 [INFO] papermind.api: [0e49f4e4] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60923 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:48,117 [INFO] papermind.api: [5dc98307] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60923 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:48,881 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Learnable+Multi-level+Discrete+Wavelet+Transforms+for+3D+Gaussian+Splatting+Frequency+Modulation&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:36:48,882 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:36:49,875 [INFO] papermind.api: [2bdbe932] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60923 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:50,115 [INFO] papermind.api: [02b943e0] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60923 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:51,875 [INFO] papermind.api: [e8769123] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60938 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:52,115 [INFO] papermind.api: [c44d3fbe] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60938 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:53,875 [INFO] papermind.api: [e3cbea48] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60938 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:54,115 [INFO] papermind.api: [811bfcac] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60938 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:55,877 [INFO] papermind.api: [ded6a2e6] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60938 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:56,115 [INFO] papermind.api: [7ec2c1e1] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60945 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:57,513 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Learnable+Multi-level+Discrete+Wavelet+Transforms+for+3D+Gaussian+Splatting+Frequency+Modulation&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:36:57,513 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:36:57,875 [INFO] papermind.api: [9f785e1d] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60945 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:58,116 [INFO] papermind.api: [dc6430ff] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60945 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:58,689 [INFO] papermind.api: [d503fb8c] GET /tasks/active → 200 (11ms) -INFO: 127.0.0.1:60965 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:58,694 [INFO] papermind.api: [305a8019] GET /papers/folder-stats → 200 (18ms) -INFO: 127.0.0.1:60945 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:36:58,695 [INFO] papermind.api: [ba5fe858] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:60967 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:36:58,698 [INFO] papermind.api: [5ff49e27] GET /papers/folder-stats → 200 (2ms) -INFO: 127.0.0.1:60965 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:37:00,115 [INFO] papermind.api: [4c368b4e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60965 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:02,117 [INFO] papermind.api: [f4144abf] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60974 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:03,689 [INFO] papermind.api: [37847372] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:60994 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:03,691 [INFO] papermind.api: [4648bd3b] GET /papers/folder-stats → 200 (6ms) -INFO: 127.0.0.1:60974 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:37:03,693 [INFO] papermind.api: [960f8158] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:60994 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:03,697 [INFO] papermind.api: [d5921b72] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:60996 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:37:04,115 [INFO] papermind.api: [1c5ba4d3] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60996 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:04,330 [INFO] papermind.api: [580b59b4] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60994 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:04,332 [INFO] papermind.api: [8be24240] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:60996 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:37:04,334 [INFO] papermind.api: [8d21046e] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:60974 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:04,340 [INFO] papermind.api: [31289f73] GET /papers/folder-stats → 200 (7ms) -INFO: 127.0.0.1:60994 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:37:04,860 [INFO] papermind.api: [bc227105] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:60974 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:04,861 [INFO] papermind.api: [428a5017] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:60994 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:37:04,863 [INFO] papermind.api: [92061118] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:60974 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:04,868 [INFO] papermind.api: [7f7f802a] GET /papers/folder-stats → 200 (6ms) -INFO: 127.0.0.1:60996 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:37:05,051 [INFO] papermind.api: [bb3dcc14] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:60974 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:05,054 [INFO] papermind.api: [791e7911] GET /papers/folder-stats → 200 (9ms) -INFO: 127.0.0.1:60996 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:37:05,055 [INFO] papermind.api: [3245fef5] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60994 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:05,060 [INFO] papermind.api: [02bc4298] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:60974 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:37:05,216 [INFO] papermind.api: [6d93e98f] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60994 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:05,220 [INFO] papermind.api: [0e4fa349] GET /papers/folder-stats → 200 (6ms) -INFO: 127.0.0.1:60974 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:37:05,221 [INFO] papermind.api: [5602228f] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60996 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:05,226 [INFO] papermind.api: [76faa84d] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:60994 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:37:05,377 [INFO] papermind.api: [61ae322b] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60996 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:05,379 [INFO] papermind.api: [99eea786] GET /papers/folder-stats → 200 (9ms) -INFO: 127.0.0.1:60994 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:37:05,380 [INFO] papermind.api: [dea28799] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60974 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:05,386 [INFO] papermind.api: [b997ba6e] GET /papers/folder-stats → 200 (7ms) -INFO: 127.0.0.1:60996 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:37:05,705 [INFO] papermind.api: [e8220b5a] GET /tasks/active → 200 (7ms) -INFO: 127.0.0.1:60974 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:05,707 [INFO] papermind.api: [5ecf2fa5] GET /papers/folder-stats → 200 (8ms) -INFO: 127.0.0.1:60996 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:37:05,710 [INFO] papermind.api: [1cefaee1] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:60994 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:05,712 [INFO] papermind.api: [a6980434] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:60974 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:37:06,085 [INFO] papermind.api: [63adcf5c] GET /tasks/active → 200 (8ms) -INFO: 127.0.0.1:60994 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:06,086 [INFO] papermind.api: [b78d5f38] GET /papers/folder-stats → 200 (9ms) -INFO: 127.0.0.1:60974 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:37:06,089 [INFO] papermind.api: [8242d80d] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:60996 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:06,092 [INFO] papermind.api: [c327e268] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:60994 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:37:06,115 [INFO] papermind.api: [8708225b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:60994 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:06,146 [INFO] papermind.api: [cfe0f4c2] GET /settings/email-configs → 200 (3ms) -INFO: 127.0.0.1:60974 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:37:06,147 [INFO] papermind.api: [27321e71] GET /settings/llm-providers → 200 (4ms) -INFO: 127.0.0.1:60994 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:37:06,147 [INFO] papermind.api: [88d3c385] GET /settings/llm-providers/active → 200 (3ms) -INFO: 127.0.0.1:60996 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:37:06,147 [INFO] papermind.api: [cfd3f277] GET /settings/daily-report-config → 200 (2ms) -INFO: 127.0.0.1:61017 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:37:06,151 [INFO] papermind.api: [8c90cffd] GET /settings/daily-report-config → 200 (2ms) -INFO: 127.0.0.1:60994 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:37:06,152 [INFO] papermind.api: [8e1f10c1] GET /settings/email-configs → 200 (3ms) -INFO: 127.0.0.1:60974 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:37:06,153 [INFO] papermind.api: [b27d5433] GET /settings/llm-providers/active → 200 (3ms) -INFO: 127.0.0.1:61021 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:37:06,153 [INFO] papermind.api: [c2417b99] GET /settings/llm-providers → 200 (3ms) -INFO: 127.0.0.1:61019 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:37:06,254 [INFO] papermind.api: [589fea68] GET /settings/email-configs → 200 (3ms) -INFO: 127.0.0.1:60974 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:37:06,254 [INFO] papermind.api: [5fcdf735] GET /settings/daily-report-config → 200 (3ms) -INFO: 127.0.0.1:60994 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:37:06,255 [INFO] papermind.api: [509fbd3e] GET /settings/llm-providers/active → 200 (4ms) -INFO: 127.0.0.1:61021 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:37:06,255 [INFO] papermind.api: [c25d9d35] GET /settings/llm-providers → 200 (4ms) -INFO: 127.0.0.1:61019 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:37:08,078 [INFO] papermind.api: [5d436776] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61019 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:08,116 [INFO] papermind.api: [72725c74] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61019 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:10,078 [INFO] papermind.api: [1e0a59f6] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61019 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:10,117 [INFO] papermind.api: [12ad598b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61019 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:11,684 [INFO] papermind.api: [d2e423a4] GET /tasks/active → 200 (10ms) -INFO: 127.0.0.1:61052 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:11,694 [INFO] papermind.api: [5cd726fe] GET /papers/folder-stats → 200 (20ms) -2026-02-26 13:37:11,696 [INFO] papermind.api: [3cc625d7] GET /settings/email-configs → 200 (12ms) -2026-02-26 13:37:11,697 [INFO] papermind.api: [ae31696b] GET /settings/daily-report-config → 200 (12ms) -2026-02-26 13:37:11,699 [INFO] papermind.api: [20b49096] GET /settings/llm-providers → 200 (15ms) -2026-02-26 13:37:11,700 [INFO] papermind.api: [c82357e1] GET /settings/llm-providers/active → 200 (16ms) -2026-02-26 13:37:11,700 [INFO] papermind.api: [3dbdd84c] GET /settings/email-configs → 200 (7ms) -2026-02-26 13:37:11,702 [INFO] papermind.api: [8530d32c] GET /tasks/active → 200 (8ms) -2026-02-26 13:37:11,702 [INFO] papermind.api: [fad0b04d] GET /settings/llm-providers → 200 (9ms) -2026-02-26 13:37:11,876 [INFO] papermind.api: [e61ccf3d] GET /tasks/active → 200 (5ms) -INFO: 127.0.0.1:61070 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:11,879 [INFO] papermind.api: [9dc49d04] GET /papers/folder-stats → 200 (9ms) -INFO: 127.0.0.1:61052 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:37:11,881 [INFO] papermind.api: [b9badfdc] GET /settings/daily-report-config → 200 (3ms) -INFO: 127.0.0.1:61078 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:37:11,882 [INFO] papermind.api: [9fc5ea4f] GET /settings/email-configs → 200 (5ms) -INFO: 127.0.0.1:61076 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:37:11,883 [INFO] papermind.api: [b0393aad] GET /settings/llm-providers/active → 200 (7ms) -INFO: 127.0.0.1:61074 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:37:11,884 [INFO] papermind.api: [87538b92] GET /tasks/active → 200 (6ms) -INFO: 127.0.0.1:61070 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:11,885 [INFO] papermind.api: [21ea4ec0] GET /settings/llm-providers → 200 (8ms) -INFO: 127.0.0.1:61073 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:37:11,892 [INFO] papermind.api: [8b2ca278] GET /settings/daily-report-config → 200 (7ms) -INFO: 127.0.0.1:61078 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:37:11,892 [INFO] papermind.api: [1eb53c1d] GET /settings/email-configs → 200 (7ms) -INFO: 127.0.0.1:61076 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:37:11,893 [INFO] papermind.api: [ec5fa372] GET /settings/llm-providers/active → 200 (4ms) -INFO: 127.0.0.1:61074 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:37:11,894 [INFO] papermind.api: [267dc8eb] GET /settings/llm-providers → 200 (4ms) -INFO: 127.0.0.1:61070 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:37:11,894 [INFO] papermind.api: [e289b50d] GET /papers/folder-stats → 200 (11ms) -INFO: 127.0.0.1:61052 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:37:12,117 [INFO] papermind.api: [7c9ec4da] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61070 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:12,119 [INFO] papermind.api: [8aa56f6e] GET /papers/folder-stats → 200 (3ms) -INFO: 127.0.0.1:61052 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:37:12,636 [INFO] papermind.api: [fd01e183] GET /tasks/active → 200 (7ms) -INFO: 127.0.0.1:61070 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:12,639 [INFO] papermind.api: [dee8e952] GET /papers/folder-stats → 200 (10ms) -INFO: 127.0.0.1:61052 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:37:12,640 [INFO] papermind.api: [f55e7f8c] GET /settings/daily-report-config → 200 (3ms) -INFO: 127.0.0.1:61073 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:37:12,641 [INFO] papermind.api: [328803a1] GET /settings/email-configs → 200 (3ms) -INFO: 127.0.0.1:61078 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:37:12,641 [INFO] papermind.api: [91296562] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:61070 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:12,642 [INFO] papermind.api: [1c2fface] GET /settings/llm-providers → 200 (5ms) -INFO: 127.0.0.1:61074 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:37:12,642 [INFO] papermind.api: [3b9469e8] GET /settings/llm-providers/active → 200 (5ms) -INFO: 127.0.0.1:61076 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:37:12,644 [INFO] papermind.api: [1e9cd357] GET /settings/daily-report-config → 200 (3ms) -INFO: 127.0.0.1:61073 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:37:12,645 [INFO] papermind.api: [f82ee94d] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:61052 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:37:12,645 [INFO] papermind.api: [0ae5c4c9] GET /settings/email-configs → 200 (2ms) -INFO: 127.0.0.1:61078 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:37:12,646 [INFO] papermind.api: [67b1f748] GET /settings/llm-providers/active → 200 (2ms) -INFO: 127.0.0.1:61074 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:37:12,646 [INFO] papermind.api: [d8166bf2] GET /settings/llm-providers → 200 (2ms) -INFO: 127.0.0.1:61070 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:37:13,049 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Learnable+Multi-level+Discrete+Wavelet+Transforms+for+3D+Gaussian+Splatting+Frequency+Modulation&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:37:13,049 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:37:14,118 [INFO] papermind.api: [fc643084] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61070 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:14,631 [INFO] papermind.api: [7a5b26da] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61070 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:16,119 [INFO] papermind.api: [74c3db46] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61092 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:16,630 [INFO] papermind.api: [efc4a5a9] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61092 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:18,118 [INFO] papermind.api: [94ae3faf] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61092 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:18,631 [INFO] papermind.api: [6e725fd4] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61092 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:20,118 [INFO] papermind.api: [ff18aee9] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61092 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:20,632 [INFO] papermind.api: [25cade26] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61092 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:22,120 [INFO] papermind.api: [1143ea10] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61099 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:22,630 [INFO] papermind.api: [b39d9226] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61099 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:24,118 [INFO] papermind.api: [fcd70ddb] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61099 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:24,632 [INFO] papermind.api: [492c35a4] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61099 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:26,120 [INFO] papermind.api: [0875437c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61104 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:26,631 [INFO] papermind.api: [9c5c900f] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61104 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:28,052 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:37:28,118 [INFO] papermind.api: [f49cd061] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61104 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:28,632 [INFO] papermind.api: [2d49428e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61104 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:29,649 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Gaussian+Mesh+Renderer+for+Lightweight+Differentiable+Rendering%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:37:30,056 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7130236559&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:37:30,119 [INFO] papermind.api: [49966108] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61104 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:30,580 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Gaussian+Mesh+Renderer+for+Lightweight+Differentiable+Rendering&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:37:30,580 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:37:30,631 [INFO] papermind.api: [26aa6a7a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61104 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:32,118 [INFO] papermind.api: [1841cff1] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61117 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:32,634 [INFO] papermind.api: [44e0efb1] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61117 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:32,860 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Gaussian+Mesh+Renderer+for+Lightweight+Differentiable+Rendering&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:37:32,860 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:37:34,120 [INFO] papermind.api: [d17facca] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61117 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:34,634 [INFO] papermind.api: [12bd5071] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61117 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:36,123 [INFO] papermind.api: [40f0575c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61128 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:36,632 [INFO] papermind.api: [9f17bf18] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61128 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:37,450 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Gaussian+Mesh+Renderer+for+Lightweight+Differentiable+Rendering&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:37:37,450 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:37:38,119 [INFO] papermind.api: [fdce1319] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61128 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:38,631 [INFO] papermind.api: [dfaa51a1] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61128 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:40,121 [INFO] papermind.api: [9eca12a8] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61128 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:40,632 [INFO] papermind.api: [b5b6f09d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61128 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:41,954 [INFO] papermind.api: [5cdd7cf5] GET /today → 200 (4ms) -INFO: 127.0.0.1:61156 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:37:41,956 [INFO] papermind.api: [b82a767e] GET /tasks/active → 200 (6ms) -INFO: 127.0.0.1:61157 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:41,958 [INFO] papermind.api: [88f89793] GET /papers/folder-stats → 200 (8ms) -INFO: 127.0.0.1:61155 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:37:41,959 [INFO] papermind.api: [376b7836] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61156 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:41,959 [INFO] papermind.api: [d8ec368b] GET /today → 200 (1ms) -INFO: 127.0.0.1:61159 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:37:41,962 [INFO] papermind.api: [2603af30] GET /papers/folder-stats → 200 (3ms) -INFO: 127.0.0.1:61157 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:37:42,121 [INFO] papermind.api: [a0942829] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:61159 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:42,121 [INFO] papermind.api: [48cdf875] GET /papers/folder-stats → 200 (3ms) -INFO: 127.0.0.1:61157 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:37:43,951 [INFO] papermind.api: [3f0db994] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61157 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:44,119 [INFO] papermind.api: [dfb1c9c5] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61157 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:45,950 [INFO] papermind.api: [3b1727f1] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61157 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:45,990 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Gaussian+Mesh+Renderer+for+Lightweight+Differentiable+Rendering&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:37:45,990 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:37:46,123 [INFO] papermind.api: [3b80652b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61176 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:47,951 [INFO] papermind.api: [6e785a85] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61176 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:48,119 [INFO] papermind.api: [751c8fa4] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61176 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:49,950 [INFO] papermind.api: [842ae7f0] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61176 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:50,120 [INFO] papermind.api: [6895eddb] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61176 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:51,957 [INFO] papermind.api: [d7294b35] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61194 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:52,119 [INFO] papermind.api: [5fbceb2c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61194 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:53,952 [INFO] papermind.api: [b6170aec] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61194 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:54,120 [INFO] papermind.api: [909dc668] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61194 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:55,953 [INFO] papermind.api: [a15c2637] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61194 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:56,121 [INFO] papermind.api: [2e088b52] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:61207 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:57,956 [INFO] papermind.api: [f2d1ddfd] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61207 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:58,120 [INFO] papermind.api: [b9006db6] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61207 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:37:59,952 [INFO] papermind.api: [7351afca] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61207 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:00,124 [INFO] papermind.api: [79b28053] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61207 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:01,600 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Gaussian+Mesh+Renderer+for+Lightweight+Differentiable+Rendering&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:38:01,601 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:38:01,953 [INFO] papermind.api: [73e43f27] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61222 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:02,119 [INFO] papermind.api: [c07157bd] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61222 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:03,952 [INFO] papermind.api: [17749ebb] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61222 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:04,119 [INFO] papermind.api: [010a83db] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61222 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:05,952 [INFO] papermind.api: [a460f309] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61222 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:06,120 [INFO] papermind.api: [ef29d682] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61229 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:07,953 [INFO] papermind.api: [4292af36] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61229 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:08,119 [INFO] papermind.api: [b94e1613] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61229 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:09,953 [INFO] papermind.api: [045c2acd] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61229 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:10,120 [INFO] papermind.api: [176395ed] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61229 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:11,955 [INFO] papermind.api: [0a292835] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:61257 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:11,958 [INFO] papermind.api: [0f729128] GET /papers/folder-stats → 200 (6ms) -INFO: 127.0.0.1:61256 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:38:12,122 [INFO] papermind.api: [f7ee6736] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:61257 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:12,125 [INFO] papermind.api: [6a456577] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:61256 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:38:13,953 [INFO] papermind.api: [16cb4601] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61256 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:14,120 [INFO] papermind.api: [0afb7e43] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61256 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:15,952 [INFO] papermind.api: [91b80b17] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61256 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:16,123 [INFO] papermind.api: [e55b030e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61267 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:16,603 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:38:17,491 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Wrivinder%3A+Towards+Spatial+Intelligence+for+Geo-locating+Ground+Images+onto+Satellite+Imagery%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:38:17,871 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7129416186&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:38:17,953 [INFO] papermind.api: [4313b93d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61267 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:18,120 [INFO] papermind.api: [dc58267f] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61267 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:18,801 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Wrivinder%3A+Towards+Spatial+Intelligence+for+Geo-locating+Ground+Images+onto+Satellite+Imagery&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:38:18,801 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:38:19,952 [INFO] papermind.api: [b7f46397] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61267 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:20,121 [INFO] papermind.api: [00bb1995] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61267 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:21,086 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Wrivinder%3A+Towards+Spatial+Intelligence+for+Geo-locating+Ground+Images+onto+Satellite+Imagery&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:38:21,086 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:38:21,952 [INFO] papermind.api: [0516916e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61288 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:22,121 [INFO] papermind.api: [fbf40749] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61288 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:23,954 [INFO] papermind.api: [1259e5c4] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:61288 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:24,120 [INFO] papermind.api: [80e702e1] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61288 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:25,372 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Wrivinder%3A+Towards+Spatial+Intelligence+for+Geo-locating+Ground+Images+onto+Satellite+Imagery&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:38:25,373 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:38:25,952 [INFO] papermind.api: [2df22ebb] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61288 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:26,120 [INFO] papermind.api: [4c7f8daf] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61299 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:27,952 [INFO] papermind.api: [2597dc05] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61299 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:28,119 [INFO] papermind.api: [6db89fe1] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61299 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:29,952 [INFO] papermind.api: [d49ceffb] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61299 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:30,121 [INFO] papermind.api: [8ee81ea0] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61299 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:31,956 [INFO] papermind.api: [a6def4aa] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61306 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:32,119 [INFO] papermind.api: [4c7c3042] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61306 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:33,953 [INFO] papermind.api: [0096c08a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61306 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:33,956 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Wrivinder%3A+Towards+Spatial+Intelligence+for+Geo-locating+Ground+Images+onto+Satellite+Imagery&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:38:33,956 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:38:34,121 [INFO] papermind.api: [0be09317] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61306 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:35,952 [INFO] papermind.api: [758cf7cc] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61306 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:36,124 [INFO] papermind.api: [f9a008d0] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61321 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:37,956 [INFO] papermind.api: [9326b248] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61321 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:38,119 [INFO] papermind.api: [f3412256] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61321 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:39,952 [INFO] papermind.api: [eab7f294] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61321 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:40,123 [INFO] papermind.api: [4864461e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61321 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:41,955 [INFO] papermind.api: [93092ec8] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:61330 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:41,958 [INFO] papermind.api: [43706748] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:61329 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:38:42,123 [INFO] papermind.api: [5977cdbb] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:61330 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:42,124 [INFO] papermind.api: [508505d8] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:61329 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:38:43,956 [INFO] papermind.api: [b0c94719] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61329 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:44,119 [INFO] papermind.api: [1c6ff9a2] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61329 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:45,951 [INFO] papermind.api: [57a110c3] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61329 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:46,121 [INFO] papermind.api: [f7ec55f0] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61343 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:47,952 [INFO] papermind.api: [59be3696] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61343 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:48,121 [INFO] papermind.api: [fac33bf8] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61343 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:49,844 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Wrivinder%3A+Towards+Spatial+Intelligence+for+Geo-locating+Ground+Images+onto+Satellite+Imagery&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:38:49,844 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:38:49,956 [INFO] papermind.api: [7b410269] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61343 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:50,119 [INFO] papermind.api: [d3cea56b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61343 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:51,952 [INFO] papermind.api: [77145bc0] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61362 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:52,121 [INFO] papermind.api: [228959fe] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61362 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:53,952 [INFO] papermind.api: [3e992558] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61362 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:54,121 [INFO] papermind.api: [6e607d8a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61362 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:55,955 [INFO] papermind.api: [cee3191e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61362 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:56,120 [INFO] papermind.api: [e8581fde] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61369 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:57,953 [INFO] papermind.api: [146a4905] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61369 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:58,123 [INFO] papermind.api: [b4e3bbce] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61369 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:38:59,954 [INFO] papermind.api: [bd85a0f1] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61369 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:00,121 [INFO] papermind.api: [a1a5f1bf] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61369 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:01,955 [INFO] papermind.api: [349b612e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61382 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:02,119 [INFO] papermind.api: [0a03753e] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61382 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:03,952 [INFO] papermind.api: [9643853b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61382 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:04,122 [INFO] papermind.api: [77d2d7ba] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61382 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:04,849 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:39:05,953 [INFO] papermind.api: [f1836d63] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61382 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:06,119 [INFO] papermind.api: [bc57e80a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61391 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:06,369 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Time-Archival+Camera+Virtualization+for+Sports+and+Visual+Performances%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:39:06,766 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7130482245&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:39:07,620 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Time-Archival+Camera+Virtualization+for+Sports+and+Visual+Performances&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:39:07,621 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:39:07,956 [INFO] papermind.api: [d024feca] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61391 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:08,120 [INFO] papermind.api: [5080961f] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61391 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:09,908 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Time-Archival+Camera+Virtualization+for+Sports+and+Visual+Performances&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:39:09,908 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:39:09,953 [INFO] papermind.api: [ac31a79d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61391 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:10,120 [INFO] papermind.api: [727cd67b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61391 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:11,957 [INFO] papermind.api: [fe3bef96] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:61408 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:11,959 [INFO] papermind.api: [0631668b] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:61407 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:39:12,122 [INFO] papermind.api: [c1892e49] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:61408 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:12,123 [INFO] papermind.api: [dab0e05f] GET /papers/folder-stats → 200 (3ms) -INFO: 127.0.0.1:61407 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:39:13,956 [INFO] papermind.api: [13b20f41] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61407 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:14,119 [INFO] papermind.api: [511f0d7e] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61407 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:14,187 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Time-Archival+Camera+Virtualization+for+Sports+and+Visual+Performances&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:39:14,187 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:39:15,953 [INFO] papermind.api: [ada585ec] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61407 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:16,124 [INFO] papermind.api: [55b6062b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61415 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:17,953 [INFO] papermind.api: [c4ae436b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61415 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:18,119 [INFO] papermind.api: [3edb6c00] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61415 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:19,952 [INFO] papermind.api: [f1d3a16c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61415 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:20,120 [INFO] papermind.api: [21ff2f96] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61415 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:21,952 [INFO] papermind.api: [3d21d96a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61430 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:22,124 [INFO] papermind.api: [d71750e7] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61430 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:23,279 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Time-Archival+Camera+Virtualization+for+Sports+and+Visual+Performances&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:39:23,279 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:39:23,956 [INFO] papermind.api: [ef828aa7] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:61430 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:24,120 [INFO] papermind.api: [46b3f8ee] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61430 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:25,952 [INFO] papermind.api: [6fd16119] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61430 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:26,121 [INFO] papermind.api: [6e5490fb] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61437 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:27,953 [INFO] papermind.api: [b4be6c4a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61437 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:28,121 [INFO] papermind.api: [2b42f76b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61437 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:29,956 [INFO] papermind.api: [d6086e23] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:61437 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:30,120 [INFO] papermind.api: [eabb0d3b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61437 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:31,807 [INFO] papermind.api: [ba551d4d] GET /settings/llm-providers → 200 (95ms) -INFO: 127.0.0.1:61457 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:39:31,809 [INFO] papermind.api: [80d2d160] GET /settings/llm-providers/active → 200 (96ms) -INFO: 127.0.0.1:61458 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:39:31,818 [INFO] papermind.api: [261a11de] GET /settings/llm-providers → 200 (4ms) -INFO: 127.0.0.1:61457 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:39:31,820 [INFO] papermind.api: [e1d2c884] GET /settings/llm-providers/active → 200 (3ms) -INFO: 127.0.0.1:61462 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:39:31,952 [INFO] papermind.api: [5fdd404a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61462 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:32,123 [INFO] papermind.api: [276fd266] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61462 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:32,999 [INFO] papermind.api: [c24eda9c] GET /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:61457 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:39:33,000 [INFO] papermind.api: [d5a44c5e] GET /settings/email-configs → 200 (3ms) -INFO: 127.0.0.1:61462 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:39:33,001 [INFO] papermind.api: [6afddf6c] GET /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:61458 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:39:33,002 [INFO] papermind.api: [c793340a] GET /settings/email-configs → 200 (1ms) -INFO: 127.0.0.1:61457 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:39:33,954 [INFO] papermind.api: [dc0ad510] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61457 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:34,121 [INFO] papermind.api: [523b6713] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61457 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:35,952 [INFO] papermind.api: [ee8ac4fd] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61457 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:36,031 [INFO] papermind.api: [1c9ba602] PUT /settings/daily-report-config → 200 (2ms) -INFO: 127.0.0.1:61457 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:39:36,041 [INFO] papermind.api: [6ad1f8b6] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61457 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:36,121 [INFO] papermind.api: [7b9dcf5a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61471 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:36,866 [INFO] papermind.api: [0378c54e] PUT /settings/daily-report-config → 200 (2ms) -INFO: 127.0.0.1:61471 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:39:36,879 [INFO] papermind.api: [41f4a4a1] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61471 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:38,122 [INFO] papermind.api: [bf7911ca] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61471 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:38,878 [INFO] papermind.api: [daa86ed2] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61471 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:39,185 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Time-Archival+Camera+Virtualization+for+Sports+and+Visual+Performances&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:39:39,186 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:39:39,545 [INFO] papermind.api: [d054505a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61471 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:40,121 [INFO] papermind.api: [88590431] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61471 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:40,215 [INFO] papermind.api: [4c21d06f] PUT /settings/daily-report-config → 200 (2ms) -INFO: 127.0.0.1:61471 - "PUT /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:39:40,226 [INFO] papermind.api: [33defeab] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61471 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:40,380 [INFO] papermind.api: [1622c514] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61471 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:41,956 [INFO] papermind.api: [ee1e5f98] GET /papers/folder-stats → 200 (3ms) -INFO: 127.0.0.1:61489 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:39:42,123 [INFO] papermind.api: [ed06ff03] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61491 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:42,124 [INFO] papermind.api: [e746e08f] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:61489 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:39:42,381 [INFO] papermind.api: [9997078c] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61489 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:43,530 [INFO] papermind.api: [66764091] POST /jobs/daily-report/run-once → 200 (0ms) -INFO: 127.0.0.1:61489 - "POST /jobs/daily-report/run-once HTTP/1.1" 200 OK -ERROR: Exception in ASGI application -Traceback (most recent call last): - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/protocols/http/h11_impl.py", line 410, in run_asgi - result = await app( # type: ignore[func-returns-value] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - self.scope, self.receive, self.send - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - ) - ^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__ - return await self.app(scope, receive, send) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/applications.py", line 1160, in __call__ - await super().__call__(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/applications.py", line 107, in __call__ - await self.middleware_stack(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/errors.py", line 186, in __call__ - raise exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/errors.py", line 164, in __call__ - await self.app(scope, receive, _send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/cors.py", line 95, in __call__ - await self.simple_response(scope, receive, send, request_headers=headers) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/cors.py", line 153, in simple_response - await self.app(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/base.py", line 198, in __call__ - raise app_exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/base.py", line 144, in coro - await self.app(scope, receive_or_disconnect, send_no_error) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/exceptions.py", line 63, in __call__ - await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app - raise exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app - await app(scope, receive, sender) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ - await self.app(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/routing.py", line 716, in __call__ - await self.middleware_stack(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/routing.py", line 736, in app - await route.handle(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/routing.py", line 290, in handle - await self.app(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/routing.py", line 119, in app - await wrap_app_handling_exceptions(app, request)(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app - raise exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app - await app(scope, receive, sender) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/routing.py", line 106, in app - await response(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/responses.py", line 167, in __call__ - await self.background() - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/background.py", line 36, in __call__ - await task() - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/background.py", line 23, in __call__ - await run_in_threadpool(self.func, *self.args, **self.kwargs) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool - return await anyio.to_thread.run_sync(func) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/anyio/to_thread.py", line 63, in run_sync - return await get_async_backend().run_sync_in_worker_thread( - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - func, args, abandon_on_cancel=abandon_on_cancel, limiter=limiter - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - ) - ^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 2502, in run_sync_in_worker_thread - return await future - ^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 986, in run - result = context.run(func, *args) - File "/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py", line 1936, in _run_daily_workflow_bg - task_id = f"daily_report_{uuid.uuid4().hex[:8]}" - ^^^^ -NameError: name 'uuid' is not defined. Did you mean: '_uuid'? Or did you forget to import 'uuid'? -2026-02-26 13:39:43,542 [INFO] papermind.api: [14e36b5b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61491 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:43,727 [INFO] papermind.api: [d017cdd2] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61491 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:44,121 [INFO] papermind.api: [61a762d2] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61491 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:45,728 [INFO] papermind.api: [9d3f0c9d] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61491 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:46,122 [INFO] papermind.api: [66c0bfc1] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61510 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:46,199 [INFO] papermind.api: [b658bec1] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61510 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:47,043 [INFO] papermind.api: [857bef8a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61510 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:48,124 [INFO] papermind.api: [0aa6fce3] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61510 - "GET /tasks/active HTTP/1.1" 200 OK -INFO: 127.0.0.1:61510 - "OPTIONS /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:39:48,379 [INFO] papermind.api: [8a2fcc98] GET /papers/folder-stats → 200 (3ms) -INFO: 127.0.0.1:61510 - "GET /papers/folder-stats HTTP/1.1" 200 OK -INFO: 127.0.0.1:61525 - "OPTIONS /actions?limit=30 HTTP/1.1" 200 OK -INFO: 127.0.0.1:61526 - "OPTIONS /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -INFO: 127.0.0.1:61529 - "OPTIONS /actions?limit=30 HTTP/1.1" 200 OK -INFO: 127.0.0.1:61530 - "OPTIONS /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:39:48,392 [INFO] papermind.api: [ed88e0f7] GET /papers/folder-stats → 200 (6ms) -INFO: 127.0.0.1:61510 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:39:48,394 [INFO] papermind.api: [a2d7d2f6] GET /actions → 200 (5ms) -INFO: 127.0.0.1:61525 - "GET /actions?limit=30 HTTP/1.1" 200 OK -2026-02-26 13:39:48,396 [INFO] papermind.api: [75e4dc4f] GET /papers/latest → 200 (5ms) -INFO: 127.0.0.1:61532 - "GET /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:39:48,398 [INFO] papermind.api: [36b64b94] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:61530 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:39:48,399 [INFO] papermind.api: [86ccf00c] GET /actions → 200 (3ms) -INFO: 127.0.0.1:61510 - "GET /actions?limit=30 HTTP/1.1" 200 OK -2026-02-26 13:39:48,400 [INFO] papermind.api: [376e45d2] GET /papers/latest → 200 (3ms) -INFO: 127.0.0.1:61525 - "GET /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -INFO: 127.0.0.1:61510 - "OPTIONS /generated/list?type=daily_brief&limit=50 HTTP/1.1" 200 OK -INFO: 127.0.0.1:61530 - "OPTIONS /generated/list?type=daily_brief&limit=50 HTTP/1.1" 200 OK -2026-02-26 13:39:48,984 [INFO] papermind.api: [7c9369b2] GET /papers/folder-stats → 200 (2ms) -INFO: 127.0.0.1:61525 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:39:48,990 [INFO] papermind.api: [4b983dbc] GET /generated/list → 200 (2ms) -INFO: 127.0.0.1:61525 - "GET /generated/list?type=daily_brief&limit=50 HTTP/1.1" 200 OK -2026-02-26 13:39:48,992 [INFO] papermind.api: [1b58a4c5] GET /generated/list → 200 (1ms) -INFO: 127.0.0.1:61530 - "GET /generated/list?type=daily_brief&limit=50 HTTP/1.1" 200 OK -INFO: 127.0.0.1:61530 - "OPTIONS /generated/936d8d45-1fce-4c33-aa26-39c997638593 HTTP/1.1" 200 OK -2026-02-26 13:39:48,994 [INFO] papermind.api: [8e7e2b80] GET /generated/936d8d45-1fce-4c33-aa26-39c997638593 → 200 (1ms) -INFO: 127.0.0.1:61530 - "GET /generated/936d8d45-1fce-4c33-aa26-39c997638593 HTTP/1.1" 200 OK -2026-02-26 13:39:48,995 [INFO] papermind.api: [fdc7b2f8] GET /generated/936d8d45-1fce-4c33-aa26-39c997638593 → 200 (1ms) -INFO: 127.0.0.1:61525 - "GET /generated/936d8d45-1fce-4c33-aa26-39c997638593 HTTP/1.1" 200 OK -2026-02-26 13:39:49,043 [INFO] papermind.api: [c538d371] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61525 - "GET /tasks/active HTTP/1.1" 200 OK -INFO: 127.0.0.1:61530 - "OPTIONS /graph/overview HTTP/1.1" 200 OK -INFO: 127.0.0.1:61510 - "OPTIONS /graph/bridges HTTP/1.1" 200 OK -INFO: 127.0.0.1:61532 - "OPTIONS /graph/frontier?days=90 HTTP/1.1" 200 OK -INFO: 127.0.0.1:61529 - "OPTIONS /graph/cocitation-clusters?min_cocite=2 HTTP/1.1" 200 OK -INFO: 127.0.0.1:61534 - "OPTIONS /graph/similarity-map?topic_id=&limit=200 HTTP/1.1" 200 OK -2026-02-26 13:39:49,504 [INFO] papermind.api: [2061f672] GET /papers/folder-stats → 200 (7ms) -INFO: 127.0.0.1:61525 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:39:49,624 [WARNING] packages.ai.graph_service: UMAP failed: No module named 'umap', falling back to PCA -2026-02-26 13:39:49,628 [INFO] papermind.api: [82bf48ee] GET /graph/frontier → 200 (128ms) -INFO: 127.0.0.1:61529 - "GET /graph/frontier?days=90 HTTP/1.1" 200 OK -2026-02-26 13:39:49,631 [INFO] papermind.api: [4d43e9f5] GET /graph/cocitation-clusters → 200 (132ms) -INFO: 127.0.0.1:61530 - "GET /graph/cocitation-clusters?min_cocite=2 HTTP/1.1" 200 OK -2026-02-26 13:39:49,634 [INFO] papermind.api: [3ccf2b58] GET /graph/overview → 200 (135ms) -INFO: 127.0.0.1:61510 - "GET /graph/overview HTTP/1.1" 200 OK -2026-02-26 13:39:49,635 [INFO] papermind.api: [7d2cbdff] GET /graph/bridges → 200 (135ms) -INFO: 127.0.0.1:61532 - "GET /graph/bridges HTTP/1.1" 200 OK -2026-02-26 13:39:49,639 [INFO] papermind.api: [094b0581] GET /graph/similarity-map → 200 (139ms) -INFO: 127.0.0.1:61534 - "GET /graph/similarity-map?topic_id=&limit=200 HTTP/1.1" 200 OK -INFO: 127.0.0.1:61532 - "OPTIONS /generated/list?type=topic_wiki&limit=50 HTTP/1.1" 200 OK -INFO: 127.0.0.1:61510 - "OPTIONS /generated/list?type=topic_wiki&limit=50 HTTP/1.1" 200 OK -2026-02-26 13:39:50,021 [INFO] papermind.api: [d357d4f6] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:61534 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:39:50,024 [INFO] papermind.api: [110105b7] GET /generated/list → 200 (6ms) -INFO: 127.0.0.1:61532 - "GET /generated/list?type=topic_wiki&limit=50 HTTP/1.1" 200 OK -2026-02-26 13:39:50,028 [INFO] papermind.api: [d07f7f5d] GET /generated/list → 200 (4ms) -INFO: 127.0.0.1:61534 - "GET /generated/list?type=topic_wiki&limit=50 HTTP/1.1" 200 OK -2026-02-26 13:39:50,121 [INFO] papermind.api: [237d35d9] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61534 - "GET /tasks/active HTTP/1.1" 200 OK -INFO: 127.0.0.1:61532 - "OPTIONS /writing/templates HTTP/1.1" 200 OK -INFO: 127.0.0.1:61510 - "OPTIONS /writing/templates HTTP/1.1" 200 OK -2026-02-26 13:39:50,533 [INFO] papermind.api: [8d2682cb] GET /writing/templates → 200 (1ms) -INFO: 127.0.0.1:61510 - "GET /writing/templates HTTP/1.1" 200 OK -2026-02-26 13:39:50,534 [INFO] papermind.api: [88176f4b] GET /papers/folder-stats → 200 (3ms) -INFO: 127.0.0.1:61534 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:39:50,534 [INFO] papermind.api: [c62e8e03] GET /writing/templates → 200 (1ms) -INFO: 127.0.0.1:61532 - "GET /writing/templates HTTP/1.1" 200 OK -INFO: 127.0.0.1:61534 - "OPTIONS /system/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:61510 - "OPTIONS /metrics/costs?days=7 HTTP/1.1" 200 OK -INFO: 127.0.0.1:61530 - "OPTIONS /pipelines/runs?limit=10 HTTP/1.1" 200 OK -INFO: 127.0.0.1:61529 - "OPTIONS /today HTTP/1.1" 200 OK -INFO: 127.0.0.1:61525 - "OPTIONS /system/status HTTP/1.1" 200 OK -INFO: 127.0.0.1:61534 - "OPTIONS /metrics/costs?days=7 HTTP/1.1" 200 OK -INFO: 127.0.0.1:61510 - "OPTIONS /pipelines/runs?limit=10 HTTP/1.1" 200 OK -INFO: 127.0.0.1:61530 - "OPTIONS /today HTTP/1.1" 200 OK -2026-02-26 13:39:51,039 [INFO] papermind.api: [ef870eaa] GET /papers/folder-stats → 200 (7ms) -INFO: 127.0.0.1:61532 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:39:51,040 [INFO] papermind.api: [9903561d] GET /metrics/costs → 200 (5ms) -INFO: 127.0.0.1:61525 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:39:51,041 [INFO] papermind.api: [420d1122] GET /pipelines/runs → 200 (4ms) -INFO: 127.0.0.1:61543 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:39:51,044 [INFO] papermind.api: [cb5ee547] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:61525 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:51,046 [INFO] papermind.api: [5d8dc9d7] GET /pipelines/runs → 200 (3ms) -INFO: 127.0.0.1:61530 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:39:51,047 [INFO] papermind.api: [f96b93ed] GET /metrics/costs → 200 (5ms) -INFO: 127.0.0.1:61532 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:39:51,068 [INFO] papermind.api: [8b7c5991] GET /system/status → 200 (33ms) -INFO: 127.0.0.1:61529 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:39:51,094 [INFO] papermind.api: [4fa4ecff] GET /today → 200 (57ms) -INFO: 127.0.0.1:61545 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:39:51,102 [INFO] papermind.api: [b3e13c62] GET /today → 200 (7ms) -INFO: 127.0.0.1:61529 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:39:51,112 [INFO] papermind.api: [1ad1eace] GET /system/status → 200 (43ms) -INFO: 127.0.0.1:61532 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:39:52,122 [INFO] papermind.api: [c34c0c3c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61549 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:53,042 [INFO] papermind.api: [ad1e6a86] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61549 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:54,123 [INFO] papermind.api: [4d3171e7] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61549 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:54,190 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:39:55,044 [INFO] papermind.api: [c76184bd] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61549 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:55,695 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22DAV-GSWT%3A+Diffusion-Active-View+Sampling+for+Data-Efficient+Gaussian+Splatting+Wang+Tiles%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:39:56,115 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7130420455&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:39:56,120 [INFO] papermind.api: [3ca7beb8] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61549 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:56,651 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=DAV-GSWT%3A+Diffusion-Active-View+Sampling+for+Data-Efficient+Gaussian+Splatting+Wang+Tiles&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:39:56,652 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:39:57,046 [INFO] papermind.api: [a6903446] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61549 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:58,123 [INFO] papermind.api: [0102d2f4] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61549 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:39:58,932 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=DAV-GSWT%3A+Diffusion-Active-View+Sampling+for+Data-Efficient+Gaussian+Splatting+Wang+Tiles&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:39:58,932 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:39:59,043 [INFO] papermind.api: [72a26d8e] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61549 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:00,121 [INFO] papermind.api: [9ce4f532] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61549 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:01,047 [INFO] papermind.api: [cbfd3568] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61549 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:02,121 [INFO] papermind.api: [8a8d8af4] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61571 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:03,043 [INFO] papermind.api: [632177df] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61571 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:03,226 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=DAV-GSWT%3A+Diffusion-Active-View+Sampling+for+Data-Efficient+Gaussian+Splatting+Wang+Tiles&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:40:03,226 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:40:04,133 [INFO] papermind.api: [39babb79] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61571 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:05,043 [INFO] papermind.api: [3c91a3d2] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61571 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:06,121 [INFO] papermind.api: [30be0c93] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61571 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:07,043 [INFO] papermind.api: [bca38084] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61571 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:08,121 [INFO] papermind.api: [ca2219fa] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61571 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:09,044 [INFO] papermind.api: [f74f56e0] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61571 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:10,124 [INFO] papermind.api: [f8cba9dc] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61571 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:11,043 [INFO] papermind.api: [14ea9964] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61571 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:11,287 [INFO] papermind.api: [1b032dd9] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61589 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:12,116 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=DAV-GSWT%3A+Diffusion-Active-View+Sampling+for+Data-Efficient+Gaussian+Splatting+Wang+Tiles&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:40:12,116 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:40:12,128 [INFO] papermind.api: [30c33321] GET /tasks/active → 200 (6ms) -INFO: 127.0.0.1:61596 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:12,129 [INFO] papermind.api: [043dba32] GET /papers/folder-stats → 200 (7ms) -INFO: 127.0.0.1:61595 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:40:13,043 [INFO] papermind.api: [8f04e24a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61595 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:14,121 [INFO] papermind.api: [e3df2012] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61595 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:15,046 [INFO] papermind.api: [4886afb2] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61595 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:16,124 [INFO] papermind.api: [effb277e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61595 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:17,043 [INFO] papermind.api: [310bed14] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61595 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:18,126 [INFO] papermind.api: [9a6471af] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61595 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:19,044 [INFO] papermind.api: [ce784213] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61595 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:20,121 [INFO] papermind.api: [2ee60150] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61595 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:21,047 [INFO] papermind.api: [b7779ef3] GET /papers/folder-stats → 200 (10ms) -INFO: 127.0.0.1:61595 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:40:21,048 [INFO] papermind.api: [012c522b] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:61610 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:22,122 [INFO] papermind.api: [50e3dc1e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61616 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:23,043 [INFO] papermind.api: [d1b935f3] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61616 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:23,534 [INFO] papermind.api: [3407d986] GET /settings/llm-providers → 200 (2ms) -INFO: 127.0.0.1:61616 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:40:23,534 [INFO] papermind.api: [35699f31] GET /settings/llm-providers/active → 200 (2ms) -INFO: 127.0.0.1:61618 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:40:23,537 [INFO] papermind.api: [81366106] GET /settings/llm-providers/active → 200 (1ms) -INFO: 127.0.0.1:61620 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:40:23,537 [INFO] papermind.api: [4edfcd39] GET /settings/llm-providers → 200 (2ms) -INFO: 127.0.0.1:61616 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:40:24,121 [INFO] papermind.api: [26738d15] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61616 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:25,043 [INFO] papermind.api: [f88a7dc7] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61616 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:25,315 [INFO] papermind.api: [3b8b8b71] GET /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:61620 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:40:25,315 [INFO] papermind.api: [6d2f0baf] GET /settings/email-configs → 200 (2ms) -INFO: 127.0.0.1:61616 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:40:25,317 [INFO] papermind.api: [fe1a08c9] GET /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:61618 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:40:25,317 [INFO] papermind.api: [7d0f35d2] GET /settings/email-configs → 200 (1ms) -INFO: 127.0.0.1:61620 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:40:26,124 [INFO] papermind.api: [161624ee] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:61620 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:27,045 [INFO] papermind.api: [c5d0a1c2] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61620 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:27,665 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=DAV-GSWT%3A+Diffusion-Active-View+Sampling+for+Data-Efficient+Gaussian+Splatting+Wang+Tiles&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:40:27,666 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:40:28,124 [INFO] papermind.api: [31d8109f] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61620 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:28,657 [INFO] papermind.api: [c1292077] GET /pipelines/runs → 200 (1ms) -INFO: 127.0.0.1:61640 - "GET /pipelines/runs?limit=5 HTTP/1.1" 200 OK -2026-02-26 13:40:29,044 [INFO] papermind.api: [8f1ea5db] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61620 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:30,122 [INFO] papermind.api: [f3ed18e5] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61620 - "GET /tasks/active HTTP/1.1" 200 OK -INFO: 127.0.0.1:61620 - "OPTIONS /settings/email-configs/d14c0d64-ac9c-4e9e-8922-ad71c93a0517 HTTP/1.1" 200 OK -2026-02-26 13:40:31,005 [INFO] papermind.api: [4fcd748e] DELETE /settings/email-configs/d14c0d64-ac9c-4e9e-8922-ad71c93a0517 → 200 (6ms) -INFO: 127.0.0.1:61620 - "DELETE /settings/email-configs/d14c0d64-ac9c-4e9e-8922-ad71c93a0517 HTTP/1.1" 200 OK -2026-02-26 13:40:31,011 [INFO] papermind.api: [e5722bfc] GET /settings/email-configs → 200 (5ms) -INFO: 127.0.0.1:61620 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:40:31,018 [INFO] papermind.api: [f45d0ec6] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61620 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:32,121 [INFO] papermind.api: [1dc67cdc] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61647 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:33,022 [INFO] papermind.api: [726edb2e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61647 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:33,752 [INFO] papermind.api: [33317c35] POST /settings/email-configs/649bfe10-1030-4ec7-a07c-8f6084c3c7b5/activate → 200 (5ms) -INFO: 127.0.0.1:61647 - "POST /settings/email-configs/649bfe10-1030-4ec7-a07c-8f6084c3c7b5/activate HTTP/1.1" 200 OK -2026-02-26 13:40:33,758 [INFO] papermind.api: [e42a4678] GET /settings/email-configs → 200 (2ms) -INFO: 127.0.0.1:61647 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:40:33,765 [INFO] papermind.api: [a07aece3] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61647 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:34,122 [INFO] papermind.api: [4a7b1970] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61647 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:34,527 [INFO] papermind.api: [39003db5] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61647 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:36,122 [INFO] papermind.api: [49da31f3] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61647 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:36,526 [INFO] papermind.api: [eac570a7] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61652 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:37,265 [INFO] papermind.api: [72ceeeb5] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61652 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:38,123 [INFO] papermind.api: [29a28e71] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61652 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:39,267 [INFO] papermind.api: [e981a287] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61652 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:39,997 [INFO] papermind.api: [bfd89faf] POST /jobs/daily-report/run-once → 200 (1ms) -INFO: 127.0.0.1:61652 - "POST /jobs/daily-report/run-once HTTP/1.1" 200 OK -ERROR: Exception in ASGI application -Traceback (most recent call last): - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/protocols/http/h11_impl.py", line 410, in run_asgi - result = await app( # type: ignore[func-returns-value] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - self.scope, self.receive, self.send - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - ) - ^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__ - return await self.app(scope, receive, send) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/applications.py", line 1160, in __call__ - await super().__call__(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/applications.py", line 107, in __call__ - await self.middleware_stack(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/errors.py", line 186, in __call__ - raise exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/errors.py", line 164, in __call__ - await self.app(scope, receive, _send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/cors.py", line 95, in __call__ - await self.simple_response(scope, receive, send, request_headers=headers) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/cors.py", line 153, in simple_response - await self.app(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/base.py", line 198, in __call__ - raise app_exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/base.py", line 144, in coro - await self.app(scope, receive_or_disconnect, send_no_error) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/exceptions.py", line 63, in __call__ - await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app - raise exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app - await app(scope, receive, sender) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ - await self.app(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/routing.py", line 716, in __call__ - await self.middleware_stack(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/routing.py", line 736, in app - await route.handle(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/routing.py", line 290, in handle - await self.app(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/routing.py", line 119, in app - await wrap_app_handling_exceptions(app, request)(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app - raise exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app - await app(scope, receive, sender) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/routing.py", line 106, in app - await response(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/responses.py", line 167, in __call__ - await self.background() - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/background.py", line 36, in __call__ - await task() - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/background.py", line 23, in __call__ - await run_in_threadpool(self.func, *self.args, **self.kwargs) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool - return await anyio.to_thread.run_sync(func) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/anyio/to_thread.py", line 63, in run_sync - return await get_async_backend().run_sync_in_worker_thread( - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - func, args, abandon_on_cancel=abandon_on_cancel, limiter=limiter - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - ) - ^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 2502, in run_sync_in_worker_thread - return await future - ^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 986, in run - result = context.run(func, *args) - File "/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py", line 1936, in _run_daily_workflow_bg - task_id = f"daily_report_{uuid.uuid4().hex[:8]}" - ^^^^ -NameError: name 'uuid' is not defined. Did you mean: '_uuid'? Or did you forget to import 'uuid'? -2026-02-26 13:40:40,014 [INFO] papermind.api: [a7ab242f] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:61670 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:40,121 [INFO] papermind.api: [d2ddfe54] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61670 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:42,012 [INFO] papermind.api: [53b16377] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61672 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:42,123 [INFO] papermind.api: [a2722e25] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61682 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:42,126 [INFO] papermind.api: [11d6c98c] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:61672 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:40:42,669 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:40:43,515 [INFO] papermind.api: [17afad4b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61672 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:44,122 [INFO] papermind.api: [ea09e27e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61672 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:44,228 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Semantic-Guided+3D+Gaussian+Splatting+for+Transient+Object+Removal%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:40:44,622 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7130482231&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:40:45,480 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Semantic-Guided+3D+Gaussian+Splatting+for+Transient+Object+Removal&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:40:45,481 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:40:45,513 [INFO] papermind.api: [dcf37c4b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61672 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:46,121 [INFO] papermind.api: [c28c6f9b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61672 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:47,514 [INFO] papermind.api: [ad84d2ee] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61721 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:47,767 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Semantic-Guided+3D+Gaussian+Splatting+for+Transient+Object+Removal&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:40:47,767 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:40:48,121 [INFO] papermind.api: [3b8f4f9a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61721 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:49,513 [INFO] papermind.api: [a6ea32c1] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61721 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:50,123 [INFO] papermind.api: [7fe6eb63] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61721 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:51,040 [INFO] papermind.api: [27af3f0d] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:61721 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:40:51,514 [INFO] papermind.api: [87fd66dc] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61736 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:52,045 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Semantic-Guided+3D+Gaussian+Splatting+for+Transient+Object+Removal&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:40:52,046 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:40:52,120 [INFO] papermind.api: [2b16acf9] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61736 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:53,513 [INFO] papermind.api: [ce7fac52] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61736 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:54,121 [INFO] papermind.api: [642ea4dd] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61736 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:55,512 [INFO] papermind.api: [f377c890] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61736 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:56,121 [INFO] papermind.api: [6461b55d] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61736 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:57,516 [INFO] papermind.api: [21c37cf5] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61757 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:58,121 [INFO] papermind.api: [801a9804] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61757 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:40:59,074 [INFO] papermind.api: [51c3c4be] GET /settings/llm-providers → 200 (4ms) -INFO: 127.0.0.1:61757 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:40:59,075 [INFO] papermind.api: [9a50a02e] GET /settings/llm-providers/active → 200 (3ms) -INFO: 127.0.0.1:61765 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:40:59,078 [INFO] papermind.api: [023defc6] GET /settings/llm-providers/active → 200 (1ms) -INFO: 127.0.0.1:61767 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:40:59,082 [INFO] papermind.api: [48ec1ee4] GET /settings/llm-providers → 200 (6ms) -INFO: 127.0.0.1:61757 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:40:59,513 [INFO] papermind.api: [374a3cd5] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61757 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:00,123 [INFO] papermind.api: [9a963f78] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61757 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:00,381 [INFO] papermind.api: [4e905c29] GET /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:61767 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:41:00,382 [INFO] papermind.api: [5d7a0dab] GET /settings/email-configs → 200 (2ms) -INFO: 127.0.0.1:61757 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:41:00,383 [INFO] papermind.api: [c23aabc1] GET /settings/daily-report-config → 200 (1ms) -INFO: 127.0.0.1:61765 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:41:00,383 [INFO] papermind.api: [3ae7ab78] GET /settings/email-configs → 200 (1ms) -INFO: 127.0.0.1:61767 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:41:00,971 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Semantic-Guided+3D+Gaussian+Splatting+for+Transient+Object+Removal&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:41:00,972 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:41:01,514 [INFO] papermind.api: [b2577cb9] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61777 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:02,121 [INFO] papermind.api: [cd60bbbe] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61777 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:03,515 [INFO] papermind.api: [bdb20291] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61777 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:04,121 [INFO] papermind.api: [5f45878e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61777 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:05,513 [INFO] papermind.api: [9fc8c171] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61777 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:05,579 [INFO] papermind.api: [d44905b0] POST /jobs/daily-report/run-once → 200 (1ms) -INFO: 127.0.0.1:61777 - "POST /jobs/daily-report/run-once HTTP/1.1" 200 OK -ERROR: Exception in ASGI application -Traceback (most recent call last): - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/protocols/http/h11_impl.py", line 410, in run_asgi - result = await app( # type: ignore[func-returns-value] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - self.scope, self.receive, self.send - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - ) - ^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__ - return await self.app(scope, receive, send) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/applications.py", line 1160, in __call__ - await super().__call__(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/applications.py", line 107, in __call__ - await self.middleware_stack(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/errors.py", line 186, in __call__ - raise exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/errors.py", line 164, in __call__ - await self.app(scope, receive, _send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/cors.py", line 95, in __call__ - await self.simple_response(scope, receive, send, request_headers=headers) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/cors.py", line 153, in simple_response - await self.app(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/base.py", line 198, in __call__ - raise app_exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/base.py", line 144, in coro - await self.app(scope, receive_or_disconnect, send_no_error) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/exceptions.py", line 63, in __call__ - await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app - raise exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app - await app(scope, receive, sender) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ - await self.app(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/routing.py", line 716, in __call__ - await self.middleware_stack(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/routing.py", line 736, in app - await route.handle(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/routing.py", line 290, in handle - await self.app(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/routing.py", line 119, in app - await wrap_app_handling_exceptions(app, request)(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app - raise exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app - await app(scope, receive, sender) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/routing.py", line 106, in app - await response(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/responses.py", line 167, in __call__ - await self.background() - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/background.py", line 36, in __call__ - await task() - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/background.py", line 23, in __call__ - await run_in_threadpool(self.func, *self.args, **self.kwargs) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool - return await anyio.to_thread.run_sync(func) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/anyio/to_thread.py", line 63, in run_sync - return await get_async_backend().run_sync_in_worker_thread( - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - func, args, abandon_on_cancel=abandon_on_cancel, limiter=limiter - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - ) - ^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 2502, in run_sync_in_worker_thread - return await future - ^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 986, in run - result = context.run(func, *args) - File "/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py", line 1936, in _run_daily_workflow_bg - task_id = f"daily_report_{uuid.uuid4().hex[:8]}" - ^^^^ -NameError: name 'uuid' is not defined. Did you mean: '_uuid'? Or did you forget to import 'uuid'? -2026-02-26 13:41:05,593 [INFO] papermind.api: [f9137eb5] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61784 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:06,128 [INFO] papermind.api: [f2e7621d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61784 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:07,595 [INFO] papermind.api: [0449ea88] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61791 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:08,121 [INFO] papermind.api: [f8e73875] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61791 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:09,096 [INFO] papermind.api: [32dd034f] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61791 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:10,123 [INFO] papermind.api: [61dc81a3] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61791 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:11,097 [INFO] papermind.api: [45ee7afa] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61791 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:12,136 [INFO] papermind.api: [e15bd61e] GET /tasks/active → 200 (8ms) -INFO: 127.0.0.1:61806 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:12,140 [INFO] papermind.api: [4a16e725] GET /papers/folder-stats → 200 (13ms) -INFO: 127.0.0.1:61805 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:41:13,097 [INFO] papermind.api: [26ac1327] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61805 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:14,122 [INFO] papermind.api: [030ff92d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61805 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:15,098 [INFO] papermind.api: [b39840a2] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61805 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:16,124 [INFO] papermind.api: [ccb45a7f] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61805 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:16,513 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Semantic-Guided+3D+Gaussian+Splatting+for+Transient+Object+Removal&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:41:16,514 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:41:17,098 [INFO] papermind.api: [d16b9477] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61815 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:18,121 [INFO] papermind.api: [afa86b59] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61815 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:19,098 [INFO] papermind.api: [7d406b92] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61815 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:20,121 [INFO] papermind.api: [8562cb87] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61815 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:21,040 [INFO] papermind.api: [b3526489] GET /papers/folder-stats → 200 (6ms) -INFO: 127.0.0.1:61815 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:41:21,097 [INFO] papermind.api: [7eb7f030] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61815 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:21,844 [INFO] papermind.api: [53c04062] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61832 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:22,121 [INFO] papermind.api: [4627f3e8] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61834 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:23,097 [INFO] papermind.api: [e5628486] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61834 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:24,123 [INFO] papermind.api: [f84b90cb] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61834 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:25,108 [INFO] papermind.api: [9baa0b00] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:61834 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:26,121 [INFO] papermind.api: [83b6f3d0] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61834 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:27,099 [INFO] papermind.api: [aa811783] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61845 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:28,121 [INFO] papermind.api: [4c35bc74] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61845 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:29,099 [INFO] papermind.api: [f596d140] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61845 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:30,123 [INFO] papermind.api: [c7e0a8a0] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61845 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:30,304 [INFO] papermind.api: [baf4a3c8] POST /jobs/daily-report/run-once → 200 (1ms) -INFO: 127.0.0.1:61865 - "POST /jobs/daily-report/run-once HTTP/1.1" 200 OK -ERROR: Exception in ASGI application -Traceback (most recent call last): - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/protocols/http/h11_impl.py", line 410, in run_asgi - result = await app( # type: ignore[func-returns-value] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - self.scope, self.receive, self.send - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - ) - ^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__ - return await self.app(scope, receive, send) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/applications.py", line 1160, in __call__ - await super().__call__(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/applications.py", line 107, in __call__ - await self.middleware_stack(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/errors.py", line 186, in __call__ - raise exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/errors.py", line 164, in __call__ - await self.app(scope, receive, _send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/cors.py", line 87, in __call__ - await self.app(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/base.py", line 198, in __call__ - raise app_exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/base.py", line 144, in coro - await self.app(scope, receive_or_disconnect, send_no_error) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/exceptions.py", line 63, in __call__ - await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app - raise exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app - await app(scope, receive, sender) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ - await self.app(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/routing.py", line 716, in __call__ - await self.middleware_stack(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/routing.py", line 736, in app - await route.handle(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/routing.py", line 290, in handle - await self.app(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/routing.py", line 119, in app - await wrap_app_handling_exceptions(app, request)(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app - raise exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app - await app(scope, receive, sender) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/routing.py", line 106, in app - await response(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/responses.py", line 167, in __call__ - await self.background() - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/background.py", line 36, in __call__ - await task() - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/background.py", line 23, in __call__ - await run_in_threadpool(self.func, *self.args, **self.kwargs) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool - return await anyio.to_thread.run_sync(func) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/anyio/to_thread.py", line 63, in run_sync - return await get_async_backend().run_sync_in_worker_thread( - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - func, args, abandon_on_cancel=abandon_on_cancel, limiter=limiter - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - ) - ^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 2502, in run_sync_in_worker_thread - return await future - ^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 986, in run - result = context.run(func, *args) - File "/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py", line 1936, in _run_daily_workflow_bg - task_id = f"daily_report_{uuid.uuid4().hex[:8]}" - ^^^^ -NameError: name 'uuid' is not defined. Did you mean: '_uuid'? Or did you forget to import 'uuid'? -2026-02-26 13:41:31,098 [INFO] papermind.api: [696c3200] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61845 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:31,519 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:41:32,122 [INFO] papermind.api: [9e397067] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61871 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:33,045 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Super4DR%3A+4D+Radar-centric+Self-supervised+Odometry+and+Gaussian-based+Map+Optimization%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:41:33,100 [INFO] papermind.api: [aa1cd7d1] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61871 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:33,450 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW4417291914&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:41:34,012 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Super4DR%3A+4D+Radar-centric+Self-supervised+Odometry+and+Gaussian-based+Map+Optimization&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:41:34,012 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:41:34,123 [INFO] papermind.api: [3d698191] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61871 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:35,097 [INFO] papermind.api: [0365ee4b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61871 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:36,123 [INFO] papermind.api: [51f8f5bf] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61871 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:36,603 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Super4DR%3A+4D+Radar-centric+Self-supervised+Odometry+and+Gaussian-based+Map+Optimization&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:41:36,603 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:41:37,098 [INFO] papermind.api: [fd2b0a08] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61886 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:38,122 [INFO] papermind.api: [4e8f232a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61886 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:39,101 [INFO] papermind.api: [1257db3e] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:61886 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:40,121 [INFO] papermind.api: [5180f084] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61886 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:40,881 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Super4DR%3A+4D+Radar-centric+Self-supervised+Odometry+and+Gaussian-based+Map+Optimization&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:41:40,881 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:41:41,098 [INFO] papermind.api: [c823996b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61886 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:42,124 [INFO] papermind.api: [0fe8ed4f] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:61904 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:42,127 [INFO] papermind.api: [e237edff] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:61903 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:41:43,100 [INFO] papermind.api: [d6b44cb0] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61903 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:43,883 [INFO] papermind.api: [0c6d3a18] GET /settings/daily-report-config → 200 (2ms) -INFO: 127.0.0.1:61908 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:41:44,121 [INFO] papermind.api: [dd23182a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61903 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:45,098 [INFO] papermind.api: [489119fb] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61903 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:46,122 [INFO] papermind.api: [3fa2ccdd] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61903 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:47,098 [INFO] papermind.api: [2a20d5b8] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61929 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:48,122 [INFO] papermind.api: [b9480128] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61929 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:49,100 [INFO] papermind.api: [f30216f4] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61929 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:49,743 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Super4DR%3A+4D+Radar-centric+Self-supervised+Odometry+and+Gaussian-based+Map+Optimization&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:41:49,743 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:41:50,123 [INFO] papermind.api: [0b89a9cb] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61929 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:51,039 [INFO] papermind.api: [e87f4483] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:61929 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:41:51,098 [INFO] papermind.api: [8a2d1fea] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61929 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:52,122 [INFO] papermind.api: [3650771c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61942 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:52,163 [INFO] papermind.api: [eb723450] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61944 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:53,099 [INFO] papermind.api: [f8cad0d2] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61942 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:54,121 [INFO] papermind.api: [ce45ae31] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61942 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:55,098 [INFO] papermind.api: [b6c72334] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61942 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:56,124 [INFO] papermind.api: [02b2b779] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61942 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:57,100 [INFO] papermind.api: [a08171b8] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61953 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:58,122 [INFO] papermind.api: [b6eb2e8a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61953 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:41:59,099 [INFO] papermind.api: [7b3afb5b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61953 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:42:00,121 [INFO] papermind.api: [558b83c8] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61953 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:42:01,098 [INFO] papermind.api: [eee2da0a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61953 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:42:02,123 [INFO] papermind.api: [02279f08] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61964 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:42:02,289 [INFO] papermind.api: [9e92c282] POST /jobs/daily-report/run-once → 200 (0ms) -INFO: 127.0.0.1:61966 - "POST /jobs/daily-report/run-once HTTP/1.1" 200 OK -ERROR: Exception in ASGI application -Traceback (most recent call last): - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/protocols/http/h11_impl.py", line 410, in run_asgi - result = await app( # type: ignore[func-returns-value] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - self.scope, self.receive, self.send - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - ) - ^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__ - return await self.app(scope, receive, send) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/applications.py", line 1160, in __call__ - await super().__call__(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/applications.py", line 107, in __call__ - await self.middleware_stack(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/errors.py", line 186, in __call__ - raise exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/errors.py", line 164, in __call__ - await self.app(scope, receive, _send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/cors.py", line 87, in __call__ - await self.app(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/base.py", line 198, in __call__ - raise app_exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/base.py", line 144, in coro - await self.app(scope, receive_or_disconnect, send_no_error) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/exceptions.py", line 63, in __call__ - await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app - raise exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app - await app(scope, receive, sender) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ - await self.app(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/routing.py", line 716, in __call__ - await self.middleware_stack(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/routing.py", line 736, in app - await route.handle(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/routing.py", line 290, in handle - await self.app(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/routing.py", line 119, in app - await wrap_app_handling_exceptions(app, request)(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app - raise exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app - await app(scope, receive, sender) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/routing.py", line 106, in app - await response(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/responses.py", line 167, in __call__ - await self.background() - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/background.py", line 36, in __call__ - await task() - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/background.py", line 23, in __call__ - await run_in_threadpool(self.func, *self.args, **self.kwargs) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool - return await anyio.to_thread.run_sync(func) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/anyio/to_thread.py", line 63, in run_sync - return await get_async_backend().run_sync_in_worker_thread( - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - func, args, abandon_on_cancel=abandon_on_cancel, limiter=limiter - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - ) - ^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 2502, in run_sync_in_worker_thread - return await future - ^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 986, in run - result = context.run(func, *args) - File "/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py", line 1936, in _run_daily_workflow_bg - task_id = f"daily_report_{uuid.uuid4().hex[:8]}" - ^^^^ -NameError: name 'uuid' is not defined. Did you mean: '_uuid'? Or did you forget to import 'uuid'? -2026-02-26 13:42:03,104 [INFO] papermind.api: [acd3bf01] GET /tasks/active → 200 (5ms) -INFO: 127.0.0.1:61964 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:42:04,123 [INFO] papermind.api: [ac43cfd2] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61964 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:42:04,307 [INFO] papermind.api: [9c220d17] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61970 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:42:05,098 [INFO] papermind.api: [22077f90] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61964 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:42:05,612 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Super4DR%3A+4D+Radar-centric+Self-supervised+Odometry+and+Gaussian-based+Map+Optimization&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:42:05,612 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:42:06,123 [INFO] papermind.api: [ffb41510] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61964 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:42:07,099 [INFO] papermind.api: [e331f900] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61975 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:42:08,122 [INFO] papermind.api: [3040c74c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61975 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:42:09,098 [INFO] papermind.api: [85d2400d] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61975 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:42:10,121 [INFO] papermind.api: [3ee32f84] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:61975 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:42:11,098 [INFO] papermind.api: [578888c3] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61975 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:42:12,125 [INFO] papermind.api: [4302e120] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:61996 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:42:12,133 [INFO] papermind.api: [732e2cf5] GET /papers/folder-stats → 200 (11ms) -INFO: 127.0.0.1:61995 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:42:13,098 [INFO] papermind.api: [8417741e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61995 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:42:14,124 [INFO] papermind.api: [78626096] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61995 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:42:14,329 [INFO] papermind.api: [eca87679] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61998 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:42:15,097 [INFO] papermind.api: [f03c2d41] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61995 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:42:16,122 [INFO] papermind.api: [b4e6020e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:61995 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:42:17,100 [INFO] papermind.api: [5a236e5b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62005 - "GET /tasks/active HTTP/1.1" 200 OK -WARNING: StatReload detected changes in 'apps/api/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for background tasks to complete. (CTRL+C to force quit) -2026-02-26 13:42:20,615 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:42:22,078 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%223D+Blood+Pulsation+Maps%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:42:22,475 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW4417295996&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:42:23,055 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=3D+Blood+Pulsation+Maps&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:42:23,056 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:42:25,334 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=3D+Blood+Pulsation+Maps&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:42:25,335 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:42:29,611 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=3D+Blood+Pulsation+Maps&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:42:29,612 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:42:40,228 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=3D+Blood+Pulsation+Maps&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:42:40,591 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/f1ab7574ad67029db5bae6e1f345d37cb5628fb6?fields=references.title%2Ccitations.title "HTTP/1.1 200 OK" -2026-02-26 13:42:41,321 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22An+evaluation+of+SVBRDF+Prediction+from+Generative+Image+Models+for+Appearance+Modeling+of+3D+Scenes%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:42:41,760 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW4416575499&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:42:42,041 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=An+evaluation+of+SVBRDF+Prediction+from+Generative+Image+Models+for+Appearance+Modeling+of+3D+Scenes&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:42:42,041 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:42:44,325 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=An+evaluation+of+SVBRDF+Prediction+from+Generative+Image+Models+for+Appearance+Modeling+of+3D+Scenes&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:42:44,326 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:42:48,612 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=An+evaluation+of+SVBRDF+Prediction+from+Generative+Image+Models+for+Appearance+Modeling+of+3D+Scenes&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:42:48,612 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:42:57,153 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=An+evaluation+of+SVBRDF+Prediction+from+Generative+Image+Models+for+Appearance+Modeling+of+3D+Scenes&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:42:57,155 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:43:12,723 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=An+evaluation+of+SVBRDF+Prediction+from+Generative+Image+Models+for+Appearance+Modeling+of+3D+Scenes&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:43:12,724 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:43:27,727 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:43:29,201 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22ART%3A+Articulated+Reconstruction+Transformer%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:43:29,617 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW4417474425&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:43:33,556 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=ART%3A+Articulated+Reconstruction+Transformer&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:43:34,026 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/636d5139519f97fec5e0cb2c786447abaee7f571?fields=references.title%2Ccitations.title "HTTP/1.1 200 OK" -2026-02-26 13:43:34,445 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22TexSpot%3A+3D+Texture+Enhancement+with+Spatially-uniform+Point+Latent+Representation%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:43:34,863 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7128840807&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:43:35,141 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=TexSpot%3A+3D+Texture+Enhancement+with+Spatially-uniform+Point+Latent+Representation&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:43:35,141 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:43:37,804 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=TexSpot%3A+3D+Texture+Enhancement+with+Spatially-uniform+Point+Latent+Representation&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:43:37,805 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:43:42,512 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=TexSpot%3A+3D+Texture+Enhancement+with+Spatially-uniform+Point+Latent+Representation&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:43:42,513 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:43:51,392 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=TexSpot%3A+3D+Texture+Enhancement+with+Spatially-uniform+Point+Latent+Representation&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:43:51,392 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:44:06,977 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=TexSpot%3A+3D+Texture+Enhancement+with+Spatially-uniform+Point+Latent+Representation&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:44:06,978 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 5/5 in 15.0s -2026-02-26 13:44:21,982 [ERROR] packages.integrations.semantic_scholar_client: Scholar API exhausted retries for /paper/search -2026-02-26 13:44:22,772 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22High-fidelity+3D+reconstruction+for+planetary+exploration%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:44:23,164 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7129673408&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:44:24,089 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=High-fidelity+3D+reconstruction+for+planetary+exploration&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:44:24,090 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:44:26,375 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=High-fidelity+3D+reconstruction+for+planetary+exploration&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:44:26,375 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:44:30,671 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=High-fidelity+3D+reconstruction+for+planetary+exploration&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:44:30,672 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:44:39,582 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=High-fidelity+3D+reconstruction+for+planetary+exploration&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:44:39,583 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 4/5 in 15.0s -2026-02-26 13:44:57,973 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=High-fidelity+3D+reconstruction+for+planetary+exploration&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:44:58,306 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/09448b3f69e121d8b4824eaa69c077d5cc086074?fields=references.title%2Ccitations.title "HTTP/1.1 200 OK" -2026-02-26 13:44:59,776 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22GatedFWA%3A+Linear+Flash+Windowed+Attention+with+Gated+Associative+Memory%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:45:00,155 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7113916381&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:45:00,442 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=GatedFWA%3A+Linear+Flash+Windowed+Attention+with+Gated+Associative+Memory&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:45:00,442 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:45:03,055 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=GatedFWA%3A+Linear+Flash+Windowed+Attention+with+Gated+Associative+Memory&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:45:03,063 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:45:07,667 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=GatedFWA%3A+Linear+Flash+Windowed+Attention+with+Gated+Associative+Memory&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:45:07,669 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:45:16,945 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=GatedFWA%3A+Linear+Flash+Windowed+Attention+with+Gated+Associative+Memory&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:45:17,296 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/86ffde4dfb4be5e75c1a3eb7c91d3cdc7f40c54a?fields=references.title%2Ccitations.title "HTTP/1.1 200 OK" -2026-02-26 13:45:18,078 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22AdaSplash%3A+Adaptive+Sparse+Flash+Attention%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:45:18,666 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW4407759138&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:45:19,126 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=AdaSplash%3A+Adaptive+Sparse+Flash+Attention&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:45:19,799 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/a6f877368b262eeac407c0f1171063285c2c46b6?fields=references.title%2Ccitations.title "HTTP/1.1 200 OK" -2026-02-26 13:45:21,063 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Nemotron-Flash%3A+Towards+Latency-Optimal+Hybrid+Small+Language+Models%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:45:21,623 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7106705480&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:45:24,057 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Nemotron-Flash%3A+Towards+Latency-Optimal+Hybrid+Small+Language+Models&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:45:24,772 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/ea14b98deadfe9aa0039f3221c293412d7bb9645?fields=references.title%2Ccitations.title "HTTP/1.1 200 OK" -2026-02-26 13:45:25,304 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Flash+Multi-Head+Feed-Forward+Network%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:45:25,787 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7113915021&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:45:26,060 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Flash+Multi-Head+Feed-Forward+Network&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:45:26,060 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:45:31,657 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Flash+Multi-Head+Feed-Forward+Network&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:45:32,297 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/884d95c7ec6e81039279d56841dbcebe6f6a6c7f?fields=references.title%2Ccitations.title "HTTP/1.1 200 OK" -2026-02-26 13:45:33,088 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22MiMo-V2-Flash+Technical+Report%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:45:33,618 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7118867773&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:45:34,207 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=MiMo-V2-Flash+Technical+Report&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:45:34,208 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:45:38,144 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=MiMo-V2-Flash+Technical+Report&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:45:39,035 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/38bfb955426702f1bfc9888e52c9cd48b2f8757b?fields=references.title%2Ccitations.title "HTTP/1.1 200 OK" -2026-02-26 13:45:40,512 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=title.search%3A%22Sawtooth+Wavefront+Reordering%3A+Enhanced+CuTile+FlashAttention+on+NVIDIA+GB10%22&per_page=1&select=id%2Ctitle%2Cpublication_year%2Ccited_by_count%2Cprimary_location%2Creferenced_works%2Crelated_works&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:45:40,959 [INFO] httpx: HTTP Request: GET https://api.openalex.org/works?filter=cites%3Ahttps%3A%2F%2Fopenalex.org%2FW7125511497&per_page=6&select=id%2Ctitle&mailto=papermind%40example.com "HTTP/1.1 200 OK" -2026-02-26 13:45:41,606 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Sawtooth+Wavefront+Reordering%3A+Enhanced+CuTile+FlashAttention+on+NVIDIA+GB10&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:45:41,607 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 1/5 in 2.0s -2026-02-26 13:45:44,195 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Sawtooth+Wavefront+Reordering%3A+Enhanced+CuTile+FlashAttention+on+NVIDIA+GB10&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:45:44,196 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 2/5 in 4.0s -2026-02-26 13:45:48,805 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Sawtooth+Wavefront+Reordering%3A+Enhanced+CuTile+FlashAttention+on+NVIDIA+GB10&limit=1&fields=title "HTTP/1.1 429 " -2026-02-26 13:45:48,806 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/search, retry 3/5 in 8.0s -2026-02-26 13:45:58,755 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/search?query=Sawtooth+Wavefront+Reordering%3A+Enhanced+CuTile+FlashAttention+on+NVIDIA+GB10&limit=1&fields=title "HTTP/1.1 200 OK" -2026-02-26 13:45:59,030 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/ce6699f744e3d03eb7d7f169aae99389bcb1c5c5?fields=references.title%2Ccitations.title "HTTP/1.1 429 " -2026-02-26 13:45:59,030 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/ce6699f744e3d03eb7d7f169aae99389bcb1c5c5, retry 1/5 in 2.0s -2026-02-26 13:46:01,309 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/ce6699f744e3d03eb7d7f169aae99389bcb1c5c5?fields=references.title%2Ccitations.title "HTTP/1.1 429 " -2026-02-26 13:46:01,310 [WARNING] packages.integrations.semantic_scholar_client: Scholar API 429 for /paper/ce6699f744e3d03eb7d7f169aae99389bcb1c5c5, retry 2/5 in 4.0s -2026-02-26 13:46:05,980 [INFO] httpx: HTTP Request: GET https://api.semanticscholar.org/graph/v1/paper/ce6699f744e3d03eb7d7f169aae99389bcb1c5c5?fields=references.title%2Ccitations.title "HTTP/1.1 200 OK" -2026-02-26 13:46:05,997 [INFO] apps.api.main: 增量同步完成: {'processed_papers': 38, 'edges_inserted': 127, 'strategy': 'papers_without_existing_citation_edges'} -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [83789] -2026-02-26 13:46:06,700 [INFO] packages.storage.db: Initialized 135 orphan papers into initial_import action 165c0537889d44df821caf20bf44b4e4 -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:190: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [99594] -INFO: Waiting for application startup. -INFO: Application startup complete. -INFO: 127.0.0.1:62120 - "OPTIONS /settings/llm-providers HTTP/1.1" 200 OK -INFO: 127.0.0.1:62121 - "OPTIONS /settings/llm-providers/active HTTP/1.1" 200 OK -INFO: 127.0.0.1:62123 - "OPTIONS /settings/llm-providers HTTP/1.1" 200 OK -INFO: 127.0.0.1:62124 - "OPTIONS /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,742 [INFO] papermind.api: [931d2b00] POST /jobs/daily-report/run-once → 200 (1ms) -INFO: 127.0.0.1:62031 - "POST /jobs/daily-report/run-once HTTP/1.1" 200 OK -2026-02-26 13:46:06,749 [INFO] papermind.api: [a016eb2d] GET /tasks/active → 200 (9ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -ERROR: Exception in ASGI application -Traceback (most recent call last): - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/protocols/http/h11_impl.py", line 410, in run_asgi - result = await app( # type: ignore[func-returns-value] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - self.scope, self.receive, self.send - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - ) - ^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__ - return await self.app(scope, receive, send) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/applications.py", line 1160, in __call__ - await super().__call__(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/applications.py", line 107, in __call__ - await self.middleware_stack(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/errors.py", line 186, in __call__ - raise exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/errors.py", line 164, in __call__ - await self.app(scope, receive, _send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/cors.py", line 87, in __call__ - await self.app(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/base.py", line 198, in __call__ - raise app_exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/base.py", line 144, in coro - await self.app(scope, receive_or_disconnect, send_no_error) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/middleware/exceptions.py", line 63, in __call__ - await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app - raise exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app - await app(scope, receive, sender) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ - await self.app(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/routing.py", line 716, in __call__ - await self.middleware_stack(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/routing.py", line 736, in app - await route.handle(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/routing.py", line 290, in handle - await self.app(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/routing.py", line 119, in app - await wrap_app_handling_exceptions(app, request)(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app - raise exc - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app - await app(scope, receive, sender) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/fastapi/routing.py", line 106, in app - await response(scope, receive, send) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/responses.py", line 167, in __call__ - await self.background() - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/background.py", line 36, in __call__ - await task() - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/background.py", line 23, in __call__ - await run_in_threadpool(self.func, *self.args, **self.kwargs) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool - return await anyio.to_thread.run_sync(func) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/anyio/to_thread.py", line 63, in run_sync - return await get_async_backend().run_sync_in_worker_thread( - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - func, args, abandon_on_cancel=abandon_on_cancel, limiter=limiter - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - ) - ^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 2502, in run_sync_in_worker_thread - return await future - ^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 986, in run - result = context.run(func, *args) - File "/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py", line 1938, in _run_daily_workflow_bg - task_id = f"daily_report_{uuid.uuid4().hex[:8]}" - ^^^^ -NameError: name 'uuid' is not defined. Did you mean: '_uuid'? Or did you forget to import 'uuid'? -2026-02-26 13:46:06,761 [INFO] papermind.api: [ac7135e0] GET /tasks/active → 200 (16ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,762 [INFO] papermind.api: [97b2f485] GET /tasks/active → 200 (16ms) -INFO: 127.0.0.1:62124 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,762 [INFO] papermind.api: [1bbb72a5] GET /settings/email-configs → 200 (17ms) -INFO: 127.0.0.1:62120 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:46:06,763 [INFO] papermind.api: [c24c0af1] GET /settings/daily-report-config → 200 (18ms) -INFO: 127.0.0.1:62121 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:46:06,764 [INFO] papermind.api: [c18d0c79] GET /papers/folder-stats → 200 (23ms) -INFO: 127.0.0.1:62020 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:06,764 [INFO] papermind.api: [d09fc1fa] GET /tasks/active → 200 (12ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,765 [INFO] papermind.api: [20e189ee] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,765 [INFO] papermind.api: [a5ba2b40] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62124 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,766 [INFO] papermind.api: [043c536e] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,766 [INFO] papermind.api: [b60f4a3d] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,768 [INFO] papermind.api: [8e94854d] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62020 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,769 [INFO] papermind.api: [d9262afa] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,776 [INFO] papermind.api: [682d4026] GET /tasks/active → 200 (9ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,778 [INFO] papermind.api: [bd6cbe92] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,781 [INFO] papermind.api: [bd7c4ba0] GET /pipelines/runs → 200 (13ms) -INFO: 127.0.0.1:62121 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:46:06,782 [INFO] papermind.api: [e71a2e4d] GET /metrics/costs → 200 (15ms) -INFO: 127.0.0.1:62120 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:46:06,784 [INFO] papermind.api: [a65ac94d] GET /actions → 200 (7ms) -INFO: 127.0.0.1:62123 - "GET /actions?limit=30 HTTP/1.1" 200 OK -2026-02-26 13:46:06,788 [INFO] papermind.api: [1f7f8174] GET /tasks/active → 200 (5ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,789 [INFO] papermind.api: [c260dba9] GET /papers/latest → 200 (9ms) -INFO: 127.0.0.1:62009 - "GET /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:46:06,791 [INFO] papermind.api: [d36e6a91] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,792 [INFO] papermind.api: [32be16ac] GET /generated/list → 200 (9ms) -INFO: 127.0.0.1:62120 - "GET /generated/list?type=topic_wiki&limit=50 HTTP/1.1" 200 OK -2026-02-26 13:46:06,794 [INFO] papermind.api: [b72d26f9] GET /generated/list → 200 (3ms) -INFO: 127.0.0.1:62121 - "GET /generated/list?type=daily_brief&limit=50 HTTP/1.1" 200 OK -2026-02-26 13:46:06,839 [INFO] papermind.api: [492b0f54] GET /system/status → 200 (72ms) -INFO: 127.0.0.1:62124 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:46:06,892 [INFO] papermind.api: [42742214] GET /today → 200 (117ms) -INFO: 127.0.0.1:62020 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:46:06,954 [INFO] papermind.api: [10f621f9] GET /tasks/active → 200 (38ms) -INFO: 127.0.0.1:62020 - "GET /tasks/active HTTP/1.1" 200 OK -INFO: 127.0.0.1:62020 - "OPTIONS /topics?enabled_only=false HTTP/1.1" 200 OK -INFO: 127.0.0.1:62863 - "OPTIONS /topics?enabled_only=false HTTP/1.1" 200 OK -2026-02-26 13:46:06,961 [INFO] papermind.api: [f6a83dec] GET /graph/cocitation-clusters → 200 (167ms) -INFO: 127.0.0.1:62121 - "GET /graph/cocitation-clusters?min_cocite=2 HTTP/1.1" 200 OK -2026-02-26 13:46:06,964 [INFO] papermind.api: [e2e676ee] GET /writing/templates → 200 (7ms) -INFO: 127.0.0.1:62863 - "GET /writing/templates HTTP/1.1" 200 OK -2026-02-26 13:46:06,969 [INFO] papermind.api: [249881cc] GET /tasks/active → 200 (7ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,970 [INFO] papermind.api: [0df23cff] GET /graph/frontier → 200 (177ms) -INFO: 127.0.0.1:62120 - "GET /graph/frontier?days=90 HTTP/1.1" 200 OK -2026-02-26 13:46:06,976 [INFO] papermind.api: [07d41208] GET /tasks/active → 200 (9ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,978 [INFO] papermind.api: [65ffddc1] GET /tasks/active → 200 (5ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,979 [INFO] papermind.api: [a6efe35f] GET /graph/overview → 200 (188ms) -INFO: 127.0.0.1:62009 - "GET /graph/overview HTTP/1.1" 200 OK -2026-02-26 13:46:06,979 [INFO] papermind.api: [42ea92cd] GET /tasks/active → 200 (5ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,980 [INFO] papermind.api: [4b6b8e4b] GET /graph/bridges → 200 (188ms) -INFO: 127.0.0.1:62123 - "GET /graph/bridges HTTP/1.1" 200 OK -2026-02-26 13:46:06,982 [INFO] papermind.api: [48e7731f] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,982 [INFO] papermind.api: [8f7efc52] GET /settings/email-configs → 200 (2ms) -INFO: 127.0.0.1:62120 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:46:06,985 [INFO] papermind.api: [97f66087] GET /settings/daily-report-config → 200 (4ms) -INFO: 127.0.0.1:62009 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:46:06,985 [INFO] papermind.api: [36871f30] GET /tasks/active → 200 (6ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,987 [INFO] papermind.api: [2c9a5a20] GET /tasks/active → 200 (5ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,987 [INFO] papermind.api: [00352168] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,988 [INFO] papermind.api: [6f8d9664] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,989 [INFO] papermind.api: [8dceee8f] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,993 [INFO] papermind.api: [8ea4f7fd] GET /tasks/active → 200 (5ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,994 [INFO] papermind.api: [0869e31e] GET /tasks/active → 200 (5ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,995 [INFO] papermind.api: [f97302dd] GET /tasks/active → 200 (5ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,995 [INFO] papermind.api: [04708772] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,995 [INFO] papermind.api: [07107e38] GET /papers/folder-stats → 200 (9ms) -INFO: 127.0.0.1:62009 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:06,997 [INFO] papermind.api: [eebc6417] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,998 [INFO] papermind.api: [8aa82951] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:06,999 [INFO] papermind.api: [79d1511e] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,002 [INFO] papermind.api: [456de479] GET /papers/folder-stats → 200 (6ms) -INFO: 127.0.0.1:62121 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:07,004 [INFO] papermind.api: [86deb522] GET /actions → 200 (5ms) -INFO: 127.0.0.1:62863 - "GET /actions?limit=30 HTTP/1.1" 200 OK -2026-02-26 13:46:07,005 [INFO] papermind.api: [c71eeb06] GET /papers/folder-stats → 200 (8ms) -INFO: 127.0.0.1:62009 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:07,005 [INFO] papermind.api: [bbf49238] GET /papers/latest → 200 (4ms) -INFO: 127.0.0.1:62120 - "GET /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:46:07,006 [INFO] papermind.api: [519f7ebe] GET /papers/folder-stats → 200 (7ms) -INFO: 127.0.0.1:62123 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:07,006 [INFO] papermind.api: [ea15f902] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,009 [INFO] papermind.api: [cf9fb557] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,009 [INFO] papermind.api: [046b6636] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:62863 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:07,012 [INFO] papermind.api: [062325cd] GET /generated/list → 200 (6ms) -INFO: 127.0.0.1:62009 - "GET /generated/list?type=topic_wiki&limit=50 HTTP/1.1" 200 OK -2026-02-26 13:46:07,013 [INFO] papermind.api: [325090cc] GET /generated/list → 200 (5ms) -INFO: 127.0.0.1:62121 - "GET /generated/list?type=daily_brief&limit=50 HTTP/1.1" 200 OK -2026-02-26 13:46:07,014 [INFO] papermind.api: [048a4c2a] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,016 [INFO] papermind.api: [4409e2aa] GET /papers/folder-stats → 200 (8ms) -INFO: 127.0.0.1:62123 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:07,017 [INFO] papermind.api: [f6def33e] GET /papers/folder-stats → 200 (7ms) -INFO: 127.0.0.1:62120 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:07,020 [INFO] papermind.api: [7f56c261] GET /writing/templates → 200 (4ms) -INFO: 127.0.0.1:62863 - "GET /writing/templates HTTP/1.1" 200 OK -2026-02-26 13:46:07,020 [INFO] papermind.api: [56093698] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,021 [INFO] papermind.api: [cbf8a95b] GET /papers/folder-stats → 200 (7ms) -INFO: 127.0.0.1:62009 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:07,023 [INFO] papermind.api: [f000d8a7] GET /papers/folder-stats → 200 (8ms) -INFO: 127.0.0.1:62121 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:07,024 [INFO] papermind.api: [0d50518b] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:62120 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:07,025 [INFO] papermind.api: [3788af08] GET /today → 200 (1ms) -INFO: 127.0.0.1:62121 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:46:07,029 [INFO] papermind.api: [f8bdb783] GET /metrics/costs → 200 (7ms) -INFO: 127.0.0.1:62123 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:46:07,030 [INFO] papermind.api: [80be0ee3] GET /pipelines/runs → 200 (8ms) -INFO: 127.0.0.1:62009 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:46:07,033 [INFO] papermind.api: [6bf25636] GET /today → 200 (1ms) -INFO: 127.0.0.1:62009 - "GET /today HTTP/1.1" 200 OK -2026-02-26 13:46:07,034 [INFO] papermind.api: [088dae8c] GET /metrics/costs → 200 (8ms) -INFO: 127.0.0.1:62121 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK -2026-02-26 13:46:07,034 [INFO] papermind.api: [ab30ba37] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,036 [INFO] papermind.api: [7f63eb03] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,036 [INFO] papermind.api: [932f7cd6] GET /pipelines/runs → 200 (6ms) -INFO: 127.0.0.1:62123 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK -2026-02-26 13:46:07,037 [INFO] papermind.api: [56b1cebe] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,038 [INFO] papermind.api: [939f786f] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,039 [INFO] papermind.api: [c0aafda0] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,040 [INFO] papermind.api: [ecf8fae0] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,041 [INFO] papermind.api: [1370cc4c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,041 [INFO] papermind.api: [55aee2bd] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,043 [INFO] papermind.api: [d1939edc] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,044 [INFO] papermind.api: [bef3f953] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,044 [INFO] papermind.api: [c919ae8a] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,045 [INFO] papermind.api: [b2b34331] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,052 [INFO] papermind.api: [a3f3049a] GET /tasks/active → 200 (7ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,053 [INFO] papermind.api: [11121fba] GET /tasks/active → 200 (8ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,061 [INFO] papermind.api: [2f9ab9ee] GET /tasks/active → 200 (10ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,062 [INFO] papermind.api: [65e6cc32] GET /system/status → 200 (42ms) -INFO: 127.0.0.1:62863 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:46:07,064 [INFO] papermind.api: [f671b2f7] GET /tasks/active → 200 (9ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,065 [INFO] papermind.api: [2f5fb66e] GET /tasks/active → 200 (9ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,066 [INFO] papermind.api: [bcb1fd13] GET /system/status → 200 (41ms) -INFO: 127.0.0.1:62120 - "GET /system/status HTTP/1.1" 200 OK -2026-02-26 13:46:07,075 [INFO] papermind.api: [aa0dc9fc] GET /tasks/active → 200 (13ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,084 [INFO] papermind.api: [b040bd8b] GET /tasks/active → 200 (18ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,084 [INFO] papermind.api: [d7345f87] GET /tasks/active → 200 (19ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,084 [INFO] papermind.api: [157fc1ae] GET /papers/folder-stats → 200 (20ms) -INFO: 127.0.0.1:62863 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:07,085 [INFO] papermind.api: [22988166] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,085 [INFO] papermind.api: [9f5ab1f0] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,089 [INFO] papermind.api: [834263bf] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,089 [INFO] papermind.api: [a55c2cc6] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,089 [INFO] papermind.api: [1f59e2d7] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,090 [INFO] papermind.api: [0e76a1ef] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,090 [INFO] papermind.api: [8a5d87b7] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,092 [INFO] papermind.api: [bd216475] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,093 [INFO] papermind.api: [300223de] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,093 [INFO] papermind.api: [ea74054a] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,094 [INFO] papermind.api: [8220b2d6] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,095 [INFO] papermind.api: [a5ced654] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:62120 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:07,095 [INFO] papermind.api: [5007f046] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,096 [INFO] papermind.api: [c1c3a58f] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,096 [INFO] papermind.api: [87d8ee72] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,097 [INFO] papermind.api: [0921f7eb] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,099 [INFO] papermind.api: [8c6fb900] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,099 [INFO] papermind.api: [4ddf6dba] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,112 [INFO] papermind.api: [b9dc1718] GET /tasks/active → 200 (16ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,116 [INFO] papermind.api: [23f7155e] GET /tasks/active → 200 (18ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,119 [INFO] papermind.api: [1107bc6d] GET /tasks/active → 200 (21ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,119 [WARNING] packages.ai.graph_service: UMAP failed: No module named 'umap', falling back to PCA -2026-02-26 13:46:07,121 [INFO] papermind.api: [0011f504] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,122 [INFO] papermind.api: [2090aba6] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,122 [INFO] papermind.api: [f55bb50d] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,122 [INFO] papermind.api: [9d5eca73] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,123 [INFO] papermind.api: [23c13782] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,125 [INFO] papermind.api: [2f0298bd] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,127 [INFO] papermind.api: [83df0d3c] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,128 [INFO] papermind.api: [210811d0] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,129 [INFO] papermind.api: [ef509845] GET /tasks/active → 200 (5ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,130 [INFO] papermind.api: [fdff4679] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,130 [INFO] papermind.api: [cbcec9b5] GET /papers/folder-stats → 200 (6ms) -INFO: 127.0.0.1:62863 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:07,131 [INFO] papermind.api: [2296b652] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,131 [INFO] papermind.api: [04651a3a] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,132 [INFO] papermind.api: [e51acaa6] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,133 [INFO] papermind.api: [45c7abda] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,134 [INFO] papermind.api: [9fc51f46] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,134 [INFO] papermind.api: [f5465c19] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,135 [INFO] papermind.api: [cf981c21] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,135 [INFO] papermind.api: [9784f0e8] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,138 [INFO] papermind.api: [456e824f] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,139 [INFO] papermind.api: [727c02bf] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,139 [INFO] papermind.api: [f5753797] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,140 [INFO] papermind.api: [4c82e62a] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,141 [INFO] papermind.api: [11eca46c] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:62123 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:07,142 [INFO] papermind.api: [ea75badc] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,142 [INFO] papermind.api: [46ee3d76] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,143 [INFO] papermind.api: [3ba0ad68] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,144 [INFO] papermind.api: [ac462d00] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,144 [INFO] papermind.api: [ba913b4f] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,146 [INFO] papermind.api: [7c5fef36] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,146 [INFO] papermind.api: [d0a539f7] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,147 [INFO] papermind.api: [367f510f] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,148 [INFO] papermind.api: [c7a4f843] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,148 [INFO] papermind.api: [06566d59] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,150 [INFO] papermind.api: [b4d5b300] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,151 [INFO] papermind.api: [afeeacce] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,153 [INFO] papermind.api: [cc18c791] GET /tasks/active → 200 (5ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,153 [INFO] papermind.api: [9035d8a2] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,155 [INFO] papermind.api: [9ce774e7] GET /tasks/active → 200 (5ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,156 [INFO] papermind.api: [1f328a3e] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,158 [INFO] papermind.api: [d9a46cd8] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,158 [INFO] papermind.api: [8a3bf6e5] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,158 [INFO] papermind.api: [d8f1b730] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,160 [INFO] papermind.api: [9f88cd97] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,160 [INFO] papermind.api: [f10ab358] GET /papers/folder-stats → 200 (6ms) -INFO: 127.0.0.1:62121 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:07,161 [INFO] papermind.api: [aa960b2f] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,161 [INFO] papermind.api: [6cc56afa] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,162 [INFO] papermind.api: [a61491f5] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,163 [INFO] papermind.api: [8340929d] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,164 [INFO] papermind.api: [4b1afacd] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,164 [INFO] papermind.api: [8cce69c9] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,165 [INFO] papermind.api: [813a6fff] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,166 [INFO] papermind.api: [f487467d] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,167 [INFO] papermind.api: [ceefa9d0] GET /papers/folder-stats → 200 (3ms) -INFO: 127.0.0.1:62863 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:07,167 [INFO] papermind.api: [2f314638] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,167 [INFO] papermind.api: [9985aeb3] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,167 [INFO] papermind.api: [30d17353] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,169 [INFO] papermind.api: [d0211cbf] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,171 [INFO] papermind.api: [5589f551] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,175 [INFO] papermind.api: [46c7ccdc] GET /tasks/active → 200 (5ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,177 [INFO] papermind.api: [9ff7b1fb] GET /tasks/active → 200 (8ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,178 [INFO] papermind.api: [a5504831] GET /tasks/active → 200 (9ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,180 [INFO] papermind.api: [21095549] GET /tasks/active → 200 (10ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,190 [INFO] papermind.api: [ca2b14e3] GET /tasks/active → 200 (12ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,192 [INFO] papermind.api: [00f71b2f] GET /tasks/active → 200 (11ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,193 [INFO] papermind.api: [a0059481] GET /tasks/active → 200 (12ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,194 [INFO] papermind.api: [67fcc1bb] GET /tasks/active → 200 (12ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,194 [INFO] papermind.api: [ad53f7c9] GET /tasks/active → 200 (13ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,196 [INFO] papermind.api: [15ddddee] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,197 [INFO] papermind.api: [48ee9e65] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,198 [INFO] papermind.api: [b357f2f9] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,198 [INFO] papermind.api: [5277d985] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,199 [INFO] papermind.api: [eb85f117] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:62121 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:07,200 [INFO] papermind.api: [02088c8c] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,202 [INFO] papermind.api: [d3b5f09c] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,202 [INFO] papermind.api: [992bd636] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,202 [INFO] papermind.api: [1bd5f9a2] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,204 [INFO] papermind.api: [f74be303] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,204 [INFO] papermind.api: [03039403] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,206 [INFO] papermind.api: [14049f22] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,206 [INFO] papermind.api: [f302881d] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,207 [INFO] papermind.api: [74fb96fe] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,208 [INFO] papermind.api: [ce078e55] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,209 [INFO] papermind.api: [a9b8a1ff] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,211 [INFO] papermind.api: [975a66c3] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,212 [INFO] papermind.api: [7e4be889] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,213 [INFO] papermind.api: [8bcbb022] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,214 [INFO] papermind.api: [c4f9eb0c] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:62120 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:07,214 [INFO] papermind.api: [847da3a4] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,215 [INFO] papermind.api: [caa40f23] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,215 [INFO] papermind.api: [789d37b1] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,216 [INFO] papermind.api: [1d32bd35] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,217 [INFO] papermind.api: [8045d66c] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,217 [INFO] papermind.api: [0c62bacb] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,218 [INFO] papermind.api: [2d34ae2e] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,218 [INFO] papermind.api: [11670cfc] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,219 [INFO] papermind.api: [64fa22ec] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,220 [INFO] papermind.api: [d475fa48] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,222 [INFO] papermind.api: [bba3c7c8] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,222 [INFO] papermind.api: [50e60f09] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,223 [INFO] papermind.api: [5e17ac93] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,225 [INFO] papermind.api: [a5696c39] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,225 [INFO] papermind.api: [03f2bfb2] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,227 [INFO] papermind.api: [f4411761] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,227 [INFO] papermind.api: [50a27668] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,228 [INFO] papermind.api: [4237cc64] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:62123 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:07,228 [INFO] papermind.api: [eedc184e] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,229 [INFO] papermind.api: [cb5e6b98] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,230 [INFO] papermind.api: [33e592f6] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,230 [INFO] papermind.api: [a62ae5e8] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,232 [INFO] papermind.api: [83f60311] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,232 [INFO] papermind.api: [1187298d] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,233 [INFO] papermind.api: [04a7bcca] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,234 [INFO] papermind.api: [444a3dc1] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,235 [INFO] papermind.api: [a25e94d5] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,236 [INFO] papermind.api: [3b3e1d1f] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,239 [INFO] papermind.api: [b1910021] GET /tasks/active → 200 (5ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,240 [INFO] papermind.api: [19d9ceb2] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,240 [INFO] papermind.api: [c8e4c2ea] GET /tasks/active → 200 (5ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,241 [INFO] papermind.api: [64945a2e] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,242 [INFO] papermind.api: [d33c53a4] GET /papers/folder-stats → 200 (7ms) -INFO: 127.0.0.1:62121 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:07,243 [INFO] papermind.api: [bfc88aab] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,244 [INFO] papermind.api: [3c056e88] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,244 [INFO] papermind.api: [65fe25ee] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,247 [INFO] papermind.api: [e158d841] GET /tasks/active → 200 (5ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,248 [INFO] papermind.api: [e264fa98] GET /tasks/active → 200 (5ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,249 [INFO] papermind.api: [cf8790cd] GET /tasks/active → 200 (5ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,249 [INFO] papermind.api: [169432bf] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,253 [INFO] papermind.api: [ea31f8ea] GET /tasks/active → 200 (5ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,255 [INFO] papermind.api: [9b2638a5] GET /tasks/active → 200 (6ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,255 [INFO] papermind.api: [edd3e0c2] GET /tasks/active → 200 (6ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,258 [INFO] papermind.api: [e733207f] GET /tasks/active → 200 (9ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,260 [INFO] papermind.api: [1ca99e8a] GET /tasks/active → 200 (6ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,260 [INFO] papermind.api: [cf06fd99] GET /tasks/active → 200 (6ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,262 [INFO] papermind.api: [1ce939dc] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,263 [INFO] papermind.api: [78954b92] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,264 [INFO] papermind.api: [e4cac989] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,265 [INFO] papermind.api: [fe5d192f] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62009 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,266 [INFO] papermind.api: [f4a0ca93] GET /papers/folder-stats → 200 (7ms) -INFO: 127.0.0.1:62863 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:07,267 [INFO] papermind.api: [433d60f0] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,268 [INFO] papermind.api: [351b676f] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,269 [INFO] papermind.api: [363d3eef] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,270 [INFO] papermind.api: [6148327b] GET /settings/llm-providers → 200 (5ms) -INFO: 127.0.0.1:62009 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:46:07,273 [INFO] papermind.api: [faf56c52] GET /tasks/active → 200 (5ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,275 [INFO] papermind.api: [3c203702] GET /settings/llm-providers/active → 200 (7ms) -INFO: 127.0.0.1:62863 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,278 [INFO] papermind.api: [d71027e8] GET /settings/llm-providers → 200 (6ms) -INFO: 127.0.0.1:62009 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:46:07,279 [INFO] papermind.api: [a562c694] GET /papers/folder-stats → 200 (9ms) -INFO: 127.0.0.1:62123 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:07,279 [INFO] papermind.api: [1cb93d4a] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62121 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,280 [INFO] papermind.api: [60f8a219] GET /settings/llm-providers/active → 200 (3ms) -INFO: 127.0.0.1:62863 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,280 [INFO] papermind.api: [8a73474c] GET /topics → 200 (9ms) -INFO: 127.0.0.1:62120 - "GET /topics?enabled_only=false HTTP/1.1" 200 OK -2026-02-26 13:46:07,281 [INFO] papermind.api: [2ab08d9e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,283 [INFO] papermind.api: [b5ee2bc0] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62120 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,285 [INFO] papermind.api: [9a3acf84] GET /topics → 200 (4ms) -INFO: 127.0.0.1:62863 - "GET /topics?enabled_only=false HTTP/1.1" 200 OK -2026-02-26 13:46:07,285 [INFO] papermind.api: [3af025aa] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,286 [INFO] papermind.api: [4e5ef2c6] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,289 [INFO] papermind.api: [2ca058ab] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,290 [INFO] papermind.api: [68216d62] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,291 [INFO] papermind.api: [e021f1b1] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,297 [INFO] papermind.api: [45c59a8a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,298 [INFO] papermind.api: [916586b9] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,301 [INFO] papermind.api: [2d43c496] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,301 [INFO] papermind.api: [17e25e12] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,303 [INFO] papermind.api: [0cca8943] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,307 [INFO] papermind.api: [9911906e] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,308 [INFO] papermind.api: [dc2c9d21] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,310 [INFO] papermind.api: [e2917316] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,311 [INFO] papermind.api: [08331bca] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,312 [INFO] papermind.api: [c61fcd87] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,343 [INFO] papermind.api: [32460f34] GET /tasks/active → 200 (30ms) -INFO: 127.0.0.1:62123 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:07,346 [INFO] papermind.api: [bdcf9999] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:08,144 [INFO] papermind.api: [4e3aa238] GET /tasks/active → 200 (16ms) -INFO: 127.0.0.1:62863 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:08,221 [INFO] papermind.api: [b659f285] GET /graph/similarity-map → 200 (1379ms) -INFO: 127.0.0.1:62124 - "GET /graph/similarity-map?topic_id=&limit=200 HTTP/1.1" 200 OK -2026-02-26 13:46:09,101 [INFO] papermind.api: [a09aa8d1] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62124 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:10,126 [INFO] papermind.api: [15c7ddeb] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62124 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:11,100 [INFO] papermind.api: [e5a5c4be] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:62124 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:11,763 [INFO] papermind.api: [97bba97b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:62913 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:12,127 [INFO] papermind.api: [37968a75] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:62919 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:12,128 [INFO] papermind.api: [6e97f18d] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:62918 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:13,101 [INFO] papermind.api: [f929c6e9] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62918 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:14,123 [INFO] papermind.api: [798af527] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:62918 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:15,102 [INFO] papermind.api: [58f229a9] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62918 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:16,126 [INFO] papermind.api: [39b61cbb] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62918 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:17,100 [INFO] papermind.api: [a3384828] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:62938 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:18,124 [INFO] papermind.api: [6bcacbb4] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62938 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:19,102 [INFO] papermind.api: [9839b79e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62938 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:20,123 [INFO] papermind.api: [beefe917] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62938 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:21,099 [INFO] papermind.api: [15fa5936] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:62938 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:22,124 [INFO] papermind.api: [3f70990a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62947 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:22,997 [INFO] papermind.api: [0b38d277] GET /papers/folder-stats → 200 (1ms) -INFO: 127.0.0.1:62947 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:23,100 [INFO] papermind.api: [17bcfacf] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:62947 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:24,124 [INFO] papermind.api: [c95b1d63] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:62947 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:24,277 [INFO] papermind.api: [2bbab8c8] GET /papers/folder-stats → 200 (44ms) -INFO: 127.0.0.1:62947 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:24,279 [INFO] papermind.api: [059114a2] GET /actions → 200 (11ms) -INFO: 127.0.0.1:62957 - "GET /actions?limit=30 HTTP/1.1" 200 OK -2026-02-26 13:46:24,280 [INFO] papermind.api: [4bf5fc3e] GET /papers/latest → 200 (11ms) -INFO: 127.0.0.1:62959 - "GET /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:46:24,285 [INFO] papermind.api: [2981f4b0] GET /papers/folder-stats → 200 (6ms) -INFO: 127.0.0.1:62947 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:24,305 [INFO] papermind.api: [28bd495b] GET /papers/latest → 200 (23ms) -INFO: 127.0.0.1:62957 - "GET /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:46:24,332 [INFO] papermind.api: [3529cff7] GET /actions → 200 (51ms) -INFO: 127.0.0.1:62961 - "GET /actions?limit=30 HTTP/1.1" 200 OK -2026-02-26 13:46:24,349 [INFO] papermind.api: [b654dd4b] GET /papers/folder-stats → 200 (25ms) -INFO: 127.0.0.1:62959 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:25,101 [INFO] papermind.api: [586cf1e0] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62959 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:26,125 [INFO] papermind.api: [2ae78dee] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62959 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:27,100 [INFO] papermind.api: [7f9e0ba6] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:62966 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:28,123 [INFO] papermind.api: [e6c136e0] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:62966 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:29,100 [INFO] papermind.api: [9e05f55a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62966 - "GET /tasks/active HTTP/1.1" 200 OK -INFO: 127.0.0.1:62966 - "OPTIONS /papers/latest?page=2&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:46:30,120 [INFO] papermind.api: [1ff0b638] GET /papers/latest → 200 (2ms) -INFO: 127.0.0.1:62966 - "GET /papers/latest?page=2&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:46:30,124 [INFO] papermind.api: [d4e94572] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62966 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:31,100 [INFO] papermind.api: [04676fbe] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:62966 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:32,125 [INFO] papermind.api: [0604a4a5] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62977 - "GET /tasks/active HTTP/1.1" 200 OK -INFO: 127.0.0.1:62986 - "OPTIONS /papers/c39f2d66-e452-49a1-9280-f866ef967d73 HTTP/1.1" 200 OK -INFO: 127.0.0.1:62988 - "OPTIONS /papers/c39f2d66-e452-49a1-9280-f866ef967d73/figures HTTP/1.1" 200 OK -INFO: 127.0.0.1:62990 - "OPTIONS /papers/c39f2d66-e452-49a1-9280-f866ef967d73 HTTP/1.1" 200 OK -INFO: 127.0.0.1:62991 - "OPTIONS /papers/c39f2d66-e452-49a1-9280-f866ef967d73/figures HTTP/1.1" 200 OK -2026-02-26 13:46:32,975 [INFO] papermind.api: [ee018d1c] GET /papers/folder-stats → 200 (6ms) -INFO: 127.0.0.1:62977 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:32,980 [INFO] papermind.api: [d684188b] GET /papers/c39f2d66-e452-49a1-9280-f866ef967d73 → 200 (6ms) -INFO: 127.0.0.1:62993 - "GET /papers/c39f2d66-e452-49a1-9280-f866ef967d73 HTTP/1.1" 200 OK -2026-02-26 13:46:32,981 [INFO] papermind.api: [fd7e93eb] GET /papers/c39f2d66-e452-49a1-9280-f866ef967d73/figures → 200 (8ms) -INFO: 127.0.0.1:62988 - "GET /papers/c39f2d66-e452-49a1-9280-f866ef967d73/figures HTTP/1.1" 200 OK -2026-02-26 13:46:32,983 [INFO] papermind.api: [f4a3dde6] GET /papers/c39f2d66-e452-49a1-9280-f866ef967d73 → 200 (2ms) -INFO: 127.0.0.1:62977 - "GET /papers/c39f2d66-e452-49a1-9280-f866ef967d73 HTTP/1.1" 200 OK -2026-02-26 13:46:32,984 [INFO] papermind.api: [21731d9b] GET /papers/c39f2d66-e452-49a1-9280-f866ef967d73/figures → 200 (1ms) -INFO: 127.0.0.1:62993 - "GET /papers/c39f2d66-e452-49a1-9280-f866ef967d73/figures HTTP/1.1" 200 OK -2026-02-26 13:46:33,101 [INFO] papermind.api: [54b8ce85] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62993 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:34,124 [INFO] papermind.api: [0827e8ff] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:62993 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:35,100 [INFO] papermind.api: [cc202bb7] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:62993 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:36,124 [INFO] papermind.api: [169e4c9c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:62993 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:37,790 [INFO] papermind.api: [4c7056cc] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63012 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:38,124 [INFO] papermind.api: [cd6d2161] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63012 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:39,791 [INFO] papermind.api: [dc99c714] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63012 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:40,124 [INFO] papermind.api: [58a8fb37] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63012 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:41,099 [INFO] papermind.api: [34bd3639] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63012 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:42,128 [INFO] papermind.api: [30247d7a] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:63025 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:42,129 [INFO] papermind.api: [c433f736] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:63024 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:42,311 [INFO] papermind.api: [bcf14e03] GET /actions → 200 (7ms) -INFO: 127.0.0.1:63025 - "GET /actions?limit=30 HTTP/1.1" 200 OK -2026-02-26 13:46:42,314 [INFO] papermind.api: [f9714745] GET /papers/latest → 200 (8ms) -INFO: 127.0.0.1:63027 - "GET /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:46:42,314 [INFO] papermind.api: [01867067] GET /papers/folder-stats → 200 (11ms) -INFO: 127.0.0.1:63024 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:42,318 [INFO] papermind.api: [2be5967e] GET /actions → 200 (4ms) -INFO: 127.0.0.1:63025 - "GET /actions?limit=30 HTTP/1.1" 200 OK -2026-02-26 13:46:42,320 [INFO] papermind.api: [2300f744] GET /papers/latest → 200 (4ms) -INFO: 127.0.0.1:63029 - "GET /papers/latest?page=1&page_size=20 HTTP/1.1" 200 OK -2026-02-26 13:46:42,320 [INFO] papermind.api: [f210001f] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:63027 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:42,323 [INFO] papermind.api: [75d7a669] GET /papers/folder-stats → 200 (2ms) -INFO: 127.0.0.1:63029 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:43,100 [INFO] papermind.api: [e3e0b3bc] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63029 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:44,124 [INFO] papermind.api: [c4942bd6] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63029 - "GET /tasks/active HTTP/1.1" 200 OK -INFO: 127.0.0.1:63027 - "OPTIONS /papers/e2f20031-ead3-4367-ae55-458c81c793a1 HTTP/1.1" 200 OK -INFO: 127.0.0.1:63025 - "OPTIONS /papers/e2f20031-ead3-4367-ae55-458c81c793a1/figures HTTP/1.1" 200 OK -INFO: 127.0.0.1:63024 - "OPTIONS /papers/e2f20031-ead3-4367-ae55-458c81c793a1 HTTP/1.1" 200 OK -INFO: 127.0.0.1:63037 - "OPTIONS /papers/e2f20031-ead3-4367-ae55-458c81c793a1/figures HTTP/1.1" 200 OK -2026-02-26 13:46:44,862 [INFO] papermind.api: [fb847c1f] GET /papers/e2f20031-ead3-4367-ae55-458c81c793a1/figures → 200 (4ms) -INFO: 127.0.0.1:63024 - "GET /papers/e2f20031-ead3-4367-ae55-458c81c793a1/figures HTTP/1.1" 200 OK -2026-02-26 13:46:44,863 [INFO] papermind.api: [d2faa5e6] GET /papers/folder-stats → 200 (9ms) -INFO: 127.0.0.1:63029 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:46:44,863 [INFO] papermind.api: [86787b7b] GET /papers/e2f20031-ead3-4367-ae55-458c81c793a1 → 200 (6ms) -INFO: 127.0.0.1:63027 - "GET /papers/e2f20031-ead3-4367-ae55-458c81c793a1 HTTP/1.1" 200 OK -2026-02-26 13:46:44,866 [INFO] papermind.api: [b1629efa] GET /papers/e2f20031-ead3-4367-ae55-458c81c793a1/figures → 200 (3ms) -INFO: 127.0.0.1:63025 - "GET /papers/e2f20031-ead3-4367-ae55-458c81c793a1/figures HTTP/1.1" 200 OK -2026-02-26 13:46:44,866 [INFO] papermind.api: [ea344acf] GET /papers/e2f20031-ead3-4367-ae55-458c81c793a1 → 200 (2ms) -INFO: 127.0.0.1:63024 - "GET /papers/e2f20031-ead3-4367-ae55-458c81c793a1 HTTP/1.1" 200 OK -2026-02-26 13:46:45,100 [INFO] papermind.api: [e5e9021f] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63024 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:46,124 [INFO] papermind.api: [4840de1a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63024 - "GET /tasks/active HTTP/1.1" 200 OK -INFO: 127.0.0.1:63052 - "OPTIONS /pipelines/skim/e2f20031-ead3-4367-ae55-458c81c793a1 HTTP/1.1" 200 OK -2026-02-26 13:46:47,101 [INFO] papermind.api: [635d0c0d] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63054 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:48,126 [INFO] papermind.api: [ec05fe80] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63054 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:49,100 [INFO] papermind.api: [af12a62a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63054 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:50,124 [INFO] papermind.api: [6edbff05] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63054 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:51,102 [INFO] papermind.api: [f2be065a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63054 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:52,125 [INFO] papermind.api: [29733014] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63069 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:53,100 [INFO] papermind.api: [611a6cad] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63069 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:54,125 [INFO] papermind.api: [ffa5acd6] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63069 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:55,790 [INFO] papermind.api: [92921470] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63069 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:56,125 [INFO] papermind.api: [3335a109] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63069 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:57,102 [INFO] papermind.api: [76d89795] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63078 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:58,123 [INFO] papermind.api: [9b8c5234] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63078 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:46:59,101 [INFO] papermind.api: [c7edef8b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63078 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:00,124 [INFO] papermind.api: [1bec72af] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63078 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:01,101 [INFO] papermind.api: [e470d7b3] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63078 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:02,126 [INFO] papermind.api: [87193ec8] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63096 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:03,101 [INFO] papermind.api: [1f7c0d41] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63096 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:04,124 [INFO] papermind.api: [6aaf4449] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63096 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:05,103 [INFO] papermind.api: [84396f69] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63096 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:06,124 [INFO] papermind.api: [16e69e18] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63096 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:07,794 [INFO] papermind.api: [3858ea1f] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63103 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:08,124 [INFO] papermind.api: [58575612] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63103 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:09,100 [INFO] papermind.api: [281cf7ef] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63103 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:10,123 [INFO] papermind.api: [d6996647] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63103 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:11,101 [INFO] papermind.api: [1e7d1d26] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63103 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:12,793 [INFO] papermind.api: [ce003b89] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:63116 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:12,794 [INFO] papermind.api: [5213292c] GET /papers/folder-stats → 200 (4ms) -INFO: 127.0.0.1:63115 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:47:13,100 [INFO] papermind.api: [dcfa52a9] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63115 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:14,435 [INFO] papermind.api: [3d33b8d6] GET /settings/llm-providers → 200 (2ms) -INFO: 127.0.0.1:63115 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:47:14,436 [INFO] papermind.api: [dd28476d] GET /settings/llm-providers/active → 200 (3ms) -INFO: 127.0.0.1:63116 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:47:14,439 [INFO] papermind.api: [63e29fdc] GET /settings/llm-providers/active → 200 (1ms) -INFO: 127.0.0.1:63115 - "GET /settings/llm-providers/active HTTP/1.1" 200 OK -2026-02-26 13:47:14,439 [INFO] papermind.api: [b4c93896] GET /settings/llm-providers → 200 (2ms) -INFO: 127.0.0.1:63118 - "GET /settings/llm-providers HTTP/1.1" 200 OK -2026-02-26 13:47:14,793 [INFO] papermind.api: [c557f86c] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:63118 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:14,856 [INFO] papermind.api: [63e87314] GET /papers/folder-stats → 200 (3ms) -INFO: 127.0.0.1:63118 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:47:15,103 [INFO] papermind.api: [7da7c28e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63118 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:16,168 [INFO] papermind.api: [cd0edcc1] GET /settings/daily-report-config → 200 (3ms) -INFO: 127.0.0.1:63115 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:47:16,170 [INFO] papermind.api: [946529af] GET /settings/email-configs → 200 (4ms) -INFO: 127.0.0.1:63118 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:47:16,173 [INFO] papermind.api: [d08c2b45] GET /settings/daily-report-config → 200 (3ms) -INFO: 127.0.0.1:63116 - "GET /settings/daily-report-config HTTP/1.1" 200 OK -2026-02-26 13:47:16,174 [INFO] papermind.api: [8f65e793] GET /settings/email-configs → 200 (2ms) -INFO: 127.0.0.1:63115 - "GET /settings/email-configs HTTP/1.1" 200 OK -2026-02-26 13:47:16,791 [INFO] papermind.api: [45ddb396] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63127 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:17,101 [INFO] papermind.api: [215f8a9c] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63127 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:18,792 [INFO] papermind.api: [7c86629f] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63127 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:19,101 [INFO] papermind.api: [71f409e0] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63127 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:20,790 [INFO] papermind.api: [9d7d9f0b] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63127 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:21,100 [INFO] papermind.api: [bb8ea1cf] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63127 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:22,791 [INFO] papermind.api: [50747f1c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63140 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:23,100 [INFO] papermind.api: [3627da62] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63140 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:24,790 [INFO] papermind.api: [da805309] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63140 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:25,102 [INFO] papermind.api: [b83c26a4] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63140 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:26,791 [INFO] papermind.api: [bc6ec820] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63151 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:27,101 [INFO] papermind.api: [6624d08a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63151 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:28,492 [INFO] httpx: HTTP Request: POST https://open.bigmodel.cn/api/paas/v4/chat/completions "HTTP/1.1 200 OK" -2026-02-26 13:47:28,508 [INFO] papermind.api: [5d771cdc] POST /pipelines/skim/e2f20031-ead3-4367-ae55-458c81c793a1 → 200 (41645ms) -INFO: 127.0.0.1:63052 - "POST /pipelines/skim/e2f20031-ead3-4367-ae55-458c81c793a1 HTTP/1.1" 200 OK -2026-02-26 13:47:28,512 [INFO] papermind.api: [d3189fcd] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63052 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:28,791 [INFO] papermind.api: [99a02b1f] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63052 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:30,518 [INFO] papermind.api: [0951b1ef] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63052 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:30,806 [INFO] papermind.api: [9822a999] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63052 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:32,016 [INFO] papermind.api: [6cb71928] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63158 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:32,791 [INFO] papermind.api: [0d4c887e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63158 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:34,016 [INFO] papermind.api: [05d5ad01] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63158 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:34,805 [INFO] papermind.api: [868a2b37] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63158 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:36,016 [INFO] papermind.api: [eabf1bbc] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63158 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:36,791 [INFO] papermind.api: [52b36828] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63169 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:38,023 [INFO] papermind.api: [d06cc0a3] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63169 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:38,790 [INFO] papermind.api: [509a20f4] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63169 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:40,015 [INFO] papermind.api: [db3b5bd7] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63169 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:40,790 [INFO] papermind.api: [4b15e5d4] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63169 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:42,018 [INFO] papermind.api: [e859e310] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63178 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:42,793 [INFO] papermind.api: [4fbe4839] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63180 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:42,797 [INFO] papermind.api: [6447cb7a] GET /papers/folder-stats → 200 (6ms) -INFO: 127.0.0.1:63178 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:47:44,016 [INFO] papermind.api: [f421ab8a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63178 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:44,790 [INFO] papermind.api: [c33b79bc] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63178 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:44,855 [INFO] papermind.api: [d590b33e] GET /papers/folder-stats → 200 (2ms) -INFO: 127.0.0.1:63178 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:47:46,016 [INFO] papermind.api: [388ac550] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63178 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:46,791 [INFO] papermind.api: [88e52db8] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63195 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:48,020 [INFO] papermind.api: [1a9c5ca0] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:63195 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:48,790 [INFO] papermind.api: [ea6bbc06] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63195 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:50,016 [INFO] papermind.api: [b48f76c2] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63195 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:50,790 [INFO] papermind.api: [da106d60] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63195 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:52,017 [INFO] papermind.api: [0d7604b4] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63204 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:52,791 [INFO] papermind.api: [7b54e0c3] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63204 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:54,016 [INFO] papermind.api: [13d6f370] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63204 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:54,791 [INFO] papermind.api: [0a4682aa] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63204 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:56,017 [INFO] papermind.api: [e5097569] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63204 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:56,791 [INFO] papermind.api: [0cac8134] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63213 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:58,016 [INFO] papermind.api: [fd6365de] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63213 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:47:58,791 [INFO] papermind.api: [ebd637b5] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63213 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:00,017 [INFO] papermind.api: [6d1ca581] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63213 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:00,790 [INFO] papermind.api: [0f243f1a] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63213 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:02,019 [INFO] papermind.api: [284c0469] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63224 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:02,791 [INFO] papermind.api: [a7811eaf] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63224 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:04,016 [INFO] papermind.api: [f392a979] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63224 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:04,790 [INFO] papermind.api: [8923650c] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63224 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:06,017 [INFO] papermind.api: [4849575d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63224 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:06,791 [INFO] papermind.api: [dc5add78] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63236 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:08,016 [INFO] papermind.api: [9408327a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63236 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:08,790 [INFO] papermind.api: [a36e28ee] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63236 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:10,016 [INFO] papermind.api: [d8a9f1d7] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63236 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:10,790 [INFO] papermind.api: [9a9686c7] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63236 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:12,016 [INFO] papermind.api: [2f49a430] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63245 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:14,016 [INFO] papermind.api: [09879fbd] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63245 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:14,861 [INFO] papermind.api: [4b2a2355] GET /papers/folder-stats → 200 (8ms) -INFO: 127.0.0.1:63245 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:48:16,020 [INFO] papermind.api: [976e471e] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:63245 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:18,016 [INFO] papermind.api: [37400a23] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63252 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:20,016 [INFO] papermind.api: [9fe9cf9f] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63252 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:22,018 [INFO] papermind.api: [8a1da363] GET /tasks/active → 200 (1ms) +INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) +INFO: Started reloader process [59587] using StatReload +INFO: Started server process [59602] +INFO: Waiting for application startup. +INFO: Application startup complete. +INFO: 127.0.0.1:63243 - "OPTIONS /auth/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:63244 - "OPTIONS /auth/status HTTP/1.1" 200 OK +2026-03-17 15:01:44 [INFO] papermind.api (main.py:39): [614c0331] GET /auth/status → 200 (5ms) +INFO: 127.0.0.1:63244 - "GET /auth/status HTTP/1.1" 200 OK +2026-03-17 15:01:44 [INFO] papermind.api (main.py:39): [d07b1978] GET /auth/status → 200 (0ms) +INFO: 127.0.0.1:63243 - "GET /auth/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:63243 - "OPTIONS /papers/folder-stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:63244 - "OPTIONS /today HTTP/1.1" 200 OK +INFO: 127.0.0.1:63256 - "OPTIONS /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:63258 - "OPTIONS /papers/folder-stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:63259 - "OPTIONS /today HTTP/1.1" 200 OK +INFO: 127.0.0.1:63260 - "OPTIONS /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:01:44 [INFO] papermind.api (main.py:39): [6f943e9c] GET /tasks/active → 200 (14ms) +INFO: 127.0.0.1:63260 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:01:44 [INFO] papermind.api (main.py:39): [3357875e] GET /tasks/active → 200 (11ms) INFO: 127.0.0.1:63259 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:24,016 [INFO] papermind.api: [05ba5376] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63259 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:26,019 [INFO] papermind.api: [818f264c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63259 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:28,016 [INFO] papermind.api: [387563eb] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63276 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:30,017 [INFO] papermind.api: [5f1d6daa] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63276 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:32,016 [INFO] papermind.api: [60e0aa39] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63283 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:34,016 [INFO] papermind.api: [44492470] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63283 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:36,018 [INFO] papermind.api: [70d1816d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63283 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:38,016 [INFO] papermind.api: [0e4cf541] GET /tasks/active → 200 (0ms) +2026-03-17 15:01:44 [INFO] papermind.api (main.py:39): [e28f16ff] GET /papers/folder-stats → 200 (62ms) +INFO: 127.0.0.1:63244 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:01:44 [INFO] papermind.api (main.py:39): [ffa70a30] GET /papers/folder-stats → 200 (1ms) +INFO: 127.0.0.1:63259 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:01:44 [INFO] papermind.api (main.py:39): [f5a13d24] GET /today → 200 (132ms) +INFO: 127.0.0.1:63243 - "GET /today HTTP/1.1" 200 OK +2026-03-17 15:01:44 [INFO] papermind.api (main.py:39): [b9dddafb] GET /today → 200 (0ms) +INFO: 127.0.0.1:63259 - "GET /today HTTP/1.1" 200 OK +INFO: 127.0.0.1:63259 - "OPTIONS /agent/chat HTTP/1.1" 200 OK +2026-03-17 15:01:49 [INFO] papermind.api (main.py:39): [fe6e7a79] POST /agent/chat → 200 (6ms) +2026-03-17 15:01:54 [INFO] papermind.api (main.py:39): [ce16aad3] GET /tasks/active → 200 (1ms) INFO: 127.0.0.1:63296 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:40,019 [INFO] papermind.api: [3205f80c] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:63296 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:42,021 [INFO] papermind.api: [da388e4e] GET /tasks/active → 200 (3ms) -INFO: 127.0.0.1:63315 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:44,016 [INFO] papermind.api: [c96c8ade] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63315 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:44,875 [INFO] papermind.api: [429f513c] GET /papers/folder-stats → 200 (21ms) -INFO: 127.0.0.1:63315 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:48:46,016 [INFO] papermind.api: [3a0d7b84] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63315 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:48,018 [INFO] papermind.api: [74a260ee] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63414 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:50,016 [INFO] papermind.api: [41020966] GET /tasks/active → 200 (0ms) +2026-03-17 15:02:04 [INFO] papermind.api (main.py:39): [ed007611] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:63346 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:02:14 [INFO] papermind.api (main.py:39): [9221a7b8] GET /tasks/active → 200 (0ms) +INFO: 127.0.0.1:63350 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:02:24 [INFO] papermind.api (main.py:39): [8b26b671] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:63372 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:63259 - "POST /agent/chat HTTP/1.1" 200 OK +INFO: 127.0.0.1:63395 - "OPTIONS /actions?limit=30 HTTP/1.1" 200 OK +INFO: 127.0.0.1:63396 - "OPTIONS /papers/latest?page=1&page_size=20&sort_by=created_at&sort_order=desc HTTP/1.1" 200 OK +INFO: 127.0.0.1:63399 - "OPTIONS /actions?limit=30 HTTP/1.1" 200 OK +INFO: 127.0.0.1:63400 - "OPTIONS /papers/latest?page=1&page_size=20&sort_by=created_at&sort_order=desc HTTP/1.1" 200 OK +2026-03-17 15:02:30 [INFO] papermind.api (main.py:39): [b894bb8d] GET /papers/folder-stats → 200 (24ms) +2026-03-17 15:02:30 [INFO] papermind.api (main.py:39): [359f145d] GET /actions → 200 (19ms) +INFO: 127.0.0.1:63393 - "GET /papers/folder-stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:63400 - "GET /actions?limit=30 HTTP/1.1" 200 OK +2026-03-17 15:02:30 [INFO] papermind.api (main.py:39): [63a4d17e] GET /papers/latest → 200 (36ms) +2026-03-17 15:02:30 [INFO] papermind.api (main.py:39): [c70bf5aa] GET /papers/folder-stats → 200 (5ms) +INFO: 127.0.0.1:63396 - "GET /papers/latest?page=1&page_size=20&sort_by=created_at&sort_order=desc HTTP/1.1" 200 OK +2026-03-17 15:02:30 [INFO] papermind.api (main.py:39): [3fa2ab6f] GET /actions → 200 (6ms) +INFO: 127.0.0.1:63399 - "GET /papers/folder-stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:63393 - "GET /actions?limit=30 HTTP/1.1" 200 OK +2026-03-17 15:02:30 [INFO] papermind.api (main.py:39): [a4e722fa] GET /papers/latest → 200 (12ms) +INFO: 127.0.0.1:63400 - "GET /papers/latest?page=1&page_size=20&sort_by=created_at&sort_order=desc HTTP/1.1" 200 OK +2026-03-17 15:02:34 [INFO] papermind.api (main.py:39): [54731dd5] GET /tasks/active → 200 (0ms) +INFO: 127.0.0.1:63400 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:63400 - "OPTIONS /system/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:63400 - "OPTIONS /metrics/costs?days=7 HTTP/1.1" 200 OK +INFO: 127.0.0.1:63408 - "OPTIONS /metrics/costs?days=7 HTTP/1.1" 200 OK +INFO: 127.0.0.1:63410 - "OPTIONS /pipelines/runs?limit=10 HTTP/1.1" 200 OK +INFO: 127.0.0.1:63412 - "OPTIONS /system/status HTTP/1.1" 200 OK +INFO: 127.0.0.1:63400 - "OPTIONS /pipelines/runs?limit=10 HTTP/1.1" 200 OK +2026-03-17 15:02:37 [INFO] papermind.api (main.py:39): [dd7f8cd3] GET /today → 200 (12ms) +INFO: 127.0.0.1:63411 - "GET /today HTTP/1.1" 200 OK +2026-03-17 15:02:37 [INFO] papermind.api (main.py:39): [e3a34f61] GET /metrics/costs → 200 (16ms) +2026-03-17 15:02:37 [INFO] papermind.api (main.py:39): [17c0d254] GET /pipelines/runs → 200 (15ms) +INFO: 127.0.0.1:63410 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK +INFO: 127.0.0.1:63412 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK +2026-03-17 15:02:37 [INFO] papermind.api (main.py:39): [f20cc439] GET /today → 200 (1ms) +INFO: 127.0.0.1:63400 - "GET /today HTTP/1.1" 200 OK +2026-03-17 15:02:37 [INFO] papermind.api (main.py:39): [a4a46507] GET /metrics/costs → 200 (3ms) +2026-03-17 15:02:37 [INFO] papermind.api (main.py:39): [a6d00778] GET /pipelines/runs → 200 (3ms) +INFO: 127.0.0.1:63411 - "GET /metrics/costs?days=7 HTTP/1.1" 200 OK +INFO: 127.0.0.1:63410 - "GET /pipelines/runs?limit=10 HTTP/1.1" 200 OK +2026-03-17 15:02:37 [INFO] papermind.api (main.py:39): [7ee407f3] GET /system/status → 200 (30ms) +INFO: 127.0.0.1:63408 - "GET /system/status HTTP/1.1" 200 OK +2026-03-17 15:02:37 [INFO] papermind.api (main.py:39): [70605a9e] GET /system/status → 200 (14ms) +INFO: 127.0.0.1:63410 - "GET /system/status HTTP/1.1" 200 OK +2026-03-17 15:02:44 [INFO] papermind.api (main.py:39): [7b1569e2] GET /papers/folder-stats → 200 (1ms) +INFO: 127.0.0.1:63259 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:02:44 [INFO] papermind.api (main.py:39): [7493da11] GET /tasks/active → 200 (1ms) INFO: 127.0.0.1:63414 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:50,815 [INFO] papermind.api: [d9e45c0b] GET /tasks/active → 200 (6ms) -INFO: 127.0.0.1:63460 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:50,817 [INFO] papermind.api: [a5676ba8] GET /papers/folder-stats → 200 (9ms) -INFO: 127.0.0.1:63414 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:48:52,017 [INFO] papermind.api: [0335262c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63513 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:54,017 [INFO] papermind.api: [6f90d1a6] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63513 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:56,016 [INFO] papermind.api: [1aed4bed] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63513 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:48:58,017 [INFO] papermind.api: [5ca71949] GET /tasks/active → 200 (1ms) +2026-03-17 15:02:54 [INFO] papermind.api (main.py:39): [7735e363] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:63442 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:02:59 [INFO] papermind.api (main.py:39): [9efe85ec] GET /papers/folder-stats → 200 (3ms) +INFO: 127.0.0.1:63442 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:02:59 [INFO] papermind.api (main.py:39): [e5f730e4] GET /papers/folder-stats → 200 (3ms) +INFO: 127.0.0.1:63482 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:02:59 [INFO] papermind.api (main.py:39): [555385aa] GET /actions → 200 (8ms) +2026-03-17 15:02:59 [INFO] papermind.api (main.py:39): [ba5a94aa] GET /papers/latest → 200 (8ms) +INFO: 127.0.0.1:63479 - "GET /actions?limit=30 HTTP/1.1" 200 OK +INFO: 127.0.0.1:63480 - "GET /papers/latest?page=1&page_size=20&sort_by=created_at&sort_order=desc HTTP/1.1" 200 OK +2026-03-17 15:02:59 [INFO] papermind.api (main.py:39): [8e5eb62c] GET /actions → 200 (2ms) +INFO: 127.0.0.1:63482 - "GET /actions?limit=30 HTTP/1.1" 200 OK +2026-03-17 15:02:59 [INFO] papermind.api (main.py:39): [7fe8ef4a] GET /papers/latest → 200 (5ms) +INFO: 127.0.0.1:63442 - "GET /papers/latest?page=1&page_size=20&sort_by=created_at&sort_order=desc HTTP/1.1" 200 OK +INFO: 127.0.0.1:63442 - "OPTIONS /topics?enabled_only=false HTTP/1.1" 200 OK +INFO: 127.0.0.1:63482 - "OPTIONS /topics?enabled_only=false HTTP/1.1" 200 OK +2026-03-17 15:03:01 [INFO] papermind.api (main.py:39): [d53cd92d] GET /topics → 200 (4ms) +INFO: 127.0.0.1:63442 - "GET /topics?enabled_only=false HTTP/1.1" 200 OK +2026-03-17 15:03:01 [INFO] papermind.api (main.py:39): [281ecd9e] GET /topics → 200 (2ms) +INFO: 127.0.0.1:63482 - "GET /topics?enabled_only=false HTTP/1.1" 200 OK +2026-03-17 15:03:02 [INFO] papermind.api (main.py:39): [d4944a66] GET /today → 200 (1ms) +INFO: 127.0.0.1:63482 - "GET /today HTTP/1.1" 200 OK +2026-03-17 15:03:02 [INFO] papermind.api (main.py:39): [62912ab4] GET /today → 200 (1ms) +INFO: 127.0.0.1:63442 - "GET /today HTTP/1.1" 200 OK +2026-03-17 15:03:04 [INFO] papermind.api (main.py:39): [ca9eb14a] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:63442 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:03:09 [INFO] papermind.api (main.py:39): [ff6e7bd0] POST /agent/chat → 200 (8ms) +2026-03-17 15:03:14 [INFO] papermind.api (main.py:39): [686408aa] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:63498 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:63488 - "POST /agent/chat HTTP/1.1" 200 OK +2026-03-17 15:03:24 [INFO] papermind.api (main.py:39): [2e2a630c] GET /tasks/active → 200 (0ms) +INFO: 127.0.0.1:63528 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:03:34 [INFO] papermind.api (main.py:39): [1d81e02b] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:63542 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:03:44 [INFO] papermind.api (main.py:39): [1463b0a1] GET /tasks/active → 200 (8ms) +INFO: 127.0.0.1:63572 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:03:44 [INFO] papermind.api (main.py:39): [754df979] GET /papers/folder-stats → 200 (12ms) +INFO: 127.0.0.1:63571 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:03:54 [INFO] papermind.api (main.py:39): [992e8985] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:63595 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:04:04 [INFO] papermind.api (main.py:39): [7fbe9144] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:63625 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:04:14 [INFO] papermind.api (main.py:39): [88f58b1d] GET /tasks/active → 200 (1ms) INFO: 127.0.0.1:63636 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:00,017 [INFO] papermind.api: [11350c8f] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63636 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:02,028 [INFO] papermind.api: [1eecc71a] GET /tasks/active → 200 (4ms) -INFO: 127.0.0.1:63671 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:04,017 [INFO] papermind.api: [3f6141f9] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63671 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:06,021 [INFO] papermind.api: [75c3f84a] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:63671 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:08,017 [INFO] papermind.api: [f0c58645] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63709 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:10,017 [INFO] papermind.api: [be7bebd9] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63709 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:12,020 [INFO] papermind.api: [015950f5] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63739 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:14,017 [INFO] papermind.api: [d90666b5] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63739 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:14,859 [INFO] papermind.api: [305d2eeb] GET /papers/folder-stats → 200 (5ms) -INFO: 127.0.0.1:63739 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:49:16,017 [INFO] papermind.api: [288d2912] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63739 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:18,018 [INFO] papermind.api: [90285a50] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63761 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:20,016 [INFO] papermind.api: [3b5dabbc] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63761 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:22,017 [INFO] papermind.api: [d9dc8675] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63772 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:24,016 [INFO] papermind.api: [d9d8e1cd] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63772 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:26,017 [INFO] papermind.api: [8069201e] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63772 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:28,016 [INFO] papermind.api: [f3928245] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63793 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:30,018 [INFO] papermind.api: [ef80c9e6] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63793 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:32,018 [INFO] papermind.api: [b1efd366] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63826 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:34,016 [INFO] papermind.api: [adc56506] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63826 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:36,018 [INFO] papermind.api: [73019433] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63876 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:38,016 [INFO] papermind.api: [4b49d21a] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63876 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:40,018 [INFO] papermind.api: [1aa5c889] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63876 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:42,019 [INFO] papermind.api: [5191a826] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63918 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:44,017 [INFO] papermind.api: [52b517f8] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63918 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:44,864 [INFO] papermind.api: [c59e0edd] GET /papers/folder-stats → 200 (8ms) -INFO: 127.0.0.1:63918 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:49:46,027 [INFO] papermind.api: [aa0aab77] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63950 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:48,017 [INFO] papermind.api: [869b4e63] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63950 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:50,018 [INFO] papermind.api: [60af9c48] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63950 - "GET /tasks/active HTTP/1.1" 200 OK -INFO: 127.0.0.1:63969 - "OPTIONS /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:49:50,820 [INFO] papermind.api: [dc4e505f] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:63968 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:50,828 [INFO] papermind.api: [c26d6b00] GET /papers/folder-stats → 200 (8ms) -INFO: 127.0.0.1:63969 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:49:52,018 [INFO] papermind.api: [7947ca38] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63969 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:54,016 [INFO] papermind.api: [422ab324] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63969 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:56,022 [INFO] papermind.api: [0545935e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63988 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:49:58,018 [INFO] papermind.api: [c06b955c] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:63988 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:00,016 [INFO] papermind.api: [d5118cb0] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:63988 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:02,018 [INFO] papermind.api: [8fa3956b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:64028 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:04,021 [INFO] papermind.api: [c588d582] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:64028 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:06,018 [INFO] papermind.api: [2cbf6714] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:64051 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:08,018 [INFO] papermind.api: [59bbcd3d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:64051 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:10,022 [INFO] papermind.api: [bbf92d6b] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:64051 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:12,018 [INFO] papermind.api: [b1c0d848] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:64083 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:14,017 [INFO] papermind.api: [2a56a7c8] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:64083 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:14,868 [INFO] papermind.api: [be8b9683] GET /papers/folder-stats → 200 (13ms) -INFO: 127.0.0.1:64083 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:50:16,019 [INFO] papermind.api: [d63796eb] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:64101 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:18,020 [INFO] papermind.api: [3c608cf2] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:64101 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:20,017 [INFO] papermind.api: [ac140b7e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:64101 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:22,020 [INFO] papermind.api: [67950471] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:64127 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:24,016 [INFO] papermind.api: [c96a2eb8] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:64127 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:26,069 [INFO] papermind.api: [2a1be3d7] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:64139 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:28,020 [INFO] papermind.api: [64932b61] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:64139 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:30,017 [INFO] papermind.api: [7aee8ef8] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:64139 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:32,017 [INFO] papermind.api: [cccb6da5] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:64163 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:34,019 [INFO] papermind.api: [71a014c9] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:64163 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:36,017 [INFO] papermind.api: [3409f721] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:64171 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:38,018 [INFO] papermind.api: [7d7c228e] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:64171 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:40,018 [INFO] papermind.api: [2412e9c8] GET /tasks/active → 200 (2ms) -INFO: 127.0.0.1:64171 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:42,018 [INFO] papermind.api: [2aeda581] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:64199 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:44,018 [INFO] papermind.api: [53ccc03d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:64199 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:44,864 [INFO] papermind.api: [060bb2c6] GET /papers/folder-stats → 200 (8ms) -INFO: 127.0.0.1:64199 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:50:46,023 [INFO] papermind.api: [7e08548d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:64239 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:48,017 [INFO] papermind.api: [437ca375] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:64239 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:50,017 [INFO] papermind.api: [dda5cdcb] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:64239 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:50,856 [INFO] papermind.api: [d2ab5983] GET /tasks/active → 200 (7ms) -INFO: 127.0.0.1:64275 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:50,858 [INFO] papermind.api: [8f51d848] GET /papers/folder-stats → 200 (9ms) -INFO: 127.0.0.1:64276 - "GET /papers/folder-stats HTTP/1.1" 200 OK -2026-02-26 13:50:52,793 [INFO] papermind.api: [a5575486] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:64276 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:54,792 [INFO] papermind.api: [f3859277] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:64276 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:56,792 [INFO] papermind.api: [a7535528] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:64290 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:50:58,792 [INFO] papermind.api: [69f6a44d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:64290 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:51:00,792 [INFO] papermind.api: [bdba1d61] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:64305 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:51:02,852 [INFO] papermind.api: [6fe4ac57] GET /tasks/active → 200 (11ms) -INFO: 127.0.0.1:64305 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:51:04,795 [INFO] papermind.api: [fd3e157b] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:64305 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:51:06,793 [INFO] papermind.api: [02c64259] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:64337 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:51:08,872 [INFO] papermind.api: [50515430] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:64337 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:51:10,793 [INFO] papermind.api: [d911a77d] GET /tasks/active → 200 (1ms) -INFO: 127.0.0.1:64374 - "GET /tasks/active HTTP/1.1" 200 OK -2026-02-26 13:51:12,802 [INFO] papermind.api: [2867ee63] GET /tasks/active → 200 (0ms) -INFO: 127.0.0.1:64374 - "GET /tasks/active HTTP/1.1" 200 OK -WARNING: StatReload detected changes in 'apps/api/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [99594] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:190: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [3307] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'apps/api/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [3307] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:191: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [14668] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'apps/api/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [14668] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:201: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [14754] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'packages/domain/task_tracker.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [14754] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:201: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [15381] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'apps/api/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [15381] -Process SpawnProcess-7: +2026-03-17 15:04:24 [INFO] papermind.api (main.py:39): [a272ed57] GET /tasks/active → 200 (3ms) +INFO: 127.0.0.1:63699 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:04:34 [INFO] papermind.api (main.py:39): [9ffb5c06] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:63733 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:04:44 [INFO] papermind.api (main.py:39): [a1d246f6] GET /tasks/active → 200 (5ms) +INFO: 127.0.0.1:63753 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:04:44 [INFO] papermind.api (main.py:39): [8f6bdb56] GET /papers/folder-stats → 200 (7ms) +INFO: 127.0.0.1:63752 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:04:54 [INFO] papermind.api (main.py:39): [2a5a7d73] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:63773 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:05:04 [INFO] papermind.api (main.py:39): [7c75a7c5] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:63813 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:05:14 [INFO] papermind.api (main.py:39): [78772bdc] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:63819 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:05:24 [INFO] papermind.api (main.py:39): [4d65cb04] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:63852 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:05:34 [INFO] papermind.api (main.py:39): [dd78d8cd] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:63870 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:05:44 [INFO] papermind.api (main.py:39): [fa6eb1f6] GET /tasks/active → 200 (5ms) +INFO: 127.0.0.1:63892 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:05:44 [INFO] papermind.api (main.py:39): [42ed2680] GET /papers/folder-stats → 200 (7ms) +INFO: 127.0.0.1:63891 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:05:54 [INFO] papermind.api (main.py:39): [9a11d12a] GET /tasks/active → 200 (0ms) +INFO: 127.0.0.1:63926 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:06:04 [INFO] papermind.api (main.py:39): [609604f4] GET /tasks/active → 200 (2ms) +INFO: 127.0.0.1:63994 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:06:14 [INFO] papermind.api (main.py:39): [fe21fb85] GET /tasks/active → 200 (0ms) +INFO: 127.0.0.1:63998 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:06:24 [INFO] papermind.api (main.py:39): [66d8241a] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:64017 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:06:34 [INFO] papermind.api (main.py:39): [24196fd6] GET /tasks/active → 200 (0ms) +INFO: 127.0.0.1:64030 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:06:44 [INFO] papermind.api (main.py:39): [5da00846] GET /tasks/active → 200 (4ms) +INFO: 127.0.0.1:64040 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:06:44 [INFO] papermind.api (main.py:39): [91bea72b] GET /papers/folder-stats → 200 (5ms) +INFO: 127.0.0.1:64039 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:06:54 [INFO] papermind.api (main.py:39): [b79c2aae] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:64066 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:07:01 [INFO] papermind.api (main.py:39): [b361008c] POST /agent/chat → 200 (5ms) +2026-03-17 15:07:04 [INFO] papermind.api (main.py:39): [52257350] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:64110 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:07:14 [INFO] papermind.api (main.py:39): [8fcda6bc] GET /tasks/active → 200 (2ms) +INFO: 127.0.0.1:64167 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:07:24 [INFO] papermind.api (main.py:39): [1c5bf4e7] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:64225 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:64098 - "POST /agent/chat HTTP/1.1" 200 OK +2026-03-17 15:07:34 [INFO] papermind.api (main.py:39): [5cc3f447] GET /tasks/active → 200 (0ms) +INFO: 127.0.0.1:64237 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:07:44 [INFO] papermind.api (main.py:39): [770849b7] GET /tasks/active → 200 (6ms) +INFO: 127.0.0.1:64248 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:07:44 [INFO] papermind.api (main.py:39): [76037e4a] GET /papers/folder-stats → 200 (10ms) +INFO: 127.0.0.1:64247 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:07:54 [INFO] papermind.api (main.py:39): [d4e89102] GET /tasks/active → 200 (0ms) +INFO: 127.0.0.1:64264 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:08:04 [INFO] papermind.api (main.py:39): [5a45aaa5] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:64295 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:08:14 [INFO] papermind.api (main.py:39): [7de0fb4e] GET /tasks/active → 200 (2ms) +INFO: 127.0.0.1:64304 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:08:24 [INFO] papermind.api (main.py:39): [a936cc74] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:64336 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:08:34 [INFO] papermind.api (main.py:39): [5fe77369] GET /tasks/active → 200 (0ms) +INFO: 127.0.0.1:64342 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:08:44 [INFO] papermind.api (main.py:39): [26d16728] GET /tasks/active → 200 (4ms) +INFO: 127.0.0.1:64356 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:08:44 [INFO] papermind.api (main.py:39): [ff5644a9] GET /papers/folder-stats → 200 (6ms) +INFO: 127.0.0.1:64355 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:08:54 [INFO] papermind.api (main.py:39): [53a2aa4b] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:64372 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:09:04 [INFO] papermind.api (main.py:39): [a199c915] GET /tasks/active → 200 (0ms) +INFO: 127.0.0.1:64415 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:09:14 [INFO] papermind.api (main.py:39): [f91451bd] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:64423 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:09:24 [INFO] papermind.api (main.py:39): [e7238aca] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:64447 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:09:35 [INFO] papermind.api (main.py:39): [68792489] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:64489 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:09:44 [INFO] papermind.api (main.py:39): [410a8f88] GET /tasks/active → 200 (16ms) +INFO: 127.0.0.1:64516 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:09:44 [INFO] papermind.api (main.py:39): [d596e1fb] GET /papers/folder-stats → 200 (20ms) +INFO: 127.0.0.1:64515 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:09:55 [INFO] papermind.api (main.py:39): [01d8ef1e] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:64536 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:10:05 [INFO] papermind.api (main.py:39): [80b8e4e9] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:64600 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:10:15 [INFO] papermind.api (main.py:39): [b58cc12c] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:64604 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:10:25 [INFO] papermind.api (main.py:39): [51963050] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:64623 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:10:35 [INFO] papermind.api (main.py:39): [225f6fbf] GET /tasks/active → 200 (0ms) +INFO: 127.0.0.1:64641 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:10:45 [INFO] papermind.api (main.py:39): [f4ff7299] GET /tasks/active → 200 (4ms) +INFO: 127.0.0.1:64650 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:10:45 [INFO] papermind.api (main.py:39): [748978d9] GET /papers/folder-stats → 200 (5ms) +INFO: 127.0.0.1:64648 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:10:54 [INFO] papermind.api (main.py:39): [5139f074] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:64673 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:11:04 [INFO] papermind.api (main.py:39): [85c9ce44] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:64741 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:11:14 [INFO] papermind.api (main.py:39): [4e8d5811] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:64744 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:11:24 [INFO] papermind.api (main.py:39): [f576b86d] GET /tasks/active → 200 (0ms) +INFO: 127.0.0.1:64771 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:11:34 [INFO] papermind.api (main.py:39): [772447c7] GET /tasks/active → 200 (12ms) +INFO: 127.0.0.1:64790 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:11:44 [INFO] papermind.api (main.py:39): [9d879977] GET /tasks/active → 200 (3ms) +INFO: 127.0.0.1:64800 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:11:44 [INFO] papermind.api (main.py:39): [c825662f] GET /papers/folder-stats → 200 (5ms) +INFO: 127.0.0.1:64799 - "GET /papers/folder-stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:64824 - "OPTIONS /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:11:54 [INFO] papermind.api (main.py:39): [3a69bc48] GET /tasks/active → 200 (5ms) +INFO: 127.0.0.1:64824 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:12:04 [INFO] papermind.api (main.py:39): [825d9212] GET /tasks/active → 200 (3ms) +INFO: 127.0.0.1:64877 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:12:14 [INFO] papermind.api (main.py:39): [fd4f8a31] GET /tasks/active → 200 (0ms) +INFO: 127.0.0.1:64886 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:12:24 [INFO] papermind.api (main.py:39): [41d12af3] GET /tasks/active → 200 (3ms) +INFO: 127.0.0.1:64972 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:12:34 [INFO] papermind.api (main.py:39): [617dfb65] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:65031 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:65048 - "OPTIONS /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:12:44 [INFO] papermind.api (main.py:39): [d912bc40] GET /tasks/active → 200 (5ms) +INFO: 127.0.0.1:65049 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:12:44 [INFO] papermind.api (main.py:39): [b0641c89] GET /papers/folder-stats → 200 (6ms) +INFO: 127.0.0.1:65048 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:12:54 [INFO] papermind.api (main.py:39): [365b94da] GET /tasks/active → 200 (5ms) +INFO: 127.0.0.1:65072 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:13:04 [INFO] papermind.api (main.py:39): [05fd4b31] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:65118 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:13:14 [INFO] papermind.api (main.py:39): [d5bd10f6] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:65127 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:13:24 [INFO] papermind.api (main.py:39): [1ae3191d] GET /tasks/active → 200 (0ms) +INFO: 127.0.0.1:64098 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:13:34 [INFO] papermind.api (main.py:39): [c23034d0] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:65187 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:13:44 [INFO] papermind.api (main.py:39): [3c722a5c] GET /tasks/active → 200 (4ms) +INFO: 127.0.0.1:65200 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:13:44 [INFO] papermind.api (main.py:39): [8f96c770] GET /papers/folder-stats → 200 (6ms) +INFO: 127.0.0.1:65199 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:13:54 [INFO] papermind.api (main.py:39): [f8d5e412] GET /tasks/active → 200 (2ms) +INFO: 127.0.0.1:65291 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:14:04 [INFO] papermind.api (main.py:39): [8290908a] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:65325 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:14:14 [INFO] papermind.api (main.py:39): [89181e3f] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:65336 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:14:24 [INFO] papermind.api (main.py:39): [1f98b395] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:65360 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:14:34 [INFO] papermind.api (main.py:39): [71f98c2a] GET /tasks/active → 200 (0ms) +INFO: 127.0.0.1:65375 - "GET /tasks/active HTTP/1.1" 200 OK +WARNING: StatReload detected changes in 'packages/ai/brief_service.py'. Reloading... +INFO: Shutting down +INFO: Waiting for application shutdown. +INFO: Application shutdown complete. +INFO: Finished server process [59602] +Process SpawnProcess-2: Traceback (most recent call last): - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/multiprocessing/process.py", line 313, in _bootstrap + File "/opt/homebrew/Cellar/python@3.11/3.11.14_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/multiprocessing/process.py", line 314, in _bootstrap self.run() - ~~~~~~~~^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/multiprocessing/process.py", line 108, in run + File "/opt/homebrew/Cellar/python@3.11/3.11.14_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/multiprocessing/process.py", line 108, in run self._target(*self._args, **self._kwargs) - ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/_subprocess.py", line 80, in subprocess_started + File "/Users/haojiang/Documents/2026/PaperMind/.venv/lib/python3.11/site-packages/uvicorn/_subprocess.py", line 80, in subprocess_started target(sockets=sockets) - ~~~~~~^^^^^^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/server.py", line 75, in run + File "/Users/haojiang/Documents/2026/PaperMind/.venv/lib/python3.11/site-packages/uvicorn/server.py", line 75, in run return asyncio_run(self.serve(sockets=sockets), loop_factory=self.config.get_loop_factory()) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/asyncio/runners.py", line 195, in run + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/haojiang/Documents/2026/PaperMind/.venv/lib/python3.11/site-packages/uvicorn/_compat.py", line 30, in asyncio_run return runner.run(main) - ~~~~~~~~~~^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/asyncio/runners.py", line 118, in run + ^^^^^^^^^^^^^^^^ + File "/opt/homebrew/Cellar/python@3.11/3.11.14_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/asyncio/runners.py", line 118, in run return self._loop.run_until_complete(task) - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/asyncio/base_events.py", line 725, in run_until_complete + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/opt/homebrew/Cellar/python@3.11/3.11.14_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/asyncio/base_events.py", line 654, in run_until_complete return future.result() - ~~~~~~~~~~~~~^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/server.py", line 79, in serve + ^^^^^^^^^^^^^^^ + File "/Users/haojiang/Documents/2026/PaperMind/.venv/lib/python3.11/site-packages/uvicorn/server.py", line 79, in serve await self._serve(sockets) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/server.py", line 86, in _serve + File "/Users/haojiang/Documents/2026/PaperMind/.venv/lib/python3.11/site-packages/uvicorn/server.py", line 86, in _serve config.load() - ~~~~~~~~~~~^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/config.py", line 441, in load + File "/Users/haojiang/Documents/2026/PaperMind/.venv/lib/python3.11/site-packages/uvicorn/config.py", line 441, in load self.loaded_app = import_from_string(self.app) - ~~~~~~~~~~~~~~~~~~^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/importer.py", line 19, in import_from_string + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/haojiang/Documents/2026/PaperMind/.venv/lib/python3.11/site-packages/uvicorn/importer.py", line 19, in import_from_string module = importlib.import_module(module_str) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/importlib/__init__.py", line 88, in import_module + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/opt/homebrew/Cellar/python@3.11/3.11.14_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) - ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1387, in _gcd_import - File "", line 1360, in _find_and_load - File "", line 1331, in _find_and_load_unlocked - File "", line 935, in _load_unlocked - File "", line 1023, in exec_module - File "", line 488, in _call_with_frames_removed - File "/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py", line 142, in - task_manager = TaskManager() - ^^^^^^^^^^^ -NameError: name 'TaskManager' is not defined -WARNING: StatReload detected changes in 'apps/api/main.py'. Reloading... -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:200: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [15586] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'apps/api/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [15586] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:200: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [15669] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'apps/api/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [15669] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:200: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [15764] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'apps/api/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [15764] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:200: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [15861] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'apps/api/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [15861] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:200: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [15971] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'packages/ai/agent_tools.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [15971] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:200: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [16144] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'packages/ai/agent_tools.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [16144] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:200: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [16223] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'packages/ai/auto_read_service.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [16223] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:200: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [16906] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'apps/api/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [16906] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:200: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [17153] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'apps/api/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [17153] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:200: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [17505] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'apps/api/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [17505] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:200: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [17594] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'apps/api/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [17594] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:200: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [18013] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'apps/api/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [18013] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:200: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [18270] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'apps/api/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [18270] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:200: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [18378] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'apps/worker/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [18378] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:200: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [68962] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'apps/worker/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [68962] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:200: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [69036] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'apps/worker/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [69036] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:200: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [69104] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'packages/config.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [69104] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:200: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [69170] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'apps/worker/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [69170] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:200: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [69232] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'apps/worker/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [69232] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:200: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [69284] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'packages/ai/auto_read_service.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [69284] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:200: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [69450] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'apps/worker/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [69450] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:200: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [69979] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'apps/api/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [69979] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:199: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [70193] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'scripts/batch_process_unread.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [70193] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:199: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [88522] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'packages/ai/daily_runner.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [88522] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:199: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [91872] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'packages/ai/daily_runner.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [91872] -Process SpawnProcess-33: -Traceback (most recent call last): - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/multiprocessing/process.py", line 313, in _bootstrap - self.run() - ~~~~~~~~^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/multiprocessing/process.py", line 108, in run - self._target(*self._args, **self._kwargs) - ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - ~~~~~~^^^^^^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/server.py", line 75, in run - return asyncio_run(self.serve(sockets=sockets), loop_factory=self.config.get_loop_factory()) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/asyncio/runners.py", line 195, in run - return runner.run(main) - ~~~~~~~~~~^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/asyncio/runners.py", line 118, in run - return self._loop.run_until_complete(task) - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/asyncio/base_events.py", line 725, in run_until_complete - return future.result() - ~~~~~~~~~~~~~^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/server.py", line 79, in serve - await self._serve(sockets) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/server.py", line 86, in _serve - config.load() - ~~~~~~~~~~~^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/config.py", line 441, in load - self.loaded_app = import_from_string(self.app) - ~~~~~~~~~~~~~~~~~~^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/importlib/__init__.py", line 88, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1387, in _gcd_import - File "", line 1360, in _find_and_load - File "", line 1331, in _find_and_load_unlocked - File "", line 935, in _load_unlocked - File "", line 1023, in exec_module - File "", line 488, in _call_with_frames_removed - File "/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py", line 29, in - from packages.ai.daily_runner import ( - ...<3 lines>... - ) - File "/Users/haojiang/Documents/2026/PaperMind/packages/ai/daily_runner.py", line 260 - repo = PaperRepository(session) -IndentationError: unexpected indent -WARNING: StatReload detected changes in 'packages/ai/daily_runner.py'. Reloading... -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:199: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [92468] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'apps/worker/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [92468] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:199: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [93222] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'apps/worker/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [93222] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:199: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [93614] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'apps/worker/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [93614] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:199: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [94291] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'packages/config.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [94291] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:199: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [2098] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'apps/worker/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [2098] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:199: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [11195] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'apps/worker/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [11195] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:199: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [11508] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'packages/ai/idle_processor.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [11508] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:199: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [11719] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'scripts/local_bootstrap.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [11719] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:199: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [38749] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'scripts/local_bootstrap.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [38749] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:199: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [41285] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'scripts/local_bootstrap.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [41285] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:199: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [41576] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'scripts/local_bootstrap.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [41576] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:199: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [46554] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'packages/config.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [46554] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:199: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query(default="submittedDate", regex="^(submittedDate|relevance|lastUpdatedDate)$"), -INFO: Started server process [46846] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'apps/api/main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [46846] -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:209: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query( -INFO: Started server process [50380] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: StatReload detected changes in 'packages/storage/db.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [50380] -Process SpawnProcess-48: -Traceback (most recent call last): - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/multiprocessing/process.py", line 313, in _bootstrap - self.run() - ~~~~~~~~^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/multiprocessing/process.py", line 108, in run - self._target(*self._args, **self._kwargs) - ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/_subprocess.py", line 80, in subprocess_started - target(sockets=sockets) - ~~~~~~^^^^^^^^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/server.py", line 75, in run - return asyncio_run(self.serve(sockets=sockets), loop_factory=self.config.get_loop_factory()) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/asyncio/runners.py", line 195, in run - return runner.run(main) - ~~~~~~~~~~^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/asyncio/runners.py", line 118, in run - return self._loop.run_until_complete(task) - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/asyncio/base_events.py", line 725, in run_until_complete - return future.result() - ~~~~~~~~~~~~~^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/server.py", line 79, in serve - await self._serve(sockets) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/server.py", line 86, in _serve - config.load() - ~~~~~~~~~~~^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/config.py", line 441, in load - self.loaded_app = import_from_string(self.app) - ~~~~~~~~~~~~~~~~~~^^^^^^^^^^ - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/site-packages/uvicorn/importer.py", line 19, in import_from_string - module = importlib.import_module(module_str) - File "/opt/homebrew/Caskroom/miniconda/base/lib/python3.13/importlib/__init__.py", line 88, in import_module - return _bootstrap._gcd_import(name[level:], package, level) - ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 1387, in _gcd_import - File "", line 1360, in _find_and_load - File "", line 1331, in _find_and_load_unlocked - File "", line 935, in _load_unlocked - File "", line 1023, in exec_module - File "", line 488, in _call_with_frames_removed - File "/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py", line 28, in - from packages.ai.agent_service import ( - ...<3 lines>... - ) - File "/Users/haojiang/Documents/2026/PaperMind/packages/ai/agent_service.py", line 14, in + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "", line 1204, in _gcd_import + File "", line 1176, in _find_and_load + File "", line 1147, in _find_and_load_unlocked + File "", line 690, in _load_unlocked + File "", line 940, in exec_module + File "", line 241, in _call_with_frames_removed + File "/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py", line 149, in + from apps.api.routers import ( # noqa: E402 + File "/Users/haojiang/Documents/2026/PaperMind/apps/api/routers/agent.py", line 8, in + from packages.ai.agent_service import confirm_action, reject_action, stream_chat + File "/Users/haojiang/Documents/2026/PaperMind/packages/ai/agent_service.py", line 17, in from packages.ai.agent_tools import ( - ...<5 lines>... - ) File "/Users/haojiang/Documents/2026/PaperMind/packages/ai/agent_tools.py", line 12, in from packages.ai.brief_service import DailyBriefService - File "/Users/haojiang/Documents/2026/PaperMind/packages/ai/brief_service.py", line 15, in - from packages.storage.db import session_scope - File "/Users/haojiang/Documents/2026/PaperMind/packages/storage/db.py", line 36, in - poolclass=StaticPool if _is_sqlite else None, - ^^^^^^^^^^ -NameError: name 'StaticPool' is not defined -WARNING: StatReload detected changes in 'packages/storage/db.py'. Reloading... -/Users/haojiang/Documents/2026/PaperMind/apps/api/main.py:209: FastAPIDeprecationWarning: `regex` has been deprecated, please use `pattern` instead - sort_by: str = Query( -INFO: Started server process [74992] -INFO: Waiting for application startup. -INFO: Application startup complete. + File "/Users/haojiang/Documents/2026/PaperMind/packages/ai/brief_service.py", line 343 +
🔬 精读精选
+IndentationError: unexpected indent +WARNING: StatReload detected changes in 'packages/ai/brief_service.py'. Reloading... +INFO: Started server process [64221] +INFO: Waiting for application startup. +INFO: Application startup complete. +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [1df845c0] GET /tasks/active → 200 (4ms) +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [38a6bc7a] GET /tasks/active → 200 (4ms) +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [9ecce401] GET /tasks/active → 200 (4ms) +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [fd506e8b] GET /tasks/active → 200 (4ms) +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [2f6d7a1d] GET /tasks/active → 200 (4ms) +INFO: 127.0.0.1:65395 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:65495 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:65527 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:49173 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:49187 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [b471d432] GET /papers/folder-stats → 200 (13ms) +INFO: 127.0.0.1:65394 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [8f699384] GET /tasks/active → 200 (4ms) +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [5d115aef] GET /papers/folder-stats → 200 (4ms) +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [ac695ef4] GET /tasks/active → 200 (2ms) +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [833029ca] GET /tasks/active → 200 (5ms) +INFO: 127.0.0.1:50181 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:50184 - "GET /papers/folder-stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:50185 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [5cf9be72] GET /tasks/active → 200 (7ms) +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [442efa1f] GET /tasks/active → 200 (8ms) +INFO: 127.0.0.1:50187 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:50190 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:50192 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [ad4ee0f2] GET /tasks/active → 200 (4ms) +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [372ec3fe] GET /tasks/active → 200 (6ms) +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [f55a961a] GET /papers/folder-stats → 200 (4ms) +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [61daf19c] GET /tasks/active → 200 (4ms) +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [ea0b1ae6] GET /tasks/active → 200 (2ms) +INFO: 127.0.0.1:50184 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:50181 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:50185 - "GET /papers/folder-stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:50187 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [95420a58] GET /tasks/active → 200 (4ms) +INFO: 127.0.0.1:50190 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:50192 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [7f931e0c] GET /tasks/active → 200 (4ms) +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [e08362f4] GET /tasks/active → 200 (4ms) +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [7430211c] GET /papers/folder-stats → 200 (4ms) +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [1b4a7c29] GET /tasks/active → 200 (4ms) +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [f39fa6a1] GET /tasks/active → 200 (2ms) +INFO: 127.0.0.1:50181 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:50184 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [97abe26a] GET /tasks/active → 200 (3ms) +INFO: 127.0.0.1:50187 - "GET /papers/folder-stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:50185 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:50190 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:50192 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [a19bfcd2] GET /tasks/active → 200 (3ms) +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [d0d76f36] GET /tasks/active → 200 (2ms) +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [ec3e161f] GET /tasks/active → 200 (3ms) +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [6bba401c] GET /papers/folder-stats → 200 (1ms) +INFO: 127.0.0.1:50184 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:50187 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:50181 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [653645b2] GET /tasks/active → 200 (2ms) +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [5339b9dc] GET /tasks/active → 200 (3ms) +INFO: 127.0.0.1:50190 - "GET /papers/folder-stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:50192 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:50185 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [190ee619] GET /tasks/active → 200 (4ms) +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [2dd727eb] GET /tasks/active → 200 (3ms) +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [8edcd3e0] GET /tasks/active → 200 (2ms) +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [ab462894] GET /tasks/active → 200 (3ms) +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [669db263] GET /tasks/active → 200 (2ms) +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [91f2ffc9] GET /tasks/active → 200 (2ms) +INFO: 127.0.0.1:50184 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:50181 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:50190 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:50187 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:50185 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:50192 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [69973c58] GET /papers/folder-stats → 200 (1ms) +2026-03-17 15:19:59 [INFO] papermind.api (main.py:39): [ec6a2f62] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:50184 - "GET /papers/folder-stats HTTP/1.1" 200 OK +INFO: 127.0.0.1:50187 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:20:04 [INFO] papermind.api (main.py:39): [f3d4d691] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:50249 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:20:14 [INFO] papermind.api (main.py:39): [17b7d2e7] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:50305 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:20:24 [INFO] papermind.api (main.py:39): [b8a52d6a] GET /tasks/active → 200 (2ms) +INFO: 127.0.0.1:50331 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:20:34 [INFO] papermind.api (main.py:39): [1f237941] GET /tasks/active → 200 (0ms) +INFO: 127.0.0.1:50351 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:20:44 [INFO] papermind.api (main.py:39): [5189487d] GET /tasks/active → 200 (5ms) +INFO: 127.0.0.1:50377 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:20:44 [INFO] papermind.api (main.py:39): [d6caba79] GET /papers/folder-stats → 200 (6ms) +INFO: 127.0.0.1:50376 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:20:54 [INFO] papermind.api (main.py:39): [6346c1f2] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:50407 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:21:04 [INFO] papermind.api (main.py:39): [d2bfbd50] GET /tasks/active → 200 (9ms) +INFO: 127.0.0.1:50468 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:21:14 [INFO] papermind.api (main.py:39): [438f88b8] GET /tasks/active → 200 (0ms) +INFO: 127.0.0.1:50474 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:21:24 [INFO] papermind.api (main.py:39): [976e106f] GET /tasks/active → 200 (3ms) +INFO: 127.0.0.1:50503 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:21:34 [INFO] papermind.api (main.py:39): [c910eb7b] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:50560 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:21:44 [INFO] papermind.api (main.py:39): [2e446bed] GET /tasks/active → 200 (3ms) +INFO: 127.0.0.1:50576 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:21:44 [INFO] papermind.api (main.py:39): [96112cf3] GET /papers/folder-stats → 200 (5ms) +INFO: 127.0.0.1:50575 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:21:54 [INFO] papermind.api (main.py:39): [de4d0711] GET /tasks/active → 200 (0ms) +INFO: 127.0.0.1:50594 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:50666 - "OPTIONS /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:22:05 [INFO] papermind.api (main.py:39): [de7f8765] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:50666 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:22:14 [INFO] papermind.api (main.py:39): [6cc15912] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:50672 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:22:24 [INFO] papermind.api (main.py:39): [4a764411] GET /tasks/active → 200 (0ms) +INFO: 127.0.0.1:50695 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:22:34 [INFO] papermind.api (main.py:39): [1726c46f] GET /tasks/active → 200 (0ms) +INFO: 127.0.0.1:50754 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:22:44 [INFO] papermind.api (main.py:39): [a48e60ee] GET /tasks/active → 200 (12ms) +INFO: 127.0.0.1:50762 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:22:44 [INFO] papermind.api (main.py:39): [68875359] GET /papers/folder-stats → 200 (15ms) +INFO: 127.0.0.1:50761 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:22:54 [INFO] papermind.api (main.py:39): [2e0d7d6d] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:50783 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:23:04 [INFO] papermind.api (main.py:39): [6d500afb] GET /tasks/active → 200 (0ms) +INFO: 127.0.0.1:50815 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:23:14 [INFO] papermind.api (main.py:39): [13c3abc6] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:50836 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:23:24 [INFO] papermind.api (main.py:39): [5801da51] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:50861 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:23:34 [INFO] papermind.api (main.py:39): [568903ba] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:50875 - "GET /tasks/active HTTP/1.1" 200 OK +INFO: 127.0.0.1:50884 - "OPTIONS /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:23:44 [INFO] papermind.api (main.py:39): [442265c1] GET /tasks/active → 200 (3ms) +INFO: 127.0.0.1:50885 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:23:44 [INFO] papermind.api (main.py:39): [b775e993] GET /papers/folder-stats → 200 (7ms) +INFO: 127.0.0.1:50884 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:23:54 [INFO] papermind.api (main.py:39): [55919f61] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:50904 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:24:04 [INFO] papermind.api (main.py:39): [761702d3] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:50935 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:24:14 [INFO] papermind.api (main.py:39): [293cb816] GET /tasks/active → 200 (2ms) +INFO: 127.0.0.1:50945 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:24:25 [INFO] papermind.api (main.py:39): [39f69167] GET /tasks/active → 200 (2ms) +INFO: 127.0.0.1:51001 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:24:35 [INFO] papermind.api (main.py:39): [6c7e7430] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:51024 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:24:45 [INFO] papermind.api (main.py:39): [211399a6] GET /tasks/active → 200 (4ms) +INFO: 127.0.0.1:51030 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:24:45 [INFO] papermind.api (main.py:39): [3479d50b] GET /papers/folder-stats → 200 (5ms) +INFO: 127.0.0.1:51029 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:24:55 [INFO] papermind.api (main.py:39): [80eb549d] GET /tasks/active → 200 (0ms) +INFO: 127.0.0.1:51050 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:25:05 [INFO] papermind.api (main.py:39): [74eaf557] GET /tasks/active → 200 (1ms) +INFO: 127.0.0.1:51120 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:25:55 [INFO] papermind.api (main.py:39): [a946b5e3] GET /tasks/active → 200 (12ms) +INFO: 127.0.0.1:51181 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:25:55 [INFO] papermind.api (main.py:39): [e1c3c558] GET /papers/folder-stats → 200 (16ms) +INFO: 127.0.0.1:51182 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:26:55 [INFO] papermind.api (main.py:39): [e17943ec] GET /tasks/active → 200 (7ms) +INFO: 127.0.0.1:51336 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:26:55 [INFO] papermind.api (main.py:39): [86a69049] GET /papers/folder-stats → 200 (10ms) +INFO: 127.0.0.1:51338 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:27:55 [INFO] papermind.api (main.py:39): [200cde17] GET /tasks/active → 200 (8ms) +INFO: 127.0.0.1:51474 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:27:55 [INFO] papermind.api (main.py:39): [8ea475f9] GET /papers/folder-stats → 200 (10ms) +INFO: 127.0.0.1:51476 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:28:55 [INFO] papermind.api (main.py:39): [f2ba2258] GET /tasks/active → 200 (29ms) +INFO: 127.0.0.1:51571 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:28:55 [INFO] papermind.api (main.py:39): [36eb34ce] GET /papers/folder-stats → 200 (34ms) +INFO: 127.0.0.1:51572 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:29:55 [INFO] papermind.api (main.py:39): [94f579a5] GET /tasks/active → 200 (14ms) +INFO: 127.0.0.1:51739 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:29:55 [INFO] papermind.api (main.py:39): [fde96fe0] GET /papers/folder-stats → 200 (16ms) +INFO: 127.0.0.1:51740 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:30:55 [INFO] papermind.api (main.py:39): [4f79d1de] GET /tasks/active → 200 (7ms) +INFO: 127.0.0.1:51845 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:30:55 [INFO] papermind.api (main.py:39): [53d40f7d] GET /papers/folder-stats → 200 (9ms) +INFO: 127.0.0.1:51847 - "GET /papers/folder-stats HTTP/1.1" 200 OK +2026-03-17 15:31:55 [INFO] papermind.api (main.py:39): [8a721f03] GET /tasks/active → 200 (6ms) +INFO: 127.0.0.1:51998 - "GET /tasks/active HTTP/1.1" 200 OK +2026-03-17 15:31:55 [INFO] papermind.api (main.py:39): [f0271235] GET /papers/folder-stats → 200 (8ms) +INFO: 127.0.0.1:51999 - "GET /papers/folder-stats HTTP/1.1" 200 OK diff --git a/packages/ai/auto_read_service.py b/packages/ai/auto_read_service.py index 9c28f24..ab52980 100644 --- a/packages/ai/auto_read_service.py +++ b/packages/ai/auto_read_service.py @@ -7,6 +7,7 @@ - build_html() 结果缓存(同一天内不重复计算) - 新增 send_only() 方法,跳过精读直接发送 """ + from __future__ import annotations import logging @@ -64,15 +65,18 @@ class AutoReadService(ServiceBase): def get_config(self) -> dict: """获取每日报告配置""" - with self.get_session() as session: + with session_scope() as session: config = DailyReportConfigRepository(session).get_config() return { "enabled": config.enabled, "auto_deep_read": config.auto_deep_read, "deep_read_limit": config.deep_read_limit, "send_email_report": config.send_email_report, - "recipient_emails": config.recipient_emails.split(",") if config.recipient_emails else [], - "report_time_utc": config.report_time_utc, + "recipient_emails": config.recipient_emails.split(",") + if config.recipient_emails + else [], + "cron_expression": config.cron_expression, # 新增:返回 cron 表达式 + "report_time_utc": config.report_time_utc, # 保留:向后兼容 "include_paper_details": config.include_paper_details, "include_graph_insights": config.include_graph_insights, } @@ -86,8 +90,11 @@ def update_config(self, **kwargs) -> dict: "auto_deep_read": config.auto_deep_read, "deep_read_limit": config.deep_read_limit, "send_email_report": config.send_email_report, - "recipient_emails": config.recipient_emails.split(",") if config.recipient_emails else [], - "report_time_utc": config.report_time_utc, + "recipient_emails": config.recipient_emails.split(",") + if config.recipient_emails + else [], + "cron_expression": config.cron_expression, # 新增:返回 cron 表达式 + "report_time_utc": config.report_time_utc, # 保留:向后兼容 "include_paper_details": config.include_paper_details, "include_graph_insights": config.include_graph_insights, } @@ -116,6 +123,7 @@ def step_deep_read( try: from packages.ai.recommendation_service import RecommendationService + recommendations = RecommendationService().recommend(top_k=deep_read_limit) except Exception as e: logger.error(f"推荐系统失败: {e}") @@ -129,16 +137,19 @@ def step_deep_read( for rec in recommendations: paper = paper_repo.get_by_id(rec["id"]) if paper and paper.read_status.value != "deep_read": - papers_to_read.append({ - "id": paper.id, - "title": paper.title, - "similarity": rec.get("similarity", 0), - }) + papers_to_read.append( + { + "id": paper.id, + "title": paper.title, + "similarity": rec.get("similarity", 0), + } + ) result["recommended_count"] = len(papers_to_read) # 执行精读 if papers_to_read: from packages.ai.pipelines import PaperPipelines + pipelines = PaperPipelines() for i, p in enumerate(papers_to_read, 1): try: @@ -176,6 +187,7 @@ def step_generate_html( progress_callback("正在生成每日简报...", 60, 100) from packages.ai.brief_service import DailyBriefService + html = DailyBriefService().build_html() _set_cached_html(html) return html @@ -216,6 +228,7 @@ def step_send_email( progress_callback("正在发送邮件报告...", 90, 100) from packages.integrations.email_service import EmailService + email_service = EmailService(email_config) report_date = datetime.now().strftime("%Y-%m-%d") diff --git a/packages/ai/brief_service.py b/packages/ai/brief_service.py index 31aa889..032141a 100644 --- a/packages/ai/brief_service.py +++ b/packages/ai/brief_service.py @@ -499,6 +499,17 @@ def publish(self, recipient: str | None = None) -> dict: ts = datetime.now(UTC).strftime("%Y%m%d_%H%M%S") filename = f"daily_brief_{ts}.html" saved = self.notifier.save_brief_html(filename, html) + + # 如果没有指定收件人,从数据库读取配置 + if not recipient: + from packages.storage.db import session_scope + from packages.storage.repositories import DailyReportConfigRepository + + with session_scope() as session: + config = DailyReportConfigRepository(session).get_config() + if config.send_email_report and config.recipient_emails: + recipient = config.recipient_emails.split(",")[0] # 取第一个收件人 + sent = False if recipient: sent = self.notifier.send_email_html(recipient, "PaperMind Daily Brief", html) diff --git a/packages/ai/daily_runner.py b/packages/ai/daily_runner.py index 6633f36..0a7a6cc 100644 --- a/packages/ai/daily_runner.py +++ b/packages/ai/daily_runner.py @@ -318,8 +318,21 @@ def run_daily_ingest() -> dict: def run_daily_brief() -> dict: - settings = get_settings() - return DailyBriefService().publish(recipient=settings.notify_default_to) + """生成每日简报,从数据库读取收件人配置""" + # 从数据库读取收件人 + from packages.storage.db import session_scope + from packages.storage.repositories import DailyReportConfigRepository + + recipient = None + try: + with session_scope() as session: + config = DailyReportConfigRepository(session).get_config() + if config.send_email_report and config.recipient_emails: + recipient = config.recipient_emails.split(",")[0] + except Exception as e: + logger.warning(f"读取收件人配置失败:{e}") + + return DailyBriefService().publish(recipient=recipient) def run_weekly_graph_maintenance() -> dict: diff --git a/packages/storage/models.py b/packages/storage/models.py index 1eff248..0e3f5b2 100644 --- a/packages/storage/models.py +++ b/packages/storage/models.py @@ -197,8 +197,12 @@ class TopicSubscription(Base): retry_limit: Mapped[int] = mapped_column(nullable=False, default=2) schedule_frequency: Mapped[str] = mapped_column(String(32), nullable=False, default="daily") schedule_time_utc: Mapped[int] = mapped_column(nullable=False, default=21) - enable_date_filter: Mapped[bool] = mapped_column(nullable=False, default=False) # 是否启用日期过滤 - date_filter_days: Mapped[int] = mapped_column(nullable=False, default=7) # 日期范围(最近 N 天) + enable_date_filter: Mapped[bool] = mapped_column( + nullable=False, default=False + ) # 是否启用日期过滤 + date_filter_days: Mapped[int] = mapped_column( + nullable=False, default=7 + ) # 日期范围(最近 N 天) created_at: Mapped[datetime] = mapped_column(DateTime, default=_utcnow, nullable=False) updated_at: Mapped[datetime] = mapped_column( DateTime, default=_utcnow, onupdate=_utcnow, nullable=False @@ -423,8 +427,14 @@ class DailyReportConfig(Base): recipient_emails: Mapped[str] = mapped_column( String(2048), nullable=False, default="", doc="收件人邮箱列表,逗号分隔" ) + cron_expression: Mapped[str] = mapped_column( + String(64), nullable=False, default="0 4 * * *", doc="定时任务 cron 表达式(UTC 时间)" + ) report_time_utc: Mapped[int] = mapped_column( - Integer, nullable=False, default=21, doc="发送报告的时间(UTC,0-23)" + Integer, + nullable=False, + default=21, + doc="发送报告的时间(UTC,0-23)- 已废弃,使用 cron_expression", ) include_paper_details: Mapped[bool] = mapped_column( Boolean, nullable=False, default=True, doc="报告中是否包含论文详情" diff --git a/scripts/copy_env_from_deploy.sh b/scripts/copy_env_from_deploy.sh new file mode 100755 index 0000000..b1340c5 --- /dev/null +++ b/scripts/copy_env_from_deploy.sh @@ -0,0 +1,88 @@ +#!/bin/bash +# PaperMind - 从 deploy 目录复制 .env 到根目录 +# @author Color2333 +# +# 用途:将部署环境的配置文件复制到项目根目录,供本地开发或 Docker 使用 +# +# 使用方法: +# ./scripts/copy_env_from_deploy.sh + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" +DEPLOY_DIR="$PROJECT_ROOT/deploy" + +echo "========================================" +echo "PaperMind - 复制 deploy/.env 到根目录" +echo "========================================" +echo + +# Step 1: 检查 deploy/.env 是否存在 +echo "📋 检查配置文件..." +if [ ! -f "$DEPLOY_DIR/.env" ]; then + echo "❌ 错误:$DEPLOY_DIR/.env 不存在" + echo + echo "可能的原因:" + echo " 1. deploy 目录尚未创建" + echo " 2. 配置文件在其他位置" + echo + echo "解决方案:" + echo " - 如果 .env 在其他位置,请手动复制到 deploy/ 目录" + echo " - 或者直接修改项目根目录的 .env 文件" + echo + exit 1 +fi + +# Step 2: 检查根目录是否已有 .env +if [ -f "$PROJECT_ROOT/.env" ]; then + echo "⚠️ 根目录已存在 .env 文件" + echo + read -p "是否覆盖?[y/N] " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + echo "已取消操作" + exit 0 + fi + # 备份旧配置 + echo "📦 备份旧配置到 .env.backup..." + cp "$PROJECT_ROOT/.env" "$PROJECT_ROOT/.env.backup" + echo "✅ 备份完成" + echo +fi + +# Step 3: 复制配置文件 +echo "📋 复制 $DEPLOY_DIR/.env → $PROJECT_ROOT/.env..." +cp "$DEPLOY_DIR/.env" "$PROJECT_ROOT/.env" +echo "✅ 复制完成" +echo + +# Step 4: 验证配置 +echo "🔍 验证配置文件..." +if grep -q "ZHIPU_API_KEY=" "$PROJECT_ROOT/.env"; then + api_key=$(grep "ZHIPU_API_KEY=" "$PROJECT_ROOT/.env" | cut -d'=' -f2) + if [ -n "$api_key" ]; then + echo "✅ ZHIPU_API_KEY 已配置" + else + echo "⚠️ ZHIPU_API_KEY 为空,请编辑 .env 填写" + fi +else + echo "⚠️ 未找到 ZHIPU_API_KEY 配置项" +fi +echo + +# Step 5: 提示 +echo "========================================" +echo "✅ 完成!" +echo "========================================" +echo +echo "下一步:" +echo " 1. 检查 .env 配置是否正确" +echo " 2. 启动服务:" +echo " - 本地开发:source .venv/bin/activate && uvicorn apps.api.main:app --reload" +echo " - Docker 部署:docker compose up -d" +echo +echo "💡 提示:" +echo " - 本地开发:DATABASE_URL 使用 sqlite:///./data/papermind.db" +echo " - Docker 部署:DATABASE_URL 使用 sqlite:////app/data/papermind.db" +echo From 97c46d62844e04a56703951cc8dd34074db0ab29 Mon Sep 17 00:00:00 2001 From: Color2333 <1552429809@qq.com> Date: Thu, 19 Mar 2026 14:33:17 +0800 Subject: [PATCH 03/17] feat(statistics): add topic statistics page with distribution analysis - Add topic_stats() and paper_distribution_stats() methods - Add /topics/stats and /topics/distribution API endpoints - Create Statistics page with year and source distribution - Add Statistics route and sidebar entry - Add roadmap.md for feature planning --- apps/api/routers/topics.py | 31 +++ frontend/src/App.tsx | 2 + frontend/src/components/Sidebar.tsx | 2 + frontend/src/pages/Statistics.tsx | 291 ++++++++++++++++++++++++++++ frontend/src/services/api.ts | 5 + frontend/src/types/index.ts | 27 +++ packages/storage/repositories.py | 125 +++++++++++- roadmap.md | 53 +++++ 8 files changed, 528 insertions(+), 8 deletions(-) create mode 100644 frontend/src/pages/Statistics.tsx create mode 100644 roadmap.md diff --git a/apps/api/routers/topics.py b/apps/api/routers/topics.py index 383fd87..b1a2ab9 100644 --- a/apps/api/routers/topics.py +++ b/apps/api/routers/topics.py @@ -237,3 +237,34 @@ def ingest_references_status(task_id: str) -> dict: if not task: raise HTTPException(404, "Task not found") return task + + +# ---------- 统计 ---------- + + +@router.get("/topics/stats") +def topic_stats() -> dict: + """主题维度统计(30s 缓存)""" + from apps.api.deps import cache + + cached = cache.get("topic_stats") + if cached is not None: + return cached + with session_scope() as session: + result = PaperRepository(session).topic_stats() + cache.set("topic_stats", result, ttl=30) + return result + + +@router.get("/topics/distribution") +def paper_distribution() -> dict: + """论文分布统计:年份分布 + 来源分布(30s 缓存)""" + from apps.api.deps import cache + + cached = cache.get("paper_distribution") + if cached is not None: + return cached + with session_scope() as session: + result = PaperRepository(session).paper_distribution_stats() + cache.set("paper_distribution", result, ttl=30) + return result diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 3f74040..d9bc2dd 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -25,6 +25,7 @@ const Pipelines = lazy(() => import("@/pages/Pipelines")); const Operations = lazy(() => import("@/pages/Operations")); const EmailSettings = lazy(() => import("@/pages/EmailSettings")); const Writing = lazy(() => import("@/pages/Writing")); +const Statistics = lazy(() => import("@/pages/Statistics")); import LoginPage from "@/pages/Login"; import { isAuthenticated as checkAuth, clearAuth } from "@/services/api"; @@ -110,6 +111,7 @@ export default function App() { }>} /> }>} /> }>} /> + }>} /> {/* 常见拼写重定向 */} } /> diff --git a/frontend/src/components/Sidebar.tsx b/frontend/src/components/Sidebar.tsx index 58d0563..289d333 100644 --- a/frontend/src/components/Sidebar.tsx +++ b/frontend/src/components/Sidebar.tsx @@ -28,6 +28,7 @@ import { Search, Menu, X, + BarChart3, PenTool, Loader2, LogOut, @@ -43,6 +44,7 @@ const TOOLS = [ { to: "/wiki", icon: BookOpen, label: "Wiki", accent: false }, { to: "/brief", icon: Newspaper, label: "研究简报", accent: false }, { to: "/dashboard", icon: LayoutDashboard, label: "看板", accent: false }, + { to: "/statistics", icon: BarChart3, label: "主题统计", accent: false }, ]; function useDarkMode() { diff --git a/frontend/src/pages/Statistics.tsx b/frontend/src/pages/Statistics.tsx new file mode 100644 index 0000000..604ef61 --- /dev/null +++ b/frontend/src/pages/Statistics.tsx @@ -0,0 +1,291 @@ +/** + * Statistics - 主题统计分析 + * @author Color2333 + */ +import { useEffect, useState } from "react"; +import { topicApi } from "@/services/api"; +import type { TopicStats, TopicStatsResponse, PaperDistributionResponse } from "@/types"; +import { + BarChart3, + BookOpen, + Quote, + TrendingUp, + Loader2, + RefreshCw, + Calendar, + Globe, +} from "lucide-react"; + +const SOURCE_COLORS: Record = { + arxiv: "bg-red-500", + "semantic_scholar": "bg-blue-500", + reference_import: "bg-green-500", + unknown: "bg-gray-500", +}; + +function TopicCard({ stat }: { stat: TopicStats }) { + const total = stat.status_dist.unread + stat.status_dist.skimmed + stat.status_dist.deep_read; + const readRate = total > 0 ? ((stat.status_dist.skimmed + stat.status_dist.deep_read) / total * 100).toFixed(0) : 0; + + return ( +
+
+

{stat.topic_name}

+ {stat.paper_count} 篇 +
+ +
+
+ + 论文 + {stat.paper_count} +
+
+ + 引用 + {stat.total_citations.toLocaleString()} +
+
+ + 活跃度 + {stat.recent_30d} +
+
+ + 阅读率 + {readRate}% +
+
+ +
+
+ 阅读进度 + {readRate}% +
+
+ {total > 0 && ( + <> +
+
+
+ + )} +
+
+ 精读 {stat.status_dist.deep_read} + 粗读 {stat.status_dist.skimmed} + 未读 {stat.status_dist.unread} +
+
+
+ ); +} + +function CitationBar({ stat, max }: { stat: TopicStats; max: number }) { + return ( +
+ {stat.topic_name} +
+
+
+ {stat.total_citations.toLocaleString()} +
+ ); +} + +function YearDistribution({ data }: { data: PaperDistributionResponse }) { + const years = data.by_year.filter(y => y.year !== "未知").sort((a, b) => b.year.localeCompare(a.year)); + const maxCount = Math.max(...years.map(y => y.count), 1); + const total = years.reduce((sum, y) => sum + y.count, 0); + + return ( +
+
+ +

论文年份分布

+ {total} 篇有年份 +
+ {years.length === 0 ? ( +

暂无年份数据

+ ) : ( +
+ {years.slice(0, 10).map((y) => ( +
+ {y.year} +
+
+
+ {y.count} +
+ ))} +
+ )} +
+ ); +} + +function SourceDistribution({ data }: { data: PaperDistributionResponse }) { + const sources = data.by_source; + const total = sources.reduce((sum, s) => sum + s.count, 0); + + return ( +
+
+ +

论文来源分布

+ {total} 篇 +
+ {sources.length === 0 ? ( +

暂无来源数据

+ ) : ( +
+ {sources.map((s) => ( +
+
+ {s.source} + {s.count} + + {total > 0 ? ((s.count / total) * 100).toFixed(0) : 0}% + +
+ ))} +
+ )} +
+ ); +} + +export default function Statistics() { + const [topicData, setTopicData] = useState(null); + const [distData, setDistData] = useState(null); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + async function loadData() { + setLoading(true); + setError(null); + try { + const [t, d] = await Promise.all([ + topicApi.stats(), + topicApi.distribution(), + ]); + setTopicData(t); + setDistData(d); + } catch (err) { + setError(err instanceof Error ? err.message : "加载失败"); + } finally { + setLoading(false); + } + } + + useEffect(() => { + loadData(); + }, []); // eslint-disable-line react-hooks/exhaustive-deps + + if (loading) { + return ( +
+ +
+ ); + } + + if (error) { + return ( +
+

{error}

+ +
+ ); + } + + const topics = topicData?.topics ?? []; + const totalPapers = topics.reduce((sum, t) => sum + t.paper_count, 0); + const totalCitations = topics.reduce((sum, t) => sum + t.total_citations, 0); + const totalRecent = topics.reduce((sum, t) => sum + t.recent_30d, 0); + const maxCitations = Math.max(...topics.map(t => t.total_citations), 1); + + return ( +
+
+

主题统计

+ +
+ +
+
+
{totalPapers}
+
论文总数
+
+
+
{totalCitations.toLocaleString()}
+
总引用数
+
+
+
{totalRecent}
+
30天活跃
+
+
+ + {distData && ( +
+ + +
+ )} + + {topics.length > 0 && ( +
+

主题对比

+
+ {topics.map((stat) => ( + + ))} +
+
+ )} + +
+

主题详情

+ {topics.length === 0 ? ( +
暂无主题数据
+ ) : ( +
+ {topics.map((stat) => ( + + ))} +
+ )} +
+
+ ); +} diff --git a/frontend/src/services/api.ts b/frontend/src/services/api.ts index 7ea345e..6e0e3e8 100644 --- a/frontend/src/services/api.ts +++ b/frontend/src/services/api.ts @@ -38,6 +38,9 @@ import type { CocitationResponse, TodaySummary, FolderStats, + TopicStats, + TopicStatsResponse, + PaperDistributionResponse, PaperListResponse, FigureAnalysisItem, ReferenceImportEntry, @@ -169,6 +172,8 @@ export const topicApi = { get(`/topics/${id}/fetch-status`), suggestKeywords: (description: string) => post<{ suggestions: KeywordSuggestion[] }>("/topics/suggest-keywords", { description }), + stats: () => get("/topics/stats"), + distribution: () => get("/topics/distribution"), }; /* ========== 论文 ========== */ diff --git a/frontend/src/types/index.ts b/frontend/src/types/index.ts index 27d1b98..e57dd17 100644 --- a/frontend/src/types/index.ts +++ b/frontend/src/types/index.ts @@ -70,6 +70,33 @@ export interface KeywordSuggestion { reason: string; } +export interface TopicStats { + topic_id: string; + topic_name: string; + paper_count: number; + total_citations: number; + recent_30d: number; + status_dist: { + unread: number; + skimmed: number; + deep_read: number; + }; +} + +export interface TopicStatsResponse { + topics: TopicStats[]; +} + +export interface PaperDistributionStats { + by_year: { year: string; count: number }[]; + by_source: { source: string; raw_source: string; count: number }[]; +} + +export interface PaperDistributionResponse { + by_year: { year: string; count: number }[]; + by_source: { source: string; raw_source: string; count: number }[]; +} + /* ========== 抓取任务 ========== */ export interface TopicFetchResult { topic_id: string; diff --git a/packages/storage/repositories.py b/packages/storage/repositories.py index f03ca9f..e5ad59a 100644 --- a/packages/storage/repositories.py +++ b/packages/storage/repositories.py @@ -8,7 +8,7 @@ from datetime import UTC, date, datetime, timedelta from uuid import UUID -from sqlalchemy import Select, delete, func, select +from sqlalchemy import Integer, Select, delete, func, select from sqlalchemy.orm import Session from packages.domain.enums import ActionType, PipelineStatus, ReadStatus @@ -229,11 +229,7 @@ def folder_stats(self) -> dict: # "最近 7 天" 用用户时区的今天 0 点往前推 7 天 user_today_utc = user_today_start_utc() week_start_utc = user_today_utc - timedelta(days=7) - recent_q = ( - select(func.count()) - .select_from(Paper) - .where(Paper.created_at >= week_start_utc) - ) + recent_q = select(func.count()).select_from(Paper).where(Paper.created_at >= week_start_utc) recent_7d = self.session.execute(recent_q).scalar() or 0 # 有主题的论文 ID 集合 @@ -285,6 +281,121 @@ def folder_stats(self) -> dict: "by_date": by_date, } + def topic_stats(self) -> dict: + """ + 返回主题维度统计: + - 每个主题的论文数、总引用数、活跃度(近30天新增) + - 每个主题的阅读状态分布 + """ + from packages.timezone import user_today_start_utc + + user_today_utc = user_today_start_utc() + since_30d = user_today_utc - timedelta(days=30) + + # 按主题聚合统计 + topic_stats_q = ( + select( + TopicSubscription.id, + TopicSubscription.name, + func.count(PaperTopic.paper_id).label("paper_count"), + ) + .join(PaperTopic, TopicSubscription.id == PaperTopic.topic_id, isouter=True) + .group_by(TopicSubscription.id, TopicSubscription.name) + ) + topic_rows = self.session.execute(topic_stats_q).all() + + result = [] + for row in topic_rows: + topic_id = row.id + topic_name = row.name + paper_count = row.paper_count or 0 + + # 该主题下所有论文的总引用数 + citation_q = ( + select( + func.coalesce( + func.sum(Paper.metadata_json["citation_count"].astext.cast(Integer)), 0 + ) + ) + .join(PaperTopic, Paper.id == PaperTopic.paper_id) + .where(PaperTopic.topic_id == topic_id) + ) + total_citations = self.session.execute(citation_q).scalar() or 0 + + # 近30天该主题的新增论文数(活跃度) + recent_q = ( + select(func.count()) + .select_from(Paper) + .join(PaperTopic, Paper.id == PaperTopic.paper_id) + .where(PaperTopic.topic_id == topic_id) + .where(Paper.created_at >= since_30d) + ) + recent_30d = self.session.execute(recent_q).scalar() or 0 + + # 该主题下论文的阅读状态分布 + status_q = ( + select(Paper.read_status, func.count()) + .join(PaperTopic, Paper.id == PaperTopic.paper_id) + .where(PaperTopic.topic_id == topic_id) + .group_by(Paper.read_status) + ) + status_rows = self.session.execute(status_q).all() + status_dist = {r[0].value: r[1] for r in status_rows} + + result.append( + { + "topic_id": topic_id, + "topic_name": topic_name, + "paper_count": paper_count, + "total_citations": total_citations, + "recent_30d": recent_30d, + "status_dist": { + "unread": status_dist.get("unread", 0), + "skimmed": status_dist.get("skimmed", 0), + "deep_read": status_dist.get("deep_read", 0), + }, + } + ) + + # 按论文数降序排列 + result.sort(key=lambda x: x["paper_count"], reverse=True) + return {"topics": result} + + def paper_distribution_stats(self) -> dict: + """论文分布统计:按发表年份分布 + 按来源分布""" + by_year_q = ( + select( + func.coalesce(func.strftime("%Y", Paper.publication_date), "未知").label("year"), + func.count().label("count"), + ) + .group_by(func.strftime("%Y", Paper.publication_date)) + .order_by(func.strftime("%Y", Paper.publication_date).desc()) + ) + year_rows = self.session.execute(by_year_q).all() + by_year = [{"year": r[0], "count": r[1]} for r in year_rows] + + by_source_q = ( + select( + func.coalesce(Paper.metadata_json["source"].astext, "unknown").label("source"), + func.count().label("count"), + ) + .group_by(Paper.metadata_json["source"].astext) + .order_by(func.count().desc()) + ) + source_rows = self.session.execute(by_source_q).all() + source_label: dict[str, str] = { + "arxiv": "arXiv", + "semantic_scholar": "Semantic Scholar", + "reference_import": "参考文献导入", + "unknown": "未知来源", + } + by_source = [ + {"source": source_label.get(r[0], r[0]), "raw_source": r[0], "count": r[1]} + for r in source_rows + ] + + return {"by_year": by_year, "by_source": by_source} + def list_paginated( self, page: int = 1, @@ -785,7 +896,6 @@ def upsert_topic( schedule_time_utc: int = 21, enable_date_filter: bool = False, date_filter_days: int = 7, - ) -> TopicSubscription: found = self.get_by_name(name) if found: @@ -1346,5 +1456,4 @@ def cleanup_expired(self, ttl_seconds: int = 1800) -> int: self.session.flush() return result.rowcount - return config diff --git a/roadmap.md b/roadmap.md new file mode 100644 index 0000000..9d2206f --- /dev/null +++ b/roadmap.md @@ -0,0 +1,53 @@ +# PaperMind Roadmap + +> 记录功能想法和实践方式 + +--- + +## 新想法 + +### 📊 统计分析功能 (2026-03-19) + +**需求**:对论文库数据进行统计分析可视化 + +**分析维度**: +- [x] 主题维度统计(论文数、引用数、活跃度) +- [x] 发表年份分布 ✅ +- [x] 来源分布 ✅ +- [ ] 阅读状态分布 + +**实现方案**: +1. 后端新增主题统计 API 接口 +2. 前端新建 Statistics 独立页面 +3. 实现主题维度统计图表组件 +4. 侧边栏添加统计入口 + +**Todo**: +- [x] apps/api: 新增主题统计 API 接口 +- [x] frontend: 新建 Statistics 页面 +- [x] frontend: 实现主题维度统计图表组件 +- [x] frontend: 侧边栏添加统计入口 + +**实现细节**: +- `packages/storage/repositories.py`: 添加 `topic_stats()` + `paper_distribution_stats()` 方法 +- `apps/api/routers/topics.py`: 添加 `GET /topics/stats` + `GET /topics/distribution` API +- `frontend/src/pages/Statistics.tsx`: 主题统计 + 年份分布 + 来源分布 +- `frontend/src/components/Sidebar.tsx`: 添加"主题统计"入口 +- `frontend/src/services/api.ts`: 添加 `topicApi.stats()` + `topicApi.distribution()` +- `frontend/src/types/index.ts`: 添加 `TopicStats` + `PaperDistributionResponse` 类型 + +--- + +## 待讨论 + +### 可选功能方向 + +| 功能 | 描述 | 优先级 | +|------|------|--------| +| 时间维度统计 | 按年份/月份统计论文数量和引用量 | 中 | +| 阅读状态分布 | 统计已读/未读/收藏比例 | 低 | +| 导出功能 | 支持导出统计报告为 CSV/PDF | 低 | + +--- + +*最后更新: 2026-03-19* From 9db0e34b56e6586501ee25064014477c3b964b09 Mon Sep 17 00:00:00 2001 From: Color2333 <1552429809@qq.com> Date: Thu, 19 Mar 2026 14:40:43 +0800 Subject: [PATCH 04/17] feat(statistics): extend distribution stats with monthly trend, venue, action source - Add monthly paper intake trend (12 months) - Add venue/conference distribution (Top 15) - Add action source stats (manual/subscription/agent/reference) - Add read status overview (unread/skimmed/deep_read) - Update PaperDistributionResponse type and API --- frontend/src/pages/Statistics.tsx | 170 ++++++++++++++++++++++++++++-- frontend/src/types/index.ts | 4 + packages/storage/repositories.py | 87 ++++++++++++++- roadmap.md | 5 +- 4 files changed, 256 insertions(+), 10 deletions(-) diff --git a/frontend/src/pages/Statistics.tsx b/frontend/src/pages/Statistics.tsx index 604ef61..346c6b1 100644 --- a/frontend/src/pages/Statistics.tsx +++ b/frontend/src/pages/Statistics.tsx @@ -14,13 +14,27 @@ import { RefreshCw, Calendar, Globe, + TrendingDown, + Activity, + Layers, } from "lucide-react"; +const STATUS_COLORS: Record = { + "unread": "bg-muted-foreground/30", + "skimmed": "bg-yellow-500", + "deep_read": "bg-primary", +}; + const SOURCE_COLORS: Record = { arxiv: "bg-red-500", "semantic_scholar": "bg-blue-500", reference_import: "bg-green-500", unknown: "bg-gray-500", + "initial_import": "bg-purple-500", + "manual_collect": "bg-orange-500", + "auto_collect": "bg-cyan-500", + "agent_collect": "bg-pink-500", + "subscription_ingest": "bg-indigo-500", }; function TopicCard({ stat }: { stat: TopicStats }) { @@ -108,20 +122,19 @@ function CitationBar({ stat, max }: { stat: TopicStats; max: number }) { function YearDistribution({ data }: { data: PaperDistributionResponse }) { const years = data.by_year.filter(y => y.year !== "未知").sort((a, b) => b.year.localeCompare(a.year)); const maxCount = Math.max(...years.map(y => y.count), 1); - const total = years.reduce((sum, y) => sum + y.count, 0); return (

论文年份分布

- {total} 篇有年份 + {years.reduce((s, y) => s + y.count, 0)} 篇
{years.length === 0 ? (

暂无年份数据

) : (
- {years.slice(0, 10).map((y) => ( + {years.slice(0, 8).map((y) => (
{y.year}
@@ -147,7 +160,7 @@ function SourceDistribution({ data }: { data: PaperDistributionResponse }) {
-

论文来源分布

+

论文来源

{total} 篇
{sources.length === 0 ? ( @@ -170,6 +183,139 @@ function SourceDistribution({ data }: { data: PaperDistributionResponse }) { ); } +function MonthlyTrend({ data }: { data: PaperDistributionResponse }) { + const months = data.by_month; + const maxCount = Math.max(...months.map(m => m.count), 1); + + return ( +
+
+ +

月度入库趋势

+ 近12个月 +
+ {months.length === 0 ? ( +

暂无数据

+ ) : ( +
+ {months.map((m) => ( +
+
+ {m.month.slice(5)} +
+ ))} +
+ )} +
+ ); +} + +function VenueDistribution({ data }: { data: PaperDistributionResponse }) { + const venues = data.by_venue; + const maxCount = Math.max(...venues.map(v => v.count), 1); + + return ( +
+
+ +

顶会/期刊分布

+ Top 15 +
+ {venues.length === 0 ? ( +

暂无数据

+ ) : ( +
+ {venues.map((v) => ( +
+ {v.venue} +
+
+
+ {v.count} +
+ ))} +
+ )} +
+ ); +} + +function ActionSourceStats({ data }: { data: PaperDistributionResponse }) { + const actions = data.by_action_source; + const total = actions.reduce((sum, a) => sum + a.count, 0); + + return ( +
+
+ +

入库来源统计

+ {total} 篇 +
+ {actions.length === 0 ? ( +

暂无数据

+ ) : ( +
+ {actions.map((a) => ( +
+
+ {a.source} + {a.count} + + {total > 0 ? ((a.count / total) * 100).toFixed(0) : 0}% + +
+ ))} +
+ )} +
+ ); +} + +function ReadStatusOverview({ data }: { data: PaperDistributionResponse }) { + const statuses = data.by_status; + const total = statuses.reduce((sum, s) => sum + s.count, 0); + + return ( +
+
+ +

阅读状态概览

+ {total} 篇 +
+ {statuses.length === 0 ? ( +

暂无数据

+ ) : ( + <> +
+ {statuses.map((s) => ( +
0 ? (s.count / total) * 100 : 0}%` }} + /> + ))} +
+
+ {statuses.map((s) => ( +
+
+ {s.status} + {s.count} +
+ ))} +
+ + )} +
+ ); +} + export default function Statistics() { const [topicData, setTopicData] = useState(null); const [distData, setDistData] = useState(null); @@ -257,10 +403,18 @@ export default function Statistics() {
{distData && ( -
- - -
+ <> + +
+ + +
+
+ + +
+ + )} {topics.length > 0 && ( diff --git a/frontend/src/types/index.ts b/frontend/src/types/index.ts index e57dd17..eedbdcc 100644 --- a/frontend/src/types/index.ts +++ b/frontend/src/types/index.ts @@ -95,6 +95,10 @@ export interface PaperDistributionStats { export interface PaperDistributionResponse { by_year: { year: string; count: number }[]; by_source: { source: string; raw_source: string; count: number }[]; + by_status: { status: string; raw_status: string; count: number }[]; + by_month: { month: string; count: number }[]; + by_venue: { venue: string; count: number }[]; + by_action_source: { source: string; raw_source: string; count: number }[]; } /* ========== 抓取任务 ========== */ diff --git a/packages/storage/repositories.py b/packages/storage/repositories.py index e5ad59a..399e45f 100644 --- a/packages/storage/repositories.py +++ b/packages/storage/repositories.py @@ -363,6 +363,8 @@ def topic_stats(self) -> dict: def paper_distribution_stats(self) -> dict: """论文分布统计:按发表年份分布 + 按来源分布""" + from packages.timezone import user_today_start_utc + by_year_q = ( select( func.coalesce(func.strftime("%Y", Paper.publication_date), "未知").label("year"), @@ -394,7 +396,90 @@ def paper_distribution_stats(self) -> dict: for r in source_rows ] - return {"by_year": by_year, "by_source": by_source} + by_status_q = select(Paper.read_status, func.count()).group_by(Paper.read_status) + status_rows = self.session.execute(by_status_q).all() + status_label: dict[str, str] = { + "unread": "未读", + "skimmed": "已粗读", + "deep_read": "已精读", + } + by_status = [ + { + "status": status_label.get(r[0].value, r[0].value), + "raw_status": r[0].value, + "count": r[1], + } + for r in status_rows + ] + + user_today_utc = user_today_start_utc() + by_month_rows: list[dict] = [] + for i in range(11, -1, -1): + month_start = user_today_utc - timedelta(days=30 * i) + month_label = month_start.strftime("%Y-%m") + month_start_day = month_start.replace(day=1) + if month_start.month == 12: + month_end = month_start.replace(year=month_start.year + 1, month=1, day=1) + else: + month_end = month_start.replace(month=month_start.month + 1, day=1) + count_q = ( + select(func.count()) + .select_from(Paper) + .where( + Paper.created_at >= month_start_day, + Paper.created_at < month_end, + ) + ) + count = self.session.execute(count_q).scalar() or 0 + by_month_rows.append({"month": month_label, "count": count}) + + by_venue_q = ( + select( + func.coalesce(Paper.metadata_json["venue"].astext, "未知").label("venue"), + func.count().label("count"), + ) + .where(Paper.metadata_json["venue"].astext != None) + .group_by(Paper.metadata_json["venue"].astext) + .order_by(func.count().desc()) + .limit(15) + ) + venue_rows = self.session.execute(by_venue_q).all() + by_venue = [{"venue": r[0], "count": r[1]} for r in venue_rows if r[0]] + + action_source_q = ( + select( + CollectionAction.action_type, + func.sum(CollectionAction.paper_count).label("total"), + ) + .group_by(CollectionAction.action_type) + .order_by(func.sum(CollectionAction.paper_count).desc()) + ) + action_rows = self.session.execute(action_source_q).all() + action_label: dict[str, str] = { + "initial_import": "初始导入", + "manual_collect": "手动收集", + "auto_collect": "自动收集", + "agent_collect": "Agent收集", + "subscription_ingest": "订阅抓取", + "reference_import": "参考文献", + } + by_action_source = [ + { + "source": action_label.get(r[0].value, r[0].value), + "raw_source": r[0].value, + "count": r[1] or 0, + } + for r in action_rows + ] + + return { + "by_year": by_year, + "by_source": by_source, + "by_status": by_status, + "by_month": by_month_rows, + "by_venue": by_venue, + "by_action_source": by_action_source, + } def list_paginated( self, diff --git a/roadmap.md b/roadmap.md index 9d2206f..1630aa7 100644 --- a/roadmap.md +++ b/roadmap.md @@ -14,7 +14,10 @@ - [x] 主题维度统计(论文数、引用数、活跃度) - [x] 发表年份分布 ✅ - [x] 来源分布 ✅ -- [ ] 阅读状态分布 +- [x] 阅读状态概览 ✅ +- [x] 月度入库趋势 ✅ +- [x] 顶会/期刊分布 ✅ +- [x] 入库来源统计 ✅ **实现方案**: 1. 后端新增主题统计 API 接口 From 601f913df7078f79c76edace85dfea067173da45 Mon Sep 17 00:00:00 2001 From: Color2333 <1552429809@qq.com> Date: Thu, 19 Mar 2026 14:44:15 +0800 Subject: [PATCH 05/17] fix(statistics): use json_extract instead of astext for JSON fields SQLAlchemy 2.0 compatibility fix for metadata_json field access --- packages/storage/repositories.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/storage/repositories.py b/packages/storage/repositories.py index 399e45f..a73e5d0 100644 --- a/packages/storage/repositories.py +++ b/packages/storage/repositories.py @@ -378,10 +378,12 @@ def paper_distribution_stats(self) -> dict: by_source_q = ( select( - func.coalesce(Paper.metadata_json["source"].astext, "unknown").label("source"), + func.coalesce(func.json_extract(Paper.metadata_json, "$.source"), "unknown").label( + "source" + ), func.count().label("count"), ) - .group_by(Paper.metadata_json["source"].astext) + .group_by(func.json_extract(Paper.metadata_json, "$.source")) .order_by(func.count().desc()) ) source_rows = self.session.execute(by_source_q).all() @@ -435,11 +437,13 @@ def paper_distribution_stats(self) -> dict: by_venue_q = ( select( - func.coalesce(Paper.metadata_json["venue"].astext, "未知").label("venue"), + func.coalesce(func.json_extract(Paper.metadata_json, "$.venue"), "未知").label( + "venue" + ), func.count().label("count"), ) - .where(Paper.metadata_json["venue"].astext != None) - .group_by(Paper.metadata_json["venue"].astext) + .where(func.json_extract(Paper.metadata_json, "$.venue") != None) + .group_by(func.json_extract(Paper.metadata_json, "$.venue")) .order_by(func.count().desc()) .limit(15) ) From 299f7812484fd2f7f1abe707beead783e770da9e Mon Sep 17 00:00:00 2001 From: Color2333 <1552429809@qq.com> Date: Thu, 19 Mar 2026 15:08:42 +0800 Subject: [PATCH 06/17] fix(statistics): use json_extract for citation_count and polish UI style - Fix SQLAlchemy 2.0 compatibility for citation_count in topic_stats - Redesign UI to match Dashboard style with Hero section and StatCard - Add grid layouts and proper spacing - Improve color gradients and hover effects --- frontend/src/pages/Statistics.tsx | 196 ++++++++++++++++++------------ packages/storage/repositories.py | 7 +- 2 files changed, 125 insertions(+), 78 deletions(-) diff --git a/frontend/src/pages/Statistics.tsx b/frontend/src/pages/Statistics.tsx index 346c6b1..62782e3 100644 --- a/frontend/src/pages/Statistics.tsx +++ b/frontend/src/pages/Statistics.tsx @@ -37,24 +37,47 @@ const SOURCE_COLORS: Record = { "subscription_ingest": "bg-indigo-500", }; +function StatCard({ + icon, label, value, sub, color, +}: { + icon: React.ReactNode; + label: string; + value: string | number; + sub?: string; + color: "primary" | "info" | "warning" | "success"; +}) { + const iconColors = { + primary: "text-primary", + info: "text-info", + warning: "text-warning", + success: "text-success", + }; + + return ( +
+
+
{icon}
+
+

{value}

+

{label}

+ {sub &&

{sub}

} +
+ ); +} + function TopicCard({ stat }: { stat: TopicStats }) { const total = stat.status_dist.unread + stat.status_dist.skimmed + stat.status_dist.deep_read; const readRate = total > 0 ? ((stat.status_dist.skimmed + stat.status_dist.deep_read) / total * 100).toFixed(0) : 0; return ( -
+
-

{stat.topic_name}

- {stat.paper_count} 篇 +

{stat.topic_name}

+ {stat.paper_count} 篇
- - 论文 - {stat.paper_count} -
-
引用 {stat.total_citations.toLocaleString()} @@ -64,17 +87,11 @@ function TopicCard({ stat }: { stat: TopicStats }) { 活跃度 {stat.recent_30d}
-
- - 阅读率 - {readRate}% -
- 阅读进度 - {readRate}% + 阅读率 {readRate}%
{total > 0 && ( @@ -106,15 +123,15 @@ function TopicCard({ stat }: { stat: TopicStats }) { function CitationBar({ stat, max }: { stat: TopicStats; max: number }) { return ( -
- {stat.topic_name} -
+
+ {stat.topic_name} +
- {stat.total_citations.toLocaleString()} + {stat.total_citations.toLocaleString()}
); } @@ -124,7 +141,7 @@ function YearDistribution({ data }: { data: PaperDistributionResponse }) { const maxCount = Math.max(...years.map(y => y.count), 1); return ( -
+

论文年份分布

@@ -133,17 +150,17 @@ function YearDistribution({ data }: { data: PaperDistributionResponse }) { {years.length === 0 ? (

暂无年份数据

) : ( -
+
{years.slice(0, 8).map((y) => (
- {y.year} + {y.year}
- {y.count} + {y.count}
))}
@@ -157,7 +174,7 @@ function SourceDistribution({ data }: { data: PaperDistributionResponse }) { const total = sources.reduce((sum, s) => sum + s.count, 0); return ( -
+

论文来源

@@ -169,10 +186,10 @@ function SourceDistribution({ data }: { data: PaperDistributionResponse }) {
{sources.map((s) => (
-
- {s.source} - {s.count} - +
+ {s.source} + {s.count} + {total > 0 ? ((s.count / total) * 100).toFixed(0) : 0}%
@@ -188,7 +205,7 @@ function MonthlyTrend({ data }: { data: PaperDistributionResponse }) { const maxCount = Math.max(...months.map(m => m.count), 1); return ( -
+

月度入库趋势

@@ -197,12 +214,12 @@ function MonthlyTrend({ data }: { data: PaperDistributionResponse }) { {months.length === 0 ? (

暂无数据

) : ( -
+
{months.map((m) => ( -
+
{m.month.slice(5)}
@@ -218,26 +235,26 @@ function VenueDistribution({ data }: { data: PaperDistributionResponse }) { const maxCount = Math.max(...venues.map(v => v.count), 1); return ( -
+

顶会/期刊分布

- Top 15 + Top 10
{venues.length === 0 ? (

暂无数据

) : ( -
- {venues.map((v) => ( +
+ {venues.slice(0, 10).map((v) => (
- {v.venue} -
+ {v.venue} +
- {v.count} + {v.count}
))}
@@ -251,7 +268,7 @@ function ActionSourceStats({ data }: { data: PaperDistributionResponse }) { const total = actions.reduce((sum, a) => sum + a.count, 0); return ( -
+

入库来源统计

@@ -263,10 +280,10 @@ function ActionSourceStats({ data }: { data: PaperDistributionResponse }) {
{actions.map((a) => (
-
- {a.source} - {a.count} - +
+ {a.source} + {a.count} + {total > 0 ? ((a.count / total) * 100).toFixed(0) : 0}%
@@ -282,7 +299,7 @@ function ReadStatusOverview({ data }: { data: PaperDistributionResponse }) { const total = statuses.reduce((sum, s) => sum + s.count, 0); return ( -
+

阅读状态概览

@@ -292,7 +309,7 @@ function ReadStatusOverview({ data }: { data: PaperDistributionResponse }) {

暂无数据

) : ( <> -
+
{statuses.map((s) => (
{statuses.map((s) => ( -
+
{s.status} {s.count} @@ -341,7 +358,7 @@ export default function Statistics() { useEffect(() => { loadData(); - }, []); // eslint-disable-line react-hooks/exhaustive-deps + }, []); if (loading) { return ( @@ -374,42 +391,67 @@ export default function Statistics() { const maxCitations = Math.max(...topics.map(t => t.total_citations), 1); return ( -
-
-

主题统计

- +
+
+
+
+
+ +
+
+

主题统计

+

论文库数据分析与可视化

+
+
+ +
-
-
-
{totalPapers}
-
论文总数
-
-
-
{totalCitations.toLocaleString()}
-
总引用数
-
-
-
{totalRecent}
-
30天活跃
-
+
+ } + label="论文总数" + value={totalPapers} + sub={`${topics.length} 个主题`} + color="primary" + /> + } + label="总引用数" + value={totalCitations.toLocaleString()} + color="info" + /> + } + label="30天活跃" + value={totalRecent} + sub="新增论文" + color="success" + /> + } + label="阅读率" + value={totalPapers > 0 ? Math.round(((topics.reduce((sum, t) => sum + t.status_dist.skimmed + t.status_dist.deep_read, 0)) / totalPapers) * 100) : 0} + sub="已读论文" + color="warning" + />
{distData && ( <> -
+
-
+
@@ -419,8 +461,8 @@ export default function Statistics() { {topics.length > 0 && (
-

主题对比

-
+

主题对比

+
{topics.map((stat) => ( ))} @@ -429,7 +471,7 @@ export default function Statistics() { )}
-

主题详情

+

主题详情

{topics.length === 0 ? (
暂无主题数据
) : ( diff --git a/packages/storage/repositories.py b/packages/storage/repositories.py index a73e5d0..7ab023f 100644 --- a/packages/storage/repositories.py +++ b/packages/storage/repositories.py @@ -314,7 +314,12 @@ def topic_stats(self) -> dict: citation_q = ( select( func.coalesce( - func.sum(Paper.metadata_json["citation_count"].astext.cast(Integer)), 0 + func.sum( + func.cast( + func.json_extract(Paper.metadata_json, "$.citation_count"), Integer + ) + ), + 0, ) ) .join(PaperTopic, Paper.id == PaperTopic.paper_id) From afc02ffdf862b31ce43dff000801d9e9eae80016 Mon Sep 17 00:00:00 2001 From: Color2333 <1552429809@qq.com> Date: Thu, 19 Mar 2026 15:16:43 +0800 Subject: [PATCH 07/17] =?UTF-8?q?feat:=20=E7=BE=8E=E5=8C=96=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E9=A1=B5=E9=9D=A2=E5=9B=BE=E8=A1=A8=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=20-=20=E6=B8=90=E5=8F=98=E8=89=B2/=E9=98=B4=E5=BD=B1/=E5=9C=86?= =?UTF-8?q?=E8=A7=92=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/Statistics.tsx | 250 +++++++++++++++++------------- 1 file changed, 145 insertions(+), 105 deletions(-) diff --git a/frontend/src/pages/Statistics.tsx b/frontend/src/pages/Statistics.tsx index 62782e3..abb2061 100644 --- a/frontend/src/pages/Statistics.tsx +++ b/frontend/src/pages/Statistics.tsx @@ -20,7 +20,7 @@ import { } from "lucide-react"; const STATUS_COLORS: Record = { - "unread": "bg-muted-foreground/30", + "unread": "bg-slate-400", "skimmed": "bg-yellow-500", "deep_read": "bg-primary", }; @@ -37,6 +37,14 @@ const SOURCE_COLORS: Record = { "subscription_ingest": "bg-indigo-500", }; +const GRADIENT_COLORS = [ + "from-indigo-500 to-purple-500", + "from-emerald-500 to-teal-500", + "from-orange-500 to-amber-500", + "from-pink-500 to-rose-500", + "from-cyan-500 to-blue-500", +]; + function StatCard({ icon, label, value, sub, color, }: { @@ -70,34 +78,43 @@ function TopicCard({ stat }: { stat: TopicStats }) { const readRate = total > 0 ? ((stat.status_dist.skimmed + stat.status_dist.deep_read) / total * 100).toFixed(0) : 0; return ( -
+
-

{stat.topic_name}

- {stat.paper_count} 篇 +

{stat.topic_name}

+ {stat.paper_count} 篇
-
-
- - 引用 - {stat.total_citations.toLocaleString()} +
+
+
+ +
+
+

{stat.total_citations.toLocaleString()}

+

总引用

+
-
- - 活跃度 - {stat.recent_30d} +
+
+ +
+
+

{stat.recent_30d}

+

30天活跃

+
-
-
- 阅读率 {readRate}% +
+
+ 阅读进度 + {readRate}%
-
+
{total > 0 && ( <>
)}
-
- 精读 {stat.status_dist.deep_read} - 粗读 {stat.status_dist.skimmed} - 未读 {stat.status_dist.unread} +
+ 精读 {stat.status_dist.deep_read} + 粗读 {stat.status_dist.skimmed} + 未读 {stat.status_dist.unread}
); } -function CitationBar({ stat, max }: { stat: TopicStats; max: number }) { +function CitationBar({ stat, max, index }: { stat: TopicStats; max: number; index: number }) { + const gradient = GRADIENT_COLORS[index % GRADIENT_COLORS.length]; return ( -
- {stat.topic_name} -
+
+ {stat.topic_name} +
- {stat.total_citations.toLocaleString()} + {stat.total_citations.toLocaleString()}
); } @@ -141,26 +159,28 @@ function YearDistribution({ data }: { data: PaperDistributionResponse }) { const maxCount = Math.max(...years.map(y => y.count), 1); return ( -
+
- -

论文年份分布

+ +

论文年份分布

{years.reduce((s, y) => s + y.count, 0)} 篇
{years.length === 0 ? ( -

暂无年份数据

+

暂无年份数据

) : ( -
- {years.slice(0, 8).map((y) => ( +
+ {years.slice(0, 6).map((y, i) => (
- {y.year} -
+ {y.year} +
+ + {y.count} +
- {y.count}
))}
@@ -174,26 +194,32 @@ function SourceDistribution({ data }: { data: PaperDistributionResponse }) { const total = sources.reduce((sum, s) => sum + s.count, 0); return ( -
+
- -

论文来源

+ +

论文来源

{total} 篇
{sources.length === 0 ? ( -

暂无来源数据

+

暂无来源数据

) : ( -
- {sources.map((s) => ( -
-
- {s.source} - {s.count} - - {total > 0 ? ((s.count / total) * 100).toFixed(0) : 0}% - -
- ))} +
+ {sources.map((s) => { + const pct = total > 0 ? ((s.count / total) * 100).toFixed(0) : 0; + return ( +
+
+ {s.source} +
+
+
+ {pct}% +
+ ); + })}
)}
@@ -205,23 +231,23 @@ function MonthlyTrend({ data }: { data: PaperDistributionResponse }) { const maxCount = Math.max(...months.map(m => m.count), 1); return ( -
+
- -

月度入库趋势

+ +

月度入库趋势

近12个月
{months.length === 0 ? ( -

暂无数据

+

暂无数据

) : ( -
- {months.map((m) => ( -
+
+ {months.map((m, i) => ( +
- {m.month.slice(5)} + {m.month.slice(5)}
))}
@@ -235,26 +261,29 @@ function VenueDistribution({ data }: { data: PaperDistributionResponse }) { const maxCount = Math.max(...venues.map(v => v.count), 1); return ( -
+
- -

顶会/期刊分布

- Top 10 + +

顶会/期刊分布

+ Top 5
{venues.length === 0 ? ( -

暂无数据

+

暂无数据

) : ( -
- {venues.slice(0, 10).map((v) => ( +
+ {venues.slice(0, 5).map((v, i) => (
- {v.venue} -
+ + {i + 1} + + {v.venue} +
- {v.count} + {v.count}
))}
@@ -268,26 +297,32 @@ function ActionSourceStats({ data }: { data: PaperDistributionResponse }) { const total = actions.reduce((sum, a) => sum + a.count, 0); return ( -
+
- -

入库来源统计

+ +

入库来源统计

{total} 篇
{actions.length === 0 ? ( -

暂无数据

+

暂无数据

) : ( -
- {actions.map((a) => ( -
-
- {a.source} - {a.count} - - {total > 0 ? ((a.count / total) * 100).toFixed(0) : 0}% - -
- ))} +
+ {actions.map((a) => { + const pct = total > 0 ? ((a.count / total) * 100).toFixed(0) : 0; + return ( +
+
+ {a.source} +
+
+
+ {pct}% +
+ ); + })}
)}
@@ -299,17 +334,17 @@ function ReadStatusOverview({ data }: { data: PaperDistributionResponse }) { const total = statuses.reduce((sum, s) => sum + s.count, 0); return ( -
+
- -

阅读状态概览

+ +

阅读状态概览

{total} 篇
{statuses.length === 0 ? ( -

暂无数据

+

暂无数据

) : ( <> -
+
{statuses.map((s) => (
))}
-
+
{statuses.map((s) => ( -
-
- {s.status} - {s.count} +
+
+
+ {s.status} +
+

{s.count}

+

+ {total > 0 ? ((s.count / total) * 100).toFixed(0) : 0}% +

))}
@@ -461,17 +501,17 @@ export default function Statistics() { {topics.length > 0 && (
-

主题对比

-
- {topics.map((stat) => ( - +

主题对比

+
+ {topics.map((stat, i) => ( + ))}
)}
-

主题详情

+

主题详情

{topics.length === 0 ? (
暂无主题数据
) : ( From 7e0a7d847eb1cee84018ff8224474724acf90fa6 Mon Sep 17 00:00:00 2001 From: Color2333 <1552429809@qq.com> Date: Thu, 19 Mar 2026 15:19:55 +0800 Subject: [PATCH 08/17] =?UTF-8?q?fix:=20MonthlyTrend=20=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=20absolute=20=E5=B8=83=E5=B1=80=E4=BF=AE=E5=A4=8D=E6=9F=B1?= =?UTF-8?q?=E7=8A=B6=E5=9B=BE=E7=A9=BA=E7=99=BD=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/Statistics.tsx | 36 ++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/frontend/src/pages/Statistics.tsx b/frontend/src/pages/Statistics.tsx index abb2061..ac37ac8 100644 --- a/frontend/src/pages/Statistics.tsx +++ b/frontend/src/pages/Statistics.tsx @@ -240,16 +240,32 @@ function MonthlyTrend({ data }: { data: PaperDistributionResponse }) { {months.length === 0 ? (

暂无数据

) : ( -
- {months.map((m, i) => ( -
-
- {m.month.slice(5)} -
- ))} +
+
+ {months.map((m, i) => { + const heightPct = Math.max((m.count / maxCount) * 100, 4); + return ( +
+
+
+ ); + })} +
+
+ {months.map((m) => ( +
+ + {m.month.slice(5)} + +
+ ))} +
)}
From bad16eb723f03bd2a35914f29d596b71efdc364d Mon Sep 17 00:00:00 2001 From: Color2333 <1552429809@qq.com> Date: Thu, 19 Mar 2026 15:30:59 +0800 Subject: [PATCH 09/17] docs: add CS category feed design doc --- .../2026-03-19-cs-category-feed-design.md | 254 ++++++++++++++++++ 1 file changed, 254 insertions(+) create mode 100644 docs/plans/2026-03-19-cs-category-feed-design.md diff --git a/docs/plans/2026-03-19-cs-category-feed-design.md b/docs/plans/2026-03-19-cs-category-feed-design.md new file mode 100644 index 0000000..6543af9 --- /dev/null +++ b/docs/plans/2026-03-19-cs-category-feed-design.md @@ -0,0 +1,254 @@ +# CS 分类订阅功能设计 + +## 概述 + +新增独立的 CS 分类订阅系统,用户可直接订阅 arXiv CS 下的细分领域(如 cs.CV、cs.LG),系统定时抓取最新论文入库。与现有的关键词主题订阅完全独立,UI 整合在 Topics 页面内通过 Tab 切换。 + +--- + +## 数据模型 + +### CSCategory(arXiv 分类缓存) + +```python +class CSCategory(Base): + code: str # "cs.CV" + name: str # "Computer Vision and Pattern Recognition" + description: str # "Covers image processing, computer vision, pattern recognition etc." + cached_at: datetime # 缓存时间,30 天后失效需刷新 +``` + +来源:启动时从 arXiv API `https://arxiv.org/api/categories` 动态拉取,存入 DB,30 天更新一次。 + +### CSFeedSubscription(用户订阅记录) + +```python +class CSFeedSubscription(Base): + id: UUID + category_code: str # "cs.CV" + user_id: str | None # 预留,多用户时区分;当前单用户可写死 + daily_limit: int # 每日配额(篇数) + enabled: bool # 是否启用 + status: str # "active" | "cool_down" | "paused" + cool_down_until: datetime # 熔断冷却截止时间 + last_run_at: datetime | None + last_run_count: int # 上次入库数量 + created_at: datetime +``` + +与 `TopicSubscription` 完全独立,不共用表。 + +--- + +## 调度服务 + +### CSFeedOrchestrator + +协调所有分类订阅的定时抓取,复用现有 Worker 的 APScheduler 调度框架。 + +#### 调度策略 + +- 触发频率:每小时整点执行一次(与主题订阅调度共用 Worker) +- 全局请求控制:每分钟最多 20 个 arXiv API 请求(token bucket 模式) +- 请求间隔:每个分类请求之间至少间隔 3 秒 +- 每日配额:用户设的 daily_limit 精确控制,精确到每个分类的每日已入库计数 + +#### 处理流程 + +``` +每小时触发 CSFeedOrchestrator.run() + ↓ +1. 加载所有 enabled=True 的 CSFeedSubscription + ↓ +2. 遍历每个订阅(按 category_code 字母序): + ┌─────────────────────────────────────────┐ + │ 检查 status == "cool_down" │ + │ → 当前时间 < cool_down_until → 跳过 │ + ├─────────────────────────────────────────┤ + │ 计算今日已入库数量 │ + │ → 今日已入库 >= daily_limit → 跳过 │ + ├─────────────────────────────────────────┤ + │ 检查全局 token bucket │ + │ → 桶已满 → 等到下一分钟或下一小时 │ + ├─────────────────────────────────────────┤ + │ 调用 ArxivClient.fetch_latest( │ + │ query=f"cat:{category_code}", │ + │ max_results=剩余配额, │ + │ days_back=7 │ + │ ) │ + ├─────────────────────────────────────────┤ + │ 成功 → upsert → 记录 CollectionAction │ + │ 触发 429 → status="cool_down", │ + │ cool_down_until=now+30min │ + │ 其他错误 → 记录日志,跳过该分类 │ + └─────────────────────────────────────────┘ + ↓ +3. 全部处理完 → 记录本次执行摘要日志 +``` + +#### 熔断机制 + +- 触发条件:arXiv 返回 429 Too Many Requests +- 冷却时间:30 分钟(cool_down_until = now + 30min) +- 恢复条件:冷却时间结束后自动恢复为 "active" + +--- + +## API 设计 + +### GET /cs-categories + +返回 arXiv CS 全部分类列表(供 UI 勾选用)。 + +``` +Response: +{ + "categories": [ + { + "code": "cs.CV", + "name": "Computer Vision and Pattern Recognition", + "description": "Covers image processing, computer vision, pattern recognition..." + }, + ... + ], + "updated_at": "2026-03-19T10:00:00Z" +} +``` + +### GET /cs-feeds + +返回当前用户的分类订阅列表。 + +``` +Response: +{ + "feeds": [ + { + "id": "uuid", + "category_code": "cs.CV", + "category_name": "Computer Vision and Pattern Recognition", + "daily_limit": 30, + "enabled": true, + "status": "active", + "last_run_at": "2026-03-19T08:00:00Z", + "last_run_count": 25 + } + ] +} +``` + +### POST /cs-feeds + +批量订阅分类。 + +``` +Body: +{ + "category_codes": ["cs.CV", "cs.LG"], + "daily_limit": 50, + "enabled": true +} + +Response: +{ + "created": 2, + "feeds": [...] +} +``` + +### DELETE /cs-feeds/{id} + +取消订阅。 + +### POST /cs-feeds/{id}/trigger + +手动触发一次抓取(立即执行,跳过定时)。 + +--- + +## 前端 UI + +### 页面结构 + +在 `/topics` 页面内新增 Tab: + +``` +[主题订阅] [分类订阅] +``` + +### 分类订阅 Tab 布局 + +``` +┌─────────────────────────────────────────────────────────┐ +│ arXiv CS 分类订阅 │ +│ ───────────────────────────────────────────────────── │ +│ 全局每日配额:[ 50 ] 篇 │ +│ │ +│ ┌─────────────────┐ ┌──────────────────────────────┐ │ +│ │ 分类列表(左侧) │ │ 已订阅列表(右侧) │ │ +│ │ │ │ │ │ +│ │ 🔍 搜索分类 │ │ cs.CV 30篇/天 [x] │ │ +│ │ │ │ cs.LG 50篇/天 [x] │ │ +│ │ ☑ cs.CV (CV) │ │ cs.CL 20篇/天 [x] │ │ +│ │ ☑ cs.LG (LG) │ │ │ │ +│ │ ☐ cs.CL (CL) │ │ 状态: 运行中 / 3个分类 │ │ +│ │ ☐ cs.AI (AI) │ │ │ │ +│ │ ☐ cs.RO (RO) │ │ [保存配置] │ │ +│ │ ... │ │ │ │ +│ └─────────────────┘ └──────────────────────────────┘ │ +└─────────────────────────────────────────────────────────┘ +``` + +- 左侧:可搜索的分类列表,带复选框 +- 右侧:已勾选的分类 + 各自配额(可编辑)+ 删除按钮 +- 底部:保存配置按钮 + +### 分类来源 + +调用 `GET /cs-categories` 获取分类列表,缓存 30 天。 + +--- + +## 文件变更 + +### 后端新增 + +| 文件 | 说明 | +|------|------| +| `packages/storage/models.py` | 新增 `CSCategory`、`CSFeedSubscription` 模型 | +| `packages/storage/repositories.py` | 新增 `CSFeedRepository` | +| `packages/integrations/arxiv_client.py` | 新增 `fetch_categories()` 方法 | +| `packages/ai/cs_feed_orchestrator.py` | 新增 `CSFeedOrchestrator` 调度服务 | +| `apps/api/routers/cs_feeds.py` | 新增分类订阅 REST API | +| `apps/worker/main.py` | 注册 `CSFeedOrchestrator` 调度任务 | + +### 后端修改 + +| 文件 | 说明 | +|------|------| +| `apps/api/main.py` | 注册 `cs_feeds` router | +| `packages/storage/repositories.py` | `BaseQuery` 可复用 | + +### 前端新增 + +| 文件 | 说明 | +|------|------| +| `frontend/src/pages/CSFeeds.tsx` | 分类订阅 Tab 页面 | +| `frontend/src/services/api.ts` | 新增 `csFeedApi` | + +### 前端修改 + +| 文件 | 说明 | +|------|------| +| `frontend/src/pages/Topics.tsx` | 新增 Tab 切换 + `` 组件 | +| `frontend/src/components/Sidebar.tsx` | 如需要可添加分类订阅入口 | + +--- + +## 实现顺序 + +1. **后端基础** — 数据模型 + 分类获取 + Repository +2. **后端 API** — REST 接口 +3. **调度服务** — Orchestrator(含限流 + 熔断) +4. **前端 UI** — Tab + 分类列表 + 订阅管理 +5. **集成测试** — 手动触发 + 观察限流行为 From 7cc22a5905a26986e634d2d9a11faa4962e8a2ca Mon Sep 17 00:00:00 2001 From: Color2333 <1552429809@qq.com> Date: Thu, 19 Mar 2026 15:33:13 +0800 Subject: [PATCH 10/17] docs: add CS category feed implementation plan --- ...6-03-19-cs-category-feed-implementation.md | 719 ++++++++++++++++++ 1 file changed, 719 insertions(+) create mode 100644 docs/plans/2026-03-19-cs-category-feed-implementation.md diff --git a/docs/plans/2026-03-19-cs-category-feed-implementation.md b/docs/plans/2026-03-19-cs-category-feed-implementation.md new file mode 100644 index 0000000..3715915 --- /dev/null +++ b/docs/plans/2026-03-19-cs-category-feed-implementation.md @@ -0,0 +1,719 @@ +# CS 分类订阅功能实施计划 + +> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. + +**Goal:** 新增独立的 arXiv CS 分类订阅系统,用户可订阅分类并控制每日配额,系统自动调度抓取 + +**Architecture:** 新增 `CSCategory` + `CSFeedSubscription` 数据模型,独立于 TopicSubscription;新增 `CSFeedOrchestrator` 调度服务管理限流和熔断;REST API 挂载在 `/cs-categories` 和 `/cs-feeds`;前端在 Topics 页面内新增 Tab + +**Tech Stack:** FastAPI + SQLite + APScheduler + React + +--- + +## Phase 1: 数据模型 + +### Task 1: 新增 CSCategory 和 CSFeedSubscription 模型 + +**Files:** +- Modify: `packages/storage/models.py` +- Reference: `packages/storage/models.py:189-209` (TopicSubscription 作为参考) + +**Step 1: 添加 CSCategory 模型** + +在 `models.py` 末尾添加: + +```python +class CSCategory(Base): + __tablename__ = "cs_categories" + + code: str = Field(primary_key) # "cs.CV" + name: str = Field(nullable=False) + description: str = Field(default="") + cached_at: datetime = Field(default_factory=datetime.utcnow) + + +class CSFeedSubscription(Base): + __tablename__ = "cs_feed_subscriptions" + + id: UUID = Field(default_factory=uuid4, primary_key=True) + category_code: str = Field(nullable=False) + daily_limit: int = Field(default=30) + enabled: bool = Field(default=True) + status: str = Field(default="active") # active | cool_down | paused + cool_down_until: datetime | None = Field(default=None) + last_run_at: datetime | None = Field(default=None) + last_run_count: int = Field(default=0) + created_at: datetime = Field(default_factory=datetime.utcnow) +``` + +**Step 2: 验证模型可导入** + +Run: `cd /Users/haojiang/Documents/2026/PaperMind && python -c "from packages.storage.models import CSCategory, CSFeedSubscription; print('OK')"` + +--- + +### Task 2: 新增 CSFeedRepository + +**Files:** +- Modify: `packages/storage/repositories.py` +- Reference: `packages/storage/repositories.py:964-1062` (TopicRepository 作为参考) + +**Step 1: 在 repositories.py 添加 CSFeedRepository** + +在文件末尾添加: + +```python +class CSFeedRepository: + def __init__(self, session: Session): + self.session = session + + def get_categories(self) -> list[CSCategory]: + return list(self.session.execute(select(CSCategory)).scalars()) + + def upsert_category(self, code: str, name: str, description: str = "") -> CSCategory: + existing = self.session.execute(select(CSCategory).where(CSCategory.code == code)).scalar_one_or_none() + if existing: + existing.name = name + existing.description = description + existing.cached_at = datetime.utcnow() + return existing + cat = CSCategory(code=code, name=name, description=description) + self.session.add(cat) + self.session.commit() + return cat + + def get_subscriptions(self) -> list[CSFeedSubscription]: + return list(self.session.execute(select(CSFeedSubscription)).scalars()) + + def get_subscription(self, category_code: str) -> CSFeedSubscription | None: + return self.session.execute( + select(CSFeedSubscription).where(CSFeedSubscription.category_code == category_code) + ).scalar_one_or_none() + + def upsert_subscription(self, category_code: str, daily_limit: int, enabled: bool = True) -> CSFeedSubscription: + existing = self.get_subscription(category_code) + if existing: + existing.daily_limit = daily_limit + existing.enabled = enabled + self.session.commit() + return existing + sub = CSFeedSubscription(category_code=category_code, daily_limit=daily_limit, enabled=enabled) + self.session.add(sub) + self.session.commit() + return sub + + def delete_subscription(self, category_code: str) -> bool: + sub = self.get_subscription(category_code) + if sub: + self.session.delete(sub) + self.session.commit() + return True + return False + + def update_run_status(self, category_code: str, count: int): + sub = self.get_subscription(category_code) + if sub: + sub.last_run_at = datetime.utcnow() + sub.last_run_count = count + sub.status = "active" + self.session.commit() + + def set_cool_down(self, category_code: str, until: datetime): + sub = self.get_subscription(category_code) + if sub: + sub.status = "cool_down" + sub.cool_down_until = until + self.session.commit() + + def get_active_subscriptions(self) -> list[CSFeedSubscription]: + return list(self.session.execute( + select(CSFeedSubscription).where(CSFeedSubscription.enabled == True) + ).scalars()) +``` + +**Step 2: 验证 repository 可导入** + +Run: `cd /Users/haojiang/Documents/2026/PaperMind && python -c "from packages.storage.repositories import CSFeedRepository; print('OK')"` + +--- + +## Phase 2: arXiv 分类获取 + +### Task 3: arxiv_client 新增 fetch_categories + +**Files:** +- Modify: `packages/integrations/arxiv_client.py` +- Reference: `packages/integrations/arxiv_client.py:58-117` (fetch_latest 作为参考) + +**Step 1: 添加 fetch_categories 方法** + +在 `ArxivClient` 类中添加: + +```python +def fetch_categories(self) -> list[dict]: + """从 arXiv API 获取 CS 分类列表""" + url = "https://arxiv.org/api/categories" + acquire_api("arxiv", timeout=30) + response = self.client.get(url, timeout=30) + response.raise_for_status() + root = ElementTree.fromstring(response.text) + categories = [] + for cat in root.findall("category"): + code = cat.find("code").text or "" + if code.startswith("cs."): + categories.append({ + "code": code, + "name": cat.find("name").text or "", + "description": cat.find("description").text or "", + }) + return categories +``` + +**Step 2: 验证方法可调用** + +Run: `cd /Users/haojiang/Documents/2026/PaperMind && python -c "from packages.integrations.arxiv_client import ArxivClient; print(ArxivClient().fetch_categories()[:3])"` + +--- + +## Phase 3: REST API + +### Task 4: 新增 cs_feeds router + +**Files:** +- Create: `apps/api/routers/cs_feeds.py` +- Reference: `apps/api/routers/topics.py` (作为 API 风格参考) + +**Step 1: 编写 API 路由** + +```python +from fastapi import APIRouter, Depends +from pydantic import BaseModel +from packages.storage.repositories import CSFeedRepository +from packages.integrations.arxiv_client import ArxivClient + +router = APIRouter(prefix="/cs", tags=["cs-feeds"]) + + +class CategoryInfo(BaseModel): + code: str + name: str + description: str + + +class CSFeedItem(BaseModel): + category_code: str + category_name: str + daily_limit: int + enabled: bool + status: str + last_run_at: str | None + last_run_count: int + + +class SubscribeRequest(BaseModel): + category_codes: list[str] + daily_limit: int = 30 + enabled: bool = True + + +def get_repo(): + from packages.storage.database import SessionLocal + session = SessionLocal() + try: + yield CSFeedRepository(session) + finally: + session.close() + + +@router.get("/categories") +def list_categories(repo: CSFeedRepository = Depends(get_repo)): + categories = repo.get_categories() + return {"categories": [CategoryInfo.model_validate(c).__dict__ for c in categories]} + + +@router.get("/feeds") +def list_feeds(repo: CSFeedRepository = Depends(get_repo)): + feeds = repo.get_subscriptions() + categories = {c.code: c.name for c in repo.get_categories()} + return { + "feeds": [ + { + "category_code": f.category_code, + "category_name": categories.get(f.category_code, f.category_code), + "daily_limit": f.daily_limit, + "enabled": f.enabled, + "status": f.status, + "last_run_at": f.last_run_at.isoformat() if f.last_run_at else None, + "last_run_count": f.last_run_count, + } + for f in feeds + ] + } + + +@router.post("/feeds") +def subscribe(req: SubscribeRequest, repo: CSFeedRepository = Depends(get_repo)): + created = [] + for code in req.category_codes: + sub = repo.upsert_subscription(code, req.daily_limit, req.enabled) + created.append({ + "category_code": sub.category_code, + "daily_limit": sub.daily_limit, + "enabled": sub.enabled, + }) + return {"created": len(created), "feeds": created} + + +@router.delete("/feeds/{category_code}") +def unsubscribe(category_code: str, repo: CSFeedRepository = Depends(get_repo)): + deleted = repo.delete_subscription(category_code) + return {"deleted": deleted} +``` + +**Step 2: 注册 router** + +Modify `apps/api/main.py`,在 `app.include_router(topics.router)` 后添加: + +```python +from apps.api.routers import cs_feeds +app.include_router(cs_feeds.router) +``` + +--- + +## Phase 4: 调度服务 + +### Task 5: 新增 CSFeedOrchestrator + +**Files:** +- Create: `packages/ai/cs_feed_orchestrator.py` +- Reference: `packages/ai/daily_runner.py:119-287` (run_topic_ingest 作为参考) + +**Step 1: 编写 Orchestrator** + +```python +from datetime import datetime, timedelta +import threading +import time +import logging + +from packages.integrations.arxiv_client import ArxivClient +from packages.storage.database import SessionLocal +from packages.storage.repositories import CSFeedRepository + +logger = logging.getLogger(__name__) + +TOKEN_BUCKET_SIZE = 20 # 每分钟最多 20 请求 +TOKEN_FILL_RATE = 20 # 每分钟补充 20 个 token +REQUEST_INTERVAL = 3 # 每请求间隔 3 秒 +COOL_DOWN_MINUTES = 30 # 熔断冷却时间 + + +class TokenBucket: + def __init__(self, size: int, fill_rate: int): + self.size = size + self.tokens = size + self.fill_rate = fill_rate + self.last_refill = time.time() + self.lock = threading.Lock() + + def acquire(self, timeout: float = 60) -> bool: + while True: + with self.lock: + self._refill() + if self.tokens >= 1: + self.tokens -= 1 + return True + if time.time() - self.last_refill > timeout: + return False + time.sleep(1) + + def _refill(self): + now = time.time() + elapsed = now - self.last_refill + new_tokens = elapsed * (self.fill_rate / 60) + self.tokens = min(self.size, self.tokens + new_tokens) + self.last_refill = now + + +class CSFeedOrchestrator: + def __init__(self): + self.bucket = TokenBucket(TOKEN_BUCKET_SIZE, TOKEN_FILL_RATE) + + def sync_categories(self): + """从 arXiv 拉取分类并写入 DB""" + client = ArxivClient() + cats = client.fetch_categories() + repo = CSFeedRepository(SessionLocal()) + for c in cats: + repo.upsert_category(c["code"], c["name"], c.get("description", "")) + logger.info("[CSFeed] Synced %d categories", len(cats)) + + def run(self): + """每小时执行一次""" + repo = CSFeedRepository(SessionLocal()) + subs = repo.get_active_subscriptions() + + for sub in subs: + now = datetime.utcnow() + + # 冷却中检查 + if sub.status == "cool_down" and sub.cool_down_until: + if now < sub.cool_down_until: + logger.info("[CSFeed] Skipping %s (cool down until %s)", sub.category_code, sub.cool_down_until) + continue + + # 每日配额检查 + today_start = now.replace(hour=0, minute=0, second=0, microsecond=0) + if sub.last_run_at and sub.last_run_at >= today_start: + remaining = sub.daily_limit - sub.last_run_count + else: + remaining = sub.daily_limit + + if remaining <= 0: + logger.info("[CSFeed] Skipping %s (daily limit reached)", sub.category_code) + continue + + # 请求间隔 + if not self.bucket.acquire(timeout=30): + logger.warning("[CSFeed] Token bucket timeout, skipping %s", sub.category_code) + continue + time.sleep(REQUEST_INTERVAL) + + # 抓取 + try: + client = ArxivClient() + papers = client.fetch_latest( + query=f"cat:{sub.category_code}", + max_results=remaining, + days_back=7, + ) + # upsert papers (复用现有逻辑) + from packages.storage.repositories import PaperRepository + paper_repo = PaperRepository(SessionLocal()) + count = 0 + for p in papers: + paper_repo.upsert_paper(p) + count += 1 + + repo.update_run_status(sub.category_code, count) + logger.info("[CSFeed] %s: ingested %d papers", sub.category_code, count) + + except Exception as e: + err_str = str(e) + if "429" in err_str or "Too Many Requests" in err_str: + repo.set_cool_down(sub.category_code, now + timedelta(minutes=COOL_DOWN_MINUTES)) + logger.warning("[CSFeed] Rate limited %s, cool down 30min", sub.category_code) + else: + logger.error("[CSFeed] Error fetching %s: %s", sub.category_code, e) +``` + +**Step 2: 注册定时任务** + +Modify `apps/worker/main.py`,在 `topic_dispatch_job` 旁边添加: + +```python +from packages.ai.cs_feed_orchestrator import CSFeedOrchestrator + +cs_orchestrator = CSFeedOrchestrator() + +def cs_feed_dispatch_job(): + """每小时同步分类 + 执行订阅抓取""" + cs_orchestrator.sync_categories() + cs_orchestrator.run() +``` + +并在 APScheduler 注册: + +```python +scheduler.add_job(cs_feed_dispatch_job, "cron", minute=0, id="cs_feed_dispatch") +``` + +--- + +## Phase 5: 前端 UI + +### Task 6: 新增 CSFeeds 前端页面 + +**Files:** +- Create: `frontend/src/pages/CSFeeds.tsx` +- Reference: `frontend/src/pages/Topics.tsx` (作为 UI 风格参考) + +**Step 1: 编写 CSFeeds 页面组件** + +```tsx +import { useEffect, useState } from "react"; +import { Loader2, RefreshCw, CheckCircle2, XCircle, Search } from "lucide-react"; +import { topicApi } from "@/services/api"; + +interface CSCategory { + code: string; + name: string; + description: string; +} + +interface CSFeed { + category_code: string; + category_name: string; + daily_limit: number; + enabled: boolean; + status: string; + last_run_at: string | null; + last_run_count: number; +} + +const ARXIV_CS_PREFIXES = [ + "cs.CV", "cs.LG", "cs.CL", "cs.AI", "cs.NE", "cs.CR", "cs.DB", + "cs.DC", "cs.DL", "cs.DM", "cs.DS", "cs.ET", "cs.FL", "cs.GL", + "cs.GR", "cs.GT", "cs.HC", "cs.IR", "cs.IT", "cs.LO", "cs.MA", + "cs.MM", "cs.MS", "cs.NA", "cs.NI", "cs.OH", "cs.OS", "cs.PL", + "cs.RO", "cs.SC", "cs.SD", "cs.SE", "cs.SI", "cs.SY", +]; + +export default function CSFeeds() { + const [categories, setCategories] = useState([]); + const [feeds, setFeeds] = useState([]); + const [loading, setLoading] = useState(true); + const [search, setSearch] = useState(""); + const [globalLimit, setGlobalLimit] = useState(30); + const [saving, setSaving] = useState(false); + + async function loadData() { + setLoading(true); + try { + const [catRes, feedRes] = await Promise.all([ + topicApi.csCategories(), + topicApi.csFeeds(), + ]); + setCategories(catRes.categories || []); + setFeeds(feedRes.feeds || []); + } finally { + setLoading(false); + } + } + + useEffect(() => { loadData(); }, []); + + const subscribedCodes = new Set(feeds.map(f => f.category_code)); + const filtered = categories.filter(c => + c.code.toLowerCase().includes(search.toLowerCase()) || + c.name.toLowerCase().includes(search.toLowerCase()) + ); + + async function toggleCategory(code: string) { + if (subscribedCodes.has(code)) { + await topicApi.csFeedDelete(code); + } else { + await topicApi.csFeedCreate({ category_codes: [code], daily_limit: globalLimit }); + } + await loadData(); + } + + if (loading) { + return ( +
+ +
+ ); + } + + return ( +
+
+

arXiv CS 分类订阅

+

订阅 CS 细分领域,自动抓取最新论文

+
+ +
+ + setGlobalLimit(Number(e.target.value))} + className="w-20 rounded-lg border bg-background px-3 py-1.5 text-sm" + min={1} + max={200} + /> + 篇/分类/天 + +
+ +
+
+
+ + setSearch(e.target.value)} + className="flex-1 rounded-lg border bg-background px-3 py-1.5 text-sm" + /> +
+
+ {filtered.slice(0, 40).map(c => ( + + ))} +
+
+ +
+

已订阅 ({feeds.length} 个分类)

+ {feeds.length === 0 ? ( +

左侧勾选要订阅的分类

+ ) : ( +
+ {feeds.map(f => ( +
+
+
+ {f.category_code} + + {f.status === "active" ? "运行中" : f.status === "cool_down" ? "冷却中" : "已暂停"} + +
+
+ 配额 {f.daily_limit}/天 · 上次入库 {f.last_run_count} 篇 + {f.last_run_at && ` · ${new Date(f.last_run_at).toLocaleDateString()}`} +
+
+ +
+ ))} +
+ )} +
+
+
+ ); +} +``` + +**Step 2: 添加 API 方法** + +Modify `frontend/src/services/api.ts`,添加: + +```ts +csCategories(): Promise<{ categories: CSCategory[] }> +csFeeds(): Promise<{ feeds: CSFeed[] }> +csFeedCreate(req: { category_codes: string[]; daily_limit: number }): Promise +csFeedDelete(categoryCode: string): Promise +``` + +--- + +### Task 7: Topics 页面添加 Tab 切换 + +**Files:** +- Modify: `frontend/src/pages/Topics.tsx` + +**Step 1: 在 Topics.tsx 顶部添加 Tab 状态** + +```tsx +const [activeTab, setActiveTab] = useState<"topics" | "cs-feeds">("topics"); +``` + +**Step 2: 在 Topics 组件 return 的顶部添加 Tab 栏** + +在 `
` 之前添加: + +```tsx +
+ + +
+``` + +**Step 3: 根据 Tab 条件渲染** + +把 `return` 的主体用条件包裹: + +```tsx +if (activeTab === "cs-feeds") { + return ; +} + +return ( +
+ {/* 原有的 Topics 页面内容 */} +
+); +``` + +**Step 4: 导入 CSFeeds** + +在文件顶部添加: + +```tsx +import CSFeeds from "./CSFeeds"; +``` + +--- + +## Phase 6: 数据库迁移 + +### Task 8: 生成并执行数据库迁移 + +**Step 1: 生成迁移** + +Run: `cd /Users/haojiang/Documents/2026/PaperMind/infra && alembic revision --autogenerate -m "add cs_categories and cs_feed_subscriptions"` + +**Step 2: 执行迁移** + +Run: `cd /Users/haojiang/Documents/2026/PaperMind/infra && alembic upgrade head` + +--- + +## 验证清单 + +- [ ] `GET /cs/categories` 返回 CS 分类列表 +- [ ] `POST /cs/feeds` 可订阅分类 +- [ ] `GET /cs/feeds` 可查看已订阅列表 +- [ ] `DELETE /cs/feeds/{code}` 可取消订阅 +- [ ] Topics 页面 Tab 切换正常 +- [ ] 分类订阅 Tab 显示分类列表和已订阅状态 +- [ ] 勾选分类后 `topics.csFeedCreate` API 被调用 +- [ ] Worker 每小时整点触发 `cs_feed_dispatch_job` +- [ ] 触发 429 后分类进入 30 分钟冷却 +- [ ] 每日配额控制生效 From 66c08e68a9830da9d9a5d8492d7d248090d0a6ea Mon Sep 17 00:00:00 2001 From: Color2333 <1552429809@qq.com> Date: Thu, 19 Mar 2026 16:10:43 +0800 Subject: [PATCH 11/17] feat: add GitHub agent workflow for AI review --- .github/workflows/opencode.yml | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 .github/workflows/opencode.yml diff --git a/.github/workflows/opencode.yml b/.github/workflows/opencode.yml new file mode 100644 index 0000000..b767381 --- /dev/null +++ b/.github/workflows/opencode.yml @@ -0,0 +1,33 @@ +name: opencode + +on: + issue_comment: + types: [created] + pull_request_review_comment: + types: [created] + +jobs: + opencode: + if: | + contains(github.event.comment.body, ' /oc') || + startsWith(github.event.comment.body, '/oc') || + contains(github.event.comment.body, ' /opencode') || + startsWith(github.event.comment.body, '/opencode') + runs-on: ubuntu-latest + permissions: + id-token: write + contents: read + pull-requests: read + issues: read + steps: + - name: Checkout repository + uses: actions/checkout@v6 + with: + persist-credentials: false + + - name: Run opencode + uses: anomalyco/opencode/github@latest + env: + ALIBABA_CODING_PLAN_API_KEY: ${{ secrets.ALIBABA_CODING_PLAN_API_KEY }} + with: + model: alibaba-coding-plan-cn/qwen3.5-plus \ No newline at end of file From dce5d735510f89cbbb438ef1191ed66ec404962e Mon Sep 17 00:00:00 2001 From: Color2333 <1552429809@qq.com> Date: Thu, 19 Mar 2026 17:18:46 +0800 Subject: [PATCH 12/17] =?UTF-8?q?feat(cs-feeds):=20=E5=AE=9E=E7=8E=B0=20ar?= =?UTF-8?q?Xiv=20CS=20=E5=88=86=E7=B1=BB=E8=AE=A2=E9=98=85=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 后端: CSCategory/CSFeedSubscription 模型, CSFeedRepository, cs_feeds API - 前端: CSFeeds 页面, Collect 页面 Tab 集成, Papers 分类筛选 - 统计页: SectionCard 风格重构, 月度趋势优化 - 任务管理: GlobalTaskBar 进度展示 - 删除孤立 Topics.tsx 文件 --- apps/api/main.py | 8 +- apps/api/routers/cs_feeds.py | 178 +++++++ apps/api/routers/papers.py | 13 +- apps/api/routers/system.py | 2 +- apps/worker/main.py | 22 +- frontend/src/pages/CSFeeds.tsx | 238 ++++++++++ frontend/src/pages/Collect.tsx | 68 ++- frontend/src/pages/Dashboard.tsx | 38 +- frontend/src/pages/Papers.tsx | 20 +- frontend/src/pages/Statistics.tsx | 447 +++++++++--------- frontend/src/pages/Topics.tsx | 349 -------------- frontend/src/services/api.ts | 15 + ...2ad8a6ed_add_cs_categories_and_cs_feed_.py | 190 ++++++++ packages/ai/cs_feed_orchestrator.py | 133 ++++++ packages/integrations/arxiv_client.py | 54 ++- packages/storage/models.py | 29 +- packages/storage/repositories.py | 137 ++++-- 17 files changed, 1319 insertions(+), 622 deletions(-) create mode 100644 apps/api/routers/cs_feeds.py create mode 100644 frontend/src/pages/CSFeeds.tsx delete mode 100644 frontend/src/pages/Topics.tsx create mode 100644 infra/migrations/versions/b1d72ad8a6ed_add_cs_categories_and_cs_feed_.py create mode 100644 packages/ai/cs_feed_orchestrator.py diff --git a/apps/api/main.py b/apps/api/main.py index f6ee0a8..ea8abc5 100644 --- a/apps/api/main.py +++ b/apps/api/main.py @@ -101,6 +101,7 @@ async def dispatch(self, request: Request, call_next): request.state.user = payload return await call_next(request) + # ---------- 启动时检查认证配置 ---------- settings = get_settings() @@ -119,6 +120,7 @@ async def dispatch(self, request: Request, call_next): app.add_middleware(AuthMiddleware) app.add_middleware(GZipMiddleware, minimum_size=1000) # Starlette 内置跳过 text/event-stream + @app.exception_handler(AppError) async def app_error_handler(_request: Request, exc: AppError): """统一处理所有业务异常""" @@ -150,19 +152,23 @@ async def app_error_handler(_request: Request, exc: AppError): agent, auth, content, + cs_feeds, graph, jobs, papers, pipelines, - settings as settings_router, system, topics, writing, ) +from apps.api.routers import ( + settings as settings_router, +) app.include_router(system.router) app.include_router(papers.router) app.include_router(topics.router) +app.include_router(cs_feeds.router) app.include_router(graph.router) app.include_router(agent.router) app.include_router(content.router) diff --git a/apps/api/routers/cs_feeds.py b/apps/api/routers/cs_feeds.py new file mode 100644 index 0000000..7fe94bd --- /dev/null +++ b/apps/api/routers/cs_feeds.py @@ -0,0 +1,178 @@ +"""CS 分类订阅 API +@author Color2333 +""" + +import logging + +from fastapi import APIRouter, Depends, Query, Request + +from packages.domain.task_tracker import global_tracker +from packages.storage.db import SessionLocal +from packages.storage.repositories import CSFeedRepository + +logger = logging.getLogger(__name__) + +router = APIRouter(prefix="/cs", tags=["cs-feeds"]) + + +def get_repo(): + session = SessionLocal() + try: + yield CSFeedRepository(session) + finally: + session.close() + + +class CategoryInfo: + def __init__(self, code: str, name: str, description: str = ""): + self.code = code + self.name = name + self.description = description + + +class FeedInfo: + def __init__( + self, + category_code: str, + category_name: str, + daily_limit: int, + enabled: bool, + status: str, + last_run_at: str | None, + last_run_count: int, + ): + self.category_code = category_code + self.category_name = category_name + self.daily_limit = daily_limit + self.enabled = enabled + self.status = status + self.last_run_at = last_run_at + self.last_run_count = last_run_count + + +@router.get("/categories") +def list_categories(repo: CSFeedRepository = Depends(get_repo)): + categories = repo.get_categories() + return { + "categories": [ + {"code": c.code, "name": c.name, "description": c.description} for c in categories + ] + } + + +@router.get("/feeds") +def list_feeds(repo: CSFeedRepository = Depends(get_repo)): + feeds = repo.get_subscriptions() + categories = {c.code: c.name for c in repo.get_categories()} + return { + "feeds": [ + { + "category_code": f.category_code, + "category_name": categories.get(f.category_code, f.category_code), + "daily_limit": f.daily_limit, + "enabled": f.enabled, + "status": f.status, + "last_run_at": f.last_run_at.isoformat() if f.last_run_at else None, + "last_run_count": f.last_run_count, + } + for f in feeds + ] + } + + +@router.post("/feeds") +async def subscribe( + repo: CSFeedRepository = Depends(get_repo), + category_codes: list[str] | None = Query(default=None, alias="category_codes"), + daily_limit: int = Query(default=30, alias="daily_limit"), + enabled: bool = Query(default=True, alias="enabled"), + request: Request = None, +): + if category_codes is None and request is not None: + body = await request.json() + category_codes = body.get("category_codes", []) + daily_limit = body.get("daily_limit", 30) + enabled = body.get("enabled", True) + if not category_codes: + category_codes = [] + created = [] + for code in category_codes: + sub = repo.upsert_subscription(code, daily_limit, enabled) + created.append( + { + "category_code": sub.category_code, + "daily_limit": sub.daily_limit, + "enabled": sub.enabled, + } + ) + return {"created": len(created), "feeds": created} + + +@router.delete("/feeds/{category_code}") +def unsubscribe(category_code: str, repo: CSFeedRepository = Depends(get_repo)): + deleted = repo.delete_subscription(category_code) + return {"deleted": deleted} + + +@router.patch("/feeds/{category_code}") +def update_feed( + category_code: str, + daily_limit: int | None = Query(default=None, alias="daily_limit"), + enabled: bool | None = Query(default=None, alias="enabled"), + repo: CSFeedRepository = Depends(get_repo), +): + sub = repo.get_subscription(category_code) + if not sub: + return {"error": "订阅不存在"} + if daily_limit is not None: + sub.daily_limit = daily_limit + if enabled is not None: + sub.enabled = enabled + repo.session.commit() + return { + "category_code": sub.category_code, + "daily_limit": sub.daily_limit, + "enabled": sub.enabled, + } + + +@router.post("/feeds/{category_code}/fetch") +def fetch_category( + category_code: str, + repo: CSFeedRepository = Depends(get_repo), +): + """手动触发单个分类的论文抓取(后台任务)""" + sub = repo.get_subscription(category_code) + if not sub: + return {"error": "订阅不存在"} + + def _fetch_fn(progress_callback=None): + from packages.integrations.arxiv_client import ArxivClient + from packages.storage.db import session_scope + from packages.storage.repositories import PaperRepository + + client = ArxivClient() + papers = client.fetch_latest( + query=f"cat:{category_code}", + max_results=sub.daily_limit, + days_back=7, + ) + count = 0 + with session_scope() as session: + paper_repo = PaperRepository(session) + for p in papers: + paper_repo.upsert_paper(p) + count += 1 + repo.update_run_status(category_code, count) + return {"fetched": count} + + task_id = global_tracker.submit( + task_type="cs_feed_fetch", + title=f"📥 抓取分类: {category_code}", + fn=_fetch_fn, + ) + return { + "status": "started", + "task_id": task_id, + "message": f"「{category_code}」抓取已在后台启动", + } diff --git a/apps/api/routers/papers.py b/apps/api/routers/papers.py index 47e0285..0dfddb8 100644 --- a/apps/api/routers/papers.py +++ b/apps/api/routers/papers.py @@ -42,6 +42,7 @@ def latest( search: str | None = Query(default=None), sort_by: str = Query(default="created_at"), sort_order: str = Query(default="desc"), + category: str | None = Query(default=None), ) -> dict: with session_scope() as session: repo = PaperRepository(session) @@ -53,8 +54,11 @@ def latest( status=status, date_str=date, search=search.strip() if search else None, - sort_by=sort_by if sort_by in ("created_at", "publication_date", "title") else "created_at", + sort_by=sort_by + if sort_by in ("created_at", "publication_date", "title") + else "created_at", sort_order=sort_order if sort_order in ("asc", "desc") else "desc", + category=category, ) resp = paper_list_response(papers, repo) resp["total"] = total @@ -121,9 +125,10 @@ def paper_detail(paper_id: UUID) -> dict: raise HTTPException(status_code=404, detail=str(exc)) from exc topic_map = repo.get_topic_names_for_papers([str(p.id)]) # 查询已有分析报告 - from packages.storage.models import AnalysisReport as AR from sqlalchemy import select as _sel + from packages.storage.models import AnalysisReport as AR + ar = session.execute(_sel(AR).where(AR.paper_id == str(p.id))).scalar_one_or_none() skim_data = None deep_data = None @@ -277,9 +282,10 @@ def get_paper_figures(paper_id: UUID) -> dict: @router.get("/papers/{paper_id}/figures/{figure_id}/image") def get_figure_image(paper_id: UUID, figure_id: str): """返回图表原始图片文件""" + from sqlalchemy import select + from packages.storage.db import session_scope from packages.storage.models import ImageAnalysis - from sqlalchemy import select with session_scope() as session: row = session.execute( @@ -305,7 +311,6 @@ def analyze_paper_figures( max_figures: int = Query(default=10, ge=1, le=30), ) -> dict: """提取并解读论文中的图表(异步任务)""" - from packages.domain.task_tracker import global_tracker # 先验证论文和 PDF with session_scope() as session: diff --git a/apps/api/routers/system.py b/apps/api/routers/system.py index 5ae520a..4f0da62 100644 --- a/apps/api/routers/system.py +++ b/apps/api/routers/system.py @@ -58,6 +58,6 @@ def system_status() -> dict: @router.get("/metrics/costs") -def cost_metrics(days: int = Query(default=7, ge=1, le=90)) -> dict: +def cost_metrics(days: int = Query(default=7, ge=0, le=3650)) -> dict: with session_scope() as session: return PromptTraceRepository(session).summarize_costs(days=days) diff --git a/apps/worker/main.py b/apps/worker/main.py index 6b8ee25..3f55023 100644 --- a/apps/worker/main.py +++ b/apps/worker/main.py @@ -9,13 +9,14 @@ import logging import signal import time -from datetime import datetime, timezone +from datetime import UTC, datetime from pathlib import Path from threading import Event from apscheduler.schedulers.blocking import BlockingScheduler from apscheduler.triggers.cron import CronTrigger +from packages.ai.cs_feed_orchestrator import CSFeedOrchestrator from packages.ai.daily_runner import ( run_daily_brief, run_topic_ingest, @@ -65,6 +66,8 @@ def _retry_with_backoff(fn, *args, max_retries: int = 3, base_delay: float = 5.0 _RETRY_MAX = settings.worker_retry_max _RETRY_DELAY = settings.worker_retry_base_delay +cs_orchestrator = CSFeedOrchestrator() + def _should_run(freq: str, time_utc: int, hour: int, weekday: int) -> bool: """判断当前 UTC 小时是否匹配主题的调度规则""" @@ -81,7 +84,7 @@ def _should_run(freq: str, time_utc: int, hour: int, weekday: int) -> bool: def topic_dispatch_job() -> None: """每小时执行:检查哪些主题需要在当前小时触发""" - now = datetime.now(timezone.utc) + now = datetime.now(UTC) hour = now.hour weekday = now.weekday() # 0=Monday @@ -159,6 +162,12 @@ def weekly_graph_job() -> None: _write_heartbeat() +def cs_feed_dispatch_job(): + """每小时同步分类 + 执行订阅抓取""" + cs_orchestrator.sync_categories() + cs_orchestrator.run() + + def run_worker() -> None: """ Worker 主函数 - UTC 时间智能调度 @@ -188,6 +197,15 @@ def run_worker() -> None: ) logger.info("✅ 已添加:主题分发任务(每小时整点,UTC)") + # CS 分类订阅调度(每小时整点) + scheduler.add_job( + cs_feed_dispatch_job, + trigger=CronTrigger(minute=0), + id="cs_feed_dispatch", + replace_existing=True, + ) + logger.info("✅ 已添加:CS分类订阅调度任务(每小时整点,UTC)") + # 每日简报(从数据库读取 cron 表达式) from packages.storage.db import session_scope from packages.storage.repositories import DailyReportConfigRepository diff --git a/frontend/src/pages/CSFeeds.tsx b/frontend/src/pages/CSFeeds.tsx new file mode 100644 index 0000000..11abb28 --- /dev/null +++ b/frontend/src/pages/CSFeeds.tsx @@ -0,0 +1,238 @@ +import { useEffect, useState, useCallback } from "react"; +import { Loader2, RefreshCw, Layers, Pencil, Check, X, Play } from "lucide-react"; +import { topicApi } from "@/services/api"; +import { Button } from "@/components/ui"; + +interface CSCategory { + code: string; + name: string; + description: string; +} + +interface CSFeed { + category_code: string; + category_name: string; + daily_limit: number; + enabled: boolean; + status: string; + last_run_at: string | null; + last_run_count: number; +} + +export default function CSFeeds() { + const [categories, setCategories] = useState([]); + const [feeds, setFeeds] = useState([]); + const [loading, setLoading] = useState(true); + const [globalLimit, setGlobalLimit] = useState(30); + const [editingCode, setEditingCode] = useState(null); + const [editLimit, setEditLimit] = useState(30); + const [fetchingCode, setFetchingCode] = useState(null); + + const loadData = useCallback(async () => { + setLoading(true); + try { + const [catRes, feedRes] = await Promise.all([ + topicApi.csCategories(), + topicApi.csFeeds(), + ]); + setCategories(catRes.categories || []); + setFeeds(feedRes.feeds || []); + } finally { + setLoading(false); + } + }, []); + + useEffect(() => { loadData(); }, [loadData]); + + const subscribedCodes = new Set(feeds.map(f => f.category_code)); + + async function toggleCategory(code: string) { + if (subscribedCodes.has(code)) { + await topicApi.csFeedDelete(code); + } else { + await topicApi.csFeedCreate({ category_codes: [code], daily_limit: globalLimit }); + } + await loadData(); + } + + async function handleFetch(code: string) { + setFetchingCode(code); + try { + await topicApi.csFeedFetch(code); + } finally { + setFetchingCode(null); + } + } + + async function updateLimit(code: string, newLimit: number) { + await topicApi.csFeedUpdate(code, { daily_limit: newLimit }); + setEditingCode(null); + await loadData(); + } + + function startEdit(feed: CSFeed) { + setEditingCode(feed.category_code); + setEditLimit(feed.daily_limit); + } + + if (loading) { + return ( +
+ +
+ ); + } + + return ( +
+
+
+
+

arXiv CS 分类订阅

+

订阅感兴趣的 CS 细分领域,自动抓取最新论文

+
+
+ 新增默认配额 + setGlobalLimit(Number(e.target.value))} + className="w-16 h-8 rounded-lg border border-border bg-page px-2 text-sm text-center" + min={1} + max={200} + /> + 篇/天 +
+
+ +
+
+ 共 {categories.length} 个分类 · 已订阅 {feeds.length} 个 + +
+
+ {categories.map(c => { + const subscribed = subscribedCodes.has(c.code); + const feed = feeds.find(f => f.category_code === c.code); + return ( +
+ + {feeds.length > 0 && ( +
+

已订阅分类

+
+ {feeds.map(f => ( +
+
+
+
+
+ {f.category_code} + + {f.status === "active" ? "运行中" : f.status === "cool_down" ? "冷却中" : "已暂停"} + +
+
+ {f.last_run_at && `上次 ${new Date(f.last_run_at).toLocaleDateString()} · `} + 已入库 {f.last_run_count} 篇 +
+
+
+
+ {editingCode === f.category_code ? ( + <> + setEditLimit(Number(e.target.value))} + className="w-16 h-7 rounded-lg border border-border bg-page px-2 text-xs text-center" + min={1} + max={200} + /> + 篇/天 + + + + ) : ( + <> + + {f.daily_limit} 篇/天 + + + + )} +
+
+ ))} +
+
+ )} +
+ ); +} diff --git a/frontend/src/pages/Collect.tsx b/frontend/src/pages/Collect.tsx index a551c8e..8395194 100644 --- a/frontend/src/pages/Collect.tsx +++ b/frontend/src/pages/Collect.tsx @@ -31,13 +31,16 @@ import { Hash, Zap, Play, + Layers, } from "lucide-react"; import { ingestApi, topicApi } from "@/services/api"; import { useToast } from "@/contexts/ToastContext"; import ConfirmDialog from "@/components/ConfirmDialog"; import type { Topic, TopicCreate, TopicUpdate, ScheduleFrequency, KeywordSuggestion, IngestPaper, TopicFetchResult } from "@/types"; +import CSFeeds from "./CSFeeds"; type SortBy = "submittedDate" | "relevance" | "lastUpdatedDate"; +type ActiveTab = "search" | "subscriptions" | "csfeeds"; interface SearchResult { ingested: number; @@ -79,6 +82,9 @@ export default function Collect() { const { toast } = useToast(); const navigate = useNavigate(); + // ========== Tab 切换 ========== + const [activeTab, setActiveTab] = useState("search"); + // ========== 即时搜索 ========== const [query, setQuery] = useState(""); const [maxResults, setMaxResults] = useState(20); @@ -255,15 +261,54 @@ export default function Collect() {
{/* 页面头 */}
-
-
-
-

论文收集

-

搜索下载论文 · 创建订阅自动收集 · 随时手动触发抓取

+
+
+
+
+

论文收集

+

搜索下载论文 · 创建订阅自动收集

+
+ {/* Tab 切换 */} +
+ + + +
+ {/* 错误 */} {error && (
@@ -276,6 +321,7 @@ export default function Collect() { {/* ================================================================ * 即时搜索区 * ================================================================ */} + {activeTab === "search" && (
@@ -320,10 +366,10 @@ export default function Collect() { {query.trim() && ( )}
@@ -337,10 +383,12 @@ export default function Collect() {
)}
+ )} {/* ================================================================ * 自动订阅管理 * ================================================================ */} + {activeTab === "subscriptions" && (
@@ -467,6 +515,12 @@ export default function Collect() {
)}
+ )} + + {/* ================================================================ + * 分类订阅 + * ================================================================ */} + {activeTab === "csfeeds" && } (null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); + const [costDays, setCostDays] = useState(7); async function loadData() { setLoading(true); @@ -87,7 +88,7 @@ export default function Dashboard() { try { const [s, c, r, t] = await Promise.all([ systemApi.status(), - metricsApi.costs(7), + metricsApi.costs(costDays), pipelineApi.runs(10), todayApi.summary().catch(() => null), ]); @@ -102,7 +103,7 @@ export default function Dashboard() { } } - useEffect(() => { loadData(); }, []); + useEffect(() => { loadData(); }, [costDays]); if (loading) return ; if (error) { @@ -187,7 +188,7 @@ export default function Dashboard() { /> } - label="7日 Token" + label={costDays > 0 ? `${costDays}日 Token` : "历史 Token"} value={fmtTokens((costs?.input_tokens ?? 0) + (costs?.output_tokens ?? 0))} sub={`${costs?.calls ?? 0} 次调用`} color="success" @@ -199,7 +200,25 @@ export default function Dashboard() { {/* 左侧:成本分析 + 活动记录 */}
{/* Token 用量分析 */} - }> + } + action={ +
+ {[{ label: "1d", days: 1 }, { label: "7d", days: 7 }, { label: "30d", days: 30 }, { label: "历史", days: 0 }].map(opt => ( + + ))} +
+ } + > {costs && costs.by_stage.length > 0 ? (
{/* 总量概览 */} @@ -376,12 +395,15 @@ export default function Dashboard() { /* ========== 子组件 ========== */ -function SectionCard({ title, icon, children }: { title: string; icon: React.ReactNode; children: React.ReactNode }) { +function SectionCard({ title, icon, action, children }: { title: string; icon: React.ReactNode; action?: React.ReactNode; children: React.ReactNode }) { return (
-
- {icon} -

{title}

+
+
+ {icon} +

{title}

+
+ {action}
{children}
diff --git a/frontend/src/pages/Papers.tsx b/frontend/src/pages/Papers.tsx index 83bfb79..4e4ba42 100644 --- a/frontend/src/pages/Papers.tsx +++ b/frontend/src/pages/Papers.tsx @@ -115,6 +115,8 @@ export default function Papers() { const [sortBy, setSortBy] = useState("created_at"); const [sortOrder, setSortOrder] = useState<"asc" | "desc">("desc"); const [statusFilter, setStatusFilter] = useState(""); + const [activeCategory, setActiveCategory] = useState(); + const [csFeeds, setCsFeeds] = useState<{ category_code: string; category_name: string }[]>([]); useEffect(() => { clearTimeout(searchTimerRef.current); @@ -174,16 +176,18 @@ export default function Papers() { status: statusFilter || undefined, sortBy, sortOrder, + category: activeCategory || undefined, }); setPapers(res.items); setTotal(res.total); setTotalPages(res.total_pages); setSelected(new Set()); } catch { toast("error", "加载论文列表失败"); } finally { setLoading(false); } - }, [activeFolder, activeDate, activeActionId, page, pageSize, debouncedSearch, statusFilter, sortBy, sortOrder, toast]); + }, [activeFolder, activeDate, activeActionId, page, pageSize, debouncedSearch, statusFilter, sortBy, sortOrder, activeCategory, toast]); useEffect(() => { loadFolderStats(); }, [loadFolderStats]); useEffect(() => { loadPapers(); }, [loadPapers]); + useEffect(() => { topicApi.csFeeds().then(r => setCsFeeds(r.feeds || [])).catch(() => {}); }, []); /* 构建文件夹列表 */ const folders = useMemo((): FolderItem[] => { @@ -555,6 +559,20 @@ export default function Papers() { {/* 分隔线 */}
+ {/* CS 分类筛选 */} + {csFeeds.length > 0 && ( + + )} + {/* 排序字段 */} setSearchTerm(e.target.value)} - className="h-10 w-full rounded-lg border border-border bg-surface pl-9 pr-4 text-sm text-ink placeholder:text-ink-placeholder focus:border-primary focus:outline-none focus:ring-2 focus:ring-primary/20" - /> -
- - {loading ? ( - - ) : filtered.length === 0 ? ( - } - title="暂无主题" - description="创建一个研究主题开始追踪论文" - action={ - - } - /> - ) : ( -
- {filtered.map((topic) => ( - -
-
-
-

- {topic.name} -

- - {topic.enabled ? "启用" : "禁用"} - -
-

{topic.query}

-
- 每次抓取: {topic.max_results_per_run} 篇 - 重试上限: {topic.retry_limit} 次 -
-
-
-
- - - -
-
- ))} -
- )} - - {/* 创建/编辑弹窗 */} - setModalOpen(false)} - topic={editingTopic} - onSaved={loadTopics} - /> -
- ); -} - -function TopicModal({ - open, - onClose, - topic, - onSaved, -}: { - open: boolean; - onClose: () => void; - topic: Topic | null; - onSaved: () => void; -}) { - const isEdit = !!topic; - const [form, setForm] = useState({ - name: "", - query: "", - enabled: true, - max_results_per_run: 20, - retry_limit: 2, - }); - const [dateFilterEnabled, setDateFilterEnabled] = useState(false); - const [dateFilterDays, setDateFilterDays] = useState(7); - const [saving, setSaving] = useState(false); - - useEffect(() => { - if (topic) { - setForm({ - name: topic.name, - query: topic.query, - enabled: topic.enabled, - max_results_per_run: topic.max_results_per_run, - retry_limit: topic.retry_limit, - }); - setDateFilterEnabled(topic.enable_date_filter ?? false); - setDateFilterDays(topic.date_filter_days ?? 7); - } else { - setForm({ name: "", query: "", enabled: true, max_results_per_run: 20, retry_limit: 2 }); - setDateFilterEnabled(false); - setDateFilterDays(7); - } - }, [topic, open]); - - const handleSubmit = async () => { - if (!form.name.trim() || !form.query.trim()) return; - setSaving(true); - try { - if (isEdit) { - await topicApi.update(topic!.id, { - query: form.query, - enabled: form.enabled, - max_results_per_run: form.max_results_per_run, - retry_limit: form.retry_limit, - }); - } else { - await topicApi.create({ - ...form, - enable_date_filter: dateFilterEnabled, - date_filter_days: dateFilterDays, - }); - } - onSaved(); - onClose(); - } finally { - setSaving(false); - } - }; - - return ( - -
- setForm({ ...form, name: e.target.value })} - disabled={isEdit} - /> - setForm({ ...form, query: e.target.value })} - /> -
- - setForm({ ...form, max_results_per_run: parseInt(e.target.value) || 20 }) - } - /> - - setForm({ ...form, retry_limit: parseInt(e.target.value) || 2 }) - } - /> -
-
- - {dateFilterEnabled && ( -
- setDateFilterDays(parseInt(e.target.value) || 7)} - placeholder="7=最近7天,30=最近30天" - /> -
- )} -
- -
- - -
-
-
- ); -} diff --git a/frontend/src/services/api.ts b/frontend/src/services/api.ts index 6e0e3e8..29f4374 100644 --- a/frontend/src/services/api.ts +++ b/frontend/src/services/api.ts @@ -174,6 +174,19 @@ export const topicApi = { post<{ suggestions: KeywordSuggestion[] }>("/topics/suggest-keywords", { description }), stats: () => get("/topics/stats"), distribution: () => get("/topics/distribution"), + csCategories: () => get<{ categories: { code: string; name: string; description: string }[] }>("/cs/categories"), + csFeeds: () => get<{ feeds: { category_code: string; category_name: string; daily_limit: number; enabled: boolean; status: string; last_run_at: string | null; last_run_count: number }[] }>("/cs/feeds"), + csFeedCreate: (req: { category_codes: string[]; daily_limit: number }) => + post<{ created: number; feeds: { category_code: string; daily_limit: number; enabled: boolean }[] }>("/cs/feeds", req), + csFeedUpdate: (categoryCode: string, req: { daily_limit?: number; enabled?: boolean }) => { + const params = new URLSearchParams(); + if (req.daily_limit !== undefined) params.set("daily_limit", String(req.daily_limit)); + if (req.enabled !== undefined) params.set("enabled", String(req.enabled)); + return patch<{ category_code: string; daily_limit: number; enabled: boolean }>(`/cs/feeds/${categoryCode}?${params}`); + }, + csFeedFetch: (categoryCode: string) => + post<{ status: string; fetched?: number; message?: string }>(`/cs/feeds/${categoryCode}/fetch`), + csFeedDelete: (categoryCode: string) => del<{ deleted: boolean }>(`/cs/feeds/${categoryCode}`), }; /* ========== 论文 ========== */ @@ -188,6 +201,7 @@ export const paperApi = { search?: string; sortBy?: string; sortOrder?: string; + category?: string; } = {}) => { const params = new URLSearchParams(); params.set("page", String(opts.page || 1)); @@ -199,6 +213,7 @@ export const paperApi = { if (opts.search) params.append("search", opts.search); if (opts.sortBy) params.append("sort_by", opts.sortBy); if (opts.sortOrder) params.append("sort_order", opts.sortOrder); + if (opts.category) params.append("category", opts.category); return get(`/papers/latest?${params}`); }, folderStats: () => get("/papers/folder-stats"), diff --git a/infra/migrations/versions/b1d72ad8a6ed_add_cs_categories_and_cs_feed_.py b/infra/migrations/versions/b1d72ad8a6ed_add_cs_categories_and_cs_feed_.py new file mode 100644 index 0000000..be4e9b1 --- /dev/null +++ b/infra/migrations/versions/b1d72ad8a6ed_add_cs_categories_and_cs_feed_.py @@ -0,0 +1,190 @@ +"""add cs_categories and cs_feed_subscriptions + +Revision ID: b1d72ad8a6ed +Revises: 20260317_0012 +Create Date: 2026-03-19 15:48:01.869654 +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'b1d72ad8a6ed' +down_revision = '20260317_0012' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('cs_categories', + sa.Column('code', sa.String(length=32), nullable=False), + sa.Column('name', sa.String(length=128), nullable=False), + sa.Column('description', sa.String(length=512), nullable=False), + sa.Column('cached_at', sa.DateTime(), nullable=False), + sa.PrimaryKeyConstraint('code') + ) + op.create_table('cs_feed_subscriptions', + sa.Column('id', sa.String(length=36), nullable=False), + sa.Column('category_code', sa.String(length=32), nullable=False), + sa.Column('daily_limit', sa.Integer(), nullable=False), + sa.Column('enabled', sa.Boolean(), nullable=False), + sa.Column('status', sa.String(length=32), nullable=False), + sa.Column('cool_down_until', sa.DateTime(), nullable=True), + sa.Column('last_run_at', sa.DateTime(), nullable=True), + sa.Column('last_run_count', sa.Integer(), nullable=False), + sa.Column('created_at', sa.DateTime(), nullable=False), + sa.PrimaryKeyConstraint('id') + ) + op.create_index(op.f('ix_cs_feed_subscriptions_category_code'), 'cs_feed_subscriptions', ['category_code'], unique=False) + op.alter_column('action_papers', 'id', + existing_type=sa.VARCHAR(length=36), + nullable=False) + op.create_unique_constraint('uq_action_paper', 'action_papers', ['action_id', 'paper_id']) + op.drop_constraint(None, 'action_papers', type_='foreignkey') + op.drop_constraint(None, 'action_papers', type_='foreignkey') + op.create_foreign_key(None, 'action_papers', 'papers', ['paper_id'], ['id'], ondelete='CASCADE') + op.create_foreign_key(None, 'action_papers', 'collection_actions', ['action_id'], ['id'], ondelete='CASCADE') + op.alter_column('agent_conversations', 'user_id', + existing_type=sa.VARCHAR(length=256), + type_=sa.String(length=36), + existing_nullable=True) + op.alter_column('agent_conversations', 'title', + existing_type=sa.VARCHAR(length=512), + type_=sa.String(length=256), + existing_nullable=True) + op.create_index(op.f('ix_agent_conversations_created_at'), 'agent_conversations', ['created_at'], unique=False) + op.alter_column('agent_messages', 'role', + existing_type=sa.VARCHAR(length=32), + type_=sa.String(length=20), + existing_nullable=False) + op.create_index(op.f('ix_agent_messages_created_at'), 'agent_messages', ['created_at'], unique=False) + op.drop_column('agent_messages', 'metadata_json') + op.drop_column('agent_messages', 'markdown') + op.drop_column('agent_messages', 'paper_id') + op.drop_index(op.f('ix_agent_pending_actions_created_at'), table_name='agent_pending_actions') + op.alter_column('collection_actions', 'id', + existing_type=sa.VARCHAR(length=36), + nullable=False) + op.alter_column('collection_actions', 'action_type', + existing_type=sa.VARCHAR(length=32), + type_=sa.Enum('initial_import', 'manual_collect', 'auto_collect', 'agent_collect', 'subscription_ingest', 'reference_import', name='action_type'), + existing_nullable=False) + op.drop_index(op.f('ix_collection_actions_created_at'), table_name='collection_actions') + op.drop_index(op.f('ix_collection_actions_type'), table_name='collection_actions') + op.create_index(op.f('ix_collection_actions_action_type'), 'collection_actions', ['action_type'], unique=False) + op.drop_constraint(None, 'collection_actions', type_='foreignkey') + op.create_foreign_key(None, 'collection_actions', 'topic_subscriptions', ['topic_id'], ['id'], ondelete='SET NULL') + op.alter_column('daily_report_configs', 'cron_expression', + existing_type=sa.VARCHAR(length=64), + nullable=False, + existing_server_default=sa.text('("0 4 * * *")')) + op.alter_column('generated_contents', 'metadata_json', + existing_type=sqlite.JSON(), + nullable=True) + op.alter_column('image_analyses', 'id', + existing_type=sa.VARCHAR(length=36), + nullable=False) + op.drop_constraint(None, 'image_analyses', type_='foreignkey') + op.create_foreign_key(None, 'image_analyses', 'papers', ['paper_id'], ['id'], ondelete='CASCADE') + op.alter_column('papers', 'read_status', + existing_type=sa.VARCHAR(length=8), + type_=sa.Enum('unread', 'skimmed', 'deep_read', name='read_status'), + existing_nullable=False, + existing_server_default=sa.text("'Unread'")) + op.drop_index(op.f('ix_papers_doi'), table_name='papers') + op.drop_index(op.f('ix_papers_source'), table_name='papers') + op.drop_index(op.f('ix_papers_source_id'), table_name='papers') + op.drop_column('papers', 'doi') + op.drop_column('papers', 'source_id') + op.drop_column('papers', 'source') + op.drop_index(op.f('ix_pipeline_runs_created_at'), table_name='pipeline_runs') + op.drop_index(op.f('ix_prompt_traces_created_at'), table_name='prompt_traces') + op.alter_column('topic_subscriptions', 'schedule_frequency', + existing_type=sa.VARCHAR(length=20), + type_=sa.String(length=32), + existing_nullable=False, + existing_server_default=sa.text("'daily'")) + op.drop_column('topic_subscriptions', 'ieee_api_key_override') + op.drop_column('topic_subscriptions', 'sources') + op.drop_column('topic_subscriptions', 'ieee_daily_quota') + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('topic_subscriptions', sa.Column('ieee_daily_quota', sa.INTEGER(), server_default=sa.text("'10'"), nullable=False)) + op.add_column('topic_subscriptions', sa.Column('sources', sqlite.JSON(), server_default=sa.text('\'["arxiv"]\''), nullable=False)) + op.add_column('topic_subscriptions', sa.Column('ieee_api_key_override', sa.VARCHAR(length=512), nullable=True)) + op.alter_column('topic_subscriptions', 'schedule_frequency', + existing_type=sa.String(length=32), + type_=sa.VARCHAR(length=20), + existing_nullable=False, + existing_server_default=sa.text("'daily'")) + op.create_index(op.f('ix_prompt_traces_created_at'), 'prompt_traces', ['created_at'], unique=False) + op.create_index(op.f('ix_pipeline_runs_created_at'), 'pipeline_runs', ['created_at'], unique=False) + op.add_column('papers', sa.Column('source', sa.VARCHAR(length=32), server_default=sa.text("'arxiv'"), nullable=False)) + op.add_column('papers', sa.Column('source_id', sa.VARCHAR(length=128), nullable=True)) + op.add_column('papers', sa.Column('doi', sa.VARCHAR(length=128), nullable=True)) + op.create_index(op.f('ix_papers_source_id'), 'papers', ['source_id'], unique=False) + op.create_index(op.f('ix_papers_source'), 'papers', ['source'], unique=False) + op.create_index(op.f('ix_papers_doi'), 'papers', ['doi'], unique=False) + op.alter_column('papers', 'read_status', + existing_type=sa.Enum('unread', 'skimmed', 'deep_read', name='read_status'), + type_=sa.VARCHAR(length=8), + existing_nullable=False, + existing_server_default=sa.text("'Unread'")) + op.drop_constraint(None, 'image_analyses', type_='foreignkey') + op.create_foreign_key(None, 'image_analyses', 'papers', ['paper_id'], ['id']) + op.alter_column('image_analyses', 'id', + existing_type=sa.VARCHAR(length=36), + nullable=True) + op.alter_column('generated_contents', 'metadata_json', + existing_type=sqlite.JSON(), + nullable=False) + op.alter_column('daily_report_configs', 'cron_expression', + existing_type=sa.VARCHAR(length=64), + nullable=True, + existing_server_default=sa.text('("0 4 * * *")')) + op.drop_constraint(None, 'collection_actions', type_='foreignkey') + op.create_foreign_key(None, 'collection_actions', 'topic_subscriptions', ['topic_id'], ['id']) + op.drop_index(op.f('ix_collection_actions_action_type'), table_name='collection_actions') + op.create_index(op.f('ix_collection_actions_type'), 'collection_actions', ['action_type'], unique=False) + op.create_index(op.f('ix_collection_actions_created_at'), 'collection_actions', ['created_at'], unique=False) + op.alter_column('collection_actions', 'action_type', + existing_type=sa.Enum('initial_import', 'manual_collect', 'auto_collect', 'agent_collect', 'subscription_ingest', 'reference_import', name='action_type'), + type_=sa.VARCHAR(length=32), + existing_nullable=False) + op.alter_column('collection_actions', 'id', + existing_type=sa.VARCHAR(length=36), + nullable=True) + op.create_index(op.f('ix_agent_pending_actions_created_at'), 'agent_pending_actions', ['created_at'], unique=False) + op.add_column('agent_messages', sa.Column('paper_id', sa.VARCHAR(length=36), nullable=True)) + op.add_column('agent_messages', sa.Column('markdown', sa.TEXT(), server_default=sa.text("('')"), nullable=False)) + op.add_column('agent_messages', sa.Column('metadata_json', sqlite.JSON(), server_default=sa.text("'{}'"), nullable=False)) + op.drop_index(op.f('ix_agent_messages_created_at'), table_name='agent_messages') + op.alter_column('agent_messages', 'role', + existing_type=sa.String(length=20), + type_=sa.VARCHAR(length=32), + existing_nullable=False) + op.drop_index(op.f('ix_agent_conversations_created_at'), table_name='agent_conversations') + op.alter_column('agent_conversations', 'title', + existing_type=sa.String(length=256), + type_=sa.VARCHAR(length=512), + existing_nullable=True) + op.alter_column('agent_conversations', 'user_id', + existing_type=sa.String(length=36), + type_=sa.VARCHAR(length=256), + existing_nullable=True) + op.drop_constraint(None, 'action_papers', type_='foreignkey') + op.drop_constraint(None, 'action_papers', type_='foreignkey') + op.create_foreign_key(None, 'action_papers', 'papers', ['paper_id'], ['id']) + op.create_foreign_key(None, 'action_papers', 'collection_actions', ['action_id'], ['id']) + op.drop_constraint('uq_action_paper', 'action_papers', type_='unique') + op.alter_column('action_papers', 'id', + existing_type=sa.VARCHAR(length=36), + nullable=True) + op.drop_index(op.f('ix_cs_feed_subscriptions_category_code'), table_name='cs_feed_subscriptions') + op.drop_table('cs_feed_subscriptions') + op.drop_table('cs_categories') + # ### end Alembic commands ### diff --git a/packages/ai/cs_feed_orchestrator.py b/packages/ai/cs_feed_orchestrator.py new file mode 100644 index 0000000..94d7820 --- /dev/null +++ b/packages/ai/cs_feed_orchestrator.py @@ -0,0 +1,133 @@ +"""CS 分类订阅调度器 +@author Color2333 +""" + +import logging +import threading +import time +from datetime import UTC, datetime, timedelta + +from packages.integrations.arxiv_client import ArxivClient +from packages.storage.db import SessionLocal +from packages.storage.repositories import CSFeedRepository + +logger = logging.getLogger(__name__) + +TOKEN_BUCKET_SIZE = 20 +TOKEN_FILL_RATE = 20 +REQUEST_INTERVAL = 3 +COOL_DOWN_MINUTES = 30 + + +class TokenBucket: + def __init__(self, size: int, fill_rate: int): + self.size = size + self.tokens = float(size) + self.fill_rate = fill_rate + self.last_refill = time.time() + self.lock = threading.Lock() + + def acquire(self, timeout: float = 60) -> bool: + while True: + with self.lock: + self._refill() + if self.tokens >= 1: + self.tokens -= 1 + return True + if time.time() - self.last_refill > timeout: + return False + time.sleep(1) + + def _refill(self): + now = time.time() + elapsed = now - self.last_refill + new_tokens = elapsed * (self.fill_rate / 60) + self.tokens = min(self.size, self.tokens + new_tokens) + self.last_refill = now + + +class CSFeedOrchestrator: + def __init__(self): + self.bucket = TokenBucket(TOKEN_BUCKET_SIZE, TOKEN_FILL_RATE) + + def sync_categories(self): + """从 arXiv 拉取分类并写入 DB""" + client = ArxivClient() + cats = client.fetch_categories() + session = SessionLocal() + try: + repo = CSFeedRepository(session) + for c in cats: + repo.upsert_category(c["code"], c["name"], c.get("description", "")) + logger.info("[CSFeed] Synced %d categories", len(cats)) + finally: + session.close() + + def run(self): + """每小时执行一次""" + session = SessionLocal() + try: + repo = CSFeedRepository(session) + subs = repo.get_active_subscriptions() + now = datetime.now(UTC) + + for sub in subs: + # 冷却中检查 + if sub.status == "cool_down" and sub.cool_down_until: + if now < sub.cool_down_until: + logger.info( + "[CSFeed] Skipping %s (cool down until %s)", + sub.category_code, + sub.cool_down_until, + ) + continue + + # 每日配额检查 + today_start = now.replace(hour=0, minute=0, second=0, microsecond=0) + if sub.last_run_at and sub.last_run_at >= today_start: + remaining = sub.daily_limit - sub.last_run_count + else: + remaining = sub.daily_limit + + if remaining <= 0: + logger.info("[CSFeed] Skipping %s (daily limit reached)", sub.category_code) + continue + + # 请求间隔 + if not self.bucket.acquire(timeout=30): + logger.warning("[CSFeed] Token bucket timeout, skipping %s", sub.category_code) + continue + time.sleep(REQUEST_INTERVAL) + + # 抓取 + try: + client = ArxivClient() + papers = client.fetch_latest( + query=f"cat:{sub.category_code}", + max_results=remaining, + days_back=7, + ) + from packages.storage.repositories import PaperRepository + + paper_repo = PaperRepository(session) + count = 0 + for p in papers: + paper_repo.upsert_paper(p) + count += 1 + + repo.update_run_status(sub.category_code, count) + logger.info("[CSFeed] %s: ingested %d papers", sub.category_code, count) + + except Exception as e: + err_str = str(e) + if "429" in err_str or "Too Many Requests" in err_str: + repo.set_cool_down( + sub.category_code, now + timedelta(minutes=COOL_DOWN_MINUTES) + ) + logger.warning( + "[CSFeed] Rate limited %s, cool down 30min", sub.category_code + ) + else: + logger.error("[CSFeed] Error fetching %s: %s", sub.category_code, e) + finally: + session.close() diff --git a/packages/integrations/arxiv_client.py b/packages/integrations/arxiv_client.py index dbfb40a..6cf3fa9 100644 --- a/packages/integrations/arxiv_client.py +++ b/packages/integrations/arxiv_client.py @@ -7,9 +7,9 @@ import httpx +from packages.ai.rate_limiter import acquire_api, record_rate_limit_error from packages.config import get_settings from packages.domain.schemas import PaperCreate -from packages.ai.rate_limiter import acquire_api, record_rate_limit_error ARXIV_API_URL = "https://export.arxiv.org/api/query" logger = logging.getLogger(__name__) @@ -162,6 +162,58 @@ def download_pdf(self, arxiv_id: str) -> str: target.write_bytes(response.content) return str(target) + def fetch_categories(self) -> list[dict]: + """从 arXiv API 获取 CS 分类列表,失败时返回常用 CS 分类""" + FALLBACK_CS_CATEGORIES = [ + {"code": "cs.CV", "name": "Computer Vision and Pattern Recognition", "description": ""}, + {"code": "cs.LG", "name": "Machine Learning", "description": ""}, + {"code": "cs.CL", "name": "Computation and Language", "description": ""}, + {"code": "cs.AI", "name": "Artificial Intelligence", "description": ""}, + {"code": "cs.NE", "name": "Neural and Evolutionary Computing", "description": ""}, + {"code": "cs.CL", "name": "Computational Linguistics", "description": ""}, + {"code": "cs.IR", "name": "Information Retrieval", "description": ""}, + {"code": "cs.IT", "name": "Information Theory", "description": ""}, + {"code": "cs.CR", "name": "Cryptography and Security", "description": ""}, + {"code": "cs.DS", "name": "Data Structures and Algorithms", "description": ""}, + {"code": "cs.DB", "name": "Databases", "description": ""}, + {"code": "cs.DC", "name": "Distributed Computing", "description": ""}, + {"code": "cs.SE", "name": "Software Engineering", "description": ""}, + {"code": "cs.PL", "name": "Programming Languages", "description": ""}, + {"code": "cs.HC", "name": "Human-Computer Interaction", "description": ""}, + {"code": "cs.GR", "name": "Graphics", "description": ""}, + {"code": "cs.RO", "name": "Robotics", "description": ""}, + {"code": "cs.CY", "name": "Computers and Society", "description": ""}, + {"code": "cs.SI", "name": "Social and Information Networks", "description": ""}, + {"code": "cs.MA", "name": "Multiagent Systems", "description": ""}, + {"code": "cs.MM", "name": "Multimedia", "description": ""}, + {"code": "cs.OH", "name": "Other", "description": ""}, + {"code": "cs.CC", "name": "Computational Complexity", "description": ""}, + {"code": "cs.CE", "name": "Computational Engineering", "description": ""}, + {"code": "cs.GT", "name": "Game Theory", "description": ""}, + {"code": "cs.AR", "name": "Hardware and Architecture", "description": ""}, + ] + try: + url = "https://arxiv.org/api/categories" + acquire_api("arxiv", timeout=30) + response = self.client.get(url, timeout=30) + response.raise_for_status() + root = ElementTree.fromstring(response.text) + categories = [] + for cat in root.findall("category"): + code = cat.find("code").text or "" + if code.startswith("cs."): + categories.append( + { + "code": code, + "name": cat.find("name").text or "", + "description": cat.find("description").text or "", + } + ) + return categories + except Exception: + logger.warning("Failed to fetch categories from arXiv API, using fallback") + return FALLBACK_CS_CATEGORIES + def _parse_atom(self, payload: str) -> list[PaperCreate]: root = ElementTree.fromstring(payload) ns = {"atom": "http://www.w3.org/2005/Atom"} diff --git a/packages/storage/models.py b/packages/storage/models.py index 0e3f5b2..5fac2a1 100644 --- a/packages/storage/models.py +++ b/packages/storage/models.py @@ -7,7 +7,6 @@ from uuid import uuid4 from sqlalchemy import ( - Integer, JSON, Boolean, Date, @@ -16,6 +15,7 @@ Float, ForeignKey, Index, + Integer, String, Text, UniqueConstraint, @@ -446,3 +446,30 @@ class DailyReportConfig(Base): updated_at: Mapped[datetime] = mapped_column( DateTime, default=_utcnow, onupdate=_utcnow, nullable=False ) + + +class CSCategory(Base): + """arXiv 计算机科学分类""" + + __tablename__ = "cs_categories" + + code: Mapped[str] = mapped_column(String(32), primary_key=True) # "cs.CV" + name: Mapped[str] = mapped_column(String(128), nullable=False) + description: Mapped[str] = mapped_column(String(512), default="") + cached_at: Mapped[datetime] = mapped_column(DateTime, default=_utcnow) + + +class CSFeedSubscription(Base): + """arXiv CS 分类订阅""" + + __tablename__ = "cs_feed_subscriptions" + + id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid4())) + category_code: Mapped[str] = mapped_column(String(32), nullable=False, index=True) + daily_limit: Mapped[int] = mapped_column(Integer, default=30) + enabled: Mapped[bool] = mapped_column(Boolean, default=True) + status: Mapped[str] = mapped_column(String(32), default="active") # active | cool_down | paused + cool_down_until: Mapped[datetime | None] = mapped_column(DateTime, nullable=True) + last_run_at: Mapped[datetime | None] = mapped_column(DateTime, nullable=True) + last_run_count: Mapped[int] = mapped_column(Integer, default=0) + created_at: Mapped[datetime] = mapped_column(DateTime, default=_utcnow) diff --git a/packages/storage/repositories.py b/packages/storage/repositories.py index 7ab023f..de4c005 100644 --- a/packages/storage/repositories.py +++ b/packages/storage/repositories.py @@ -12,6 +12,7 @@ from sqlalchemy.orm import Session from packages.domain.enums import ActionType, PipelineStatus, ReadStatus +from packages.domain.math_utils import cosine_distance as _cosine_distance from packages.domain.schemas import DeepDiveReport, PaperCreate, SkimReport from packages.storage.models import ( ActionPaper, @@ -21,6 +22,8 @@ AnalysisReport, Citation, CollectionAction, + CSCategory, + CSFeedSubscription, DailyReportConfig, EmailConfig, GeneratedContent, @@ -34,9 +37,6 @@ ) -from packages.domain.math_utils import cosine_distance as _cosine_distance - - class BaseQuery: """ 基础查询类 - 提供通用的查询方法减少重复代码 @@ -501,6 +501,7 @@ def list_paginated( search: str | None = None, sort_by: str = "created_at", sort_order: str = "desc", + category: str | None = None, ) -> tuple[list[Paper], int]: """分页查询论文,返回 (papers, total_count)""" filters = [] @@ -539,6 +540,9 @@ def list_paginated( except ValueError: pass + if category: + filters.append(Paper.metadata_json.contains({"categories": [category]})) + base_q = select(Paper) count_q = select(func.count()).select_from(Paper) if need_join_topic: @@ -819,38 +823,41 @@ def create( ) def summarize_costs(self, days: int = 7) -> dict: - since = datetime.now(UTC) - timedelta(days=max(days, 1)) + since = None if days <= 0 else datetime.now(UTC) - timedelta(days=days) + base_filter = [] if since is None else [PromptTrace.created_at >= since] + total_q = select( func.count(PromptTrace.id), func.coalesce(func.sum(PromptTrace.input_tokens), 0), func.coalesce(func.sum(PromptTrace.output_tokens), 0), func.coalesce(func.sum(PromptTrace.total_cost_usd), 0.0), - ).where(PromptTrace.created_at >= since) + ) + if since: + total_q = total_q.where(*base_filter) count, in_tokens, out_tokens, total_cost = self.session.execute(total_q).one() - by_stage_q = ( - select( - PromptTrace.stage, - func.count(PromptTrace.id), - func.coalesce(func.sum(PromptTrace.total_cost_usd), 0.0), - func.coalesce(func.sum(PromptTrace.input_tokens), 0), - func.coalesce(func.sum(PromptTrace.output_tokens), 0), - ) - .where(PromptTrace.created_at >= since) - .group_by(PromptTrace.stage) + by_stage_q = select( + PromptTrace.stage, + func.count(PromptTrace.id), + func.coalesce(func.sum(PromptTrace.total_cost_usd), 0.0), + func.coalesce(func.sum(PromptTrace.input_tokens), 0), + func.coalesce(func.sum(PromptTrace.output_tokens), 0), ) - by_model_q = ( - select( - PromptTrace.provider, - PromptTrace.model, - func.count(PromptTrace.id), - func.coalesce(func.sum(PromptTrace.total_cost_usd), 0.0), - func.coalesce(func.sum(PromptTrace.input_tokens), 0), - func.coalesce(func.sum(PromptTrace.output_tokens), 0), - ) - .where(PromptTrace.created_at >= since) - .group_by(PromptTrace.provider, PromptTrace.model) + if since: + by_stage_q = by_stage_q.where(*base_filter) + by_stage_q = by_stage_q.group_by(PromptTrace.stage) + + by_model_q = select( + PromptTrace.provider, + PromptTrace.model, + func.count(PromptTrace.id), + func.coalesce(func.sum(PromptTrace.total_cost_usd), 0.0), + func.coalesce(func.sum(PromptTrace.input_tokens), 0), + func.coalesce(func.sum(PromptTrace.output_tokens), 0), ) + if since: + by_model_q = by_model_q.where(*base_filter) + by_model_q = by_model_q.group_by(PromptTrace.provider, PromptTrace.model) by_stage = [ { @@ -1550,4 +1557,80 @@ def cleanup_expired(self, ttl_seconds: int = 1800) -> int: self.session.flush() return result.rowcount - return config + +class CSFeedRepository: + """arXiv CS 分类订阅 Repository""" + + def __init__(self, session: Session): + self.session = session + + def get_categories(self) -> list[CSCategory]: + return list(self.session.execute(select(CSCategory)).scalars()) + + def upsert_category(self, code: str, name: str, description: str = "") -> CSCategory: + existing = self.session.execute( + select(CSCategory).where(CSCategory.code == code) + ).scalar_one_or_none() + if existing: + existing.name = name + existing.description = description + existing.cached_at = datetime.now(UTC) + return existing + cat = CSCategory(code=code, name=name, description=description) + self.session.add(cat) + self.session.commit() + return cat + + def get_subscriptions(self) -> list[CSFeedSubscription]: + return list(self.session.execute(select(CSFeedSubscription)).scalars()) + + def get_subscription(self, category_code: str) -> CSFeedSubscription | None: + return self.session.execute( + select(CSFeedSubscription).where(CSFeedSubscription.category_code == category_code) + ).scalar_one_or_none() + + def upsert_subscription( + self, category_code: str, daily_limit: int, enabled: bool = True + ) -> CSFeedSubscription: + existing = self.get_subscription(category_code) + if existing: + existing.daily_limit = daily_limit + existing.enabled = enabled + self.session.commit() + return existing + sub = CSFeedSubscription( + category_code=category_code, daily_limit=daily_limit, enabled=enabled + ) + self.session.add(sub) + self.session.commit() + return sub + + def delete_subscription(self, category_code: str) -> bool: + sub = self.get_subscription(category_code) + if sub: + self.session.delete(sub) + self.session.commit() + return True + return False + + def update_run_status(self, category_code: str, count: int): + sub = self.get_subscription(category_code) + if sub: + sub.last_run_at = datetime.now(UTC) + sub.last_run_count = count + sub.status = "active" + self.session.commit() + + def set_cool_down(self, category_code: str, until: datetime): + sub = self.get_subscription(category_code) + if sub: + sub.status = "cool_down" + sub.cool_down_until = until + self.session.commit() + + def get_active_subscriptions(self) -> list[CSFeedSubscription]: + return list( + self.session.execute( + select(CSFeedSubscription).where(CSFeedSubscription.enabled == True) + ).scalars() + ) From 28779ec9f3f72523eb03b9d0b9b23d3a320329a1 Mon Sep 17 00:00:00 2001 From: Color2333 <1552429809@qq.com> Date: Thu, 19 Mar 2026 17:20:08 +0800 Subject: [PATCH 13/17] =?UTF-8?q?style:=20=E6=A0=BC=E5=BC=8F=E5=8C=96?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=20(ruff=20format=20+=20prettier)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/api/deps.py | 2 + apps/api/routers/agent.py | 34 +- apps/api/routers/auth.py | 8 +- apps/api/routers/content.py | 2 +- apps/api/routers/jobs.py | 4 +- apps/api/routers/pipelines.py | 2 +- apps/api/routers/settings.py | 2 +- apps/api/routers/topics.py | 3 +- apps/desktop/server.py | 8 +- frontend/src/pages/Agent.tsx | 1048 ++++++++++++++------ frontend/src/pages/CSFeeds.tsx | 111 ++- frontend/src/pages/Chat.tsx | 77 +- frontend/src/pages/Collect.tsx | 930 +++++++++++------ frontend/src/pages/DailyBrief.tsx | 204 ++-- frontend/src/pages/Dashboard.tsx | 219 ++-- frontend/src/pages/EmailSettings.tsx | 180 ++-- frontend/src/pages/GraphExplorer.tsx | 10 +- frontend/src/pages/Login.tsx | 35 +- frontend/src/pages/Operations.tsx | 41 +- frontend/src/pages/PaperDetail.tsx | 945 +++++++++++++----- frontend/src/pages/Papers.tsx | 720 ++++++++++---- frontend/src/pages/Pipelines.tsx | 104 +- frontend/src/pages/SetupWizard.tsx | 23 +- frontend/src/pages/Statistics.tsx | 289 +++--- frontend/src/pages/Wiki.tsx | 474 +++++---- frontend/src/pages/Writing.tsx | 275 +++-- frontend/src/services/api.ts | 202 ++-- infra/migrations/env.py | 2 +- packages/ai/agent_service.py | 302 +++--- packages/ai/agent_tools.py | 221 +++-- packages/ai/auto_read_service.py | 6 +- packages/ai/brief_service.py | 11 +- packages/ai/cost_guard.py | 5 +- packages/ai/daily_runner.py | 11 +- packages/ai/graph_service.py | 704 ++++++------- packages/ai/idle_processor.py | 19 +- packages/ai/keyword_service.py | 9 +- packages/ai/performance.py | 1 + packages/ai/pipelines.py | 1 - packages/ai/prompts.py | 48 +- packages/ai/rag_service.py | 46 +- packages/ai/rate_limiter.py | 13 +- packages/ai/reasoning_service.py | 1 + packages/ai/recommendation_service.py | 91 +- packages/ai/task_manager.py | 22 +- packages/ai/wiki_context.py | 43 +- packages/ai/writing_service.py | 14 +- packages/auth.py | 8 +- packages/domain/enums.py | 1 + packages/domain/exceptions.py | 8 + packages/domain/math_utils.py | 1 + packages/domain/schemas.py | 1 + packages/domain/service_base.py | 3 +- packages/domain/task_tracker.py | 11 +- packages/integrations/citation_provider.py | 17 +- packages/integrations/email_service.py | 1 + packages/integrations/llm_client.py | 146 ++- packages/integrations/notifier.py | 13 +- packages/integrations/openalex_client.py | 106 +- packages/logging_setup.py | 2 +- packages/storage/db.py | 2 +- packages/timezone.py | 4 +- scripts/batch_process_unread.py | 9 +- scripts/cleanup_unread.py | 18 +- scripts/dev_setup.py | 4 +- scripts/local_bootstrap.py | 15 - 66 files changed, 4910 insertions(+), 2982 deletions(-) diff --git a/apps/api/deps.py b/apps/api/deps.py index b801c3a..bbe2604 100644 --- a/apps/api/deps.py +++ b/apps/api/deps.py @@ -70,6 +70,7 @@ def invalidate_prefix(self, prefix: str): for k in keys: del self._store[k] + cache = TTLCache() @@ -97,6 +98,7 @@ def iso_dt(dt: datetime | None) -> str | None: def brief_date() -> str: from packages.timezone import user_date_str + return user_date_str() diff --git a/apps/api/routers/agent.py b/apps/api/routers/agent.py index c4eb119..18f5a9f 100644 --- a/apps/api/routers/agent.py +++ b/apps/api/routers/agent.py @@ -111,25 +111,31 @@ def stream_with_save(): text_content += data.get("content", "") elif event_type == "tool_result": # 记录工具调用结果 - tool_calls_records.append({ - "name": data.get("name"), - "success": data.get("success"), - "summary": data.get("summary"), - "data": data.get("data"), - }) + tool_calls_records.append( + { + "name": data.get("name"), + "success": data.get("success"), + "summary": data.get("summary"), + "data": data.get("data"), + } + ) elif event_type == "action_result": # 记录用户确认的操作结果 - tool_calls_records.append({ - "action_id": data.get("id"), - "success": data.get("success"), - "summary": data.get("summary"), - "data": data.get("data"), - }) + tool_calls_records.append( + { + "action_id": data.get("id"), + "success": data.get("success"), + "summary": data.get("summary"), + "data": data.get("data"), + } + ) yield chunk # 流结束后保存助手响应 if text_content or tool_calls_records: - _save_assistant_response(text_content, tool_calls_records if tool_calls_records else None) + _save_assistant_response( + text_content, tool_calls_records if tool_calls_records else None + ) return StreamingResponse( stream_with_save(), @@ -186,7 +192,7 @@ def get_conversation_messages( ) -> dict: """获取指定会话的所有消息""" from packages.storage.db import session_scope - from packages.storage.repositories import AgentMessageRepository, AgentConversationRepository + from packages.storage.repositories import AgentConversationRepository, AgentMessageRepository with session_scope() as session: conv_repo = AgentConversationRepository(session) diff --git a/apps/api/routers/auth.py b/apps/api/routers/auth.py index a725b4b..e2383ba 100644 --- a/apps/api/routers/auth.py +++ b/apps/api/routers/auth.py @@ -32,15 +32,15 @@ async def login(request: LoginRequest): 成功返回 JWT token """ settings = get_settings() - + # 如果未配置密码,返回错误 if not settings.auth_password: raise HTTPException(status_code=403, detail="Authentication is disabled") - + # 验证密码 if not authenticate_user(request.password): raise HTTPException(status_code=401, detail="Incorrect password") - + # 生成 token access_token = create_access_token(data={"sub": "papermind-user"}) return LoginResponse(access_token=access_token) @@ -52,4 +52,4 @@ async def auth_status(): 检查认证是否启用 """ settings = get_settings() - return AuthStatusResponse(auth_enabled=bool(settings.auth_password)) \ No newline at end of file + return AuthStatusResponse(auth_enabled=bool(settings.auth_password)) diff --git a/apps/api/routers/content.py b/apps/api/routers/content.py index 66b3d59..519f2a3 100644 --- a/apps/api/routers/content.py +++ b/apps/api/routers/content.py @@ -4,7 +4,7 @@ from fastapi import APIRouter, HTTPException, Query -from apps.api.deps import brief_date, brief_service, cache, graph_service, iso_dt, settings +from apps.api.deps import brief_service, cache, graph_service, iso_dt from packages.domain.schemas import DailyBriefRequest from packages.domain.task_tracker import global_tracker from packages.storage.db import session_scope diff --git a/apps/api/routers/jobs.py b/apps/api/routers/jobs.py index b57fe18..5c1dd0e 100644 --- a/apps/api/routers/jobs.py +++ b/apps/api/routers/jobs.py @@ -7,7 +7,6 @@ from fastapi import APIRouter, BackgroundTasks, HTTPException, Query -from apps.api.deps import pipelines from packages.ai.daily_runner import run_daily_brief, run_daily_ingest, run_weekly_graph_maintenance from packages.domain.enums import ReadStatus from packages.domain.task_tracker import global_tracker @@ -56,7 +55,7 @@ def batch_process_unread( import uuid from concurrent.futures import ThreadPoolExecutor, as_completed - from packages.ai.daily_runner import _process_paper, PAPER_CONCURRENCY + from packages.ai.daily_runner import PAPER_CONCURRENCY, _process_paper # 先获取需要处理的论文数量 with session_scope() as session: @@ -200,6 +199,7 @@ def get_action_papers( async def run_daily_report_once(background_tasks: BackgroundTasks): """完整工作流(精读 + 生成 + 发邮件)— 后台执行""" import asyncio + from packages.ai.auto_read_service import AutoReadService def _run_workflow_bg(): diff --git a/apps/api/routers/pipelines.py b/apps/api/routers/pipelines.py index 5fb47d8..62922ce 100644 --- a/apps/api/routers/pipelines.py +++ b/apps/api/routers/pipelines.py @@ -169,6 +169,6 @@ def get_task_result(task_id: str) -> dict: if not status: raise NotFoundError(f"Task {task_id} not found") if not status.get("finished"): - raise HTTPException(400, f"Task not finished yet") + raise HTTPException(400, "Task not finished yet") result = global_tracker.get_result(task_id) return result or {} diff --git a/apps/api/routers/settings.py b/apps/api/routers/settings.py index 363665c..320a8c3 100644 --- a/apps/api/routers/settings.py +++ b/apps/api/routers/settings.py @@ -4,7 +4,7 @@ from typing import Literal -from fastapi import APIRouter, HTTPException, Query +from fastapi import APIRouter, HTTPException from pydantic import BaseModel from apps.api.deps import iso_dt, settings diff --git a/apps/api/routers/topics.py b/apps/api/routers/topics.py index b1a2ab9..23c49de 100644 --- a/apps/api/routers/topics.py +++ b/apps/api/routers/topics.py @@ -38,7 +38,8 @@ def _topic_dict(t, session=None) -> dict: } if session is not None: from sqlalchemy import func, select - from packages.storage.models import PaperTopic, CollectionAction + + from packages.storage.models import CollectionAction, PaperTopic # 论文计数 cnt = session.scalar( diff --git a/apps/desktop/server.py b/apps/desktop/server.py index a9e73df..4a614c8 100644 --- a/apps/desktop/server.py +++ b/apps/desktop/server.py @@ -3,6 +3,7 @@ Tauri sidecar 调用此二进制,自动选端口 + 内嵌 scheduler。 @author Color2333 """ + from __future__ import annotations import json @@ -47,6 +48,7 @@ def _apply_env_overrides(data_dir: Path, env_file: Path | None) -> None: if env_file and env_file.is_file(): os.environ["PAPERMIND_ENV_FILE"] = str(env_file) from dotenv import load_dotenv + load_dotenv(env_file, override=True) logger.info("Loaded .env from %s", env_file) @@ -54,6 +56,7 @@ def _apply_env_overrides(data_dir: Path, env_file: Path | None) -> None: def _start_scheduler() -> None: """后台线程运行 APScheduler(复用 worker 逻辑)""" from apps.worker.main import run_worker + t = threading.Thread(target=run_worker, daemon=True, name="scheduler") t.start() logger.info("Embedded scheduler started on background thread") @@ -74,7 +77,9 @@ def main() -> None: os.environ["API_HOST"] = "127.0.0.1" os.environ["API_PORT"] = str(port) - os.environ["CORS_ALLOW_ORIGINS"] = f"tauri://localhost,https://tauri.localhost,http://127.0.0.1:{port}" + os.environ["CORS_ALLOW_ORIGINS"] = ( + f"tauri://localhost,https://tauri.localhost,http://127.0.0.1:{port}" + ) # Tauri 通过 stdout 读取端口号(协议:首行 JSON) sys.stdout.write(json.dumps({"port": port}) + "\n") @@ -86,6 +91,7 @@ def main() -> None: _start_scheduler() import uvicorn + from apps.api.main import app def _handle_signal(sig, _frame): diff --git a/frontend/src/pages/Agent.tsx b/frontend/src/pages/Agent.tsx index 323b2e3..41479e5 100644 --- a/frontend/src/pages/Agent.tsx +++ b/frontend/src/pages/Agent.tsx @@ -53,20 +53,61 @@ interface Ability { const ABILITIES: Ability[] = [ { icon: Search, label: "搜索论文", prefix: "帮我搜索关于 ", placeholder: "输入搜索关键词..." }, - { icon: Download, label: "下载入库", prefix: "从 arXiv 下载关于 ", placeholder: "输入主题关键词..." }, + { + icon: Download, + label: "下载入库", + prefix: "从 arXiv 下载关于 ", + placeholder: "输入主题关键词...", + }, { icon: Brain, label: "知识问答", prefix: "基于知识库回答:", placeholder: "输入你的问题..." }, - { icon: FileText, label: "生成 Wiki", prefix: "帮我生成一篇关于 ", placeholder: "输入 Wiki 主题..." }, - { icon: Newspaper, label: "生成简报", prefix: "帮我生成今日的研究简报", placeholder: "", direct: true }, + { + icon: FileText, + label: "生成 Wiki", + prefix: "帮我生成一篇关于 ", + placeholder: "输入 Wiki 主题...", + }, + { + icon: Newspaper, + label: "生成简报", + prefix: "帮我生成今日的研究简报", + placeholder: "", + direct: true, + }, ]; /* ========== 快捷建议(空状态卡片) ========== */ const SUGGESTIONS = [ - { icon: Search, label: "搜索调研", desc: "搜索特定领域论文", prompt: "帮我搜索关于 3D Gaussian Splatting 的最新论文" }, - { icon: Download, label: "下载论文", desc: "从 arXiv 获取并分析", prompt: "从 arXiv 下载最新的大语言模型相关论文,然后帮我粗读分析" }, - { icon: BookOpen, label: "论文分析", desc: "粗读/精读已有论文", prompt: "帮我分析库中最近的论文,先粗读再挑选重要的精读" }, - { icon: Brain, label: "知识问答", desc: "基于知识库回答", prompt: "基于知识库回答:什么是 attention mechanism?有哪些变体?" }, - { icon: FileText, label: "生成 Wiki", desc: "生成主题综述", prompt: "帮我生成一篇关于 Neural Radiance Fields 的 Wiki 综述" }, + { + icon: Search, + label: "搜索调研", + desc: "搜索特定领域论文", + prompt: "帮我搜索关于 3D Gaussian Splatting 的最新论文", + }, + { + icon: Download, + label: "下载论文", + desc: "从 arXiv 获取并分析", + prompt: "从 arXiv 下载最新的大语言模型相关论文,然后帮我粗读分析", + }, + { + icon: BookOpen, + label: "论文分析", + desc: "粗读/精读已有论文", + prompt: "帮我分析库中最近的论文,先粗读再挑选重要的精读", + }, + { + icon: Brain, + label: "知识问答", + desc: "基于知识库回答", + prompt: "基于知识库回答:什么是 attention mechanism?有哪些变体?", + }, + { + icon: FileText, + label: "生成 Wiki", + desc: "生成主题综述", + prompt: "帮我生成一篇关于 Neural Radiance Fields 的 Wiki 综述", + }, { icon: Newspaper, label: "生成简报", desc: "生成研究日报", prompt: "帮我生成今日的研究简报" }, ]; @@ -100,8 +141,17 @@ function getToolMeta(name: string) { export default function Agent() { const navigate = useNavigate(); const { - items, loading, pendingActions, confirmingActions, canvas, - hasPendingConfirm, setCanvas, sendMessage, handleConfirm, handleReject, stopGeneration, + items, + loading, + pendingActions, + confirmingActions, + canvas, + hasPendingConfirm, + setCanvas, + sendMessage, + handleConfirm, + handleReject, + stopGeneration, } = useAgentSession(); const [input, setInput] = useState(""); @@ -146,33 +196,42 @@ export default function Agent() { const inputDisabled = loading || hasPendingConfirm; - const handleAbilityClick = useCallback((ability: Ability) => { - if (ability.direct) { + const handleAbilityClick = useCallback( + (ability: Ability) => { + if (ability.direct) { + isAtBottomRef.current = true; + sendMessage(ability.prefix).catch(() => {}); + return; + } + setActiveAbility(ability); + setInput(ability.prefix); + requestAnimationFrame(() => textareaRef.current?.focus()); + }, + [sendMessage] + ); + + const handleSend = useCallback( + async (text: string) => { + const savedInput = text; isAtBottomRef.current = true; - sendMessage(ability.prefix).catch(() => {}); - return; - } - setActiveAbility(ability); - setInput(ability.prefix); - requestAnimationFrame(() => textareaRef.current?.focus()); - }, [sendMessage]); - - const handleSend = useCallback(async (text: string) => { - const savedInput = text; - isAtBottomRef.current = true; - setInput(""); - setActiveAbility(null); - try { - await sendMessage(text); - } catch { - setInput(savedInput); - } - }, [sendMessage]); + setInput(""); + setActiveAbility(null); + try { + await sendMessage(text); + } catch { + setInput(savedInput); + } + }, + [sendMessage] + ); - const handleConfirmAction = useCallback((actionId: string) => { - isAtBottomRef.current = true; - handleConfirm(actionId); - }, [handleConfirm]); + const handleConfirmAction = useCallback( + (actionId: string) => { + isAtBottomRef.current = true; + handleConfirm(actionId); + }, + [handleConfirm] + ); const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === "Enter" && !e.shiftKey) { @@ -190,20 +249,27 @@ export default function Agent() {
{/* 主对话区域 */}
-
+
{items.length === 0 ? ( handleSend(p)} /> ) : (
{items.map((item, idx) => { - const retryFn = item.type === "error" ? (() => { - for (let i = idx - 1; i >= 0; i--) { - if (items[i].type === "user") { - handleSend(items[i].content); - return; - } - } - }) : undefined; + const retryFn = + item.type === "error" + ? () => { + for (let i = idx - 1; i >= 0; i--) { + if (items[i].type === "user") { + handleSend(items[i].content); + return; + } + } + } + : undefined; return ( setCanvas({ title, markdown: content, isHtml })} + onOpenArtifact={(title, content, isHtml) => + setCanvas({ title, markdown: content, isHtml }) + } onRetry={retryFn} /> ); })} {loading && items[items.length - 1]?.type !== "action_confirm" && ( -
+
- - - + + +
)} @@ -237,7 +305,7 @@ export default function Agent() { isAtBottomRef.current = true; endRef.current?.scrollIntoView({ behavior: "smooth" }); }} - className="absolute bottom-4 left-1/2 z-10 flex -translate-x-1/2 items-center gap-1.5 rounded-full border border-border bg-surface px-3 py-1.5 text-xs font-medium text-ink-secondary shadow-lg transition-all hover:bg-hover hover:text-ink" + className="border-border bg-surface text-ink-secondary hover:bg-hover hover:text-ink absolute bottom-4 left-1/2 z-10 flex -translate-x-1/2 items-center gap-1.5 rounded-full border px-3 py-1.5 text-xs font-medium shadow-lg transition-all" > 回到底部 @@ -246,10 +314,10 @@ export default function Agent() {
{/* 输入区域 */} -
+
{hasPendingConfirm && ( -
+
请先处理上方的确认请求,再继续对话
@@ -263,14 +331,16 @@ export default function Agent() { return (