2026-04-13 19:21:42 +08:00
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
|
|
from typing import Dict
|
|
|
|
|
|
|
|
|
|
from celery import shared_task
|
|
|
|
|
|
|
|
|
|
from app.services.supabase_rest import supabase_rest
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@shared_task(name="app.workers.tasks.ocr_pipeline")
|
|
|
|
|
def ocr_pipeline(task_id: str, document_id: str, file_url: str, user_id: str) -> Dict[str, str]:
|
|
|
|
|
"""
|
|
|
|
|
阶段 0 Celery 任务:模拟 OCR,向 documents+background_tasks 回写占位结果。
|
|
|
|
|
阶段 1 将在此处串联 MinerU OCR 与 LightRAG 索引。
|
|
|
|
|
"""
|
|
|
|
|
supabase_rest.update("background_tasks", {"id": task_id}, {"status": "processing", "progress": 30})
|
|
|
|
|
|
|
|
|
|
markdown = f"# OCR 结果占位\\n\\n文件地址:{file_url}\\n\\n> 阶段 1 将替换为 MinerU 输出。"
|
|
|
|
|
supabase_rest.update(
|
|
|
|
|
"documents",
|
|
|
|
|
{"id": document_id, "user_id": user_id},
|
|
|
|
|
{
|
|
|
|
|
"content": {
|
|
|
|
|
"blocks": [
|
|
|
|
|
{
|
|
|
|
|
"type": "paragraph",
|
|
|
|
|
"text": markdown,
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
"raw_text": markdown,
|
|
|
|
|
"index_status": "completed",
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
supabase_rest.update(
|
|
|
|
|
"background_tasks",
|
|
|
|
|
{"id": task_id},
|
|
|
|
|
{
|
|
|
|
|
"status": "completed",
|
|
|
|
|
"progress": 100,
|
|
|
|
|
"message": "OCR 模拟完成",
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
"task_id": task_id,
|
|
|
|
|
"document_id": document_id,
|
|
|
|
|
"file_url": file_url,
|
|
|
|
|
"status": "completed",
|
|
|
|
|
}
|