| | |
| | | try: |
| | | async def forward_to_ragflow(): |
| | | while True: |
| | | is_new = False |
| | | message = await websocket.receive_json() |
| | | print(f"Received from client {chat_id}: {message}") |
| | | chat_history = message.get('chatHistory', []) |
| | |
| | | if len(chat_history) == 0: |
| | | chat_history = await ragflow_service.get_session_history(token, chat_id) |
| | | if len(chat_history) == 0: |
| | | is_new = True |
| | | chat_history = await ragflow_service.set_session(token, agent_id, |
| | | message, chat_id, True) |
| | | # print("chat_history------------------------", chat_history) |
| | |
| | | result = {"message": f"内部错误: {e2}", "type": "close"} |
| | | await websocket.send_json(result) |
| | | print(f"Error process message of ragflow: {e2}") |
| | | try: |
| | | dialog_chat_history = await ragflow_service.get_session_history(token, chat_id, 1) |
| | | await update_session_history(db, dialog_chat_history, current_user.id, is_new) |
| | | await update_session_history(db, dialog_chat_history, current_user.id) |
| | | except Exception as e: |
| | | logger.error(e) |
| | | logger.error("-----------------保存ragflow的历史会话异常-----------------") |
| | | |
| | | # 启动任务处理客户端消息 |
| | | tasks = [ |
| | |
| | | excel_url = None |
| | | if file_name: |
| | | excel_url = f"/api/files/download/?agent_id=basic_question_talk&file_id={file_name}&file_type=word" |
| | | result = {"message": output, "type": "message", "file_url": excel_url} |
| | | result = {"message": output, "type": "message", "file_url": excel_url, "file_name":file_name} |
| | | try: |
| | | SessionService(db).update_session(chat_id, |
| | | message={"role": "assistant", "content": result}) |
| | | except Exception as e: |
| | | logger.error(e) |
| | | logger.error("-----------------返回数据--------------------") |
| | | await websocket.send_json(result | data) |
| | | await websocket.send_json(result) |
| | | except Exception as e2: |
| | | |
| | | result = {"message": f"内部错误: {e2}", "type": "close"} |
| | |
| | | return {"rows": [kld.to_json() for kld in dialog_list]} |
| | | |
| | | |
| | | async def update_session_history(db, data: dict, user_id, is_new): |
| | | async def update_session_history(db, data: dict, user_id): |
| | | session_id = data.get("id") |
| | | if not session_id: |
| | | logger.error("更新回话记录失败!{}".format(data)) |
| | | return |
| | | data["create_date"] = datetime.strptime(data["create_date"], '%a, %d %b %Y %H:%M:%S %Z') |
| | | data["update_date"] = datetime.strptime(data["update_date"], '%a, %d %b %Y %H:%M:%S %Z') |
| | | if is_new: |
| | | conversation = db.query(ConversationModel).filter(ConversationModel.id == session_id).first() |
| | | if not conversation: |
| | | try: |
| | | data["tenant_id"] = user_id |
| | | conversation_model = ConversationModel(**data) |
| | |
| | | db.rollback() |
| | | else: |
| | | try: |
| | | data["tenant_id"] = user_id |
| | | # data["tenant_id"] = user_id |
| | | del data["id"] |
| | | db.query(ConversationModel).filter(ConversationModel.id == session_id).update(data) |
| | | db.commit() |
| | |
| | | import json |
| | | from typing import Type |
| | | |
| | | from sqlalchemy.orm import Session |
| | |
| | | agent_id=agent_id, |
| | | agent_type=agent_type, |
| | | tenant_id=user_id, |
| | | message=[{"role": "user", "content": name}] |
| | | message=json.dumps([{"role": "user", "content": name}]) |
| | | ) |
| | | self.db.add(new_session) |
| | | self.db.commit() |
| | |
| | | SessionModel: 查找到的会话模型实例,如果未找到则返回None。 |
| | | """ |
| | | session = self.db.query(SessionModel).filter_by(id=session_id).first() |
| | | if session.message is None: |
| | | if session and session.message is None: |
| | | session.message = '[]' |
| | | return session |
| | | |