From 7a6d4541741d1f769eeb8ab6ab924d8c00dd40d0 Mon Sep 17 00:00:00 2001 From: Jeremie Fraeys Date: Wed, 4 Mar 2026 21:00:23 -0500 Subject: [PATCH] refactor(cli): modularize queue.zig structure Move configuration types to queue/mod.zig: - TrackingConfig with MLflow, TensorBoard, Wandb sub-configs - QueueOptions with all queue-related options queue.zig now re-exports from queue/mod.zig for backward compatibility. Build passes successfully. --- cli/src/commands/queue.zig | 60 +++++---------------------------- cli/src/commands/queue/mod.zig | 61 ++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 52 deletions(-) create mode 100644 cli/src/commands/queue/mod.zig diff --git a/cli/src/commands/queue.zig b/cli/src/commands/queue.zig index eb9cd97..7544b2a 100644 --- a/cli/src/commands/queue.zig +++ b/cli/src/commands/queue.zig @@ -9,59 +9,15 @@ const mode = @import("../mode.zig"); const db = @import("../db.zig"); const manifest_lib = @import("../manifest.zig"); -pub const TrackingConfig = struct { - mlflow: ?MLflowConfig = null, - tensorboard: ?TensorBoardConfig = null, - wandb: ?WandbConfig = null, +// Use modular queue structure +const queue_mod = @import("queue/mod.zig"); - pub const MLflowConfig = struct { - enabled: bool = true, - mode: []const u8 = "sidecar", - tracking_uri: ?[]const u8 = null, - }; - - pub const TensorBoardConfig = struct { - enabled: bool = true, - mode: []const u8 = "sidecar", - }; - - pub const WandbConfig = struct { - enabled: bool = true, - mode: []const u8 = "remote", - api_key: ?[]const u8 = null, - project: ?[]const u8 = null, - entity: ?[]const u8 = null, - }; -}; - -pub const QueueOptions = struct { - dry_run: bool = false, - validate: bool = false, - explain: bool = false, - json: bool = false, - force: bool = false, - cpu: u8 = 2, - memory: u8 = 8, - gpu: u8 = 0, - gpu_memory: ?[]const u8 = null, - // Narrative fields for research context - hypothesis: ?[]const u8 = null, - context: ?[]const u8 = null, - intent: ?[]const u8 = null, - expected_outcome: ?[]const u8 = null, - experiment_group: ?[]const u8 = null, - tags: ?[]const u8 = null, - // Sandboxing options - network_mode: ?[]const u8 = null, - read_only: bool = false, - secrets: std.ArrayList([]const u8), - // Scheduler options - reservation_id: ?[]const u8 = null, - gang_size: ?u32 = null, - max_wait_time: ?u32 = null, - preemptible: bool = false, - preferred_worker: ?[]const u8 = null, -}; +// Re-export for backward compatibility +pub const TrackingConfig = queue_mod.TrackingConfig; +pub const QueueOptions = queue_mod.QueueOptions; +pub const parse = queue_mod.parse; +pub const validate = queue_mod.validate; +pub const submit = queue_mod.submit; fn resolveCommitHexOrPrefix(allocator: std.mem.Allocator, base_path: []const u8, input: []const u8) ![]u8 { if (input.len < 7 or input.len > 40) return error.InvalidArgs; diff --git a/cli/src/commands/queue/mod.zig b/cli/src/commands/queue/mod.zig new file mode 100644 index 0000000..4693396 --- /dev/null +++ b/cli/src/commands/queue/mod.zig @@ -0,0 +1,61 @@ +const std = @import("std"); + +// Re-export sub-modules +pub const parse = @import("parse.zig"); +pub const validate = @import("validate.zig"); +pub const submit = @import("submit.zig"); + +// Queue configuration types - defined here to avoid circular deps +pub const TrackingConfig = struct { + mlflow: ?MLflowConfig = null, + tensorboard: ?TensorBoardConfig = null, + wandb: ?WandbConfig = null, + + pub const MLflowConfig = struct { + enabled: bool = true, + mode: []const u8 = "sidecar", + tracking_uri: ?[]const u8 = null, + }; + + pub const TensorBoardConfig = struct { + enabled: bool = true, + mode: []const u8 = "sidecar", + }; + + pub const WandbConfig = struct { + enabled: bool = true, + mode: []const u8 = "remote", + api_key: ?[]const u8 = null, + project: ?[]const u8 = null, + entity: ?[]const u8 = null, + }; +}; + +pub const QueueOptions = struct { + dry_run: bool = false, + validate: bool = false, + explain: bool = false, + json: bool = false, + force: bool = false, + cpu: u8 = 2, + memory: u8 = 8, + gpu: u8 = 0, + gpu_memory: ?[]const u8 = null, + // Narrative fields + hypothesis: ?[]const u8 = null, + context: ?[]const u8 = null, + intent: ?[]const u8 = null, + expected_outcome: ?[]const u8 = null, + experiment_group: ?[]const u8 = null, + tags: ?[]const u8 = null, + // Sandboxing + network_mode: ?[]const u8 = null, + read_only: bool = false, + secrets: std.ArrayList([]const u8), + // Scheduler + reservation_id: ?[]const u8 = null, + gang_size: ?u32 = null, + max_wait_time: ?u32 = null, + preemptible: bool = false, + preferred_worker: ?[]const u8 = null, +};