From 9191081e44363e4227ea3230edd6fb7619ccb294 Mon Sep 17 00:00:00 2001 From: zhaoqingang <zhaoqg0118@163.com> Date: 星期四, 26 十二月 2024 13:51:32 +0800 Subject: [PATCH] Merge branch 'master' of http://192.168.5.5:10010/r/rag-gateway --- app/task/fetch_agent.py | 118 +++++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 91 insertions(+), 27 deletions(-) diff --git a/app/task/fetch_agent.py b/app/task/fetch_agent.py index 8507bee..da17b10 100644 --- a/app/task/fetch_agent.py +++ b/app/task/fetch_agent.py @@ -1,17 +1,20 @@ +import json +import os from pickle import PROTO from typing import Dict, List, Tuple from sqlalchemy import create_engine, Column, String, Integer, Text from sqlalchemy.exc import IntegrityError -from sqlalchemy.orm import sessionmaker +from sqlalchemy.orm import sessionmaker, Session from app.config.config import settings -from app.config.const import RAGFLOW, BISHENG, DIFY +from app.config.const import RAGFLOW, BISHENG, DIFY, ENV_CONF_PATH from app.models import KnowledgeModel from app.models.dialog_model import DialogModel from app.models.user_model import UserAppModel from app.models.agent_model import AgentModel from app.models.base_model import SessionLocal, Base +from app.models.resource_model import ResourceModel from app.service.v2.app_register import AppRegisterDao # 鍒涘缓鏁版嵁搴撳紩鎿庡拰浼氳瘽宸ュ巶 @@ -207,9 +210,9 @@ finally: db.close() -def get_rag_user_id(db, tenant_id, app_type): - user = db.query(UserAppModel).filter(UserAppModel.app_type==app_type, UserAppModel.app_id==tenant_id).first() +def get_rag_user_id(db, tenant_id, app_type): + user = db.query(UserAppModel).filter(UserAppModel.app_type == app_type, UserAppModel.app_id == tenant_id).first() if user: return user.user_id return tenant_id @@ -220,30 +223,34 @@ try: if names: query = db.query(Flow.id, Flow.name, Flow.description, Flow.status, Flow.user_id) \ - .filter(Flow.name.in_(names), Flow.status=="1") + .filter(Flow.name.in_(names), Flow.status == "1") else: - query = db.query(Flow.id, Flow.name, Flow.description, Flow.status, Flow.user_id).filter(Flow.status=="1") + 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}") # 鏍煎紡鍖杋d涓篣UID - 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] + 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() + def get_data_from_ragflow_v2(names: List[str]) -> List[Dict]: db = SessionRagflow() try: if names: query = db.query(Dialog.id, Dialog.name, Dialog.description, Dialog.status, Dialog.tenant_id) \ - .filter( Dialog.name.in_(names), Dialog.status == "1") + .filter(Dialog.name.in_(names), Dialog.status == "1") else: - query = db.query(Dialog.id, Dialog.name, Dialog.description, Dialog.status, Dialog.tenant_id).filter( Dialog.status == "1") + query = db.query(Dialog.id, Dialog.name, Dialog.description, Dialog.status, Dialog.tenant_id).filter( + Dialog.status == "1") results = query.all() formatted_results = [ - {"id": row[0], "name": row[1], "description": row[2], "status": "1" if row[3] == "1" else "2", + {"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: @@ -255,7 +262,7 @@ try: if names: query = db.query(DfApps.id, DfApps.name, DfApps.description, DfApps.status, DfApps.tenant_id, DfApps.mode) \ - .filter( DfApps.name.in_(names)) + .filter(DfApps.name.in_(names)) else: query = db.query(DfApps.id, DfApps.name, DfApps.description, DfApps.status, DfApps.tenant_id, DfApps.mode) @@ -268,11 +275,10 @@ db.close() - -def update_ids_in_local_v2(data: List[Dict], dialog_type:str): +def update_ids_in_local_v2(data: List[Dict], dialog_type: str): db = SessionLocal() agent_id_list = [] - type_dict = {"1": RAGFLOW,"2": BISHENG,"4": DIFY} + type_dict = {"1": RAGFLOW, "2": BISHENG, "4": DIFY} try: for row in data: agent_id_list.append(row["id"]) @@ -284,7 +290,10 @@ 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, mode=row["mode"]) + 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(): @@ -299,18 +308,19 @@ db.close() - def get_data_from_ragflow_knowledge(): db = SessionRagflow() try: - results = db.query(RgKnowledge.id, RgKnowledge.name, RgKnowledge.description, RgKnowledge.status, RgKnowledge.tenant_id, RgKnowledge.doc_num, RgKnowledge.permission).all() + results = db.query(RgKnowledge.id, RgKnowledge.name, RgKnowledge.description, RgKnowledge.status, + RgKnowledge.tenant_id, RgKnowledge.doc_num, RgKnowledge.permission).all() formatted_results = [ {"id": row[0], "name": row[1], "description": row[2], "status": str(row[3]), "user_id": str(row[4]), "doc_num": row[5], "permission": row[6]} for row in results] return formatted_results finally: db.close() + def sync_agents_v2(): db = SessionLocal() @@ -336,6 +346,7 @@ finally: db.close() + def update_ids_in_local_knowledge(data, klg_type): type_dict = {"1": RAGFLOW, "2": BISHENG, "4": DIFY} db = SessionLocal() @@ -348,13 +359,14 @@ existing_agent.name = row["name"] existing_agent.description = row["description"] # existing_agent.tenant_id = get_rag_user_id(db, row["user_id"], type_dict[klg_type]) - existing_agent.permission = row["permission"] - existing_agent.documents = row["doc_num"] - existing_agent.status = row["status"] + existing_agent.permission = row["permission"] + existing_agent.documents = row["doc_num"] + existing_agent.status = row["status"] else: existing = KnowledgeModel(id=row["id"], name=row["name"], description=row["description"], - tenant_id=get_rag_user_id(db, row["user_id"], type_dict[klg_type]),status=row["status"], - knowledge_type=1, permission=row["permission"], documents=row["doc_num"]) + tenant_id=get_rag_user_id(db, row["user_id"], type_dict[klg_type]), + status=row["status"], + 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=klg_type).all(): @@ -367,13 +379,16 @@ finally: db.close() + def get_one_from_ragflow_knowledge(klg_id): db = SessionRagflow() try: - row = db.query(RgKnowledge.id, RgKnowledge.name, RgKnowledge.description, RgKnowledge.status, RgKnowledge.tenant_id, RgKnowledge.doc_num, RgKnowledge.permission).filter(RgKnowledge.id==klg_id).first() + row = db.query(RgKnowledge.id, RgKnowledge.name, RgKnowledge.description, RgKnowledge.status, + RgKnowledge.tenant_id, RgKnowledge.doc_num, RgKnowledge.permission).filter( + RgKnowledge.id == klg_id).first() return {"id": row[0], "name": row[1], "description": row[2], "status": str(row[3]), - "user_id": str(row[4]), "doc_num": row[5], "permission": row[6]} if row else {} + "user_id": str(row[4]), "doc_num": row[5], "permission": row[6]} if row else {} finally: db.close() @@ -405,15 +420,64 @@ db = SessionRagflow() try: if user_id: - db.query(RgUserTenant).filter( RgUserTenant.user_id==user_id, RgUserTenant.role=="invite").update({"role": "normal"}) - db.query(RgUserTenant).filter( RgUserTenant.tenant_id==user_id, RgUserTenant.role=="invite").update({"role": "normal"}) + db.query(RgUserTenant).filter(RgUserTenant.user_id == user_id, RgUserTenant.role == "invite").update( + {"role": "normal"}) + db.query(RgUserTenant).filter(RgUserTenant.tenant_id == user_id, RgUserTenant.role == "invite").update( + {"role": "normal"}) else: - db.query(RgUserTenant).filter(RgUserTenant.role=="invite").update({"role": "normal"}) + db.query(RgUserTenant).filter(RgUserTenant.role == "invite").update({"role": "normal"}) db.commit() finally: db.close() +def import_tree(session: Session, node: dict, parent=None): + resource = ResourceModel( + id=node['id'], + name=node['name'], + url=node['url'], + path=node.get('path'), + perms=node['perms'], + description=node.get('description'), + icon=node.get('icon'), + seq=node['seq'], + target=node.get('target'), + canbdeeleted=node.get('canbdeeleted'), + resource_type_id=node['resource_type_id'], + resource_id=node.get('resource_id'), + status=node['status'], + hidden=node.get('hidden') + ) + if parent: + resource.parent = parent + session.add(resource) + if 'children' in node: + for child in node['children']: + import_tree(session, child, parent=resource) + session.commit() + + +def sync_resources_from_json(): + db = SessionLocal() + try: + if db.query(ResourceModel).count() == 0: + with open(os.path.join(ENV_CONF_PATH, "resource.json"), 'r', encoding='utf-8') as file: + json_data = json.load(file) + + db.query(ResourceModel).delete() + db.commit() + + for node in json_data: + import_tree(db, node) + print("add resources record successfully") + else: + print("sync resources successfully") + except Exception as e: + print(f"Failed to sync resources: {str(e)}") + finally: + db.close() + + if __name__ == "__main__": # a = get_data_from_dify_v2([]) # print(a) -- Gitblit v1.8.0