crud_intent_records.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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, or_
  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, limit: int = 1) -> Sequence[IntentRecords] | None:
  25. """
  26. 获取最早的 llm_intent 不为空的记录
  27. :param db:
  28. :param limit:
  29. :return:
  30. """
  31. stmt = select(self.model).where(or_(IntentRecords.llm_intent == None, IntentRecords.llm_intent == 0)).order_by(IntentRecords.created_at.asc()).limit(limit)
  32. query = await db.execute(stmt)
  33. return query.scalars().fetchall()
  34. async def get_list(self) -> Select:
  35. """
  36. 获取call record列表
  37. :return:
  38. """
  39. return await self.select_order('created_at', 'desc')
  40. async def get_all(self, db: AsyncSession) -> Sequence[IntentRecords]:
  41. """
  42. 获取所有call record
  43. :param db:
  44. :return:
  45. """
  46. return await self.select_models(db)
  47. async def create(self, db: AsyncSession, obj_in: CreateIntentRecordsParam) -> None:
  48. """
  49. 创建call record
  50. :param db:
  51. :param obj_in:
  52. :return:
  53. """
  54. await self.create_model(db, obj_in)
  55. async def update(self, db: AsyncSession, pk: int, obj_in: UpdateIntentRecordsParam) -> int:
  56. """
  57. 更新call record
  58. :param db:
  59. :param pk:
  60. :param obj_in:
  61. :return:
  62. """
  63. return await self.update_model(db, pk, obj_in)
  64. async def update_manual_intent(self, db: AsyncSession, obj_in: UpdateIntentRecordsParam) -> int:
  65. """
  66. 更新call record
  67. :param db:
  68. :param pk:
  69. :param obj_in:
  70. :return:
  71. """
  72. if obj_in.internal_id:
  73. return await self.update_model_by_column(db, {'manual_intent': obj_in.manual_intent}, id=obj_in.internal_id)
  74. else:
  75. return await self.update_model_by_column(db, {'manual_intent': obj_in.manual_intent}, external_id=obj_in.external_id)
  76. async def update_llm_intent(self, db: AsyncSession, internal_id: str, llm_intent: int, request_data: dict, response_data: dict, status: int) -> int:
  77. """
  78. 更新call record
  79. :param db:
  80. :param pk:
  81. :param internal_id:
  82. :param llm_intent:
  83. :param request_data:
  84. :param response_data:
  85. :param status:
  86. :return:
  87. """
  88. 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)
  89. async def delete(self, db: AsyncSession, pk: list[int]) -> int:
  90. """
  91. 删除call record
  92. :param db:
  93. :param pk:
  94. :return:
  95. """
  96. return await self.delete_model_by_column(db, allow_multiple=True, id__in=pk)
  97. intent_records_dao: CRUDIntentRecords = CRUDIntentRecords(IntentRecords)