chore: 迁移服务器前同步本地修改
This commit is contained in:
@@ -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("系统已退出。")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user