@nodetool-ai/node-sdk 0.7.0-rc.23 → 0.8.2

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 (158) hide show
  1. package/README.md +34 -0
  2. package/dist/.nodetool-build-stamp +1 -0
  3. package/dist/base-node.d.ts +285 -14
  4. package/dist/base-node.d.ts.map +1 -1
  5. package/dist/base-node.js +359 -49
  6. package/dist/base-node.js.map +1 -1
  7. package/dist/class-name-to-title.d.ts +26 -0
  8. package/dist/class-name-to-title.d.ts.map +1 -0
  9. package/dist/class-name-to-title.js +59 -0
  10. package/dist/class-name-to-title.js.map +1 -0
  11. package/dist/code-analysis.d.ts +234 -0
  12. package/dist/code-analysis.d.ts.map +1 -0
  13. package/dist/code-analysis.js +919 -0
  14. package/dist/code-analysis.js.map +1 -0
  15. package/dist/code-body.d.ts +61 -0
  16. package/dist/code-body.d.ts.map +1 -0
  17. package/dist/code-body.js +288 -0
  18. package/dist/code-body.js.map +1 -0
  19. package/dist/code-node-validation.d.ts +67 -0
  20. package/dist/code-node-validation.d.ts.map +1 -0
  21. package/dist/code-node-validation.js +540 -0
  22. package/dist/code-node-validation.js.map +1 -0
  23. package/dist/content-card.d.ts +30 -0
  24. package/dist/content-card.d.ts.map +1 -0
  25. package/dist/content-card.js +68 -0
  26. package/dist/content-card.js.map +1 -0
  27. package/dist/correlation-validation.d.ts +19 -0
  28. package/dist/correlation-validation.d.ts.map +1 -0
  29. package/dist/correlation-validation.js +101 -0
  30. package/dist/correlation-validation.js.map +1 -0
  31. package/dist/cost-estimate.d.ts +244 -0
  32. package/dist/cost-estimate.d.ts.map +1 -0
  33. package/dist/cost-estimate.js +637 -0
  34. package/dist/cost-estimate.js.map +1 -0
  35. package/dist/decorators.d.ts.map +1 -1
  36. package/dist/decorators.js +4 -1
  37. package/dist/decorators.js.map +1 -1
  38. package/dist/docs/nodes.d.ts.map +1 -1
  39. package/dist/docs/nodes.js +3 -2
  40. package/dist/docs/nodes.js.map +1 -1
  41. package/dist/docs/overview.d.ts.map +1 -1
  42. package/dist/docs/overview.js +4 -3
  43. package/dist/docs/overview.js.map +1 -1
  44. package/dist/docs/workflows.d.ts.map +1 -1
  45. package/dist/docs/workflows.js +10 -9
  46. package/dist/docs/workflows.js.map +1 -1
  47. package/dist/field-classification.d.ts +31 -0
  48. package/dist/field-classification.d.ts.map +1 -0
  49. package/dist/field-classification.js +58 -0
  50. package/dist/field-classification.js.map +1 -0
  51. package/dist/graph-validation.d.ts +239 -0
  52. package/dist/graph-validation.d.ts.map +1 -0
  53. package/dist/graph-validation.js +1174 -0
  54. package/dist/graph-validation.js.map +1 -0
  55. package/dist/index.d.ts +27 -2
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +29 -1
  58. package/dist/index.js.map +1 -1
  59. package/dist/js-script-link.d.ts +53 -0
  60. package/dist/js-script-link.d.ts.map +1 -0
  61. package/dist/js-script-link.js +58 -0
  62. package/dist/js-script-link.js.map +1 -0
  63. package/dist/js-script-materialize.d.ts +52 -0
  64. package/dist/js-script-materialize.d.ts.map +1 -0
  65. package/dist/js-script-materialize.js +24 -0
  66. package/dist/js-script-materialize.js.map +1 -0
  67. package/dist/manifest-node-values.d.ts +106 -0
  68. package/dist/manifest-node-values.d.ts.map +1 -0
  69. package/dist/manifest-node-values.js +195 -0
  70. package/dist/manifest-node-values.js.map +1 -0
  71. package/dist/metadata.d.ts +75 -3
  72. package/dist/metadata.d.ts.map +1 -1
  73. package/dist/metadata.js +132 -49
  74. package/dist/metadata.js.map +1 -1
  75. package/dist/node-metadata.d.ts.map +1 -1
  76. package/dist/node-metadata.js +61 -56
  77. package/dist/node-metadata.js.map +1 -1
  78. package/dist/node-type-inventory.d.ts +51 -0
  79. package/dist/node-type-inventory.d.ts.map +1 -0
  80. package/dist/node-type-inventory.js +121 -0
  81. package/dist/node-type-inventory.js.map +1 -0
  82. package/dist/nodes/test-nodes.d.ts +77 -30
  83. package/dist/nodes/test-nodes.d.ts.map +1 -1
  84. package/dist/nodes/test-nodes.js +2 -34
  85. package/dist/nodes/test-nodes.js.map +1 -1
  86. package/dist/pack-loader.d.ts +202 -0
  87. package/dist/pack-loader.d.ts.map +1 -0
  88. package/dist/pack-loader.js +529 -0
  89. package/dist/pack-loader.js.map +1 -0
  90. package/dist/port-types.d.ts +15 -0
  91. package/dist/port-types.d.ts.map +1 -0
  92. package/dist/port-types.js +72 -0
  93. package/dist/port-types.js.map +1 -0
  94. package/dist/pricing-bundle.d.ts +83 -0
  95. package/dist/pricing-bundle.d.ts.map +1 -0
  96. package/dist/pricing-bundle.js +82 -0
  97. package/dist/pricing-bundle.js.map +1 -0
  98. package/dist/pricing-params.d.ts +59 -0
  99. package/dist/pricing-params.d.ts.map +1 -0
  100. package/dist/pricing-params.js +282 -0
  101. package/dist/pricing-params.js.map +1 -0
  102. package/dist/python-package-scan.d.ts +8 -0
  103. package/dist/python-package-scan.d.ts.map +1 -1
  104. package/dist/python-package-scan.js +21 -8
  105. package/dist/python-package-scan.js.map +1 -1
  106. package/dist/registry.d.ts +105 -2
  107. package/dist/registry.d.ts.map +1 -1
  108. package/dist/registry.js +403 -30
  109. package/dist/registry.js.map +1 -1
  110. package/dist/sandbox-bridge-packs.d.ts +39 -0
  111. package/dist/sandbox-bridge-packs.d.ts.map +1 -0
  112. package/dist/sandbox-bridge-packs.js +249 -0
  113. package/dist/sandbox-bridge-packs.js.map +1 -0
  114. package/dist/sandbox-catalog-host.d.ts +31 -0
  115. package/dist/sandbox-catalog-host.d.ts.map +1 -0
  116. package/dist/sandbox-catalog-host.js +78 -0
  117. package/dist/sandbox-catalog-host.js.map +1 -0
  118. package/dist/sandbox-module-catalog.d.ts +14 -0
  119. package/dist/sandbox-module-catalog.d.ts.map +1 -0
  120. package/dist/sandbox-module-catalog.js +402 -0
  121. package/dist/sandbox-module-catalog.js.map +1 -0
  122. package/dist/sandbox-npm-artifacts.d.ts +56 -0
  123. package/dist/sandbox-npm-artifacts.d.ts.map +1 -0
  124. package/dist/sandbox-npm-artifacts.js +17 -0
  125. package/dist/sandbox-npm-artifacts.js.map +1 -0
  126. package/dist/sandbox-pack-discovery.d.ts +93 -0
  127. package/dist/sandbox-pack-discovery.d.ts.map +1 -0
  128. package/dist/sandbox-pack-discovery.js +807 -0
  129. package/dist/sandbox-pack-discovery.js.map +1 -0
  130. package/dist/search.d.ts +29 -1
  131. package/dist/search.d.ts.map +1 -1
  132. package/dist/search.js +136 -9
  133. package/dist/search.js.map +1 -1
  134. package/dist/type-compat.d.ts +36 -0
  135. package/dist/type-compat.d.ts.map +1 -0
  136. package/dist/type-compat.js +98 -0
  137. package/dist/type-compat.js.map +1 -0
  138. package/dist/type-predicates.d.ts +25 -0
  139. package/dist/type-predicates.d.ts.map +1 -0
  140. package/dist/type-predicates.js +31 -0
  141. package/dist/type-predicates.js.map +1 -0
  142. package/dist/validation.d.ts +18 -0
  143. package/dist/validation.d.ts.map +1 -1
  144. package/dist/validation.js +70 -11
  145. package/dist/validation.js.map +1 -1
  146. package/dist/workflow-document-tools.d.ts +35 -0
  147. package/dist/workflow-document-tools.d.ts.map +1 -0
  148. package/dist/workflow-document-tools.js +402 -0
  149. package/dist/workflow-document-tools.js.map +1 -0
  150. package/dist/workflow-interface.d.ts +62 -0
  151. package/dist/workflow-interface.d.ts.map +1 -0
  152. package/dist/workflow-interface.js +351 -0
  153. package/dist/workflow-interface.js.map +1 -0
  154. package/package.json +67 -10
  155. package/dist/package-registry-client.d.ts +0 -12
  156. package/dist/package-registry-client.d.ts.map +0 -1
  157. package/dist/package-registry-client.js +0 -40
  158. package/dist/package-registry-client.js.map +0 -1
@@ -0,0 +1,637 @@
1
+ /**
2
+ * Pure pre-run cost estimation for a workflow graph.
3
+ *
4
+ * Walks the nodes, resolves per-node unit pricing attached to node metadata
5
+ * (`fal_unit_pricing` first, then `kie_unit_pricing`) — or, where the model
6
+ * catalogs publish a grid for the same endpoint, off that grid — multiplies by
7
+ * an expected run count, and returns a {@link WorkflowCostEstimate}. Nodes without a known
8
+ * price are still reported (cost 0, confidence "unknown") and counted, never
9
+ * hidden — the plan-before-spend view must surface uncertainty.
10
+ *
11
+ * Generic nodes (e.g. `nodetool.image.TextToImage`) carry no fixed node-type
12
+ * price — the model is chosen at runtime through a provider-model property such
13
+ * as `model`. For those, the estimator reads the selected model id from node
14
+ * data and prices it through the caller-supplied `getModelPrice` lookup.
15
+ *
16
+ * No I/O: callers supply a `getMetadata` lookup so this stays hermetic and
17
+ * usable from web, agents, and the CLI alike.
18
+ */
19
+ import { isFiniteNumber, isObjectLike, isString } from "./type-predicates.js";
20
+ /* -------------------------------------------------------------------------
21
+ * Scalar catalog prices
22
+ * ---------------------------------------------------------------------- */
23
+ /** The trimmed, lower-cased billing unit — rows ship `"1000 characters "`. */
24
+ function unitKey(billingUnit) {
25
+ return billingUnit.trim().toLowerCase();
26
+ }
27
+ /** Units whose figure is one second of output. */
28
+ const PER_SECOND_UNITS = new Set(["second", "seconds"]);
29
+ /** Units whose figure is one minute of output. */
30
+ const PER_MINUTE_UNITS = new Set(["minute", "minutes"]);
31
+ /** Units whose figure is one megapixel of the image produced. */
32
+ const PER_MEGAPIXEL_UNITS = new Set([
33
+ "megapixels",
34
+ "megapixel",
35
+ "processed megapixels",
36
+ "processed megapixel"
37
+ ]);
38
+ /**
39
+ * Units carrying no fixed amount of anything: a credit has no USD value here,
40
+ * and a bare count names no deliverable. Priced as a per-run figure they would
41
+ * read as a real number, so the caller is told why there is none.
42
+ *
43
+ * Reading `"units"` as one run is the obvious-looking shortcut, and it is
44
+ * wrong. Measured over the 56 FAL image/video/audio endpoints billed this way
45
+ * (2026-08-31), the figure spans $0.001 to $1.50 — 1,500× — and the two ends
46
+ * cannot both be a run: `fal-ai/minimax/hailuo-2.3/standard/image-to-video` at
47
+ * $0.28 reads as a video, `bytedance/seedance-2.0/image-to-video` at $0.014
48
+ * does not, and `krea/v2/large/text-to-image` at $0.001 is a fraction of a
49
+ * cent for an image GenSpend prices at $0.06. The unit means something
50
+ * different per endpoint, and FAL does not say what: its pricing API
51
+ * (`https://api.fal.ai/v1/models/pricing`) returns exactly `endpoint_id`,
52
+ * `unit_price`, `unit` and `currency` per row — no grid, no variants, no
53
+ * per-parameter breakdown — so there is nothing further to read there either.
54
+ *
55
+ * The route that does work is GenSpend: since a scalar decline stopped hiding
56
+ * a GenSpend entry for the same model, any of these endpoints GenSpend prices
57
+ * under `fal_ai` already resolves that way. None of the 248 endpoints
58
+ * currently declining on an ambiguous or unstated unit carries one, so that
59
+ * path is exhausted rather than unexplored — they are upstream gaps in
60
+ * GenSpend's FAL coverage, and they close when GenSpend adds the model, not
61
+ * when this set is loosened.
62
+ */
63
+ const UNCONVERTIBLE_UNITS = new Set(["", "unit", "units", "credit", "credits"]);
64
+ /**
65
+ * Rates over something the node states nothing about: wall-clock time on FAL's
66
+ * machines, the length of an *input* it has not been given, training steps,
67
+ * tokens. Multiplying them by anything would be an invention, and reporting the
68
+ * rate as a run understates it by however many units the job really takes.
69
+ */
70
+ const UNSTATED_RATE_UNITS = new Set([
71
+ "compute second",
72
+ "compute seconds",
73
+ "input second",
74
+ "input seconds",
75
+ "step",
76
+ "steps",
77
+ "train unit",
78
+ "train units",
79
+ "1m tokens",
80
+ // GenSpend's own spelling. A speech model billed per token bills the audio
81
+ // tokens it produced, which no caller states — pricing it off the text would
82
+ // be a guess dressed as a quote.
83
+ "1m_tokens",
84
+ "1k_tokens"
85
+ ]);
86
+ /**
87
+ * Units billing a block of synthesized characters, and how many characters one
88
+ * unit price covers. Speech models publish this as `1m_chars` (GenSpend) or as
89
+ * a block spelling the {@link BLOCK_UNIT} branch reads (`"1000 characters"`).
90
+ * Left unconverted, ElevenLabs' $100-per-million read as $100 a line.
91
+ */
92
+ const CHARACTER_BLOCK_UNITS = new Map([
93
+ ["character", 1],
94
+ ["characters", 1],
95
+ ["char", 1],
96
+ ["chars", 1],
97
+ ["1k_chars", 1_000],
98
+ ["1m_chars", 1_000_000]
99
+ ]);
100
+ /** Nouns the block branch prices as characters: `"1000 characters"`. */
101
+ const CHARACTER_NOUNS = new Set(["character", "characters", "char", "chars"]);
102
+ /** How a block of `size` characters is named in a breakdown. */
103
+ function characterBlockLabel(size) {
104
+ if (size >= 1_000_000)
105
+ return `${size / 1_000_000}M chars`;
106
+ if (size >= 1_000)
107
+ return `${size / 1_000}K chars`;
108
+ return size === 1 ? "char" : `${size} chars`;
109
+ }
110
+ /** `"5 seconds"`, `"30 seconds"`, `"16 frames"` — a block of N somethings. */
111
+ const BLOCK_UNIT = /^(\d+(?:\.\d+)?) (.+)$/;
112
+ const trimZeros = (text) => text.includes(".") ? text.replace(/0+$/, "").replace(/\.$/, "") : text;
113
+ /**
114
+ * A price as text. Sub-cent figures get as many decimal places as they need:
115
+ * `String(3e-7)` is `3e-7`, and a breakdown reading "$3e-7/s" is unreadable.
116
+ */
117
+ export const formatUsd = (usd) => {
118
+ if (!Number.isFinite(usd))
119
+ return "$0";
120
+ if (usd >= 0.01)
121
+ return `$${trimZeros(usd.toFixed(3))}`;
122
+ if (usd <= 0)
123
+ return "$0";
124
+ const places = Math.min(12, Math.ceil(-Math.log10(usd)) + 2);
125
+ return `$${trimZeros(usd.toFixed(places))}`;
126
+ };
127
+ /**
128
+ * A character-billed scalar times the text the job will synthesize.
129
+ *
130
+ * Declines when no text length was stated: a per-character rate says nothing
131
+ * about a run on its own, and reporting the block price as the run's cost
132
+ * overstates one line of dialogue by four or five orders of magnitude.
133
+ */
134
+ function priceCharacters(price, blockSize, characters, decline, attach) {
135
+ const label = characterBlockLabel(blockSize);
136
+ if (characters === null) {
137
+ return decline(`the catalog prices this model per ${label}, and no text length was given`);
138
+ }
139
+ return attach({
140
+ ...price,
141
+ unit_price: (price.unit_price * characters) / blockSize,
142
+ breakdown: `${characters} chars × ${formatUsd(price.unit_price)}/${label}`,
143
+ characters
144
+ });
145
+ }
146
+ /**
147
+ * Turn a catalog scalar into a per-run figure for the stated job.
148
+ *
149
+ * A per-second, per-minute or per-megapixel scalar times what the node states;
150
+ * a block unit times the number of blocks the duration needs. Everything else
151
+ * is already a per-run price, and a unit we cannot convert — one with no fixed
152
+ * value (credits) or a rate over something the node never states (compute
153
+ * seconds, training steps) — declines rather than passing off a per-unit number
154
+ * as the cost of a run.
155
+ *
156
+ * Every catalog scalar goes through here: the FAL/kie rows
157
+ * `@nodetool-ai/model-pricing` looks a selected model up in, and the same rows
158
+ * attached to node metadata as `fal_unit_pricing`. A 10-second clip on a
159
+ * $0.14/second endpoint costs $1.40 whichever of the two answered.
160
+ */
161
+ export function priceScalarUnit(price, params, options) {
162
+ const unit = unitKey(price.billing_unit);
163
+ const warnings = [];
164
+ const assumptions = [];
165
+ if (options?.tierCount !== undefined && options.tierCount > 1) {
166
+ warnings.push(`this model publishes ${options.tierCount} priced tiers and the catalog carries only the cheapest — the figure is a lower bound`);
167
+ }
168
+ const attach = (result) => {
169
+ if (assumptions.length > 0)
170
+ result.assumptions = assumptions;
171
+ if (warnings.length > 0)
172
+ result.warnings = warnings;
173
+ return result;
174
+ };
175
+ const decline = (reason) => attach({
176
+ unit_price: 0,
177
+ billing_unit: price.billing_unit,
178
+ currency: price.currency,
179
+ source: price.source,
180
+ declined: reason
181
+ });
182
+ if (UNCONVERTIBLE_UNITS.has(unit)) {
183
+ return decline(`the catalog prices this model per "${price.billing_unit.trim() || "unit"}", which has no fixed value per run`);
184
+ }
185
+ if (UNSTATED_RATE_UNITS.has(unit)) {
186
+ return decline(`the catalog prices this model per "${price.billing_unit.trim()}", which the node states nothing about`);
187
+ }
188
+ const seconds = params?.seconds !== undefined &&
189
+ Number.isFinite(params.seconds) &&
190
+ params.seconds > 0
191
+ ? params.seconds
192
+ : null;
193
+ if (PER_SECOND_UNITS.has(unit)) {
194
+ if (seconds === null) {
195
+ assumptions.push("duration not set on the node — priced at 1 s of output");
196
+ return attach({
197
+ ...price,
198
+ breakdown: `1 s × ${formatUsd(price.unit_price)}/s`,
199
+ seconds: 1
200
+ });
201
+ }
202
+ return attach({
203
+ ...price,
204
+ unit_price: price.unit_price * seconds,
205
+ breakdown: `${seconds} s × ${formatUsd(price.unit_price)}/s`,
206
+ seconds
207
+ });
208
+ }
209
+ if (PER_MINUTE_UNITS.has(unit)) {
210
+ if (seconds === null) {
211
+ assumptions.push("duration not set on the node — priced at one minute of output");
212
+ return attach({
213
+ ...price,
214
+ breakdown: `1 min × ${formatUsd(price.unit_price)}/min`,
215
+ seconds: 60
216
+ });
217
+ }
218
+ return attach({
219
+ ...price,
220
+ unit_price: (price.unit_price * seconds) / 60,
221
+ breakdown: `${seconds} s × ${formatUsd(price.unit_price)}/min`,
222
+ seconds
223
+ });
224
+ }
225
+ if (PER_MEGAPIXEL_UNITS.has(unit)) {
226
+ const megapixels = params?.megapixels !== undefined &&
227
+ Number.isFinite(params.megapixels) &&
228
+ params.megapixels > 0
229
+ ? params.megapixels
230
+ : null;
231
+ if (megapixels === null) {
232
+ assumptions.push("output size not set on the node — priced at one megapixel");
233
+ return attach({
234
+ ...price,
235
+ breakdown: `1 MP × ${formatUsd(price.unit_price)}/MP`
236
+ });
237
+ }
238
+ return attach({
239
+ ...price,
240
+ unit_price: price.unit_price * megapixels,
241
+ breakdown: `${megapixels} MP × ${formatUsd(price.unit_price)}/MP`
242
+ });
243
+ }
244
+ const characters = params?.characters !== undefined &&
245
+ Number.isFinite(params.characters) &&
246
+ params.characters > 0
247
+ ? params.characters
248
+ : null;
249
+ const charBlock = CHARACTER_BLOCK_UNITS.get(unit);
250
+ if (charBlock !== undefined) {
251
+ return priceCharacters(price, charBlock, characters, decline, attach);
252
+ }
253
+ const block = BLOCK_UNIT.exec(unit);
254
+ if (block) {
255
+ const size = Number(block[1]);
256
+ const noun = block[2];
257
+ if (CHARACTER_NOUNS.has(noun) && size > 0) {
258
+ return priceCharacters(price, size, characters, decline, attach);
259
+ }
260
+ if (PER_SECOND_UNITS.has(noun) && size > 0) {
261
+ if (seconds === null) {
262
+ assumptions.push(`duration not set on the node — priced at one ${size}-second block`);
263
+ return attach({ ...price, seconds: size });
264
+ }
265
+ const blocks = Math.ceil(seconds / size);
266
+ return attach({
267
+ ...price,
268
+ unit_price: price.unit_price * blocks,
269
+ breakdown: `${blocks} × ${size} s block${blocks === 1 ? "" : "s"} × ${formatUsd(price.unit_price)} (${seconds} s of output)`,
270
+ seconds
271
+ });
272
+ }
273
+ return decline(`the catalog prices this model per "${price.billing_unit.trim()}", which the node states nothing about`);
274
+ }
275
+ return attach({ ...price });
276
+ }
277
+ /**
278
+ * A node type's class name, spaced: `nodetool.video.ImageToVideo` → "Image To
279
+ * Video". The last resort behind a user title and the registered metadata
280
+ * title, for a node type whose metadata a caller could not supply.
281
+ */
282
+ export function humanizeNodeType(nodeType) {
283
+ const leaf = nodeType.split(".").pop() ?? nodeType;
284
+ return (leaf
285
+ // `ImageToVideo` → `Image To Video`, `TextToImage2` → `Text To Image 2`,
286
+ // `HTTPRequest` → `HTTP Request`: split before a capital that starts a
287
+ // new word and between a letter run and a digit run.
288
+ .replace(/([a-z\d])([A-Z])/g, "$1 $2")
289
+ .replace(/([A-Z]+)([A-Z][a-z])/g, "$1 $2")
290
+ .replace(/([A-Za-z])(\d)/g, "$1 $2")
291
+ .trim() || nodeType);
292
+ }
293
+ /**
294
+ * Property `type.type` values whose value is a provider-backed model selection
295
+ * carrying a provider + model id. Kept in sync with the web `PROVIDER_MODEL_TYPES`
296
+ * list. Local model types (`llama_model`, `hf.*`) are excluded — they aren't
297
+ * priced through a provider catalog.
298
+ */
299
+ export const PROVIDER_MODEL_TYPES = new Set([
300
+ "language_model",
301
+ "image_model",
302
+ "embedding_model",
303
+ "tts_model",
304
+ "asr_model",
305
+ "video_model",
306
+ "rerank_model"
307
+ ]);
308
+ /**
309
+ * Whether a node type runs on an AI model — it carries provider unit pricing
310
+ * (FAL, kie) or exposes a provider-backed model property. The billable-node
311
+ * predicate: what the cost panel lists and what a pre-run estimate walks.
312
+ * Plain data and utility nodes answer false.
313
+ */
314
+ export function usesAiModel(metadata) {
315
+ if (!metadata)
316
+ return false;
317
+ if (metadata.fal_unit_pricing || metadata.kie_unit_pricing)
318
+ return true;
319
+ return (metadata.properties ?? []).some((property) => {
320
+ const propType = property?.type?.type;
321
+ return propType ? PROVIDER_MODEL_TYPES.has(propType) : false;
322
+ });
323
+ }
324
+ /**
325
+ * Property names that multiply a node's output count (fan-out), most specific
326
+ * first — the first one present with a usable value wins. Counted over the
327
+ * generator manifests: `num_images` (280 FAL endpoints), `num_outputs` (33
328
+ * Replicate models), plus `num_samples` and `batch_size` on both. `num_frames`
329
+ * is deliberately absent: it sets the length of one video, not a batch.
330
+ */
331
+ const FAN_OUT_PROPERTIES = [
332
+ "num_images",
333
+ "num_outputs",
334
+ "num_samples",
335
+ "batch_size"
336
+ ];
337
+ /**
338
+ * How many outputs a node is expected to produce, from its property values.
339
+ * Conservative: an absent or unreadable count is one output, so an estimate
340
+ * never over-counts a fan-out nobody asked for.
341
+ */
342
+ export function nodeExpectedQuantity(values) {
343
+ if (!values)
344
+ return 1;
345
+ for (const name of FAN_OUT_PROPERTIES) {
346
+ const value = values[name];
347
+ if (isFiniteNumber(value) && value > 0)
348
+ return Math.floor(value);
349
+ }
350
+ return 1;
351
+ }
352
+ const DEFAULT_CURRENCY = "USD";
353
+ function positiveQuantity(value) {
354
+ return isFiniteNumber(value) && value > 0 ? value : 1;
355
+ }
356
+ /** What to call a node in the table: user title, registered title, class name. */
357
+ function nodeTitle(userTitle, metadata, nodeType) {
358
+ const given = userTitle?.trim();
359
+ if (given)
360
+ return given;
361
+ const registered = metadata?.title?.trim();
362
+ if (registered)
363
+ return registered;
364
+ return humanizeNodeType(nodeType);
365
+ }
366
+ function confidenceFromSource(source) {
367
+ return source === "live" ? "exact" : "estimate";
368
+ }
369
+ function isVagueBillingUnit(unit) {
370
+ return /\bunits?\b|\bcredits?\b/i.test(unit.trim());
371
+ }
372
+ /**
373
+ * The model selected on a generic node, read from the value of its first
374
+ * provider-model property (e.g. `model` on TextToImage). Returns null when the
375
+ * node exposes no such property or nothing is selected.
376
+ */
377
+ function selectedModel(metadata, data) {
378
+ if (!data)
379
+ return null;
380
+ const properties = metadata?.properties;
381
+ if (!properties)
382
+ return null;
383
+ for (const property of properties) {
384
+ const propType = property?.type?.type;
385
+ const name = property?.name;
386
+ if (!name || !propType || !PROVIDER_MODEL_TYPES.has(propType)) {
387
+ continue;
388
+ }
389
+ const value = data[name];
390
+ if (isObjectLike(value)) {
391
+ const id = value.id;
392
+ if (isString(id) && id.trim() !== "") {
393
+ const provider = value.provider;
394
+ return {
395
+ id,
396
+ provider: isString(provider) ? provider : null
397
+ };
398
+ }
399
+ }
400
+ }
401
+ return null;
402
+ }
403
+ /** Provider ids the model catalogs key FAL and kie rows by. */
404
+ const PROVIDER_FAL = "fal_ai";
405
+ const PROVIDER_KIE = "kie";
406
+ /**
407
+ * The model catalogs' answer for an endpoint a node's own metadata prices,
408
+ * when that answer came off a published grid — the rows that move with the
409
+ * resolution, duration and audio state the node states.
410
+ *
411
+ * A flat catalog answer is not preferred over a live node-type row: freshness
412
+ * wins when neither figure responds to the job. A grid row wins regardless,
413
+ * because a live rate for the wrong rung is exact about the wrong number.
414
+ */
415
+ function gridPrice(getModelPrice, model, params, metadataSource) {
416
+ if (!getModelPrice || !model.id)
417
+ return null;
418
+ const price = getModelPrice(model, params);
419
+ if (!price)
420
+ return null;
421
+ // A refusal travels back so the caller can say why its own row is a floor.
422
+ if (price.declined)
423
+ return price;
424
+ if (!Number.isFinite(price.unit_price))
425
+ return null;
426
+ if (isVagueBillingUnit(price.billing_unit))
427
+ return null;
428
+ if (!price.fromGrid && metadataSource === "live")
429
+ return null;
430
+ return price;
431
+ }
432
+ /** The decline reason first, so the reader sees why the figure is a floor. */
433
+ function withReason(reason, assumptions) {
434
+ if (!reason)
435
+ return assumptions;
436
+ return [reason, ...(assumptions ?? [])];
437
+ }
438
+ /**
439
+ * Resolve a node's unit price. A node-type row (FAL, then kie) is asked about
440
+ * first, but it is one number for a whole endpoint: when `getModelPrice` has a
441
+ * published grid for the same endpoint, that grid answers instead, so the
442
+ * figure moves with the resolution and duration the node states. A generic
443
+ * node carrying no row at all is priced from the model chosen on its
444
+ * provider-model property, through the same hook.
445
+ */
446
+ function resolvePrice(metadata, data, getModelPrice, params) {
447
+ const fal = metadata?.fal_unit_pricing;
448
+ if (fal && Number.isFinite(fal.unit_price)) {
449
+ // A node-type row is one number for the whole endpoint, so nothing the
450
+ // user changes can move it. Ask the model catalogs for the same endpoint
451
+ // first: they publish the resolution ladder a run really bills at.
452
+ const graded = gridPrice(getModelPrice, { id: fal.endpoint_id ?? "", provider: PROVIDER_FAL }, params, fal.source);
453
+ if (graded && !graded.declined) {
454
+ return {
455
+ provider: "fal",
456
+ model: fal.endpoint_id ?? null,
457
+ unitPrice: graded.unit_price,
458
+ billingUnit: graded.billing_unit || fal.billing_unit,
459
+ confidence: confidenceFromSource(graded.source),
460
+ breakdown: graded.breakdown,
461
+ assumptions: graded.assumptions,
462
+ warnings: graded.warnings,
463
+ seconds: graded.seconds,
464
+ resolution: graded.resolution
465
+ };
466
+ }
467
+ if (isVagueBillingUnit(fal.billing_unit)) {
468
+ return null;
469
+ }
470
+ // The catalog row is a rate, not a run: a $0.14/second endpoint costs
471
+ // $1.40 for the 10-second clip the node asks for. Same conversion the
472
+ // selected-model path applies, so the two agree on one endpoint.
473
+ const priced = priceScalarUnit(fal, params);
474
+ if (priced.declined) {
475
+ return null;
476
+ }
477
+ return {
478
+ provider: "fal",
479
+ model: fal.endpoint_id ?? null,
480
+ unitPrice: priced.unit_price,
481
+ billingUnit: fal.billing_unit,
482
+ confidence: confidenceFromSource(fal.source),
483
+ breakdown: priced.breakdown,
484
+ assumptions: withReason(graded?.declined, priced.assumptions),
485
+ warnings: priced.warnings,
486
+ seconds: priced.seconds
487
+ };
488
+ }
489
+ const kie = metadata?.kie_unit_pricing;
490
+ if (kie) {
491
+ // Only the USD conversion enters the total. A raw credit price has no
492
+ // fixed USD value, so folding it in would corrupt the sum — without
493
+ // usd_price the node is reported but stays "unknown" (cost 0).
494
+ const graded = gridPrice(getModelPrice, { id: kie.model_id ?? "", provider: PROVIDER_KIE }, params, kie.source);
495
+ if (graded && !graded.declined) {
496
+ return {
497
+ provider: "kie",
498
+ model: kie.model_id ?? null,
499
+ unitPrice: graded.unit_price,
500
+ billingUnit: graded.billing_unit || kie.billing_unit,
501
+ confidence: confidenceFromSource(graded.source),
502
+ breakdown: graded.breakdown,
503
+ assumptions: graded.assumptions,
504
+ warnings: graded.warnings,
505
+ seconds: graded.seconds,
506
+ resolution: graded.resolution
507
+ };
508
+ }
509
+ const usd = kie.usd_price;
510
+ if (isFiniteNumber(usd)) {
511
+ // A third of the kie rows bill per second, so the USD figure is scaled
512
+ // the same way FAL's is. A row whose unit names credits declines the
513
+ // conversion — its `usd_price` is already the whole run.
514
+ const priced = priceScalarUnit({ ...kie, unit_price: usd, currency: "USD" }, params);
515
+ const converted = priced.declined ? null : priced;
516
+ return {
517
+ provider: "kie",
518
+ model: kie.model_id ?? null,
519
+ unitPrice: converted?.unit_price ?? usd,
520
+ billingUnit: kie.billing_unit,
521
+ confidence: confidenceFromSource(kie.source),
522
+ breakdown: converted?.breakdown,
523
+ assumptions: withReason(graded?.declined, converted?.assumptions),
524
+ warnings: converted?.warnings,
525
+ seconds: converted?.seconds
526
+ };
527
+ }
528
+ }
529
+ if (getModelPrice) {
530
+ const model = selectedModel(metadata, data);
531
+ if (model) {
532
+ const price = getModelPrice(model, params);
533
+ if (price?.declined) {
534
+ // A refusal to extrapolate is a reason, not a price: report it where a
535
+ // user can act on it instead of dropping the node into silent unknown.
536
+ return {
537
+ provider: model.provider ?? "model",
538
+ model: model.id,
539
+ unitPrice: 0,
540
+ billingUnit: "",
541
+ confidence: "unknown",
542
+ assumptions: [price.declined],
543
+ warnings: price.warnings
544
+ };
545
+ }
546
+ // A price billed in "units" or "credits" has no fixed currency value —
547
+ // summing it would corrupt the total, so the node stays unknown.
548
+ if (price &&
549
+ Number.isFinite(price.unit_price) &&
550
+ !isVagueBillingUnit(price.billing_unit)) {
551
+ return {
552
+ provider: model.provider ?? "model",
553
+ model: model.id,
554
+ unitPrice: price.unit_price,
555
+ billingUnit: price.billing_unit,
556
+ confidence: confidenceFromSource(price.source),
557
+ breakdown: price.breakdown,
558
+ assumptions: price.assumptions,
559
+ warnings: price.warnings,
560
+ seconds: price.seconds,
561
+ resolution: price.resolution
562
+ };
563
+ }
564
+ }
565
+ }
566
+ return null;
567
+ }
568
+ export function estimateWorkflowCost(input) {
569
+ const currency = input.currency ?? DEFAULT_CURRENCY;
570
+ const quantities = input.quantities ?? {};
571
+ const titles = input.titles ?? {};
572
+ const items = [];
573
+ let total = 0;
574
+ let unknownCount = 0;
575
+ for (const node of input.nodes) {
576
+ if (input.isKnownNonBillable?.(node)) {
577
+ continue;
578
+ }
579
+ const quantity = positiveQuantity(quantities[node.id]);
580
+ const metadata = input.getMetadata(node.type);
581
+ const title = nodeTitle(titles[node.id], metadata, node.type);
582
+ const price = resolvePrice(metadata, node.data, input.getModelPrice, input.getParams?.(node));
583
+ if (!price || price.confidence === "unknown") {
584
+ const unknownItem = {
585
+ node_id: node.id,
586
+ node_type: node.type,
587
+ node_title: title,
588
+ provider: price?.provider ?? null,
589
+ model: price?.model ?? null,
590
+ quantity,
591
+ estimated_cost: 0,
592
+ confidence: "unknown"
593
+ };
594
+ if (price?.assumptions) {
595
+ unknownItem.assumptions = price.assumptions;
596
+ }
597
+ if (price?.warnings) {
598
+ unknownItem.warnings = price.warnings;
599
+ }
600
+ items.push(unknownItem);
601
+ unknownCount += 1;
602
+ continue;
603
+ }
604
+ const estimatedCost = price.unitPrice * quantity;
605
+ total += estimatedCost;
606
+ const item = {
607
+ node_id: node.id,
608
+ node_type: node.type,
609
+ node_title: title,
610
+ provider: price.provider,
611
+ model: price.model,
612
+ unit_price: price.unitPrice,
613
+ billing_unit: price.billingUnit,
614
+ quantity,
615
+ estimated_cost: estimatedCost,
616
+ confidence: price.confidence
617
+ };
618
+ if (price.breakdown) {
619
+ item.breakdown = price.breakdown;
620
+ }
621
+ if (price.assumptions) {
622
+ item.assumptions = price.assumptions;
623
+ }
624
+ if (price.warnings) {
625
+ item.warnings = price.warnings;
626
+ }
627
+ if (price.seconds !== undefined) {
628
+ item.seconds = price.seconds;
629
+ }
630
+ if (price.resolution !== undefined) {
631
+ item.resolution = price.resolution;
632
+ }
633
+ items.push(item);
634
+ }
635
+ return { currency, total, items, unknown_count: unknownCount };
636
+ }
637
+ //# sourceMappingURL=cost-estimate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-estimate.js","sourceRoot":"","sources":["../src/cost-estimate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,WAAW,CAAC;CACtB;AAqCD,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,WAAW,GACnB,IAAI,CAGN;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,QAAQ,GACb,wBAAwB,EAAE,CAE5B;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,iBAAiB,CAK5D"}
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,WAAW,CAAC;CACtB;AAuCD,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,WAAW,GACnB,IAAI,CAGN;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,QAAQ,GACb,wBAAwB,EAAE,CAE5B;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,iBAAiB,CAK5D"}