mirror of
https://github.com/Monadical-SAS/reflector.git
synced 2026-03-26 00:46:46 +00:00
* feat: migrate file and live post-processing pipelines from Celery to Hatchet workflow engine * fix: always force reprocessing * fix: ci tests with live pipelines * fix: ci tests with live pipelines
57 lines
1.8 KiB
Python
57 lines
1.8 KiB
Python
from typing import Annotated, Optional, assert_never
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException
|
|
from pydantic import BaseModel
|
|
|
|
import reflector.auth as auth
|
|
from reflector.db.transcripts import transcripts_controller
|
|
from reflector.services.transcript_process import (
|
|
ProcessError,
|
|
ValidationAlreadyScheduled,
|
|
ValidationError,
|
|
ValidationLocked,
|
|
ValidationOk,
|
|
dispatch_transcript_processing,
|
|
prepare_transcript_processing,
|
|
validate_transcript_for_processing,
|
|
)
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
class ProcessStatus(BaseModel):
|
|
status: str
|
|
|
|
|
|
@router.post("/transcripts/{transcript_id}/process")
|
|
async def transcript_process(
|
|
transcript_id: str,
|
|
user: Annotated[
|
|
Optional[auth.UserInfo], Depends(auth.current_user_optional_if_public_mode)
|
|
],
|
|
) -> ProcessStatus:
|
|
user_id = user["sub"] if user else None
|
|
transcript = await transcripts_controller.get_by_id_for_http(
|
|
transcript_id, user_id=user_id
|
|
)
|
|
|
|
validation = await validate_transcript_for_processing(transcript)
|
|
if isinstance(validation, ValidationLocked):
|
|
raise HTTPException(status_code=400, detail=validation.detail)
|
|
elif isinstance(validation, ValidationError):
|
|
raise HTTPException(status_code=400, detail=validation.detail)
|
|
elif isinstance(validation, ValidationAlreadyScheduled):
|
|
return ProcessStatus(status=validation.detail)
|
|
elif isinstance(validation, ValidationOk):
|
|
pass
|
|
else:
|
|
assert_never(validation)
|
|
|
|
config = await prepare_transcript_processing(validation)
|
|
|
|
if isinstance(config, ProcessError):
|
|
raise HTTPException(status_code=500, detail=config.detail)
|
|
else:
|
|
await dispatch_transcript_processing(config, force=True)
|
|
return ProcessStatus(status="ok")
|