@nodaro/shared 2.22.0 → 2.24.0
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/dist/index.cjs +175 -57
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +373 -1
- package/dist/index.d.ts +373 -1
- package/dist/index.js +175 -57
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/llm-models.test.ts +122 -3
- package/src/__tests__/video-analysis-catalog-sync.test.ts +1 -1
- package/src/__tests__/video-analysis-pricing.test.ts +6 -6
- package/src/index.ts +10 -0
- package/src/llm-models.ts +138 -4
- package/src/model-catalog.ts +30 -30
- package/src/studio-production-wire.ts +344 -0
- package/src/types.ts +43 -0
- package/src/video-analysis-pricing.ts +30 -23
package/dist/index.js
CHANGED
|
@@ -1981,11 +1981,11 @@ var VIDEO_MODELS = {
|
|
|
1981
1981
|
description: "Legacy fast-tier analysis model (pre-2026-07). Kept so stored raw-model configs keep running and keep pricing under their own identifier; new fast-tier runs use the current fast model.",
|
|
1982
1982
|
useCases: ["video-analysis", "shot-list", "fast"],
|
|
1983
1983
|
pricing: [
|
|
1984
|
-
{ identifier: "video-analysis:gemini-3-flash", credits:
|
|
1984
|
+
{ identifier: "video-analysis:gemini-3-flash", credits: 849, note: "10-min ceiling (no duration given)" },
|
|
1985
1985
|
{ identifier: "video-analysis:gemini-3-flash:60s", credits: 181 },
|
|
1986
|
-
{ identifier: "video-analysis:gemini-3-flash:180s", credits:
|
|
1987
|
-
{ identifier: "video-analysis:gemini-3-flash:360s", credits:
|
|
1988
|
-
{ identifier: "video-analysis:gemini-3-flash:600s", credits:
|
|
1986
|
+
{ identifier: "video-analysis:gemini-3-flash:180s", credits: 186 },
|
|
1987
|
+
{ identifier: "video-analysis:gemini-3-flash:360s", credits: 516 },
|
|
1988
|
+
{ identifier: "video-analysis:gemini-3-flash:600s", credits: 849, note: "10-min ceiling" }
|
|
1989
1989
|
]
|
|
1990
1990
|
},
|
|
1991
1991
|
"gemini-3.6-flash-video-analysis": {
|
|
@@ -1998,11 +1998,11 @@ var VIDEO_MODELS = {
|
|
|
1998
1998
|
description: "Analyze a video into a structured shot list (scenes, camera, audio) \u2014 fast, economy tier. Billed per duration bucket.",
|
|
1999
1999
|
useCases: ["video-analysis", "shot-list", "fast"],
|
|
2000
2000
|
pricing: [
|
|
2001
|
-
{ identifier: "video-analysis:gemini-3.6-flash", credits:
|
|
2002
|
-
{ identifier: "video-analysis:gemini-3.6-flash:60s", credits:
|
|
2001
|
+
{ identifier: "video-analysis:gemini-3.6-flash", credits: 995, note: "10-min ceiling (no duration given)" },
|
|
2002
|
+
{ identifier: "video-analysis:gemini-3.6-flash:60s", credits: 205 },
|
|
2003
2003
|
{ identifier: "video-analysis:gemini-3.6-flash:180s", credits: 219 },
|
|
2004
|
-
{ identifier: "video-analysis:gemini-3.6-flash:360s", credits:
|
|
2005
|
-
{ identifier: "video-analysis:gemini-3.6-flash:600s", credits:
|
|
2004
|
+
{ identifier: "video-analysis:gemini-3.6-flash:360s", credits: 603 },
|
|
2005
|
+
{ identifier: "video-analysis:gemini-3.6-flash:600s", credits: 995, note: "10-min ceiling" }
|
|
2006
2006
|
]
|
|
2007
2007
|
},
|
|
2008
2008
|
"gemini-3.1-pro-video-analysis": {
|
|
@@ -2015,11 +2015,11 @@ var VIDEO_MODELS = {
|
|
|
2015
2015
|
description: "Analyze a video into a structured shot list (scenes, camera, audio) \u2014 higher-fidelity, default tier. Billed per duration bucket.",
|
|
2016
2016
|
useCases: ["video-analysis", "shot-list", "cinematic"],
|
|
2017
2017
|
pricing: [
|
|
2018
|
-
{ identifier: "video-analysis:gemini-3.1-pro", credits:
|
|
2019
|
-
{ identifier: "video-analysis:gemini-3.1-pro:60s", credits:
|
|
2020
|
-
{ identifier: "video-analysis:gemini-3.1-pro:180s", credits:
|
|
2021
|
-
{ identifier: "video-analysis:gemini-3.1-pro:360s", credits:
|
|
2022
|
-
{ identifier: "video-analysis:gemini-3.1-pro:600s", credits:
|
|
2018
|
+
{ identifier: "video-analysis:gemini-3.1-pro", credits: 1059, note: "10-min ceiling (no duration given)" },
|
|
2019
|
+
{ identifier: "video-analysis:gemini-3.1-pro:60s", credits: 217 },
|
|
2020
|
+
{ identifier: "video-analysis:gemini-3.1-pro:180s", credits: 233 },
|
|
2021
|
+
{ identifier: "video-analysis:gemini-3.1-pro:360s", credits: 642 },
|
|
2022
|
+
{ identifier: "video-analysis:gemini-3.1-pro:600s", credits: 1059, note: "10-min ceiling" }
|
|
2023
2023
|
]
|
|
2024
2024
|
},
|
|
2025
2025
|
// Both mixed tiers are variants of the same advanced multi-engine analysis
|
|
@@ -2035,11 +2035,11 @@ var VIDEO_MODELS = {
|
|
|
2035
2035
|
description: "Our most advanced analysis tier \u2014 multiple analysis engines combined into one result for maximum completeness and accuracy. Billed per duration bucket.",
|
|
2036
2036
|
useCases: ["video-analysis", "shot-list", "premium", "most-complete"],
|
|
2037
2037
|
pricing: [
|
|
2038
|
-
{ identifier: "video-analysis:mixed", credits:
|
|
2038
|
+
{ identifier: "video-analysis:mixed", credits: 1181, note: "10-min ceiling (no duration given)" },
|
|
2039
2039
|
{ identifier: "video-analysis:mixed:60s", credits: 270 },
|
|
2040
|
-
{ identifier: "video-analysis:mixed:180s", credits:
|
|
2041
|
-
{ identifier: "video-analysis:mixed:360s", credits:
|
|
2042
|
-
{ identifier: "video-analysis:mixed:600s", credits:
|
|
2040
|
+
{ identifier: "video-analysis:mixed:180s", credits: 292 },
|
|
2041
|
+
{ identifier: "video-analysis:mixed:360s", credits: 731 },
|
|
2042
|
+
{ identifier: "video-analysis:mixed:600s", credits: 1181, note: "10-min ceiling" }
|
|
2043
2043
|
]
|
|
2044
2044
|
},
|
|
2045
2045
|
// SMART — the accuracy tier. Since the 2026-08-03 hybrid re-plan it is a
|
|
@@ -2057,11 +2057,11 @@ var VIDEO_MODELS = {
|
|
|
2057
2057
|
description: "Highest-accuracy analysis \u2014 a hybrid pass that blends a native skeleton read with several donor analysis rolls, then always refines the merged result to find shot boundaries and identify the cast by appearance. Best choice when the shot list will drive regeneration. Billed per duration bucket.",
|
|
2058
2058
|
useCases: ["video-analysis", "shot-list", "premium", "most-accurate"],
|
|
2059
2059
|
pricing: [
|
|
2060
|
-
{ identifier: "video-analysis:smart", credits:
|
|
2061
|
-
{ identifier: "video-analysis:smart:60s", credits:
|
|
2062
|
-
{ identifier: "video-analysis:smart:180s", credits:
|
|
2063
|
-
{ identifier: "video-analysis:smart:360s", credits:
|
|
2064
|
-
{ identifier: "video-analysis:smart:600s", credits:
|
|
2060
|
+
{ identifier: "video-analysis:smart", credits: 2081, note: "10-min ceiling (no duration given)" },
|
|
2061
|
+
{ identifier: "video-analysis:smart:60s", credits: 414 },
|
|
2062
|
+
{ identifier: "video-analysis:smart:180s", credits: 504 },
|
|
2063
|
+
{ identifier: "video-analysis:smart:360s", credits: 1270 },
|
|
2064
|
+
{ identifier: "video-analysis:smart:600s", credits: 2081, note: "10-min ceiling" }
|
|
2065
2065
|
]
|
|
2066
2066
|
},
|
|
2067
2067
|
// ── AI Audit (`video-audit`) ── a SEPARATE node from video-analysis (own
|
|
@@ -2085,11 +2085,11 @@ var VIDEO_MODELS = {
|
|
|
2085
2085
|
description: "Re-watches a clip against a wired analysis, applies video-verified corrections under guards, and returns a disclosed report of what changed. Billed per duration bucket.",
|
|
2086
2086
|
useCases: ["video-audit", "qa", "shot-list", "verification"],
|
|
2087
2087
|
pricing: [
|
|
2088
|
-
{ identifier: "video-audit", credits:
|
|
2088
|
+
{ identifier: "video-audit", credits: 1075, note: "10-min ceiling (no duration given)" },
|
|
2089
2089
|
{ identifier: "video-audit:60s", credits: 215 },
|
|
2090
|
-
{ identifier: "video-audit:180s", credits:
|
|
2091
|
-
{ identifier: "video-audit:360s", credits:
|
|
2092
|
-
{ identifier: "video-audit:600s", credits:
|
|
2090
|
+
{ identifier: "video-audit:180s", credits: 291 },
|
|
2091
|
+
{ identifier: "video-audit:360s", credits: 664 },
|
|
2092
|
+
{ identifier: "video-audit:600s", credits: 1075, note: "10-min ceiling" }
|
|
2093
2093
|
]
|
|
2094
2094
|
},
|
|
2095
2095
|
"video-audit-auto": {
|
|
@@ -2101,11 +2101,11 @@ var VIDEO_MODELS = {
|
|
|
2101
2101
|
description: "Same video-verified audit as AI Audit, but auto-runs a fast analysis first when none is wired in, then applies corrections under guards and returns a disclosed report. Billed per duration bucket.",
|
|
2102
2102
|
useCases: ["video-audit", "qa", "shot-list", "verification", "auto-analysis"],
|
|
2103
2103
|
pricing: [
|
|
2104
|
-
{ identifier: "video-audit:auto", credits:
|
|
2104
|
+
{ identifier: "video-audit:auto", credits: 1924, note: "10-min ceiling (no duration given)" },
|
|
2105
2105
|
{ identifier: "video-audit:auto:60s", credits: 396 },
|
|
2106
|
-
{ identifier: "video-audit:auto:180s", credits:
|
|
2107
|
-
{ identifier: "video-audit:auto:360s", credits:
|
|
2108
|
-
{ identifier: "video-audit:auto:600s", credits:
|
|
2106
|
+
{ identifier: "video-audit:auto:180s", credits: 477 },
|
|
2107
|
+
{ identifier: "video-audit:auto:360s", credits: 1180 },
|
|
2108
|
+
{ identifier: "video-audit:auto:600s", credits: 1924, note: "10-min ceiling" }
|
|
2109
2109
|
]
|
|
2110
2110
|
}
|
|
2111
2111
|
};
|
|
@@ -5424,7 +5424,9 @@ var LLM_MODELS = [
|
|
|
5424
5424
|
{
|
|
5425
5425
|
id: "gemini-3.6-flash",
|
|
5426
5426
|
displayName: "Gemini 3.6 Flash",
|
|
5427
|
-
|
|
5427
|
+
// Demoted 2026-09-06 alongside 3.7: superlatives belong to the CURRENT top
|
|
5428
|
+
// model of a family only, and 3.8 now holds that slot.
|
|
5429
|
+
desc: "Fast Gemini, sharper reasoning",
|
|
5428
5430
|
tier: "economy",
|
|
5429
5431
|
kieFormat: "chat-completions",
|
|
5430
5432
|
// KIE serves Gemini 3.6 Flash on the OpenAI-compatible dialect under this
|
|
@@ -5454,7 +5456,11 @@ var LLM_MODELS = [
|
|
|
5454
5456
|
{
|
|
5455
5457
|
id: "gemini-3.7-flash",
|
|
5456
5458
|
displayName: "Gemini 3.7 Flash",
|
|
5457
|
-
|
|
5459
|
+
// Demoted 2026-09-06 when 3.8 registered below: superlatives belong to the
|
|
5460
|
+
// CURRENT top model of a family only (same rule the Opus entries follow) —
|
|
5461
|
+
// `desc` renders in every picker, so leaving "Newest" on the older flash
|
|
5462
|
+
// steers the A/B's traffic backwards.
|
|
5463
|
+
desc: "Fast Gemini, agentic-tuned",
|
|
5458
5464
|
tier: "economy",
|
|
5459
5465
|
kieFormat: "chat-completions",
|
|
5460
5466
|
// KIE serves it on the OpenAI-compatible dialect under this slug
|
|
@@ -5475,6 +5481,46 @@ var LLM_MODELS = [
|
|
|
5475
5481
|
directReasoningEfforts: ["none", "low", "medium", "high"],
|
|
5476
5482
|
directGeminiModel: "gemini-3.7-flash"
|
|
5477
5483
|
},
|
|
5484
|
+
{
|
|
5485
|
+
id: "gemini-3.8-flash",
|
|
5486
|
+
displayName: "Gemini 3.8 Flash",
|
|
5487
|
+
// Inherits "Newest" from 3.7 (demoted above). Deliberately does NOT name
|
|
5488
|
+
// agentic video: that capability exists only on the direct Google lane
|
|
5489
|
+
// (Interactions API, not wired here) and the modality caps below withhold
|
|
5490
|
+
// video — a picker desc must not promise a lever this entry cannot expose.
|
|
5491
|
+
desc: "Newest fast Gemini, agentic-tuned",
|
|
5492
|
+
tier: "economy",
|
|
5493
|
+
kieFormat: "chat-completions",
|
|
5494
|
+
// KIE serves it on the OpenAI-compatible dialect under this slug
|
|
5495
|
+
// (docs.kie.ai/market/gemini/gemini-3-8-flash-openai.md) — identical
|
|
5496
|
+
// chat-completions path shape to gemini-3.7-flash / gemini-3.6-flash,
|
|
5497
|
+
// different slug prefix.
|
|
5498
|
+
kieSlugOrModel: "gemini-3-8-flash-openai",
|
|
5499
|
+
vendor: "google",
|
|
5500
|
+
// Live-verified 2026-09-06 on the KIE lane: `response_format: json_schema`
|
|
5501
|
+
// is ENFORCED (the reply came back exact-schema valid, credits_consumed
|
|
5502
|
+
// present) — not merely accepted-and-ignored.
|
|
5503
|
+
structuredOutputMode: "kie-response-format",
|
|
5504
|
+
supportsImages: true,
|
|
5505
|
+
// 16384 here, NOT the 8192 its 3.6 / 3.7 siblings sit at. Those two stay at
|
|
5506
|
+
// the KIE-safe intersection because nobody measured their endpoints past
|
|
5507
|
+
// it; 3.8's WAS measured — live-verified 2026-09-06, `max_tokens: 20000`
|
|
5508
|
+
// was honored for 14,892 completion tokens with finish_reason "stop" (no
|
|
5509
|
+
// truncation), so the KIE lane is not the binding constraint. 16384 keeps
|
|
5510
|
+
// it level with the rest of the registry's ceiling rather than at the cap.
|
|
5511
|
+
maxOutputTokens: 16384,
|
|
5512
|
+
// KIE's 3.8 endpoint enumerates reasoning_effort low | high (its doc enum),
|
|
5513
|
+
// and usage carries completion_tokens_details.reasoning_tokens — same
|
|
5514
|
+
// KIE-safe intersection as 3.6 / 3.7, because ONE field feeds both lanes
|
|
5515
|
+
// and this model is KIE-first.
|
|
5516
|
+
reasoningEfforts: ["low", "high"],
|
|
5517
|
+
// Google's own API accepts the full minimal→high ladder here (`none` maps
|
|
5518
|
+
// to `minimal`), same as 3.7. Advanced mode is what unlocks it.
|
|
5519
|
+
directReasoningEfforts: ["none", "low", "medium", "high"],
|
|
5520
|
+
// KIE-first (no `preferDirect`) — 3.7's posture exactly: the cheap lane
|
|
5521
|
+
// serves the A/B, direct is Advanced mode + the reliability fallback.
|
|
5522
|
+
directGeminiModel: "gemini-3.8-flash"
|
|
5523
|
+
},
|
|
5478
5524
|
{
|
|
5479
5525
|
id: "claude-haiku-4.5",
|
|
5480
5526
|
displayName: "Claude Haiku 4.5",
|
|
@@ -5571,7 +5617,9 @@ var LLM_MODELS = [
|
|
|
5571
5617
|
{
|
|
5572
5618
|
id: "gpt-5.4",
|
|
5573
5619
|
displayName: "GPT-5.4",
|
|
5574
|
-
|
|
5620
|
+
// Demoted 2026-09-06: two GPT generations have shipped above it, so
|
|
5621
|
+
// "Latest" steered the picker at the oldest premium GPT in the registry.
|
|
5622
|
+
desc: "Older GPT, premium quality",
|
|
5575
5623
|
tier: "premium",
|
|
5576
5624
|
kieFormat: "responses",
|
|
5577
5625
|
kieSlugOrModel: "gpt-5-4",
|
|
@@ -5626,7 +5674,11 @@ var LLM_MODELS = [
|
|
|
5626
5674
|
{
|
|
5627
5675
|
id: "gpt-5.6-sol",
|
|
5628
5676
|
displayName: "GPT-5.6 Sol",
|
|
5629
|
-
|
|
5677
|
+
// Demoted 2026-09-06 when gpt-6-astra registered below — "Flagship /
|
|
5678
|
+
// deepest" is the current top GPT's copy only. Worded to stay distinct
|
|
5679
|
+
// from gpt-5.5's "Previous flagship GPT, deep reasoning": all three read
|
|
5680
|
+
// premium on the invoice, so a stale superlative mis-steers silently.
|
|
5681
|
+
desc: "Previous flagship GPT-5.6, deep reasoning",
|
|
5630
5682
|
tier: "premium",
|
|
5631
5683
|
kieFormat: "responses",
|
|
5632
5684
|
kieSlugOrModel: "gpt-5-6-sol",
|
|
@@ -5637,6 +5689,61 @@ var LLM_MODELS = [
|
|
|
5637
5689
|
reasoningEfforts: ["none", "low", "medium", "high", "xhigh", "max"],
|
|
5638
5690
|
supportsTemperature: false
|
|
5639
5691
|
},
|
|
5692
|
+
{
|
|
5693
|
+
id: "gpt-6-astra",
|
|
5694
|
+
displayName: "GPT-6 Astra",
|
|
5695
|
+
desc: "Flagship GPT-6, deepest reasoning",
|
|
5696
|
+
tier: "premium",
|
|
5697
|
+
kieFormat: "responses",
|
|
5698
|
+
// KIE serves GPT-6 on the responses dialect under the OpenAI family path —
|
|
5699
|
+
// codex/v1/responses, which llm-client DERIVES from `vendor` (the same
|
|
5700
|
+
// derivation that keeps Grok on grok/v1/responses). So this field is the
|
|
5701
|
+
// body `model` only, not a path segment. Live-verified 2026-09-06 on the
|
|
5702
|
+
// streaming path (array `input`, SSE deltas), which is the ONLY path we
|
|
5703
|
+
// serve it on — see `kieCollapseStream` below. The non-stream reply does
|
|
5704
|
+
// carry `credits_consumed` (and cached_tokens/cache_write_tokens in usage)
|
|
5705
|
+
// on the ~1 call in 3 that returns one, but we no longer take that reply,
|
|
5706
|
+
// so provider cost here is the rate-table estimate.
|
|
5707
|
+
// KIE's codex/v1/responses injects its own Codex-agent `instructions`
|
|
5708
|
+
// prompt ABOVE the caller's `developer` message — observed in the
|
|
5709
|
+
// 2026-07-14 live probe of that endpoint, and unchanged for GPT-6. Budget
|
|
5710
|
+
// for it when a developer message has to dominate.
|
|
5711
|
+
kieSlugOrModel: "gpt-6-astra",
|
|
5712
|
+
vendor: "openai",
|
|
5713
|
+
// Live-verified 2026-09-06: `text.format: json_schema` is passed through
|
|
5714
|
+
// and ENFORCED — the server echoed `strict: true` and returned
|
|
5715
|
+
// schema-valid JSON.
|
|
5716
|
+
structuredOutputMode: "responses-json-schema",
|
|
5717
|
+
// text + image + file inputs per KIE's doc. No video/audio — see the
|
|
5718
|
+
// image-only LLM_MODALITY_CAPS row below.
|
|
5719
|
+
supportsImages: true,
|
|
5720
|
+
maxOutputTokens: 16384,
|
|
5721
|
+
// KIE's documented enum for this endpoint. No `none` on purpose: the
|
|
5722
|
+
// endpoint reasons unconditionally (see thinkingDefaultOn below), so a
|
|
5723
|
+
// "none" level would be a lie the wire silently overrides.
|
|
5724
|
+
reasoningEfforts: ["low", "medium", "high", "xhigh"],
|
|
5725
|
+
// Live-probed 2026-09-06: `temperature: 0.2` was sent and the request echo
|
|
5726
|
+
// stayed at 1.0 — silently IGNORED, so never send it. Same treatment as the
|
|
5727
|
+
// GPT-5.6 family and grok-4.6.
|
|
5728
|
+
supportsTemperature: false,
|
|
5729
|
+
// With NO reasoning param sent, the server echoed effort "medium" — it
|
|
5730
|
+
// reasons by default (2026-09-06), so reasoning tokens share `max_tokens`
|
|
5731
|
+
// on EVERY call, not just effort-bearing ones. Consumers must floor output
|
|
5732
|
+
// headroom off this flag or a premium answer truncates into a paid-for
|
|
5733
|
+
// empty reply.
|
|
5734
|
+
thinkingDefaultOn: true,
|
|
5735
|
+
// Measured 2026-09-06, 12 identical requests (developer + user message,
|
|
5736
|
+
// reasoning.effort low, text.format json_schema): `stream: false`
|
|
5737
|
+
// succeeded 2/6 in 4–5 s and 500'd 4/6 with
|
|
5738
|
+
// {"error":{"type":"server_error"}} after 34, 34, 35 and 64 s, while the
|
|
5739
|
+
// same body with `stream: true` succeeded 5/6 in the same 4–5 s. An
|
|
5740
|
+
// earlier non-stream probe timed out at 90 s with 0 bytes, and a
|
|
5741
|
+
// non-stream call WITHOUT a schema 500'd after 65 s — the schema is not
|
|
5742
|
+
// the trigger, the non-stream lane is. The very same endpoint serves
|
|
5743
|
+
// gpt-5.4/5.5/5.6 non-stream reliably (live-verified 2026-07-14), which is
|
|
5744
|
+
// why this is per-model and not a lane-wide flag.
|
|
5745
|
+
kieCollapseStream: true
|
|
5746
|
+
},
|
|
5640
5747
|
{
|
|
5641
5748
|
id: "grok-4.6",
|
|
5642
5749
|
displayName: "Grok 4.6",
|
|
@@ -5791,6 +5898,15 @@ var LLM_MODALITY_CAPS = {
|
|
|
5791
5898
|
// deferred while the smart-family A/B routes this model internally (#747).
|
|
5792
5899
|
// Flip these two flags ONLY together with that VA-side decision.
|
|
5793
5900
|
"gemini-3.7-flash": { image: true, video: false, audio: false },
|
|
5901
|
+
// gemini-3.8-flash is IMAGE-ONLY by DECISION, not omission — 3.7's rationale
|
|
5902
|
+
// exactly: full video+audio caps would auto-enroll it in
|
|
5903
|
+
// VIDEO_ANALYSIS_LLM_MODELS (derived below) and force a video-analysis tier +
|
|
5904
|
+
// pricing decision that stays deferred until the 3.8-vs-3.7 analysis A/B
|
|
5905
|
+
// concludes. Google's own 3.8 lane DOES understand video (agentic video, via
|
|
5906
|
+
// the Interactions API we don't wire) — which is precisely why withholding it
|
|
5907
|
+
// has to be a decision rather than a gap. Flip these two flags ONLY together
|
|
5908
|
+
// with that VA-side decision.
|
|
5909
|
+
"gemini-3.8-flash": { image: true, video: false, audio: false },
|
|
5794
5910
|
"gemini-3.1-pro": { image: true, video: true, audio: true },
|
|
5795
5911
|
"claude-haiku-4.5": { image: true, video: false, audio: false },
|
|
5796
5912
|
"claude-sonnet-4.6": { image: true, video: false, audio: false },
|
|
@@ -5801,6 +5917,8 @@ var LLM_MODALITY_CAPS = {
|
|
|
5801
5917
|
"gpt-5.6-luna": { image: true, video: false, audio: false },
|
|
5802
5918
|
"gpt-5.6-terra": { image: true, video: false, audio: false },
|
|
5803
5919
|
"gpt-5.6-sol": { image: true, video: false, audio: false },
|
|
5920
|
+
// KIE's GPT-6 doc lists text + image + file inputs only — no video, no audio.
|
|
5921
|
+
"gpt-6-astra": { image: true, video: false, audio: false },
|
|
5804
5922
|
"grok-4.6": { image: true, video: false, audio: false },
|
|
5805
5923
|
"claude-sonnet-5": { image: true, video: false, audio: false },
|
|
5806
5924
|
"claude-opus-4.8": { image: true, video: false, audio: false },
|
|
@@ -14287,36 +14405,36 @@ var VIDEO_ANALYSIS_WINDOW = { LEN: WINDOW_LEN, STRIDE: WINDOW_STRIDE, OVERLAP: W
|
|
|
14287
14405
|
var VIDEO_ANALYSIS_BUCKET_CREDITS = {
|
|
14288
14406
|
// Legacy fast-tier model (pre-2026-07) — kept for stored raw-id configs.
|
|
14289
14407
|
"video-analysis:gemini-3-flash:60s": 181,
|
|
14290
|
-
"video-analysis:gemini-3-flash:180s":
|
|
14291
|
-
"video-analysis:gemini-3-flash:360s":
|
|
14292
|
-
"video-analysis:gemini-3-flash:600s":
|
|
14408
|
+
"video-analysis:gemini-3-flash:180s": 186,
|
|
14409
|
+
"video-analysis:gemini-3-flash:360s": 516,
|
|
14410
|
+
"video-analysis:gemini-3-flash:600s": 849,
|
|
14293
14411
|
// Current fast tier — regenerated from the private formula for its backing
|
|
14294
14412
|
// model; higher than the legacy fast schedule but still ≤ pro per bucket.
|
|
14295
|
-
"video-analysis:gemini-3.6-flash:60s":
|
|
14413
|
+
"video-analysis:gemini-3.6-flash:60s": 205,
|
|
14296
14414
|
"video-analysis:gemini-3.6-flash:180s": 219,
|
|
14297
|
-
"video-analysis:gemini-3.6-flash:360s":
|
|
14298
|
-
"video-analysis:gemini-3.6-flash:600s":
|
|
14299
|
-
"video-analysis:gemini-3.1-pro:60s":
|
|
14300
|
-
"video-analysis:gemini-3.1-pro:180s":
|
|
14301
|
-
"video-analysis:gemini-3.1-pro:360s":
|
|
14302
|
-
"video-analysis:gemini-3.1-pro:600s":
|
|
14415
|
+
"video-analysis:gemini-3.6-flash:360s": 603,
|
|
14416
|
+
"video-analysis:gemini-3.6-flash:600s": 995,
|
|
14417
|
+
"video-analysis:gemini-3.1-pro:60s": 217,
|
|
14418
|
+
"video-analysis:gemini-3.1-pro:180s": 233,
|
|
14419
|
+
"video-analysis:gemini-3.1-pro:360s": 642,
|
|
14420
|
+
"video-analysis:gemini-3.1-pro:600s": 1059,
|
|
14303
14421
|
// Mixed tiers (`mixed` + `mixed-fast`) share ONE credit family — they are
|
|
14304
14422
|
// variants of the same engine plan (plan internals live in the private
|
|
14305
14423
|
// analysis plugin). Admin-tunable via model_pricing like every other row.
|
|
14306
14424
|
"video-analysis:mixed:60s": 270,
|
|
14307
|
-
"video-analysis:mixed:180s":
|
|
14308
|
-
"video-analysis:mixed:360s":
|
|
14309
|
-
"video-analysis:mixed:600s":
|
|
14425
|
+
"video-analysis:mixed:180s": 292,
|
|
14426
|
+
"video-analysis:mixed:360s": 731,
|
|
14427
|
+
"video-analysis:mixed:600s": 1181,
|
|
14310
14428
|
// SMART — the accuracy tier, and since the 2026-08-03 re-plan a multi-roll
|
|
14311
14429
|
// plan like the others, always refined (`selectionMode` does not apply
|
|
14312
14430
|
// here — smart always refines; it never offers a cheaper "choose" path).
|
|
14313
14431
|
// Priced above the economy tiers because it genuinely costs more to run;
|
|
14314
14432
|
// the only tier whose accuracy is validated against a hand-counted edit
|
|
14315
14433
|
// list, re-validated at the current plan before this schedule shipped.
|
|
14316
|
-
"video-analysis:smart:60s":
|
|
14317
|
-
"video-analysis:smart:180s":
|
|
14318
|
-
"video-analysis:smart:360s":
|
|
14319
|
-
"video-analysis:smart:600s":
|
|
14434
|
+
"video-analysis:smart:60s": 414,
|
|
14435
|
+
"video-analysis:smart:180s": 504,
|
|
14436
|
+
"video-analysis:smart:360s": 1270,
|
|
14437
|
+
"video-analysis:smart:600s": 2081
|
|
14320
14438
|
};
|
|
14321
14439
|
function videoAnalysisCreditSegment(modelOrSentinel) {
|
|
14322
14440
|
return modelOrSentinel === "mixed-fast" ? "mixed" : modelOrSentinel;
|
|
@@ -14338,13 +14456,13 @@ function videoAnalysisNumWindows(bucketSec) {
|
|
|
14338
14456
|
}
|
|
14339
14457
|
var VIDEO_AUDIT_BUCKET_CREDITS = {
|
|
14340
14458
|
"video-audit:60s": 215,
|
|
14341
|
-
"video-audit:180s":
|
|
14342
|
-
"video-audit:360s":
|
|
14343
|
-
"video-audit:600s":
|
|
14459
|
+
"video-audit:180s": 291,
|
|
14460
|
+
"video-audit:360s": 664,
|
|
14461
|
+
"video-audit:600s": 1075,
|
|
14344
14462
|
"video-audit:auto:60s": 396,
|
|
14345
|
-
"video-audit:auto:180s":
|
|
14346
|
-
"video-audit:auto:360s":
|
|
14347
|
-
"video-audit:auto:600s":
|
|
14463
|
+
"video-audit:auto:180s": 477,
|
|
14464
|
+
"video-audit:auto:360s": 1180,
|
|
14465
|
+
"video-audit:auto:600s": 1924
|
|
14348
14466
|
};
|
|
14349
14467
|
function buildVideoAuditCreditId(args) {
|
|
14350
14468
|
const { analysisProvided, durationSec } = args;
|