// Command dispatcher 启动 sundynix-dispatcher —— 第 4 层 AI Agent 调度集群。 package main import ( "context" "log" "os" "os/signal" "syscall" "github.com/sundynix/sundynix-dispatcher/internal/eino" "github.com/sundynix/sundynix-dispatcher/internal/harness" "github.com/sundynix/sundynix-dispatcher/internal/llm" dnats "github.com/sundynix/sundynix-dispatcher/internal/nats" ) func main() { natsURL := envOr("NATS_URL", "nats://localhost:4222") pool := llm.NewPool() // LLM Pool: vLLM / Ollama 集群 breaker := harness.NewCircuitBreaker() // Harness: 熔断降级中心 sub := dnats.MustConnect(natsURL) defer sub.Close() // sub 同时作为 Token 回流出口(TokenSink)。 orch := eino.NewOrchestrator(pool, breaker, sub) // 监听退出信号,优雅停止消费。 ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) defer stop() log.Println("[dispatcher] consuming sundynix.tasks.* (Ctrl-C to quit)") if err := sub.ConsumeTasks(ctx, orch.Handle); err != nil && err != context.Canceled { log.Fatalf("[dispatcher] exit: %v", err) } } func envOr(key, def string) string { if v := os.Getenv(key); v != "" { return v } return def }