123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- import sys,os
- current_path = os.getcwd()
- sys.path.append(current_path)
- from config.site import SiteConfig
- from fastapi import APIRouter, Depends, Query
- from db.database import get_db
- from sqlalchemy.orm import Session
- from agent.models.web.response import StandardResponse,FAILED,SUCCESS
- from agent.models.web.request import BasicRequest
- from agent.libs.graph import GraphBusiness
- from agent.libs.auth import verify_session_id, SessionValues
- import logging
- router = APIRouter(prefix="/kb", tags=["knowledge build interface"])
- logger = logging.getLogger(__name__)
- config = SiteConfig()
- LOG_DIR = config.get_config("TASK_LOG_DIR", current_path)
- # job_category = Column(String(64), nullable=False)
- # job_name = Column(String(64))
- # job_details = Column(Text, nullable=False)
- # job_creator = Column(String(64), nullable=False)
- # job_logs = Column(Text, nullable=True)
- # job_files = Column(String(300), nullable=True)
- @router.post('/summary', response_model=StandardResponse)
- def summary_func(request:BasicRequest, db: Session = Depends(get_db), sess:SessionValues = Depends(verify_session_id))->StandardResponse:
- if request.action != "get_summary":
- return StandardResponse(code=FAILED, message="invalid action")
- graph_id = request.get_param("graph_id",0)
- biz = GraphBusiness(db)
- summary = biz.get_graph_summary(graph_id=graph_id)
- if summary:
- logger.info(summary)
- return StandardResponse(code=SUCCESS, message="summary found", records=[summary])
- else:
- return StandardResponse(code=FAILED, message="summary not found",records=[])
- @router.post('/schemas', response_model=StandardResponse)
- def schemas_func(request:BasicRequest, db: Session = Depends(get_db), sess:SessionValues = Depends(verify_session_id))->StandardResponse:
- if request.action== "get_nodes_schemas":
- graph_id = request.get_param("graph_id",0)
- biz = GraphBusiness(db)
- schemas = biz.get_nodes_categories(graph_id=graph_id)
- if schemas:
- return StandardResponse(code=SUCCESS, message="schemas found", records=schemas)
- if request.action== "get_edges_schemas":
- graph_id = request.get_param("graph_id",0)
- biz = GraphBusiness(db)
- schemas = biz.get_edges_categories(graph_id=graph_id)
- if schemas:
- return StandardResponse(code=SUCCESS, message="schemas found", records=schemas)
- return StandardResponse(code=FAILED, message="invalid action")
- @router.post('/nodes', response_model=StandardResponse)
- def nodes_func(request:BasicRequest, db: Session = Depends(get_db), sess:SessionValues = Depends(verify_session_id))->StandardResponse:
- if (request.action == "search_nodes"):
- node_name = request.get_param("name","")
- category = request.get_param("category","")
- graph_id = request.get_param("graph_id",0)
- biz = GraphBusiness(db)
- if node_name == "":
- return StandardResponse(code=FAILED, message="node name is empty", records=[])
- if category == "":
- return StandardResponse(code=FAILED, message="category is empty", records=[])
- if graph_id == 0:
- return StandardResponse(code=FAILED, message="graph id is empty", records=[])
-
- nodes = biz.search_like_node_by_name(graph_id=graph_id, category=category, name=node_name)
- if nodes:
- return StandardResponse(code=SUCCESS, message="nodes found", records=nodes)
-
- else:
- return StandardResponse(code=FAILED, message="search job failed")
- elif (request.action == "get_nodes"):
- graph_id = request.get_param("graph_id",0)
- page = request.get_param("page",1)
- page_size = request.get_param("page_size",1)
- biz = GraphBusiness(db)
- nodes = biz.get_nodes_by_page(graph_id=graph_id, page=page, page_size=page_size)
- if nodes:
- return StandardResponse(code=SUCCESS, message="nodes found", records=nodes)
- elif (request.action == "neighbors"):
- graph_id = request.get_param("graph_id",0)
- node_id = request.get_param("node_id",0)
- if node_id>0:
- biz = GraphBusiness(db)
- node = biz.get_node_by_id(graph_id=graph_id, node_id=node_id)
- if node is None:
- return StandardResponse(code=FAILED, message="node not found", records=[])
- nodes_in = biz.get_neighbors(graph_id=graph_id, node_id=node_id, direction="in")
- nodes_out = biz.get_neighbors(graph_id=graph_id, node_id=node_id, direction="out")
- nodes_all = []
- nodes_all.append({"id": node.id, "name":node.name, "category":node.category, "direction":"self"})
- for node in nodes_in:
- nodes_all.append({"id": node.id, "name":node.name, "category":node.category, "direction":"in"})
- for node in nodes_out:
- nodes_all.append({"id": node.id, "name":node.name, "category":node.category, "direction":"out"})
-
- return StandardResponse(code=SUCCESS, message="nodes found", records=nodes_all)
- return StandardResponse(code=FAILED, message="invalid action")
-
-
-
- kb_router = router
|