ジョブライフサイクル
すべてのPROOFジョブは、アップロードからダウンロードまで明確なライフサイクルに従います。
ステータス
| ステータス | 説明 |
|---|---|
pending | ファイルがアップロード済み、確認待ち |
queued | 確認済み、ワーカーの取得待ち |
processing | ワーカーがアクティブに処理中 |
done | 処理完了、結果ダウンロード可能 |
error | 処理失敗、error_logを確認 |
cancelled | 完了前にキャンセルされた |
フロー
アップロード → pending → 確認 → queued → processing → done
↘ error
- アップロード (
POST /jobs/upload) —pending状態でジョブ作成、コストプレビュー返却 - 確認 (
POST /jobs/{id}/confirm) — クレジット差し引き、queuedに移行、Celeryワーカーにディスパッチ - 処理 — ワーカーがページ/ファイルを処理、リアルタイムで
done_pages/done_filesを更新 - 完了 — 結果がSupabase Storageに保存、ダウンロード準備完了
- ダウンロード (
GET /jobs/{id}/download) — 1時間有効な署名付きURL返却
ポーリング戦略
GET /jobs/{id}を3〜5秒間隔でポーリングします。レスポンスにdone_pagesとtotal_pagesが含まれているため、進捗を表示できます。
import time
while True:
job = get_job(job_id)
if job["status"] in ("done", "error"):
break
print(f"進捗: {job['done_pages']}/{job['total_pages']}")
time.sleep(3)
エラー処理
statusがerrorの場合、error_logフィールドに詳細が含まれます。一般的な原因:
- サポートされていないファイル形式
- 破損したPDFまたはメディアファイル
- LLM推論タイムアウト
- クレジット不足(確認ステップで検出)