@x12i/ai-profiles 3.2.1 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +95 -23
- package/dist/buildResolvedCatalogModel.d.ts +27 -0
- package/dist/buildResolvedCatalogModel.d.ts.map +1 -0
- package/dist/buildResolvedCatalogModel.js +179 -0
- package/dist/buildResolvedCatalogModel.js.map +1 -0
- package/dist/buildResolvedProfile.d.ts +4 -2
- package/dist/buildResolvedProfile.d.ts.map +1 -1
- package/dist/buildResolvedProfile.js +22 -6
- package/dist/buildResolvedProfile.js.map +1 -1
- package/dist/calculateInvokeCost.d.ts +57 -0
- package/dist/calculateInvokeCost.d.ts.map +1 -0
- package/dist/calculateInvokeCost.js +106 -0
- package/dist/calculateInvokeCost.js.map +1 -0
- package/dist/catalogEnrichment.d.ts +2 -2
- package/dist/catalogEnrichment.d.ts.map +1 -1
- package/dist/catalogEnrichment.js +16 -4
- package/dist/catalogEnrichment.js.map +1 -1
- package/dist/cost/computeInvokeCost.d.ts +33 -0
- package/dist/cost/computeInvokeCost.d.ts.map +1 -0
- package/dist/cost/computeInvokeCost.js +95 -0
- package/dist/cost/computeInvokeCost.js.map +1 -0
- package/dist/cost/constants.d.ts +7 -0
- package/dist/cost/constants.d.ts.map +1 -0
- package/dist/cost/constants.js +7 -0
- package/dist/cost/constants.js.map +1 -0
- package/dist/cost/invokePricingRecord.d.ts +55 -0
- package/dist/cost/invokePricingRecord.d.ts.map +1 -0
- package/dist/cost/invokePricingRecord.js +68 -0
- package/dist/cost/invokePricingRecord.js.map +1 -0
- package/dist/cost/reasoningWire.d.ts +13 -0
- package/dist/cost/reasoningWire.d.ts.map +1 -0
- package/dist/cost/reasoningWire.js +28 -0
- package/dist/cost/reasoningWire.js.map +1 -0
- package/dist/cost/resolveInvokePricing.d.ts +40 -0
- package/dist/cost/resolveInvokePricing.d.ts.map +1 -0
- package/dist/cost/resolveInvokePricing.js +170 -0
- package/dist/cost/resolveInvokePricing.js.map +1 -0
- package/dist/ensureConcreteModel.d.ts +2 -2
- package/dist/ensureConcreteModel.d.ts.map +1 -1
- package/dist/ensureConcreteModel.js +2 -2
- package/dist/ensureConcreteModel.js.map +1 -1
- package/dist/index.d.ts +10 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/isReasoningModel.d.ts +2 -2
- package/dist/isReasoningModel.d.ts.map +1 -1
- package/dist/isReasoningModel.js +1 -1
- package/dist/isReasoningModel.js.map +1 -1
- package/dist/lookupBundledCatalogCaps.d.ts +11 -1
- package/dist/lookupBundledCatalogCaps.d.ts.map +1 -1
- package/dist/lookupBundledCatalogCaps.js +25 -11
- package/dist/lookupBundledCatalogCaps.js.map +1 -1
- package/dist/modelInputFallback.d.ts +2 -2
- package/dist/modelInputFallback.d.ts.map +1 -1
- package/dist/modelInputFallback.js +4 -3
- package/dist/modelInputFallback.js.map +1 -1
- package/dist/normalizeInvokeModel.d.ts +4 -4
- package/dist/normalizeInvokeModel.d.ts.map +1 -1
- package/dist/normalizeInvokeModel.js +11 -11
- package/dist/normalizeInvokeModel.js.map +1 -1
- package/dist/requireCatalogModel.d.ts +13 -3
- package/dist/requireCatalogModel.d.ts.map +1 -1
- package/dist/requireCatalogModel.js +139 -13
- package/dist/requireCatalogModel.js.map +1 -1
- package/dist/resolveAIProfile.d.ts.map +1 -1
- package/dist/resolveAIProfile.js +4 -2
- package/dist/resolveAIProfile.js.map +1 -1
- package/dist/resolveAIProfileWithCostAlternatives.js +2 -2
- package/dist/resolveAIProfileWithCostAlternatives.js.map +1 -1
- package/dist/resolveBundledCatalogModel.d.ts +8 -2
- package/dist/resolveBundledCatalogModel.d.ts.map +1 -1
- package/dist/resolveBundledCatalogModel.js +12 -12
- package/dist/resolveBundledCatalogModel.js.map +1 -1
- package/dist/resolveCatalogModel.d.ts.map +1 -1
- package/dist/resolveCatalogModel.js +17 -2
- package/dist/resolveCatalogModel.js.map +1 -1
- package/dist/resolveCatalogModelDetails.d.ts +18 -0
- package/dist/resolveCatalogModelDetails.d.ts.map +1 -0
- package/dist/resolveCatalogModelDetails.js +79 -0
- package/dist/resolveCatalogModelDetails.js.map +1 -0
- package/dist/resolveModelRouting.d.ts +11 -6
- package/dist/resolveModelRouting.d.ts.map +1 -1
- package/dist/resolveModelRouting.js +37 -19
- package/dist/resolveModelRouting.js.map +1 -1
- package/dist/resolveProfileInputCore.d.ts.map +1 -1
- package/dist/resolveProfileInputCore.js +3 -1
- package/dist/resolveProfileInputCore.js.map +1 -1
- package/dist/resolveSecondaryModel.d.ts +1 -1
- package/dist/resolveSecondaryModel.d.ts.map +1 -1
- package/dist/resolveSecondaryModel.js +3 -3
- package/dist/resolveSecondaryModel.js.map +1 -1
- package/dist/secondaryModel.d.ts +4 -4
- package/dist/secondaryModel.d.ts.map +1 -1
- package/dist/secondaryModel.js +2 -2
- package/dist/secondaryModel.js.map +1 -1
- package/dist/types.d.ts +82 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/validateProfileCatalogLinkage.js +1 -1
- package/dist/validateProfileCatalogLinkage.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -258,9 +258,16 @@ npm install @x12i/ai-profiles
|
|
|
258
258
|
| `normalizeInvokeModel(input, options?)` | Yes | Idempotent gateway invoke tuple: strips `openrouter/` display slugs; rejects unresolved `profile/choice` aliases |
|
|
259
259
|
| `resolveAndNormalizeInvokeModel(alias, options)` | No (async) | `resolveAIProfile` → `normalizeInvokeModel` for MAIN / handoff paths |
|
|
260
260
|
| `resolveAndNormalizeBundledInvokeModel(alias, options)` | Yes | Bundled `resolveAIProfile` → `normalizeInvokeModel` (no network) |
|
|
261
|
-
| `
|
|
261
|
+
| `calculateInvokeCost(input, options?)` | No (async) | Token → USD from catalog pricing (`costStatus: "priced" \| "unpriced"`) |
|
|
262
|
+
| `calculateInvokeCostSync(input, options?)` | Yes | Bundled offline cost calculator |
|
|
263
|
+
| `calculateInvokeCostFromRecord(record, options?)` | No (async) | Activix snake_case usage record → USD |
|
|
264
|
+
| `buildInvokePricingRecord(input)` | Yes | Build Activix-compatible invoke billing record |
|
|
265
|
+
| `lookupBundledCatalogCaps({ provider, modelId })` | Yes | Sync quick caps + pricing summary from bundled catalog |
|
|
266
|
+
| `lookupBundledCatalogModel(slug, options?)` | Yes | Sync rich catalog snapshot for a slug (pricing, reasoning, modalities); returns `undefined` on miss |
|
|
267
|
+
| `resolveBundledCatalogModelDetails(slug, options?)` | Yes | Same as above but throws `UNKNOWN_MODEL` on miss |
|
|
268
|
+
| `resolveCatalogModelDetails(slug, options?)` | No (async) | Rich catalog snapshot with optional remote catalog refresh |
|
|
262
269
|
| `isReasoningModel(input, options?)` | Yes | `true`/`false` for supported inputs (throws `UNKNOWN_MODEL` on unknown concrete models) |
|
|
263
|
-
| `resolveAIProfile(input, options?)` | No (async) | Resolve an explicit `profile/choice` key → model, pricing, runtime. Pass `includeSecondary: true` to attach `secondary`. |
|
|
270
|
+
| `resolveAIProfile(input, options?)` | No (async) | Resolve an explicit `profile/choice` key → model, pricing, runtime. Pass `includeSecondary: true` to attach `secondary`; `includeCatalog: true` to attach full `catalogModel`. |
|
|
264
271
|
| `resolveSecondaryModel(input, options?)` | No (async) | Resolve primary choice + optional companion `secondary` from profile `secondary` refs |
|
|
265
272
|
| `getSecondaryForResolvedProfile(resolved, registry, catalog?)` | Yes | Secondary for an already-resolved primary (no extra I/O when catalog is passed) |
|
|
266
273
|
| `listProfileSecondaries(profileKey, registry)` | Yes | List per-choice `secondary` declarations on a profile |
|
|
@@ -291,8 +298,8 @@ Use these when callers pass **raw model ids or OpenRouter slugs**, not profile n
|
|
|
291
298
|
|
|
292
299
|
| Export | Sync? | Purpose |
|
|
293
300
|
|--------|-------|---------|
|
|
294
|
-
| `
|
|
295
|
-
| `applyModelRouting(choice, backend,
|
|
301
|
+
| `resolvePreferOpenRouter(explicit?)` | Yes | Resolve OpenRouter vs vendor-direct routing (option → env → default) |
|
|
302
|
+
| `applyModelRouting(choice, backend, preferOpenRouter, catalog?)` | Yes | Turn a registry choice into invoke-time `{ provider, modelId, routing }` (same rules as `resolveAIProfile`) |
|
|
296
303
|
| `normalizeGatewayWireId(input)` | Yes | `openrouter/openai/gpt-5.5` → `{ provider: "openrouter", modelId: "openai/gpt-5.5" }` (profile keys like `cheap/default` are not gateway wires) |
|
|
297
304
|
| `validateBundledProfileVendorCoverage(options?)` | Yes | Advisory report of leading-vendor coverage per profile |
|
|
298
305
|
| `validateBundledProfileModalityCoverage(options?)` | Yes | Advisory report of profile choice vs required input/output media |
|
|
@@ -402,7 +409,7 @@ console.log(model.backend);
|
|
|
402
409
|
// SKU lookup (catalog), not a profile
|
|
403
410
|
const sku = await resolveCatalogModel("google/gemini-2.5-flash-lite", {
|
|
404
411
|
source: "bundled",
|
|
405
|
-
|
|
412
|
+
preferOpenRouter: false,
|
|
406
413
|
});
|
|
407
414
|
|
|
408
415
|
console.log(isKnownProfileChoice("cheap/default")); // true
|
|
@@ -513,14 +520,14 @@ normalizeInvokeModel({ model: "cheap/default" }); // same error
|
|
|
513
520
|
// Profile/choice → resolve, then normalize (gateway catalog-lookup tuple)
|
|
514
521
|
await resolveAndNormalizeInvokeModel("cyber/deep_forensics", {
|
|
515
522
|
catalogLane: "text",
|
|
516
|
-
|
|
523
|
+
preferOpenRouter: true,
|
|
517
524
|
});
|
|
518
525
|
// → { provider: "openrouter", model: "deepseek/deepseek-v4-pro", routing: "openrouter", ... }
|
|
519
526
|
|
|
520
527
|
// Sync bundled variant (tests, predict paths)
|
|
521
528
|
resolveAndNormalizeBundledInvokeModel("cyber/deep_forensics", {
|
|
522
529
|
catalogLane: "text",
|
|
523
|
-
|
|
530
|
+
preferOpenRouter: true,
|
|
524
531
|
});
|
|
525
532
|
```
|
|
526
533
|
|
|
@@ -567,8 +574,8 @@ Remote profiles (anything that is not `local` / on-device) can be resolved for *
|
|
|
567
574
|
|
|
568
575
|
### Resolution priority
|
|
569
576
|
|
|
570
|
-
1. **`options.
|
|
571
|
-
2. **`
|
|
577
|
+
1. **`options.preferOpenRouter`** when passed to `resolveAIProfile`
|
|
578
|
+
2. **`PREFER_OPENROUTER`** in `.env` / process env
|
|
572
579
|
3. **Default: `true`** (OpenRouter)
|
|
573
580
|
|
|
574
581
|
Supported today: **OpenRouter** and **vendor-direct**. Azure and AWS routing are not supported yet.
|
|
@@ -578,7 +585,7 @@ Supported today: **OpenRouter** and **vendor-direct**. Azure and AWS routing are
|
|
|
578
585
|
```ts
|
|
579
586
|
const resolved = await resolveAIProfile("cheap/default", { catalogLane: "text" });
|
|
580
587
|
// or explicitly:
|
|
581
|
-
await resolveAIProfile("cheap/default", { catalogLane: "text",
|
|
588
|
+
await resolveAIProfile("cheap/default", { catalogLane: "text", preferOpenRouter: true });
|
|
582
589
|
|
|
583
590
|
// resolved.provider === "openrouter"
|
|
584
591
|
// resolved.modelId === "google/gemini-3.1-flash-lite"
|
|
@@ -614,7 +621,7 @@ Use `assertStableOpenRouterSlug(slug)` before outbound OpenRouter calls when you
|
|
|
614
621
|
```ts
|
|
615
622
|
const resolved = await resolveAIProfile("cheap/default", {
|
|
616
623
|
catalogLane: "text",
|
|
617
|
-
|
|
624
|
+
preferOpenRouter: false,
|
|
618
625
|
});
|
|
619
626
|
|
|
620
627
|
// resolved.provider === "google"
|
|
@@ -625,36 +632,101 @@ const resolved = await resolveAIProfile("cheap/default", {
|
|
|
625
632
|
|
|
626
633
|
Use this when calling OpenAI, Anthropic, Google, etc. APIs directly instead of through OpenRouter.
|
|
627
634
|
|
|
635
|
+
### Rich catalog data (pricing, reasoning, modalities)
|
|
636
|
+
|
|
637
|
+
Use the right entry point for your input shape:
|
|
638
|
+
|
|
639
|
+
| Input | Function | Returns |
|
|
640
|
+
|-------|----------|---------|
|
|
641
|
+
| OpenRouter / vendor slug | `resolveCatalogModelDetails(slug)` or sync `lookupBundledCatalogModel(slug)` | `ResolvedCatalogModel` |
|
|
642
|
+
| `profile/choice` | `resolveAIProfile(key, { catalogLane, includeCatalog: true })` | `ResolvedAIProfile` + `catalogModel` |
|
|
643
|
+
| Post-resolve slug check | `requireCatalogModel(slug, { includeDetails: true })` | presence + optional `catalogModel` |
|
|
644
|
+
|
|
645
|
+
```ts
|
|
646
|
+
// Slug → full catalog enrichment
|
|
647
|
+
const model = await resolveCatalogModelDetails("google/gemini-2.5-flash-lite", {
|
|
648
|
+
source: "bundled",
|
|
649
|
+
});
|
|
650
|
+
model.pricing?.input; // flattened per-1M rates
|
|
651
|
+
model.catalogPricing?.imageInput; // raw OpenRouter pricing slice
|
|
652
|
+
model.contextWindow; // e.g. 1048576
|
|
653
|
+
model.maxCompletionTokens; // e.g. 65536 (catalog maxCompletionTokens)
|
|
654
|
+
model.limits?.maxOutputTokens; // same as maxCompletionTokens
|
|
655
|
+
model.modelSignals.isReasoningModel; // true
|
|
656
|
+
model.modelSignals.maxOutputTokens; // same as maxCompletionTokens
|
|
657
|
+
model.catalogCapabilities?.toolCalling; // true
|
|
658
|
+
model.invocation.openrouter?.modelId; // "google/gemini-2.5-flash-lite"
|
|
659
|
+
model.capabilities?.supportsOpenRouterReasoningParam; // gateway reasoning.effort
|
|
660
|
+
```
|
|
661
|
+
|
|
662
|
+
### Invoke cost (Activix / FuncX)
|
|
663
|
+
|
|
664
|
+
```ts
|
|
665
|
+
import { calculateInvokeCost, buildInvokePricingRecord } from "@x12i/ai-profiles";
|
|
666
|
+
|
|
667
|
+
const cost = await calculateInvokeCost(
|
|
668
|
+
{
|
|
669
|
+
model: "cheap/default",
|
|
670
|
+
tokens: { prompt: 1000, completion: 500 },
|
|
671
|
+
},
|
|
672
|
+
{ catalogLane: "text", bundledOnly: true, includeBreakdown: true },
|
|
673
|
+
);
|
|
674
|
+
// cost.costUsd, cost.costStatus: "priced", cost.breakdown
|
|
675
|
+
|
|
676
|
+
// Profile/choice catalog validation
|
|
677
|
+
const required = await requireCatalogModel("cheap/default", {
|
|
678
|
+
catalogLane: "text",
|
|
679
|
+
resolveProfileKeys: true,
|
|
680
|
+
bundledOnly: true,
|
|
681
|
+
});
|
|
682
|
+
// required.found, required.modelId, required.profileChoice
|
|
683
|
+
```
|
|
684
|
+
|
|
685
|
+
See `.docs/AI-PROFILES-ACTIVIX-COST-CONTRACT.md` for Activix migration wire.
|
|
686
|
+
|
|
687
|
+
**Catalog SOT:** do not use ai-tools' small OpenRouter index for invoke gating — use `requireCatalogModel` / `validateBundledProfileCatalogLinkage` on this package (`npm run validate:linkage`).
|
|
688
|
+
|
|
689
|
+
```ts
|
|
690
|
+
// Profile → same enrichment on catalogModel
|
|
691
|
+
const resolved = await resolveAIProfile("cheap/default", {
|
|
692
|
+
catalogLane: "text",
|
|
693
|
+
includeCatalog: true,
|
|
694
|
+
includeCatalogEntry: true, // attach full models-catalog.json row
|
|
695
|
+
});
|
|
696
|
+
resolved.catalogModel?.pricing;
|
|
697
|
+
resolved.catalogModel?.catalogEntry;
|
|
698
|
+
```
|
|
699
|
+
|
|
628
700
|
### Env fallback
|
|
629
701
|
|
|
630
702
|
Set in `.env` or the process environment:
|
|
631
703
|
|
|
632
704
|
```env
|
|
633
|
-
|
|
634
|
-
|
|
705
|
+
PREFER_OPENROUTER=1 # or true, yes, on → OpenRouter
|
|
706
|
+
PREFER_OPENROUTER=0 # or false, no, off → vendor-direct
|
|
635
707
|
```
|
|
636
708
|
|
|
637
|
-
When `
|
|
709
|
+
When `preferOpenRouter` is omitted from `resolveAIProfile`, the env value is used. An explicit option always wins over env.
|
|
638
710
|
|
|
639
711
|
```ts
|
|
640
|
-
process.env.
|
|
712
|
+
process.env.PREFER_OPENROUTER = "0";
|
|
641
713
|
await resolveAIProfile("cheap/default", { catalogLane: "text" }); // vendor-direct
|
|
642
714
|
|
|
643
|
-
await resolveAIProfile("cheap/default", { catalogLane: "text",
|
|
715
|
+
await resolveAIProfile("cheap/default", { catalogLane: "text", preferOpenRouter: true }); // still OpenRouter
|
|
644
716
|
```
|
|
645
717
|
|
|
646
718
|
Helper exports:
|
|
647
719
|
|
|
648
720
|
```ts
|
|
649
721
|
import {
|
|
650
|
-
|
|
722
|
+
resolvePreferOpenRouter,
|
|
651
723
|
buildOpenRouterModelId,
|
|
652
724
|
buildModelInvocation,
|
|
653
725
|
resolveModelIdentity,
|
|
654
726
|
} from "@x12i/ai-profiles";
|
|
655
727
|
|
|
656
|
-
|
|
657
|
-
|
|
728
|
+
resolvePreferOpenRouter(); // true by default
|
|
729
|
+
resolvePreferOpenRouter(false); // explicit override
|
|
658
730
|
|
|
659
731
|
buildOpenRouterModelId("openai", "gpt-5.4"); // "openai/gpt-5.4"
|
|
660
732
|
|
|
@@ -731,14 +803,14 @@ const post = await resolveAIProfile(slots.postActionModel, { catalogLane: "text"
|
|
|
731
803
|
// Gateway handoff: resolve + normalize invoke tuple
|
|
732
804
|
const mainInvoke = await resolveAndNormalizeInvokeModel(slots.skillModel, {
|
|
733
805
|
catalogLane: "text",
|
|
734
|
-
|
|
806
|
+
preferOpenRouter: true,
|
|
735
807
|
});
|
|
736
808
|
// mainInvoke → { provider: "openrouter", model: "openai/gpt-5.4", routing: "openrouter", ... }
|
|
737
809
|
```
|
|
738
810
|
|
|
739
811
|
## Profile matrix (FuncX contract)
|
|
740
812
|
|
|
741
|
-
Default choice per profile (vendor-native ids in registry; OpenRouter slugs when `
|
|
813
|
+
Default choice per profile (vendor-native ids in registry; OpenRouter slugs when `preferOpenRouter` is true):
|
|
742
814
|
|
|
743
815
|
| Profile | Inference | Instruction tier | Default choice | Example model |
|
|
744
816
|
|---------|-----------|------------------|----------------|---------------|
|
|
@@ -767,7 +839,7 @@ Remote profile choices in `models-profiles.json` use vendor-native `modelId` val
|
|
|
767
839
|
- `modelId`: full slug such as `openai/gpt-5.4`
|
|
768
840
|
- `routing`: `"openrouter"`
|
|
769
841
|
|
|
770
|
-
Pass `
|
|
842
|
+
Pass `preferOpenRouter: false` (or `PREFER_OPENROUTER=0`) to get vendor-native `provider` + `modelId` for direct API calls.
|
|
771
843
|
|
|
772
844
|
Every resolved profile includes **`invocation`** with both call shapes:
|
|
773
845
|
|
|
@@ -776,7 +848,7 @@ resolved.invocation.direct // { provider: "openai", modelId: "gpt-5.4" }
|
|
|
776
848
|
resolved.invocation.openrouter // { provider: "openrouter", modelId: "openai/gpt-5.4" } | null
|
|
777
849
|
```
|
|
778
850
|
|
|
779
|
-
Top-level `provider` / `modelId` / `routing` remain the **active** path selected by `
|
|
851
|
+
Top-level `provider` / `modelId` / `routing` remain the **active** path selected by `preferOpenRouter`.
|
|
780
852
|
|
|
781
853
|
### Vendor trimming
|
|
782
854
|
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ModelInputFallbackMatch } from "./modelInputFallback.js";
|
|
2
|
+
import type { AIProfileChoice, AIProfileDefinition, AIProfileWarning, ModelsCatalogJson, PreferOpenRouterInput, ResolvedCatalogModel } from "./types.js";
|
|
3
|
+
export declare function buildResolvedCatalogModelFromMatch(params: {
|
|
4
|
+
input: string;
|
|
5
|
+
match: ModelInputFallbackMatch;
|
|
6
|
+
preferOpenRouter?: PreferOpenRouterInput;
|
|
7
|
+
includeCatalogEntry?: boolean;
|
|
8
|
+
profileChoice?: {
|
|
9
|
+
profile: string;
|
|
10
|
+
choice: string;
|
|
11
|
+
};
|
|
12
|
+
matchConfidence?: ResolvedCatalogModel["matchConfidence"];
|
|
13
|
+
loaderWarnings?: AIProfileWarning[];
|
|
14
|
+
}): ResolvedCatalogModel;
|
|
15
|
+
export declare function buildResolvedCatalogModelFromChoice(params: {
|
|
16
|
+
input: string;
|
|
17
|
+
choice: AIProfileChoice;
|
|
18
|
+
catalog: ModelsCatalogJson;
|
|
19
|
+
profile?: AIProfileDefinition;
|
|
20
|
+
preferOpenRouter?: PreferOpenRouterInput;
|
|
21
|
+
includeCatalogEntry?: boolean;
|
|
22
|
+
profileChoice?: {
|
|
23
|
+
profile: string;
|
|
24
|
+
choice: string;
|
|
25
|
+
};
|
|
26
|
+
}): ResolvedCatalogModel;
|
|
27
|
+
//# sourceMappingURL=buildResolvedCatalogModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildResolvedCatalogModel.d.ts","sourceRoot":"","sources":["../src/buildResolvedCatalogModel.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvE,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AA+GpB,wBAAgB,kCAAkC,CAAC,MAAM,EAAE;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,uBAAuB,CAAC;IAC/B,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,aAAa,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,eAAe,CAAC,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;IAC1D,cAAc,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACrC,GAAG,oBAAoB,CAqBvB;AAED,wBAAgB,mCAAmC,CAAC,MAAM,EAAE;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,aAAa,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACrD,GAAG,oBAAoB,CAyFvB"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { capabilitiesFromCatalogEntry, enrichChoiceFromCatalog, limitsFromCatalogEntry, pricingFromCatalogEntry, } from "./catalogEnrichment.js";
|
|
2
|
+
import { getBundledRegistry } from "./bundledRegistry.js";
|
|
3
|
+
import { resolveChoiceInvocation } from "./resolveCatalogListing.js";
|
|
4
|
+
import { inferCatalogLaneFromEntry } from "./profileCatalogLane.js";
|
|
5
|
+
import { normalizeModalityContract } from "./modalityPolicy.js";
|
|
6
|
+
import { resolveBackend } from "./resolveInstructionTierAndBackend.js";
|
|
7
|
+
import { applyModelRouting, resolvePreferOpenRouter } from "./resolveModelRouting.js";
|
|
8
|
+
import { getChoiceVendorModelId } from "./profileRegistryV2.js";
|
|
9
|
+
function modelSignalsFromCapabilities(capabilities, limits) {
|
|
10
|
+
return {
|
|
11
|
+
isReasoningModel: Boolean(capabilities?.supportsReasoning),
|
|
12
|
+
supportsStructuredOutput: capabilities?.supportsJsonSchema,
|
|
13
|
+
supportsTools: capabilities?.supportsTools,
|
|
14
|
+
contextWindow: capabilities?.contextWindow ?? limits?.contextWindow,
|
|
15
|
+
maxOutputTokens: capabilities?.maxOutputTokens ?? limits?.maxOutputTokens,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function topLevelLimits(limits, capabilities) {
|
|
19
|
+
const contextWindow = limits?.contextWindow ?? capabilities?.contextWindow;
|
|
20
|
+
const maxCompletionTokens = limits?.maxOutputTokens ?? capabilities?.maxOutputTokens;
|
|
21
|
+
return {
|
|
22
|
+
...(contextWindow !== undefined ? { contextWindow } : {}),
|
|
23
|
+
...(maxCompletionTokens !== undefined
|
|
24
|
+
? { maxCompletionTokens }
|
|
25
|
+
: {}),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function pricingWithRegistryUnits(pricing) {
|
|
29
|
+
if (!pricing) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
const registry = getBundledRegistry();
|
|
33
|
+
return {
|
|
34
|
+
...pricing,
|
|
35
|
+
currency: registry.currency,
|
|
36
|
+
unit: registry.pricingUnit,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function catalogModelFromEntry(params) {
|
|
40
|
+
const entry = params.entry;
|
|
41
|
+
const rawModalities = entry?.modalities ?? entry?.openrouter.modalities ?? undefined;
|
|
42
|
+
const modalities = normalizeModalityContract(rawModalities);
|
|
43
|
+
const limits = entry ? limitsFromCatalogEntry(entry) : undefined;
|
|
44
|
+
const capabilities = entry ? capabilitiesFromCatalogEntry(entry) : undefined;
|
|
45
|
+
const resolvedLimits = topLevelLimits(limits, capabilities);
|
|
46
|
+
return {
|
|
47
|
+
input: params.input,
|
|
48
|
+
provider: params.provider,
|
|
49
|
+
modelId: params.modelId,
|
|
50
|
+
routing: params.routing,
|
|
51
|
+
invocation: params.invocation,
|
|
52
|
+
...(entry?.displayName ? { displayName: entry.displayName } : {}),
|
|
53
|
+
...(entry?.family ? { family: entry.family } : {}),
|
|
54
|
+
...(entry?.status || entry?.openrouter.status
|
|
55
|
+
? { status: entry?.status ?? entry?.openrouter.status }
|
|
56
|
+
: {}),
|
|
57
|
+
...(entry?.knowledgeCutoff || entry?.openrouter.knowledgeCutoff
|
|
58
|
+
? {
|
|
59
|
+
knowledgeCutoff: entry?.knowledgeCutoff ?? entry?.openrouter.knowledgeCutoff,
|
|
60
|
+
}
|
|
61
|
+
: {}),
|
|
62
|
+
catalogLane: entry ? inferCatalogLaneFromEntry(entry) : "text",
|
|
63
|
+
...(entry?.openrouter.modelId
|
|
64
|
+
? { openRouterModelId: entry.openrouter.modelId }
|
|
65
|
+
: {}),
|
|
66
|
+
...(entry?.openrouter.canonicalSlug
|
|
67
|
+
? { canonicalSlug: entry.openrouter.canonicalSlug }
|
|
68
|
+
: {}),
|
|
69
|
+
pricing: pricingWithRegistryUnits(entry ? pricingFromCatalogEntry(entry) : undefined),
|
|
70
|
+
...(entry?.openrouter.pricing
|
|
71
|
+
? { catalogPricing: entry.openrouter.pricing }
|
|
72
|
+
: {}),
|
|
73
|
+
...resolvedLimits,
|
|
74
|
+
...(limits ? { limits } : {}),
|
|
75
|
+
...(capabilities ? { capabilities } : {}),
|
|
76
|
+
...(entry?.openrouter.capabilities
|
|
77
|
+
? { catalogCapabilities: entry.openrouter.capabilities }
|
|
78
|
+
: {}),
|
|
79
|
+
modalities,
|
|
80
|
+
modelSignals: modelSignalsFromCapabilities(capabilities, limits),
|
|
81
|
+
...(params.profileChoice ? { profileChoice: params.profileChoice } : {}),
|
|
82
|
+
...(params.includeCatalogEntry && entry ? { catalogEntry: entry } : {}),
|
|
83
|
+
...(params.matchConfidence ? { matchConfidence: params.matchConfidence } : {}),
|
|
84
|
+
...(params.loaderWarnings && params.loaderWarnings.length > 0
|
|
85
|
+
? { warnings: params.loaderWarnings }
|
|
86
|
+
: {}),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
export function buildResolvedCatalogModelFromMatch(params) {
|
|
90
|
+
const preferOpenRouter = resolvePreferOpenRouter(params.preferOpenRouter);
|
|
91
|
+
const endpoint = preferOpenRouter && params.match.invocation.openrouter
|
|
92
|
+
? params.match.invocation.openrouter
|
|
93
|
+
: params.match.invocation.direct;
|
|
94
|
+
const routing = endpoint.provider === "openrouter" ? "openrouter" : "direct";
|
|
95
|
+
return catalogModelFromEntry({
|
|
96
|
+
input: params.input,
|
|
97
|
+
entry: params.match.entry,
|
|
98
|
+
invocation: params.match.invocation,
|
|
99
|
+
provider: endpoint.provider,
|
|
100
|
+
modelId: endpoint.modelId,
|
|
101
|
+
routing,
|
|
102
|
+
includeCatalogEntry: params.includeCatalogEntry,
|
|
103
|
+
profileChoice: params.profileChoice,
|
|
104
|
+
matchConfidence: params.matchConfidence,
|
|
105
|
+
loaderWarnings: params.loaderWarnings,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
export function buildResolvedCatalogModelFromChoice(params) {
|
|
109
|
+
const preferOpenRouter = resolvePreferOpenRouter(params.preferOpenRouter);
|
|
110
|
+
const mergedRuntimeBackend = params.choice.runtime?.backend ?? params.profile?.runtime?.backend;
|
|
111
|
+
const resolvedBackend = params.profile
|
|
112
|
+
? resolveBackend(params.profile, params.choice, mergedRuntimeBackend)
|
|
113
|
+
: (mergedRuntimeBackend ?? "openrouter");
|
|
114
|
+
const routed = applyModelRouting(params.choice, resolvedBackend, preferOpenRouter, params.catalog);
|
|
115
|
+
const instructionTier = params.choice.runtime?.instructionTier ??
|
|
116
|
+
params.profile?.runtime?.instructionTier;
|
|
117
|
+
const enriched = enrichChoiceFromCatalog(params.catalog, params.choice, {
|
|
118
|
+
provider: routed.provider,
|
|
119
|
+
modelId: routed.modelId,
|
|
120
|
+
}, instructionTier);
|
|
121
|
+
const invocation = resolveChoiceInvocation(params.choice, params.catalog);
|
|
122
|
+
const entry = enriched.catalogEntry;
|
|
123
|
+
const rawModalities = entry?.modalities ?? entry?.openrouter.modalities ?? undefined;
|
|
124
|
+
const modalities = normalizeModalityContract(rawModalities);
|
|
125
|
+
const limits = enriched.limits ?? params.choice.limits;
|
|
126
|
+
const capabilities = enriched.capabilities
|
|
127
|
+
? {
|
|
128
|
+
...enriched.capabilities,
|
|
129
|
+
contextWindow: limits?.contextWindow ?? enriched.capabilities.contextWindow,
|
|
130
|
+
maxOutputTokens: limits?.maxOutputTokens ?? enriched.capabilities.maxOutputTokens,
|
|
131
|
+
}
|
|
132
|
+
: limits
|
|
133
|
+
? {
|
|
134
|
+
contextWindow: limits.contextWindow,
|
|
135
|
+
maxOutputTokens: limits.maxOutputTokens,
|
|
136
|
+
}
|
|
137
|
+
: undefined;
|
|
138
|
+
return {
|
|
139
|
+
input: params.input,
|
|
140
|
+
provider: routed.provider,
|
|
141
|
+
modelId: routed.modelId,
|
|
142
|
+
routing: routed.routing,
|
|
143
|
+
invocation,
|
|
144
|
+
...(entry?.displayName ? { displayName: entry.displayName } : {}),
|
|
145
|
+
...(entry?.family ? { family: entry.family } : {}),
|
|
146
|
+
...(entry?.status || entry?.openrouter.status
|
|
147
|
+
? { status: entry?.status ?? entry?.openrouter.status }
|
|
148
|
+
: {}),
|
|
149
|
+
...(entry?.knowledgeCutoff || entry?.openrouter.knowledgeCutoff
|
|
150
|
+
? {
|
|
151
|
+
knowledgeCutoff: entry?.knowledgeCutoff ?? entry?.openrouter.knowledgeCutoff,
|
|
152
|
+
}
|
|
153
|
+
: {}),
|
|
154
|
+
catalogLane: entry
|
|
155
|
+
? inferCatalogLaneFromEntry(entry)
|
|
156
|
+
: (params.profile?.catalogLane ?? "text"),
|
|
157
|
+
openRouterModelId: invocation.openrouter?.modelId ??
|
|
158
|
+
entry?.openrouter.modelId ??
|
|
159
|
+
`${params.choice.provider}/${getChoiceVendorModelId(params.choice)}`,
|
|
160
|
+
...(entry?.openrouter.canonicalSlug
|
|
161
|
+
? { canonicalSlug: entry.openrouter.canonicalSlug }
|
|
162
|
+
: {}),
|
|
163
|
+
pricing: pricingWithRegistryUnits(enriched.pricing),
|
|
164
|
+
...(entry?.openrouter.pricing
|
|
165
|
+
? { catalogPricing: entry.openrouter.pricing }
|
|
166
|
+
: {}),
|
|
167
|
+
...topLevelLimits(limits, capabilities),
|
|
168
|
+
...(limits ? { limits } : {}),
|
|
169
|
+
...(capabilities ? { capabilities } : {}),
|
|
170
|
+
...(entry?.openrouter.capabilities
|
|
171
|
+
? { catalogCapabilities: entry.openrouter.capabilities }
|
|
172
|
+
: {}),
|
|
173
|
+
modalities,
|
|
174
|
+
modelSignals: modelSignalsFromCapabilities(capabilities, limits),
|
|
175
|
+
...(params.profileChoice ? { profileChoice: params.profileChoice } : {}),
|
|
176
|
+
...(params.includeCatalogEntry && entry ? { catalogEntry: entry } : {}),
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=buildResolvedCatalogModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildResolvedCatalogModel.js","sourceRoot":"","sources":["../src/buildResolvedCatalogModel.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAUhE,SAAS,4BAA4B,CACnC,YAAkD,EAClD,MAAsC;IAEtC,OAAO;QACL,gBAAgB,EAAE,OAAO,CAAC,YAAY,EAAE,iBAAiB,CAAC;QAC1D,wBAAwB,EAAE,YAAY,EAAE,kBAAkB;QAC1D,aAAa,EAAE,YAAY,EAAE,aAAa;QAC1C,aAAa,EAAE,YAAY,EAAE,aAAa,IAAI,MAAM,EAAE,aAAa;QACnE,eAAe,EAAE,YAAY,EAAE,eAAe,IAAI,MAAM,EAAE,eAAe;KAC1E,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,MAAsC,EACtC,YAAkD;IAElD,MAAM,aAAa,GAAG,MAAM,EAAE,aAAa,IAAI,YAAY,EAAE,aAAa,CAAC;IAC3E,MAAM,mBAAmB,GACvB,MAAM,EAAE,eAAe,IAAI,YAAY,EAAE,eAAe,CAAC;IAE3D,OAAO;QACL,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,mBAAmB,KAAK,SAAS;YACnC,CAAC,CAAC,EAAE,mBAAmB,EAAE;YACzB,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAC/B,OAAmD;IAEnD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IACtC,OAAO;QACL,GAAG,OAAO;QACV,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,IAAI,EAAE,QAAQ,CAAC,WAAW;KAC3B,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,MAW9B;IACC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3B,MAAM,aAAa,GACjB,KAAK,EAAE,UAAU,IAAI,KAAK,EAAE,UAAU,CAAC,UAAU,IAAI,SAAS,CAAC;IACjE,MAAM,UAAU,GAAG,yBAAyB,CAAC,aAAa,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7E,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAE5D,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,GAAG,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,EAAE,UAAU,CAAC,MAAM;YAC3C,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE;YACvD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,KAAK,EAAE,eAAe,IAAI,KAAK,EAAE,UAAU,CAAC,eAAe;YAC7D,CAAC,CAAC;gBACE,eAAe,EACb,KAAK,EAAE,eAAe,IAAI,KAAK,EAAE,UAAU,CAAC,eAAe;aAC9D;YACH,CAAC,CAAC,EAAE,CAAC;QACP,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;QAC9D,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO;YAC3B,CAAC,CAAC,EAAE,iBAAiB,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE;YACjD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,aAAa;YACjC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,UAAU,CAAC,aAAa,EAAE;YACnD,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,EAAE,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACrF,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO;YAC3B,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE;YAC9C,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,cAAc;QACjB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,YAAY;YAChC,CAAC,CAAC,EAAE,mBAAmB,EAAE,KAAK,CAAC,UAAU,CAAC,YAAY,EAAE;YACxD,CAAC,CAAC,EAAE,CAAC;QACP,UAAU;QACV,YAAY,EAAE,4BAA4B,CAAC,YAAY,EAAE,MAAM,CAAC;QAChE,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,GAAG,CAAC,MAAM,CAAC,mBAAmB,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,GAAG,CAAC,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;YAC3D,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,cAAc,EAAE;YACrC,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kCAAkC,CAAC,MAQlD;IACC,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC1E,MAAM,QAAQ,GACZ,gBAAgB,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU;QACpD,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU;QACpC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;IACrC,MAAM,OAAO,GACX,QAAQ,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC;IAE/D,OAAO,qBAAqB,CAAC;QAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK;QACzB,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU;QACnC,QAAQ,EAAE,QAAQ,CAAC,QAA2C;QAC9D,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,OAAO;QACP,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;QAC/C,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,cAAc,EAAE,MAAM,CAAC,cAAc;KACtC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,mCAAmC,CAAC,MAQnD;IACC,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC1E,MAAM,oBAAoB,GACxB,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACrE,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO;QACpC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC;QACrE,CAAC,CAAC,CAAC,oBAAoB,IAAI,YAAY,CAAC,CAAC;IAE3C,MAAM,MAAM,GAAG,iBAAiB,CAC9B,MAAM,CAAC,MAAM,EACb,eAAe,EACf,gBAAgB,EAChB,MAAM,CAAC,OAAO,CACf,CAAC;IACF,MAAM,eAAe,GACnB,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe;QACtC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,CAAC;IAC3C,MAAM,QAAQ,GAAG,uBAAuB,CACtC,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,MAAM,EACb;QACE,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,EACD,eAAe,CAChB,CAAC;IACF,MAAM,UAAU,GAAG,uBAAuB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAE1E,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC;IACpC,MAAM,aAAa,GACjB,KAAK,EAAE,UAAU,IAAI,KAAK,EAAE,UAAU,CAAC,UAAU,IAAI,SAAS,CAAC;IACjE,MAAM,UAAU,GAAG,yBAAyB,CAAC,aAAa,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IACvD,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY;QACxC,CAAC,CAAC;YACE,GAAG,QAAQ,CAAC,YAAY;YACxB,aAAa,EAAE,MAAM,EAAE,aAAa,IAAI,QAAQ,CAAC,YAAY,CAAC,aAAa;YAC3E,eAAe,EACb,MAAM,EAAE,eAAe,IAAI,QAAQ,CAAC,YAAY,CAAC,eAAe;SACnE;QACH,CAAC,CAAC,MAAM;YACN,CAAC,CAAC;gBACE,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,eAAe,EAAE,MAAM,CAAC,eAAe;aACxC;YACH,CAAC,CAAC,SAAS,CAAC;IAEhB,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,UAAU;QACV,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,GAAG,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,EAAE,UAAU,CAAC,MAAM;YAC3C,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE;YACvD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,KAAK,EAAE,eAAe,IAAI,KAAK,EAAE,UAAU,CAAC,eAAe;YAC7D,CAAC,CAAC;gBACE,eAAe,EACb,KAAK,EAAE,eAAe,IAAI,KAAK,EAAE,UAAU,CAAC,eAAe;aAC9D;YACH,CAAC,CAAC,EAAE,CAAC;QACP,WAAW,EAAE,KAAK;YAChB,CAAC,CAAC,yBAAyB,CAAC,KAAK,CAAC;YAClC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,IAAI,MAAM,CAAC;QAC3C,iBAAiB,EACf,UAAU,CAAC,UAAU,EAAE,OAAO;YAC9B,KAAK,EAAE,UAAU,CAAC,OAAO;YACzB,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,IAAI,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;QACtE,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,aAAa;YACjC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,UAAU,CAAC,aAAa,EAAE;YACnD,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,EAAE,wBAAwB,CAAC,QAAQ,CAAC,OAAO,CAAC;QACnD,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO;YAC3B,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE;YAC9C,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC;QACvC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,YAAY;YAChC,CAAC,CAAC,EAAE,mBAAmB,EAAE,KAAK,CAAC,UAAU,CAAC,YAAY,EAAE;YACxD,CAAC,CAAC,EAAE,CAAC;QACP,UAAU;QACV,YAAY,EAAE,4BAA4B,CAAC,YAAY,EAAE,MAAM,CAAC;QAChE,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,GAAG,CAAC,MAAM,CAAC,mBAAmB,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxE,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AIProfileChoice, AIProfileDefinition, AIProfileWarning, AIProfilesRegistry, CostCapPer1M, ModelsCatalogJson, ResolvedAIProfile } from "./types.js";
|
|
1
|
+
import type { AIProfileChoice, AIProfileDefinition, AIProfileWarning, AIProfilesRegistry, CostCapPer1M, ModelsCatalogJson, PreferOpenRouterInput, ResolvedAIProfile } from "./types.js";
|
|
2
2
|
interface BuildResolvedProfileInput {
|
|
3
3
|
input: string;
|
|
4
4
|
profile: AIProfileDefinition;
|
|
@@ -6,9 +6,11 @@ interface BuildResolvedProfileInput {
|
|
|
6
6
|
choiceKey: string;
|
|
7
7
|
registry: AIProfilesRegistry;
|
|
8
8
|
loaderWarnings?: AIProfileWarning[];
|
|
9
|
-
|
|
9
|
+
preferOpenRouter?: PreferOpenRouterInput;
|
|
10
10
|
catalog?: ModelsCatalogJson;
|
|
11
11
|
costCapApplied?: CostCapPer1M;
|
|
12
|
+
includeCatalog?: boolean;
|
|
13
|
+
includeCatalogEntry?: boolean;
|
|
12
14
|
}
|
|
13
15
|
export declare function buildResolvedProfile(params: BuildResolvedProfileInput): ResolvedAIProfile;
|
|
14
16
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildResolvedProfile.d.ts","sourceRoot":"","sources":["../src/buildResolvedProfile.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"buildResolvedProfile.d.ts","sourceRoot":"","sources":["../src/buildResolvedProfile.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EAEZ,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAEpB,UAAU,yBAAyB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,eAAe,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,cAAc,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACpC,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AA8CD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,yBAAyB,GAChC,iBAAiB,CA8MnB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { buildResolvedCatalogModelFromChoice } from "./buildResolvedCatalogModel.js";
|
|
1
2
|
import { DEFAULT_CACHE_TTL_MS, DEFAULT_RUNTIME_DEFAULTS } from "./constants.js";
|
|
2
3
|
import { enrichChoiceFromCatalog } from "./catalogEnrichment.js";
|
|
3
4
|
import { getChoiceModalities, resolveRequiredModalities, } from "./modalityPolicy.js";
|
|
@@ -8,7 +9,7 @@ import { buildModelInvocationFromChoice } from "./profileRegistryV2.js";
|
|
|
8
9
|
import { resolveChoiceInvocation } from "./resolveCatalogListing.js";
|
|
9
10
|
import { resolveChoicePricing } from "./profileRegistryV3.js";
|
|
10
11
|
import { resolveBackend, resolveInstructionTier, } from "./resolveInstructionTierAndBackend.js";
|
|
11
|
-
import { applyModelRouting,
|
|
12
|
+
import { applyModelRouting, resolvePreferOpenRouter, } from "./resolveModelRouting.js";
|
|
12
13
|
function resolveInvocation(profileKey, choiceKey, choice) {
|
|
13
14
|
try {
|
|
14
15
|
const modelsRegistry = loadBundledModelsRegistry();
|
|
@@ -38,7 +39,7 @@ function loadCatalogForEnrichment(catalog) {
|
|
|
38
39
|
}
|
|
39
40
|
}
|
|
40
41
|
export function buildResolvedProfile(params) {
|
|
41
|
-
const { input, profile, choice, registry, loaderWarnings = [],
|
|
42
|
+
const { input, profile, choice, registry, loaderWarnings = [], preferOpenRouter: explicitPreferOpenRouter, catalog: catalogInput, } = params;
|
|
42
43
|
const costCapApplied = params.costCapApplied;
|
|
43
44
|
const warnings = [...loaderWarnings];
|
|
44
45
|
const cache = getMemoryCache();
|
|
@@ -75,14 +76,14 @@ export function buildResolvedProfile(params) {
|
|
|
75
76
|
};
|
|
76
77
|
const instructionTier = resolveInstructionTier(profile, mergedRuntime.instructionTier);
|
|
77
78
|
const resolvedBackend = resolveBackend(profile, choice, mergedRuntime.backend);
|
|
78
|
-
const
|
|
79
|
+
const preferOpenRouter = resolvePreferOpenRouter(explicitPreferOpenRouter);
|
|
79
80
|
const catalog = loadCatalogForEnrichment(catalogInput);
|
|
80
|
-
const routed = applyModelRouting(choice, resolvedBackend,
|
|
81
|
+
const routed = applyModelRouting(choice, resolvedBackend, preferOpenRouter, catalog);
|
|
81
82
|
const enriched = catalog
|
|
82
83
|
? enrichChoiceFromCatalog(catalog, choice, {
|
|
83
84
|
provider: routed.provider,
|
|
84
85
|
modelId: routed.modelId,
|
|
85
|
-
})
|
|
86
|
+
}, instructionTier)
|
|
86
87
|
: {};
|
|
87
88
|
const flatPricing = resolveChoicePricing(choice, enriched.pricing);
|
|
88
89
|
const pricing = flatPricing
|
|
@@ -101,7 +102,7 @@ export function buildResolvedProfile(params) {
|
|
|
101
102
|
const invocation = (catalog
|
|
102
103
|
? resolveChoiceInvocation(choice, catalog)
|
|
103
104
|
: undefined) ?? resolveInvocation(profile.profile, params.choiceKey, choice);
|
|
104
|
-
if (!invocation.openrouter &&
|
|
105
|
+
if (!invocation.openrouter && preferOpenRouter) {
|
|
105
106
|
try {
|
|
106
107
|
const modelsRegistry = loadBundledModelsRegistry();
|
|
107
108
|
const entry = Object.values(modelsRegistry.models).find((model) => model.usage.profileChoices.some((ref) => ref.profile === profile.profile && ref.choice === choice.choice));
|
|
@@ -139,6 +140,7 @@ export function buildResolvedProfile(params) {
|
|
|
139
140
|
supportsStructuredOutput: capabilities?.supportsJsonSchema,
|
|
140
141
|
supportsTools: capabilities?.supportsTools,
|
|
141
142
|
contextWindow: capabilities?.contextWindow ?? limits?.contextWindow,
|
|
143
|
+
maxOutputTokens: capabilities?.maxOutputTokens ?? limits?.maxOutputTokens,
|
|
142
144
|
};
|
|
143
145
|
const requiredModalities = resolveRequiredModalities(profile.profile, profile);
|
|
144
146
|
const modalities = getChoiceModalities(choice, catalog);
|
|
@@ -183,6 +185,20 @@ export function buildResolvedProfile(params) {
|
|
|
183
185
|
if (warnings.length > 0) {
|
|
184
186
|
resolved.warnings = warnings;
|
|
185
187
|
}
|
|
188
|
+
if (params.includeCatalog && catalog) {
|
|
189
|
+
resolved.catalogModel = buildResolvedCatalogModelFromChoice({
|
|
190
|
+
input,
|
|
191
|
+
choice,
|
|
192
|
+
catalog,
|
|
193
|
+
profile,
|
|
194
|
+
preferOpenRouter: explicitPreferOpenRouter,
|
|
195
|
+
includeCatalogEntry: params.includeCatalogEntry,
|
|
196
|
+
profileChoice: {
|
|
197
|
+
profile: profile.profile,
|
|
198
|
+
choice: params.choiceKey,
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
}
|
|
186
202
|
return resolved;
|
|
187
203
|
}
|
|
188
204
|
//# sourceMappingURL=buildResolvedProfile.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildResolvedProfile.js","sourceRoot":"","sources":["../src/buildResolvedProfile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EACL,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAC/F,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EACL,cAAc,EACd,sBAAsB,GACvB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,iBAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"buildResolvedProfile.js","sourceRoot":"","sources":["../src/buildResolvedProfile.ts"],"names":[],"mappings":"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"}
|