evaluate.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import uuid
  4. from typing import Annotated, Optional
  5. from app.call_center.schema.intent_records import CreateIntentRecordsParam, GetIntentRecordsListDetails, \
  6. UpdateIntentRecordsParam, GetIntentRecordsByIdParam, intent_status_map
  7. from app.call_center.service.intent_records_service import intent_records_service
  8. from common.pagination import paging_data, DependsPagination
  9. from common.response.response_schema import ResponseModel, response_base
  10. from common.security.jwt_call_center import DependsJwtAuth
  11. from common.security.permission import RequestPermission
  12. from database.db_mysql import CurrentSession
  13. from fastapi import APIRouter, Depends, Query, Request
  14. router = APIRouter()
  15. @router.get(
  16. '/result',
  17. summary='话单意向度结果查询',
  18. dependencies=[
  19. DependsJwtAuth,
  20. ],
  21. )
  22. async def get_intent_record(
  23. request: Request,
  24. external_id: Annotated[Optional[str], Query(description='外部ID')] = None,
  25. internal_id: Annotated[Optional[str], Query(description='内部ID')] = None
  26. ) -> ResponseModel:
  27. obj = GetIntentRecordsByIdParam(
  28. external_id=external_id,
  29. internal_id=internal_id,
  30. org_id=request.user.id
  31. )
  32. intent_record_select = await intent_records_service.get_select_by_id(obj=obj)
  33. data = None
  34. if intent_record_select:
  35. intent = None
  36. if intent_record_select.llm_intent:
  37. intent = intent_status_map.get(intent_record_select.llm_intent, "其他")
  38. data = {
  39. "status": intent_record_select.status,
  40. "internal_id": intent_record_select.id,
  41. "external_id": intent_record_select.external_id,
  42. "score": intent_record_select.llm_intent,
  43. "intent": intent
  44. }
  45. return response_base.success(data=data)
  46. @router.get(
  47. '',
  48. summary='(模糊条件)分页获取所有record',
  49. dependencies=[
  50. DependsJwtAuth,
  51. DependsPagination,
  52. ],
  53. )
  54. async def get_pagination_intent_record(db: CurrentSession) -> ResponseModel:
  55. intent_record_select = await intent_records_service.get_select()
  56. page_data = await paging_data(db, intent_record_select, GetIntentRecordsListDetails)
  57. return response_base.success(data=page_data)
  58. @router.post(
  59. '',
  60. summary='话单意向度判断',
  61. dependencies=[
  62. DependsJwtAuth
  63. ],
  64. )
  65. async def create_intent_record(obj: CreateIntentRecordsParam, request: Request) -> ResponseModel:
  66. id_str = str(uuid.uuid4())
  67. obj.id = id_str
  68. obj.org_id = request.user.id
  69. await intent_records_service.create(obj=obj)
  70. return response_base.success()
  71. @router.post(
  72. '/update',
  73. summary='话单意向度更新',
  74. dependencies=[
  75. DependsJwtAuth
  76. ],
  77. )
  78. async def update_intent_record(obj: UpdateIntentRecordsParam, request: Request) -> ResponseModel:
  79. obj.org_id = request.user.id
  80. count = await intent_records_service.update_manual_intent(obj=obj)
  81. if count > 0:
  82. return response_base.success()
  83. return response_base.fail()
  84. @router.delete(
  85. '',
  86. summary='(批量)删除record',
  87. dependencies=[
  88. Depends(RequestPermission('call:record:del')),
  89. ],
  90. )
  91. async def delete_intent_record(pk: Annotated[list[int], Query(...)]) -> ResponseModel:
  92. count = await intent_records_service.delete(pk=pk)
  93. if count > 0:
  94. return response_base.success()
  95. return response_base.fail()