zhaoqingang
2024-11-13 e80ffb7f9be04226d2a6ea9566612b06df85e580
参数修改
10个文件已修改
4个文件已添加
208 ■■■■ 已修改文件
app/api/canvas.py 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/api/dialog.py 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/api/knowledge.py 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/api/role.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/api/user.py 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/models/agent_model.py 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/models/dialog_model.py 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/models/group_model.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/models/user_model.py 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/service/canvas.py 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/service/dialog.py 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/service/knowledge.py 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/service/user.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
main.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/api/canvas.py
New file
@@ -0,0 +1,15 @@
# coding:utf-8
from fastapi import APIRouter, Depends
from app.api import Response, get_current_user, ResponseList
from app.models import RoleParameter, GroupModel, KnowledgeModel
from app.models.base_model import get_db
from app.models.user_model import UserModel
from app.service.canvas import get_canvas_list
canvas_router = APIRouter()
@canvas_router.get("/list", response_model=Response)
async def canvas_list(role:str="", current_user: UserModel = Depends(get_current_user),
                          db=Depends(get_db)):
    return Response(code=200, msg="", data = await get_canvas_list(db, role, current_user.id))
app/api/dialog.py
New file
@@ -0,0 +1,15 @@
# coding:utf-8
from fastapi import APIRouter, Depends
from app.api import Response, get_current_user, ResponseList
from app.models import RoleParameter, GroupModel, KnowledgeModel
from app.models.base_model import get_db
from app.models.user_model import UserModel
from app.service.dialog import get_dialog_list
dialog_router = APIRouter()
@dialog_router.get("/list", response_model=Response)
async def dialog_list(role:str="", current_user: UserModel = Depends(get_current_user),
                          db=Depends(get_db)):
    return Response(code=200, msg="", data = await get_dialog_list(db, role, current_user.id))
app/api/knowledge.py
@@ -5,26 +5,11 @@
from app.models import RoleParameter, GroupModel, KnowledgeModel
from app.models.base_model import get_db
from app.models.user_model import UserModel
from app.service.knowledge import get_knowledge_list
knowledge_router = APIRouter()
@knowledge_router.get("/list", response_model=Response)
async def knowledge_list(role:str, current_user: UserModel = Depends(get_current_user),
async def knowledge_list(role:str="", current_user: UserModel = Depends(get_current_user),
                          db=Depends(get_db)):
    if role == "admin":
        kld_list = db.query(KnowledgeModel).all()
    else:
        user = db.query(UserModel).filter(UserModel.id == current_user.id).first()
        group_list = [i.id for i in user.groups]
        kld_list = db.query(KnowledgeModel).filter(KnowledgeModel.tenant_id==current_user.id).all()
        kld_set = set([i.id for i in kld_list])
        for group in db.query(GroupModel).filter(GroupModel.id.in_(group_list)).all():
            for k in group.knowledges:
                if k.id not in kld_set:
                    kld_list.append(k)
                    kld_set.add(k.id)
    data = [kld.to_json() for kld in kld_list]
    return Response(code=200, msg="", data={"rows": data})
    return Response(code=200, msg="", data = await get_knowledge_list(db, role, current_user.id))
app/api/role.py
@@ -11,10 +11,10 @@
role_router = APIRouter()
@role_router.get("/list", response_model=Response)
async def user_group_list(paras: PageParameter, current_user: UserModel = Depends(get_current_user),
async def user_group_list(current, pageSize, keyword="", current_user: UserModel = Depends(get_current_user),
                          db=Depends(get_db)):
    return Response(code=200, msg="", data=await role_list(db, paras.page_size, paras.page_index, paras.keyword, current_user.permission, current_user.id))
    return Response(code=200, msg="", data=await role_list(db, pageSize, current, keyword, current_user.permission, current_user.id))
@role_router.post("/add_role", response_model=Response)
app/api/user.py
@@ -10,8 +10,10 @@
@user_router.get("/list", response_model=Response)
async def user_list(paras: PageParameter,current_user: UserModel = Depends(get_current_user), db=Depends(get_db)):
    return Response(code=200, msg="", data=await get_user_list(db, paras.page_size, paras.page_index, paras.keyword, current_user.permission, current_user.id))
async def user_list(current, pageSize, keyword="", current_user: UserModel = Depends(get_current_user),
                    db=Depends(get_db)):
    return Response(code=200, msg="", data=await get_user_list(db, current, pageSize, keyword,
                                                               current_user.permission, current_user.id))
@user_router.post("/add_user", response_model=Response)
@@ -24,7 +26,8 @@
    pwd = user.pwd
    if not pwd:
        pwd = "000000"
    is_create = await create_user(db, user.userName, user.email, user.phone, user.loginName, pwd, user.roles, user.groups,current_user.id)
    is_create = await create_user(db, user.userName, user.email, user.phone, user.loginName, pwd, user.roles,
                                  user.groups, current_user.id)
    if not is_create:
        return Response(code=500, msg="user create failure", data={})
    return Response(code=200, msg="user create successfully", data={})
@@ -53,7 +56,7 @@
    db_user = db.query(UserModel).filter(UserModel.id == user.userId).first()
    if not db_user:
        return Response(code=200, msg="user does not exist")
    is_edit = await edit_user_status(db, user.status,user.userId)
    is_edit = await edit_user_status(db, user.status, user.userId)
    if not is_edit:
        return Response(code=500, msg="user status edit failure", data={})
    return Response(code=200, msg="user status edit successfully", data={})
@@ -78,4 +81,4 @@
    is_edit = await edit_user_pwd(db, user.userId)
    if not is_edit:
        return Response(code=500, msg="user pwd reset failure", data={})
    return Response(code=200, msg="user pwd reset successfully", data={})
    return Response(code=200, msg="user pwd reset successfully", data={})
app/models/agent_model.py
@@ -30,7 +30,7 @@
class CanvasModel(Base):
    __tablename__ = 'user_canvas'
    __tablename__ = 'canvas'
    id = Column(String(32), primary_key=True)      # id
    create_date = Column(DateTime, default=datetime.now)
@@ -51,9 +51,7 @@
    def to_json(self):
        return {
            'id': self.id,
            'create_time': self.create_time,
            'create_date': self.create_date,
            'update_time': self.update_time,
            'update_date': self.update_date,
            'avatar': self.avatar,
            'user_id': self.user_id,
app/models/dialog_model.py
@@ -18,7 +18,7 @@
    description = Column(Text)                 # 说明
    icon = Column(Text)                         # 图标
    status = Column(String(1))                 # 状态
    dialog_type = Column(String(1))            #    # 平台
    # dialog_type = Column(String(1))            #    # 平台
    def get_id(self):
        return str(self.id)
@@ -26,23 +26,11 @@
    def to_json(self):
        return {
            'id': self.id,
            'create_time': self.create_time,
            'create_date': self.create_date,
            'update_time': self.update_time,
            'update_date': self.update_date,
            'tenant_id': self.tenant_id,
            'name': self.name,
            'description': self.description,
            'icon': self.icon,
            'language': self.language,
            'llm_id': self.llm_id,
            'prompt_type': self.prompt_type,
            'prompt_config': self.prompt_config,
            'similarity_threshold': self.similarity_threshold,
            'vector_similarity_weight': self.vector_similarity_weight,
            'top_n': self.top_n,
            'top_k': self.top_k,
            'do_refer': self.do_refer,
            'kb_ids': self.kb_ids,
            'status': self.status
        }
app/models/group_model.py
@@ -19,7 +19,7 @@
group_agent_table = Table('group_agent', Base.metadata
                           , Column('group_id', Integer, ForeignKey('group.id', ondelete='CASCADE'))
                           , Column('agent_id', String(36), ForeignKey('user_canvas.id', ondelete='CASCADE')))
                           , Column('agent_id', String(36), ForeignKey('canvas.id', ondelete='CASCADE')))
group_llm_table = Table('group_llm', Base.metadata
                           , Column('group_id', Integer, ForeignKey('group.id', ondelete='CASCADE'))
app/models/user_model.py
@@ -112,6 +112,53 @@
        json['roles'] = roles
        return json
    def to_login_json(self):
        json = {
            'userId': self.id,
            'createTime': self.created_at.strftime('%Y-%m-%d %H:%M:%S') if self.created_at else "",
            'updateTime': self.updated_at.strftime('%Y-%m-%d %H:%M:%S') if self.created_at else "",
            'userName': self.username,
            'loginName': self.login_name,
            'sex': self.sex,
            'age': self.age,
            "status": self.status,
            'phone': self.phone,
            'email': self.email,
            # 'phoneNumber': self.phone_number
        }
        parent_dict = {}
        resources = []
        for role in self.roles:
            for r in  role.to_json().get("resources", []):
                if not r["parentId"]:
                    resources.append(r)
                    continue
                if r["parentId"] in parent_dict:
                    parent_dict[r["parentId"]].append(r)
                else:
                    parent_dict[r["parentId"]] = [r]
        # roles = [role.to_json() for role in self.roles]
        organization_roles = [role.to_json() for organization in self.organizations for role in
                              organization.roles]
        for role in organization_roles:
            for r in role.to_json().get("resources", []):
                if not r["parentId"]:
                    resources.append(r)
                    continue
                if r["parentId"] in parent_dict:
                    parent_dict[r["parentId"]].append(r)
                else:
                    parent_dict[r["parentId"]] = [r]
        # for resource in resources:
        #     if resource["menuId"] in parent_dict:
        #         resource[]
        json['resources'] = resources
        return json
    def get_children(self):
        """递归获取指定用户的子用户ID列表"""
app/service/canvas.py
New file
@@ -0,0 +1,22 @@
from app.models import KnowledgeModel, GroupModel, CanvasModel
from app.models.user_model import UserModel
from Log import logger
async def get_canvas_list(db, role, user_id):
    if role == "admin":
        canvas_list = db.query(CanvasModel).all()
    else:
        user = db.query(UserModel).filter(UserModel.id == user_id).first()
        group_list = [i.id for i in user.groups]
        canvas_list = db.query(CanvasModel).filter(CanvasModel.user_id == user_id).all()
        kld_set = set([i.id for i in canvas_list])
        for group in db.query(GroupModel).filter(GroupModel.id.in_(group_list)).all():
            for k in group.agents:
                if k.id not in kld_set:
                    canvas_list.append(k)
                    kld_set.add(k.id)
    return {"rows": [kld.to_json() for kld in canvas_list]}
app/service/dialog.py
New file
@@ -0,0 +1,22 @@
from app.models import KnowledgeModel, GroupModel, DialogModel
from app.models.user_model import UserModel
from Log import logger
async def get_dialog_list(db, role, user_id):
    if role == "admin":
        dialog_list = db.query(DialogModel).all()
    else:
        user = db.query(UserModel).filter(UserModel.id == user_id).first()
        group_list = [i.id for i in user.groups]
        dialog_list = db.query(DialogModel).filter(DialogModel.tenant_id == user_id).all()
        kld_set = set([i.id for i in dialog_list])
        for group in db.query(GroupModel).filter(GroupModel.id.in_(group_list)).all():
            for k in group.dialogs:
                if k.id not in kld_set:
                    dialog_list.append(k)
                    kld_set.add(k.id)
    return {"rows": [kld.to_json() for kld in dialog_list]}
app/service/knowledge.py
@@ -0,0 +1,23 @@
from app.models import KnowledgeModel, GroupModel
from app.models.user_model import UserModel
from Log import logger
async def get_knowledge_list(db, role, user_id):
    if role == "admin":
        kld_list = db.query(KnowledgeModel).all()
    else:
        user = db.query(UserModel).filter(UserModel.id == user_id).first()
        group_list = [i.id for i in user.groups]
        kld_list = db.query(KnowledgeModel).filter(KnowledgeModel.tenant_id == user_id).all()
        kld_set = set([i.id for i in kld_list])
        for group in db.query(GroupModel).filter(GroupModel.id.in_(group_list)).all():
            for k in group.knowledges:
                if k.id not in kld_set:
                    kld_list.append(k)
                    kld_set.add(k.id)
    return {"rows": [kld.to_json() for kld in kld_list]}
app/service/user.py
@@ -9,7 +9,7 @@
from app.service.ragflow import RagflowService
async def get_user_list(db, page_size: int, page_index: int, keyword: str, role_key:str, user_id):
async def get_user_list(db, page_index: int, page_size: int, keyword: str, role_key:str, user_id):
    query = db.query(UserModel)
    if role_key != "admin":
        query.filter(UserModel.creator==user_id)
main.py
@@ -1,8 +1,10 @@
from contextlib import asynccontextmanager
from fastapi import FastAPI
from app.api.auth import router as auth_router
from app.api.canvas import canvas_router
from app.api.chat import router as chat_router
from app.api.agent import router as agent_router
from app.api.dialog import dialog_router
from app.api.excel import router as excel_router
from app.api.files import router as files_router
from app.api.knowledge import knowledge_router
@@ -48,6 +50,8 @@
app.include_router(dept_router, prefix='/api/dept', tags=["dept"])
app.include_router(menu_router, prefix='/api/menu', tags=["menu"])
app.include_router(knowledge_router, prefix='/api/knowledge', tags=["knowledge"])
app.include_router(dialog_router, prefix='/api/dialog', tags=["dialog"])
app.include_router(canvas_router, prefix='/api/canvas', tags=["canvas"])
if __name__ == "__main__":
    import uvicorn