@x12i/ai-profiles 1.2.3 → 1.2.7
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 +79 -21
- package/dist/constants.d.ts +0 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +0 -2
- package/dist/constants.js.map +1 -1
- package/dist/data/models-profiles.json +8 -1
- package/dist/data/profiles-shortcuts.json +3 -0
- package/dist/isKnownProfileOrShortcut.d.ts +2 -5
- package/dist/isKnownProfileOrShortcut.d.ts.map +1 -1
- package/dist/isKnownProfileOrShortcut.js +4 -15
- package/dist/isKnownProfileOrShortcut.js.map +1 -1
- package/dist/legacyGraphEngineAliasMap.d.ts +10 -8
- package/dist/legacyGraphEngineAliasMap.d.ts.map +1 -1
- package/dist/legacyGraphEngineAliasMap.js +8 -2
- package/dist/legacyGraphEngineAliasMap.js.map +1 -1
- package/dist/profileInputMatch.d.ts +20 -0
- package/dist/profileInputMatch.d.ts.map +1 -0
- package/dist/profileInputMatch.js +30 -0
- package/dist/profileInputMatch.js.map +1 -0
- package/dist/resolveAIProfile.d.ts.map +1 -1
- package/dist/resolveAIProfile.js +25 -17
- package/dist/resolveAIProfile.js.map +1 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/validation/openRouterAlignment.d.ts +31 -0
- package/dist/validation/openRouterAlignment.d.ts.map +1 -0
- package/dist/validation/openRouterAlignment.js +100 -0
- package/dist/validation/openRouterAlignment.js.map +1 -0
- package/dist/validation/validateModelsProfilesJson.d.ts.map +1 -1
- package/dist/validation/validateModelsProfilesJson.js +1 -7
- package/dist/validation/validateModelsProfilesJson.js.map +1 -1
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -8,6 +8,18 @@ Resolve AI profile names into concrete model choices. The package ships JSON in
|
|
|
8
8
|
npm install @x12i/ai-profiles
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
+
## Public API
|
|
12
|
+
|
|
13
|
+
| Export | Sync? | Purpose |
|
|
14
|
+
|--------|-------|---------|
|
|
15
|
+
| `listAIProfiles(options?)` | No (async) | Profile summaries: primary `profile` key, `aliases[]`, choices, defaults |
|
|
16
|
+
| `listAIShortcuts()` | Yes | Shortcut table: `{ key, profile, choice?, description? }[]` |
|
|
17
|
+
| `resolveAIProfile(input, options?)` | No (async) | Resolve input → model, pricing, runtime, canonical `profile` key |
|
|
18
|
+
| `isKnownProfileOrShortcut(input)` | Yes (bundled only) | Whether input is a known primary key, shortcut, or alias |
|
|
19
|
+
| `AIProfilesError` | — | Typed errors (`UNKNOWN_PROFILE`, …) |
|
|
20
|
+
|
|
21
|
+
Registry JSON lives in `models-profiles.json` (profiles + aliases) and `profiles-shortcuts.json` (shortcuts).
|
|
22
|
+
|
|
11
23
|
## Basic usage
|
|
12
24
|
|
|
13
25
|
```ts
|
|
@@ -21,6 +33,7 @@ import {
|
|
|
21
33
|
const profiles = await listAIProfiles();
|
|
22
34
|
const model = await resolveAIProfile("cheap");
|
|
23
35
|
|
|
36
|
+
console.log(model.profile); // canonical primary key: cheap
|
|
24
37
|
console.log(model.provider);
|
|
25
38
|
console.log(model.modelId);
|
|
26
39
|
console.log(model.pricing);
|
|
@@ -28,11 +41,45 @@ console.log(model.instructionTier);
|
|
|
28
41
|
console.log(model.backend);
|
|
29
42
|
```
|
|
30
43
|
|
|
31
|
-
##
|
|
44
|
+
## Naming: many names, one profile
|
|
45
|
+
|
|
46
|
+
Each **profile** has exactly one **primary key** (e.g. `balanced`, `cheap`) and **many aliases** — alternate strings that mean the same profile. Data is in `models-profiles.json` under each profile’s `aliases` array.
|
|
47
|
+
|
|
48
|
+
**Shortcuts** (`profiles-shortcuts.json`) are a second registry of names. A shortcut points at a profile and may pin a specific **choice** (e.g. `cheapest` → `cheap` + `cost_floor`).
|
|
49
|
+
|
|
50
|
+
The same string can appear as both an alias and a shortcut. That is intentional.
|
|
51
|
+
|
|
52
|
+
### Resolution order
|
|
53
|
+
|
|
54
|
+
For `resolveAIProfile(input)` and `isKnownProfileOrShortcut(input)` (bundled path uses the same rules):
|
|
32
55
|
|
|
33
|
-
|
|
56
|
+
1. **Primary key** — input matches a profile id → that profile, default choice (unless `options.choice` is set).
|
|
57
|
+
2. **Shortcut** — input matches a shortcut key → shortcut’s profile and choice (shortcut overrides alias when both exist).
|
|
58
|
+
3. **Alias** — input matches an entry in some profile’s `aliases` → that profile, default choice.
|
|
34
59
|
|
|
35
|
-
|
|
60
|
+
Input is normalized (trimmed, lowercased) before matching.
|
|
61
|
+
|
|
62
|
+
### Examples
|
|
63
|
+
|
|
64
|
+
```ts
|
|
65
|
+
// Primary key
|
|
66
|
+
await resolveAIProfile("balanced"); // profile: balanced
|
|
67
|
+
|
|
68
|
+
// Alias only (on cheap in bundled data)
|
|
69
|
+
await resolveAIProfile("cost-sensitive"); // profile: cheap, choice: default
|
|
70
|
+
|
|
71
|
+
// Alias shared with shortcut — shortcut wins if it pins a choice
|
|
72
|
+
await resolveAIProfile("default"); // profile: balanced (via default shortcut)
|
|
73
|
+
|
|
74
|
+
// Shortcut with explicit choice
|
|
75
|
+
await resolveAIProfile("cheapest"); // profile: cheap, choice: cost_floor
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
`listAIProfiles()` returns each profile’s `aliases` so UIs can show friendly labels. `listAIShortcuts()` lists shortcut keys separately (not duplicated inside `listAIProfiles()`).
|
|
79
|
+
|
|
80
|
+
## Sync validation (bundled registry)
|
|
81
|
+
|
|
82
|
+
Use **`isKnownProfileOrShortcut(input)`** before run/execute or on first paint when the remote registry may not be loaded yet. It reads the **bundled** JSON only (no network, no in-memory cache race).
|
|
36
83
|
|
|
37
84
|
```ts
|
|
38
85
|
const canRun =
|
|
@@ -41,25 +88,15 @@ const canRun =
|
|
|
41
88
|
isKnownProfileOrShortcut(fallbackProfile);
|
|
42
89
|
```
|
|
43
90
|
|
|
44
|
-
|
|
91
|
+
Accepts **primary keys**, **shortcuts**, and **profile aliases**. Unknown strings return `false`.
|
|
45
92
|
|
|
46
|
-
|
|
93
|
+
After validation, call `resolveAIProfile` (usually `source: "auto"` or `"bundled"`) to get the canonical `resolved.profile` primary key and model details.
|
|
47
94
|
|
|
48
|
-
|
|
49
|
-
- **Shortcut dropdowns** (optional) use `listAIShortcuts()` → `{ key, profile, choice?, description? }`.
|
|
50
|
-
- **Profile aliases** (e.g. `"standard"` on `balanced`) are metadata on each summary’s `aliases` field. They are **not** primary keys and are **not** accepted by `isKnownProfileOrShortcut` unless the same string is also a shortcut key in `profiles-shortcuts.json`.
|
|
51
|
-
- **Reserved keys** (`default`) are invalid as profile keys, shortcut keys, and profile aliases. Store primary keys only (e.g. `balanced`, not `default`).
|
|
52
|
-
- **Legacy FuncX mode shortcuts** (`weak`, `normal`, `strong`, `ultra`) and **local shortcuts** (`cpu`, `offline`, `on-device`) resolve via `profiles-shortcuts.json`. Do not conflate `cpu` (on-device) with `cheapest` / `economy` (remote, low cost).
|
|
95
|
+
### UI guidance
|
|
53
96
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
const model = await resolveAIProfile("cheapest");
|
|
58
|
-
|
|
59
|
-
console.log(model.profile); // cheap
|
|
60
|
-
console.log(model.choice); // cost_floor
|
|
61
|
-
console.log(model.modelId);
|
|
62
|
-
```
|
|
97
|
+
- **Profile picker**: `await listAIProfiles()` → use each row’s `profile` as the value; show `displayName` / `aliases` as labels if helpful.
|
|
98
|
+
- **Shortcut picker** (optional): `listAIShortcuts()` → use `key` as the value.
|
|
99
|
+
- **Stored config**: any accepted name (primary, alias, or shortcut) is valid; prefer primary keys for new data if you want one canonical form in your own schema.
|
|
63
100
|
|
|
64
101
|
## Force a choice
|
|
65
102
|
|
|
@@ -138,7 +175,7 @@ const modelConfig = {
|
|
|
138
175
|
| `local` / `llama_cpp_gguf` | CPU | **`cpu`** | `funcx:llama-cpp:gguf` |
|
|
139
176
|
| `local` / `transformersjs_default` | CPU | **`cpu`** | `Xenova/distilbart-cnn-6-6` |
|
|
140
177
|
|
|
141
|
-
|
|
178
|
+
FuncX mode shortcuts (bundled): `weak` → local, `normal` → balanced, `strong` → pro, `ultra` → deep, `default` → balanced.
|
|
142
179
|
|
|
143
180
|
Local CPU choices expose FuncX env keys in `resolved.metadata` (e.g. `LLAMA_CPP_MODEL_PATH`, `TRANSFORMERS_JS_MODEL_ID`).
|
|
144
181
|
|
|
@@ -146,10 +183,31 @@ Local CPU choices expose FuncX env keys in `resolved.metadata` (e.g. `LLAMA_CPP_
|
|
|
146
183
|
|
|
147
184
|
Remote profile choices use vendor-native `modelId` values (e.g. `gpt-5.4`, `gemini-2.5-flash-lite`). Anthropic version segments follow OpenRouter slugs (`claude-sonnet-4.6`, not `claude-sonnet-4-6`). `@x12i/ai-tools` resolves these to full OpenRouter slugs (`openai/gpt-5.4`) and remaps deprecated ids when the bundled catalog is stale.
|
|
148
185
|
|
|
186
|
+
### Keeping models aligned over time
|
|
187
|
+
|
|
188
|
+
When OpenRouter deprecates or renames a model slug:
|
|
189
|
+
|
|
190
|
+
1. Update `src/data/models-profiles.json` to a current vendor-native id (preferred).
|
|
191
|
+
2. Refresh the OpenRouter catalog in `@x12i/ai-tools` (`openrouter-models-catalog.json`).
|
|
192
|
+
3. Run alignment checks before publishing:
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
npm run verify:openrouter # bundled profiles vs ai-tools catalog (sibling or dev install)
|
|
196
|
+
npm run verify:openrouter:live # same vs live open-assets catalog (pre-release)
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Unit tests in `test/openrouterAlignment.test.ts` guard resolution rules offline. Use `verify:openrouter` when updating profile model ids; use `verify:openrouter:live` after refreshing [open-assets](https://open-assets.x12i.com/openrouter-models-catalog.json).
|
|
200
|
+
|
|
201
|
+
Vendor-direct-only choices (not routed via OpenRouter) can opt out:
|
|
202
|
+
|
|
203
|
+
```json
|
|
204
|
+
"metadata": { "openRouter": "vendor-direct" }
|
|
205
|
+
```
|
|
206
|
+
|
|
149
207
|
## Tests
|
|
150
208
|
|
|
151
209
|
```bash
|
|
152
|
-
npm test # build + full suite
|
|
210
|
+
npm test # build + full suite
|
|
153
211
|
npm run test:unit # source tests only (skip integration/exports)
|
|
154
212
|
npm run test:integration # integration + dist export smoke tests
|
|
155
213
|
npm run pack:check # dry-run npm tarball contents
|
package/dist/constants.d.ts
CHANGED
|
@@ -5,8 +5,6 @@ export declare const REMOTE_MODELS_PROFILES_URL = "https://open-assets.x12i.com/
|
|
|
5
5
|
export declare const REMOTE_PROFILES_SHORTCUTS_URL = "https://open-assets.x12i.com/profiles-shortcuts.json";
|
|
6
6
|
export declare const MODELS_PROFILES_SCHEMA: "x12i.ai-profiles.models-profiles";
|
|
7
7
|
export declare const PROFILES_SHORTCUTS_SCHEMA: "x12i.ai-profiles.shortcuts";
|
|
8
|
-
/** Reserved keys — not valid profile or shortcut identifiers. */
|
|
9
|
-
export declare const RESERVED_PROFILE_KEYS: readonly ["default"];
|
|
10
8
|
export declare const INSTRUCTION_TIERS: readonly ["default", "cpu", "reasoning"];
|
|
11
9
|
export declare const AI_PROFILE_BACKENDS: readonly ["openrouter", "llama-cpp", "transformersjs", "custom"];
|
|
12
10
|
export declare const DEFAULT_RUNTIME_DEFAULTS: Required<AIRuntimeDefaults>;
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,eAAO,MAAM,oBAAoB,QAAsB,CAAC;AACxD,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C,eAAO,MAAM,0BAA0B,sDACc,CAAC;AAEtD,eAAO,MAAM,6BAA6B,yDACc,CAAC;AAEzD,eAAO,MAAM,sBAAsB,EAAG,kCAA2C,CAAC;AAClF,eAAO,MAAM,yBAAyB,EAAG,4BAAqC,CAAC;AAE/E,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,eAAO,MAAM,oBAAoB,QAAsB,CAAC;AACxD,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C,eAAO,MAAM,0BAA0B,sDACc,CAAC;AAEtD,eAAO,MAAM,6BAA6B,yDACc,CAAC;AAEzD,eAAO,MAAM,sBAAsB,EAAG,kCAA2C,CAAC;AAClF,eAAO,MAAM,yBAAyB,EAAG,4BAAqC,CAAC;AAE/E,eAAO,MAAM,iBAAiB,0CAA2C,CAAC;AAE1E,eAAO,MAAM,mBAAmB,kEAKtB,CAAC;AAEX,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,iBAAiB,CAahE,CAAC"}
|
package/dist/constants.js
CHANGED
|
@@ -4,8 +4,6 @@ export const REMOTE_MODELS_PROFILES_URL = "https://open-assets.x12i.com/models-p
|
|
|
4
4
|
export const REMOTE_PROFILES_SHORTCUTS_URL = "https://open-assets.x12i.com/profiles-shortcuts.json";
|
|
5
5
|
export const MODELS_PROFILES_SCHEMA = "x12i.ai-profiles.models-profiles";
|
|
6
6
|
export const PROFILES_SHORTCUTS_SCHEMA = "x12i.ai-profiles.shortcuts";
|
|
7
|
-
/** Reserved keys — not valid profile or shortcut identifiers. */
|
|
8
|
-
export const RESERVED_PROFILE_KEYS = ["default"];
|
|
9
7
|
export const INSTRUCTION_TIERS = ["default", "cpu", "reasoning"];
|
|
10
8
|
export const AI_PROFILE_BACKENDS = [
|
|
11
9
|
"openrouter",
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACxD,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAE7C,MAAM,CAAC,MAAM,0BAA0B,GACrC,mDAAmD,CAAC;AAEtD,MAAM,CAAC,MAAM,6BAA6B,GACxC,sDAAsD,CAAC;AAEzD,MAAM,CAAC,MAAM,sBAAsB,GAAG,kCAA2C,CAAC;AAClF,MAAM,CAAC,MAAM,yBAAyB,GAAG,4BAAqC,CAAC;AAE/E,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACxD,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAE7C,MAAM,CAAC,MAAM,0BAA0B,GACrC,mDAAmD,CAAC;AAEtD,MAAM,CAAC,MAAM,6BAA6B,GACxC,sDAAsD,CAAC;AAEzD,MAAM,CAAC,MAAM,sBAAsB,GAAG,kCAA2C,CAAC;AAClF,MAAM,CAAC,MAAM,yBAAyB,GAAG,4BAAqC,CAAC;AAE/E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,CAAU,CAAC;AAE1E,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,YAAY;IACZ,WAAW;IACX,gBAAgB;IAChB,QAAQ;CACA,CAAC;AAEX,MAAM,CAAC,MAAM,wBAAwB,GAAgC;IACnE,eAAe,EAAE,QAAQ;IACzB,UAAU,EAAE,MAAM;IAClB,WAAW,EAAE,GAAG;IAChB,UAAU,EAAE,MAAM;IAClB,aAAa,EAAE,MAAM;IACrB,gBAAgB,EAAE,KAAK;IACvB,QAAQ,EAAE,KAAK;IACf,eAAe,EAAE,KAAK;IACtB,kBAAkB,EAAE,KAAK;IACzB,WAAW,EAAE,MAAM;IACnB,eAAe,EAAE,SAAS;IAC1B,OAAO,EAAE,YAAY;CACtB,CAAC"}
|
|
@@ -160,6 +160,7 @@
|
|
|
160
160
|
"description": "Default model selection for normal graph execution.",
|
|
161
161
|
"category": "standard",
|
|
162
162
|
"aliases": [
|
|
163
|
+
"default",
|
|
163
164
|
"standard",
|
|
164
165
|
"normal"
|
|
165
166
|
],
|
|
@@ -310,7 +311,8 @@
|
|
|
310
311
|
"aliases": [
|
|
311
312
|
"premium",
|
|
312
313
|
"best",
|
|
313
|
-
"highest-quality"
|
|
314
|
+
"highest-quality",
|
|
315
|
+
"strong"
|
|
314
316
|
],
|
|
315
317
|
"defaultChoice": "default",
|
|
316
318
|
"choices": {
|
|
@@ -629,6 +631,11 @@
|
|
|
629
631
|
"displayName": "Local / CPU",
|
|
630
632
|
"description": "On-device inference via FuncX CPU backends. No OpenRouter. Uses cpu instruction tier.",
|
|
631
633
|
"category": "local",
|
|
634
|
+
"aliases": [
|
|
635
|
+
"weak",
|
|
636
|
+
"offline",
|
|
637
|
+
"on-device"
|
|
638
|
+
],
|
|
632
639
|
"defaultChoice": "llama_cpp_gguf",
|
|
633
640
|
"choices": {
|
|
634
641
|
"llama_cpp_gguf": {
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Returns true when `input` matches a profile primary key or
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* Profile aliases (see `listAIProfiles`) are not primary keys and are not
|
|
6
|
-
* accepted here unless the same string is also a shortcut key.
|
|
2
|
+
* Returns true when `input` matches a profile primary key, shortcut, or alias.
|
|
3
|
+
* Sync — bundled registry only, safe on first paint.
|
|
7
4
|
*/
|
|
8
5
|
export declare function isKnownProfileOrShortcut(input: string): boolean;
|
|
9
6
|
//# sourceMappingURL=isKnownProfileOrShortcut.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isKnownProfileOrShortcut.d.ts","sourceRoot":"","sources":["../src/isKnownProfileOrShortcut.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"isKnownProfileOrShortcut.d.ts","sourceRoot":"","sources":["../src/isKnownProfileOrShortcut.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAG/D"}
|
|
@@ -1,22 +1,11 @@
|
|
|
1
1
|
import { getBundledRegistry } from "./bundledRegistry.js";
|
|
2
|
-
import {
|
|
3
|
-
import { normalizeKey } from "./normalizeKey.js";
|
|
2
|
+
import { matchProfileInput } from "./profileInputMatch.js";
|
|
4
3
|
/**
|
|
5
|
-
* Returns true when `input` matches a profile primary key or
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* Profile aliases (see `listAIProfiles`) are not primary keys and are not
|
|
9
|
-
* accepted here unless the same string is also a shortcut key.
|
|
4
|
+
* Returns true when `input` matches a profile primary key, shortcut, or alias.
|
|
5
|
+
* Sync — bundled registry only, safe on first paint.
|
|
10
6
|
*/
|
|
11
7
|
export function isKnownProfileOrShortcut(input) {
|
|
12
|
-
const key = normalizeKey(input);
|
|
13
|
-
if (!key) {
|
|
14
|
-
return false;
|
|
15
|
-
}
|
|
16
|
-
if (RESERVED_PROFILE_KEYS.includes(key)) {
|
|
17
|
-
return false;
|
|
18
|
-
}
|
|
19
8
|
const registry = getBundledRegistry();
|
|
20
|
-
return
|
|
9
|
+
return matchProfileInput(registry, input) !== undefined;
|
|
21
10
|
}
|
|
22
11
|
//# sourceMappingURL=isKnownProfileOrShortcut.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isKnownProfileOrShortcut.js","sourceRoot":"","sources":["../src/isKnownProfileOrShortcut.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"isKnownProfileOrShortcut.js","sourceRoot":"","sources":["../src/isKnownProfileOrShortcut.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAa;IACpD,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IACtC,OAAO,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,SAAS,CAAC;AAC1D,CAAC"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
import { LEGACY_GRAPH_ENGINE_ALIAS_KEYS } from "./constants.js";
|
|
2
|
+
export { LEGACY_GRAPH_ENGINE_ALIAS_KEYS };
|
|
3
|
+
export type LegacyGraphEngineAliasKey = (typeof LEGACY_GRAPH_ENGINE_ALIAS_KEYS)[number];
|
|
1
4
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
5
|
+
* Maps legacy graph-engine profile tokens to recommended primary profile keys.
|
|
6
|
+
* For one-time migration scripts only — graph JSON should store primary keys
|
|
7
|
+
* (`balanced`, `cheap`, …) after breaking migration.
|
|
8
|
+
*
|
|
9
|
+
* Distinct from FuncX runtime shortcuts in `profiles-shortcuts.json`
|
|
10
|
+
* (e.g. `strong` → `pro`, `weak` → `local` via `resolveAIProfile`).
|
|
4
11
|
*/
|
|
5
|
-
export declare const legacyGraphEngineAliasMap:
|
|
6
|
-
readonly default: "balanced";
|
|
7
|
-
readonly strong: "deep";
|
|
8
|
-
readonly weak: "cheap";
|
|
9
|
-
};
|
|
10
|
-
export type LegacyGraphEngineAlias = keyof typeof legacyGraphEngineAliasMap;
|
|
12
|
+
export declare const legacyGraphEngineAliasMap: Readonly<Record<LegacyGraphEngineAliasKey, string>>;
|
|
11
13
|
//# sourceMappingURL=legacyGraphEngineAliasMap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legacyGraphEngineAliasMap.d.ts","sourceRoot":"","sources":["../src/legacyGraphEngineAliasMap.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"legacyGraphEngineAliasMap.d.ts","sourceRoot":"","sources":["../src/legacyGraphEngineAliasMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO,EAAE,8BAA8B,EAAE,CAAC;AAE1C,MAAM,MAAM,yBAAyB,GACnC,CAAC,OAAO,8BAA8B,CAAC,CAAC,MAAM,CAAC,CAAC;AAElD;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAC9C,MAAM,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAKjC,CAAC"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
+
import { LEGACY_GRAPH_ENGINE_ALIAS_KEYS } from "./constants.js";
|
|
2
|
+
export { LEGACY_GRAPH_ENGINE_ALIAS_KEYS };
|
|
1
3
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
+
* Maps legacy graph-engine profile tokens to recommended primary profile keys.
|
|
5
|
+
* For one-time migration scripts only — graph JSON should store primary keys
|
|
6
|
+
* (`balanced`, `cheap`, …) after breaking migration.
|
|
7
|
+
*
|
|
8
|
+
* Distinct from FuncX runtime shortcuts in `profiles-shortcuts.json`
|
|
9
|
+
* (e.g. `strong` → `pro`, `weak` → `local` via `resolveAIProfile`).
|
|
4
10
|
*/
|
|
5
11
|
export const legacyGraphEngineAliasMap = {
|
|
6
12
|
default: "balanced",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legacyGraphEngineAliasMap.js","sourceRoot":"","sources":["../src/legacyGraphEngineAliasMap.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"legacyGraphEngineAliasMap.js","sourceRoot":"","sources":["../src/legacyGraphEngineAliasMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO,EAAE,8BAA8B,EAAE,CAAC;AAK1C;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAElC;IACF,OAAO,EAAE,UAAU;IACnB,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,OAAO;CACL,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { AIProfileShortcut, AIProfilesRegistry } from "./types.js";
|
|
2
|
+
export type ProfileInputMatch = {
|
|
3
|
+
kind: "profile";
|
|
4
|
+
profileKey: string;
|
|
5
|
+
} | {
|
|
6
|
+
kind: "shortcut";
|
|
7
|
+
profileKey: string;
|
|
8
|
+
shortcutKey: string;
|
|
9
|
+
shortcut: AIProfileShortcut;
|
|
10
|
+
} | {
|
|
11
|
+
kind: "alias";
|
|
12
|
+
profileKey: string;
|
|
13
|
+
alias: string;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Resolves user input to a profile: primary key, shortcut (optional choice), or alias.
|
|
17
|
+
* Shortcuts take precedence over aliases when the same string appears in both.
|
|
18
|
+
*/
|
|
19
|
+
export declare function matchProfileInput(registry: Pick<AIProfilesRegistry, "profiles" | "shortcuts">, input: string): ProfileInputMatch | undefined;
|
|
20
|
+
//# sourceMappingURL=profileInputMatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profileInputMatch.d.ts","sourceRoot":"","sources":["../src/profileInputMatch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAExE,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACvC;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B,GACD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,GAAG,WAAW,CAAC,EAC5D,KAAK,EAAE,MAAM,GACZ,iBAAiB,GAAG,SAAS,CA6B/B"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { normalizeKey } from "./normalizeKey.js";
|
|
2
|
+
/**
|
|
3
|
+
* Resolves user input to a profile: primary key, shortcut (optional choice), or alias.
|
|
4
|
+
* Shortcuts take precedence over aliases when the same string appears in both.
|
|
5
|
+
*/
|
|
6
|
+
export function matchProfileInput(registry, input) {
|
|
7
|
+
const key = normalizeKey(input);
|
|
8
|
+
if (!key) {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
if (registry.profiles[key]) {
|
|
12
|
+
return { kind: "profile", profileKey: key };
|
|
13
|
+
}
|
|
14
|
+
const shortcut = registry.shortcuts[key];
|
|
15
|
+
if (shortcut) {
|
|
16
|
+
return {
|
|
17
|
+
kind: "shortcut",
|
|
18
|
+
profileKey: shortcut.profile,
|
|
19
|
+
shortcutKey: key,
|
|
20
|
+
shortcut,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
for (const [profileKey, profile] of Object.entries(registry.profiles)) {
|
|
24
|
+
if (profile.aliases?.some((alias) => normalizeKey(alias) === key)) {
|
|
25
|
+
return { kind: "alias", profileKey, alias: key };
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=profileInputMatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profileInputMatch.js","sourceRoot":"","sources":["../src/profileInputMatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAajD;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAA4D,EAC5D,KAAa;IAEb,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAEhC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;IAC9C,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAEzC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,QAAQ,CAAC,OAAO;YAC5B,WAAW,EAAE,GAAG;YAChB,QAAQ;SACT,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtE,IAAI,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YAClE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;QACnD,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -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,
|
|
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,CA6E5B"}
|
package/dist/resolveAIProfile.js
CHANGED
|
@@ -1,29 +1,37 @@
|
|
|
1
1
|
import { buildResolvedProfile } from "./buildResolvedProfile.js";
|
|
2
2
|
import { AIProfilesError } from "./errors.js";
|
|
3
3
|
import { loadAIProfilesRegistryWithWarnings } from "./loader/loadAIProfilesRegistry.js";
|
|
4
|
-
import {
|
|
4
|
+
import { matchProfileInput } from "./profileInputMatch.js";
|
|
5
5
|
export async function resolveAIProfile(input, options = {}) {
|
|
6
6
|
const { registry, warnings } = await loadAIProfilesRegistryWithWarnings({
|
|
7
7
|
source: options.source,
|
|
8
8
|
refresh: options.refresh,
|
|
9
9
|
});
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
const match = matchProfileInput(registry, input);
|
|
11
|
+
if (!match) {
|
|
12
|
+
throw new AIProfilesError("UNKNOWN_PROFILE", `Unknown AI profile, shortcut, or alias: ${input}`, { input });
|
|
13
|
+
}
|
|
13
14
|
let profileKey;
|
|
14
15
|
let choiceKey;
|
|
15
|
-
let matchedShortcut
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
16
|
+
let matchedShortcut;
|
|
17
|
+
switch (match.kind) {
|
|
18
|
+
case "profile":
|
|
19
|
+
profileKey = match.profileKey;
|
|
20
|
+
choiceKey =
|
|
21
|
+
options.choice ?? registry.profiles[profileKey].defaultChoice;
|
|
22
|
+
matchedShortcut = undefined;
|
|
23
|
+
break;
|
|
24
|
+
case "shortcut":
|
|
25
|
+
profileKey = match.profileKey;
|
|
26
|
+
choiceKey = options.choice ?? match.shortcut.choice;
|
|
27
|
+
matchedShortcut = match.shortcut;
|
|
28
|
+
break;
|
|
29
|
+
case "alias":
|
|
30
|
+
profileKey = match.profileKey;
|
|
31
|
+
choiceKey =
|
|
32
|
+
options.choice ?? registry.profiles[profileKey].defaultChoice;
|
|
33
|
+
matchedShortcut = undefined;
|
|
34
|
+
break;
|
|
27
35
|
}
|
|
28
36
|
const profile = registry.profiles[profileKey];
|
|
29
37
|
if (!profile) {
|
|
@@ -42,7 +50,7 @@ export async function resolveAIProfile(input, options = {}) {
|
|
|
42
50
|
}
|
|
43
51
|
return buildResolvedProfile({
|
|
44
52
|
input,
|
|
45
|
-
shortcutKey:
|
|
53
|
+
shortcutKey: match.kind === "shortcut" ? match.shortcutKey : undefined,
|
|
46
54
|
profile,
|
|
47
55
|
choice,
|
|
48
56
|
shortcut: matchedShortcut,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveAIProfile.js","sourceRoot":"","sources":["../src/resolveAIProfile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,kCAAkC,EAAE,MAAM,oCAAoC,CAAC;AACxF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"resolveAIProfile.js","sourceRoot":"","sources":["../src/resolveAIProfile.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -48,6 +48,7 @@ export interface AIProfileDefinition {
|
|
|
48
48
|
displayName: string;
|
|
49
49
|
description: string;
|
|
50
50
|
category: string;
|
|
51
|
+
/** Many alternate names for this profile (see `matchProfileInput`). */
|
|
51
52
|
aliases?: string[];
|
|
52
53
|
defaultChoice: string;
|
|
53
54
|
choices: Record<string, AIProfileChoice>;
|
|
@@ -95,7 +96,7 @@ export interface AIProfileSummary {
|
|
|
95
96
|
category: string;
|
|
96
97
|
defaultChoice: string;
|
|
97
98
|
choices: string[];
|
|
98
|
-
/**
|
|
99
|
+
/** Additional names for the same profile (also valid for resolve / sync validation). */
|
|
99
100
|
aliases: string[];
|
|
100
101
|
defaultProvider: AIProvider;
|
|
101
102
|
defaultModelId: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { AIProfileChoice, ModelsProfilesJson } from "../types.js";
|
|
2
|
+
export declare const OPENROUTER_MODELS_CATALOG_URL = "https://open-assets.x12i.com/openrouter-models-catalog.json";
|
|
3
|
+
export type OpenRouterCatalogFile = {
|
|
4
|
+
models?: Array<{
|
|
5
|
+
modelId?: string;
|
|
6
|
+
canonicalSlug?: string;
|
|
7
|
+
}>;
|
|
8
|
+
};
|
|
9
|
+
export type OpenRouterAlignmentIssue = {
|
|
10
|
+
profile: string;
|
|
11
|
+
choice: string;
|
|
12
|
+
provider: string;
|
|
13
|
+
modelId: string;
|
|
14
|
+
};
|
|
15
|
+
export type OpenRouterAlignmentReport = {
|
|
16
|
+
ok: boolean;
|
|
17
|
+
checked: number;
|
|
18
|
+
skipped: number;
|
|
19
|
+
issues: OpenRouterAlignmentIssue[];
|
|
20
|
+
catalogModelCount: number;
|
|
21
|
+
};
|
|
22
|
+
/** Anthropic OpenRouter slugs use dotted minor versions (`4.6`), not dashed (`4-6`). */
|
|
23
|
+
export declare function normalizeAnthropicVersionSlug(slug: string): string;
|
|
24
|
+
export declare function buildOpenRouterCatalogIndex(catalog: OpenRouterCatalogFile): Set<string>;
|
|
25
|
+
export declare function openRouterResolutionCandidates(provider: string, modelId: string): string[];
|
|
26
|
+
export declare function isOpenRouterModelAvailable(provider: string, modelId: string, catalogIndex: Set<string>): boolean;
|
|
27
|
+
/** Skip local / vendor-direct choices that are not expected on OpenRouter. */
|
|
28
|
+
export declare function shouldCheckOpenRouterAlignment(choice: AIProfileChoice): boolean;
|
|
29
|
+
export declare function verifyOpenRouterAlignment(registry: ModelsProfilesJson, catalog: OpenRouterCatalogFile): OpenRouterAlignmentReport;
|
|
30
|
+
export declare function formatOpenRouterAlignmentReport(report: OpenRouterAlignmentReport): string;
|
|
31
|
+
//# sourceMappingURL=openRouterAlignment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openRouterAlignment.d.ts","sourceRoot":"","sources":["../../src/validation/openRouterAlignment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEvE,eAAO,MAAM,6BAA6B,gEACqB,CAAC;AAEhE,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9D,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,wBAAwB,EAAE,CAAC;IACnC,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAMF,wFAAwF;AACxF,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElE;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,qBAAqB,GAC7B,GAAG,CAAC,MAAM,CAAC,CAYb;AAED,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,MAAM,EAAE,CAmBV;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,OAAO,CAIT;AAED,8EAA8E;AAC9E,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAa/E;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,qBAAqB,GAC7B,yBAAyB,CAsC3B;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,yBAAyB,GAChC,MAAM,CAgBR"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
export const OPENROUTER_MODELS_CATALOG_URL = "https://open-assets.x12i.com/openrouter-models-catalog.json";
|
|
2
|
+
function normalizeKey(value) {
|
|
3
|
+
return value.trim().toLowerCase();
|
|
4
|
+
}
|
|
5
|
+
/** Anthropic OpenRouter slugs use dotted minor versions (`4.6`), not dashed (`4-6`). */
|
|
6
|
+
export function normalizeAnthropicVersionSlug(slug) {
|
|
7
|
+
return slug.replace(/-(\d+)-(\d+)(?=$|[-/])/g, "-$1.$2");
|
|
8
|
+
}
|
|
9
|
+
export function buildOpenRouterCatalogIndex(catalog) {
|
|
10
|
+
const index = new Set();
|
|
11
|
+
for (const entry of catalog.models ?? []) {
|
|
12
|
+
for (const id of [entry.modelId, entry.canonicalSlug]) {
|
|
13
|
+
if (typeof id === "string" && id.trim() !== "") {
|
|
14
|
+
index.add(normalizeKey(id));
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return index;
|
|
19
|
+
}
|
|
20
|
+
export function openRouterResolutionCandidates(provider, modelId) {
|
|
21
|
+
const normalizedProvider = normalizeKey(provider);
|
|
22
|
+
const normalizedModel = normalizeKey(modelId);
|
|
23
|
+
const versionNormalized = normalizeAnthropicVersionSlug(normalizedModel);
|
|
24
|
+
const candidates = new Set([
|
|
25
|
+
normalizedModel,
|
|
26
|
+
versionNormalized,
|
|
27
|
+
`${normalizedProvider}/${normalizedModel}`,
|
|
28
|
+
`${normalizedProvider}/${versionNormalized}`,
|
|
29
|
+
]);
|
|
30
|
+
if (!normalizedModel.includes("/")) {
|
|
31
|
+
for (const prefix of ["openai", "anthropic", "google"]) {
|
|
32
|
+
candidates.add(`${prefix}/${normalizedModel}`);
|
|
33
|
+
candidates.add(`${prefix}/${versionNormalized}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return [...candidates];
|
|
37
|
+
}
|
|
38
|
+
export function isOpenRouterModelAvailable(provider, modelId, catalogIndex) {
|
|
39
|
+
return openRouterResolutionCandidates(provider, modelId).some((candidate) => catalogIndex.has(candidate));
|
|
40
|
+
}
|
|
41
|
+
/** Skip local / vendor-direct choices that are not expected on OpenRouter. */
|
|
42
|
+
export function shouldCheckOpenRouterAlignment(choice) {
|
|
43
|
+
if (choice.provider === "local")
|
|
44
|
+
return false;
|
|
45
|
+
if (choice.modelId.startsWith("funcx:") || choice.modelId.startsWith("Xenova/")) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
const backend = choice.runtime?.backend;
|
|
49
|
+
if (backend && backend !== "openrouter")
|
|
50
|
+
return false;
|
|
51
|
+
if (choice.metadata?.openRouter === "vendor-direct")
|
|
52
|
+
return false;
|
|
53
|
+
if (choice.metadata?.skipOpenRouterAlignment === true)
|
|
54
|
+
return false;
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
export function verifyOpenRouterAlignment(registry, catalog) {
|
|
58
|
+
const catalogIndex = buildOpenRouterCatalogIndex(catalog);
|
|
59
|
+
const issues = [];
|
|
60
|
+
let checked = 0;
|
|
61
|
+
let skipped = 0;
|
|
62
|
+
for (const [profileKey, profile] of Object.entries(registry.profiles)) {
|
|
63
|
+
for (const [choiceKey, choice] of Object.entries(profile.choices)) {
|
|
64
|
+
if (!shouldCheckOpenRouterAlignment(choice)) {
|
|
65
|
+
skipped += 1;
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
checked += 1;
|
|
69
|
+
const available = isOpenRouterModelAvailable(choice.provider, choice.modelId, catalogIndex);
|
|
70
|
+
if (!available) {
|
|
71
|
+
issues.push({
|
|
72
|
+
profile: profileKey,
|
|
73
|
+
choice: choiceKey,
|
|
74
|
+
provider: choice.provider,
|
|
75
|
+
modelId: choice.modelId,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
ok: issues.length === 0,
|
|
82
|
+
checked,
|
|
83
|
+
skipped,
|
|
84
|
+
issues,
|
|
85
|
+
catalogModelCount: catalogIndex.size,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
export function formatOpenRouterAlignmentReport(report) {
|
|
89
|
+
if (report.ok) {
|
|
90
|
+
return `OpenRouter alignment OK (${report.checked} remote choices checked, ${report.skipped} skipped, ${report.catalogModelCount} catalog ids).`;
|
|
91
|
+
}
|
|
92
|
+
const lines = report.issues.map((issue) => ` - ${issue.profile}/${issue.choice}: ${issue.provider}/${issue.modelId}`);
|
|
93
|
+
return [
|
|
94
|
+
`OpenRouter alignment failed (${report.issues.length} missing):`,
|
|
95
|
+
...lines,
|
|
96
|
+
"",
|
|
97
|
+
"Update models-profiles.json, refresh @x12i/ai-tools openrouter-models-catalog.json, or mark vendor-direct choices with metadata.openRouter = \"vendor-direct\".",
|
|
98
|
+
].join("\n");
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=openRouterAlignment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openRouterAlignment.js","sourceRoot":"","sources":["../../src/validation/openRouterAlignment.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateModelsProfilesJson.d.ts","sourceRoot":"","sources":["../../src/validation/validateModelsProfilesJson.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validateModelsProfilesJson.d.ts","sourceRoot":"","sources":["../../src/validation/validateModelsProfilesJson.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,aAAa,CAAC;AAgOrB,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAgD7E;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAC5C,qBAAqB,CAqEvB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AIProfilesError } from "../errors.js";
|
|
2
|
-
import { AI_PROFILE_BACKENDS, INSTRUCTION_TIERS, MODELS_PROFILES_SCHEMA, PROFILES_SHORTCUTS_SCHEMA,
|
|
2
|
+
import { AI_PROFILE_BACKENDS, INSTRUCTION_TIERS, MODELS_PROFILES_SCHEMA, PROFILES_SHORTCUTS_SCHEMA, } from "../constants.js";
|
|
3
3
|
function isRecord(value) {
|
|
4
4
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
5
5
|
}
|
|
@@ -84,9 +84,6 @@ function validateProfile(profileKey, profile) {
|
|
|
84
84
|
if (typeof alias !== "string" || alias.trim() === "") {
|
|
85
85
|
throw new AIProfilesError("REGISTRY_VALIDATION_FAILED", `Invalid alias on profile '${profileKey}'`, { profile: profileKey, alias });
|
|
86
86
|
}
|
|
87
|
-
if (RESERVED_PROFILE_KEYS.includes(alias)) {
|
|
88
|
-
throw new AIProfilesError("REGISTRY_VALIDATION_FAILED", `Profile '${profileKey}' alias '${alias}' is reserved`, { profile: profileKey, alias });
|
|
89
|
-
}
|
|
90
87
|
}
|
|
91
88
|
}
|
|
92
89
|
}
|
|
@@ -128,9 +125,6 @@ export function validateProfilesShortcutsJson(value, profiles) {
|
|
|
128
125
|
throw new AIProfilesError("REGISTRY_VALIDATION_FAILED", "profiles-shortcuts.json shortcuts must be an object");
|
|
129
126
|
}
|
|
130
127
|
for (const [shortcutKey, shortcut] of Object.entries(value.shortcuts)) {
|
|
131
|
-
if (RESERVED_PROFILE_KEYS.includes(shortcutKey)) {
|
|
132
|
-
throw new AIProfilesError("REGISTRY_VALIDATION_FAILED", `Shortcut key '${shortcutKey}' is reserved`, { shortcut: shortcutKey });
|
|
133
|
-
}
|
|
134
128
|
if (!isRecord(shortcut)) {
|
|
135
129
|
throw new AIProfilesError("REGISTRY_VALIDATION_FAILED", `Invalid shortcut '${shortcutKey}'`, { shortcut: shortcutKey });
|
|
136
130
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateModelsProfilesJson.js","sourceRoot":"","sources":["../../src/validation/validateModelsProfilesJson.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,yBAAyB,
|
|
1
|
+
{"version":3,"file":"validateModelsProfilesJson.js","sourceRoot":"","sources":["../../src/validation/validateModelsProfilesJson.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@x12i/ai-profiles",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.7",
|
|
4
4
|
"description": "Resolve AI profile names into concrete model choices with bundled defaults and remote JSON refresh",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -24,6 +24,8 @@
|
|
|
24
24
|
"test:unit": "vitest run --exclude 'test/{integration,exports}.test.ts'",
|
|
25
25
|
"test:integration": "npm run build && vitest run test/integration.test.ts test/exports.test.ts",
|
|
26
26
|
"test:watch": "vitest",
|
|
27
|
+
"verify:openrouter": "node scripts/verify-openrouter-alignment.mjs --source bundled",
|
|
28
|
+
"verify:openrouter:live": "node scripts/verify-openrouter-alignment.mjs --source live",
|
|
27
29
|
"prepack": "npm run build",
|
|
28
30
|
"prepublishOnly": "npm test",
|
|
29
31
|
"pack:check": "npm pack --dry-run",
|