feat(system):优化后端
1.新增后端测试 2.增加了后端的加密 3.增加了i18n(国际化)
This commit is contained in:
@@ -38,6 +38,9 @@ from kilostar.core.postgres_database.model.chat_history import (
|
||||
ChatHistoryMessage,
|
||||
)
|
||||
from kilostar.core.postgres_database.model.system_node import SystemNodeConfigModel
|
||||
from kilostar.core.postgres_database.model.mcp_server import MCPServerModel
|
||||
from kilostar.core.postgres_database.model.tool_config import ToolConfigModel
|
||||
from kilostar.core.postgres_database.model.custom_toolset import CustomToolsetModel
|
||||
|
||||
from .module.individual import IndividualDatabase
|
||||
from .module.user import AuthDatabase
|
||||
@@ -45,6 +48,9 @@ from .module.provider import ProviderDatabase
|
||||
from .module.system_node import SystemNodeDatabase
|
||||
from .module.workflow import WorkflowDatabase
|
||||
from .module.chat_history import ChatHistoryDatabase
|
||||
from .module.mcp_server import MCPServerDatabase
|
||||
from .module.tool_config import ToolConfigDatabase
|
||||
from .module.custom_toolset import CustomToolsetDatabase
|
||||
|
||||
|
||||
@ray.remote
|
||||
@@ -76,6 +82,9 @@ class PostgresDatabase:
|
||||
self._system_node_database = SystemNodeDatabase(self.async_session_maker)
|
||||
self._workflow_database = WorkflowDatabase(self.async_session_maker)
|
||||
self._chat_history_database = ChatHistoryDatabase(self.async_session_maker)
|
||||
self._mcp_server_database = MCPServerDatabase(self.async_session_maker)
|
||||
self._tool_config_database = ToolConfigDatabase(self.async_session_maker)
|
||||
self._custom_toolset_database = CustomToolsetDatabase(self.async_session_maker)
|
||||
|
||||
self.ready_event = asyncio.Event()
|
||||
|
||||
@@ -91,6 +100,15 @@ class PostgresDatabase:
|
||||
finally:
|
||||
self.ready_event.set()
|
||||
|
||||
async def ping(self) -> bool:
|
||||
"""轻量探活:等待 ready 后执行 ``SELECT 1``。"""
|
||||
from sqlalchemy import text
|
||||
|
||||
await self.ready_event.wait()
|
||||
async with self.async_engine.connect() as conn:
|
||||
await conn.execute(text("SELECT 1"))
|
||||
return True
|
||||
|
||||
# Auth Database Methods
|
||||
async def add_user(self, user_name: str, hashed_password: str):
|
||||
"""新建一名用户。"""
|
||||
@@ -242,6 +260,24 @@ class PostgresDatabase:
|
||||
await self.ready_event.wait()
|
||||
return await self._workflow_database.get_workflow_context(trace_id)
|
||||
|
||||
# Workflow Graph State (pydantic_graph 持久化)
|
||||
async def upsert_workflow_graph_state(self, trace_id: str, history: list):
|
||||
"""覆盖式写入 graph 持久化 history(pydantic_graph 节点边界自动调用)。"""
|
||||
await self.ready_event.wait()
|
||||
return await self._workflow_database.upsert_workflow_graph_state(
|
||||
trace_id, history
|
||||
)
|
||||
|
||||
async def get_workflow_graph_state(self, trace_id: str):
|
||||
"""读取 graph 持久化记录,用于跨进程 resume。"""
|
||||
await self.ready_event.wait()
|
||||
return await self._workflow_database.get_workflow_graph_state(trace_id)
|
||||
|
||||
async def delete_workflow_graph_state(self, trace_id: str):
|
||||
"""显式清理 graph 持久化记录(已完成/失败的 workflow 释放空间)。"""
|
||||
await self.ready_event.wait()
|
||||
return await self._workflow_database.delete_workflow_graph_state(trace_id)
|
||||
|
||||
# Chat History Database Methods
|
||||
async def create_chat_session(self, user_id: str, title: str = "新对话"):
|
||||
"""新建一个聊天会话。"""
|
||||
@@ -264,3 +300,79 @@ class PostgresDatabase:
|
||||
"""返回某个聊天会话的全部消息。"""
|
||||
await self.ready_event.wait()
|
||||
return await self._chat_history_database.list_chat_messages(chat_id)
|
||||
|
||||
# MCP Server Database Methods
|
||||
async def upsert_mcp_server(self, server_id: str, config: dict):
|
||||
"""插入或更新一条 MCP 服务器配置;env 中敏感字段自动加密。"""
|
||||
await self.ready_event.wait()
|
||||
return await self._mcp_server_database.upsert(server_id, config)
|
||||
|
||||
async def get_mcp_server_db(self, server_id: str):
|
||||
"""读取单条 MCP 服务器配置;env 自动解密。"""
|
||||
await self.ready_event.wait()
|
||||
return await self._mcp_server_database.get(server_id)
|
||||
|
||||
async def list_mcp_servers_db(self):
|
||||
"""读取全部 MCP 服务器配置。"""
|
||||
await self.ready_event.wait()
|
||||
return await self._mcp_server_database.list_all()
|
||||
|
||||
async def delete_mcp_server_db(self, server_id: str):
|
||||
"""删除某条 MCP 服务器配置。"""
|
||||
await self.ready_event.wait()
|
||||
return await self._mcp_server_database.delete(server_id)
|
||||
|
||||
# Tool Config Database Methods
|
||||
async def upsert_tool_config(self, tool_name: str, config: dict):
|
||||
"""插入或更新某工具的运行期配置;敏感字段自动加密。"""
|
||||
await self.ready_event.wait()
|
||||
return await self._tool_config_database.upsert(tool_name, config)
|
||||
|
||||
async def get_tool_config_db(self, tool_name: str):
|
||||
"""读取某工具的运行期配置;敏感字段自动解密。"""
|
||||
await self.ready_event.wait()
|
||||
return await self._tool_config_database.get(tool_name)
|
||||
|
||||
async def list_tool_configs_db(self):
|
||||
"""读取全部工具的运行期配置。"""
|
||||
await self.ready_event.wait()
|
||||
return await self._tool_config_database.list_all()
|
||||
|
||||
async def delete_tool_config_db(self, tool_name: str):
|
||||
"""删除某工具的运行期配置。"""
|
||||
await self.ready_event.wait()
|
||||
return await self._tool_config_database.delete(tool_name)
|
||||
|
||||
# Custom Toolset Database Methods
|
||||
async def upsert_custom_toolset(
|
||||
self,
|
||||
toolset_id: str,
|
||||
name: str,
|
||||
tools: list,
|
||||
description: str = None,
|
||||
owner_id: str = None,
|
||||
):
|
||||
"""插入或更新一个用户自定义工具组。"""
|
||||
await self.ready_event.wait()
|
||||
return await self._custom_toolset_database.upsert(
|
||||
toolset_id=toolset_id,
|
||||
name=name,
|
||||
tools=tools,
|
||||
description=description,
|
||||
owner_id=owner_id,
|
||||
)
|
||||
|
||||
async def get_custom_toolset(self, toolset_id: str):
|
||||
"""按 ID 读取一个自定义工具组。"""
|
||||
await self.ready_event.wait()
|
||||
return await self._custom_toolset_database.get(toolset_id)
|
||||
|
||||
async def list_custom_toolsets(self):
|
||||
"""读取全部自定义工具组。"""
|
||||
await self.ready_event.wait()
|
||||
return await self._custom_toolset_database.list_all()
|
||||
|
||||
async def delete_custom_toolset(self, toolset_id: str):
|
||||
"""删除一个自定义工具组。"""
|
||||
await self.ready_event.wait()
|
||||
return await self._custom_toolset_database.delete(toolset_id)
|
||||
|
||||
Reference in New Issue
Block a user