1 line
10 KiB
JSON
1 line
10 KiB
JSON
{"repo": "auberginewly/competify-backend", "files": {"cmd/worker/main.go": {"40f9dd306c0dff336b71b8c9073072cb4b412501": {"t": 1785746082.143375, "n": 3404, "h": "af640313ddba7a8a", "c": "// Command worker — Agent worker entrypoint (for distributed deployments).\n// Phase 5: subscribes to NATS task queue, executes long-running Agent jobs.\npackage main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/cloudwego/eino-ext/components/model/openai\"\n\t\"github.com/competify-ai/competify-backend/internal/dag\"\n\t\"github.com/competify-ai/competify-backend/internal/messaging\"\n\t\"github.com/competify-ai/competify-backend/internal/provenance\"\n\t\"github.com/competify-ai/competify-backend/internal/schema\"\n\t\"github.com/competify-ai/competify-backend/internal/storage/viking\"\n\t\"github.com/nats-io/nats.go\"\n\t\"github.com/nats-io/nats.go/jetstream\"\n)\n\nfunc main() {\n\tnatsURL := getenv(\"NATS_ADDR\", \"nats://localhost:4222\")\n\tnc, err := nats.Connect(natsURL)\n\tif err != nil {\n\t\tlog.Fatalf(\"nats connect: %v\", err)\n\t}\n\tdefer nc.Close()\n\n\tctx := context.Background()\n\n\t// Initialize LLM model (nil is okay — analyzers fall back to stub data).\n\tmodel := initChatModel(ctx)\n\n\t// Initialize Agents + DAG runnable.\n\tauditChain := provenance.NewAuditChain()\n\tvikingClient := initVikingClient()\n\tagents, err := dag.BuildAllAgents(model, auditChain, vikingClient, nil)\n\tif err != nil {\n\t\tlog.Fatalf(\"build agents: %v\", err)\n\t}\n\trunnable, err := dag.BuildRunner(agents, nil)\n\tif err != nil {\n\t\tlog.Fatalf(\"build runner: %v\", err)\n\t}\n\n\tjs, err := jetstream.New(nc)\n\tif err != nil {\n\t\tlog.Fatalf(\"jetstream: %v\", err)\n\t}\n\n\ttaskSub, err := messaging.NewTaskSubscriber(js)\n\tif err != nil {\n\t\tlog.Fatalf(\"task subscriber: %v\", err)\n\t}\n\n\tlog.Println(\"[Worker] waiting for tasks...\")\n\tif err := taskSub.SubscribeTask(ctx, func(taskID string, query schema.UserQuery) {\n\t\tlog.Printf(\"[Worker] received task %s\", taskID)\n\n\t\t// Execute the real DAG.\n\t\toutput, err := dag.ExecuteDAG(ctx, runnable, query)\n\t\tif err != nil {\n\t\t\tlog.Printf(\"[Worker] task %s failed: %v\", taskID, err)\n\t\t\treturn\n\t\t}\n\n\t\tlog.Printf(\"[Worker] task %s completed, report length=%d\", taskID, len(output.Content))\n\t}); err != nil {\n\t\tlog.Fatalf(\"subscribe task: %v\", err)\n\t}\n}\n\n// initChatModel creates the shared OpenAI chat model from environment variables.\n// Returns nil if MOCK_LLM is set or API key is missing — analyzers will fall back to stub data.\nfunc initChatModel(ctx context.Context) *openai.ChatModel {\n\tif os.Getenv(\"MOCK_LLM\") == \"true\" {\n\t\tlog.Println(\"[LLM] MOCK_LLM=true, running in stub mode\")\n\t\treturn nil\n\t}\n\tapiKey := os.Getenv(\"OPENAI_API_KEY\")\n\tif apiKey == \"\" {\n\t\tlog.Println(\"[LLM] OPENAI_API_KEY not set, running in stub mode\")\n\t\treturn nil\n\t}\n\tbaseURL := getenv(\"OPENAI_BASE_URL\", \"https://api.deepseek.com/v1\")\n\tmodelName := getenv(\"OPENAI_MODEL_NAME\", \"deepseek-chat\")\n\n\tmodel, err := openai.NewChatModel(ctx, &openai.ChatModelConfig{\n\t\tBaseURL: baseURL,\n\t\tAPIKey: apiKey,\n\t\tModel: modelName,\n\t})\n\tif err != nil {\n\t\tlog.Printf(\"[LLM] failed to init chat model: %v, falling back to stub mode\", err)\n\t\treturn nil\n\t}\n\tlog.Printf(\"[LLM] initialized model %s via %s\", modelName, baseURL)\n\treturn model\n}\n\n// initVikingClient creates an OpenViking client from env vars.\n// Returns nil when VIKING_URL is not set — DevilsAdvocate falls back to heuristics.\nfunc initVikingClient() *viking.Client {\n\turl := os.Getenv(\"VIKING_URL\")\n\tif url == \"\" {\n\t\treturn nil\n\t}\n\treturn viking.NewClient(url, os.Getenv(\"VIKING_API_KEY\"))\n}\n\nfunc getenv(key, fallback string) string {\n\tif v := os.Getenv(key); v != \"\" {\n\t\treturn v\n\t}\n\treturn fallback\n}\n"}, "238bd98a2ef142b6c0e0bb45d0dd95f89f26b226": {"t": 1785759683.6704392, "n": 3440, "h": "bb6e2fa627f9d325", "c": "// Command worker — Agent worker entrypoint (for distributed deployments).\n// Phase 5: subscribes to NATS task queue, executes long-running Agent jobs.\npackage main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/cloudwego/eino-ext/components/model/openai\"\n\t\"github.com/competify-ai/competify-backend/internal/dag\"\n\t\"github.com/competify-ai/competify-backend/internal/handler\"\n\t\"github.com/competify-ai/competify-backend/internal/messaging\"\n\t\"github.com/competify-ai/competify-backend/internal/provenance\"\n\t\"github.com/competify-ai/competify-backend/internal/schema\"\n\t\"github.com/competify-ai/competify-backend/internal/storage/viking\"\n\t\"github.com/nats-io/nats.go\"\n)\n\nfunc main() {\n\tnatsURL := getenv(\"NATS_ADDR\", \"nats://localhost:4222\")\n\tnc, err := nats.Connect(natsURL)\n\tif err != nil {\n\t\tlog.Fatalf(\"nats connect: %v\", err)\n\t}\n\tdefer nc.Close()\n\n\tctx := context.Background()\n\n\t// Initialize LLM model (nil is okay — analyzers fall back to stub data).\n\tmodel := initChatModel(ctx)\n\n\t// Initialize Agents + DAG runnable.\n\tauditChain := provenance.NewAuditChain()\n\tvikingClient := initVikingClient()\n\tagents, err := dag.BuildAllAgents(model, auditChain, vikingClient)\n\tif err != nil {\n\t\tlog.Fatalf(\"build agents: %v\", err)\n\t}\n\trunnable, err := dag.BuildRunner(agents)\n\tif err != nil {\n\t\tlog.Fatalf(\"build runner: %v\", err)\n\t}\n\n\ttaskSub, err := messaging.NewTaskSubscriber(nc)\n\tif err != nil {\n\t\tlog.Fatalf(\"task subscriber: %v\", err)\n\t}\n\n\tlog.Println(\"[Worker] waiting for tasks...\")\n\tif err := taskSub.SubscribeTask(ctx, func(taskID string, query schema.UserQuery) {\n\t\tlog.Printf(\"[Worker] received task %s\", taskID)\n\n\t\t// Drive frontend progress bar via NATS while the real DAG runs.\n\t\tgo handler.SimulateProgress(nc, taskID)\n\n\t\t// Execute the real DAG.\n\t\toutput, err := dag.ExecuteDAG(ctx, runnable, query)\n\t\tif err != nil {\n\t\t\tlog.Printf(\"[Worker] task %s failed: %v\", taskID, err)\n\t\t\treturn\n\t\t}\n\n\t\tlog.Printf(\"[Worker] task %s completed, report length=%d\", taskID, len(output.Content))\n\t}); err != nil {\n\t\tlog.Fatalf(\"subscribe task: %v\", err)\n\t}\n}\n\n// initChatModel creates the shared OpenAI chat model from environment variables.\n// Returns nil if MOCK_LLM is set or API key is missing — analyzers will fall back to stub data.\nfunc initChatModel(ctx context.Context) *openai.ChatModel {\n\tif os.Getenv(\"MOCK_LLM\") == \"true\" {\n\t\tlog.Println(\"[LLM] MOCK_LLM=true, running in stub mode\")\n\t\treturn nil\n\t}\n\tapiKey := os.Getenv(\"OPENAI_API_KEY\")\n\tif apiKey == \"\" {\n\t\tlog.Println(\"[LLM] OPENAI_API_KEY not set, running in stub mode\")\n\t\treturn nil\n\t}\n\tbaseURL := getenv(\"OPENAI_BASE_URL\", \"https://api.deepseek.com/v1\")\n\tmodelName := getenv(\"OPENAI_MODEL_NAME\", \"deepseek-chat\")\n\n\tmodel, err := openai.NewChatModel(ctx, &openai.ChatModelConfig{\n\t\tBaseURL: baseURL,\n\t\tAPIKey: apiKey,\n\t\tModel: modelName,\n\t})\n\tif err != nil {\n\t\tlog.Printf(\"[LLM] failed to init chat model: %v, falling back to stub mode\", err)\n\t\treturn nil\n\t}\n\tlog.Printf(\"[LLM] initialized model %s via %s\", modelName, baseURL)\n\treturn model\n}\n\n// initVikingClient creates an OpenViking client from env vars.\n// Returns nil when VIKING_URL is not set — DevilsAdvocate falls back to heuristics.\nfunc initVikingClient() *viking.Client {\n\turl := os.Getenv(\"VIKING_URL\")\n\tif url == \"\" {\n\t\treturn nil\n\t}\n\treturn viking.NewClient(url, os.Getenv(\"VIKING_API_KEY\"))\n}\n\nfunc getenv(key, fallback string) string {\n\tif v := os.Getenv(key); v != \"\" {\n\t\treturn v\n\t}\n\treturn fallback\n}\n"}, "3e9f20ca421d5cd869194d751168f07e2146fd87": {"t": 1785759685.8496919, "n": 1880, "h": "d94c4ec8740d0530", "c": "// Command worker — Agent worker entrypoint (for distributed deployments).\n// Phase 5: subscribes to NATS task queue, executes long-running Agent jobs.\npackage main\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/competify-ai/competify-backend/internal/dag\"\n\t\"github.com/competify-ai/competify-backend/internal/handler\"\n\t\"github.com/competify-ai/competify-backend/internal/messaging\"\n\t\"github.com/competify-ai/competify-backend/internal/provenance\"\n\t\"github.com/competify-ai/competify-backend/internal/schema\"\n\t\"github.com/nats-io/nats.go\"\n)\n\nfunc main() {\n\tnatsURL := getenv(\"NATS_ADDR\", \"nats://localhost:4222\")\n\tnc, err := nats.Connect(natsURL)\n\tif err != nil {\n\t\tlog.Fatalf(\"nats connect: %v\", err)\n\t}\n\tdefer nc.Close()\n\n\tctx := context.Background()\n\n\t// Initialize Agents + DAG runnable.\n\tauditChain := provenance.NewAuditChain()\n\tagents, err := dag.BuildAllAgents(auditChain)\n\tif err != nil {\n\t\tlog.Fatalf(\"build agents: %v\", err)\n\t}\n\trunnable, err := dag.BuildRunner(agents)\n\tif err != nil {\n\t\tlog.Fatalf(\"build runner: %v\", err)\n\t}\n\n\ttaskSub, err := messaging.NewTaskSubscriber(nc)\n\tif err != nil {\n\t\tlog.Fatalf(\"task subscriber: %v\", err)\n\t}\n\n\tlog.Println(\"[Worker] waiting for tasks...\")\n\tif err := taskSub.SubscribeTask(ctx, func(taskID string, query schema.UserQuery) {\n\t\tlog.Printf(\"[Worker] received task %s\", taskID)\n\n\t\t// Drive frontend progress bar via NATS while the real DAG runs.\n\t\tgo handler.SimulateProgress(nc, taskID)\n\n\t\t// Execute the real DAG.\n\t\toutput, err := dag.ExecuteDAG(ctx, runnable, query)\n\t\tif err != nil {\n\t\t\tlog.Printf(\"[Worker] task %s failed: %v\", taskID, err)\n\t\t\treturn\n\t\t}\n\n\t\tlog.Printf(\"[Worker] task %s completed, report length=%d\", taskID, len(output.Content))\n\t}); err != nil {\n\t\tlog.Fatalf(\"subscribe task: %v\", err)\n\t}\n}\n\nfunc getenv(key, fallback string) string {\n\tif v := os.Getenv(key); v != \"\" {\n\t\treturn v\n\t}\n\treturn fallback\n}\n"}, "8719812b124b4ee13b338fe89a1e1079cc26dd2f": {"t": 1785759688.3044252, "n": 459, "h": "0d479322650be3e6", "c": "// Command worker — Agent worker entrypoint (for distributed deployments).\n// Phase 5+: subscribe to NATS task queue, execute long-running Agent jobs.\npackage main\n\nimport \"log\"\n\nfunc main() {\n\t// TODO Phase 5:\n\t// 1. Connect to NATS\n\t// 2. Subscribe to competify.task.> subject\n\t// 3. For each task message, run the DAG runnable\n\t// 4. Publish completion events back to NATS\n\tlog.Println(\"CompetifyAI worker scaffold ready. Implement in Phase 5.\")\n}\n"}}}} |