annotation_platform.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. """标注平台 API 路由。"""
  2. from fastapi import APIRouter, Query, HTTPException
  3. from app.schemas.annotation_platform import (
  4. AnnotationProjectListResponse,
  5. AnnotationProjectDetailResponse,
  6. ProjectImportResponse,
  7. )
  8. from app.services import annotation_platform_service
  9. router = APIRouter()
  10. @router.get("/projects", response_model=AnnotationProjectListResponse)
  11. async def get_projects(
  12. page: int = Query(default=1, ge=1),
  13. page_size: int = Query(default=20, ge=1, le=100),
  14. name: str | None = Query(default=None),
  15. type: str | None = Query(default=None),
  16. status: str | None = Query(default=None),
  17. ):
  18. """获取标注平台项目列表。"""
  19. try:
  20. data = await annotation_platform_service.list_projects(
  21. page, page_size, name=name, project_type=type, status=status,
  22. )
  23. return AnnotationProjectListResponse(**data)
  24. except ValueError as e:
  25. raise HTTPException(status_code=503, detail=str(e))
  26. except Exception as e:
  27. raise HTTPException(status_code=502, detail=f"标注平台请求失败: {str(e)}")
  28. @router.get("/projects/{project_id}", response_model=AnnotationProjectDetailResponse)
  29. async def get_project_detail(project_id: str):
  30. """获取项目详情。"""
  31. try:
  32. data = await annotation_platform_service.get_project_detail(project_id)
  33. return AnnotationProjectDetailResponse(**data)
  34. except ValueError as e:
  35. raise HTTPException(status_code=503, detail=str(e))
  36. except Exception as e:
  37. raise HTTPException(status_code=502, detail=f"标注平台请求失败: {str(e)}")
  38. @router.post("/projects/{project_id}/import", response_model=ProjectImportResponse)
  39. async def import_project(
  40. project_id: str,
  41. project_name: str = Query(default=""),
  42. format: str = Query(default="alpaca"),
  43. ):
  44. """从标注平台导出项目数据并导入为训练数据集。"""
  45. try:
  46. data = await annotation_platform_service.import_project_dataset(
  47. project_id, project_name=project_name, format=format,
  48. )
  49. return ProjectImportResponse(**data)
  50. except ValueError as e:
  51. raise HTTPException(status_code=503, detail=str(e))
  52. except Exception as e:
  53. raise HTTPException(status_code=502, detail=f"标注平台导入失败: {str(e)}")