Spaces:
Sleeping
Sleeping
| from server.db.session import with_session | |
| from typing import Dict, List | |
| import uuid | |
| from server.db.models.message_model import MessageModel | |
| def add_message_to_db(session, conversation_id: str, chat_type, query, response="", message_id=None, | |
| metadata: Dict = {}): | |
| """ | |
| 新增聊天记录 | |
| """ | |
| if not message_id: | |
| message_id = uuid.uuid4().hex | |
| m = MessageModel(id=message_id, chat_type=chat_type, query=query, response=response, | |
| conversation_id=conversation_id, | |
| meta_data=metadata) | |
| session.add(m) | |
| session.commit() | |
| return m.id | |
| def update_message(session, message_id, response: str = None, metadata: Dict = None): | |
| """ | |
| 更新已有的聊天记录 | |
| """ | |
| m = get_message_by_id(message_id) | |
| if m is not None: | |
| if response is not None: | |
| m.response = response | |
| if isinstance(metadata, dict): | |
| m.meta_data = metadata | |
| session.add(m) | |
| session.commit() | |
| return m.id | |
| def get_message_by_id(session, message_id) -> MessageModel: | |
| """ | |
| 查询聊天记录 | |
| """ | |
| m = session.query(MessageModel).filter_by(id=message_id).first() | |
| return m | |
| def feedback_message_to_db(session, message_id, feedback_score, feedback_reason): | |
| """ | |
| 反馈聊天记录 | |
| """ | |
| m = session.query(MessageModel).filter_by(id=message_id).first() | |
| if m: | |
| m.feedback_score = feedback_score | |
| m.feedback_reason = feedback_reason | |
| session.commit() | |
| return m.id | |
| def filter_message(session, conversation_id: str, limit: int = 10): | |
| messages = (session.query(MessageModel).filter_by(conversation_id=conversation_id). | |
| # 用户最新的query 也会插入到db,忽略这个message record | |
| filter(MessageModel.response != ''). | |
| # 返回最近的limit 条记录 | |
| order_by(MessageModel.create_time.desc()).limit(limit).all()) | |
| # 直接返回 List[MessageModel] 报错 | |
| data = [] | |
| for m in messages: | |
| data.append({"query": m.query, "response": m.response}) | |
| return data | |