crud_intent_records.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from typing import Sequence
  4. from model.intent_records import IntentRecords
  5. from app.call_center.schema.intent_records import CreateIntentRecordsParam, UpdateIntentRecordsParam, \
  6. GetIntentRecordsByIdParam
  7. from sqlalchemy import Select, select
  8. from sqlalchemy.ext.asyncio import AsyncSession
  9. from sqlalchemy_crud_plus import CRUDPlus
  10. class CRUDIntentRecords(CRUDPlus[IntentRecords]):
  11. async def get(self, db: AsyncSession, obj_in: GetIntentRecordsByIdParam) -> IntentRecords | None:
  12. """
  13. 获取call record
  14. :param db:
  15. :param obj_in:
  16. :return:
  17. """
  18. intent_records = None
  19. if obj_in.internal_id:
  20. intent_records = await self.select_model_by_column(db, id=obj_in.internal_id, org_id=obj_in.org_id)
  21. elif obj_in.external_id:
  22. intent_records = await self.select_model_by_column(db, external_id=obj_in.external_id, org_id=obj_in.org_id)
  23. return intent_records
  24. async def get_earliest_record(self, db: AsyncSession) -> IntentRecords | None:
  25. """
  26. 获取最早的 llm_intent 不为空的记录
  27. :param db:
  28. :return:
  29. """
  30. stmt = select(self.model).where(IntentRecords.llm_intent == None).order_by(IntentRecords.created_at.asc())
  31. query = await db.execute(stmt)
  32. return query.scalars().first()
  33. async def get_list(self) -> Select:
  34. """
  35. 获取call record列表
  36. :return:
  37. """
  38. return await self.select_order('created_at', 'desc')
  39. async def get_all(self, db: AsyncSession) -> Sequence[IntentRecords]:
  40. """
  41. 获取所有call record
  42. :param db:
  43. :return:
  44. """
  45. return await self.select_models(db)
  46. async def create(self, db: AsyncSession, obj_in: CreateIntentRecordsParam) -> None:
  47. """
  48. 创建call record
  49. :param db:
  50. :param obj_in:
  51. :return:
  52. """
  53. await self.create_model(db, obj_in)
  54. async def update(self, db: AsyncSession, pk: int, obj_in: UpdateIntentRecordsParam) -> int:
  55. """
  56. 更新call record
  57. :param db:
  58. :param pk:
  59. :param obj_in:
  60. :return:
  61. """
  62. return await self.update_model(db, pk, obj_in)
  63. async def update_manual_intent(self, db: AsyncSession, obj_in: UpdateIntentRecordsParam) -> int:
  64. """
  65. 更新call record
  66. :param db:
  67. :param pk:
  68. :param obj_in:
  69. :return:
  70. """
  71. if obj_in.internal_id:
  72. return await self.update_model_by_column(db, {'manual_intent': obj_in.manual_intent}, id=obj_in.internal_id)
  73. else:
  74. return await self.update_model_by_column(db, {'manual_intent': obj_in.manual_intent}, external_id=obj_in.external_id)
  75. async def update_llm_intent(self, db: AsyncSession, internal_id: str, llm_intent: int, request_data: dict, response_data: dict, status: int) -> int:
  76. """
  77. 更新call record
  78. :param db:
  79. :param pk:
  80. :param internal_id:
  81. :param llm_intent:
  82. :param request_data:
  83. :param response_data:
  84. :param status:
  85. :return:
  86. """
  87. return await self.update_model_by_column(db, {'llm_intent': llm_intent, 'request_data': request_data, 'response_data': response_data, 'status': status}, id=internal_id)
  88. async def delete(self, db: AsyncSession, pk: list[int]) -> int:
  89. """
  90. 删除call record
  91. :param db:
  92. :param pk:
  93. :return:
  94. """
  95. return await self.delete_model_by_column(db, allow_multiple=True, id__in=pk)
  96. intent_records_dao: CRUDIntentRecords = CRUDIntentRecords(IntentRecords)