| | |
| | | from app.api import Response, get_current_user, ResponseList, process_files |
| | | from app.api.user import reset_user_pwd |
| | | from app.config.config import settings |
| | | from app.models import DialogModel, MenuCapacityModel |
| | | from app.models.agent_model import AgentType, AgentModel |
| | | from app.models.base_model import get_db |
| | | from app.models.session_model import SessionModel |
| | |
| | | from app.service.dialog import get_session_history |
| | | from app.service.ragflow import RagflowService |
| | | from app.service.service_token import get_ragflow_token, get_bisheng_token |
| | | from app.task.fetch_agent import initialize_agents |
| | | |
| | | router = APIRouter() |
| | | |
| | |
| | | limit: int = Query(1000, ge=1, le=1000), |
| | | db: Session = Depends(get_db), |
| | | current_user: UserModel = Depends(get_current_user)): |
| | | print(111) |
| | | agent = db.query(AgentModel).filter(AgentModel.id == agent_id).first() |
| | | # agent = db.query(AgentModel).filter(AgentModel.id == agent_id).first() |
| | | agent = db.query(MenuCapacityModel).filter(MenuCapacityModel.chat_id == agent_id).first() |
| | | if not agent: |
| | | return ResponseList(code=404, msg="Agent not found") |
| | | |
| | | if agent.agent_type == AgentType.RAGFLOW: |
| | | print(222) |
| | | agent_type = int(agent.capacity_type) |
| | | if agent_type == AgentType.RAGFLOW: |
| | | ragflow_service = RagflowService(base_url=settings.fwr_base_url) |
| | | try: |
| | | token = await get_ragflow_token(db, current_user.id) |
| | | result = await ragflow_service.get_chat_sessions(token, agent_id) |
| | | if not result: |
| | | result = await get_session_history(db, current_user.id, agent_id) |
| | | result = await get_session_history(db, current_user.id, agent_id, page, limit) |
| | | except Exception as e: |
| | | print(e) |
| | | raise HTTPException(status_code=500, detail=str(e)) |
| | | return ResponseList(code=200, msg="", data=result) |
| | | |
| | | elif agent.agent_type == AgentType.BISHENG: |
| | | elif agent_type == AgentType.BISHENG: |
| | | bisheng_service = BishengService(base_url=settings.sgb_base_url) |
| | | try: |
| | | token = await get_bisheng_token(db, current_user.id) |
| | |
| | | raise HTTPException(status_code=500, detail=str(e)) |
| | | return ResponseList(code=200, msg="", data=result) |
| | | |
| | | elif agent.agent_type == AgentType.BASIC: |
| | | elif agent_type == AgentType.BASIC: |
| | | offset = (page - 1) * limit |
| | | records = db.query(SessionModel).filter(SessionModel.agent_id == agent_id, SessionModel.tenant_id==current_user.id).order_by(SessionModel.create_date.desc()).offset(offset).limit(limit).all() |
| | | result = [item.to_dict() for item in records] |
| | | return ResponseList(code=200, msg="", data=result) |
| | | |
| | | elif agent.agent_type == AgentType.DIFY: |
| | | elif agent_type == AgentType.DIFY: |
| | | offset = (page - 1) * limit |
| | | records = db.query(SessionModel).filter(SessionModel.agent_id == agent_id, SessionModel.tenant_id==current_user.id).order_by(SessionModel.create_date.desc()).offset(offset).limit(limit).all() |
| | | result = [item.to_dict() for item in records] |
| | |
| | | |
| | | @router.get("/get-chat-id/{agent_id}", response_model=Response) |
| | | async def get_chat_id(agent_id: str, db: Session = Depends(get_db)): |
| | | agent = db.query(AgentModel).filter(AgentModel.id == agent_id).first() |
| | | if not agent: |
| | | return Response(code=404, msg="Agent not found") |
| | | # agent = db.query(AgentModel).filter(AgentModel.id == agent_id).first() |
| | | # if not agent: |
| | | # return Response(code=404, msg="Agent not found") |
| | | |
| | | return Response(code=200, msg="", data={"chat_id": uuid.uuid4().hex}) |
| | |
| | | |
| | | from fastapi import APIRouter, Depends |
| | | from app.api import Response, get_current_user, ResponseList |
| | | from app.models.dialog_model import dialogData, dialogDataUpdate |
| | | from app.models.dialog_model import dialogData, dialogDataUpdate, dialogList |
| | | from app.models.base_model import get_db |
| | | from app.models.user_model import UserModel |
| | | from app.service.dialog import get_dialog_list, create_dialog_service, update_dialog_status_service, \ |
| | | delete_dialog_service, update_dialog_icon_service |
| | | delete_dialog_service, update_dialog_icon_service, get_dialog_manage_list |
| | | |
| | | dialog_router = APIRouter() |
| | | |
| | |
| | | is_create = await update_dialog_icon_service(db, dialog.id, dialog.icon) |
| | | if not is_create: |
| | | return Response(code=500, msg="dialog update failure", data={}) |
| | | return Response(code=200, msg="dialog update success", data={}) |
| | | return Response(code=200, msg="dialog update success", data={}) |
| | | |
| | | |
| | | @dialog_router.post("/dialog_list", response_model=Response) |
| | | async def dialog_list_api(dialog:dialogList, |
| | | current_user: UserModel = Depends(get_current_user), |
| | | db=Depends(get_db)): |
| | | return Response(code=200, msg="", data=await get_dialog_manage_list(db, current_user.id, dialog.keyword, dialog.label, dialog.status, dialog.pageSize, dialog.current, dialog.mode)) |
| | |
| | | msg = await edit_organization_status(db, dept.deptId, str(dept.status)) |
| | | if msg: |
| | | return Response(code=400, msg=f"{msg}", data={}) |
| | | return Response(code=200, msg="dept delete successfully", data={}) |
| | | return Response(code=200, msg="dept status update successfully", data={}) |
| | |
| | | |
| | | @menu_router.delete("/{menuId}", response_model=Response) |
| | | async def delete_resource(menuId, current_user: UserModel = Depends(get_current_user), db=Depends(get_db)): |
| | | is_edit = await delete_resource_info(db, menuId) |
| | | if not is_edit: |
| | | return Response(code=500, msg="menu delete failure", data={}) |
| | | msg = await delete_resource_info(db, menuId) |
| | | if msg: |
| | | return Response(code=400, msg=f"{msg}", data={}) |
| | | return Response(code=200, msg="menu delete successfully", data={}) |
| | | |
| | | |
| | | |
| | | @menu_router.post("/add_menu", response_model=Response) |
| | |
| | | return Response(code=400, msg="The status cannot be {}!".format(menu.status)) |
| | | is_create = await edit_resource_data(db, menu.menuId, menu.menuName, menu.component, menu.path, menu.orderNum, menu.perms, menu.menuType, menu.description, menu.parentId, menu.status,menu.icon) |
| | | if not is_create: |
| | | return Response(code=500, msg="dept edit failure", data={}) |
| | | return Response(code=200, msg="dept edit successfully", data={}) |
| | | return Response(code=500, msg="menu edit failure", data={}) |
| | | return Response(code=200, msg="menu edit successfully", data={}) |
| | | |
| | | |
| | | @menu_router.put("/status", response_model=Response) |
| | | async def resource_edit_status(menu: MenuStatus, current_user: UserModel = Depends(get_current_user), db=Depends(get_db)): |
| | | if menu.status not in ["0", "1"]: |
| | | return Response(code=400, msg="The status cannot be {}!".format(menu.status)) |
| | | is_create = await edit_resource_status(db, menu.menuId, menu.status) |
| | | if not is_create: |
| | | return Response(code=500, msg="dept status edit failure", data={}) |
| | | return Response(code=200, msg="dept status edit success", data={}) |
| | | # is_create = await edit_resource_status(db, menu.menuId, menu.status) |
| | | msg = await edit_resource_status(db, menu.menuId, str(menu.status)) |
| | | if msg: |
| | | return Response(code=400, msg=f"{msg}", data={}) |
| | | return Response(code=200, msg="menu status update successfully", data={}) |
| | |
| | | USER_STATSU_OFF = "0" |
| | | |
| | | Dialog_STATSU_DELETE = "2" |
| | | Dialog_STATSU_ON = "1" |
| | | Dialog_STATSU_OFF = "0" |
| | | |
| | | DEPT_STATUS_DELETE = "2" |
| | | DEPT_STATUS_ON = "1" |
| | |
| | | |
| | | ROLE_STATUS_DELETE = "2" |
| | | ROLE_STATUS_ON = "1" |
| | | ROLE_STATUS_OFF = "0" |
| | | ROLE_STATUS_OFF = "0" |
| | | |
| | | RESOURCE_STATUS_DELETE = "2" |
| | | RESOURCE_STATUS_ON = "1" |
| | | RESOURCE_STATUS_OFF = "0" |
| | |
| | | |
| | | DATABASE_URL = os.getenv('DATABASE_URL') or settings.database_url |
| | | |
| | | engine = create_engine(DATABASE_URL) |
| | | engine = create_engine(DATABASE_URL, pool_size=20, max_overflow=50) |
| | | SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) |
| | | |
| | | Base = declarative_base() |
| | |
| | | class dialogDataUpdate(BaseModel): |
| | | id: str |
| | | status: Optional[str] = "1" |
| | | icon: Optional[str] = "" |
| | | icon: Optional[str] = "" |
| | | |
| | | |
| | | class dialogList(BaseModel): |
| | | current: Optional[int] = 1 |
| | | pageSize: Optional[int] = 10 |
| | | keyword: Optional[str] = "" |
| | | label: Optional[list] = [] |
| | | status: Optional[str] = "" |
| | | mode: Optional[str] = "" |
| | |
| | | from sqlalchemy import Column, Integer, String, DateTime, Table, ForeignKey |
| | | from sqlalchemy.orm import relationship, backref |
| | | |
| | | from app.config.const import RESOURCE_STATUS_DELETE |
| | | from app.models.base_model import Base |
| | | |
| | | class ResourceModel(Base): |
| | |
| | | 'menuType': self.resource_type_id, |
| | | 'parentId': self.get_pid(), |
| | | 'parentName': self.get_pName(), |
| | | 'children': [res.to_tree_select_json() for res in self.children] |
| | | 'children': [res.to_tree_select_json() for res in self.children if res if res.status != RESOURCE_STATUS_DELETE] |
| | | } |
| | | |
| | | def to_router_json(self): |
| | |
| | | router = { |
| | | 'id': self.id, |
| | | 'name': self.path.capitalize() if self.path else '', |
| | | # 'name': self.name, |
| | | 'path': self.path, |
| | | 'hidden': bool(self.hidden), |
| | | 'redirect': 'noRedirect', |
| | | 'component': self.url, |
| | | 'alwaysShow': True, |
| | | 'perms': self.perms, |
| | | 'resourceType': self.get_type_json(), |
| | | 'meta': { |
| | | 'title': self.name, |
| | |
| | | |
| | | # if len(self.roles) > 0: |
| | | roles = {role.id: role.to_dict() for role in self.roles} |
| | | ogt_set = set() |
| | | for ogt in self.organizations: |
| | | if ogt.id in ogt_set: |
| | | continue |
| | | print(ogt.id) |
| | | ogt_set.add(ogt.id) |
| | | for role in ogt.roles: |
| | | roles[role.id] = role.to_dict() |
| | | parent_ogt = ogt.parent |
| | | while parent_ogt: |
| | | if parent_ogt.id not in ogt_set: |
| | | ogt_set.add(ogt.id) |
| | | for role in parent_ogt.roles: |
| | | roles[role.id] = role.to_dict() |
| | | parent_ogt = parent_ogt.parent |
| | | else: |
| | | break |
| | | # ogt_set = set() |
| | | # for ogt in self.organizations: |
| | | # if ogt.id in ogt_set: |
| | | # continue |
| | | # print(ogt.id) |
| | | # ogt_set.add(ogt.id) |
| | | # for role in ogt.roles: |
| | | # roles[role.id] = role.to_dict() |
| | | # parent_ogt = ogt.parent |
| | | # while parent_ogt: |
| | | # if parent_ogt.id not in ogt_set: |
| | | # ogt_set.add(ogt.id) |
| | | # for role in parent_ogt.roles: |
| | | # roles[role.id] = role.to_dict() |
| | | # parent_ogt = parent_ogt.parent |
| | | # else: |
| | | # break |
| | | |
| | | json['roles'] = list(roles.values()) |
| | | json['depts'] = [i.to_base_json() for i in self.organizations] |
| | | return json |
| | | |
| | | |
| | |
| | | db.rollback() |
| | | |
| | | |
| | | async def get_session_history(db, user_id, dialog_id): |
| | | async def get_session_history(db, user_id, dialog_id, page, limit): |
| | | session_list = db.query(ConversationModel).filter(ConversationModel.tenant_id.__eq__(user_id), |
| | | ConversationModel.dialog_id.__eq__(dialog_id)).order_by( |
| | | ConversationModel.update_time.desc()).all() |
| | | ConversationModel.update_time.desc()).limit(limit).offset((page - 1) * limit).all() |
| | | return [i.to_json() for i in session_list] |
| | | |
| | | |
| | |
| | | logger.error(e) |
| | | db.rollback() |
| | | return False |
| | | return True |
| | | return True |
| | | |
| | | |
| | | async def get_dialog_manage_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": []} |
| | | query = db.query(DialogModel).filter(DialogModel.status != Dialog_STATSU_DELETE) |
| | | id_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))) |
| | | |
| | | if keyword: |
| | | query = query.filter(DialogModel.name.like('%{}%'.format(keyword))) |
| | | |
| | | if status: |
| | | # print(status) |
| | | query = query.filter(DialogModel.status == status) |
| | | if mode: |
| | | query = query.filter(DialogModel.mode == mode) |
| | | query = query.order_by(DialogModel.update_date.desc()) |
| | | total = query.count() |
| | | if page_size: |
| | | query = query.limit(page_size).offset((page_index - 1) * page_size) |
| | | |
| | | rows = [] |
| | | user_id_set = set() |
| | | dialog_id_set = set() |
| | | label_dict = {} |
| | | for kld in query.all(): |
| | | user_id_set.add(kld.tenant_id) |
| | | dialog_id_set.add(kld.id) |
| | | rows.append(kld.to_json()) |
| | | user_dict = {str(i.id): i.to_dict() for i in db.query(UserModel).filter(UserModel.id.in_(user_id_set)).all()} |
| | | for i in db.query(LabelModel.id, LabelModel.name, LabelWorkerModel.object_id).outerjoin(LabelWorkerModel, |
| | | LabelModel.id == LabelWorkerModel.label_id).filter( |
| | | LabelWorkerModel.object_id.in_(dialog_id_set)).all(): |
| | | |
| | | label_dict[i.object_id] = label_dict.get(i.object_id, []) +[{"labelId": i.id, "labelName": i.name}] |
| | | for r in rows: |
| | | r["user"] = user_dict.get(r["user_id"], {}) |
| | | r["label"] = label_dict.get(r["id"], []) |
| | | return {"total": total, "rows": rows} |
| | |
| | | next_dept_list = [] |
| | | base_dept = db.query(OrganizationModel).filter(OrganizationModel.id.__eq__(dept_id)).first() |
| | | if status == DEPT_STATUS_ON: |
| | | print(11) |
| | | print(base_dept.name) |
| | | if base_dept.parent and base_dept.parent.status != DEPT_STATUS_ON: |
| | | return '上级节点状态异常!' |
| | | try: |
| | | base_dept.status=status |
| | | db.commit() |
| | |
| | | import uuid |
| | | |
| | | from Log import logger |
| | | from app.config.const import RESOURCE_STATUS_ON, RESOURCE_STATUS_OFF, RESOURCE_STATUS_DELETE |
| | | from app.models import ResourceModel |
| | | |
| | | |
| | |
| | | |
| | | |
| | | async def delete_resource_info(db, menu_id): |
| | | delete_list = [] |
| | | dept_list = [] |
| | | next_dept_list = [] |
| | | base_dept = db.query(ResourceModel).filter(ResourceModel.id.__eq__(menu_id)).first() |
| | | dept_list.append(base_dept) |
| | | while dept_list: |
| | | for dept in dept_list: |
| | | delete_list.append(dept.id) |
| | | for child_dept in dept.children: |
| | | next_dept_list.append(child_dept) |
| | | |
| | | dept_list = next_dept_list |
| | | next_dept_list = [] |
| | | |
| | | try: |
| | | db.query(ResourceModel).filter(ResourceModel.id.__eq__(menu_id)).delete() |
| | | db.query(ResourceModel).filter(ResourceModel.id.in_(delete_list)).update({"status": RESOURCE_STATUS_DELETE}) |
| | | db.commit() |
| | | except Exception as e: |
| | | logger.error(e) |
| | | db.rollback() |
| | | return False |
| | | return True |
| | | return '服务异常 !' |
| | | return "" |
| | | |
| | | |
| | | async def create_menu(db, menu_name, component, path, order_num, perms, menu_type, description, parent_id, status, icon): |
| | |
| | | |
| | | |
| | | async def edit_resource_status(db, menu_id, status): |
| | | try: |
| | | dept_model = db.query(ResourceModel).filter(ResourceModel.id == menu_id).first() |
| | | dept_model.status = status |
| | | db.commit() |
| | | db.refresh(dept_model) |
| | | except Exception as e: |
| | | logger.error(e) |
| | | db.rollback() |
| | | return False |
| | | return True |
| | | delete_list = [] |
| | | dept_list = [] |
| | | next_dept_list = [] |
| | | base_dept = db.query(ResourceModel).filter(ResourceModel.id.__eq__(menu_id)).first() |
| | | if status == RESOURCE_STATUS_ON: |
| | | if base_dept.parent and base_dept.parent.status != RESOURCE_STATUS_ON: |
| | | return '上级节点状态异常!' |
| | | try: |
| | | base_dept.status = status |
| | | db.commit() |
| | | except Exception as e: |
| | | logger.error(e) |
| | | db.rollback() |
| | | return '服务异常 !' |
| | | else: |
| | | dept_list.append(base_dept) |
| | | while dept_list: |
| | | for dept in dept_list: |
| | | delete_list.append(dept.id) |
| | | for child_dept in dept.children: |
| | | next_dept_list.append(child_dept) |
| | | |
| | | dept_list = next_dept_list |
| | | next_dept_list = [] |
| | | try: |
| | | db.query(ResourceModel).filter(ResourceModel.id.in_(delete_list)).update( |
| | | {"status": RESOURCE_STATUS_OFF}) |
| | | db.commit() |
| | | except Exception as e: |
| | | logger.error(e) |
| | | db.rollback() |
| | | return '服务异常 !' |
| | | return "" |
| | |
| | | import time |
| | | from datetime import datetime |
| | | from traceback import print_tb |
| | | |
| | | from app.api import pwd_context |
| | | from app.api.dialog import dialog_list |
| | | from app.config.config import settings |
| | | from app.config.const import RAGFLOW, BISHENG, DIFY, USER_STATSU_DELETE, ROLE_STATUS_ON, DEPT_STATUS_ON |
| | | from app.config.const import RAGFLOW, BISHENG, DIFY, USER_STATSU_DELETE, ROLE_STATUS_ON, DEPT_STATUS_ON, \ |
| | | Dialog_STATSU_ON |
| | | from app.models import RoleModel, GroupModel, AgentType, role_resource_table, DialogModel, OrganizationModel, \ |
| | | ResourceModel |
| | | from app.models.menu_model import WebMenuModel, MenuCapacityModel |
| | |
| | | |
| | | async def edit_user_data(db, user_id, email, phone, login_name, roles, groups): |
| | | try: |
| | | print(121221) |
| | | print(roles) |
| | | user = db.query(UserModel).filter(UserModel.id == user_id).first() |
| | | user.email = email |
| | | user.phone = phone |
| | |
| | | user.roles = [db.get(RoleModel, roleId) for roleId in roles] |
| | | # user.groups = [db.get(GroupModel, groupId) for groupId in groups] |
| | | db.commit() |
| | | print(4343) |
| | | except Exception as e: |
| | | logger.error(e) |
| | | db.rollback() |
| | |
| | | role_set = set() |
| | | dept_set = set() |
| | | user = db.query(UserModel).filter_by(id=user_id).first() |
| | | parent_resource = db.query(ResourceModel).filter(ResourceModel.status == DEPT_STATUS_ON, ResourceModel.resource_id == None).first() |
| | | parent_id = "" |
| | | print(user_id) |
| | | if parent_resource: |
| | | parent_id = parent_resource.id |
| | | tmp_dit = {} |
| | | if user.permission == "admin": |
| | | dept_list = db.query(ResourceModel).filter(ResourceModel.status==DEPT_STATUS_ON, ResourceModel.resource_type_id != "1").all() |
| | | for dept in dept_list: |
| | | if not dept.resource_id: |
| | | parent_id = dept.id |
| | | continue |
| | | permissions[dept.id] = dept.to_router_dict() |
| | | permissions[dept.id] = dept |
| | | else: |
| | | async def role_resource(role_set, permissions, roles): |
| | | nonlocal parent_id |
| | | for role in roles: |
| | | print(role.name) |
| | | if role.id not in role_set and role.status == ROLE_STATUS_ON: |
| | | role_set.add(role.id) |
| | | |
| | | for r in role.resources: |
| | | if r.resource_type_id != "1" and r.status==DEPT_STATUS_ON: |
| | | if not r.resource_id: |
| | | parent_id = r.id |
| | | continue |
| | | permissions[r.id] = r.to_router_dict() |
| | | permissions[r.id] = r |
| | | |
| | | await role_resource(role_set, permissions, user.roles) |
| | | for ogt in user.organizations: |
| | | print(ogt.name) |
| | | if ogt.status != DEPT_STATUS_ON: |
| | | continue |
| | | print(ogt.name) |
| | | if ogt.roles: |
| | | await role_resource(role_set, permissions, user.roles) |
| | | print(9877) |
| | | await role_resource(role_set, permissions,ogt.roles) |
| | | parent_ogt = ogt.parent |
| | | while parent_ogt: |
| | | if parent_ogt.id not in dept_set: |
| | |
| | | parent_ogt = parent_ogt.parent |
| | | else: |
| | | break |
| | | # print(permissions.keys()) |
| | | def get_parent(parent, permissions): |
| | | # print(parent.id) |
| | | # nonlocal permissions |
| | | if parent.id not in permissions: |
| | | |
| | | for permission in permissions.values(): |
| | | permissions[parent.id] = parent # .to_router_dict() |
| | | # print(permissions.keys()) |
| | | parent = parent.parent |
| | | if parent: |
| | | get_parent(parent, permissions) |
| | | # permission_list = [] |
| | | for permission in list(permissions.values()): |
| | | if permission.parent: |
| | | get_parent(permission.parent, permissions) |
| | | |
| | | permission_list = [p.to_router_dict() for p in permissions.values()] |
| | | for permission in permission_list: |
| | | tmp_dit[permission["parentId"]] = tmp_dit.get(permission["parentId"], []) + [permission] |
| | | |
| | | # print(permissions.keys()) |
| | | def get_child(parent_id): |
| | | res = permissions[parent_id] |
| | | # if parent_id in tmp_dit: |
| | | res = permissions[parent_id].to_router_dict() |
| | | res["children"] = [get_child(i["id"]) for i in tmp_dit.get(parent_id, [])] |
| | | return res |
| | | |
| | |
| | | res = [] |
| | | # print(user_id) |
| | | user = db.query(UserModel).filter_by(id=user_id).first() |
| | | for group in user.groups: |
| | | for dialog in group.dialogs: |
| | | dialog_list.append(dialog.id) |
| | | if user.permission == "admin": |
| | | dialog_list = [i.id for i in db.query(DialogModel).filter(DialogModel.status==Dialog_STATSU_ON).all()] |
| | | else: |
| | | for group in user.groups: |
| | | for dialog in group.dialogs: |
| | | dialog_list.append(dialog.id) |
| | | |
| | | |
| | | # print(dialog_list) |
| | | menu_list = db.query(WebMenuModel.id, WebMenuModel.title, WebMenuModel.describe, WebMenuModel.icon, WebMenuModel.desc,WebMenuModel.rank, |
| | | WebMenuModel.img, MenuCapacityModel.capacity_id, MenuCapacityModel.capacity_type, MenuCapacityModel.chat_id.label("agentId")).outerjoin( |
| | | WebMenuModel.img, MenuCapacityModel.capacity_id, MenuCapacityModel.capacity_type, MenuCapacityModel.chat_id.label("agentId"), MenuCapacityModel.chat_type).outerjoin( |
| | | MenuCapacityModel, WebMenuModel.id == MenuCapacityModel.menu_id).outerjoin( |
| | | DialogModel, MenuCapacityModel.capacity_id == DialogModel.id).filter(DialogModel.status=="1").all() |
| | | |
| | |
| | | break |
| | | else: |
| | | res.append({ |
| | | 'id': menus[0].id, |
| | | 'title': menus[0].title, |
| | | 'menuId': menus[0].id, |
| | | 'name': menus[0].title, |
| | | 'icon': menus[0].icon, |
| | | 'img': menus[0].img, |
| | | 'desc': menus[0].desc, |
| | | 'dialog': menus[0].describe, |
| | | 'agentId': menus[0].agentId, |
| | | 'rank': menus[0].rank |
| | | 'id': menus[0].agentId, |
| | | 'rank': menus[0].rank, |
| | | 'agent_type': menus[0].capacity_type, |
| | | 'type': menus[0].chat_type |
| | | }) |
| | | return sorted(res, key=lambda x: x['rank'], reverse=True) |
| | | |
| | |
| | | |
| | | for r in role.resources: |
| | | if r.resource_type_id != "1": |
| | | if not r.resource_id: |
| | | parent_id = r.id |
| | | continue |
| | | # if not r.resource_id: |
| | | # parent_id = r.id |
| | | # continue |
| | | permissions[r.id] = r.to_router_dict() |
| | | |
| | | await role_resource(role_set, permissions, user.roles) |
| | | for ogt in user.organizations: |
| | | if ogt.roles: |
| | | await role_resource(role_set, permissions, user.roles) |
| | | await role_resource(role_set, permissions, ogt.roles) |
| | | parent_ogt = ogt.parent |
| | | while parent_ogt: |
| | | |
| | |
| | | else: |
| | | break |
| | | |
| | | tmp_dit = {} |
| | | for permission in permissions.values(): |
| | | tmp_dit[permission["parentId"]] = tmp_dit.get(permission["parentId"], []) + [permission] |
| | | # tmp_dit = {} |
| | | # for permission in permissions.values(): |
| | | # tmp_dit[permission["parentId"]] = tmp_dit.get(permission["parentId"], []) + [permission] |
| | | # |
| | | # def get_child(parent_id): |
| | | # res = permissions[parent_id] |
| | | # res["children"] = [get_child(i["id"]) for i in tmp_dit.get(parent_id, [])] |
| | | # return res |
| | | |
| | | def get_child(parent_id): |
| | | res = permissions[parent_id] |
| | | res["children"] = [get_child(i["id"]) for i in tmp_dit.get(parent_id, [])] |
| | | return res |
| | | |
| | | res["menus"] = [get_child(i["id"]) for i in tmp_dit.get(parent_id, [])] |
| | | # res["menus"] = [get_child(i["id"]) for i in tmp_dit.get(parent_id, [])] |
| | | res["menus"] = list(permissions.values()) |
| | | for group in user.groups: |
| | | for klg in group.knowledges: |
| | | knowledge_dict[klg.id] = klg.to_json() |
| | |
| | | status = Column(String(16), nullable=False) |
| | | description = Column(Text, nullable=False) |
| | | tenant_id = Column(String(36), nullable=False) |
| | | mode = Column(String(36), nullable=False) |
| | | |
| | | |
| | | class RgKnowledge(Base): |
| | |
| | | try: |
| | | if names: |
| | | query = db.query(Flow.id, Flow.name, Flow.description, Flow.status, Flow.user_id) \ |
| | | .filter(Flow.name.in_(names)) |
| | | .filter(Flow.name.in_(names), Flow.status=="1") |
| | | else: |
| | | query = db.query(Flow.id, Flow.name, Flow.description, Flow.status, Flow.user_id) |
| | | query = db.query(Flow.id, Flow.name, Flow.description, Flow.status, Flow.user_id).filter(Flow.status=="1") |
| | | |
| | | results = query.all() |
| | | # print(f"Executing query: {query}") |
| | | # 格式化id为UUID |
| | | formatted_results = [{"id":format_uuid(row[0]), "name": row[1], "description": row[2], "status": "1" if row[3] ==2 else "0", "user_id": str(row[4])} for row in results] |
| | | formatted_results = [{"id":row[0], "name": row[1], "description": row[2], "status": row[3], "user_id": str(row[4]), "mode": "agent-dialog"} for row in results] |
| | | return formatted_results |
| | | finally: |
| | | db.close() |
| | |
| | | |
| | | results = query.all() |
| | | formatted_results = [ |
| | | {"id": format_uuid(row[0]), "name": row[1], "description": row[2], "status": str(row[3]) if row[3] ==1 else "2", |
| | | "user_id": str(row[4])} for row in results] |
| | | {"id": row[0], "name": row[1], "description": row[2], "status": "1" if row[3] == "1" else "2", |
| | | "user_id": str(row[4]), "mode": "agent-dialog"} for row in results] |
| | | return formatted_results |
| | | finally: |
| | | db.close() |
| | |
| | | db = SessionDify() |
| | | try: |
| | | if names: |
| | | query = db.query(DfApps.id, DfApps.name, DfApps.description, DfApps.status, DfApps.tenant_id) \ |
| | | query = db.query(DfApps.id, DfApps.name, DfApps.description, DfApps.status, DfApps.tenant_id, DfApps.mode) \ |
| | | .filter( DfApps.name.in_(names)) |
| | | else: |
| | | query = db.query(DfApps.id, DfApps.name, DfApps.description, DfApps.status, DfApps.tenant_id) |
| | | query = db.query(DfApps.id, DfApps.name, DfApps.description, DfApps.status, DfApps.tenant_id, DfApps.mode) |
| | | |
| | | results = query.all() |
| | | formatted_results = [ |
| | | {"id": str(row[0]), "name": row[1], "description": row[2], "status": "1", |
| | | "user_id": str(row[4])} for row in results] |
| | | "user_id": str(row[4]), "mode": row[5]} for row in results] |
| | | return formatted_results |
| | | finally: |
| | | db.close() |
| | |
| | | existing_agent = db.query(DialogModel).filter_by(id=row["id"]).first() |
| | | if existing_agent: |
| | | existing_agent.name = row["name"] |
| | | existing_agent.status = row["status"] |
| | | existing_agent.description = row["description"] |
| | | existing_agent.status = row["status"] |
| | | existing_agent.mode = row["mode"] |
| | | # existing_agent.tenant_id = get_rag_user_id(db, row["user_id"], type_dict[dialog_type]) |
| | | else: |
| | | existing = DialogModel(id=row["id"], status=row["status"], name=row["name"], description=row["description"], tenant_id=get_rag_user_id(db, row["user_id"], type_dict[dialog_type]), dialog_type=dialog_type) |
| | | existing = DialogModel(id=row["id"], status=row["status"], name=row["name"], description=row["description"], tenant_id=get_rag_user_id(db, row["user_id"], type_dict[dialog_type]), dialog_type=dialog_type, mode=row["mode"]) |
| | | db.add(existing) |
| | | db.commit() |
| | | for dialog in db.query(DialogModel).filter_by(dialog_type=dialog_type).all(): |
| | | if dialog.id not in agent_id_list: |
| | | # print(dialog.id) |
| | | db.query(DialogModel).filter_by(id=dialog.id).update({"status": "2"}) |
| | | db.commit() |
| | | except IntegrityError: |
| | |
| | | knowledge_type=1, permission=row["permission"], documents=row["doc_num"]) |
| | | db.add(existing) |
| | | db.commit() |
| | | for dialog in db.query(KnowledgeModel).filter_by(knowledge_type=type_dict[klg_type]).all(): |
| | | for dialog in db.query(KnowledgeModel).filter_by(knowledge_type=klg_type).all(): |
| | | if dialog.id not in agent_id_list: |
| | | db.query(KnowledgeModel).filter_by(id=dialog.id).delete() |
| | | db.commit() |
| | |
| | | "rank": 98, |
| | | "dialog": [ |
| | | { |
| | | "id": "42e4fcdc-9bea-11ef-ac30-0242ac160006", |
| | | "chat_id": "42e4fcdc-9bea-11ef-ac30-0242ac160006", |
| | | "id": "e476db7cbdbb11ef82b50242ac130006", |
| | | "chat_id": "e476db7cbdbb11ef82b50242ac130006", |
| | | "chat_type": "knowledgeQA", |
| | | "agentType": 1 |
| | | } |
| | |
| | | "rank": 97, |
| | | "dialog": [ |
| | | { |
| | | "id": "c684bab4-f05b-423e-8727-f50497e73ebf", |
| | | "chat_id": "c684bab4-f05b-423e-8727-f50497e73ebf", |
| | | "chat_type": "report", |
| | | "agentType": 2 |
| | | "id": "7638f006-38a2-4c21-a68e-c6c49b304a35", |
| | | "chat_id": "7638f006-38a2-4c21-a68e-c6c49b304a35", |
| | | "chat_type": "documentIa", |
| | | "agentType": 4 |
| | | } |
| | | ] |
| | | }, |
| | |
| | | "rank": 96, |
| | | "dialog": [ |
| | | { |
| | | "id": "90d53372-9c02-11ef-bf6b-0242ac160006", |
| | | "chat_id": "90d53372-9c02-11ef-bf6b-0242ac160006", |
| | | "id": "90d533729c0211efbf6b0242ac160006", |
| | | "chat_id": "90d533729c0211efbf6b0242ac160006", |
| | | "chat_type": "chat", |
| | | "agentType": 1 |
| | | } |
| | |
| | | "id": "basic_excel_talk", |
| | | "chat_id": "basic_excel_talk", |
| | | "chat_type": "excelTalk", |
| | | "agentType": 1 |
| | | "agentType": 3 |
| | | } |
| | | ] |
| | | }, |