chore: 迁移服务器前同步本地修改

This commit is contained in:
2026-08-05 21:26:13 +08:00
parent aa47a19e98
commit 1a914a2517
73 changed files with 908 additions and 1961 deletions
+17 -122
View File
@@ -32,8 +32,6 @@ except Exception as e:
import asyncio
KILOSTAR_MODE = os.environ.get("KILOSTAR_MODE", "distributed")
from kilostar.worker_cluster import WorkerCluster
from kilostar.utils.banner import print_banner
from kilostar.core.postgres_database import PostgresDatabase
@@ -43,155 +41,52 @@ from kilostar.core.individual.regulatory_node import RegulatoryNode
from kilostar.core.individual.consciousness_node import ConsciousnessNode
from kilostar.plugin_runtime.plugin_manager import GlobalPluginManager
if KILOSTAR_MODE != "standalone":
import ray
from ray import serve
from kilostar.api import KiloStarGateway
async def start() -> None:
"""启动 KiloStar:单进程 asyncio 单体。
async def start_standalone():
"""单机模式:纯 asyncio,不依赖 Ray。"""
所有核心组件在本进程内实例化,经 ``register_actor`` 登记到进程内 actor 运行时;
业务代码统一通过 ``get_actor(name)`` 拿句柄调用(位置透明,未来可换远程后端)。
"""
import uvicorn
from kilostar.utils.ray_hook import register_standalone
from kilostar.utils.actor import register_actor, get_actor
from kilostar.api import app
postgres_database = PostgresDatabase()
await postgres_database.init_db()
register_standalone("postgres_database", postgres_database)
register_actor("postgres_database", postgres_database)
from kilostar.utils.ray_compat import StandaloneProxy
postgres_proxy = StandaloneProxy(postgres_database)
global_state_machine = GlobalStateMachine(postgres_proxy)
# GSM 通过 actor 句柄依赖 postgres:保持"依赖对端不关心其位置"的一致语义
global_state_machine = GlobalStateMachine(get_actor("postgres_database"))
await global_state_machine.init_state_machine()
register_standalone("global_state_machine", global_state_machine)
register_actor("global_state_machine", global_state_machine)
global_workflow_manager = GlobalWorkflowManager()
await global_workflow_manager.init_manager()
register_standalone("global_workflow_manager", global_workflow_manager)
register_actor("global_workflow_manager", global_workflow_manager)
regulatory_node = RegulatoryNode()
register_standalone("regulatory_node", regulatory_node)
consciousness_node = ConsciousnessNode()
register_standalone("consciousness_node", consciousness_node)
register_actor("regulatory_node", RegulatoryNode())
register_actor("consciousness_node", ConsciousnessNode())
worker_cluster = WorkerCluster(node_type="cpu")
await worker_cluster.start()
register_standalone("worker_cluster", worker_cluster)
# 单机模式三个标签共用同一实例
register_standalone("worker_cluster_cpu", worker_cluster)
register_standalone("worker_cluster_core", worker_cluster)
register_standalone("worker_cluster_gpu", worker_cluster)
register_actor("worker_cluster", worker_cluster)
plugin_manager = GlobalPluginManager()
await plugin_manager.bootstrap()
register_standalone("global_plugin_manager", plugin_manager)
register_actor("global_plugin_manager", plugin_manager)
print(f"✅ KiloStar 单机模式启动完成,监听 0.0.0.0:8000")
print("✅ KiloStar 启动完成,监听 0.0.0.0:8000")
config = uvicorn.Config(app, host="0.0.0.0", port=8000, log_level="info")
server = uvicorn.Server(config)
await server.serve()
async def start_distributed():
"""分布式模式:使用 Ray Actor + Ray Serve。"""
env_vars = {
"POSTGRES_USER": os.getenv("POSTGRES_USER", "postgres"),
"POSTGRES_PASSWORD": os.getenv("POSTGRES_PASSWORD", ""),
"POSTGRES_HOST": os.getenv("POSTGRES_HOST", "db"),
"POSTGRES_PORT": os.getenv("POSTGRES_PORT", "5432"),
"POSTGRES_DB": os.getenv("POSTGRES_DB", "postgres"),
"SECRET_KEY": os.getenv("SECRET_KEY"),
}
ray.init(
ignore_reinit_error=True,
namespace="kilostar",
dashboard_host="0.0.0.0",
dashboard_port=8265,
runtime_env={"env_vars": env_vars},
resources={
"kilostar_node_cpu": 1,
"kilostar_node_core": 1,
"kilostar_node_gpu": 1,
},
)
postgres_database = PostgresDatabase.options(
name="postgres_database"
).remote()
await postgres_database.init_db.remote()
global_state_machine = GlobalStateMachine.options(
name="global_state_machine", namespace="kilostar", lifetime="detached"
).remote(postgres_database)
print("正在等待 GlobalStateMachine 初始化并加载注册表...")
try:
await global_state_machine.init_state_machine.remote()
print("GlobalStateMachine 初始化成功!")
except Exception as e:
print(f"\n[致命错误] GlobalStateMachine 启动失败!\n{e}\n")
return
global_workflow_manager = GlobalWorkflowManager.options(
name="global_workflow_manager", namespace="kilostar", lifetime="detached"
).remote()
RegulatoryNode.options(name="regulatory_node").remote()
ConsciousnessNode.options(name="consciousness_node").remote()
try:
for node_type in ("cpu", "core", "gpu"):
actor_name = f"worker_cluster_{node_type}"
resource_key = f"kilostar_node_{node_type}"
try:
WorkerCluster.options(
name=actor_name,
lifetime="detached",
resources={resource_key: 1},
).remote(node_type=node_type)
print(f"✅ WorkerCluster[{node_type}] 已成功启动并注册!")
except ValueError:
print(f"WorkerCluster[{node_type}] 已经存在。")
except Exception as e:
print(f"WorkerCluster 启动失败: {e}")
print("正在等待 GlobalWorkflowManager 初始化与恢复工作流...")
try:
await global_workflow_manager.init_manager.remote()
print("GlobalWorkflowManager 初始化成功!")
except Exception as e:
print(f"\n[致命错误] GlobalWorkflowManager 启动失败!\n{e}\n")
return
plugin_manager = GlobalPluginManager.options(
name="global_plugin_manager", namespace="kilostar", lifetime="detached"
).remote()
try:
await plugin_manager.bootstrap.remote()
print("✅ GlobalPluginManager 初始化成功!")
except Exception as e:
print(f"⚠️ GlobalPluginManager 启动失败(非致命): {e}")
serve.start(http_options={"host": "0.0.0.0", "port": 8000})
serve.run(KiloStarGateway.bind())
while True:
await asyncio.sleep(3600)
def main():
print_banner()
mode = KILOSTAR_MODE
print(f"启动模式: {mode}")
try:
if mode == "standalone":
asyncio.run(start_standalone())
else:
asyncio.run(start_distributed())
asyncio.run(start())
except KeyboardInterrupt:
print("系统已退出。")