@norskvideo/ctl-product-template-schema 0.1.8 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/index.d.ts +15 -6
  2. package/index.js +24 -15
  3. package/package.json +1 -1
package/index.d.ts CHANGED
@@ -23,8 +23,8 @@ export declare const ProductTemplateAdvancedSchema: z.ZodObject<{
23
23
  shmSize: z.ZodOptional<z.ZodObject<{
24
24
  default: z.ZodOptional<z.ZodString>;
25
25
  }, z.core.$strip>>;
26
- shmGroup: z.ZodOptional<z.ZodObject<{
27
- default: z.ZodOptional<z.ZodString>;
26
+ sharedMemory: z.ZodOptional<z.ZodObject<{
27
+ default: z.ZodOptional<z.ZodArray<z.ZodString>>;
28
28
  }, z.core.$strip>>;
29
29
  openFileLimit: z.ZodOptional<z.ZodObject<{
30
30
  default: z.ZodOptional<z.ZodNumber>;
@@ -43,6 +43,9 @@ export declare const ProductTemplateAllocatedPortSchema: z.ZodObject<{
43
43
  export type ProductTemplateAllocatedPort = z.infer<typeof ProductTemplateAllocatedPortSchema>;
44
44
  export declare const ProductTemplateSideloadSchema: z.ZodObject<{
45
45
  gpuInference: z.ZodOptional<z.ZodBoolean>;
46
+ models: z.ZodOptional<z.ZodBoolean>;
47
+ modelsReasoning: z.ZodOptional<z.ZodBoolean>;
48
+ llmVenv: z.ZodOptional<z.ZodBoolean>;
46
49
  }, z.core.$strip>;
47
50
  export type ProductTemplateSideload = z.infer<typeof ProductTemplateSideloadSchema>;
48
51
  export declare const ProductTemplateManifestSchema: z.ZodObject<{
@@ -73,6 +76,9 @@ export declare const ProductTemplateManifestSchema: z.ZodObject<{
73
76
  requiresWorkingDirectory: z.ZodOptional<z.ZodBoolean>;
74
77
  sideload: z.ZodOptional<z.ZodObject<{
75
78
  gpuInference: z.ZodOptional<z.ZodBoolean>;
79
+ models: z.ZodOptional<z.ZodBoolean>;
80
+ modelsReasoning: z.ZodOptional<z.ZodBoolean>;
81
+ llmVenv: z.ZodOptional<z.ZodBoolean>;
76
82
  }, z.core.$strip>>;
77
83
  advanced: z.ZodOptional<z.ZodObject<{
78
84
  networkMode: z.ZodOptional<z.ZodObject<{
@@ -93,8 +99,8 @@ export declare const ProductTemplateManifestSchema: z.ZodObject<{
93
99
  shmSize: z.ZodOptional<z.ZodObject<{
94
100
  default: z.ZodOptional<z.ZodString>;
95
101
  }, z.core.$strip>>;
96
- shmGroup: z.ZodOptional<z.ZodObject<{
97
- default: z.ZodOptional<z.ZodString>;
102
+ sharedMemory: z.ZodOptional<z.ZodObject<{
103
+ default: z.ZodOptional<z.ZodArray<z.ZodString>>;
98
104
  }, z.core.$strip>>;
99
105
  openFileLimit: z.ZodOptional<z.ZodObject<{
100
106
  default: z.ZodOptional<z.ZodNumber>;
@@ -188,6 +194,9 @@ export declare const ProductTemplateMaterialsSchema: z.ZodObject<{
188
194
  requiresWorkingDirectory: z.ZodOptional<z.ZodBoolean>;
189
195
  sideload: z.ZodOptional<z.ZodObject<{
190
196
  gpuInference: z.ZodOptional<z.ZodBoolean>;
197
+ models: z.ZodOptional<z.ZodBoolean>;
198
+ modelsReasoning: z.ZodOptional<z.ZodBoolean>;
199
+ llmVenv: z.ZodOptional<z.ZodBoolean>;
191
200
  }, z.core.$strip>>;
192
201
  advanced: z.ZodOptional<z.ZodObject<{
193
202
  networkMode: z.ZodOptional<z.ZodObject<{
@@ -208,8 +217,8 @@ export declare const ProductTemplateMaterialsSchema: z.ZodObject<{
208
217
  shmSize: z.ZodOptional<z.ZodObject<{
209
218
  default: z.ZodOptional<z.ZodString>;
210
219
  }, z.core.$strip>>;
211
- shmGroup: z.ZodOptional<z.ZodObject<{
212
- default: z.ZodOptional<z.ZodString>;
220
+ sharedMemory: z.ZodOptional<z.ZodObject<{
221
+ default: z.ZodOptional<z.ZodArray<z.ZodString>>;
213
222
  }, z.core.$strip>>;
214
223
  openFileLimit: z.ZodOptional<z.ZodObject<{
215
224
  default: z.ZodOptional<z.ZodNumber>;
package/index.js CHANGED
@@ -78,16 +78,14 @@ export const ProductTemplateAdvancedSchema = z
78
78
  // exclusive and a second instance needs a different one. Hard pinning is
79
79
  // a future product-template-pins concern, not this knob.
80
80
  hostPorts: z.object({ default: z.array(z.string()).optional() }).optional(),
81
- // Shared memory. `shmSize` sizes media's private /dev/shm — or, under a
82
- // group, the shared IPC namespace every member of that group joins.
83
- // `shmGroup` opts the instance out of privacy altogether and into a named
84
- // namespace shared with every other member on the host — what a zero-copy
85
- // cross-instance transport (MXL) needs, and meaningless without one. A
86
- // product that requires the shared namespace supplies the group name as its
87
- // `default`, so an operator gets it without knowing the transport's
88
- // mechanics.
81
+ // Shared memory: `shmSize` sizes media's private /dev/shm — always private
82
+ // to the instance (ADR-0011). Cross-instance sharing is `sharedMemory`:
83
+ // operator-created host tmpfs paths bind-mounted into media (e.g. an MXL
84
+ // domain). A product built around a domain suggests the conventional path
85
+ // as its `default`; the operator still owns creating the mount, and can
86
+ // override or decline at launch.
89
87
  shmSize: z.object({ default: z.string().optional() }).optional(),
90
- shmGroup: z.object({ default: z.string().optional() }).optional(),
88
+ sharedMemory: z.object({ default: z.array(z.string()).optional() }).optional(),
91
89
  // Open file descriptors per container. The runner already states a ceiling
92
90
  // for every instance (unset, containers inherit the host daemon's limit,
93
91
  // which is how a media graph at ~1000 handles dies of EMFILE on some hosts
@@ -117,15 +115,26 @@ export const ProductTemplateAllocatedPortSchema = z
117
115
  label: z.string().optional().meta({ description: "Human label, e.g. 'MoQ preview (WebTransport)'" }),
118
116
  })
119
117
  .meta({ id: "ProductTemplateAllocatedPort", outputId: "ProductTemplateAllocatedPort" });
120
- // CUDA sideload bundle needs (docker/SIDELOAD.md). Only `gpuInference` is
121
- // declared: `gpu-video` (NVENC/NVDEC) follows the GPU reservation automatically,
122
- // so it needs no declaration. The runner mounts the matching bundle only when
123
- // the image is slimmed AND the GPU is reserved; otherwise this is inert (a stock
124
- // image needs no bundle; inference without a bundle falls back to CPU).
118
+ // Sideload bundle needs (docker/SIDELOAD.md). `gpu-video` (NVENC/NVDEC) follows
119
+ // the GPU reservation automatically, so it needs no declaration. `gpuInference`
120
+ // gates the 1.58 GB CUDA bundle and is inert without a GPU reservation
121
+ // (inference falls back to CPU). The two model-weight declarations are
122
+ // GPU-independent: the weights ARE the feature, so a declaration is honoured on
123
+ // CPU-only hosts too. All of it is inert on a fat image (no `.refs`, nothing to
124
+ // mount).
125
125
  export const ProductTemplateSideloadSchema = z
126
126
  .object({
127
127
  gpuInference: z.boolean().optional().meta({
128
- description: "Deployment uses GPU-accelerated inference (ONNX NR-IQA/detection/VAD, GPU whisper). When the GPU is reserved on the host the runner mounts the gpu-inference CUDA bundle; otherwise inference falls back to CPU. gpu-video (NVENC/NVDEC) follows the GPU reservation automatically and needs no declaration.",
128
+ description: "Deployment uses GPU-accelerated inference (ONNX NR-IQA/reasoning local analysis/VAD, GPU whisper). When the GPU is reserved on the host the runner mounts the gpu-inference CUDA bundle; otherwise inference falls back to CPU. gpu-video (NVENC/NVDEC) follows the GPU reservation automatically and needs no declaration.",
129
+ }),
130
+ models: z.boolean().optional().meta({
131
+ description: "Deployment uses quality monitoring (NR-IQA). The runner mounts the arch-independent models bundle (the NR-IQA ONNX weights) — needed with or without a GPU; on a slimmed image the feature is unavailable without it.",
132
+ }),
133
+ modelsReasoning: z.boolean().optional().meta({
134
+ description: "Deployment uses AI reasoning local analysis (object detection, scene semantics, face identity, speaker identity, OCR). The runner mounts the arch-independent models-reasoning bundle (those ONNX weights) — needed with or without a GPU; on a slimmed image those tools are unavailable without it.",
135
+ }),
136
+ llmVenv: z.boolean().optional().meta({
137
+ description: "Deployment uses the remote LLM providers (OpenAI/Gemini/Claude — AI reasoning plan/evaluate, live evaluate). The runner mounts the per-arch llm-venv bundle (the provider Python SDKs) — needed with or without a GPU; on a slimmed image LLM provider nodes are unavailable without it.",
129
138
  }),
130
139
  })
131
140
  .meta({ id: "ProductTemplateSideload", outputId: "ProductTemplateSideload" });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@norskvideo/ctl-product-template-schema",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {