@stll/ai-catalog 0.7.0 → 0.8.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.
@@ -1,3 +1,4 @@
1
+ import { MODEL_DEFAULTS_LEDGER, MODEL_TASK_OVERRIDE_GROUP, resolveDefaultModel } from "./model-defaults-ledger.js";
1
2
  import * as v from "valibot";
2
3
  //#region src/capabilities.gen.ts
3
4
  /**
@@ -6,6 +7,7 @@ import * as v from "valibot";
6
7
  */
7
8
  const MODEL_DOCUMENT_INPUT_OPTIONS = {
8
9
  google: [
10
+ "gemini-4-argon",
9
11
  "gemini-3.8-flash",
10
12
  "gemini-3.7-flash",
11
13
  "gemini-3.6-flash",
@@ -22,6 +24,7 @@ const MODEL_DOCUMENT_INPUT_OPTIONS = {
22
24
  "openai/gpt-5.6-sol",
23
25
  "openai/gpt-5.6-terra",
24
26
  "openai/gpt-5.6-luna",
27
+ "google/gemini-4-argon",
25
28
  "google/gemini-3.8-flash",
26
29
  "google/gemini-3.7-flash",
27
30
  "google/gemini-3.6-flash",
@@ -78,6 +81,7 @@ const MODEL_DOCUMENT_INPUT_OPTIONS = {
78
81
  /** Every offered provider/model pair has explicit image-input evidence. */
79
82
  const MODEL_IMAGE_INPUT_CAPABILITIES = {
80
83
  google: {
84
+ "gemini-4-argon": "supported",
81
85
  "gemini-3.8-flash": "supported",
82
86
  "gemini-3.7-flash": "supported",
83
87
  "gemini-3.6-flash": "supported",
@@ -94,6 +98,7 @@ const MODEL_IMAGE_INPUT_CAPABILITIES = {
94
98
  "openai/gpt-5.6-sol": "supported",
95
99
  "openai/gpt-5.6-terra": "supported",
96
100
  "openai/gpt-5.6-luna": "supported",
101
+ "google/gemini-4-argon": "supported",
97
102
  "google/gemini-3.8-flash": "supported",
98
103
  "google/gemini-3.7-flash": "supported",
99
104
  "google/gemini-3.6-flash": "supported",
@@ -162,6 +167,11 @@ const MODEL_IMAGE_INPUT_CAPABILITIES = {
162
167
  * through `resolveReasoningEffort`.
163
168
  */
164
169
  const MODEL_REASONING_EFFORTS = {
170
+ "gemini-4-argon": [
171
+ "low",
172
+ "medium",
173
+ "high"
174
+ ],
165
175
  "gemini-3.8-flash": [
166
176
  "low",
167
177
  "medium",
@@ -255,6 +265,11 @@ const MODEL_REASONING_EFFORTS = {
255
265
  "xhigh",
256
266
  "max"
257
267
  ],
268
+ "google/gemini-4-argon": [
269
+ "low",
270
+ "medium",
271
+ "high"
272
+ ],
258
273
  "google/gemini-3.8-flash": [
259
274
  "low",
260
275
  "medium",
@@ -556,6 +571,7 @@ const MODEL_REASONING_EFFORTS = {
556
571
  * a truthful named default, so clients must retain a separate Default choice.
557
572
  */
558
573
  const MODEL_DEFAULT_REASONING_EFFORTS = {
574
+ "gemini-4-argon": null,
559
575
  "gemini-3.8-flash": null,
560
576
  "gemini-3.7-flash": null,
561
577
  "gemini-3.6-flash": null,
@@ -570,6 +586,7 @@ const MODEL_DEFAULT_REASONING_EFFORTS = {
570
586
  "openai/gpt-5.6-sol": "medium",
571
587
  "openai/gpt-5.6-terra": "medium",
572
588
  "openai/gpt-5.6-luna": "medium",
589
+ "google/gemini-4-argon": "medium",
573
590
  "google/gemini-3.8-flash": "medium",
574
591
  "google/gemini-3.7-flash": "medium",
575
592
  "google/gemini-3.6-flash": "medium",
@@ -628,6 +645,7 @@ const MODEL_DEFAULT_REASONING_EFFORTS = {
628
645
  * parameters. Consumers must go through `shouldEmitTemperature`.
629
646
  */
630
647
  const MODEL_TEMPERATURE_POLICIES = {
648
+ "gemini-4-argon": "omit",
631
649
  "gemini-3.8-flash": "omit",
632
650
  "gemini-3.7-flash": "omit",
633
651
  "gemini-3.6-flash": "omit",
@@ -642,6 +660,7 @@ const MODEL_TEMPERATURE_POLICIES = {
642
660
  "openai/gpt-5.6-sol": "omit",
643
661
  "openai/gpt-5.6-terra": "omit",
644
662
  "openai/gpt-5.6-luna": "omit",
663
+ "google/gemini-4-argon": "omit",
645
664
  "google/gemini-3.8-flash": "omit",
646
665
  "google/gemini-3.7-flash": "omit",
647
666
  "google/gemini-3.6-flash": "omit",
@@ -700,6 +719,7 @@ const MODEL_TEMPERATURE_POLICIES = {
700
719
  * `getOutputTokenLimit`.
701
720
  */
702
721
  const MODEL_OUTPUT_TOKEN_LIMITS = {
722
+ "gemini-4-argon": 32768,
703
723
  "gemini-3.8-flash": 65536,
704
724
  "gemini-3.7-flash": 65536,
705
725
  "gemini-3.6-flash": 65536,
@@ -714,6 +734,7 @@ const MODEL_OUTPUT_TOKEN_LIMITS = {
714
734
  "openai/gpt-5.6-sol": 128e3,
715
735
  "openai/gpt-5.6-terra": 128e3,
716
736
  "openai/gpt-5.6-luna": 128e3,
737
+ "google/gemini-4-argon": 65536,
717
738
  "google/gemini-3.8-flash": 65536,
718
739
  "google/gemini-3.7-flash": 65536,
719
740
  "google/gemini-3.6-flash": 65536,
@@ -769,6 +790,12 @@ const MODEL_OUTPUT_TOKEN_LIMITS = {
769
790
  //#endregion
770
791
  //#region src/model-rates.gen.ts
771
792
  const MODEL_RATES = {
793
+ "gemini-4-argon": {
794
+ kind: "flat",
795
+ inputPerMTok: 2e5,
796
+ outputPerMTok: 1e6,
797
+ cachedInputPerMTok: 1e4
798
+ },
772
799
  "gemini-3.8-flash": {
773
800
  kind: "flat",
774
801
  inputPerMTok: 75e3,
@@ -1204,6 +1231,18 @@ const REASONING_REPLAY_FORMATS = [
1204
1231
  "none"
1205
1232
  ];
1206
1233
  const MODEL_REASONING_CAPABILITIES = {
1234
+ "gemini-4-argon": {
1235
+ support: "supported",
1236
+ emittedFormats: ["google-thought-signature"],
1237
+ openAIIncludeEncryptedContent: false,
1238
+ openAIStore: null,
1239
+ anthropicThinking: "none",
1240
+ replayCompatibility: [{
1241
+ provider: "google",
1242
+ model: "gemini-4-argon",
1243
+ format: "google-thought-signature"
1244
+ }]
1245
+ },
1207
1246
  "gemini-3.8-flash": {
1208
1247
  support: "supported",
1209
1248
  emittedFormats: ["google-thought-signature"],
@@ -1344,6 +1383,14 @@ const MODEL_REASONING_CAPABILITIES = {
1344
1383
  anthropicThinking: "none",
1345
1384
  replayCompatibility: []
1346
1385
  },
1386
+ "google/gemini-4-argon": {
1387
+ support: "supported",
1388
+ emittedFormats: ["none"],
1389
+ openAIIncludeEncryptedContent: false,
1390
+ openAIStore: null,
1391
+ anthropicThinking: "none",
1392
+ replayCompatibility: []
1393
+ },
1347
1394
  "google/gemini-3.8-flash": {
1348
1395
  support: "supported",
1349
1396
  emittedFormats: ["none"],
@@ -2015,21 +2062,6 @@ const DOCUMENT_INPUT_OVERRIDES = {
2015
2062
  * ID here against live provider/aggregator listings so a retired model
2016
2063
  * fails CI instead of 400-ing a user at runtime.
2017
2064
  */
2018
- /**
2019
- * Logical model roles. Call sites declare *what* they need, not
2020
- * *which* model to use.
2021
- *
2022
- * - fast: classification, extraction, short generation
2023
- * - chat: conversational with tool use and streaming
2024
- * - reasoning: complex multi-step legal analysis
2025
- * - pdf: native PDF/image understanding
2026
- */
2027
- const MODEL_ROLES = [
2028
- "fast",
2029
- "chat",
2030
- "reasoning",
2031
- "pdf"
2032
- ];
2033
2065
  const TEMPERATURE_POLICIES = ["emit", "omit"];
2034
2066
  const IMAGE_INPUT_CAPABILITIES = [
2035
2067
  "supported",
@@ -2127,176 +2159,48 @@ const GPT_56_MODEL_IDS = {
2127
2159
  };
2128
2160
  const GPT_56_OPENAI_MODEL_IDS = Object.values(GPT_56_MODEL_IDS).map(({ openai }) => openai);
2129
2161
  const GPT_56_OPENROUTER_MODEL_IDS = Object.values(GPT_56_MODEL_IDS).map(({ openrouter }) => openrouter);
2162
+ const defaultPresentation = (entry) => ({
2163
+ kind: "default",
2164
+ modelId: entry.candidate.modelId,
2165
+ rationaleKey: entry.rationale.rationaleKey
2166
+ });
2167
+ /** Default labels in the override editor derive from the task ledger. */
2130
2168
  const BYOK_DEFAULT_MODELS = {
2131
2169
  google: {
2132
- fast: {
2133
- kind: "default",
2134
- modelId: "gemini-3.8-flash",
2135
- rationaleKey: "organization.aiConfig.defaultRationale.fast"
2136
- },
2137
- chat: {
2138
- kind: "default",
2139
- modelId: "gemini-3.8-flash",
2140
- rationaleKey: "organization.aiConfig.defaultRationale.chat"
2141
- },
2142
- reasoning: {
2143
- kind: "default",
2144
- modelId: "gemini-3.8-flash",
2145
- rationaleKey: "organization.aiConfig.defaultRationale.reasoning"
2146
- },
2147
- pdf: {
2148
- kind: "default",
2149
- modelId: "gemini-3.8-flash",
2150
- rationaleKey: "organization.aiConfig.defaultRationale.pdf"
2151
- }
2170
+ fast: defaultPresentation(MODEL_DEFAULTS_LEDGER["short-text"].google),
2171
+ chat: defaultPresentation(MODEL_DEFAULTS_LEDGER.chat.google),
2172
+ reasoning: defaultPresentation(MODEL_DEFAULTS_LEDGER.reasoning.google),
2173
+ pdf: defaultPresentation(MODEL_DEFAULTS_LEDGER.pdf.google)
2152
2174
  },
2153
2175
  openrouter: {
2154
- fast: {
2155
- kind: "default",
2156
- modelId: GPT_6_MODEL_IDS.luna.openrouter,
2157
- rationaleKey: "organization.aiConfig.defaultRationale.fast"
2158
- },
2159
- chat: {
2160
- kind: "default",
2161
- modelId: GPT_6_MODEL_IDS.sol.openrouter,
2162
- rationaleKey: "organization.aiConfig.defaultRationale.chat"
2163
- },
2164
- reasoning: {
2165
- kind: "default",
2166
- modelId: GPT_6_MODEL_IDS.sol.openrouter,
2167
- rationaleKey: "organization.aiConfig.defaultRationale.reasoning"
2168
- },
2169
- pdf: {
2170
- kind: "default",
2171
- modelId: GPT_6_MODEL_IDS.sol.openrouter,
2172
- rationaleKey: "organization.aiConfig.defaultRationale.pdf"
2173
- }
2176
+ fast: defaultPresentation(MODEL_DEFAULTS_LEDGER["short-text"].openrouter),
2177
+ chat: defaultPresentation(MODEL_DEFAULTS_LEDGER.chat.openrouter),
2178
+ reasoning: defaultPresentation(MODEL_DEFAULTS_LEDGER.reasoning.openrouter),
2179
+ pdf: defaultPresentation(MODEL_DEFAULTS_LEDGER.pdf.openrouter)
2174
2180
  },
2175
2181
  openai: {
2176
- fast: {
2177
- kind: "default",
2178
- modelId: GPT_6_MODEL_IDS.luna.openai,
2179
- rationaleKey: "organization.aiConfig.defaultRationale.fast"
2180
- },
2181
- chat: {
2182
- kind: "default",
2183
- modelId: GPT_6_MODEL_IDS.sol.openai,
2184
- rationaleKey: "organization.aiConfig.defaultRationale.chat"
2185
- },
2186
- reasoning: {
2187
- kind: "default",
2188
- modelId: GPT_6_MODEL_IDS.sol.openai,
2189
- rationaleKey: "organization.aiConfig.defaultRationale.reasoning"
2190
- },
2191
- pdf: {
2192
- kind: "default",
2193
- modelId: GPT_6_MODEL_IDS.sol.openai,
2194
- rationaleKey: "organization.aiConfig.defaultRationale.pdf"
2195
- }
2182
+ fast: defaultPresentation(MODEL_DEFAULTS_LEDGER["short-text"].openai),
2183
+ chat: defaultPresentation(MODEL_DEFAULTS_LEDGER.chat.openai),
2184
+ reasoning: defaultPresentation(MODEL_DEFAULTS_LEDGER.reasoning.openai),
2185
+ pdf: defaultPresentation(MODEL_DEFAULTS_LEDGER.pdf.openai)
2196
2186
  },
2197
2187
  anthropic: {
2198
- fast: {
2199
- kind: "default",
2200
- modelId: "claude-opus-5-5",
2201
- rationaleKey: "organization.aiConfig.defaultRationale.fast"
2202
- },
2203
- chat: {
2204
- kind: "default",
2205
- modelId: "claude-opus-5-5",
2206
- rationaleKey: "organization.aiConfig.defaultRationale.chat"
2207
- },
2208
- reasoning: {
2209
- kind: "default",
2210
- modelId: "claude-opus-5-5",
2211
- rationaleKey: "organization.aiConfig.defaultRationale.reasoning"
2212
- },
2213
- pdf: {
2214
- kind: "default",
2215
- modelId: "claude-opus-5-5",
2216
- rationaleKey: "organization.aiConfig.defaultRationale.pdf"
2217
- }
2188
+ fast: defaultPresentation(MODEL_DEFAULTS_LEDGER["short-text"].anthropic),
2189
+ chat: defaultPresentation(MODEL_DEFAULTS_LEDGER.chat.anthropic),
2190
+ reasoning: defaultPresentation(MODEL_DEFAULTS_LEDGER.reasoning.anthropic),
2191
+ pdf: defaultPresentation(MODEL_DEFAULTS_LEDGER.pdf.anthropic)
2218
2192
  },
2219
2193
  bedrock: {
2220
- fast: {
2221
- kind: "default",
2222
- modelId: "us.anthropic.claude-sonnet-4-5-20250929-v1:0",
2223
- rationaleKey: "organization.aiConfig.defaultRationale.fast"
2224
- },
2225
- chat: {
2226
- kind: "default",
2227
- modelId: "us.anthropic.claude-sonnet-4-5-20250929-v1:0",
2228
- rationaleKey: "organization.aiConfig.defaultRationale.chat"
2229
- },
2230
- reasoning: {
2231
- kind: "default",
2232
- modelId: "us.anthropic.claude-sonnet-4-5-20250929-v1:0",
2233
- rationaleKey: "organization.aiConfig.defaultRationale.reasoning"
2234
- },
2235
- pdf: {
2236
- kind: "default",
2237
- modelId: "us.anthropic.claude-sonnet-4-5-20250929-v1:0",
2238
- rationaleKey: "organization.aiConfig.defaultRationale.pdf"
2239
- }
2194
+ fast: defaultPresentation(MODEL_DEFAULTS_LEDGER["short-text"].bedrock),
2195
+ chat: defaultPresentation(MODEL_DEFAULTS_LEDGER.chat.bedrock),
2196
+ reasoning: defaultPresentation(MODEL_DEFAULTS_LEDGER.reasoning.bedrock),
2197
+ pdf: defaultPresentation(MODEL_DEFAULTS_LEDGER.pdf.bedrock)
2240
2198
  },
2241
2199
  mistral: {
2242
- fast: {
2243
- kind: "default",
2244
- modelId: "mistral-small-latest",
2245
- rationaleKey: "organization.aiConfig.defaultRationale.fast"
2246
- },
2247
- chat: {
2248
- kind: "default",
2249
- modelId: "mistral-medium-latest",
2250
- rationaleKey: "organization.aiConfig.defaultRationale.chat"
2251
- },
2252
- reasoning: {
2253
- kind: "default",
2254
- modelId: "mistral-medium-latest",
2255
- rationaleKey: "organization.aiConfig.defaultRationale.reasoning"
2256
- },
2257
- pdf: { kind: "unsupported" }
2258
- }
2259
- };
2260
- const defaultModelIds = (defaults) => ({
2261
- fast: defaults.fast.modelId,
2262
- chat: defaults.chat.modelId,
2263
- reasoning: defaults.reasoning.modelId,
2264
- pdf: defaults.pdf.modelId
2265
- });
2266
- /**
2267
- * Instance-level default model IDs per provider. Extends the BYOK
2268
- * defaults with the providers that only the instance path uses
2269
- * (custom deployments and OpenAI-compatible endpoints).
2270
- */
2271
- const DEFAULT_MODELS = {
2272
- google: defaultModelIds(BYOK_DEFAULT_MODELS.google),
2273
- openrouter: defaultModelIds(BYOK_DEFAULT_MODELS.openrouter),
2274
- openai: defaultModelIds(BYOK_DEFAULT_MODELS.openai),
2275
- anthropic: defaultModelIds(BYOK_DEFAULT_MODELS.anthropic),
2276
- bedrock: defaultModelIds(BYOK_DEFAULT_MODELS.bedrock),
2277
- mistral: {
2278
- fast: BYOK_DEFAULT_MODELS.mistral.fast.modelId,
2279
- chat: BYOK_DEFAULT_MODELS.mistral.chat.modelId,
2280
- reasoning: BYOK_DEFAULT_MODELS.mistral.reasoning.modelId,
2281
- pdf: null
2282
- },
2283
- azure_foundry: {
2284
- fast: GPT_56_MODEL_IDS.luna.openai,
2285
- chat: GPT_56_MODEL_IDS.terra.openai,
2286
- reasoning: GPT_56_MODEL_IDS.terra.openai,
2287
- pdf: GPT_56_MODEL_IDS.terra.openai
2288
- },
2289
- openai_compatible: {
2290
- fast: "default",
2291
- chat: "default",
2292
- reasoning: "default",
2293
- pdf: "default"
2294
- },
2295
- huggingface: {
2296
- fast: "speakleash/Bielik-1.5B-v3.0-Instruct",
2297
- chat: "speakleash/Bielik-11B-v2.3-Instruct",
2298
- reasoning: "speakleash/Bielik-11B-v2.3-Instruct",
2299
- pdf: "speakleash/Bielik-11B-v2.3-Instruct"
2200
+ fast: defaultPresentation(MODEL_DEFAULTS_LEDGER["short-text"].mistral),
2201
+ chat: defaultPresentation(MODEL_DEFAULTS_LEDGER.chat.mistral),
2202
+ reasoning: defaultPresentation(MODEL_DEFAULTS_LEDGER.reasoning.mistral),
2203
+ pdf: { kind: MODEL_DEFAULTS_LEDGER.pdf.mistral.kind }
2300
2204
  }
2301
2205
  };
2302
2206
  /**
@@ -2311,6 +2215,7 @@ const DEFAULT_MODELS = {
2311
2215
  */
2312
2216
  const BYOK_MODEL_OPTIONS = {
2313
2217
  google: [
2218
+ "gemini-4-argon",
2314
2219
  "gemini-3.8-flash",
2315
2220
  "gemini-3.7-flash",
2316
2221
  "gemini-3.6-flash",
@@ -2347,6 +2252,7 @@ const BYOK_MODEL_OPTIONS = {
2347
2252
  ...GPT_61_OPENROUTER_MODEL_IDS,
2348
2253
  ...GPT_6_OPENROUTER_MODEL_IDS,
2349
2254
  ...GPT_56_OPENROUTER_MODEL_IDS,
2255
+ "google/gemini-4-argon",
2350
2256
  "google/gemini-3.8-flash",
2351
2257
  "google/gemini-3.7-flash",
2352
2258
  "google/gemini-3.6-flash",
@@ -2399,6 +2305,10 @@ const RECOMMENDED_CHAT_MODELS = [
2399
2305
  * creator's icon while their routing provider remains available separately.
2400
2306
  */
2401
2307
  const MODEL_DISPLAY_METADATA = {
2308
+ "gemini-4-argon": {
2309
+ displayName: "Gemini 4 Argon",
2310
+ iconProvider: "google"
2311
+ },
2402
2312
  "gemini-3.8-flash": {
2403
2313
  displayName: "Gemini 3.8 Flash",
2404
2314
  iconProvider: "google"
@@ -2571,6 +2481,10 @@ const MODEL_DISPLAY_METADATA = {
2571
2481
  displayName: "GPT-5.6 Terra",
2572
2482
  iconProvider: "openai"
2573
2483
  },
2484
+ "google/gemini-4-argon": {
2485
+ displayName: "Gemini 4 Argon",
2486
+ iconProvider: "google"
2487
+ },
2574
2488
  "google/gemini-3.8-flash": {
2575
2489
  displayName: "Gemini 3.8 Flash",
2576
2490
  iconProvider: "google"
@@ -2745,34 +2659,18 @@ const isOfferedBYOKModelForRole = ({ provider, modelId, role }) => {
2745
2659
  role
2746
2660
  });
2747
2661
  };
2748
- /**
2749
- * Resolve a model id that will actually work for this provider+role,
2750
- * keeping the SAME provider. Returns the caller's model unchanged when
2751
- * it is still offered; otherwise falls back to the provider's per-role
2752
- * default (`BYOK_DEFAULT_MODELS`). Returns `null` only when the
2753
- * provider has no valid model for the role at all — the sole case
2754
- * today is `mistral` + `pdf`, because the TanStack Mistral adapter
2755
- * exposes no `document` input modality, so no Mistral model (not even
2756
- * the default) can serve the PDF role.
2757
- *
2758
- * Used to auto-heal org AI configs whose pinned model was removed by a
2759
- * catalog bump, so generation resolves to a supported model instead of
2760
- * 400-ing (or forwarding a retired id to the provider).
2761
- */
2762
- const resolveWorkingBYOKModelForRole = ({ provider, modelId, role }) => {
2662
+ /** Keep a supported override, otherwise use that provider's task default. */
2663
+ const resolveWorkingBYOKModelForTask = ({ provider, modelId, task }) => {
2664
+ const role = MODEL_TASK_OVERRIDE_GROUP[task];
2763
2665
  if (isOfferedBYOKModelForRole({
2764
2666
  provider,
2765
2667
  modelId,
2766
2668
  role
2767
2669
  })) return modelId;
2768
- const entry = BYOK_DEFAULT_MODELS[provider][role];
2769
- if (entry.kind === "unsupported") return null;
2770
- const fallback = entry.modelId;
2771
- return isOfferedBYOKModelForRole({
2772
- provider,
2773
- modelId: fallback,
2774
- role
2775
- }) ? fallback : null;
2670
+ return resolveDefaultModel({
2671
+ task,
2672
+ orgProviders: [provider]
2673
+ })?.modelId ?? null;
2776
2674
  };
2777
2675
  /** Native Anthropic adaptive-thinking models, derived from replay capabilities. */
2778
2676
  const ANTHROPIC_ADAPTIVE_THINKING_MODELS = BYOK_MODEL_OPTIONS.anthropic.filter((model) => MODEL_REASONING_CAPABILITIES[model].anthropicThinking === "adaptive");
@@ -2793,24 +2691,6 @@ const REASONING_EFFORTS = [
2793
2691
  ];
2794
2692
  const resolvedReasoningEffortSchema = v.pipe(v.picklist(REASONING_EFFORTS), v.brand("ResolvedReasoningEffort"));
2795
2693
  /**
2796
- * Per-provider model served when a user's included budget is exhausted
2797
- * and no explicit selection overrides it. Falls back to each
2798
- * provider's fast-role default; providers without a first-class
2799
- * adapter path cannot serve the lane. Total over providers so a new
2800
- * provider lands with an explicit decision.
2801
- */
2802
- const FALLBACK_CHAT_MODEL_BY_PROVIDER = {
2803
- google: DEFAULT_MODELS.google.fast,
2804
- openrouter: DEFAULT_MODELS.openrouter.fast,
2805
- openai: DEFAULT_MODELS.openai.fast,
2806
- anthropic: DEFAULT_MODELS.anthropic.fast,
2807
- bedrock: DEFAULT_MODELS.bedrock.fast,
2808
- mistral: DEFAULT_MODELS.mistral.fast,
2809
- azure_foundry: null,
2810
- openai_compatible: null,
2811
- huggingface: null
2812
- };
2813
- /**
2814
2694
  * Provider-native IDs that are exact aliases of an offered catalog ID.
2815
2695
  * Every metadata lookup normalizes here, so instance/dev overrides cannot
2816
2696
  * bypass rates or capabilities and duplicated alias rows cannot drift apart.
@@ -2859,6 +2739,7 @@ const MODEL_STREAMING_TOOL_USE = {
2859
2739
  "anthropic/claude-haiku-5.5": "supported",
2860
2740
  "us.anthropic.claude-haiku-5-5": "supported",
2861
2741
  "claude-haiku-5-5": "supported",
2742
+ "gemini-4-argon": "supported",
2862
2743
  "gemini-3.8-flash": "supported",
2863
2744
  "gemini-3.7-flash": "supported",
2864
2745
  "gemini-3.6-flash": "supported",
@@ -2873,6 +2754,7 @@ const MODEL_STREAMING_TOOL_USE = {
2873
2754
  "openai/gpt-5.6-sol": "supported",
2874
2755
  "openai/gpt-5.6-terra": "supported",
2875
2756
  "openai/gpt-5.6-luna": "supported",
2757
+ "google/gemini-4-argon": "supported",
2876
2758
  "google/gemini-3.8-flash": "supported",
2877
2759
  "google/gemini-3.7-flash": "supported",
2878
2760
  "google/gemini-3.6-flash": "supported",
@@ -2996,7 +2878,7 @@ const getModelRate = (modelId) => {
2996
2878
  *
2997
2879
  * Keys are the canonical model IDs stella resolves for the provider
2998
2880
  * adapters (the same forms used in `MODEL_RATES`, `BYOK_MODEL_OPTIONS`,
2999
- * and `DEFAULT_MODELS`, including OpenRouter provider-prefixed slugs and
2881
+ * and the task defaults ledger, including OpenRouter provider-prefixed slugs and
3000
2882
  * AWS Bedrock IDs). Values are the providers' publicly documented input
3001
2883
  * windows; where a provider offers a larger beta window we intentionally
3002
2884
  * take the conservative default (e.g. Claude's standard 200K rather than
@@ -3020,6 +2902,7 @@ const CONTEXT_WINDOW_TOKENS = {
3020
2902
  "gemini-3.6-flash": 1048576,
3021
2903
  "gemini-3.7-flash": 1048576,
3022
2904
  "gemini-3.8-flash": 1048576,
2905
+ "gemini-4-argon": 1048576,
3023
2906
  "gemini-3.1-pro-preview": 1048576,
3024
2907
  "gpt-4o-mini": 128e3,
3025
2908
  "gpt-4o": 128e3,
@@ -3052,6 +2935,7 @@ const CONTEXT_WINDOW_TOKENS = {
3052
2935
  "mistral-medium-latest": 128e3,
3053
2936
  "mistral-medium-3-5": 128e3,
3054
2937
  "magistral-small-latest": 128e3,
2938
+ "google/gemini-4-argon": 1048576,
3055
2939
  "google/gemini-3.8-flash": 1048576,
3056
2940
  "google/gemini-3.7-flash": 1048576,
3057
2941
  "google/gemini-3.6-flash": 1048576,
@@ -3112,4 +2996,4 @@ const getModelReasoningCapabilities = (modelId) => {
3112
2996
  return Object.hasOwn(MODEL_REASONING_CAPABILITIES_BY_ID, normalized) ? MODEL_REASONING_CAPABILITIES_BY_ID[normalized] ?? null : null;
3113
2997
  };
3114
2998
  //#endregion
3115
- export { MODEL_RATES as $, getModelReasoningCapabilities as A, supportsStreamingToolUse as B, TANSTACK_AI_PROVIDERS as C, getModelDisplayMetadata as D, getModelDefaultReasoningEffort as E, isChatPdfAttachmentModelSupported as F, MODELS_DEV_RATE_PROVIDER_BY_CATALOG_PROVIDER as G, CAPABILITY_OVERRIDES as H, normalizeModelCatalogId as I, MODEL_RATE_UNITS_PER_USD as J, MODELS_DEV_RATE_SOURCE_ALIASES as K, resolveReasoningEffort as L, getOutputTokenLimit as M, isBYOKModelRoleSupported as N, getModelImageInputCapability as O, isBYOKProviderRoleSupported as P, REASONING_REPLAY_FORMATS as Q, resolveWorkingBYOKModelForRole as R, STREAMING_TOOL_USE_SUPPORTS as S, getContextWindowTokens as T, IMAGE_INPUT_OVERRIDES as U, DOCUMENT_INPUT_OVERRIDES as V, MODELS_DEV_RATE_CORRECTIONS as W, resolveModelRate as X, getStandardModelRate as Y, MODEL_REASONING_CAPABILITIES as Z, MODEL_DISPLAY_METADATA as _, BYOK_MODEL_OPTIONS as a, REASONING_EFFORTS as b, DECISION_MODEL_CATALOG as c, DEFAULT_MODELS as d, MODEL_DEFAULT_REASONING_EFFORTS as et, FALLBACK_CHAT_MODEL_BY_PROVIDER as f, MODEL_CATALOG_PROVIDER_KIND as g, MODEL_CATALOG_ID_ALIASES as h, BYOK_DOCUMENT_INPUT_MODEL_OPTIONS as i, MODEL_TEMPERATURE_POLICIES as it, getModelReasoningEfforts as j, getModelRate as k, DECISION_MODEL_PROVIDERS as l, IMAGE_INPUT_CAPABILITIES as m, ANTHROPIC_ADAPTIVE_THINKING_MODELS as n, MODEL_OUTPUT_TOKEN_LIMITS as nt, CHAT_PDF_ATTACHMENT_MODEL_OPTIONS as o, FIRST_PARTY_MODEL_PROVIDERS as p, RETAINED_MODELS_DEV_RATE_ENTRIES as q, BYOK_DEFAULT_MODELS as r, MODEL_REASONING_EFFORTS as rt, CONTEXT_WINDOW_TOKENS as s, AI_PROVIDERS as t, MODEL_IMAGE_INPUT_CAPABILITIES as tt, DEFAULT_CONTEXT_WINDOW_TOKENS as u, MODEL_ROLES as v, TEMPERATURE_POLICIES as w, RECOMMENDED_CHAT_MODELS as x, MODEL_STREAMING_TOOL_USE as y, shouldEmitTemperature as z };
2999
+ export { MODEL_OUTPUT_TOKEN_LIMITS as $, isBYOKModelRoleSupported as A, IMAGE_INPUT_OVERRIDES as B, getModelDefaultReasoningEffort as C, getModelReasoningCapabilities as D, getModelRate as E, resolveWorkingBYOKModelForTask as F, MODEL_RATE_UNITS_PER_USD as G, MODELS_DEV_RATE_PROVIDER_BY_CATALOG_PROVIDER as H, shouldEmitTemperature as I, MODEL_REASONING_CAPABILITIES as J, getStandardModelRate as K, supportsStreamingToolUse as L, isChatPdfAttachmentModelSupported as M, normalizeModelCatalogId as N, getModelReasoningEfforts as O, resolveReasoningEffort as P, MODEL_IMAGE_INPUT_CAPABILITIES as Q, DOCUMENT_INPUT_OVERRIDES as R, getContextWindowTokens as S, getModelImageInputCapability as T, MODELS_DEV_RATE_SOURCE_ALIASES as U, MODELS_DEV_RATE_CORRECTIONS as V, RETAINED_MODELS_DEV_RATE_ENTRIES as W, MODEL_RATES as X, REASONING_REPLAY_FORMATS as Y, MODEL_DEFAULT_REASONING_EFFORTS as Z, REASONING_EFFORTS as _, BYOK_MODEL_OPTIONS as a, TANSTACK_AI_PROVIDERS as b, DECISION_MODEL_CATALOG as c, FIRST_PARTY_MODEL_PROVIDERS as d, MODEL_REASONING_EFFORTS as et, IMAGE_INPUT_CAPABILITIES as f, MODEL_STREAMING_TOOL_USE as g, MODEL_DISPLAY_METADATA as h, BYOK_DOCUMENT_INPUT_MODEL_OPTIONS as i, isBYOKProviderRoleSupported as j, getOutputTokenLimit as k, DECISION_MODEL_PROVIDERS as l, MODEL_CATALOG_PROVIDER_KIND as m, ANTHROPIC_ADAPTIVE_THINKING_MODELS as n, CHAT_PDF_ATTACHMENT_MODEL_OPTIONS as o, MODEL_CATALOG_ID_ALIASES as p, resolveModelRate as q, BYOK_DEFAULT_MODELS as r, CONTEXT_WINDOW_TOKENS as s, AI_PROVIDERS as t, MODEL_TEMPERATURE_POLICIES as tt, DEFAULT_CONTEXT_WINDOW_TOKENS as u, RECOMMENDED_CHAT_MODELS as v, getModelDisplayMetadata as w, TEMPERATURE_POLICIES as x, STREAMING_TOOL_USE_SUPPORTS as y, CAPABILITY_OVERRIDES as z };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stll/ai-catalog",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "description": "Provider-neutral AI model roles, capabilities, and curated model metadata.",
5
5
  "keywords": [
6
6
  "ai",
@@ -36,6 +36,10 @@
36
36
  "./benchmarks": {
37
37
  "types": "./dist/benchmarks.d.ts",
38
38
  "import": "./dist/benchmarks.js"
39
+ },
40
+ "./model-defaults-ledger": {
41
+ "types": "./dist/model-defaults-ledger.d.ts",
42
+ "import": "./dist/model-defaults-ledger.js"
39
43
  }
40
44
  },
41
45
  "publishConfig": {
@@ -47,9 +51,11 @@
47
51
  "gen:benchmarks": "bun ../scripts/src/model-catalog-benchmarks-gen.ts",
48
52
  "gen:capabilities": "bun --preload ../../scripts/offline-network-preload.ts ../scripts/src/model-catalog-capabilities-gen.ts",
49
53
  "check:generations": "bun --preload ../../scripts/offline-network-preload.ts ../scripts/src/model-catalog-generation-check.ts",
54
+ "check:defaults": "bun ../../scripts/check-model-defaults-ledger.ts",
50
55
  "gen:rates": "bun --preload ../../scripts/offline-network-preload.ts ../scripts/src/model-catalog-rates-gen.ts",
51
56
  "pack:dry-run": "bun pm pack --dry-run",
52
57
  "test": "bun test src",
58
+ "test:defaults": "bun test src/model-defaults-ledger.test.ts",
53
59
  "test:property": "bun test --preload @stll/property-testing/preload $(grep -rlE 'fc\\.assert|assertProperty' src --include='*.test.ts')",
54
60
  "typecheck": "bun check --no-pretty --all --project=tsconfig.json",
55
61
  "lint": "cd ../.. && bun --bun oxlint -c oxlint.config.ts --report-unused-disable-directives-severity=error --type-aware --type-check packages/ai-catalog",