@dcdr/contracts 2.2.0 → 2.3.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.
Files changed (75) hide show
  1. package/dist/asset.contract.d.ts +195 -0
  2. package/dist/asset.contract.d.ts.map +1 -0
  3. package/dist/asset.contract.js +60 -0
  4. package/dist/catalog/anthropic.contract.d.ts +11 -0
  5. package/dist/catalog/anthropic.contract.d.ts.map +1 -0
  6. package/dist/catalog/anthropic.contract.js +342 -0
  7. package/dist/catalog/clip.contract.d.ts +10 -0
  8. package/dist/catalog/clip.contract.d.ts.map +1 -0
  9. package/dist/catalog/clip.contract.js +16 -0
  10. package/dist/catalog/cohere.contract.d.ts +10 -0
  11. package/dist/catalog/cohere.contract.d.ts.map +1 -0
  12. package/dist/catalog/cohere.contract.js +16 -0
  13. package/dist/catalog/dcdr.contract.d.ts +10 -0
  14. package/dist/catalog/dcdr.contract.d.ts.map +1 -0
  15. package/dist/catalog/dcdr.contract.js +16 -0
  16. package/dist/catalog/gemini.contract.d.ts +10 -0
  17. package/dist/catalog/gemini.contract.d.ts.map +1 -0
  18. package/dist/catalog/gemini.contract.js +1067 -0
  19. package/dist/catalog/grok.contract.d.ts +10 -0
  20. package/dist/catalog/grok.contract.d.ts.map +1 -0
  21. package/dist/catalog/grok.contract.js +194 -0
  22. package/dist/catalog/http-tool.contract.d.ts +10 -0
  23. package/dist/catalog/http-tool.contract.d.ts.map +1 -0
  24. package/dist/catalog/http-tool.contract.js +16 -0
  25. package/dist/catalog/mistral.contract.d.ts +10 -0
  26. package/dist/catalog/mistral.contract.d.ts.map +1 -0
  27. package/dist/catalog/mistral.contract.js +234 -0
  28. package/dist/catalog/ocr.contract.d.ts +10 -0
  29. package/dist/catalog/ocr.contract.d.ts.map +1 -0
  30. package/dist/catalog/ocr.contract.js +16 -0
  31. package/dist/catalog/office.contract.d.ts +10 -0
  32. package/dist/catalog/office.contract.d.ts.map +1 -0
  33. package/dist/catalog/office.contract.js +53 -0
  34. package/dist/catalog/ollama.contract.d.ts +10 -0
  35. package/dist/catalog/ollama.contract.d.ts.map +1 -0
  36. package/dist/catalog/ollama.contract.js +16 -0
  37. package/dist/catalog/openai-compatible.contract.d.ts +10 -0
  38. package/dist/catalog/openai-compatible.contract.d.ts.map +1 -0
  39. package/dist/catalog/openai-compatible.contract.js +16 -0
  40. package/dist/catalog/openai.contract.d.ts +11 -0
  41. package/dist/catalog/openai.contract.d.ts.map +1 -0
  42. package/dist/catalog/openai.contract.js +2654 -0
  43. package/dist/catalog/rules.contract.d.ts +10 -0
  44. package/dist/catalog/rules.contract.d.ts.map +1 -0
  45. package/dist/catalog/rules.contract.js +16 -0
  46. package/dist/entitlements.contract.d.ts +3 -0
  47. package/dist/entitlements.contract.d.ts.map +1 -1
  48. package/dist/execution.contract.d.ts +122 -0
  49. package/dist/execution.contract.d.ts.map +1 -1
  50. package/dist/execution.contract.js +17 -1
  51. package/dist/index.d.ts +1 -0
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +9 -0
  54. package/dist/policies.contract.d.ts +19 -0
  55. package/dist/policies.contract.d.ts.map +1 -1
  56. package/dist/policies.contract.js +24 -1
  57. package/dist/prompt-variable-schema.contract.d.ts +8 -1
  58. package/dist/prompt-variable-schema.contract.d.ts.map +1 -1
  59. package/dist/prompt-variable-schema.contract.js +109 -4
  60. package/dist/prompts.contract.d.ts +14 -8
  61. package/dist/prompts.contract.d.ts.map +1 -1
  62. package/dist/prompts.contract.js +12 -1
  63. package/dist/provider.catalog.contract.d.ts +459 -0
  64. package/dist/provider.catalog.contract.d.ts.map +1 -0
  65. package/dist/provider.catalog.contract.js +765 -0
  66. package/dist/provider.contract.d.ts +4 -352
  67. package/dist/provider.contract.d.ts.map +1 -1
  68. package/dist/provider.contract.js +16 -3634
  69. package/dist/runtime.client.d.ts +54 -1
  70. package/dist/runtime.client.d.ts.map +1 -1
  71. package/dist/runtime.client.js +185 -0
  72. package/dist/utils.contract.d.ts +33 -0
  73. package/dist/utils.contract.d.ts.map +1 -1
  74. package/dist/utils.contract.js +35 -0
  75. package/package.json +52 -24
@@ -0,0 +1,1067 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildGeminiProviderModelDefinitions = buildGeminiProviderModelDefinitions;
4
+ exports.buildGeminiProviderModelE2EOverrides = buildGeminiProviderModelE2EOverrides;
5
+ const asset_contract_1 = require("../asset.contract");
6
+ const execution_contract_1 = require("../execution.contract");
7
+ const intent_contract_1 = require("../intent.contract");
8
+ const GEMINI_PRICING_URL = "https://ai.google.dev/gemini-api/docs/pricing";
9
+ const GEMINI_PRICING_UPDATED_AT_20260519 = Date.UTC(2026, 4, 19);
10
+ function pricingGeminiPerMillionTokens(args) {
11
+ return args.pricingPerMillionTokens({
12
+ input: args.input,
13
+ output: args.output,
14
+ tiers: args.tiers,
15
+ sourceUrl: GEMINI_PRICING_URL,
16
+ updatedAt: GEMINI_PRICING_UPDATED_AT_20260519,
17
+ confidence: "official",
18
+ notes: args.notes,
19
+ });
20
+ }
21
+ /**
22
+ * Returns the curated Gemini provider model definitions.
23
+ */
24
+ function buildGeminiProviderModelDefinitions(args) {
25
+ const pricingGemini = (pricingArgs) => {
26
+ return pricingGeminiPerMillionTokens({
27
+ pricingPerMillionTokens: args.pricingPerMillionTokens,
28
+ input: pricingArgs.input,
29
+ output: pricingArgs.output,
30
+ tiers: pricingArgs.tiers,
31
+ notes: pricingArgs.notes,
32
+ });
33
+ };
34
+ return [
35
+ // Source: Gemini Models API (`npm run gemini-models:sync`), updated 2026-05-04
36
+ // Notes:
37
+ // - DCDR runtime v1 implements Gemini for CHAT only (via generateContent / generateContentStream).
38
+ // - Embedding models are cataloged as EMBEDDING, but the runtime does not yet implement a Gemini embedding adapter.
39
+ // --- Validated starter model ---
40
+ {
41
+ id: "gemini-2.5-flash",
42
+ types: [intent_contract_1.IntentType.CHAT],
43
+ publicForCustomers: true,
44
+ tokenUsageCovered: true,
45
+ publicName: "DCDR Economy",
46
+ badge: "Fast",
47
+ primaryCategory: args.catalogEnums.publicModelCategory.ECONOMY,
48
+ categories: [
49
+ args.catalogEnums.publicModelCategory.ECONOMY,
50
+ args.catalogEnums.publicModelCategory.FAST,
51
+ ],
52
+ qualityTier: 3,
53
+ speedTier: 4,
54
+ costTier: 5,
55
+ recommendedUseCases: ["high_volume_chat", "extraction", "classification"],
56
+ isRecommended: false,
57
+ isGlobalDefault: false,
58
+ isCategoryDefault: true,
59
+ pricing: pricingGemini({
60
+ input: 0.3,
61
+ output: 2.5,
62
+ tiers: [{ name: "audio", condition: "audio", input: 1.0, output: 2.5 }],
63
+ notes: "Prices may differ by modality; output includes thinking tokens.",
64
+ }),
65
+ runtimeSupport: {
66
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
67
+ reason: "Validated via provider E2E (run + structured + streaming SSE)",
68
+ updatedAt: "2026-05-04",
69
+ inputParts: {
70
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
71
+ supportedAssetTypes: [
72
+ asset_contract_1.AssetType.TEXT,
73
+ asset_contract_1.AssetType.IMAGE,
74
+ asset_contract_1.AssetType.AUDIO,
75
+ asset_contract_1.AssetType.VIDEO,
76
+ asset_contract_1.AssetType.DOCUMENT,
77
+ ],
78
+ supportedSourceKinds: [
79
+ execution_contract_1.ExecutionPartSourceKind.INLINE,
80
+ execution_contract_1.ExecutionPartSourceKind.URL,
81
+ execution_contract_1.ExecutionPartSourceKind.ASSET,
82
+ ],
83
+ notes: "Validated with comprehension-grade Gemini curator using the canonical shared fixtures across TEXT/IMAGE/AUDIO/VIDEO/DOCUMENT and INLINE/URL/ASSET.",
84
+ updatedAt: "2026-06-17",
85
+ },
86
+ },
87
+ parameterSupport: {
88
+ recommended: {
89
+ disableThinkingByDefault: true,
90
+ useNativeStructuredOutput: true,
91
+ },
92
+ updatedAt: "2026-05-04",
93
+ },
94
+ },
95
+ // --- Newer preview families (pending E2E curation) ---
96
+ // Discovered via Gemini Models API (2026-05-22).
97
+ {
98
+ id: "gemini-3.5-flash",
99
+ types: [intent_contract_1.IntentType.CHAT],
100
+ publicForCustomers: true,
101
+ tokenUsageCovered: true,
102
+ publicName: "DCDR Smart",
103
+ badge: "Fast",
104
+ primaryCategory: args.catalogEnums.publicModelCategory.SMART,
105
+ categories: [
106
+ args.catalogEnums.publicModelCategory.SMART,
107
+ args.catalogEnums.publicModelCategory.FAST,
108
+ ],
109
+ qualityTier: 4,
110
+ speedTier: 5,
111
+ costTier: 4,
112
+ recommendedUseCases: ["production_chat", "interactive_chat", "support"],
113
+ isRecommended: true,
114
+ isGlobalDefault: true,
115
+ isCategoryDefault: true,
116
+ pricing: pricingGemini({
117
+ input: 1.5,
118
+ output: 9.0,
119
+ notes: "Output price includes thinking tokens.",
120
+ }),
121
+ runtimeSupport: {
122
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
123
+ reason: "Validated via provider E2E (text + structured); requires default thinking disable under small token budgets",
124
+ updatedAt: "2026-05-22",
125
+ inputParts: {
126
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
127
+ supportedAssetTypes: [
128
+ asset_contract_1.AssetType.TEXT,
129
+ asset_contract_1.AssetType.IMAGE,
130
+ asset_contract_1.AssetType.AUDIO,
131
+ asset_contract_1.AssetType.VIDEO,
132
+ asset_contract_1.AssetType.DOCUMENT,
133
+ ],
134
+ supportedSourceKinds: [
135
+ execution_contract_1.ExecutionPartSourceKind.INLINE,
136
+ execution_contract_1.ExecutionPartSourceKind.URL,
137
+ execution_contract_1.ExecutionPartSourceKind.ASSET,
138
+ ],
139
+ notes: "Validated with comprehension-grade Gemini curator using the canonical shared fixtures across TEXT/IMAGE/AUDIO/VIDEO/DOCUMENT and INLINE/URL/ASSET.",
140
+ updatedAt: "2026-06-17",
141
+ },
142
+ },
143
+ parameterSupport: {
144
+ recommended: {
145
+ disableThinkingByDefault: true,
146
+ },
147
+ updatedAt: "2026-05-22",
148
+ },
149
+ },
150
+ {
151
+ id: "gemini-3.1-pro-preview-customtools",
152
+ types: [intent_contract_1.IntentType.CHAT],
153
+ pricing: pricingGemini({
154
+ input: 2.0,
155
+ output: 12.0,
156
+ tiers: [
157
+ {
158
+ name: "prompts <= 200k",
159
+ condition: "prompts <= 200k tokens",
160
+ input: 2.0,
161
+ output: 12.0,
162
+ },
163
+ {
164
+ name: "prompts > 200k",
165
+ condition: "prompts > 200k tokens",
166
+ input: 4.0,
167
+ output: 18.0,
168
+ },
169
+ ],
170
+ notes: "Output price includes thinking tokens.",
171
+ }),
172
+ runtimeSupport: {
173
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
174
+ reason: "Validated via provider E2E (text + structured + streaming SSE) with larger token budgets; model uses thinking",
175
+ updatedAt: "2026-05-04",
176
+ inputParts: {
177
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
178
+ supportedAssetTypes: [
179
+ asset_contract_1.AssetType.TEXT,
180
+ asset_contract_1.AssetType.AUDIO,
181
+ asset_contract_1.AssetType.VIDEO,
182
+ asset_contract_1.AssetType.DOCUMENT,
183
+ ],
184
+ supportedSourceKinds: [
185
+ execution_contract_1.ExecutionPartSourceKind.INLINE,
186
+ execution_contract_1.ExecutionPartSourceKind.URL,
187
+ execution_contract_1.ExecutionPartSourceKind.ASSET,
188
+ ],
189
+ notes: "Validated with the comprehension-grade Gemini curator after restoring thinking for pro-family structured probes: TEXT/AUDIO/VIDEO/DOCUMENT pass across INLINE/URL/ASSET. IMAGE remains outside the published support rectangle after failing the canonical image comprehension cue, and one IMAGE URL run also surfaced a transient upstream fetch error.",
190
+ updatedAt: "2026-06-18",
191
+ },
192
+ },
193
+ },
194
+ {
195
+ id: "gemini-3.1-pro-preview",
196
+ types: [intent_contract_1.IntentType.CHAT],
197
+ publicForCustomers: true,
198
+ tokenUsageCovered: true,
199
+ publicName: "DCDR Best",
200
+ badge: "Gemini",
201
+ primaryCategory: args.catalogEnums.publicModelCategory.BEST,
202
+ categories: [args.catalogEnums.publicModelCategory.BEST],
203
+ qualityTier: 5,
204
+ speedTier: 3,
205
+ costTier: 3,
206
+ recommendedUseCases: ["reasoning", "agentic_coding", "long_context"],
207
+ isRecommended: false,
208
+ isGlobalDefault: false,
209
+ isCategoryDefault: false,
210
+ pricing: pricingGemini({
211
+ input: 2.0,
212
+ output: 12.0,
213
+ tiers: [
214
+ {
215
+ name: "prompts <= 200k",
216
+ condition: "prompts <= 200k tokens",
217
+ input: 2.0,
218
+ output: 12.0,
219
+ },
220
+ {
221
+ name: "prompts > 200k",
222
+ condition: "prompts > 200k tokens",
223
+ input: 4.0,
224
+ output: 18.0,
225
+ },
226
+ ],
227
+ notes: "Output price includes thinking tokens.",
228
+ }),
229
+ runtimeSupport: {
230
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
231
+ reason: "Validated via provider E2E (text + structured + streaming SSE) with larger token budgets; model uses thinking",
232
+ updatedAt: "2026-05-04",
233
+ inputParts: {
234
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
235
+ supportedAssetTypes: [
236
+ asset_contract_1.AssetType.TEXT,
237
+ asset_contract_1.AssetType.AUDIO,
238
+ asset_contract_1.AssetType.VIDEO,
239
+ asset_contract_1.AssetType.DOCUMENT,
240
+ ],
241
+ supportedSourceKinds: [
242
+ execution_contract_1.ExecutionPartSourceKind.INLINE,
243
+ execution_contract_1.ExecutionPartSourceKind.URL,
244
+ execution_contract_1.ExecutionPartSourceKind.ASSET,
245
+ ],
246
+ notes: "Re-curated on 2026-06-28 with the 1024-token baseline: AUDIO/VIDEO/DOCUMENT pass across INLINE/URL/ASSET. TEXT passed INLINE and URL but showed PARSE_FAIL on ASSET (inconsistent with June 18 confirmation; treated as transient). IMAGE fails the canonical visual cue across all source kinds.",
247
+ updatedAt: "2026-06-28",
248
+ },
249
+ },
250
+ },
251
+ {
252
+ id: "gemini-3.1-flash-tts-preview",
253
+ types: [intent_contract_1.IntentType.CHAT],
254
+ pricing: pricingGemini({
255
+ input: 1.0,
256
+ output: 20.0,
257
+ notes: "TTS preview: output billed as audio tokens (docs: ~25 tokens/sec).",
258
+ }),
259
+ runtimeSupport: {
260
+ status: args.catalogEnums.runtimeSupportStatus.NOT_SUPPORTED,
261
+ reason: "Rejects developer/system instruction in runtime prompt shape (400 INVALID_ARGUMENT)",
262
+ updatedAt: "2026-05-04",
263
+ },
264
+ },
265
+ {
266
+ id: "gemini-3.1-flash-live-preview",
267
+ types: [intent_contract_1.IntentType.CHAT],
268
+ pricing: pricingGemini({
269
+ input: 0.75,
270
+ output: 4.5,
271
+ tiers: [
272
+ { name: "audio", condition: "audio", input: 3.0, output: 12.0 },
273
+ {
274
+ name: "image/video",
275
+ condition: "image/video",
276
+ input: 1.0,
277
+ output: 4.5,
278
+ },
279
+ ],
280
+ notes: "Live preview pricing varies by modality; docs also list per-minute rates for audio/video.",
281
+ }),
282
+ runtimeSupport: {
283
+ status: args.catalogEnums.runtimeSupportStatus.FAILING,
284
+ reason: "Model/endpoint not found (404) in provider E2E for this account",
285
+ updatedAt: "2026-05-04",
286
+ },
287
+ },
288
+ {
289
+ id: "gemini-3.1-flash-lite-preview",
290
+ types: [intent_contract_1.IntentType.CHAT],
291
+ pricing: pricingGemini({
292
+ input: 0.25,
293
+ output: 1.5,
294
+ tiers: [{ name: "audio", condition: "audio", input: 0.5, output: 1.5 }],
295
+ notes: "Prices may differ by modality; output includes thinking tokens.",
296
+ }),
297
+ runtimeSupport: {
298
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
299
+ reason: "Validated via provider E2E (text + structured + streaming SSE)",
300
+ updatedAt: "2026-05-04",
301
+ inputParts: {
302
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
303
+ supportedAssetTypes: [
304
+ asset_contract_1.AssetType.TEXT,
305
+ asset_contract_1.AssetType.VIDEO,
306
+ asset_contract_1.AssetType.DOCUMENT,
307
+ ],
308
+ supportedSourceKinds: [
309
+ execution_contract_1.ExecutionPartSourceKind.INLINE,
310
+ execution_contract_1.ExecutionPartSourceKind.URL,
311
+ execution_contract_1.ExecutionPartSourceKind.ASSET,
312
+ ],
313
+ notes: "Re-curated on 2026-06-28 with the 1024-token baseline: TEXT/VIDEO/DOCUMENT pass INLINE and ASSET; IMAGE and AUDIO fail the canonical comprehension cues. URL fixtures were unavailable this run (SKIPPED_NO_FIXTURE); URL was confirmed passing in the June 17 prior curation.",
314
+ updatedAt: "2026-06-28",
315
+ },
316
+ },
317
+ },
318
+ // Discovered via Gemini Models API (2026-05-22).
319
+ {
320
+ id: "gemini-3.1-flash-lite",
321
+ types: [intent_contract_1.IntentType.CHAT],
322
+ pricing: pricingGemini({
323
+ input: 0.25,
324
+ output: 1.5,
325
+ tiers: [{ name: "audio", condition: "audio", input: 0.5, output: 1.5 }],
326
+ notes: "Prices may differ by modality; output includes thinking tokens.",
327
+ }),
328
+ runtimeSupport: {
329
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
330
+ reason: "Validated via provider E2E (text + structured)",
331
+ updatedAt: "2026-05-22",
332
+ inputParts: {
333
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
334
+ supportedAssetTypes: [
335
+ asset_contract_1.AssetType.TEXT,
336
+ asset_contract_1.AssetType.AUDIO,
337
+ asset_contract_1.AssetType.DOCUMENT,
338
+ ],
339
+ supportedSourceKinds: [
340
+ execution_contract_1.ExecutionPartSourceKind.INLINE,
341
+ execution_contract_1.ExecutionPartSourceKind.URL,
342
+ execution_contract_1.ExecutionPartSourceKind.ASSET,
343
+ ],
344
+ notes: "Re-curated on 2026-06-28 with the 1024-token baseline: TEXT/AUDIO/DOCUMENT pass INLINE and ASSET; IMAGE and VIDEO fail the canonical comprehension cues. URL fixtures were unavailable this run (SKIPPED_NO_FIXTURE); URL was confirmed passing in the June 17 prior curation.",
345
+ updatedAt: "2026-06-28",
346
+ },
347
+ },
348
+ parameterSupport: {
349
+ recommended: {
350
+ useNativeStructuredOutput: true,
351
+ },
352
+ updatedAt: "2026-05-22",
353
+ },
354
+ },
355
+ {
356
+ id: "gemini-3.1-flash-image-preview",
357
+ types: [intent_contract_1.IntentType.IMAGE_GENERATION],
358
+ pricing: pricingGemini({
359
+ input: 0.5,
360
+ output: 3.0,
361
+ notes: "Image-preview model; docs list separate image output pricing (not modeled here).",
362
+ }),
363
+ runtimeSupport: {
364
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
365
+ reason: "Validated via provider E2E (text + structured + streaming SSE)",
366
+ updatedAt: "2026-05-04",
367
+ inputParts: {
368
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
369
+ supportedAssetTypes: [
370
+ asset_contract_1.AssetType.TEXT,
371
+ asset_contract_1.AssetType.IMAGE,
372
+ asset_contract_1.AssetType.VIDEO,
373
+ asset_contract_1.AssetType.DOCUMENT,
374
+ ],
375
+ supportedSourceKinds: [
376
+ execution_contract_1.ExecutionPartSourceKind.INLINE,
377
+ execution_contract_1.ExecutionPartSourceKind.URL,
378
+ execution_contract_1.ExecutionPartSourceKind.ASSET,
379
+ ],
380
+ notes: "Validated with the comprehension-grade Gemini curator for TEXT/IMAGE/VIDEO/DOCUMENT across INLINE/URL/ASSET. AUDIO remains outside the published support rectangle after failing the current canonical comprehension thresholds.",
381
+ updatedAt: "2026-06-17",
382
+ },
383
+ },
384
+ },
385
+ {
386
+ id: "gemini-3.1-flash-image",
387
+ types: [intent_contract_1.IntentType.IMAGE_GENERATION],
388
+ runtimeSupport: {
389
+ status: args.catalogEnums.runtimeSupportStatus.IN_PROGRESS,
390
+ reason: "Discovered in provider drift check; pending provider E2E curation for runtime image behavior.",
391
+ updatedAt: "2026-06-07",
392
+ },
393
+ },
394
+ {
395
+ id: "gemini-3-pro-preview",
396
+ types: [intent_contract_1.IntentType.CHAT],
397
+ pricing: {
398
+ ...pricingGemini({
399
+ input: 2.0,
400
+ output: 12.0,
401
+ tiers: [
402
+ {
403
+ name: "prompts <= 200k",
404
+ condition: "prompts <= 200k tokens",
405
+ input: 2.0,
406
+ output: 12.0,
407
+ },
408
+ {
409
+ name: "prompts > 200k",
410
+ condition: "prompts > 200k tokens",
411
+ input: 4.0,
412
+ output: 18.0,
413
+ },
414
+ ],
415
+ notes: "Output price includes thinking tokens.",
416
+ }),
417
+ confidence: "approx",
418
+ notes: "Not explicitly listed on pricing page; approximated from Gemini 3.1 Pro Preview.",
419
+ },
420
+ runtimeSupport: {
421
+ status: args.catalogEnums.runtimeSupportStatus.FAILING,
422
+ reason: "Provider E2E still returns MODEL_NOT_FOUND (upstream 404) for this account/endpoint.",
423
+ updatedAt: "2026-06-18",
424
+ },
425
+ },
426
+ {
427
+ id: "gemini-3-pro-image",
428
+ types: [intent_contract_1.IntentType.IMAGE_GENERATION],
429
+ runtimeSupport: {
430
+ status: args.catalogEnums.runtimeSupportStatus.IN_PROGRESS,
431
+ reason: "Discovered in provider drift check; pending provider E2E curation for runtime image behavior.",
432
+ updatedAt: "2026-06-07",
433
+ },
434
+ },
435
+ {
436
+ id: "gemini-3-pro-image-preview",
437
+ types: [intent_contract_1.IntentType.IMAGE_GENERATION],
438
+ pricing: pricingGemini({
439
+ input: 2.0,
440
+ output: 12.0,
441
+ tiers: [
442
+ {
443
+ name: "prompts <= 200k",
444
+ condition: "prompts <= 200k tokens",
445
+ input: 2.0,
446
+ output: 12.0,
447
+ },
448
+ {
449
+ name: "prompts > 200k",
450
+ condition: "prompts > 200k tokens",
451
+ input: 4.0,
452
+ output: 18.0,
453
+ },
454
+ ],
455
+ notes: "Image generation model; text pricing is the same as Gemini 3.1 Pro (image output priced separately).",
456
+ }),
457
+ runtimeSupport: {
458
+ status: args.catalogEnums.runtimeSupportStatus.FAILING,
459
+ reason: "Structured mode returned empty text in provider E2E (streaming SSE OK)",
460
+ updatedAt: "2026-05-04",
461
+ },
462
+ },
463
+ {
464
+ id: "gemini-3-flash-preview",
465
+ types: [intent_contract_1.IntentType.CHAT],
466
+ publicForCustomers: true,
467
+ tokenUsageCovered: true,
468
+ publicName: "DCDR Fast",
469
+ badge: "Gemini",
470
+ primaryCategory: args.catalogEnums.publicModelCategory.FAST,
471
+ categories: [
472
+ args.catalogEnums.publicModelCategory.FAST,
473
+ args.catalogEnums.publicModelCategory.ECONOMY,
474
+ ],
475
+ qualityTier: 3,
476
+ speedTier: 5,
477
+ costTier: 4,
478
+ recommendedUseCases: ["interactive_chat", "support", "rewriting"],
479
+ isRecommended: false,
480
+ isGlobalDefault: false,
481
+ isCategoryDefault: false,
482
+ pricing: pricingGemini({
483
+ input: 0.5,
484
+ output: 3.0,
485
+ tiers: [{ name: "audio", condition: "audio", input: 1.0, output: 3.0 }],
486
+ notes: "Prices may differ by modality; output includes thinking tokens.",
487
+ }),
488
+ runtimeSupport: {
489
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
490
+ reason: "Validated via provider E2E (text + structured + streaming SSE)",
491
+ updatedAt: "2026-05-04",
492
+ inputParts: {
493
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
494
+ supportedAssetTypes: [
495
+ asset_contract_1.AssetType.TEXT,
496
+ asset_contract_1.AssetType.AUDIO,
497
+ asset_contract_1.AssetType.DOCUMENT,
498
+ ],
499
+ supportedSourceKinds: [
500
+ execution_contract_1.ExecutionPartSourceKind.INLINE,
501
+ execution_contract_1.ExecutionPartSourceKind.URL,
502
+ execution_contract_1.ExecutionPartSourceKind.ASSET,
503
+ ],
504
+ notes: "Re-curated on 2026-06-28 with the 1024-token baseline: TEXT/AUDIO/DOCUMENT pass INLINE and ASSET (DOCUMENT ASSET got transient 5XX — not structural); IMAGE passes ASSET but fails INLINE (inconsistent — excluded); VIDEO passes INLINE but fails ASSET (inconsistent — excluded). URL fixtures were unavailable this run (SKIPPED_NO_FIXTURE); URL was confirmed passing in the June 18 prior curation.",
505
+ updatedAt: "2026-06-28",
506
+ },
507
+ },
508
+ parameterSupport: {
509
+ recommended: {
510
+ disableThinkingByDefault: true,
511
+ useNativeStructuredOutput: true,
512
+ },
513
+ updatedAt: "2026-05-04",
514
+ },
515
+ },
516
+ // --- 2.5 family variants (pending E2E curation) ---
517
+ {
518
+ id: "gemini-2.5-pro",
519
+ types: [intent_contract_1.IntentType.CHAT],
520
+ pricing: pricingGemini({
521
+ input: 1.25,
522
+ output: 10.0,
523
+ tiers: [
524
+ {
525
+ name: "prompts <= 200k",
526
+ condition: "prompts <= 200k tokens",
527
+ input: 1.25,
528
+ output: 10.0,
529
+ },
530
+ {
531
+ name: "prompts > 200k",
532
+ condition: "prompts > 200k tokens",
533
+ input: 2.5,
534
+ output: 15.0,
535
+ },
536
+ ],
537
+ notes: "Output price includes thinking tokens.",
538
+ }),
539
+ runtimeSupport: {
540
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
541
+ reason: "Validated via provider E2E (text + structured + streaming SSE) with the comprehension-grade multimodal curator after the dedicated text user-prompt hardening for pro-family structured probes.",
542
+ updatedAt: "2026-06-18",
543
+ inputParts: {
544
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
545
+ supportedAssetTypes: [
546
+ asset_contract_1.AssetType.TEXT,
547
+ asset_contract_1.AssetType.IMAGE,
548
+ asset_contract_1.AssetType.AUDIO,
549
+ asset_contract_1.AssetType.VIDEO,
550
+ asset_contract_1.AssetType.DOCUMENT,
551
+ ],
552
+ supportedSourceKinds: [
553
+ execution_contract_1.ExecutionPartSourceKind.INLINE,
554
+ execution_contract_1.ExecutionPartSourceKind.URL,
555
+ execution_contract_1.ExecutionPartSourceKind.ASSET,
556
+ ],
557
+ notes: "Re-curated on 2026-06-28 with the 1024-token baseline: all five asset types pass INLINE and ASSET. URL fixtures were unavailable this run (SKIPPED_NO_FIXTURE) but URL was confirmed passing for TEXT/AUDIO/VIDEO/DOCUMENT in the prior curation; IMAGE URL was not re-tested. IMAGE now joins the rectangle after clearing the canonical image cue on INLINE and ASSET.",
558
+ updatedAt: "2026-06-28",
559
+ },
560
+ },
561
+ },
562
+ {
563
+ id: "gemini-2.5-pro-preview-tts",
564
+ types: [intent_contract_1.IntentType.CHAT],
565
+ pricing: pricingGemini({
566
+ input: 1.0,
567
+ output: 20.0,
568
+ notes: "TTS preview: output billed as audio tokens.",
569
+ }),
570
+ runtimeSupport: {
571
+ status: args.catalogEnums.runtimeSupportStatus.NOT_SUPPORTED,
572
+ reason: "Audio-only response modality (TEXT unsupported) in provider E2E; runtime v1 is text-only",
573
+ updatedAt: "2026-05-04",
574
+ },
575
+ },
576
+ {
577
+ id: "gemini-2.5-flash-lite",
578
+ types: [intent_contract_1.IntentType.CHAT],
579
+ publicForCustomers: true,
580
+ tokenUsageCovered: true,
581
+ publicName: "DCDR Economy",
582
+ badge: "Lowest cost",
583
+ primaryCategory: args.catalogEnums.publicModelCategory.ECONOMY,
584
+ categories: [args.catalogEnums.publicModelCategory.ECONOMY],
585
+ qualityTier: 2,
586
+ speedTier: 5,
587
+ costTier: 5,
588
+ recommendedUseCases: [
589
+ "high_volume_extraction",
590
+ "classification",
591
+ "rewriting",
592
+ ],
593
+ isRecommended: false,
594
+ isGlobalDefault: false,
595
+ isCategoryDefault: false,
596
+ pricing: pricingGemini({
597
+ input: 0.1,
598
+ output: 0.4,
599
+ tiers: [{ name: "audio", condition: "audio", input: 0.3, output: 0.4 }],
600
+ notes: "Prices may differ by modality; output includes thinking tokens.",
601
+ }),
602
+ runtimeSupport: {
603
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
604
+ reason: "Validated via provider E2E (text + structured + streaming SSE)",
605
+ updatedAt: "2026-05-04",
606
+ inputParts: {
607
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
608
+ supportedAssetTypes: [
609
+ asset_contract_1.AssetType.TEXT,
610
+ asset_contract_1.AssetType.IMAGE,
611
+ asset_contract_1.AssetType.VIDEO,
612
+ asset_contract_1.AssetType.DOCUMENT,
613
+ ],
614
+ supportedSourceKinds: [
615
+ execution_contract_1.ExecutionPartSourceKind.INLINE,
616
+ execution_contract_1.ExecutionPartSourceKind.URL,
617
+ execution_contract_1.ExecutionPartSourceKind.ASSET,
618
+ ],
619
+ notes: "Re-curated on 2026-06-28 with the 1024-token baseline: TEXT/IMAGE/VIDEO/DOCUMENT pass INLINE and ASSET; AUDIO fails the canonical audio cue. URL fixtures were unavailable this run (SKIPPED_NO_FIXTURE); URL was confirmed passing in the June 17 prior curation.",
620
+ updatedAt: "2026-06-28",
621
+ },
622
+ },
623
+ parameterSupport: {
624
+ recommended: {
625
+ disableThinkingByDefault: true,
626
+ useNativeStructuredOutput: true,
627
+ },
628
+ updatedAt: "2026-05-04",
629
+ },
630
+ },
631
+ {
632
+ id: "gemini-2.5-flash-image",
633
+ types: [intent_contract_1.IntentType.IMAGE_GENERATION],
634
+ pricing: pricingGemini({
635
+ input: 0.3,
636
+ output: 2.5,
637
+ notes: "Image generation model; docs list separate per-image output pricing (not modeled here).",
638
+ }),
639
+ runtimeSupport: {
640
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
641
+ reason: "Validated via provider E2E (text + structured + streaming SSE)",
642
+ updatedAt: "2026-05-04",
643
+ },
644
+ },
645
+ {
646
+ id: "gemini-2.5-flash-native-audio-latest",
647
+ types: [intent_contract_1.IntentType.CHAT],
648
+ pricing: pricingGemini({
649
+ input: 0.5,
650
+ output: 2.0,
651
+ tiers: [
652
+ {
653
+ name: "audio/video",
654
+ condition: "audio/video",
655
+ input: 3.0,
656
+ output: 12.0,
657
+ },
658
+ ],
659
+ notes: "Native audio (Live API): docs also list per-minute rates for audio; output includes thinking tokens.",
660
+ }),
661
+ runtimeSupport: {
662
+ status: args.catalogEnums.runtimeSupportStatus.NOT_SUPPORTED,
663
+ reason: "Native-audio model (text-only runtime v1); also 404 in provider E2E for this account",
664
+ updatedAt: "2026-05-04",
665
+ },
666
+ },
667
+ {
668
+ id: "gemini-2.5-flash-native-audio-preview-09-2025",
669
+ types: [intent_contract_1.IntentType.CHAT],
670
+ pricing: pricingGemini({
671
+ input: 0.5,
672
+ output: 2.0,
673
+ tiers: [
674
+ {
675
+ name: "audio/video",
676
+ condition: "audio/video",
677
+ input: 3.0,
678
+ output: 12.0,
679
+ },
680
+ ],
681
+ notes: "Native audio (Live API): docs also list per-minute rates for audio; output includes thinking tokens.",
682
+ }),
683
+ runtimeSupport: {
684
+ status: args.catalogEnums.runtimeSupportStatus.NOT_SUPPORTED,
685
+ reason: "Native-audio model (text-only runtime v1); also 404 in provider E2E for this account",
686
+ updatedAt: "2026-05-04",
687
+ },
688
+ },
689
+ {
690
+ id: "gemini-2.5-flash-native-audio-preview-12-2025",
691
+ types: [intent_contract_1.IntentType.CHAT],
692
+ pricing: pricingGemini({
693
+ input: 0.5,
694
+ output: 2.0,
695
+ tiers: [
696
+ {
697
+ name: "audio/video",
698
+ condition: "audio/video",
699
+ input: 3.0,
700
+ output: 12.0,
701
+ },
702
+ ],
703
+ notes: "Native audio (Live API): docs also list per-minute rates for audio; output includes thinking tokens.",
704
+ }),
705
+ runtimeSupport: {
706
+ status: args.catalogEnums.runtimeSupportStatus.NOT_SUPPORTED,
707
+ reason: "Native-audio model (text-only runtime v1); also 404 in provider E2E for this account",
708
+ updatedAt: "2026-05-04",
709
+ },
710
+ },
711
+ {
712
+ id: "gemini-2.5-flash-preview-tts",
713
+ types: [intent_contract_1.IntentType.CHAT],
714
+ pricing: pricingGemini({
715
+ input: 0.5,
716
+ output: 10.0,
717
+ notes: "TTS preview: output billed as audio tokens.",
718
+ }),
719
+ runtimeSupport: {
720
+ status: args.catalogEnums.runtimeSupportStatus.NOT_SUPPORTED,
721
+ reason: "Audio-only response modality (TEXT unsupported) in provider E2E; runtime v1 is text-only",
722
+ updatedAt: "2026-05-04",
723
+ },
724
+ },
725
+ {
726
+ id: "gemini-2.5-computer-use-preview-10-2025",
727
+ types: [intent_contract_1.IntentType.CHAT],
728
+ pricing: pricingGemini({
729
+ input: 1.25,
730
+ output: 10.0,
731
+ tiers: [
732
+ {
733
+ name: "prompts <= 200k",
734
+ condition: "prompts <= 200k tokens",
735
+ input: 1.25,
736
+ output: 10.0,
737
+ },
738
+ {
739
+ name: "prompts > 200k",
740
+ condition: "prompts > 200k tokens",
741
+ input: 2.5,
742
+ output: 15.0,
743
+ },
744
+ ],
745
+ notes: "Computer Use model token pricing (tools may have separate charges).",
746
+ }),
747
+ runtimeSupport: {
748
+ status: args.catalogEnums.runtimeSupportStatus.NOT_SUPPORTED,
749
+ reason: "Requires Computer Use tool wiring (not supported in runtime v1)",
750
+ updatedAt: "2026-05-04",
751
+ },
752
+ },
753
+ // --- Older 2.0 family IDs (may appear but can be unavailable to new users) ---
754
+ {
755
+ id: "gemini-2.0-flash",
756
+ types: [intent_contract_1.IntentType.CHAT],
757
+ pricing: pricingGemini({
758
+ input: 0.1,
759
+ output: 0.4,
760
+ tiers: [{ name: "audio", condition: "audio", input: 0.7, output: 0.4 }],
761
+ notes: "Deprecated model family (shutdown noted in docs).",
762
+ }),
763
+ runtimeSupport: {
764
+ status: args.catalogEnums.runtimeSupportStatus.FAILING,
765
+ reason: "Visible via Models API but may be unavailable to new users (404)",
766
+ updatedAt: "2026-05-04",
767
+ },
768
+ },
769
+ {
770
+ id: "gemini-2.0-flash-001",
771
+ types: [intent_contract_1.IntentType.CHAT],
772
+ pricing: pricingGemini({
773
+ input: 0.1,
774
+ output: 0.4,
775
+ tiers: [{ name: "audio", condition: "audio", input: 0.7, output: 0.4 }],
776
+ notes: "Deprecated model family (shutdown noted in docs).",
777
+ }),
778
+ runtimeSupport: {
779
+ status: args.catalogEnums.runtimeSupportStatus.FAILING,
780
+ reason: "Visible via Models API but may be unavailable to new users (404)",
781
+ updatedAt: "2026-05-04",
782
+ },
783
+ },
784
+ {
785
+ id: "gemini-2.0-flash-lite",
786
+ types: [intent_contract_1.IntentType.CHAT],
787
+ pricing: pricingGemini({
788
+ input: 0.075,
789
+ output: 0.3,
790
+ notes: "Deprecated model family (shutdown noted in docs).",
791
+ }),
792
+ runtimeSupport: {
793
+ status: args.catalogEnums.runtimeSupportStatus.FAILING,
794
+ reason: "Visible via Models API but may be unavailable to new users (404)",
795
+ updatedAt: "2026-05-04",
796
+ },
797
+ },
798
+ {
799
+ id: "gemini-2.0-flash-lite-001",
800
+ types: [intent_contract_1.IntentType.CHAT],
801
+ pricing: pricingGemini({
802
+ input: 0.075,
803
+ output: 0.3,
804
+ notes: "Deprecated model family (shutdown noted in docs).",
805
+ }),
806
+ runtimeSupport: {
807
+ status: args.catalogEnums.runtimeSupportStatus.FAILING,
808
+ reason: "Visible via Models API but may be unavailable to new users (404)",
809
+ updatedAt: "2026-05-04",
810
+ },
811
+ },
812
+ // --- Rolling aliases ---
813
+ {
814
+ id: "gemini-flash-latest",
815
+ types: [intent_contract_1.IntentType.CHAT],
816
+ pricing: {
817
+ ...pricingGemini({
818
+ input: 0.3,
819
+ output: 2.5,
820
+ tiers: [
821
+ { name: "audio", condition: "audio", input: 1.0, output: 2.5 },
822
+ ],
823
+ notes: "Prices may differ by modality; output includes thinking tokens.",
824
+ }),
825
+ confidence: "approx",
826
+ notes: "Rolling alias; priced as Gemini 2.5 Flash (approx).",
827
+ },
828
+ runtimeSupport: {
829
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
830
+ reason: "Validated via provider E2E (text + structured + streaming SSE) (alias)",
831
+ updatedAt: "2026-05-04",
832
+ inputParts: {
833
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
834
+ supportedAssetTypes: [
835
+ asset_contract_1.AssetType.TEXT,
836
+ asset_contract_1.AssetType.IMAGE,
837
+ asset_contract_1.AssetType.AUDIO,
838
+ asset_contract_1.AssetType.VIDEO,
839
+ asset_contract_1.AssetType.DOCUMENT,
840
+ ],
841
+ supportedSourceKinds: [
842
+ execution_contract_1.ExecutionPartSourceKind.INLINE,
843
+ execution_contract_1.ExecutionPartSourceKind.URL,
844
+ execution_contract_1.ExecutionPartSourceKind.ASSET,
845
+ ],
846
+ notes: "Validated with the comprehension-grade Gemini curator using the canonical shared fixtures across TEXT/IMAGE/AUDIO/VIDEO/DOCUMENT and INLINE/URL/ASSET.",
847
+ updatedAt: "2026-06-17",
848
+ },
849
+ },
850
+ parameterSupport: {
851
+ recommended: {
852
+ disableThinkingByDefault: true,
853
+ useNativeStructuredOutput: true,
854
+ },
855
+ updatedAt: "2026-05-04",
856
+ },
857
+ },
858
+ {
859
+ id: "gemini-flash-lite-latest",
860
+ types: [intent_contract_1.IntentType.CHAT],
861
+ pricing: {
862
+ ...pricingGemini({
863
+ input: 0.1,
864
+ output: 0.4,
865
+ tiers: [
866
+ { name: "audio", condition: "audio", input: 0.3, output: 0.4 },
867
+ ],
868
+ notes: "Prices may differ by modality; output includes thinking tokens.",
869
+ }),
870
+ confidence: "approx",
871
+ notes: "Rolling alias; priced as Gemini 2.5 Flash-Lite (approx).",
872
+ },
873
+ runtimeSupport: {
874
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
875
+ reason: "Validated via provider E2E (text + structured + streaming SSE) (alias)",
876
+ updatedAt: "2026-05-04",
877
+ inputParts: {
878
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
879
+ supportedAssetTypes: [
880
+ asset_contract_1.AssetType.TEXT,
881
+ asset_contract_1.AssetType.AUDIO,
882
+ asset_contract_1.AssetType.DOCUMENT,
883
+ ],
884
+ supportedSourceKinds: [
885
+ execution_contract_1.ExecutionPartSourceKind.INLINE,
886
+ execution_contract_1.ExecutionPartSourceKind.URL,
887
+ execution_contract_1.ExecutionPartSourceKind.ASSET,
888
+ ],
889
+ notes: "Re-curated on 2026-06-28 with the 1024-token baseline: TEXT/AUDIO/DOCUMENT pass INLINE and ASSET; IMAGE and VIDEO fail the canonical comprehension cues. URL fixtures were unavailable this run (SKIPPED_NO_FIXTURE); URL was confirmed passing in the June 17 prior curation.",
890
+ updatedAt: "2026-06-28",
891
+ },
892
+ },
893
+ parameterSupport: {
894
+ recommended: {
895
+ disableThinkingByDefault: true,
896
+ useNativeStructuredOutput: true,
897
+ },
898
+ updatedAt: "2026-05-04",
899
+ },
900
+ },
901
+ {
902
+ id: "gemini-pro-latest",
903
+ types: [intent_contract_1.IntentType.CHAT],
904
+ pricing: {
905
+ ...pricingGemini({
906
+ input: 1.25,
907
+ output: 10.0,
908
+ tiers: [
909
+ {
910
+ name: "prompts <= 200k",
911
+ condition: "prompts <= 200k tokens",
912
+ input: 1.25,
913
+ output: 10.0,
914
+ },
915
+ {
916
+ name: "prompts > 200k",
917
+ condition: "prompts > 200k tokens",
918
+ input: 2.5,
919
+ output: 15.0,
920
+ },
921
+ ],
922
+ notes: "Output price includes thinking tokens.",
923
+ }),
924
+ confidence: "approx",
925
+ notes: "Rolling alias; priced as Gemini 2.5 Pro (approx).",
926
+ },
927
+ runtimeSupport: {
928
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
929
+ reason: "Validated via provider E2E (text + structured + streaming SSE) (alias)",
930
+ updatedAt: "2026-05-04",
931
+ inputParts: {
932
+ status: args.catalogEnums.runtimeSupportStatus.SUPPORTED,
933
+ supportedAssetTypes: [
934
+ asset_contract_1.AssetType.TEXT,
935
+ asset_contract_1.AssetType.AUDIO,
936
+ asset_contract_1.AssetType.VIDEO,
937
+ asset_contract_1.AssetType.DOCUMENT,
938
+ ],
939
+ supportedSourceKinds: [
940
+ execution_contract_1.ExecutionPartSourceKind.INLINE,
941
+ execution_contract_1.ExecutionPartSourceKind.URL,
942
+ execution_contract_1.ExecutionPartSourceKind.ASSET,
943
+ ],
944
+ notes: "Re-curated on 2026-06-28 with the 1024-token baseline: AUDIO/VIDEO/DOCUMENT pass across INLINE/URL/ASSET. TEXT showed PARSE_FAIL on INLINE and URL but passed via ASSET (inconsistent with June 18 confirmation; treated as transient). IMAGE fails the canonical visual cue across all source kinds.",
945
+ updatedAt: "2026-06-28",
946
+ },
947
+ },
948
+ },
949
+ // --- Robotics models (listed by API; may require special modalities) ---
950
+ {
951
+ id: "gemini-robotics-er-1.6-preview",
952
+ types: [intent_contract_1.IntentType.CHAT],
953
+ pricing: pricingGemini({
954
+ input: 1.0,
955
+ output: 5.0,
956
+ tiers: [{ name: "audio", condition: "audio", input: 2.0, output: 5.0 }],
957
+ notes: "Prices may differ by modality; output includes thinking tokens.",
958
+ }),
959
+ runtimeSupport: {
960
+ status: args.catalogEnums.runtimeSupportStatus.FAILING,
961
+ reason: "Provider E2E: empty output in text + structured + streaming",
962
+ updatedAt: "2026-05-04",
963
+ },
964
+ },
965
+ {
966
+ id: "gemini-robotics-er-1.5-preview",
967
+ types: [intent_contract_1.IntentType.CHAT],
968
+ runtimeSupport: {
969
+ status: args.catalogEnums.runtimeSupportStatus.FAILING,
970
+ reason: "Model/endpoint not found (404) in provider E2E for this account",
971
+ updatedAt: "2026-05-04",
972
+ },
973
+ },
974
+ // --- Embeddings (cataloged, but runtime adapter not implemented yet) ---
975
+ {
976
+ id: "gemini-embedding-2-preview",
977
+ types: [intent_contract_1.IntentType.EMBEDDING],
978
+ runtimeSupport: {
979
+ status: args.catalogEnums.runtimeSupportStatus.NOT_SUPPORTED,
980
+ reason: "Gemini embedding adapter not implemented in runtime v1",
981
+ updatedAt: "2026-05-04",
982
+ },
983
+ },
984
+ {
985
+ id: "gemini-embedding-2",
986
+ types: [intent_contract_1.IntentType.EMBEDDING],
987
+ runtimeSupport: {
988
+ status: args.catalogEnums.runtimeSupportStatus.NOT_SUPPORTED,
989
+ reason: "Gemini embedding adapter not implemented in runtime v1",
990
+ updatedAt: "2026-05-04",
991
+ },
992
+ },
993
+ {
994
+ id: "gemini-embedding-001",
995
+ types: [intent_contract_1.IntentType.EMBEDDING],
996
+ runtimeSupport: {
997
+ status: args.catalogEnums.runtimeSupportStatus.NOT_SUPPORTED,
998
+ reason: "Gemini embedding adapter not implemented in runtime v1",
999
+ updatedAt: "2026-05-04",
1000
+ },
1001
+ },
1002
+ ];
1003
+ }
1004
+ /**
1005
+ * Returns the E2E override map for Gemini provider models.
1006
+ */
1007
+ function buildGeminiProviderModelE2EOverrides(args) {
1008
+ return {
1009
+ // Listed by the Models API but not callable for many accounts (404).
1010
+ "gemini-2.0-flash": {
1011
+ status: args.catalogEnums.e2eStatus.LEGACY,
1012
+ reason: "Listed but not callable for many accounts (404)",
1013
+ },
1014
+ "gemini-2.0-flash-001": {
1015
+ status: args.catalogEnums.e2eStatus.LEGACY,
1016
+ reason: "Listed but not callable for many accounts (404)",
1017
+ },
1018
+ "gemini-2.0-flash-lite": {
1019
+ status: args.catalogEnums.e2eStatus.LEGACY,
1020
+ reason: "Listed but not callable for many accounts (404)",
1021
+ },
1022
+ "gemini-2.0-flash-lite-001": {
1023
+ status: args.catalogEnums.e2eStatus.LEGACY,
1024
+ reason: "Listed but not callable for many accounts (404)",
1025
+ },
1026
+ // Preview/live endpoint variants can be account-gated or missing.
1027
+ "gemini-3.1-flash-live-preview": {
1028
+ status: args.catalogEnums.e2eStatus.LEGACY,
1029
+ reason: "Model/endpoint not found (404) in provider E2E",
1030
+ },
1031
+ "gemini-3-pro-preview": {
1032
+ status: args.catalogEnums.e2eStatus.LEGACY,
1033
+ reason: "Model/endpoint not found (404) in provider E2E for this account",
1034
+ },
1035
+ // Requires explicit Computer Use tooling.
1036
+ "gemini-2.5-computer-use-preview-10-2025": {
1037
+ status: args.catalogEnums.e2eStatus.LEGACY,
1038
+ reason: "Requires Computer Use tool wiring (not supported in runtime v1)",
1039
+ },
1040
+ // Audio-only response modalities (runtime v1 is text-only).
1041
+ "gemini-2.5-pro-preview-tts": {
1042
+ status: args.catalogEnums.e2eStatus.LEGACY,
1043
+ reason: "Audio-only response modality (TEXT unsupported)",
1044
+ },
1045
+ "gemini-2.5-flash-preview-tts": {
1046
+ status: args.catalogEnums.e2eStatus.LEGACY,
1047
+ reason: "Audio-only response modality (TEXT unsupported)",
1048
+ },
1049
+ "gemini-2.5-flash-native-audio-latest": {
1050
+ status: args.catalogEnums.e2eStatus.LEGACY,
1051
+ reason: "Native-audio model (text-only runtime)",
1052
+ },
1053
+ "gemini-2.5-flash-native-audio-preview-09-2025": {
1054
+ status: args.catalogEnums.e2eStatus.LEGACY,
1055
+ reason: "Native-audio model (text-only runtime)",
1056
+ },
1057
+ "gemini-2.5-flash-native-audio-preview-12-2025": {
1058
+ status: args.catalogEnums.e2eStatus.LEGACY,
1059
+ reason: "Native-audio model (text-only runtime)",
1060
+ },
1061
+ // Some robotics preview IDs appear/disappear across accounts.
1062
+ "gemini-robotics-er-1.5-preview": {
1063
+ status: args.catalogEnums.e2eStatus.LEGACY,
1064
+ reason: "Model/endpoint not found (404) in provider E2E",
1065
+ },
1066
+ };
1067
+ }