@platforma-open/milaboratories.mixcr-clonotyping-2.workflow 3.27.0 → 3.27.1

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.
@@ -1,6 +1,6 @@
1
1
   WARN  Issue while reading "/home/runner/work/mixcr-clonotyping/mixcr-clonotyping/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
2
2
 
3
- > @platforma-open/milaboratories.mixcr-clonotyping-2.workflow@3.27.0 build /home/runner/work/mixcr-clonotyping/mixcr-clonotyping/workflow
3
+ > @platforma-open/milaboratories.mixcr-clonotyping-2.workflow@3.27.1 build /home/runner/work/mixcr-clonotyping/mixcr-clonotyping/workflow
4
4
  > shx rm -rf dist && pl-tengo check && pl-tengo build
5
5
 
6
6
  info: Skipping unknown file type: test/columns.test.ts
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @platforma-open/milaboratories.mixcr-clonotyping.workflow
2
2
 
3
+ ## 3.27.1
4
+
5
+ ### Patch Changes
6
+
7
+ - a297368: Size MiXCR analyze memory from the input reads' file size on top of the per-analysis floor. The per-analysis baseline (64 / 110 / 192 GiB for default / contig-cell / single-cell+MiTool) stays as a floor; memory then grows linearly with the R1+R2 FASTQ blob size (4 bytes of RAM per byte), clamped to 256 GiB. File size is read from blob metadata (getBlobSize) with no pre-exec. The explicit "Advanced Settings" memory override is unchanged; on backends that can't evaluate resource formulas the baseline is the static fallback.
8
+
3
9
  ## 3.27.0
4
10
 
5
11
  ### Minor Changes
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@platforma-open/milaboratories.mixcr-clonotyping-2.workflow",
3
- "version": "3.27.0",
3
+ "version": "3.27.1",
4
4
  "description": "Tengo-based template",
5
5
  "dependencies": {
6
- "@platforma-sdk/workflow-tengo": "5.12.0",
6
+ "@platforma-sdk/workflow-tengo": "6.5.0",
7
7
  "@platforma-open/milaboratories.software-mixcr": "4.7.0-347-develop"
8
8
  },
9
9
  "devDependencies": {
10
- "@platforma-sdk/tengo-builder": "4.0.8"
10
+ "@platforma-sdk/tengo-builder": "4.0.9"
11
11
  },
12
12
  "scripts": {
13
13
  "build": "shx rm -rf dist && pl-tengo check && pl-tengo build",
@@ -86,18 +86,34 @@ self.body(func(inputs) {
86
86
  mixcrCmdBuilder.cpu(16) // default CPUs number per sample
87
87
  }
88
88
 
89
- // Memory limit per process
89
+ // Memory limit per process.
90
+ // Size analyze RAM from the input reads' file size, on top of a per-analysis
91
+ // floor. size("reads") sums the stored (compressed) blob size of the sample's
92
+ // R1+R2 FASTQ via getBlobSize — a metadata read, no pre-exec — so it tracks
93
+ // total input volume (read count and read length) without decompressing.
94
+ // mem = clamp(baseMemGiB + 4 bytes/byte * size, baseMemGiB, 256 GiB)
95
+ // baseMemGiB is the per-analysis floor (64, or 110/192 for contig/cell and
96
+ // single-cell+MiTool pipelines, which need that headroom regardless of size);
97
+ // the linear term scales with input volume; the 256 GiB cap bounds the largest.
98
+ // An "Advanced Settings" memory override takes precedence; on backends that
99
+ // cannot evaluate resource formulas, memFormula falls back to the baseline.
90
100
  if !is_undefined(perProcessMemGB) {
91
101
  // memory per process was set in "Advanced Settings" block directly
92
102
  mixcrCmdBuilder.mem(string(perProcessMemGB) + "GiB")
93
- } else if hasMiToolSteps {
94
- // allow to use more memory for single cell analysis with mitool pre-
95
- mixcrCmdBuilder.mem("192GiB")
96
- } else if hasAssembleContigs || hasAssembleCells {
97
- // allow to use more memory for single cell analysis
98
- mixcrCmdBuilder.mem("110GiB")
99
103
  } else {
100
- mixcrCmdBuilder.mem("64GiB")
104
+ baseMemGiB := 64
105
+ if hasMiToolSteps {
106
+ baseMemGiB = 192
107
+ } else if hasAssembleContigs || hasAssembleCells {
108
+ baseMemGiB = 110
109
+ }
110
+ f := exec.formula
111
+ mixcrCmdBuilder.memFormula(
112
+ f.clamp(
113
+ f.add(f.gib(baseMemGiB), f.mul(f.size("reads"), 4)),
114
+ f.gib(baseMemGiB),
115
+ f.gib(256)),
116
+ { fallback: string(baseMemGiB) + "GiB" })
101
117
  }
102
118
 
103
119
  if !is_undefined(limitInput) {
@@ -166,7 +182,7 @@ self.body(func(inputs) {
166
182
  inputFile := inputMap["[]"]
167
183
  ll.assert(!is_undefined(inputFile), "unexpected agg group structure")
168
184
  inputFileName := "input." + fileExtension
169
- mixcrCmdBuilder.addFile(inputFileName, inputFile)
185
+ mixcrCmdBuilder.addFile(inputFileName, inputFile, { tag: "reads" })
170
186
  mixcrCmdBuilder.arg(inputFileName)
171
187
  } else if inputDataMeta.keyLength == 1 {
172
188
  ll.assert(aggregationAxesNames == ["pl7.app/sequencing/readIndex"], "unexpected aggregation axes names")
@@ -180,7 +196,7 @@ self.body(func(inputs) {
180
196
  if (r[0] != 'R' && r[0] != "I") || (r[1] != '1' && r[1] != '2') || len(r) != 2 {
181
197
  ll.panic("malformed read index: %v", r)
182
198
  }
183
- mixcrCmdBuilder.addFile("input_" + r + "." + fileExtension, inputFile)
199
+ mixcrCmdBuilder.addFile("input_" + r + "." + fileExtension, inputFile, { tag: "reads" })
184
200
  }
185
201
  mixcrCmdBuilder.arg("input_{{R}}." + fileExtension)
186
202
  } else if inputDataMeta.keyLength == 2 {
@@ -199,7 +215,7 @@ self.body(func(inputs) {
199
215
  if is_undefined(int(lane)) {
200
216
  ll.panic("malformed lane: %v", lane)
201
217
  }
202
- mixcrCmdBuilder.addFile("input_L" + lane + "_" + r + "." + fileExtension, inputFile)
218
+ mixcrCmdBuilder.addFile("input_L" + lane + "_" + r + "." + fileExtension, inputFile, { tag: "reads" })
203
219
  }
204
220
  mixcrCmdBuilder.arg("input_L{{n}}_{{R}}." + fileExtension)
205
221
  } else {