feat: sync live-count, exemplar annotation modules, and update .gitignore

This commit is contained in:
ervanfahriaw committed 2026-08-24 14:57:42 +07:00
1 parent b6624eeff9
commit ac95674c07
39 files changed
+3979 -444

No files matched your search

+14 -3
View File
@@ -36,6 +36,11 @@ class AutolabelRequest(BaseModel):
append: bool = False
custom_model_path: Optional[str] = None
class Exemplar(BaseModel):
box: list[float] # [cx, cy, w, h], normalized 0..1
positive: bool = True
class PreviewRequest(BaseModel):
frame_id: int
engine: str
@@ -44,6 +49,10 @@ class PreviewRequest(BaseModel):
min_box_frac: float = 0.0
target_class_names: Optional[list[str]] = None
custom_model_path: Optional[str] = None
# Drawn box exemplars (REQ-172): normalized cxcywh, positive or negative.
# Preview-only — `autolabel.start` deliberately has no equivalent.
exemplars: Optional[list[Exemplar]] = None
exemplar_class_name: Optional[str] = None
@router.post("/api/projects/{project_id}/batches")
@@ -162,14 +171,14 @@ async def autolabel_with_model(
@router.post("/api/batches/{batch_id}/preview")
def preview_autolabel(batch_id: int, request: PreviewRequest) -> dict:
from backend import autolabel, jobs
from backend import jobs, preview
if not jobs.gpu_lock.acquire(timeout=20):
busy = jobs.running_types()
kind = busy[0] if busy else "background"
raise HTTPException(409, f"The GPU is busy with a {kind} job — wait for it to finish")
try:
shapes = autolabel.preview_frame(
shapes = preview.preview_frame(
batch_id=batch_id,
frame_id=request.frame_id,
engine=request.engine,
@@ -177,7 +186,9 @@ def preview_autolabel(batch_id: int, request: PreviewRequest) -> dict:
iou_threshold=request.iou_threshold,
min_box_frac=request.min_box_frac,
target_class_names=request.target_class_names,
custom_model_path=request.custom_model_path
custom_model_path=request.custom_model_path,
exemplars=[e.model_dump() for e in request.exemplars or []],
exemplar_class_name=request.exemplar_class_name,
)
return {"shapes": shapes}
except Exception as exc: