123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- from typing import Sequence
- from model.intent_records import IntentRecords
- from app.call_center.schema.intent_records import CreateIntentRecordsParam, UpdateIntentRecordsParam, \
- GetIntentRecordsByIdParam
- from sqlalchemy import Select, select, or_
- from sqlalchemy.ext.asyncio import AsyncSession
- from sqlalchemy_crud_plus import CRUDPlus
- class CRUDIntentRecords(CRUDPlus[IntentRecords]):
- async def get(self, db: AsyncSession, obj_in: GetIntentRecordsByIdParam) -> IntentRecords | None:
- """
- 获取call record
- :param db:
- :param obj_in:
- :return:
- """
- intent_records = None
- if obj_in.internal_id:
- intent_records = await self.select_model_by_column(db, id=obj_in.internal_id, org_id=obj_in.org_id)
- elif obj_in.external_id:
- intent_records = await self.select_model_by_column(db, external_id=obj_in.external_id, org_id=obj_in.org_id)
- return intent_records
- async def get_earliest_record(self, db: AsyncSession, limit: int = 1) -> Sequence[IntentRecords] | None:
- """
- 获取最早的 llm_intent 不为空的记录
- :param db:
- :param limit:
- :return:
- """
- stmt = select(self.model).where(or_(IntentRecords.llm_intent == None, IntentRecords.llm_intent == 0)).order_by(IntentRecords.created_at.asc()).limit(limit)
- query = await db.execute(stmt)
- return query.scalars().fetchall()
- async def get_list(self) -> Select:
- """
- 获取call record列表
- :return:
- """
- return await self.select_order('created_at', 'desc')
- async def get_all(self, db: AsyncSession) -> Sequence[IntentRecords]:
- """
- 获取所有call record
- :param db:
- :return:
- """
- return await self.select_models(db)
- async def create(self, db: AsyncSession, obj_in: CreateIntentRecordsParam) -> None:
- """
- 创建call record
- :param db:
- :param obj_in:
- :return:
- """
- await self.create_model(db, obj_in)
- async def update(self, db: AsyncSession, pk: int, obj_in: UpdateIntentRecordsParam) -> int:
- """
- 更新call record
- :param db:
- :param pk:
- :param obj_in:
- :return:
- """
- return await self.update_model(db, pk, obj_in)
- async def update_manual_intent(self, db: AsyncSession, obj_in: UpdateIntentRecordsParam) -> int:
- """
- 更新call record
- :param db:
- :param pk:
- :param obj_in:
- :return:
- """
- if obj_in.internal_id:
- return await self.update_model_by_column(db, {'manual_intent': obj_in.manual_intent}, id=obj_in.internal_id)
- else:
- return await self.update_model_by_column(db, {'manual_intent': obj_in.manual_intent}, external_id=obj_in.external_id)
- async def update_llm_intent(self, db: AsyncSession, internal_id: str, llm_intent: int, request_data: dict, response_data: dict, status: int) -> int:
- """
- 更新call record
- :param db:
- :param pk:
- :param internal_id:
- :param llm_intent:
- :param request_data:
- :param response_data:
- :param status:
- :return:
- """
- 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)
- async def delete(self, db: AsyncSession, pk: list[int]) -> int:
- """
- 删除call record
- :param db:
- :param pk:
- :return:
- """
- return await self.delete_model_by_column(db, allow_multiple=True, id__in=pk)
- intent_records_dao: CRUDIntentRecords = CRUDIntentRecords(IntentRecords)
|