@@ -528,6 +528,7 @@ const EnvironmentSchema = z
528528 MAXIMUM_TRACE_SUMMARY_VIEW_COUNT: z.coerce.number().int().default(25_000),
529529 MAXIMUM_TRACE_DETAILED_SUMMARY_VIEW_COUNT: z.coerce.number().int().default(10_000),
530530 TASK_PAYLOAD_OFFLOAD_THRESHOLD: z.coerce.number().int().default(524_288), // 512KB
531+ BATCH_PAYLOAD_OFFLOAD_THRESHOLD: z.coerce.number().int().optional(), // Defaults to TASK_PAYLOAD_OFFLOAD_THRESHOLD if not set
531532 TASK_PAYLOAD_MAXIMUM_SIZE: z.coerce.number().int().default(3_145_728), // 3MB
532533 BATCH_TASK_PAYLOAD_MAXIMUM_SIZE: z.coerce.number().int().default(1_000_000), // 1MB
533534 TASK_RUN_METADATA_MAXIMUM_SIZE: z.coerce.number().int().default(262_144), // 256KB
@@ -537,6 +538,14 @@ const EnvironmentSchema = z
537538 MAX_BATCH_V2_TRIGGER_ITEMS: z.coerce.number().int().default(500),
538539 MAX_BATCH_AND_WAIT_V2_TRIGGER_ITEMS: z.coerce.number().int().default(500),
539540
541+ // 2-phase batch API settings
542+ STREAMING_BATCH_MAX_ITEMS: z.coerce.number().int().default(1_000), // Max items in streaming batch
543+ STREAMING_BATCH_ITEM_MAXIMUM_SIZE: z.coerce.number().int().default(3_145_728),
544+ BATCH_RATE_LIMIT_REFILL_RATE: z.coerce.number().int().default(100),
545+ BATCH_RATE_LIMIT_MAX: z.coerce.number().int().default(1200),
546+ BATCH_RATE_LIMIT_REFILL_INTERVAL: z.string().default("10s"),
547+ BATCH_CONCURRENCY_LIMIT_DEFAULT: z.coerce.number().int().default(10),
548+
540549 REALTIME_STREAM_VERSION: z.enum(["v1", "v2"]).default("v1"),
541550 REALTIME_STREAM_MAX_LENGTH: z.coerce.number().int().default(1000),
542551 REALTIME_STREAM_TTL: z.coerce
@@ -931,6 +940,17 @@ const EnvironmentSchema = z
931940 .default(process.env.REDIS_TLS_DISABLED ?? "false"),
932941 BATCH_TRIGGER_WORKER_REDIS_CLUSTER_MODE_ENABLED: z.string().default("0"),
933942
943+ // BatchQueue DRR settings (Run Engine v2)
944+ BATCH_QUEUE_DRR_QUANTUM: z.coerce.number().int().default(25),
945+ BATCH_QUEUE_MAX_DEFICIT: z.coerce.number().int().default(100),
946+ BATCH_QUEUE_CONSUMER_COUNT: z.coerce.number().int().default(3),
947+ BATCH_QUEUE_CONSUMER_INTERVAL_MS: z.coerce.number().int().default(50),
948+ // Global rate limit: max items processed per second across all consumers
949+ // If not set, no global rate limiting is applied
950+ BATCH_QUEUE_GLOBAL_RATE_LIMIT: z.coerce.number().int().positive().optional(),
951+ // Processing concurrency: max concurrent batch items being processed per environment
952+ BATCH_CONCURRENCY_DEFAULT_CONCURRENCY: z.coerce.number().int().default(1),
953+
934954 ADMIN_WORKER_ENABLED: z.string().default(process.env.WORKER_ENABLED ?? "true"),
935955 ADMIN_WORKER_CONCURRENCY_WORKERS: z.coerce.number().int().default(2),
936956 ADMIN_WORKER_CONCURRENCY_TASKS_PER_WORKER: z.coerce.number().int().default(10),
0 commit comments