@shop-os/modelkit 0.2.21 → 0.2.22

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.
package/CHANGELOG.md CHANGED
@@ -9,6 +9,25 @@ header in the release PR.
9
9
 
10
10
  ## [Unreleased]
11
11
 
12
+ ## [0.2.22] - Unreleased
13
+
14
+ ### Added
15
+ - `constraints.prompt.maxChars` on every bundled row with a documented prompt limit, so Studio accepts prompts longer than its 5,000-character default where the model takes them. Each row keeps its reference syntax (`numbered`, or `caption` on the Gemini rows):
16
+ - `seedance-2.0`, `seedance-2.0-fast`, `seedance-2.5`: 30000. BytePlus caps the prompt at 10,000 tokens; 30,000 characters assumes English prompts at about 3 characters per token, with margin. A CJK prompt can reach the token limit sooner.
17
+ - `gpt-image-2`, `gpt-image-2.5-flare`, `gpt-image-2.5-sunburst`: 32000 (OpenAI images API: 32,000 characters for GPT image models).
18
+ - `flux-2-pro`: 32768 (Prodia schema `maxLength`).
19
+ - `minimax-h3`, `minimax-h3-max`, `minimax-h3-reference`, `minimax-h3-max-reference`: 50000 (fal schema `maxLength` 50,000).
20
+ - `gemini-3-pro-image-preview`, `gemini-3.1-flash-image-preview`, `gemini-3.1-flash-lite-image`, `gemini-omni-flash`, `gemini-omni-1.1-flash`: 50000. Their token budgets are far above this; 50,000 is cowork's global prompt ceiling.
21
+ - Unchanged: `kling-2.5`, `kling-3.0`, `kling-v3-omni-video` at 2500 and `veo-3.1` at 3000. No limit on `grok-imagine`, `muse-image-1.0`, `seedream-5-0-pro` or any other row without a documented one, so Studio keeps its 5,000 default there.
22
+
23
+ ### Live rows to edit after publish
24
+ Apps read the pro-backend `model_catalog` rows, not this file. Edit an environment's rows only after the companion cowork + spacelab-mcp change (Studio's global prompt ceiling raised from 5,000 to 50,000) is deployed there. Before that, cowork's projection would report `maxPromptChars: 30000`, while its request schema and spacelab-mcp still refuse anything over 5,000. After pro-backend is on 0.2.22, in each environment:
25
+ - `seedance-2.0`, `seedance-2.0-fast`, `seedance-2.5`: `constraints.prompt` → `{ "referenceSyntax": "numbered", "maxChars": 30000 }` (assumes English prompts).
26
+ - `gpt-image-2`, `gpt-image-2.5-flare`, `gpt-image-2.5-sunburst`: `constraints.prompt` → `{ "referenceSyntax": "numbered", "maxChars": 32000 }`.
27
+ - `flux-2-pro`: `constraints.prompt` → `{ "referenceSyntax": "numbered", "maxChars": 32768 }`.
28
+ - `minimax-h3`, `minimax-h3-max`, `minimax-h3-reference`, `minimax-h3-max-reference`: `constraints.prompt` → `{ "referenceSyntax": "numbered", "maxChars": 50000 }`.
29
+ - `gemini-3-pro-image-preview`, `gemini-3.1-flash-image-preview`, `gemini-3.1-flash-lite-image`, `gemini-omni-flash`, `gemini-omni-1.1-flash`: `constraints.prompt` → `{ "referenceSyntax": "caption", "maxChars": 50000 }`.
30
+
12
31
  ## [0.2.21] - Unreleased
13
32
 
14
33
  ### Added
package/dist/catalog.cjs CHANGED
@@ -217,13 +217,16 @@ var GEMINI_RATIOS = [
217
217
  "5:4",
218
218
  "adaptive"
219
219
  ];
220
- function geminiImage(id, label, aliases, sizes, display, exposure, references) {
220
+ var GEMINI_PROMPT_MAX_CHARS = 5e4;
221
+ var GPT_IMAGE_PROMPT = { referenceSyntax: "numbered", maxChars: 32e3 };
222
+ function geminiImage(id, label, aliases, sizes, display, exposure, references, promptMaxChars) {
223
+ const prompt = { referenceSyntax: "caption" };
224
+ if (promptMaxChars !== void 0) prompt.maxChars = promptMaxChars;
221
225
  const constraints = {
222
226
  aspectRatios: [...GEMINI_RATIOS],
223
227
  sizes,
224
228
  supports: ["safetySettings", "temperature"],
225
- // google-image sends MediaRef.label as a text part beside each reference.
226
- prompt: { referenceSyntax: "caption" }
229
+ prompt
227
230
  };
228
231
  if (references !== void 0) constraints.references = references;
229
232
  const model = {
@@ -255,7 +258,8 @@ var IMAGE_MODELS = [
255
258
  logo: "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/192485d2-a76a-4657-9c06-930b2c70badd_compressed.png"
256
259
  },
257
260
  ["cowork", "space_builder"],
258
- { images: 14 }
261
+ { images: 14 },
262
+ GEMINI_PROMPT_MAX_CHARS
259
263
  ),
260
264
  geminiImage(
261
265
  "gemini-3.1-flash-image-preview",
@@ -269,7 +273,8 @@ var IMAGE_MODELS = [
269
273
  logo: "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/192485d2-a76a-4657-9c06-930b2c70badd_compressed.png"
270
274
  },
271
275
  ["cowork", "space_builder"],
272
- { images: 14 }
276
+ { images: 14 },
277
+ GEMINI_PROMPT_MAX_CHARS
273
278
  ),
274
279
  geminiImage(
275
280
  "gemini-3.1-flash-lite-image",
@@ -282,7 +287,8 @@ var IMAGE_MODELS = [
282
287
  logo: "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/192485d2-a76a-4657-9c06-930b2c70badd_compressed.png"
283
288
  },
284
289
  ["cowork", "space_builder"],
285
- { images: 14 }
290
+ { images: 14 },
291
+ GEMINI_PROMPT_MAX_CHARS
286
292
  ),
287
293
  // trigger-workflows validates 1K only; pricing seeds 2K/4K rows so allow all three.
288
294
  geminiImage(
@@ -320,7 +326,8 @@ var IMAGE_MODELS = [
320
326
  sizes: ["1K", "2K", "4K"],
321
327
  qualityOptions: ["auto", "low", "medium", "high"],
322
328
  references: { images: 16 },
323
- supports: ["quality", "count", "outputFormat"]
329
+ supports: ["quality", "count", "outputFormat"],
330
+ prompt: GPT_IMAGE_PROMPT
324
331
  },
325
332
  defaults: { size: "1K", aspectRatio: "adaptive", quality: "auto" },
326
333
  usage: { ...IMAGE_USAGE, slug: "gpt" },
@@ -355,7 +362,8 @@ var IMAGE_MODELS = [
355
362
  sizes: ["1K", "2K", "4K"],
356
363
  qualityOptions: ["auto", "low", "medium", "high", "xhigh", "max"],
357
364
  references: { images: 16 },
358
- supports: ["quality", "count", "outputFormat"]
365
+ supports: ["quality", "count", "outputFormat"],
366
+ prompt: GPT_IMAGE_PROMPT
359
367
  },
360
368
  defaults: { size: "1K", aspectRatio: "adaptive", quality: "auto" },
361
369
  usage: { ...IMAGE_USAGE },
@@ -389,7 +397,8 @@ var IMAGE_MODELS = [
389
397
  sizes: ["1K", "2K", "4K"],
390
398
  qualityOptions: ["auto", "low", "medium", "high", "xhigh", "max"],
391
399
  references: { images: 16 },
392
- supports: ["quality", "count", "outputFormat"]
400
+ supports: ["quality", "count", "outputFormat"],
401
+ prompt: GPT_IMAGE_PROMPT
393
402
  },
394
403
  defaults: { size: "1K", aspectRatio: "adaptive", quality: "auto" },
395
404
  usage: { ...IMAGE_USAGE },
@@ -512,7 +521,9 @@ var IMAGE_MODELS = [
512
521
  sizes: ["1K"],
513
522
  references: { images: 8 },
514
523
  // flux-2-pro's job type always returns image/png; only the seed is forwarded.
515
- supports: ["seed"]
524
+ supports: ["seed"],
525
+ // Prodia's flux-2-pro schema gives the prompt a maxLength of 32,768.
526
+ prompt: { referenceSyntax: "numbered", maxChars: 32768 }
516
527
  },
517
528
  defaults: { size: "1K", aspectRatio: "1:1" },
518
529
  usage: { ...IMAGE_USAGE },
@@ -1314,6 +1325,9 @@ var H3_REFERENCE_RATIOS = ["adaptive", ...H3_RATIOS];
1314
1325
  var NEGATIVE_PROMPT = "blur, distort, and low quality";
1315
1326
  var FRAMES_EXCLUDE_REFERENCES = { framesExcludeReferences: true };
1316
1327
  var KLING_PROMPT = { referenceSyntax: "numbered", maxChars: 2500 };
1328
+ var SEEDANCE_PROMPT = { referenceSyntax: "numbered", maxChars: 3e4 };
1329
+ var H3_PROMPT = { referenceSyntax: "numbered", maxChars: 5e4 };
1330
+ var OMNI_PROMPT = { referenceSyntax: "caption", maxChars: 5e4 };
1317
1331
  var BYTEDANCE_LOGO = "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/3bba5d81-4e57-4e71-911b-cdfa05acca2c_compressed.png";
1318
1332
  var GOOGLE_LOGO2 = "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/192485d2-a76a-4657-9c06-930b2c70badd_compressed.png";
1319
1333
  var VIDEO_MODELS = [
@@ -1437,8 +1451,7 @@ var VIDEO_MODELS = [
1437
1451
  references: { images: 6, videos: 1, videoSeconds: { max: 10 } },
1438
1452
  sourceVideoSeconds: { max: 10 },
1439
1453
  supports: [],
1440
- // generateOmniVideo sends MediaRef.label as a text part beside each image.
1441
- prompt: { referenceSyntax: "caption" },
1454
+ prompt: OMNI_PROMPT,
1442
1455
  audio: "always"
1443
1456
  },
1444
1457
  defaults: {},
@@ -1475,8 +1488,7 @@ var VIDEO_MODELS = [
1475
1488
  // First-to-last-frame interpolation: `<LAST_FRAME>` goes with `<FIRST_FRAME>`.
1476
1489
  supports: ["videoExtension", "lastFrame"],
1477
1490
  extension: { segmentSeconds: 10, maxTotalSeconds: 40 },
1478
- // generateOmniVideo sends MediaRef.label as a text part beside each image.
1479
- prompt: { referenceSyntax: "caption" },
1491
+ prompt: OMNI_PROMPT,
1480
1492
  audio: "always"
1481
1493
  },
1482
1494
  defaults: {},
@@ -1515,6 +1527,7 @@ var VIDEO_MODELS = [
1515
1527
  ratioIgnoredWith: ["firstFrame", "sourceVideo"],
1516
1528
  // No seed: 2.x echoes it but does not honour it (two seeded runs differed, 2026-10-01).
1517
1529
  supports: ["generateAudio", "lastFrame", "watermark"],
1530
+ prompt: SEEDANCE_PROMPT,
1518
1531
  audio: "optional"
1519
1532
  },
1520
1533
  defaults: {
@@ -1556,6 +1569,7 @@ var VIDEO_MODELS = [
1556
1569
  ratioIgnoredWith: ["firstFrame", "sourceVideo"],
1557
1570
  // No seed: 2.x echoes it but does not honour it (two seeded runs differed, 2026-10-01).
1558
1571
  supports: ["generateAudio", "lastFrame", "watermark"],
1572
+ prompt: SEEDANCE_PROMPT,
1559
1573
  audio: "optional"
1560
1574
  },
1561
1575
  defaults: {
@@ -1597,6 +1611,7 @@ var VIDEO_MODELS = [
1597
1611
  ratioIgnoredWith: ["firstFrame", "sourceVideo"],
1598
1612
  // No seed: 2.x echoes it but does not honour it (two seeded runs differed, 2026-10-01).
1599
1613
  supports: ["generateAudio", "lastFrame", "watermark", "taskType"],
1614
+ prompt: SEEDANCE_PROMPT,
1600
1615
  audio: "optional"
1601
1616
  },
1602
1617
  defaults: {
@@ -1758,6 +1773,7 @@ var VIDEO_MODELS = [
1758
1773
  // fal's image-to-video endpoint has no aspect_ratio; the frame sets it.
1759
1774
  ratioIgnoredWith: ["firstFrame"],
1760
1775
  supports: ["seed", "promptExpansion", "lastFrame", "safetyChecker"],
1776
+ prompt: H3_PROMPT,
1761
1777
  audio: "always"
1762
1778
  },
1763
1779
  defaults: {
@@ -1791,6 +1807,7 @@ var VIDEO_MODELS = [
1791
1807
  // fal's image-to-video endpoint has no aspect_ratio; the frame sets it.
1792
1808
  ratioIgnoredWith: ["firstFrame"],
1793
1809
  supports: ["seed", "promptExpansion", "lastFrame", "safetyChecker"],
1810
+ prompt: H3_PROMPT,
1794
1811
  audio: "always"
1795
1812
  },
1796
1813
  defaults: {
@@ -1832,6 +1849,7 @@ var VIDEO_MODELS = [
1832
1849
  videoSeconds: { min: 2, max: 15, total: 15 }
1833
1850
  },
1834
1851
  supports: ["seed", "promptExpansion", "safetyChecker"],
1852
+ prompt: H3_PROMPT,
1835
1853
  audio: "always"
1836
1854
  },
1837
1855
  defaults: {
@@ -1875,6 +1893,7 @@ var VIDEO_MODELS = [
1875
1893
  videoSeconds: { min: 2, max: 15, total: 15 }
1876
1894
  },
1877
1895
  supports: ["seed", "promptExpansion", "safetyChecker"],
1896
+ prompt: H3_PROMPT,
1878
1897
  audio: "always"
1879
1898
  },
1880
1899
  defaults: {