OoO
72a7c385d5
CD Pipeline / deploy (push) Successful in 2m54s
feat(p26): PPT 視覺審核 daily 22:00 cron — minicpm-v 自動掃當天新生 .pptx
Operation Ollama-First v5.0 / Phase 26 — PPT 自我審視整合
services/ppt_vision_service.py 擴充:
- check_ppt_file(pptx_path, max_slides=5) — 整檔視覺檢查
• LibreOffice headless 轉每張 slide 為 png
• 對前 N 張跑 check_image
• 彙總 issues + 平均 confidence
• fail-safe:LibreOffice 不在 / 轉檔失敗 → 回 skip 不阻擋
- audit_recent_ppts(reports_dir, hours=24, max_files=10)
• 掃 reports/ 過去 24h 新生 .pptx(getmtime filter)
• 對每個檔跑 check_ppt_file
• 彙總總 issues
- push_ppt_audit_to_telegram(summary)
• 有 issues 才推 Telegram(避免「無問題」洗版)
• 每檔最多 3 張 slide / 每張 2 個 issue 列出
run_scheduler.py — 每日 22:00 cron
- run_ppt_vision_audit task wrapper
- PPT_VISION_ENABLED=false 時 service 內部 skip(不打 LLM)
設計哲學:
不動既有 5 個 prs.save() 呼叫點(risk 高)→ 改寫獨立 daily cron 集中處理
零侵入 PPT 生成主流程 / 零 risk regression / feature flag OFF 預設
部署需求:
LibreOffice headless(apt install libreoffice)— 不在則 cron task 自動 skip + log
tests/test_ppt_vision_audit.py (9 tests 全綠)
- flag OFF skip / 目錄不存在 / 無 .pptx
- 舊檔(>hours)filter / LibreOffice 不在 fail-safe
- check_ppt_file flag/missing 容錯
- Telegram 推播:無 issues 不推 / 有 issues 推
regression: ppt_vision_service 既有 6 tests 全綠
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 11:16:11 +08:00
..
2026-04-28 15:26:20 +08:00
2026-05-03 13:10:15 +08:00
2026-04-19 01:21:13 +08:00
2026-05-01 14:02:37 +08:00
2026-04-29 23:41:03 +08:00
2026-04-29 23:57:36 +08:00
2026-05-04 10:48:22 +08:00
2026-04-19 01:21:13 +08:00
2026-04-29 22:56:00 +08:00
2026-05-01 16:34:13 +08:00
2026-04-25 03:30:14 +08:00
2026-05-03 23:05:11 +08:00
2026-05-04 11:00:04 +08:00
2026-04-29 23:41:03 +08:00
2026-05-01 16:34:13 +08:00
2026-04-29 21:35:56 +08:00
2026-05-02 14:34:30 +08:00
2026-05-03 23:31:30 +08:00
2026-05-01 20:56:17 +08:00
2026-04-19 01:21:13 +08:00
2026-05-04 10:36:56 +08:00
2026-04-28 13:57:44 +08:00
2026-04-28 15:37:07 +08:00
2026-04-27 21:28:23 +08:00
2026-05-02 13:07:30 +08:00
2026-04-22 01:12:23 +08:00
2026-05-04 10:19:13 +08:00
2026-05-02 13:09:34 +08:00
2026-05-03 23:26:18 +08:00
2026-05-03 23:06:08 +08:00
2026-04-30 13:59:12 +08:00
2026-04-30 09:33:39 +08:00
2026-05-02 15:01:55 +08:00
2026-05-04 11:12:52 +08:00
2026-04-19 01:21:13 +08:00
2026-04-27 21:11:52 +08:00
2026-05-03 23:56:12 +08:00
2026-05-03 13:10:55 +08:00
2026-04-28 19:42:05 +08:00
2026-05-04 09:16:39 +08:00
2026-05-04 10:19:13 +08:00
2026-05-04 10:54:12 +08:00
2026-04-27 21:28:23 +08:00
2026-05-04 09:34:21 +08:00
2026-04-25 01:42:40 +08:00
2026-05-04 09:34:21 +08:00
2026-04-19 01:21:13 +08:00
2026-04-19 01:21:13 +08:00
2026-05-03 23:28:45 +08:00
2026-04-29 22:48:24 +08:00
2026-04-29 22:37:20 +08:00
2026-05-04 11:00:04 +08:00
2026-04-29 23:10:27 +08:00
2026-05-02 13:04:18 +08:00
2026-05-04 10:19:13 +08:00
2026-04-19 01:21:13 +08:00
2026-04-20 06:09:33 +08:00
2026-04-19 01:21:13 +08:00
2026-04-22 01:12:23 +08:00
2026-05-03 13:10:15 +08:00
2026-05-04 11:16:11 +08:00
2026-05-02 12:00:34 +08:00
2026-05-04 09:31:31 +08:00
2026-05-04 11:12:52 +08:00
2026-04-27 21:28:23 +08:00
2026-05-03 00:03:38 +08:00
2026-05-03 23:56:12 +08:00
2026-05-02 12:01:04 +08:00
2026-05-03 23:04:58 +08:00
2026-04-19 01:21:13 +08:00
2026-04-19 01:21:13 +08:00
2026-04-27 20:34:15 +08:00
2026-04-19 01:21:13 +08:00
2026-05-01 14:20:09 +08:00