39 lines
1.3 KiB
Python
39 lines
1.3 KiB
Python
from fastapi import APIRouter, HTTPException
|
|||
|
|
|
||
|
|
from app.schemas.job import JobCreate, JobResponse, JobStatus
|
||
|
|
from app.services.runtime import job_store, worker
|
||
|
|
|
||
|
|
router = APIRouter()
|
||
|
|
|
||
|
|
|
||
|
|
@router.post("/ingest", response_model=JobResponse)
|
||
|
|
async def ingest(job: JobCreate) -> JobResponse:
|
||
|
|
"""创建一次全量 ingest 任务并入队"""
|
||
|
|
created = await worker.enqueue(
|
||
|
|
notebook_id=job.notebook_id,
|
||
|
|
doc_id=job.doc_id,
|
||
|
|
source=job.source,
|
||
|
|
blocks=job.blocks or [],
|
||
|
|
)
|
||
|
|
return JobResponse(job=JobStatus(**created.__dict__))
|
||
|
|
|
||
|
|
|
||
|
|
@router.post("/ingest/incremental", response_model=JobResponse)
|
||
|
|
async def ingest_incremental(job: JobCreate) -> JobResponse:
|
||
|
|
"""增量模式目前与全量逻辑一致,后续通过 checkpoint 提升效率"""
|
||
|
|
created = await worker.enqueue(
|
||
|
|
notebook_id=job.notebook_id,
|
||
|
|
doc_id=job.doc_id,
|
||
|
|
source=job.source,
|
||
|
|
blocks=job.blocks or [],
|
||
|
|
)
|
||
|
|
return JobResponse(job=JobStatus(**created.__dict__))
|
||
|
|
|
||
|
|
|
||
|
|
@router.get("/jobs/{job_id}", response_model=JobResponse)
|
||
|
|
async def get_job(job_id: str) -> JobResponse:
|
||
|
|
job = await job_store.get(job_id)
|
||
|
|
if not job:
|
||
|
|
raise HTTPException(status_code=404, detail="Job not found")
|
||
|
|
return JobResponse(job=JobStatus(**job.__dict__))
|