ai_meeting.py 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. from fastapi import APIRouter
  2. from app.apis.base import Response
  3. from app.config.config import settings
  4. from app.models.ai_meeting import AIMeetingSpeakModel, AIMeetingModel, AIMeetingUserModel, AIMeetingStatus
  5. from app.models.asr import AsrRecordModel
  6. from app.services.ai_meeting import AIMeetingService
  7. from app.models.common import Page
  8. from app.services.asr import AsrRecordService
  9. from app.services.hotword import ASRHotwordService
  10. router = APIRouter()
  11. @router.get("/ai_meeting/{meeting_id}", response_model=Response)
  12. async def get_ai_meeting(meeting_id: str):
  13. # return await AIMeetingService.get_ai_meeting(meeting_id)
  14. data = await AIMeetingService.get_ai_meeting(meeting_id)
  15. return Response(code=200, msg="success", data=data.to_dict())
  16. @router.post("/ai_meeting/list", response_model=Response)
  17. async def list_ai_meetings(page: Page):
  18. # return await AIMeetingService.list_ai_meetings(page)
  19. data_list = await AIMeetingService.list_ai_meetings(page)
  20. return Response(code=200, msg="success", data={"total": await AIMeetingService.ai_meetings_total(page),
  21. "rows": [i.to_list_dict() for i in data_list]})
  22. @router.post("/ai_meeting/offline", response_model=Response)
  23. async def create_offline_ai_meeting(ai_meeting: AIMeetingModel):
  24. code_status = 201
  25. msg = "success"
  26. meeting = await AIMeetingService.create_offline_ai_meeting(ai_meeting.get_create_offline())
  27. if meeting:
  28. hotwords = " ".join([i.hotword for i in
  29. await ASRHotwordService.list_asr_hotwords(Page(page_size=1000))])
  30. task = await AsrRecordService.create_asr_task_async(AsrRecordModel(file_url=f"http://{settings.minio_api_url}{ai_meeting.file_url}", hotwords=hotwords))
  31. if task:
  32. record = await AsrRecordService.create_offline_asr_record(AsrRecordModel(file_url=ai_meeting.file_url, task_id=task.get("taskid"), meeting_id=meeting.id))
  33. if not record:
  34. code_status = 500
  35. msg = "Failed to add task record"
  36. else:
  37. await AIMeetingService.update_ai_meeting(
  38. AIMeetingModel(id=meeting.id,asr_task_id=record.id))
  39. else:
  40. code_status = 500
  41. msg = "Description Failed to add a parsing task"
  42. else:
  43. code_status = 500
  44. msg = "Failed to add data"
  45. if code_status == 500:
  46. await AIMeetingService.update_ai_meeting(AIMeetingModel(id=meeting.id, status= AIMeetingStatus.FAILED))
  47. return Response(code=code_status, msg=msg, data={"id": meeting.id})
  48. @router.post("/ai_meeting/realtime", response_model=Response)
  49. async def create_realtime_ai_meeting(ai_meeting: AIMeetingModel):
  50. ai_meeting = await AIMeetingService.create_realtime_ai_meeting(ai_meeting.get_create())
  51. return Response(code=201, msg="success", data={"id": ai_meeting.id})
  52. @router.put("/ai_meeting/{meeting_id}", response_model=Response)
  53. async def update_ai_meeting(meeting_id: str, ai_meeting: AIMeetingModel):
  54. ai_meeting.id = meeting_id
  55. await AIMeetingService.update_ai_meeting(ai_meeting.get_update())
  56. return Response(code=204, msg="success", data={"id": meeting_id})
  57. @router.delete("/ai_meeting/{meeting_id}", response_model=Response)
  58. async def delete_ai_meeting(meeting_id: str):
  59. await AIMeetingService.delete_ai_meeting(meeting_id)
  60. return Response(code=204, msg="success", data={"id": meeting_id})
  61. @router.post("/ai_meeting/users", response_model=Response)
  62. async def speak_ai_meeting(page: Page):
  63. data_list = await AIMeetingService.list_ai_meeting_users(page)
  64. return Response(code=200, msg="success", data={"total": await AIMeetingService.ai_meeting_user_total(),
  65. "rows": [i.to_dict() for i in data_list]})
  66. @router.post("/ai_meeting/user", response_model=Response)
  67. async def create_offline_ai_meeting(user: AIMeetingUserModel):
  68. await AIMeetingService.create_or_update_ai_meeting_user(user.get_create())
  69. return Response(code=200, msg="success", data={"id": user.id})