| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- from fastapi import APIRouter
- from app.apis.base import Response
- from app.config.config import settings
- from app.models.ai_meeting import AIMeetingSpeakModel, AIMeetingModel, AIMeetingUserModel, AIMeetingStatus
- from app.models.asr import AsrRecordModel
- from app.services.ai_meeting import AIMeetingService
- from app.models.common import Page
- from app.services.asr import AsrRecordService
- from app.services.hotword import ASRHotwordService
- router = APIRouter()
- @router.get("/ai_meeting/{meeting_id}", response_model=Response)
- async def get_ai_meeting(meeting_id: str):
- # return await AIMeetingService.get_ai_meeting(meeting_id)
- data = await AIMeetingService.get_ai_meeting(meeting_id)
- return Response(code=200, msg="success", data=data.to_dict())
- @router.post("/ai_meeting/list", response_model=Response)
- async def list_ai_meetings(page: Page):
- # return await AIMeetingService.list_ai_meetings(page)
- data_list = await AIMeetingService.list_ai_meetings(page)
- return Response(code=200, msg="success", data={"total": await AIMeetingService.ai_meetings_total(page),
- "rows": [i.to_list_dict() for i in data_list]})
- @router.post("/ai_meeting/offline", response_model=Response)
- async def create_offline_ai_meeting(ai_meeting: AIMeetingModel):
- code_status = 201
- msg = "success"
- meeting = await AIMeetingService.create_offline_ai_meeting(ai_meeting.get_create_offline())
- if meeting:
- hotwords = " ".join([i.hotword for i in
- await ASRHotwordService.list_asr_hotwords(Page(page_size=1000))])
- task = await AsrRecordService.create_asr_task_async(AsrRecordModel(file_url=f"http://{settings.minio_api_url}{ai_meeting.file_url}", hotwords=hotwords))
- if task:
- record = await AsrRecordService.create_offline_asr_record(AsrRecordModel(file_url=ai_meeting.file_url, task_id=task.get("taskid"), meeting_id=meeting.id))
- if not record:
- code_status = 500
- msg = "Failed to add task record"
- else:
- await AIMeetingService.update_ai_meeting(
- AIMeetingModel(id=meeting.id,asr_task_id=record.id))
- else:
- code_status = 500
- msg = "Description Failed to add a parsing task"
- else:
- code_status = 500
- msg = "Failed to add data"
- if code_status == 500:
- await AIMeetingService.update_ai_meeting(AIMeetingModel(id=meeting.id, status= AIMeetingStatus.FAILED))
- return Response(code=code_status, msg=msg, data={"id": meeting.id})
- @router.post("/ai_meeting/realtime", response_model=Response)
- async def create_realtime_ai_meeting(ai_meeting: AIMeetingModel):
- ai_meeting = await AIMeetingService.create_realtime_ai_meeting(ai_meeting.get_create())
- return Response(code=201, msg="success", data={"id": ai_meeting.id})
- @router.put("/ai_meeting/{meeting_id}", response_model=Response)
- async def update_ai_meeting(meeting_id: str, ai_meeting: AIMeetingModel):
- ai_meeting.id = meeting_id
- await AIMeetingService.update_ai_meeting(ai_meeting.get_update())
- return Response(code=204, msg="success", data={"id": meeting_id})
- @router.delete("/ai_meeting/{meeting_id}", response_model=Response)
- async def delete_ai_meeting(meeting_id: str):
- await AIMeetingService.delete_ai_meeting(meeting_id)
- return Response(code=204, msg="success", data={"id": meeting_id})
- @router.post("/ai_meeting/users", response_model=Response)
- async def speak_ai_meeting(page: Page):
- data_list = await AIMeetingService.list_ai_meeting_users(page)
- return Response(code=200, msg="success", data={"total": await AIMeetingService.ai_meeting_user_total(),
- "rows": [i.to_dict() for i in data_list]})
- @router.post("/ai_meeting/user", response_model=Response)
- async def create_offline_ai_meeting(user: AIMeetingUserModel):
- await AIMeetingService.create_or_update_ai_meeting_user(user.get_create())
- return Response(code=200, msg="success", data={"id": user.id})
|