@shop-os/modelkit 0.3.8 → 0.4.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.
@@ -181,6 +181,8 @@ interface VideoToolSubmission {
181
181
  responseUrl: string;
182
182
  cancelUrl: string;
183
183
  output: VideoToolOutputSpec;
184
+ /** Epoch ms when the kit submitted the job; the result's usage `latencyMs` is measured from it. */
185
+ submittedAt?: number;
184
186
  }
185
187
  type VideoToolStatus = "queued" | "running" | "completed";
186
188
  interface VideoToolResult {
@@ -520,6 +522,13 @@ interface UsageEvent {
520
522
  inputTokens?: number;
521
523
  outputTokens?: number;
522
524
  reportedCostUsd?: number;
525
+ /**
526
+ * Wall time of the kit call that produced this event, in ms: from dispatch to the
527
+ * provider's final answer (a video's polling included; a multi-step text call's tool
528
+ * steps included). Absent only where the kit never saw the start (a video tool whose
529
+ * submission carries no `submittedAt`).
530
+ */
531
+ latencyMs?: number;
523
532
  raw?: unknown;
524
533
  }
525
534
  type ProviderKeyName = "openai" | "anthropic" | "google" | "xai" | "perplexity" | "deepseek" | "moonshot" | "minimax" | "ark" | "fal" | "replicate" | "prodia" | "higgsfield" | "cloudflare";
@@ -1138,7 +1147,9 @@ declare function promptConventions(row: {
1138
1147
 
1139
1148
  /** Provider body or the lifted detail (Gemini blockReason, fal body.detail). */
1140
1149
  type ProviderErrorBody = string | JsonValue;
1141
- type ModelKitErrorCode = "unknown_model" | "unsupported_option" | "missing_input" | "content_blocked" | "provider_rejected" | "timeout" | "auth" | "network" | "rate_limited";
1150
+ type ModelKitErrorCode = "unknown_model" | "unsupported_option" | "missing_input" | "content_blocked" | "provider_rejected"
1151
+ /** The provider account is out of credit or quota (HTTP 402 and its body spellings). Never retried. */
1152
+ | "provider_billing" | "timeout" | "auth" | "network" | "rate_limited";
1142
1153
  interface ModelKitErrorInit {
1143
1154
  code: ModelKitErrorCode;
1144
1155
  message: string;
package/dist/catalog.d.ts CHANGED
@@ -181,6 +181,8 @@ interface VideoToolSubmission {
181
181
  responseUrl: string;
182
182
  cancelUrl: string;
183
183
  output: VideoToolOutputSpec;
184
+ /** Epoch ms when the kit submitted the job; the result's usage `latencyMs` is measured from it. */
185
+ submittedAt?: number;
184
186
  }
185
187
  type VideoToolStatus = "queued" | "running" | "completed";
186
188
  interface VideoToolResult {
@@ -520,6 +522,13 @@ interface UsageEvent {
520
522
  inputTokens?: number;
521
523
  outputTokens?: number;
522
524
  reportedCostUsd?: number;
525
+ /**
526
+ * Wall time of the kit call that produced this event, in ms: from dispatch to the
527
+ * provider's final answer (a video's polling included; a multi-step text call's tool
528
+ * steps included). Absent only where the kit never saw the start (a video tool whose
529
+ * submission carries no `submittedAt`).
530
+ */
531
+ latencyMs?: number;
523
532
  raw?: unknown;
524
533
  }
525
534
  type ProviderKeyName = "openai" | "anthropic" | "google" | "xai" | "perplexity" | "deepseek" | "moonshot" | "minimax" | "ark" | "fal" | "replicate" | "prodia" | "higgsfield" | "cloudflare";
@@ -1138,7 +1147,9 @@ declare function promptConventions(row: {
1138
1147
 
1139
1148
  /** Provider body or the lifted detail (Gemini blockReason, fal body.detail). */
1140
1149
  type ProviderErrorBody = string | JsonValue;
1141
- type ModelKitErrorCode = "unknown_model" | "unsupported_option" | "missing_input" | "content_blocked" | "provider_rejected" | "timeout" | "auth" | "network" | "rate_limited";
1150
+ type ModelKitErrorCode = "unknown_model" | "unsupported_option" | "missing_input" | "content_blocked" | "provider_rejected"
1151
+ /** The provider account is out of credit or quota (HTTP 402 and its body spellings). Never retried. */
1152
+ | "provider_billing" | "timeout" | "auth" | "network" | "rate_limited";
1142
1153
  interface ModelKitErrorInit {
1143
1154
  code: ModelKitErrorCode;
1144
1155
  message: string;
package/dist/catalog.js CHANGED
@@ -211,35 +211,43 @@ var IMAGE_MODELS = [
211
211
  GEMINI_PROMPT_MAX_CHARS,
212
212
  NANO_BANANA_2_1_RATIOS
213
213
  ),
214
- geminiImage(
215
- "gemini-3-pro-image-preview",
216
- "Nano Banana Pro",
217
- ["nb-pro"],
218
- ["1K", "2K", "4K"],
219
- {
220
- provider: "google",
221
- description: "Create stunning, production-quality visuals with exceptional realism, detail, and typography. Best for campaigns, e-commerce, product photography, and hero creatives.",
222
- logo: "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/192485d2-a76a-4657-9c06-930b2c70badd_compressed.png"
223
- },
224
- ["cowork", "space_builder"],
225
- { images: 14 },
226
- GEMINI_PROMPT_MAX_CHARS
227
- ),
228
- geminiImage(
229
- "gemini-3.1-flash-image-preview",
230
- "Nano Banana 2",
231
- ["nb-2"],
232
- // Flash 3.1 is the only Gemini image model with the 512 tier.
233
- ["512", "1K", "2K", "4K"],
234
- {
235
- provider: "google",
236
- description: "Generate high-quality images at speed. Perfect for brainstorming, concept boards, concept testing, creative exploration, and large batch workflows.",
237
- logo: "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/192485d2-a76a-4657-9c06-930b2c70badd_compressed.png"
238
- },
239
- ["cowork", "space_builder"],
240
- { images: 14 },
241
- GEMINI_PROMPT_MAX_CHARS
242
- ),
214
+ // Google retired the -preview endpoints for the GA ids; the catalog ids stay because they
215
+ // are pricing keys and stored model ids.
216
+ {
217
+ ...geminiImage(
218
+ "gemini-3-pro-image-preview",
219
+ "Nano Banana Pro",
220
+ ["nb-pro"],
221
+ ["1K", "2K", "4K"],
222
+ {
223
+ provider: "google",
224
+ description: "Create stunning, production-quality visuals with exceptional realism, detail, and typography. Best for campaigns, e-commerce, product photography, and hero creatives.",
225
+ logo: "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/192485d2-a76a-4657-9c06-930b2c70badd_compressed.png"
226
+ },
227
+ ["cowork", "space_builder"],
228
+ { images: 14 },
229
+ GEMINI_PROMPT_MAX_CHARS
230
+ ),
231
+ providerModelId: "gemini-3-pro-image"
232
+ },
233
+ {
234
+ ...geminiImage(
235
+ "gemini-3.1-flash-image-preview",
236
+ "Nano Banana 2",
237
+ ["nb-2"],
238
+ // Flash 3.1 is the only Gemini image model with the 512 tier.
239
+ ["512", "1K", "2K", "4K"],
240
+ {
241
+ provider: "google",
242
+ description: "Generate high-quality images at speed. Perfect for brainstorming, concept boards, concept testing, creative exploration, and large batch workflows.",
243
+ logo: "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/192485d2-a76a-4657-9c06-930b2c70badd_compressed.png"
244
+ },
245
+ ["cowork", "space_builder"],
246
+ { images: 14 },
247
+ GEMINI_PROMPT_MAX_CHARS
248
+ ),
249
+ providerModelId: "gemini-3.1-flash-image"
250
+ },
243
251
  geminiImage(
244
252
  "gemini-3.1-flash-lite-image",
245
253
  "Nano Banana Lite",
@@ -1373,6 +1381,7 @@ var OMNI_PROMPT = { referenceSyntax: "caption", maxChars: 5e4 };
1373
1381
  var BYTEDANCE_LOGO = "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/3bba5d81-4e57-4e71-911b-cdfa05acca2c_compressed.png";
1374
1382
  var GOOGLE_LOGO2 = "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/192485d2-a76a-4657-9c06-930b2c70badd_compressed.png";
1375
1383
  var VIDEO_MODELS = [
1384
+ // Google shuts down the Veo 3.1 previews and Omni Flash 1.0 on 2026-10-22.
1376
1385
  {
1377
1386
  id: "veo-3.1",
1378
1387
  aliases: [
@@ -1385,8 +1394,9 @@ var VIDEO_MODELS = [
1385
1394
  type: "video",
1386
1395
  adapter: "google-genai",
1387
1396
  providerModelId: "veo-3.1-generate-preview",
1388
- lifecycle: "active",
1389
- exposure: ["cowork", "space_builder"],
1397
+ lifecycle: "deprecated",
1398
+ replacedBy: "gemini-omni-1.1-flash",
1399
+ exposure: [],
1390
1400
  constraints: {
1391
1401
  aspectRatios: [...OMNI_RATIOS],
1392
1402
  resolutions: ["720p", "1080p", "4k"],
@@ -1421,7 +1431,8 @@ var VIDEO_MODELS = [
1421
1431
  type: "video",
1422
1432
  adapter: "google-genai",
1423
1433
  providerModelId: "veo-3.1-fast-generate-preview",
1424
- lifecycle: "active",
1434
+ lifecycle: "deprecated",
1435
+ replacedBy: "gemini-omni-1.1-flash",
1425
1436
  exposure: [],
1426
1437
  constraints: {
1427
1438
  aspectRatios: [...OMNI_RATIOS],
@@ -1451,7 +1462,8 @@ var VIDEO_MODELS = [
1451
1462
  type: "video",
1452
1463
  adapter: "google-genai",
1453
1464
  providerModelId: "veo-3.1-lite-generate-preview",
1454
- lifecycle: "active",
1465
+ lifecycle: "deprecated",
1466
+ replacedBy: "gemini-omni-1.1-flash",
1455
1467
  exposure: [],
1456
1468
  constraints: {
1457
1469
  aspectRatios: [...OMNI_RATIOS],
@@ -1482,8 +1494,9 @@ var VIDEO_MODELS = [
1482
1494
  type: "video",
1483
1495
  adapter: "google-genai",
1484
1496
  providerModelId: "gemini-omni-flash-preview",
1485
- lifecycle: "active",
1486
- exposure: ["cowork", "space_builder"],
1497
+ lifecycle: "deprecated",
1498
+ replacedBy: "gemini-omni-1.1-flash",
1499
+ exposure: [],
1487
1500
  constraints: {
1488
1501
  // 1.0 rejects `resolution`; it renders 720p. No defaults: the adapter
1489
1502
  // sends ratio and duration only when the caller set them, so a
@@ -2038,7 +2051,8 @@ var VIDEO_MODELS = [
2038
2051
  },
2039
2052
  defaults: {},
2040
2053
  usage: { ...VIDEO_USAGE },
2041
- pricingKind: "video_per_second",
2054
+ // Higgsfield bills DoP per generation: a fixed-length clip with no duration knob.
2055
+ pricingKind: "flat",
2042
2056
  display: {
2043
2057
  provider: "higgsfield",
2044
2058
  description: "Higgsfield DOP image-to-video model; animates a required first-frame image from a text prompt with an optional last-frame image and motion controls."