@x12i/ai-profiles 1.4.0 → 1.5.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.
Files changed (144) hide show
  1. package/README.md +186 -16
  2. package/dist/buildCatalogFromOpenRouterApi.d.ts +29 -0
  3. package/dist/buildCatalogFromOpenRouterApi.d.ts.map +1 -0
  4. package/dist/buildCatalogFromOpenRouterApi.js +113 -0
  5. package/dist/buildCatalogFromOpenRouterApi.js.map +1 -0
  6. package/dist/buildModelsRegistry.d.ts +25 -0
  7. package/dist/buildModelsRegistry.d.ts.map +1 -0
  8. package/dist/buildModelsRegistry.js +190 -0
  9. package/dist/buildModelsRegistry.js.map +1 -0
  10. package/dist/buildResolvedProfile.d.ts +3 -1
  11. package/dist/buildResolvedProfile.d.ts.map +1 -1
  12. package/dist/buildResolvedProfile.js +94 -11
  13. package/dist/buildResolvedProfile.js.map +1 -1
  14. package/dist/catalogEnrichment.d.ts +19 -0
  15. package/dist/catalogEnrichment.d.ts.map +1 -0
  16. package/dist/catalogEnrichment.js +87 -0
  17. package/dist/catalogEnrichment.js.map +1 -0
  18. package/dist/computeRegistryStatistics.d.ts +15 -0
  19. package/dist/computeRegistryStatistics.d.ts.map +1 -0
  20. package/dist/computeRegistryStatistics.js +168 -0
  21. package/dist/computeRegistryStatistics.js.map +1 -0
  22. package/dist/constants.d.ts +6 -0
  23. package/dist/constants.d.ts.map +1 -1
  24. package/dist/constants.js +10 -0
  25. package/dist/constants.js.map +1 -1
  26. package/dist/data/models-catalog.json +2219 -0
  27. package/dist/data/models-profiles.json +1361 -193
  28. package/dist/data/models-profiles.schema.json +130 -0
  29. package/dist/data/models-registry.json +1606 -0
  30. package/dist/data/openrouter-models-catalog.json +857 -0
  31. package/dist/data/profiles-shortcuts.json +101 -2
  32. package/dist/errors.d.ts +1 -1
  33. package/dist/errors.d.ts.map +1 -1
  34. package/dist/errors.js.map +1 -1
  35. package/dist/formatRegistryStatistics.d.ts +4 -0
  36. package/dist/formatRegistryStatistics.d.ts.map +1 -0
  37. package/dist/formatRegistryStatistics.js +34 -0
  38. package/dist/formatRegistryStatistics.js.map +1 -0
  39. package/dist/getAIRegistryStatistics.d.ts +11 -0
  40. package/dist/getAIRegistryStatistics.d.ts.map +1 -0
  41. package/dist/getAIRegistryStatistics.js +52 -0
  42. package/dist/getAIRegistryStatistics.js.map +1 -0
  43. package/dist/index.d.ts +22 -1
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +19 -0
  46. package/dist/index.js.map +1 -1
  47. package/dist/listAIProfiles.d.ts +6 -0
  48. package/dist/listAIProfiles.d.ts.map +1 -1
  49. package/dist/listAIProfiles.js +6 -0
  50. package/dist/listAIProfiles.js.map +1 -1
  51. package/dist/loadModelsRegistry.d.ts +6 -0
  52. package/dist/loadModelsRegistry.d.ts.map +1 -0
  53. package/dist/loadModelsRegistry.js +43 -0
  54. package/dist/loadModelsRegistry.js.map +1 -0
  55. package/dist/loader/catalogMemoryCache.d.ts +12 -0
  56. package/dist/loader/catalogMemoryCache.d.ts.map +1 -0
  57. package/dist/loader/catalogMemoryCache.js +14 -0
  58. package/dist/loader/catalogMemoryCache.js.map +1 -0
  59. package/dist/loader/loadBundledModelsCatalog.d.ts +3 -0
  60. package/dist/loader/loadBundledModelsCatalog.d.ts.map +1 -0
  61. package/dist/loader/loadBundledModelsCatalog.js +20 -0
  62. package/dist/loader/loadBundledModelsCatalog.js.map +1 -0
  63. package/dist/loader/loadBundledModelsProfiles.d.ts +4 -0
  64. package/dist/loader/loadBundledModelsProfiles.d.ts.map +1 -0
  65. package/dist/loader/loadBundledModelsProfiles.js +14 -0
  66. package/dist/loader/loadBundledModelsProfiles.js.map +1 -0
  67. package/dist/loader/loadBundledRegistry.d.ts.map +1 -1
  68. package/dist/loader/loadBundledRegistry.js +2 -1
  69. package/dist/loader/loadBundledRegistry.js.map +1 -1
  70. package/dist/loader/loadModelsCatalog.d.ts +9 -0
  71. package/dist/loader/loadModelsCatalog.d.ts.map +1 -0
  72. package/dist/loader/loadModelsCatalog.js +72 -0
  73. package/dist/loader/loadModelsCatalog.js.map +1 -0
  74. package/dist/loader/loadModelsProfilesJson.d.ts +3 -0
  75. package/dist/loader/loadModelsProfilesJson.d.ts.map +1 -0
  76. package/dist/loader/loadModelsProfilesJson.js +18 -0
  77. package/dist/loader/loadModelsProfilesJson.js.map +1 -0
  78. package/dist/loader/loadRemoteModelsCatalog.d.ts +3 -0
  79. package/dist/loader/loadRemoteModelsCatalog.d.ts.map +1 -0
  80. package/dist/loader/loadRemoteModelsCatalog.js +23 -0
  81. package/dist/loader/loadRemoteModelsCatalog.js.map +1 -0
  82. package/dist/loader/loadRemoteModelsProfiles.d.ts +3 -0
  83. package/dist/loader/loadRemoteModelsProfiles.d.ts.map +1 -0
  84. package/dist/loader/loadRemoteModelsProfiles.js +21 -0
  85. package/dist/loader/loadRemoteModelsProfiles.js.map +1 -0
  86. package/dist/loader/loadRemoteRegistry.d.ts.map +1 -1
  87. package/dist/loader/loadRemoteRegistry.js +2 -1
  88. package/dist/loader/loadRemoteRegistry.js.map +1 -1
  89. package/dist/mergeCatalogSupplement.d.ts +4 -0
  90. package/dist/mergeCatalogSupplement.d.ts.map +1 -0
  91. package/dist/mergeCatalogSupplement.js +26 -0
  92. package/dist/mergeCatalogSupplement.js.map +1 -0
  93. package/dist/modelIdentity.d.ts +33 -0
  94. package/dist/modelIdentity.d.ts.map +1 -0
  95. package/dist/modelIdentity.js +150 -0
  96. package/dist/modelIdentity.js.map +1 -0
  97. package/dist/modelsCatalog.d.ts +21 -0
  98. package/dist/modelsCatalog.d.ts.map +1 -0
  99. package/dist/modelsCatalog.js +187 -0
  100. package/dist/modelsCatalog.js.map +1 -0
  101. package/dist/profileCatalogSupplement.d.ts +7 -0
  102. package/dist/profileCatalogSupplement.d.ts.map +1 -0
  103. package/dist/profileCatalogSupplement.js +292 -0
  104. package/dist/profileCatalogSupplement.js.map +1 -0
  105. package/dist/profileRegistryV2.d.ts +19 -0
  106. package/dist/profileRegistryV2.d.ts.map +1 -0
  107. package/dist/profileRegistryV2.js +257 -0
  108. package/dist/profileRegistryV2.js.map +1 -0
  109. package/dist/profileRegistryV3.d.ts +11 -0
  110. package/dist/profileRegistryV3.d.ts.map +1 -0
  111. package/dist/profileRegistryV3.js +526 -0
  112. package/dist/profileRegistryV3.js.map +1 -0
  113. package/dist/resolveAIProfile.d.ts +8 -0
  114. package/dist/resolveAIProfile.d.ts.map +1 -1
  115. package/dist/resolveAIProfile.js +62 -18
  116. package/dist/resolveAIProfile.js.map +1 -1
  117. package/dist/resolveModelRouting.d.ts +2 -1
  118. package/dist/resolveModelRouting.d.ts.map +1 -1
  119. package/dist/resolveModelRouting.js +9 -10
  120. package/dist/resolveModelRouting.js.map +1 -1
  121. package/dist/types.d.ts +339 -4
  122. package/dist/types.d.ts.map +1 -1
  123. package/dist/types.js +10 -0
  124. package/dist/types.js.map +1 -1
  125. package/dist/validateProfileVendorCoverage.d.ts +12 -0
  126. package/dist/validateProfileVendorCoverage.d.ts.map +1 -0
  127. package/dist/validateProfileVendorCoverage.js +58 -0
  128. package/dist/validateProfileVendorCoverage.js.map +1 -0
  129. package/dist/validation/openRouterAlignment.d.ts +6 -15
  130. package/dist/validation/openRouterAlignment.d.ts.map +1 -1
  131. package/dist/validation/openRouterAlignment.js +9 -57
  132. package/dist/validation/openRouterAlignment.js.map +1 -1
  133. package/dist/validation/validateModelsCatalog.d.ts +3 -0
  134. package/dist/validation/validateModelsCatalog.d.ts.map +1 -0
  135. package/dist/validation/validateModelsCatalog.js +42 -0
  136. package/dist/validation/validateModelsCatalog.js.map +1 -0
  137. package/dist/validation/validateModelsProfilesJson.d.ts.map +1 -1
  138. package/dist/validation/validateModelsProfilesJson.js +38 -2
  139. package/dist/validation/validateModelsProfilesJson.js.map +1 -1
  140. package/dist/vendorPolicy.d.ts +20 -0
  141. package/dist/vendorPolicy.d.ts.map +1 -0
  142. package/dist/vendorPolicy.js +71 -0
  143. package/dist/vendorPolicy.js.map +1 -0
  144. package/package.json +12 -2
@@ -0,0 +1,526 @@
1
+ import { defaultFallbackOrder, fixVendorModelId, getChoicePricing, openRouterSlugFor, } from "./profileRegistryV2.js";
2
+ export const PREDICTED_VENDOR_MODEL_IDS = new Set([
3
+ "gpt-5.4",
4
+ "gpt-5.4-mini",
5
+ "gpt-5.5-pro",
6
+ "claude-sonnet-4-6",
7
+ "claude-opus-4-8",
8
+ "claude-opus-4-7",
9
+ "gemini-3.5-flash",
10
+ "gemini-3.1-flash-lite",
11
+ "grok-4.3",
12
+ "deepseek-v4-pro",
13
+ "deepseek-v4-flash",
14
+ ]);
15
+ const VERIFIED_VENDOR_MODEL_IDS = new Set([
16
+ "gemini-2.5-flash-lite",
17
+ "gemini-2.5-flash",
18
+ "gemini-2.5-pro",
19
+ "claude-haiku-4-5",
20
+ "claude-sonnet-4-5",
21
+ "claude-opus-4-5",
22
+ "gpt-4.1",
23
+ "gpt-4.1-mini",
24
+ "gpt-4o",
25
+ "gpt-4o-mini",
26
+ "o3-mini",
27
+ "deepseek-chat",
28
+ "deepseek-reasoner",
29
+ "grok-build-0.1",
30
+ "gpt-5.5",
31
+ "meta-llama/Llama-3.3-70B-Instruct-Turbo",
32
+ "Qwen/Qwen3-235B-A22B-Instruct-2507-tput",
33
+ ]);
34
+ const PROFILE_REQUIRED_CAPABILITIES = {
35
+ cheap: { cost: "low", reasoning: "minimal", context: "standard" },
36
+ fast: { speed: "high", cost: "low", reasoning: "low", latency: "low" },
37
+ balanced: {
38
+ reasoning: "medium",
39
+ coding: true,
40
+ context: "standard",
41
+ cost: "medium",
42
+ },
43
+ deep: {
44
+ reasoning: "high",
45
+ coding: true,
46
+ context: "large",
47
+ quality: "high",
48
+ },
49
+ pro: {
50
+ reasoning: "high",
51
+ quality: "premium",
52
+ context: "large",
53
+ },
54
+ json: {
55
+ structuredOutput: true,
56
+ reasoning: "low",
57
+ supportsJsonSchema: true,
58
+ },
59
+ coding: {
60
+ reasoning: "high",
61
+ coding: true,
62
+ context: "large",
63
+ quality: "high",
64
+ },
65
+ extraction: {
66
+ structuredOutput: true,
67
+ reasoning: "minimal",
68
+ cost: "low",
69
+ supportsJsonSchema: true,
70
+ },
71
+ routing: {
72
+ reasoning: "minimal",
73
+ cost: "low",
74
+ latency: "low",
75
+ },
76
+ agentic: {
77
+ reasoning: "medium",
78
+ coding: true,
79
+ supportsTools: true,
80
+ context: "large",
81
+ },
82
+ research: {
83
+ reasoning: "high",
84
+ context: "large",
85
+ quality: "high",
86
+ },
87
+ cyber: {
88
+ reasoning: "high",
89
+ coding: true,
90
+ context: "large",
91
+ },
92
+ content: {
93
+ reasoning: "medium",
94
+ context: "standard",
95
+ quality: "high",
96
+ },
97
+ summarization: {
98
+ reasoning: "low",
99
+ cost: "low",
100
+ context: "large",
101
+ },
102
+ vision: {
103
+ reasoning: "medium",
104
+ supportsVision: true,
105
+ context: "large",
106
+ },
107
+ open_weights: {
108
+ reasoning: "medium",
109
+ coding: true,
110
+ cost: "medium",
111
+ },
112
+ local: {
113
+ reasoning: "minimal",
114
+ cost: "low",
115
+ },
116
+ };
117
+ function inferModelStatus(vendorModelId, provider) {
118
+ if (provider === "local") {
119
+ return "verified";
120
+ }
121
+ const id = fixVendorModelId(vendorModelId);
122
+ if (PREDICTED_VENDOR_MODEL_IDS.has(id)) {
123
+ return "predicted";
124
+ }
125
+ if (VERIFIED_VENDOR_MODEL_IDS.has(id)) {
126
+ return "verified";
127
+ }
128
+ return "predicted";
129
+ }
130
+ function stripChoicePricing(choice) {
131
+ const { pricing: _pricing, ...rest } = choice;
132
+ if (choice.provider === "local") {
133
+ return {
134
+ ...rest,
135
+ metadata: {
136
+ ...(choice.metadata ?? {}),
137
+ billingModel: "self_hosted",
138
+ },
139
+ };
140
+ }
141
+ return rest;
142
+ }
143
+ function ensureChoiceApi(choice) {
144
+ const vendorModelId = fixVendorModelId(choice.modelId);
145
+ const isVendorDirect = choice.metadata?.openRouter === "vendor-direct" ||
146
+ choice.provider === "together";
147
+ const orSlug = isVendorDirect
148
+ ? null
149
+ : openRouterSlugFor(choice.provider, vendorModelId);
150
+ const defaultTransport = choice.provider === "local"
151
+ ? "direct"
152
+ : isVendorDirect
153
+ ? "direct"
154
+ : (choice.runtime?.backend ?? "openrouter") === "openrouter"
155
+ ? "openrouter"
156
+ : "direct";
157
+ return {
158
+ ...choice,
159
+ modelId: vendorModelId,
160
+ modelStatus: choice.modelStatus ?? inferModelStatus(vendorModelId, choice.provider),
161
+ api: choice.api ?? {
162
+ defaultTransport,
163
+ vendorModelId,
164
+ openRouterModelId: orSlug,
165
+ },
166
+ };
167
+ }
168
+ function buildCodingProfile(lastVerifiedAt) {
169
+ return {
170
+ profile: "coding",
171
+ displayName: "Coding",
172
+ description: "Model selection optimized for software engineering: implementation, refactors, reviews, and debugging.",
173
+ category: "engineering",
174
+ aliases: ["dev", "developer", "software", "programming", "code"],
175
+ defaultChoice: "default",
176
+ requiredCapabilities: PROFILE_REQUIRED_CAPABILITIES.coding,
177
+ choices: {
178
+ default: {
179
+ choice: "default",
180
+ displayName: "Coding Default",
181
+ description: "Recommended model for general coding work.",
182
+ provider: "anthropic",
183
+ modelId: "claude-sonnet-4-5",
184
+ modelStatus: "verified",
185
+ runtime: {
186
+ instructionTier: "default",
187
+ backend: "openrouter",
188
+ reasoningEffort: "high",
189
+ toolPolicy: "read-only",
190
+ outputMode: "text",
191
+ },
192
+ reason: "Strong instruction following and code quality for everyday engineering tasks.",
193
+ api: {
194
+ defaultTransport: "openrouter",
195
+ vendorModelId: "claude-sonnet-4-5",
196
+ openRouterModelId: "anthropic/claude-sonnet-4.5",
197
+ },
198
+ verification: {
199
+ lastVerifiedAt,
200
+ sourceRefs: ["vendor:anthropic", "openrouter:catalog"],
201
+ },
202
+ },
203
+ openai_coding: {
204
+ choice: "openai_coding",
205
+ displayName: "OpenAI Coding",
206
+ description: "OpenAI alternative for coding workloads.",
207
+ provider: "openai",
208
+ modelId: "gpt-4.1",
209
+ modelStatus: "verified",
210
+ runtime: {
211
+ reasoningEffort: "high",
212
+ toolPolicy: "read-only",
213
+ outputMode: "text",
214
+ },
215
+ reason: "Solid alternative for multi-file edits and API-heavy codebases.",
216
+ api: {
217
+ defaultTransport: "openrouter",
218
+ vendorModelId: "gpt-4.1",
219
+ openRouterModelId: "openai/gpt-4.1",
220
+ },
221
+ verification: {
222
+ lastVerifiedAt,
223
+ sourceRefs: ["vendor:openai", "openrouter:catalog"],
224
+ },
225
+ },
226
+ cost_coding: {
227
+ choice: "cost_coding",
228
+ displayName: "Budget Coding",
229
+ description: "Lower-cost coding option for simpler changes.",
230
+ provider: "deepseek",
231
+ modelId: "deepseek-chat",
232
+ modelStatus: "verified",
233
+ runtime: {
234
+ reasoningEffort: "medium",
235
+ toolPolicy: "read-only",
236
+ outputMode: "text",
237
+ },
238
+ reason: "Cost-effective for smaller patches, tests, and boilerplate generation.",
239
+ api: {
240
+ defaultTransport: "openrouter",
241
+ vendorModelId: "deepseek-chat",
242
+ openRouterModelId: "deepseek/deepseek-chat",
243
+ },
244
+ verification: {
245
+ lastVerifiedAt,
246
+ sourceRefs: ["vendor:deepseek", "openrouter:catalog"],
247
+ },
248
+ },
249
+ },
250
+ fallbackChoiceOrder: ["default", "openai_coding", "cost_coding"],
251
+ };
252
+ }
253
+ function buildExtractionProfile(lastVerifiedAt) {
254
+ return {
255
+ profile: "extraction",
256
+ displayName: "Extraction",
257
+ description: "Model selection for NER, classification, taxonomy mapping, entity extraction, and document labeling.",
258
+ category: "extraction",
259
+ aliases: ["ner", "classify", "labeling", "entity-extraction", "parse"],
260
+ defaultChoice: "default",
261
+ requiredCapabilities: PROFILE_REQUIRED_CAPABILITIES.extraction,
262
+ runtime: {
263
+ outputMode: "json",
264
+ temperature: 0,
265
+ },
266
+ choices: {
267
+ default: {
268
+ choice: "default",
269
+ displayName: "Extraction Default",
270
+ description: "Fast, low-cost extraction for high-volume labeling pipelines.",
271
+ provider: "google",
272
+ modelId: "gemini-2.5-flash-lite",
273
+ modelStatus: "verified",
274
+ runtime: {
275
+ reasoningEffort: "minimal",
276
+ toolPolicy: "none",
277
+ outputMode: "json",
278
+ temperature: 0,
279
+ },
280
+ reason: "Optimized for bulk extraction where latency and cost dominate.",
281
+ api: {
282
+ defaultTransport: "openrouter",
283
+ vendorModelId: "gemini-2.5-flash-lite",
284
+ openRouterModelId: "google/gemini-2.5-flash-lite",
285
+ },
286
+ verification: {
287
+ lastVerifiedAt,
288
+ sourceRefs: ["vendor:google", "openrouter:catalog"],
289
+ },
290
+ },
291
+ quality_extraction: {
292
+ choice: "quality_extraction",
293
+ displayName: "Quality Extraction",
294
+ description: "Higher-quality extraction when ambiguity or long documents matter.",
295
+ provider: "anthropic",
296
+ modelId: "claude-haiku-4-5",
297
+ modelStatus: "verified",
298
+ runtime: {
299
+ reasoningEffort: "low",
300
+ toolPolicy: "none",
301
+ outputMode: "json",
302
+ temperature: 0,
303
+ },
304
+ reason: "Better entity boundaries and taxonomy consistency on messy inputs.",
305
+ api: {
306
+ defaultTransport: "openrouter",
307
+ vendorModelId: "claude-haiku-4-5",
308
+ openRouterModelId: "anthropic/claude-haiku-4.5",
309
+ },
310
+ verification: {
311
+ lastVerifiedAt,
312
+ sourceRefs: ["vendor:anthropic", "openrouter:catalog"],
313
+ },
314
+ },
315
+ },
316
+ fallbackChoiceOrder: ["default", "quality_extraction"],
317
+ };
318
+ }
319
+ function buildRoutingProfile(lastVerifiedAt) {
320
+ return {
321
+ profile: "routing",
322
+ displayName: "Routing",
323
+ description: "Ultra-low-cost models for intent classification, record routing, and workflow branching.",
324
+ category: "routing",
325
+ aliases: ["router", "classifier", "intent", "branch", "triage"],
326
+ defaultChoice: "default",
327
+ requiredCapabilities: PROFILE_REQUIRED_CAPABILITIES.routing,
328
+ choices: {
329
+ default: {
330
+ choice: "default",
331
+ displayName: "Routing Default",
332
+ description: "Cheapest reliable option for high-volume routing decisions.",
333
+ provider: "google",
334
+ modelId: "gemini-2.5-flash-lite",
335
+ modelStatus: "verified",
336
+ runtime: {
337
+ reasoningEffort: "minimal",
338
+ toolPolicy: "none",
339
+ outputMode: "json",
340
+ temperature: 0,
341
+ },
342
+ reason: "Minimize spend on per-request routing and orchestration gates.",
343
+ api: {
344
+ defaultTransport: "openrouter",
345
+ vendorModelId: "gemini-2.5-flash-lite",
346
+ openRouterModelId: "google/gemini-2.5-flash-lite",
347
+ },
348
+ verification: {
349
+ lastVerifiedAt,
350
+ sourceRefs: ["vendor:google", "openrouter:catalog"],
351
+ },
352
+ },
353
+ safer_routing: {
354
+ choice: "safer_routing",
355
+ displayName: "Safer Routing",
356
+ description: "Slightly higher cost when routing mistakes are expensive.",
357
+ provider: "anthropic",
358
+ modelId: "claude-haiku-4-5",
359
+ modelStatus: "verified",
360
+ runtime: {
361
+ reasoningEffort: "low",
362
+ toolPolicy: "none",
363
+ outputMode: "json",
364
+ temperature: 0,
365
+ },
366
+ reason: "Better instruction adherence for multi-label or nested routing trees.",
367
+ api: {
368
+ defaultTransport: "openrouter",
369
+ vendorModelId: "claude-haiku-4-5",
370
+ openRouterModelId: "anthropic/claude-haiku-4.5",
371
+ },
372
+ verification: {
373
+ lastVerifiedAt,
374
+ sourceRefs: ["vendor:anthropic", "openrouter:catalog"],
375
+ },
376
+ },
377
+ },
378
+ fallbackChoiceOrder: ["default", "safer_routing"],
379
+ };
380
+ }
381
+ export function isModelsProfilesV3(value) {
382
+ return value.schema === "x12i.ai-profiles.model-registry.v3";
383
+ }
384
+ export function migrateModelsProfilesToV3(input, options) {
385
+ const lastVerifiedAt = options?.lastVerifiedAt ?? new Date().toISOString().replace(/\.\d{3}Z$/, "Z");
386
+ const profiles = {};
387
+ for (const [profileKey, profile] of Object.entries(input.profiles)) {
388
+ const choices = {};
389
+ for (const [choiceKey, choice] of Object.entries(profile.choices)) {
390
+ let migrated = stripChoicePricing(ensureChoiceApi(choice));
391
+ if (profileKey === "open_weights") {
392
+ migrated = {
393
+ ...migrated,
394
+ deploymentType: (migrated.deploymentType ??
395
+ "openWeightsHosted"),
396
+ };
397
+ }
398
+ choices[choiceKey] = migrated;
399
+ }
400
+ profiles[profileKey] = {
401
+ ...profile,
402
+ requiredCapabilities: profile.requiredCapabilities ??
403
+ PROFILE_REQUIRED_CAPABILITIES[profileKey],
404
+ choices,
405
+ fallbackChoiceOrder: defaultFallbackOrder(profile),
406
+ ...(profileKey === "open_weights"
407
+ ? {
408
+ deploymentType: "openWeightsHosted",
409
+ metadata: {
410
+ ...(profile.metadata ?? {}),
411
+ deploymentStrategy: "openWeightsHosted",
412
+ },
413
+ }
414
+ : {}),
415
+ };
416
+ }
417
+ profiles.coding = profiles.coding ?? buildCodingProfile(lastVerifiedAt);
418
+ profiles.extraction = profiles.extraction ?? buildExtractionProfile(lastVerifiedAt);
419
+ profiles.routing = profiles.routing ?? buildRoutingProfile(lastVerifiedAt);
420
+ return {
421
+ schema: "x12i.ai-profiles.model-registry.v3",
422
+ registryId: "models-profiles",
423
+ generatedAt: input.generatedAt ?? lastVerifiedAt,
424
+ lastVerifiedAt,
425
+ version: "3.0.0",
426
+ currency: "USD",
427
+ pricingUnit: "1M_tokens",
428
+ namingConvention: "lowerCamelCase",
429
+ semantics: {
430
+ provider: "Billing owner / vendor source of truth for the model SKU.",
431
+ modelId: "Canonical vendor-native model identifier for direct API calls.",
432
+ openRouterModelId: "OpenRouter transport slug; pricing and capabilities are resolved from models-catalog.json at runtime.",
433
+ modelStatus: "verified = stable vendor SKU; predicted = forward-looking placeholder — not guaranteed callable.",
434
+ requiredCapabilities: "Profile intent contract; concrete model picks remain suggestions until Optimixer selects dynamically.",
435
+ deploymentType: "How the model is operated (proprietary API vs hosted open weights vs self-hosted).",
436
+ },
437
+ sourceCatalog: input.sourceCatalog ?? {
438
+ providers: [
439
+ { id: "openai", docsUrl: "https://platform.openai.com/docs/models" },
440
+ { id: "anthropic", docsUrl: "https://docs.anthropic.com/en/docs/about-claude/models" },
441
+ { id: "google", docsUrl: "https://ai.google.dev/gemini-api/docs/models" },
442
+ { id: "deepseek", docsUrl: "https://api-docs.deepseek.com" },
443
+ { id: "xai", docsUrl: "https://docs.x.ai/docs/models" },
444
+ { id: "together", docsUrl: "https://docs.together.ai/docs/serverless-models" },
445
+ ],
446
+ modelsCatalogUrl: "https://open-assets.x12i.com/models-catalog.json",
447
+ },
448
+ profiles,
449
+ };
450
+ }
451
+ /** Verified SKU replacements for profile default choices (production-safe defaults). */
452
+ const VERIFIED_DEFAULT_SKU = {
453
+ "gpt-5.4-mini": {
454
+ provider: "openai",
455
+ modelId: "gpt-4o-mini",
456
+ openRouterModelId: "openai/gpt-4o-mini",
457
+ },
458
+ "gpt-5.4": {
459
+ provider: "openai",
460
+ modelId: "gpt-4.1",
461
+ openRouterModelId: "openai/gpt-4.1",
462
+ },
463
+ "claude-sonnet-4-6": {
464
+ provider: "anthropic",
465
+ modelId: "claude-sonnet-4-5",
466
+ openRouterModelId: "anthropic/claude-sonnet-4.5",
467
+ },
468
+ };
469
+ function applyVerifiedSkuToChoice(choice) {
470
+ const replacement = VERIFIED_DEFAULT_SKU[choice.modelId];
471
+ if (!replacement) {
472
+ return choice;
473
+ }
474
+ const defaultTransport = choice.api?.defaultTransport ??
475
+ (choice.provider === "together" ? "direct" : "openrouter");
476
+ return {
477
+ ...choice,
478
+ provider: replacement.provider,
479
+ modelId: replacement.modelId,
480
+ modelStatus: "verified",
481
+ api: {
482
+ defaultTransport,
483
+ vendorModelId: replacement.modelId,
484
+ openRouterModelId: replacement.openRouterModelId,
485
+ },
486
+ };
487
+ }
488
+ /**
489
+ * Point each profile's {@link AIProfileDefinition.defaultChoice} at a verified SKU
490
+ * when the current default uses a forward-looking model id.
491
+ */
492
+ function reconcileChoiceModelStatus(choice) {
493
+ const vendorModelId = fixVendorModelId(choice.modelId);
494
+ const status = inferModelStatus(vendorModelId, choice.provider);
495
+ if (choice.modelStatus === status) {
496
+ return choice;
497
+ }
498
+ return { ...choice, modelStatus: status };
499
+ }
500
+ export function applyVerifiedProfileDefaults(input) {
501
+ const profiles = {};
502
+ for (const [profileKey, profile] of Object.entries(input.profiles)) {
503
+ const choices = {};
504
+ for (const [choiceKey, choice] of Object.entries(profile.choices)) {
505
+ let updated = reconcileChoiceModelStatus(choice);
506
+ if (choiceKey === profile.defaultChoice) {
507
+ updated = applyVerifiedSkuToChoice(updated);
508
+ }
509
+ choices[choiceKey] = updated;
510
+ }
511
+ profiles[profileKey] = { ...profile, choices };
512
+ }
513
+ return {
514
+ ...input,
515
+ profiles,
516
+ lastVerifiedAt: new Date().toISOString().replace(/\.\d{3}Z$/, "Z"),
517
+ };
518
+ }
519
+ /** Resolve pricing: catalog-first at runtime; embedded profile pricing is legacy fallback only. */
520
+ export function resolveChoicePricing(choice, catalogPricing) {
521
+ if (catalogPricing) {
522
+ return catalogPricing;
523
+ }
524
+ return getChoicePricing(choice);
525
+ }
526
+ //# sourceMappingURL=profileRegistryV3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profileRegistryV3.js","sourceRoot":"","sources":["../src/profileRegistryV3.ts"],"names":[],"mappings":"AASA,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAC;IAChD,SAAS;IACT,cAAc;IACd,aAAa;IACb,mBAAmB;IACnB,iBAAiB;IACjB,iBAAiB;IACjB,kBAAkB;IAClB,uBAAuB;IACvB,UAAU;IACV,iBAAiB;IACjB,mBAAmB;CACpB,CAAC,CAAC;AAEH,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC;IACxC,uBAAuB;IACvB,kBAAkB;IAClB,gBAAgB;IAChB,kBAAkB;IAClB,mBAAmB;IACnB,iBAAiB;IACjB,SAAS;IACT,cAAc;IACd,QAAQ;IACR,aAAa;IACb,SAAS;IACT,eAAe;IACf,mBAAmB;IACnB,gBAAgB;IAChB,SAAS;IACT,yCAAyC;IACzC,yCAAyC;CAC1C,CAAC,CAAC;AAEH,MAAM,6BAA6B,GACjC;IACE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE;IACjE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACtE,QAAQ,EAAE;QACR,SAAS,EAAE,QAAQ;QACnB,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,UAAU;QACnB,IAAI,EAAE,QAAQ;KACf;IACD,IAAI,EAAE;QACJ,SAAS,EAAE,MAAM;QACjB,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,MAAM;KAChB;IACD,GAAG,EAAE;QACH,SAAS,EAAE,MAAM;QACjB,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,OAAO;KACjB;IACD,IAAI,EAAE;QACJ,gBAAgB,EAAE,IAAI;QACtB,SAAS,EAAE,KAAK;QAChB,kBAAkB,EAAE,IAAI;KACzB;IACD,MAAM,EAAE;QACN,SAAS,EAAE,MAAM;QACjB,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,MAAM;KAChB;IACD,UAAU,EAAE;QACV,gBAAgB,EAAE,IAAI;QACtB,SAAS,EAAE,SAAS;QACpB,IAAI,EAAE,KAAK;QACX,kBAAkB,EAAE,IAAI;KACzB;IACD,OAAO,EAAE;QACP,SAAS,EAAE,SAAS;QACpB,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,KAAK;KACf;IACD,OAAO,EAAE;QACP,SAAS,EAAE,QAAQ;QACnB,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,IAAI;QACnB,OAAO,EAAE,OAAO;KACjB;IACD,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM;QACjB,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,MAAM;KAChB;IACD,KAAK,EAAE;QACL,SAAS,EAAE,MAAM;QACjB,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,OAAO;KACjB;IACD,OAAO,EAAE;QACP,SAAS,EAAE,QAAQ;QACnB,OAAO,EAAE,UAAU;QACnB,OAAO,EAAE,MAAM;KAChB;IACD,aAAa,EAAE;QACb,SAAS,EAAE,KAAK;QAChB,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,OAAO;KACjB;IACD,MAAM,EAAE;QACN,SAAS,EAAE,QAAQ;QACnB,cAAc,EAAE,IAAI;QACpB,OAAO,EAAE,OAAO;KACjB;IACD,YAAY,EAAE;QACZ,SAAS,EAAE,QAAQ;QACnB,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,QAAQ;KACf;IACD,KAAK,EAAE;QACL,SAAS,EAAE,SAAS;QACpB,IAAI,EAAE,KAAK;KACZ;CACF,CAAC;AAEJ,SAAS,gBAAgB,CAAC,aAAqB,EAAE,QAAgB;IAC/D,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,EAAE,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAC3C,IAAI,0BAA0B,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QACvC,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,yBAAyB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QACtC,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAuB;IACjD,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IAC9C,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChC,OAAO;YACL,GAAG,IAAI;YACP,QAAQ,EAAE;gBACR,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;gBAC1B,YAAY,EAAE,aAAa;aAC5B;SACF,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CAAC,MAAuB;IAC9C,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,cAAc,GAClB,MAAM,CAAC,QAAQ,EAAE,UAAU,KAAK,eAAe;QAC/C,MAAM,CAAC,QAAQ,KAAK,UAAU,CAAC;IACjC,MAAM,MAAM,GAAG,cAAc;QAC3B,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAEtD,MAAM,gBAAgB,GACpB,MAAM,CAAC,QAAQ,KAAK,OAAO;QACzB,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,cAAc;YACd,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,IAAI,YAAY,CAAC,KAAK,YAAY;gBAC1D,CAAC,CAAC,YAAY;gBACd,CAAC,CAAC,QAAQ,CAAC;IAEnB,OAAO;QACL,GAAG,MAAM;QACT,OAAO,EAAE,aAAa;QACtB,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC;QACnF,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI;YACjB,gBAAgB;YAChB,aAAa;YACb,iBAAiB,EAAE,MAAM;SAC1B;KACF,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,cAAsB;IAChD,OAAO;QACL,OAAO,EAAE,QAAQ;QACjB,WAAW,EAAE,QAAQ;QACrB,WAAW,EACT,wGAAwG;QAC1G,QAAQ,EAAE,aAAa;QACvB,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,CAAC;QAChE,aAAa,EAAE,SAAS;QACxB,oBAAoB,EAAE,6BAA6B,CAAC,MAAM;QAC1D,OAAO,EAAE;YACP,OAAO,EAAE;gBACP,MAAM,EAAE,SAAS;gBACjB,WAAW,EAAE,gBAAgB;gBAC7B,WAAW,EAAE,4CAA4C;gBACzD,QAAQ,EAAE,WAAW;gBACrB,OAAO,EAAE,mBAAmB;gBAC5B,WAAW,EAAE,UAAU;gBACvB,OAAO,EAAE;oBACP,eAAe,EAAE,SAAS;oBAC1B,OAAO,EAAE,YAAY;oBACrB,eAAe,EAAE,MAAM;oBACvB,UAAU,EAAE,WAAW;oBACvB,UAAU,EAAE,MAAM;iBACnB;gBACD,MAAM,EAAE,+EAA+E;gBACvF,GAAG,EAAE;oBACH,gBAAgB,EAAE,YAAY;oBAC9B,aAAa,EAAE,mBAAmB;oBAClC,iBAAiB,EAAE,6BAA6B;iBACjD;gBACD,YAAY,EAAE;oBACZ,cAAc;oBACd,UAAU,EAAE,CAAC,kBAAkB,EAAE,oBAAoB,CAAC;iBACvD;aACF;YACD,aAAa,EAAE;gBACb,MAAM,EAAE,eAAe;gBACvB,WAAW,EAAE,eAAe;gBAC5B,WAAW,EAAE,0CAA0C;gBACvD,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,SAAS;gBAClB,WAAW,EAAE,UAAU;gBACvB,OAAO,EAAE;oBACP,eAAe,EAAE,MAAM;oBACvB,UAAU,EAAE,WAAW;oBACvB,UAAU,EAAE,MAAM;iBACnB;gBACD,MAAM,EAAE,iEAAiE;gBACzE,GAAG,EAAE;oBACH,gBAAgB,EAAE,YAAY;oBAC9B,aAAa,EAAE,SAAS;oBACxB,iBAAiB,EAAE,gBAAgB;iBACpC;gBACD,YAAY,EAAE;oBACZ,cAAc;oBACd,UAAU,EAAE,CAAC,eAAe,EAAE,oBAAoB,CAAC;iBACpD;aACF;YACD,WAAW,EAAE;gBACX,MAAM,EAAE,aAAa;gBACrB,WAAW,EAAE,eAAe;gBAC5B,WAAW,EAAE,+CAA+C;gBAC5D,QAAQ,EAAE,UAAU;gBACpB,OAAO,EAAE,eAAe;gBACxB,WAAW,EAAE,UAAU;gBACvB,OAAO,EAAE;oBACP,eAAe,EAAE,QAAQ;oBACzB,UAAU,EAAE,WAAW;oBACvB,UAAU,EAAE,MAAM;iBACnB;gBACD,MAAM,EAAE,wEAAwE;gBAChF,GAAG,EAAE;oBACH,gBAAgB,EAAE,YAAY;oBAC9B,aAAa,EAAE,eAAe;oBAC9B,iBAAiB,EAAE,wBAAwB;iBAC5C;gBACD,YAAY,EAAE;oBACZ,cAAc;oBACd,UAAU,EAAE,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;iBACtD;aACF;SACF;QACD,mBAAmB,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,aAAa,CAAC;KACjE,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,cAAsB;IACpD,OAAO;QACL,OAAO,EAAE,YAAY;QACrB,WAAW,EAAE,YAAY;QACzB,WAAW,EACT,sGAAsG;QACxG,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,mBAAmB,EAAE,OAAO,CAAC;QACtE,aAAa,EAAE,SAAS;QACxB,oBAAoB,EAAE,6BAA6B,CAAC,UAAU;QAC9D,OAAO,EAAE;YACP,UAAU,EAAE,MAAM;YAClB,WAAW,EAAE,CAAC;SACf;QACD,OAAO,EAAE;YACP,OAAO,EAAE;gBACP,MAAM,EAAE,SAAS;gBACjB,WAAW,EAAE,oBAAoB;gBACjC,WAAW,EAAE,+DAA+D;gBAC5E,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,uBAAuB;gBAChC,WAAW,EAAE,UAAU;gBACvB,OAAO,EAAE;oBACP,eAAe,EAAE,SAAS;oBAC1B,UAAU,EAAE,MAAM;oBAClB,UAAU,EAAE,MAAM;oBAClB,WAAW,EAAE,CAAC;iBACf;gBACD,MAAM,EAAE,gEAAgE;gBACxE,GAAG,EAAE;oBACH,gBAAgB,EAAE,YAAY;oBAC9B,aAAa,EAAE,uBAAuB;oBACtC,iBAAiB,EAAE,8BAA8B;iBAClD;gBACD,YAAY,EAAE;oBACZ,cAAc;oBACd,UAAU,EAAE,CAAC,eAAe,EAAE,oBAAoB,CAAC;iBACpD;aACF;YACD,kBAAkB,EAAE;gBAClB,MAAM,EAAE,oBAAoB;gBAC5B,WAAW,EAAE,oBAAoB;gBACjC,WAAW,EAAE,oEAAoE;gBACjF,QAAQ,EAAE,WAAW;gBACrB,OAAO,EAAE,kBAAkB;gBAC3B,WAAW,EAAE,UAAU;gBACvB,OAAO,EAAE;oBACP,eAAe,EAAE,KAAK;oBACtB,UAAU,EAAE,MAAM;oBAClB,UAAU,EAAE,MAAM;oBAClB,WAAW,EAAE,CAAC;iBACf;gBACD,MAAM,EAAE,oEAAoE;gBAC5E,GAAG,EAAE;oBACH,gBAAgB,EAAE,YAAY;oBAC9B,aAAa,EAAE,kBAAkB;oBACjC,iBAAiB,EAAE,4BAA4B;iBAChD;gBACD,YAAY,EAAE;oBACZ,cAAc;oBACd,UAAU,EAAE,CAAC,kBAAkB,EAAE,oBAAoB,CAAC;iBACvD;aACF;SACF;QACD,mBAAmB,EAAE,CAAC,SAAS,EAAE,oBAAoB,CAAC;KACvD,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,cAAsB;IACjD,OAAO;QACL,OAAO,EAAE,SAAS;QAClB,WAAW,EAAE,SAAS;QACtB,WAAW,EACT,0FAA0F;QAC5F,QAAQ,EAAE,SAAS;QACnB,OAAO,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;QAC/D,aAAa,EAAE,SAAS;QACxB,oBAAoB,EAAE,6BAA6B,CAAC,OAAO;QAC3D,OAAO,EAAE;YACP,OAAO,EAAE;gBACP,MAAM,EAAE,SAAS;gBACjB,WAAW,EAAE,iBAAiB;gBAC9B,WAAW,EAAE,6DAA6D;gBAC1E,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,uBAAuB;gBAChC,WAAW,EAAE,UAAU;gBACvB,OAAO,EAAE;oBACP,eAAe,EAAE,SAAS;oBAC1B,UAAU,EAAE,MAAM;oBAClB,UAAU,EAAE,MAAM;oBAClB,WAAW,EAAE,CAAC;iBACf;gBACD,MAAM,EAAE,gEAAgE;gBACxE,GAAG,EAAE;oBACH,gBAAgB,EAAE,YAAY;oBAC9B,aAAa,EAAE,uBAAuB;oBACtC,iBAAiB,EAAE,8BAA8B;iBAClD;gBACD,YAAY,EAAE;oBACZ,cAAc;oBACd,UAAU,EAAE,CAAC,eAAe,EAAE,oBAAoB,CAAC;iBACpD;aACF;YACD,aAAa,EAAE;gBACb,MAAM,EAAE,eAAe;gBACvB,WAAW,EAAE,eAAe;gBAC5B,WAAW,EAAE,2DAA2D;gBACxE,QAAQ,EAAE,WAAW;gBACrB,OAAO,EAAE,kBAAkB;gBAC3B,WAAW,EAAE,UAAU;gBACvB,OAAO,EAAE;oBACP,eAAe,EAAE,KAAK;oBACtB,UAAU,EAAE,MAAM;oBAClB,UAAU,EAAE,MAAM;oBAClB,WAAW,EAAE,CAAC;iBACf;gBACD,MAAM,EAAE,uEAAuE;gBAC/E,GAAG,EAAE;oBACH,gBAAgB,EAAE,YAAY;oBAC9B,aAAa,EAAE,kBAAkB;oBACjC,iBAAiB,EAAE,4BAA4B;iBAChD;gBACD,YAAY,EAAE;oBACZ,cAAc;oBACd,UAAU,EAAE,CAAC,kBAAkB,EAAE,oBAAoB,CAAC;iBACvD;aACF;SACF;QACD,mBAAmB,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC;KAClD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAyB;IAC1D,OAAO,KAAK,CAAC,MAAM,KAAK,oCAAoC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,KAAyB,EACzB,OAAqC;IAErC,MAAM,cAAc,GAClB,OAAO,EAAE,cAAc,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAEhF,MAAM,QAAQ,GAAwC,EAAE,CAAC;IAEzD,KAAK,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnE,MAAM,OAAO,GAAoC,EAAE,CAAC;QAEpD,KAAK,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAClE,IAAI,QAAQ,GAAG,kBAAkB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;YAE3D,IAAI,UAAU,KAAK,cAAc,EAAE,CAAC;gBAClC,QAAQ,GAAG;oBACT,GAAG,QAAQ;oBACX,cAAc,EAAE,CAAC,QAAQ,CAAC,cAAc;wBACtC,mBAAmB,CAAmB;iBACzC,CAAC;YACJ,CAAC;YAED,OAAO,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;QAChC,CAAC;QAED,QAAQ,CAAC,UAAU,CAAC,GAAG;YACrB,GAAG,OAAO;YACV,oBAAoB,EAClB,OAAO,CAAC,oBAAoB;gBAC5B,6BAA6B,CAAC,UAAU,CAAC;YAC3C,OAAO;YACP,mBAAmB,EAAE,oBAAoB,CAAC,OAAO,CAAC;YAClD,GAAG,CAAC,UAAU,KAAK,cAAc;gBAC/B,CAAC,CAAC;oBACE,cAAc,EAAE,mBAAqC;oBACrD,QAAQ,EAAE;wBACR,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;wBAC3B,kBAAkB,EAAE,mBAAmB;qBACxC;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,kBAAkB,CAAC,cAAc,CAAC,CAAC;IACxE,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,sBAAsB,CAAC,cAAc,CAAC,CAAC;IACpF,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,mBAAmB,CAAC,cAAc,CAAC,CAAC;IAE3E,OAAO;QACL,MAAM,EAAE,oCAAoC;QAC5C,UAAU,EAAE,iBAAiB;QAC7B,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,cAAc;QAChD,cAAc;QACd,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,WAAW;QACxB,gBAAgB,EAAE,gBAAgB;QAClC,SAAS,EAAE;YACT,QAAQ,EAAE,2DAA2D;YACrE,OAAO,EAAE,gEAAgE;YACzE,iBAAiB,EACf,uGAAuG;YACzG,WAAW,EACT,kGAAkG;YACpG,oBAAoB,EAClB,uGAAuG;YACzG,cAAc,EACZ,oFAAoF;SACvF;QACD,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI;YACpC,SAAS,EAAE;gBACT,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,yCAAyC,EAAE;gBACpE,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,wDAAwD,EAAE;gBACtF,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,8CAA8C,EAAE;gBACzE,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,+BAA+B,EAAE;gBAC5D,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,+BAA+B,EAAE;gBACvD,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,iDAAiD,EAAE;aAC/E;YACD,gBAAgB,EAAE,kDAAkD;SACrE;QACD,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,wFAAwF;AACxF,MAAM,oBAAoB,GAKtB;IACF,cAAc,EAAE;QACd,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,aAAa;QACtB,iBAAiB,EAAE,oBAAoB;KACxC;IACD,SAAS,EAAE;QACT,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,SAAS;QAClB,iBAAiB,EAAE,gBAAgB;KACpC;IACD,mBAAmB,EAAE;QACnB,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,mBAAmB;QAC5B,iBAAiB,EAAE,6BAA6B;KACjD;CACF,CAAC;AAEF,SAAS,wBAAwB,CAAC,MAAuB;IACvD,MAAM,WAAW,GAAG,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,gBAAgB,GACpB,MAAM,CAAC,GAAG,EAAE,gBAAgB;QAC5B,CAAC,MAAM,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAE7D,OAAO;QACL,GAAG,MAAM;QACT,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,WAAW,EAAE,UAAU;QACvB,GAAG,EAAE;YACH,gBAAgB;YAChB,aAAa,EAAE,WAAW,CAAC,OAAO;YAClC,iBAAiB,EAAE,WAAW,CAAC,iBAAiB;SACjD;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,0BAA0B,CAAC,MAAuB;IACzD,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChE,IAAI,MAAM,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,KAAyB;IAEzB,MAAM,QAAQ,GAAwC,EAAE,CAAC;IAEzD,KAAK,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnE,MAAM,OAAO,GAAoC,EAAE,CAAC;QACpD,KAAK,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAClE,IAAI,OAAO,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;YACjD,IAAI,SAAS,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC;gBACxC,OAAO,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;YAC9C,CAAC;YACD,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;QAC/B,CAAC;QAED,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC;IACjD,CAAC;IAED,OAAO;QACL,GAAG,KAAK;QACR,QAAQ;QACR,cAAc,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC;KACnE,CAAC;AACJ,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,oBAAoB,CAClC,MAAuB,EACvB,cAA+B;IAE/B,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC"}
@@ -1,3 +1,11 @@
1
1
  import type { ResolveAIProfileOptions, ResolvedAIProfile } from "./types.js";
2
+ /**
3
+ * Resolve a profile primary key, alias, or shortcut to a concrete model and runtime config.
4
+ *
5
+ * `input` names **intent** (e.g. `balanced`, `cheapest`, `cost-sensitive`), not a vendor model id.
6
+ * Use `options.choice` to pick an alternative within the profile (e.g. `cheap` + `safer_provider`).
7
+ *
8
+ * @see README.md — “Why AI profiles”
9
+ */
2
10
  export declare function resolveAIProfile(input: string, options?: ResolveAIProfileOptions): Promise<ResolvedAIProfile>;
3
11
  //# sourceMappingURL=resolveAIProfile.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolveAIProfile.d.ts","sourceRoot":"","sources":["../src/resolveAIProfile.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE7E,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,iBAAiB,CAAC,CA8E5B"}
1
+ {"version":3,"file":"resolveAIProfile.d.ts","sourceRoot":"","sources":["../src/resolveAIProfile.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE7E;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,iBAAiB,CAAC,CA2H5B"}