From e078028f1a8da34f3cc2cb5095b8e103a996f553 Mon Sep 17 00:00:00 2001 From: zhaoqingang <zhaoqg0118@163.com> Date: 星期五, 11 四月 2025 10:16:42 +0800 Subject: [PATCH] 首页智能体中心过滤掉自研类型 --- app/service/dialog.py | 73 +++++++++++++++++++++++++++--------- 1 files changed, 55 insertions(+), 18 deletions(-) diff --git a/app/service/dialog.py b/app/service/dialog.py index 19f253c..cd79559 100644 --- a/app/service/dialog.py +++ b/app/service/dialog.py @@ -5,16 +5,17 @@ from app.config.agent_base_url import DF_CHAT_PARAMETERS, DF_CHAT_API_KEY from app.config.config import settings -from app.config.const import Dialog_STATSU_DELETE, DF_TYPE, Dialog_STATSU_ON, workflow_server +from app.config.const import Dialog_STATSU_DELETE, DF_TYPE, Dialog_STATSU_ON, workflow_server, RG_TYPE, basic_chat from app.models import KnowledgeModel, GroupModel, DialogModel, ConversationModel, group_dialog_table, LabelWorkerModel, \ LabelModel, ApiTokenModel from app.models.user_model import UserModel, UserTokenModel from Log import logger from app.service.v2.app_driver.chat_data import ChatBaseApply from app.service.v2.chat import get_chat_token, add_chat_token, get_app_token +from app.task.fetch_agent import get_one_from_ragflow_dialog -async def get_dialog_list(db, user_id, keyword, label, status, page_size, page_index): +async def get_dialog_list(db, user_id, keyword, label, status, page_size, page_index, mode): user = db.query(UserModel).filter(UserModel.id == user_id).first() if user is None: return {"rows": []} @@ -23,15 +24,18 @@ query = query.filter(DialogModel.status == status) else: query = query.filter(DialogModel.status != Dialog_STATSU_DELETE) + if mode: + query = query.filter(DialogModel.mode != basic_chat) id_list = [] + # if label: + # id_list = [i.object_id for i in db.query(LabelWorkerModel).filter(LabelWorkerModel.label_id==label).all()] + if user.permission != "admin": + dia_list = [j.id for i in user.groups for j in i.dialogs] + query = query.filter(or_(DialogModel.tenant_id == user_id, DialogModel.id.in_(dia_list))) + # else: if label: id_list = [i.object_id for i in db.query(LabelWorkerModel).filter(LabelWorkerModel.label_id == label).all()] - if user.permission != "admin": - dia_list = [j.id for i in user.groups for j in i.dialogs if not label or j.id in id_list] - query = query.filter(or_(DialogModel.tenant_id == user_id, DialogModel.id.in_(dia_list))) - else: - if label: - query = query.filter(or_(DialogModel.id.in_(id_list))) + query = query.filter(DialogModel.id.in_(id_list)) if keyword: query = query.filter(DialogModel.name.like('%{}%'.format(keyword))) @@ -96,10 +100,19 @@ async def create_dialog_service(db, dialog_id, dialog_name, description, icon, dialog_type, mode, user_id): + para = { + "user_input_form": [], + "retriever_resource": { + "enabled": True + }, + "file_upload": { + "enabled": False + } + } try: dialog_model = DialogModel(id=dialog_id, name=dialog_name, description=description, icon=icon, dialog_type=dialog_type, tenant_id=user_id, mode=mode, update_date=datetime.now(), - create_date=datetime.now()) + create_date=datetime.now(), parameters=json.dumps(para)) db.add(dialog_model) db.commit() db.refresh(dialog_model) @@ -163,9 +176,14 @@ return True -async def update_dialog_icon_service(db, dialog_id, icon): +async def update_dialog_icon_service(db, dialog_id, icon, name, description): + update = {"icon": icon, "update_date": datetime.now()} + if name: + update["name"] = name + if description or description == "": + update["description"] = description try: - db.query(DialogModel).filter_by(id=dialog_id).update({"icon": icon, "update_date": datetime.now()}) + db.query(DialogModel).filter_by(id=dialog_id).update(update) db.commit() except Exception as e: logger.error(e) @@ -179,16 +197,14 @@ if user is None: return {"rows": []} query = db.query(DialogModel).filter(DialogModel.status != Dialog_STATSU_DELETE) - id_list = [] + if user.permission != "admin": + dia_list = [j.id for i in user.groups for j in i.dialogs] + query = query.filter(or_(DialogModel.tenant_id == user_id, DialogModel.id.in_(dia_list))) + if label: id_list = set( [i.object_id for i in db.query(LabelWorkerModel).filter(LabelWorkerModel.label_id.in_(label)).all()]) - if user.permission != "admin": - dia_list = [j.id for i in user.groups for j in i.dialogs if not label or j.id in id_list] - query = query.filter(or_(DialogModel.tenant_id == user_id, DialogModel.id.in_(dia_list))) - else: - if label: - query = query.filter(or_(DialogModel.id.in_(id_list))) + query = query.filter(DialogModel.id.in_(id_list)) if keyword: query = query.filter(DialogModel.name.like('%{}%'.format(keyword))) @@ -220,3 +236,24 @@ r["user"] = user_dict.get(r["user_id"], {}) r["label"] = label_dict.get(r["id"], []) return {"total": total, "rows": rows} + + + +async def sync_dialog_service(db, dialog_id): + dialog = db.query(DialogModel).filter(DialogModel.id == dialog_id).first() + if dialog and dialog.dialog_type == RG_TYPE: + try: + app_dialog = get_one_from_ragflow_dialog(dialog_id) + if app_dialog: + dialog.name = app_dialog["name"] + dialog.description = app_dialog["description"] + dialog.kb_ids = app_dialog["kb_ids"] + dialog.update_date = datetime.now() + db.add(dialog) + db.commit() + db.refresh(dialog) + except Exception as e: + logger.error(e) + db.rollback() + return False + return True -- Gitblit v1.8.0