feat: 添加强制停止MAI Bot的API接口(半成品),优化嵌入数据目录路径处理

This commit is contained in:
墨梓柒
2025-05-07 00:21:04 +08:00
parent ca55d646e1
commit 1e2cdeeea5
5 changed files with 49 additions and 9 deletions

View File

@@ -1,5 +1,7 @@
from src.heart_flow.heartflow import heartflow
from src.heart_flow.sub_heartflow import ChatState
from src.common.logger_manager import get_logger
logger = get_logger("api")
async def get_all_subheartflow_ids() -> list:

View File

@@ -1,12 +1,15 @@
from fastapi import APIRouter
from strawberry.fastapi import GraphQLRouter
import os
import sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")))
# from src.config.config import BotConfig
from src.common.logger_manager import get_logger
from src.api.reload_config import reload_config as reload_config_func
from src.common.server import global_server
from .apiforgui import get_all_subheartflow_ids, forced_change_subheartflow_status
from src.api.apiforgui import get_all_subheartflow_ids, forced_change_subheartflow_status
from src.heart_flow.sub_heartflow import ChatState
# import uvicorn
# import os
@@ -50,6 +53,17 @@ async def forced_change_subheartflow_status_api(subheartflow_id: str, status: Ch
logger.error(f"子心流 {subheartflow_id} 状态更改为 {status.value} 失败")
return {"status": "failed"}
@router.get("/stop")
async def force_stop_maibot():
"""强制停止MAI Bot"""
from bot import request_shutdown
success = await request_shutdown()
if success:
logger.info("MAI Bot已强制停止")
return {"status": "success"}
else:
logger.error("MAI Bot强制停止失败")
return {"status": "failed"}
def start_api_server():
"""启动API服务器"""

View File

@@ -28,6 +28,8 @@ from rich.progress import (
install(extra_lines=3)
ROOT_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "..", ".."))
EMBEDDING_DATA_DIR = os.path.join(ROOT_PATH, "data", "embedding") if global_config["persistence"]["embedding_data_dir"] is None else os.path.join(ROOT_PATH, global_config["persistence"]["embedding_data_dir"])
EMBEDDING_DATA_DIR_STR = str(EMBEDDING_DATA_DIR).replace("\\", "/")
TOTAL_EMBEDDING_TIMES = 3 # 统计嵌入次数
# 嵌入模型测试字符串,测试模型一致性,来自开发群的聊天记录
@@ -288,17 +290,17 @@ class EmbeddingManager:
self.paragraphs_embedding_store = EmbeddingStore(
llm_client,
PG_NAMESPACE,
global_config["persistence"]["embedding_data_dir"],
EMBEDDING_DATA_DIR_STR,
)
self.entities_embedding_store = EmbeddingStore(
llm_client,
ENT_NAMESPACE,
global_config["persistence"]["embedding_data_dir"],
EMBEDDING_DATA_DIR_STR,
)
self.relation_embedding_store = EmbeddingStore(
llm_client,
REL_NAMESPACE,
global_config["persistence"]["embedding_data_dir"],
EMBEDDING_DATA_DIR_STR,
)
self.stored_pg_hashes = set()

View File

@@ -30,8 +30,9 @@ from .lpmmconfig import (
)
from .global_logger import logger
ROOT_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "..", ".."))
KG_DIR = os.path.join(ROOT_PATH, "data/rag") if global_config["persistence"]["rag_data_dir"] is None else os.path.join(ROOT_PATH, global_config["persistence"]["rag_data_dir"])
KG_DIR_STR = str(KG_DIR).replace("\\", "/")
class KGManager:
def __init__(self):
# 会被保存的字段
@@ -43,7 +44,7 @@ class KGManager:
self.graph = di_graph.DiGraph()
# 持久化相关
self.dir_path = global_config["persistence"]["rag_data_dir"]
self.dir_path = KG_DIR_STR
self.graph_data_path = self.dir_path + "/" + RAG_GRAPH_NAMESPACE + ".graphml"
self.ent_cnt_data_path = self.dir_path + "/" + RAG_ENT_CNT_NAMESPACE + ".parquet"
self.pg_hash_file_path = self.dir_path + "/" + RAG_PG_HASH_NAMESPACE + ".json"