@x12i/ai-profiles 4.5.0 → 5.0.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 +19 -6
- package/dist/data/reasoning-coverage.json +499 -0
- package/dist/data/reasoning-directives.json +7562 -0
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/reasoning/mergeReasoningBody.d.ts +7 -0
- package/dist/reasoning/mergeReasoningBody.d.ts.map +1 -0
- package/dist/reasoning/mergeReasoningBody.js +50 -0
- package/dist/reasoning/mergeReasoningBody.js.map +1 -0
- package/dist/reasoning/resolveReasoningDocument.d.ts +4 -0
- package/dist/reasoning/resolveReasoningDocument.d.ts.map +1 -0
- package/dist/reasoning/resolveReasoningDocument.js +153 -0
- package/dist/reasoning/resolveReasoningDocument.js.map +1 -0
- package/dist/reasoning/types.d.ts +75 -22
- package/dist/reasoning/types.d.ts.map +1 -1
- package/dist/reasoning/types.js +19 -21
- package/dist/reasoning/types.js.map +1 -1
- package/dist/reasoning/validateReasoningDirectives.d.ts +9 -0
- package/dist/reasoning/validateReasoningDirectives.d.ts.map +1 -0
- package/dist/reasoning/validateReasoningDirectives.js +324 -0
- package/dist/reasoning/validateReasoningDirectives.js.map +1 -0
- package/dist/resolveReasoning.d.ts +5 -5
- package/dist/resolveReasoning.d.ts.map +1 -1
- package/dist/resolveReasoning.js +7 -75
- package/dist/resolveReasoning.js.map +1 -1
- package/package.json +2 -1
- package/dist/reasoning/bedrockDirective.d.ts +0 -18
- package/dist/reasoning/bedrockDirective.d.ts.map +0 -1
- package/dist/reasoning/bedrockDirective.js +0 -131
- package/dist/reasoning/bedrockDirective.js.map +0 -1
- package/dist/reasoning/openRouterDirective.d.ts +0 -18
- package/dist/reasoning/openRouterDirective.d.ts.map +0 -1
- package/dist/reasoning/openRouterDirective.js +0 -136
- package/dist/reasoning/openRouterDirective.js.map +0 -1
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
import { AIProfilesError } from "../errors.js";
|
|
2
|
+
import { EMPTY_REASONING_RESPONSE, REASONING_EFFORTS, REASONING_TARGETS, } from "./types.js";
|
|
3
|
+
const UNSAFE_KEYS = new Set(["__proto__", "prototype", "constructor"]);
|
|
4
|
+
const OUTCOMES = new Set(["applied", "degraded", "ignored"]);
|
|
5
|
+
function isPlainObject(value) {
|
|
6
|
+
return (typeof value === "object" &&
|
|
7
|
+
value !== null &&
|
|
8
|
+
!Array.isArray(value) &&
|
|
9
|
+
Object.getPrototypeOf(value) === Object.prototype);
|
|
10
|
+
}
|
|
11
|
+
function isStringArray(value) {
|
|
12
|
+
return Array.isArray(value) && value.every((item) => typeof item === "string");
|
|
13
|
+
}
|
|
14
|
+
function pointerOk(pointer) {
|
|
15
|
+
if (!pointer.startsWith("/"))
|
|
16
|
+
return false;
|
|
17
|
+
const segments = pointer.split("/").slice(1);
|
|
18
|
+
return segments.every((segment) => {
|
|
19
|
+
if (segment === "*" || segment.length === 0)
|
|
20
|
+
return segment === "*";
|
|
21
|
+
if (UNSAFE_KEYS.has(segment))
|
|
22
|
+
return false;
|
|
23
|
+
return !segment.includes("/");
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
function walkKeys(value, path, issues) {
|
|
27
|
+
if (Array.isArray(value)) {
|
|
28
|
+
value.forEach((item, index) => walkKeys(item, `${path}/${index}`, issues));
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (!isPlainObject(value))
|
|
32
|
+
return;
|
|
33
|
+
for (const [key, child] of Object.entries(value)) {
|
|
34
|
+
if (UNSAFE_KEYS.has(key)) {
|
|
35
|
+
issues.push({
|
|
36
|
+
code: "REASONING_MAPPING_INVALID",
|
|
37
|
+
message: `Unsafe key '${key}'.`,
|
|
38
|
+
path: `${path}/${key}`,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
walkKeys(child, `${path}/${key}`, issues);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function sameResponse(left, right) {
|
|
45
|
+
return JSON.stringify(left) === JSON.stringify(right);
|
|
46
|
+
}
|
|
47
|
+
function checkDirective(directive, path, issues) {
|
|
48
|
+
if (!OUTCOMES.has(directive.outcome)) {
|
|
49
|
+
issues.push({
|
|
50
|
+
code: "REASONING_MAPPING_INVALID",
|
|
51
|
+
message: "Outcome must be applied, degraded, or ignored.",
|
|
52
|
+
path,
|
|
53
|
+
});
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (!isPlainObject(directive.body)) {
|
|
57
|
+
issues.push({
|
|
58
|
+
code: "REASONING_MAPPING_INVALID",
|
|
59
|
+
message: "Directive body must be a plain object.",
|
|
60
|
+
path: `${path}/body`,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
walkKeys(directive.body, `${path}/body`, issues);
|
|
65
|
+
}
|
|
66
|
+
const response = directive.response;
|
|
67
|
+
if (!response || !isStringArray(response.reasoningTextPaths) ||
|
|
68
|
+
!isStringArray(response.streamReasoningKeys) ||
|
|
69
|
+
!isStringArray(response.streamReasoningPaths) ||
|
|
70
|
+
!isStringArray(response.stripFromHistoryPaths) ||
|
|
71
|
+
typeof response.stripThinkTags !== "boolean") {
|
|
72
|
+
issues.push({
|
|
73
|
+
code: "REASONING_MAPPING_INVALID",
|
|
74
|
+
message: "Directive response metadata is incomplete.",
|
|
75
|
+
path: `${path}/response`,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
if (response.streamReasoningKeys.length > 0 && response.streamReasoningPaths.length > 0) {
|
|
80
|
+
issues.push({
|
|
81
|
+
code: "REASONING_MAPPING_INVALID",
|
|
82
|
+
message: "Set stream keys or stream paths, not both.",
|
|
83
|
+
path: `${path}/response`,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
for (const pointer of [
|
|
87
|
+
...response.reasoningTextPaths,
|
|
88
|
+
...response.streamReasoningPaths,
|
|
89
|
+
...response.stripFromHistoryPaths,
|
|
90
|
+
]) {
|
|
91
|
+
if (!pointerOk(pointer)) {
|
|
92
|
+
issues.push({
|
|
93
|
+
code: "REASONING_MAPPING_INVALID",
|
|
94
|
+
message: `Invalid reasoning path '${pointer}'.`,
|
|
95
|
+
path: `${path}/response`,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (directive.usage) {
|
|
101
|
+
if (!isStringArray(directive.usage.reasoningTokenPaths) || directive.usage.reasoningTokenPaths.length === 0) {
|
|
102
|
+
issues.push({
|
|
103
|
+
code: "REASONING_MAPPING_INVALID",
|
|
104
|
+
message: "Usage reasoningTokenPaths must be a non-empty string array.",
|
|
105
|
+
path: `${path}/usage`,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
for (const pointer of directive.usage.reasoningTokenPaths) {
|
|
110
|
+
if (!pointerOk(pointer)) {
|
|
111
|
+
issues.push({
|
|
112
|
+
code: "REASONING_MAPPING_INVALID",
|
|
113
|
+
message: `Invalid usage path '${pointer}'.`,
|
|
114
|
+
path: `${path}/usage`,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (directive.promptPrefix !== undefined && typeof directive.promptPrefix !== "string") {
|
|
121
|
+
issues.push({
|
|
122
|
+
code: "REASONING_MAPPING_INVALID",
|
|
123
|
+
message: "promptPrefix must be a string.",
|
|
124
|
+
path: `${path}/promptPrefix`,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
if (directive.model !== undefined && (typeof directive.model !== "string" || !directive.model.trim())) {
|
|
128
|
+
issues.push({
|
|
129
|
+
code: "REASONING_MAPPING_INVALID",
|
|
130
|
+
message: "model replacement must be a non-empty string.",
|
|
131
|
+
path: `${path}/model`,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
if (directive.outcome === "ignored") {
|
|
135
|
+
const empty = Object.keys(directive.body).length === 0 &&
|
|
136
|
+
directive.model === undefined &&
|
|
137
|
+
directive.promptPrefix === undefined &&
|
|
138
|
+
directive.usage === undefined &&
|
|
139
|
+
sameResponse(directive.response, EMPTY_REASONING_RESPONSE);
|
|
140
|
+
if (!empty) {
|
|
141
|
+
issues.push({
|
|
142
|
+
code: "REASONING_MAPPING_INVALID",
|
|
143
|
+
message: "Ignored directives must be empty of body, model, promptPrefix, and usage.",
|
|
144
|
+
path,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
export function validateReasoningDirectives(document, catalogModelIds) {
|
|
150
|
+
const issues = [];
|
|
151
|
+
if (document.schema !== "x12i.ai-profiles.reasoning-directives") {
|
|
152
|
+
issues.push({
|
|
153
|
+
code: "REASONING_MAPPING_INVALID",
|
|
154
|
+
message: "Unexpected reasoning directives schema.",
|
|
155
|
+
path: "schema",
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
for (const [profileId, profile] of Object.entries(document.profiles)) {
|
|
159
|
+
if (!profile?.provenance?.docs?.length || !profile.provenance.api || !profile.provenance.verifiedAt) {
|
|
160
|
+
issues.push({
|
|
161
|
+
code: "REASONING_MAPPING_INVALID",
|
|
162
|
+
message: `Profile '${profileId}' is missing provenance.`,
|
|
163
|
+
path: `profiles/${profileId}/provenance`,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
for (const effort of REASONING_EFFORTS) {
|
|
167
|
+
const directive = profile?.efforts?.[effort];
|
|
168
|
+
if (!directive) {
|
|
169
|
+
issues.push({
|
|
170
|
+
code: "REASONING_MAPPING_INVALID",
|
|
171
|
+
message: `Profile '${profileId}' is missing effort '${effort}'.`,
|
|
172
|
+
path: `profiles/${profileId}/efforts/${effort}`,
|
|
173
|
+
});
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
checkDirective(directive, `profiles/${profileId}/efforts/${effort}`, issues);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
const aliasOwners = new Map();
|
|
180
|
+
const assignmentIds = new Map();
|
|
181
|
+
const claimAlias = (target, alias, owner, path) => {
|
|
182
|
+
const key = `${target}\u0000${alias.trim().toLowerCase()}`;
|
|
183
|
+
const previous = aliasOwners.get(key);
|
|
184
|
+
if (previous && previous !== owner) {
|
|
185
|
+
issues.push({
|
|
186
|
+
code: "REASONING_MAPPING_INVALID",
|
|
187
|
+
message: `Alias '${alias}' is claimed by '${previous}' and '${owner}'.`,
|
|
188
|
+
path,
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
aliasOwners.set(key, owner);
|
|
192
|
+
};
|
|
193
|
+
for (const assignment of document.assignments) {
|
|
194
|
+
const path = `assignments/${assignment.target}/${assignment.modelId}`;
|
|
195
|
+
if (!REASONING_TARGETS.includes(assignment.target)) {
|
|
196
|
+
issues.push({
|
|
197
|
+
code: "REASONING_MAPPING_INVALID",
|
|
198
|
+
message: "Assignment target is not supported.",
|
|
199
|
+
path,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
if (!document.profiles[assignment.profileId]) {
|
|
203
|
+
issues.push({
|
|
204
|
+
code: "REASONING_MAPPING_INVALID",
|
|
205
|
+
message: `Unknown profile '${assignment.profileId}'.`,
|
|
206
|
+
path,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
if (!catalogModelIds.has(assignment.catalogModelId)) {
|
|
210
|
+
issues.push({
|
|
211
|
+
code: "REASONING_MAPPING_INVALID",
|
|
212
|
+
message: `catalogModelId '${assignment.catalogModelId}' is not in the catalog.`,
|
|
213
|
+
path,
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
if (!assignment.aliases.includes(assignment.modelId)) {
|
|
217
|
+
issues.push({
|
|
218
|
+
code: "REASONING_MAPPING_INVALID",
|
|
219
|
+
message: "Assignment aliases must include the canonical model id.",
|
|
220
|
+
path,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
const bucket = assignmentIds.get(assignment.target) ?? new Set();
|
|
224
|
+
if (bucket.has(assignment.modelId)) {
|
|
225
|
+
issues.push({
|
|
226
|
+
code: "REASONING_MAPPING_INVALID",
|
|
227
|
+
message: `Duplicate canonical model id '${assignment.modelId}'.`,
|
|
228
|
+
path,
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
bucket.add(assignment.modelId);
|
|
232
|
+
assignmentIds.set(assignment.target, bucket);
|
|
233
|
+
for (const alias of assignment.aliases) {
|
|
234
|
+
claimAlias(assignment.target, alias, assignment.modelId, path);
|
|
235
|
+
}
|
|
236
|
+
const profile = document.profiles[assignment.profileId];
|
|
237
|
+
if (!profile)
|
|
238
|
+
continue;
|
|
239
|
+
for (const effort of REASONING_EFFORTS) {
|
|
240
|
+
const replacement = profile.efforts[effort]?.model;
|
|
241
|
+
if (!replacement)
|
|
242
|
+
continue;
|
|
243
|
+
if (replacement === assignment.modelId) {
|
|
244
|
+
issues.push({
|
|
245
|
+
code: "REASONING_MAPPING_INVALID",
|
|
246
|
+
message: `Self-referential substitution on '${assignment.modelId}'.`,
|
|
247
|
+
path: `${path}/${effort}`,
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
for (const target of REASONING_TARGETS) {
|
|
253
|
+
const ids = assignmentIds.get(target) ?? new Set();
|
|
254
|
+
const byId = new Map(document.assignments
|
|
255
|
+
.filter((assignment) => assignment.target === target)
|
|
256
|
+
.map((assignment) => [assignment.modelId, assignment]));
|
|
257
|
+
for (const assignment of byId.values()) {
|
|
258
|
+
const profile = document.profiles[assignment.profileId];
|
|
259
|
+
if (!profile)
|
|
260
|
+
continue;
|
|
261
|
+
for (const effort of REASONING_EFFORTS) {
|
|
262
|
+
const replacement = profile.efforts[effort]?.model;
|
|
263
|
+
if (!replacement)
|
|
264
|
+
continue;
|
|
265
|
+
if (!ids.has(replacement)) {
|
|
266
|
+
issues.push({
|
|
267
|
+
code: "REASONING_MAPPING_INVALID",
|
|
268
|
+
message: `Replacement '${replacement}' is not a ${target} assignment.`,
|
|
269
|
+
path: `assignments/${target}/${assignment.modelId}/${effort}`,
|
|
270
|
+
});
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
273
|
+
const seen = new Set([assignment.modelId]);
|
|
274
|
+
let cursor = replacement;
|
|
275
|
+
while (cursor) {
|
|
276
|
+
if (seen.has(cursor)) {
|
|
277
|
+
issues.push({
|
|
278
|
+
code: "REASONING_MAPPING_INVALID",
|
|
279
|
+
message: `Cyclic substitution on ${target} at '${assignment.modelId}'.`,
|
|
280
|
+
path: `assignments/${target}/${assignment.modelId}/${effort}`,
|
|
281
|
+
});
|
|
282
|
+
break;
|
|
283
|
+
}
|
|
284
|
+
seen.add(cursor);
|
|
285
|
+
const nextAssignment = byId.get(cursor);
|
|
286
|
+
const nextProfile = nextAssignment
|
|
287
|
+
? document.profiles[nextAssignment.profileId]
|
|
288
|
+
: undefined;
|
|
289
|
+
cursor = nextProfile?.efforts[effort]?.model ?? "";
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
for (const gap of document.gaps) {
|
|
295
|
+
const path = `gaps/${gap.target}/${gap.modelId}`;
|
|
296
|
+
if (!catalogModelIds.has(gap.catalogModelId)) {
|
|
297
|
+
issues.push({
|
|
298
|
+
code: "REASONING_MAPPING_INVALID",
|
|
299
|
+
message: `Gap catalogModelId '${gap.catalogModelId}' is not in the catalog.`,
|
|
300
|
+
path,
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
if (!gap.reason.trim()) {
|
|
304
|
+
issues.push({
|
|
305
|
+
code: "REASONING_MAPPING_INVALID",
|
|
306
|
+
message: "Gap is missing a reason.",
|
|
307
|
+
path,
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
for (const alias of [gap.modelId, gap.catalogModelId, ...gap.aliases]) {
|
|
311
|
+
claimAlias(gap.target, alias, `gap:${gap.modelId}`, path);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
return issues;
|
|
315
|
+
}
|
|
316
|
+
export function assertReasoningDirectives(document, catalogModelIds) {
|
|
317
|
+
const issues = validateReasoningDirectives(document, catalogModelIds);
|
|
318
|
+
if (issues.length === 0)
|
|
319
|
+
return;
|
|
320
|
+
throw new AIProfilesError("REASONING_MAPPING_INVALID", issues[0].message, {
|
|
321
|
+
issues,
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
//# sourceMappingURL=validateReasoningDirectives.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateReasoningDirectives.js","sourceRoot":"","sources":["../../src/reasoning/validateReasoningDirectives.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export type {
|
|
3
|
-
export {
|
|
1
|
+
import type { ReasoningDirective, ResolveReasoningInput } from "./reasoning/types.js";
|
|
2
|
+
export type { ReasoningAssignment, ReasoningDirective, ReasoningDirectivesDocument, ReasoningEffort, ReasoningGap, ReasoningOutcome, ReasoningProvenance, ReasoningResponseMetadata, ReasoningTarget, ResolveReasoningInput, } from "./reasoning/types.js";
|
|
3
|
+
export { mergeReasoningBody } from "./reasoning/mergeReasoningBody.js";
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* Translate one provider-neutral reasoning effort into a directive for the
|
|
6
|
+
* selected target and model. Reads bundled data only.
|
|
7
7
|
*/
|
|
8
8
|
export declare function resolveReasoning(input: ResolveReasoningInput): ReasoningDirective;
|
|
9
9
|
//# sourceMappingURL=resolveReasoning.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveReasoning.d.ts","sourceRoot":"","sources":["../src/resolveReasoning.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolveReasoning.d.ts","sourceRoot":"","sources":["../src/resolveReasoning.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,kBAAkB,EAElB,qBAAqB,EACtB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,2BAA2B,EAC3B,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,yBAAyB,EACzB,eAAe,EACf,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAKvE;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,kBAAkB,CAEjF"}
|
package/dist/resolveReasoning.js
CHANGED
|
@@ -1,81 +1,13 @@
|
|
|
1
|
-
import
|
|
1
|
+
import reasoningDirectives from "./data/reasoning-directives.json" with { type: "json" };
|
|
2
2
|
import { loadBundledModelsCatalog } from "./loader/loadBundledModelsCatalog.js";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import { buildOpenRouterReasoningDirective, OPENROUTER_REASONING_RESPONSE, OPENROUTER_REASONING_USAGE, } from "./reasoning/openRouterDirective.js";
|
|
7
|
-
import { unsupportedReasoningDirective, } from "./reasoning/types.js";
|
|
8
|
-
export { toAbstractEffort } from "./reasoning/types.js";
|
|
3
|
+
import { resolveReasoningDocument } from "./reasoning/resolveReasoningDocument.js";
|
|
4
|
+
export { mergeReasoningBody } from "./reasoning/mergeReasoningBody.js";
|
|
5
|
+
const document = reasoningDirectives;
|
|
9
6
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*/
|
|
13
|
-
const REASONING_MODEL_SWITCH = {
|
|
14
|
-
"deepseek/deepseek-chat": "deepseek/deepseek-reasoner",
|
|
15
|
-
};
|
|
16
|
-
function findCatalogEntry(model) {
|
|
17
|
-
const catalog = loadBundledModelsCatalog();
|
|
18
|
-
const match = resolveModelFromInput(model, catalog);
|
|
19
|
-
if (!match?.entry)
|
|
20
|
-
return undefined;
|
|
21
|
-
if (match.confidence !== "exact" && match.confidence !== "high")
|
|
22
|
-
return undefined;
|
|
23
|
-
return match.entry;
|
|
24
|
-
}
|
|
25
|
-
function directiveForEntry(entry, effort) {
|
|
26
|
-
const reasoning = entry.openrouter.reasoning;
|
|
27
|
-
if (!reasoning)
|
|
28
|
-
return undefined;
|
|
29
|
-
return buildOpenRouterReasoningDirective({
|
|
30
|
-
effort,
|
|
31
|
-
reasoning,
|
|
32
|
-
maxCompletionTokens: entry.maxCompletionTokens ?? entry.openrouter.maxCompletionTokens,
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
function siblingModelId(entry) {
|
|
36
|
-
const slug = normalizeKey(entry.openrouter.modelId);
|
|
37
|
-
return REASONING_MODEL_SWITCH[slug];
|
|
38
|
-
}
|
|
39
|
-
function resolveOpenRouter(model, effort) {
|
|
40
|
-
const wire = normalizeGatewayWireId(model);
|
|
41
|
-
const lookup = wire?.modelId ?? model.trim();
|
|
42
|
-
const entry = findCatalogEntry(lookup);
|
|
43
|
-
if (!entry)
|
|
44
|
-
return unsupportedReasoningDirective();
|
|
45
|
-
const direct = directiveForEntry(entry, effort);
|
|
46
|
-
if (direct)
|
|
47
|
-
return direct;
|
|
48
|
-
if (effort === "none")
|
|
49
|
-
return unsupportedReasoningDirective();
|
|
50
|
-
const siblingId = siblingModelId(entry);
|
|
51
|
-
if (!siblingId)
|
|
52
|
-
return unsupportedReasoningDirective();
|
|
53
|
-
const sibling = findCatalogEntry(siblingId);
|
|
54
|
-
if (!sibling)
|
|
55
|
-
return unsupportedReasoningDirective();
|
|
56
|
-
const siblingDirective = directiveForEntry(sibling, effort) ?? {
|
|
57
|
-
supported: true,
|
|
58
|
-
body: {},
|
|
59
|
-
response: OPENROUTER_REASONING_RESPONSE,
|
|
60
|
-
usage: OPENROUTER_REASONING_USAGE,
|
|
61
|
-
};
|
|
62
|
-
return {
|
|
63
|
-
...siblingDirective,
|
|
64
|
-
supported: true,
|
|
65
|
-
model: sibling.openrouter.modelId,
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* One lookup. The runtime merges `body` and does not interpret vendors.
|
|
70
|
-
* Unknown transport, unknown model, or no reasoning control returns `supported: false`.
|
|
7
|
+
* Translate one provider-neutral reasoning effort into a directive for the
|
|
8
|
+
* selected target and model. Reads bundled data only.
|
|
71
9
|
*/
|
|
72
10
|
export function resolveReasoning(input) {
|
|
73
|
-
|
|
74
|
-
return buildBedrockReasoningDirective(input.model, input.effort);
|
|
75
|
-
}
|
|
76
|
-
if (input.transport === "openrouter") {
|
|
77
|
-
return resolveOpenRouter(input.model, input.effort);
|
|
78
|
-
}
|
|
79
|
-
return unsupportedReasoningDirective();
|
|
11
|
+
return resolveReasoningDocument(input, document, loadBundledModelsCatalog());
|
|
80
12
|
}
|
|
81
13
|
//# sourceMappingURL=resolveReasoning.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveReasoning.js","sourceRoot":"","sources":["../src/resolveReasoning.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"resolveReasoning.js","sourceRoot":"","sources":["../src/resolveReasoning.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,MAAM,kCAAkC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACzF,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AAmBnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAGvE,MAAM,QAAQ,GAAG,mBAAkD,CAAC;AAEpE;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAA4B;IAC3D,OAAO,wBAAwB,CAAC,KAAK,EAAE,QAAQ,EAAE,wBAAwB,EAAE,CAAC,CAAC;AAC/E,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@x12i/ai-profiles",
|
|
3
|
-
|
|
3
|
+
"version": "5.0.0",
|
|
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",
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"catalog:sync-or": "npm run build && node scripts/sync-models-registry.mjs fetch-or && node scripts/extend-profiles-from-catalog.mjs && npm run registry:finish",
|
|
35
35
|
"catalog:build": "node scripts/sync-models-registry.mjs build",
|
|
36
36
|
"catalog:verify": "node scripts/sync-models-registry.mjs verify",
|
|
37
|
+
"reasoning:build": "node scripts/build-reasoning-directives.mjs",
|
|
37
38
|
"catalog:sync": "node scripts/sync-models-registry.mjs sync",
|
|
38
39
|
"verify:catalog-coverage": "npm run build && node scripts/verify-catalog-coverage.mjs",
|
|
39
40
|
"stats": "npm run build && node scripts/print-registry-stats.mjs",
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { AbstractEffort, ReasoningDirective } from "./types.js";
|
|
2
|
-
export declare const BEDROCK_REASONING_RESPONSE: ReasoningDirective["response"];
|
|
3
|
-
interface ClaudeVersion {
|
|
4
|
-
major: number;
|
|
5
|
-
minor: number;
|
|
6
|
-
}
|
|
7
|
-
export interface ParsedBedrockModel {
|
|
8
|
-
provider: string;
|
|
9
|
-
slug: string;
|
|
10
|
-
}
|
|
11
|
-
/** Bedrock model id or inference-profile id → provider prefix and model slug. */
|
|
12
|
-
export declare function parseBedrockModelId(model: string): ParsedBedrockModel;
|
|
13
|
-
export declare function parseClaudeVersion(slug: string): ClaudeVersion | null;
|
|
14
|
-
type ClaudeThinking = "adaptive" | "budget" | "unsupported";
|
|
15
|
-
export declare function claudeThinkingMode(slug: string): ClaudeThinking;
|
|
16
|
-
export declare function buildBedrockReasoningDirective(model: string, effort: AbstractEffort): ReasoningDirective;
|
|
17
|
-
export {};
|
|
18
|
-
//# sourceMappingURL=bedrockDirective.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bedrockDirective.d.ts","sourceRoot":"","sources":["../../src/reasoning/bedrockDirective.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErE,eAAO,MAAM,0BAA0B,EAAE,kBAAkB,CAAC,UAAU,CAOrE,CAAC;AAgBF,UAAU,aAAa;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAKD,iFAAiF;AACjF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,CAwBrE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAiBrE;AAED,KAAK,cAAc,GAAG,UAAU,GAAG,QAAQ,GAAG,aAAa,CAAC;AAE5D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAU/D;AAmBD,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,cAAc,GACrB,kBAAkB,CAiDpB"}
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
export const BEDROCK_REASONING_RESPONSE = {
|
|
2
|
-
reasoningTextPaths: [
|
|
3
|
-
"output.message.content[].reasoningContent.reasoningText.text",
|
|
4
|
-
],
|
|
5
|
-
streamReasoningKeys: ["reasoningContent"],
|
|
6
|
-
stripFromHistoryPaths: [],
|
|
7
|
-
stripThinkTags: false,
|
|
8
|
-
};
|
|
9
|
-
const BUDGET_TOKENS = {
|
|
10
|
-
low: 2048,
|
|
11
|
-
medium: 8192,
|
|
12
|
-
high: 16384,
|
|
13
|
-
max: 32768,
|
|
14
|
-
};
|
|
15
|
-
const NOVA_EFFORT = {
|
|
16
|
-
low: "low",
|
|
17
|
-
medium: "medium",
|
|
18
|
-
high: "high",
|
|
19
|
-
max: "high",
|
|
20
|
-
};
|
|
21
|
-
const INFERENCE_PROFILE_PREFIX = /^(?:us|eu|apac|ap|au|ca|sa|global)\./i;
|
|
22
|
-
/** Bedrock model id or inference-profile id → provider prefix and model slug. */
|
|
23
|
-
export function parseBedrockModelId(model) {
|
|
24
|
-
let id = model.trim();
|
|
25
|
-
if (id.includes("/")) {
|
|
26
|
-
const slash = id.indexOf("/");
|
|
27
|
-
return {
|
|
28
|
-
provider: id.slice(0, slash).toLowerCase(),
|
|
29
|
-
slug: id.slice(slash + 1).toLowerCase(),
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
id = id.replace(INFERENCE_PROFILE_PREFIX, "");
|
|
33
|
-
const colon = id.indexOf(":");
|
|
34
|
-
if (colon > 0)
|
|
35
|
-
id = id.slice(0, colon);
|
|
36
|
-
id = id.replace(/-v\d+$/i, "");
|
|
37
|
-
const dot = id.indexOf(".");
|
|
38
|
-
if (dot <= 0) {
|
|
39
|
-
return { provider: "", slug: id.toLowerCase() };
|
|
40
|
-
}
|
|
41
|
-
return {
|
|
42
|
-
provider: id.slice(0, dot).toLowerCase(),
|
|
43
|
-
slug: id.slice(dot + 1).toLowerCase(),
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
export function parseClaudeVersion(slug) {
|
|
47
|
-
const named = slug.match(/claude-(?:opus|sonnet|haiku|fable|mythos)-(\d+)(?:[.-](\d+))?/);
|
|
48
|
-
if (named) {
|
|
49
|
-
return {
|
|
50
|
-
major: Number(named[1]),
|
|
51
|
-
minor: named[2] ? Number(named[2]) : 0,
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
const dated = slug.match(/claude-(\d+)[.-](\d+)-(?:opus|sonnet|haiku)/);
|
|
55
|
-
if (dated) {
|
|
56
|
-
return { major: Number(dated[1]), minor: Number(dated[2]) };
|
|
57
|
-
}
|
|
58
|
-
return null;
|
|
59
|
-
}
|
|
60
|
-
export function claudeThinkingMode(slug) {
|
|
61
|
-
const version = parseClaudeVersion(slug);
|
|
62
|
-
if (!version)
|
|
63
|
-
return "unsupported";
|
|
64
|
-
if (version.major > 4 || (version.major === 4 && version.minor >= 6)) {
|
|
65
|
-
return "adaptive";
|
|
66
|
-
}
|
|
67
|
-
if (version.major === 4 || (version.major === 3 && version.minor >= 7)) {
|
|
68
|
-
return "budget";
|
|
69
|
-
}
|
|
70
|
-
return "unsupported";
|
|
71
|
-
}
|
|
72
|
-
function isNovaReasoningSlug(slug) {
|
|
73
|
-
if (!slug.startsWith("nova"))
|
|
74
|
-
return false;
|
|
75
|
-
return !/canvas|reel|sonic|embed|image|speech/.test(slug);
|
|
76
|
-
}
|
|
77
|
-
function supported(body) {
|
|
78
|
-
return {
|
|
79
|
-
supported: true,
|
|
80
|
-
body,
|
|
81
|
-
response: BEDROCK_REASONING_RESPONSE,
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
function bedrockFields(fields) {
|
|
85
|
-
return { additionalModelRequestFields: fields };
|
|
86
|
-
}
|
|
87
|
-
export function buildBedrockReasoningDirective(model, effort) {
|
|
88
|
-
const parsed = parseBedrockModelId(model);
|
|
89
|
-
if (parsed.provider === "anthropic") {
|
|
90
|
-
const mode = claudeThinkingMode(parsed.slug);
|
|
91
|
-
if (mode === "adaptive") {
|
|
92
|
-
if (effort === "none")
|
|
93
|
-
return supported({});
|
|
94
|
-
return supported(bedrockFields({
|
|
95
|
-
thinking: { type: "adaptive" },
|
|
96
|
-
output_config: { effort },
|
|
97
|
-
}));
|
|
98
|
-
}
|
|
99
|
-
if (mode === "budget") {
|
|
100
|
-
if (effort === "none")
|
|
101
|
-
return supported({});
|
|
102
|
-
return supported(bedrockFields({
|
|
103
|
-
thinking: {
|
|
104
|
-
type: "enabled",
|
|
105
|
-
budget_tokens: BUDGET_TOKENS[effort],
|
|
106
|
-
},
|
|
107
|
-
}));
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
if (parsed.provider === "amazon" && isNovaReasoningSlug(parsed.slug)) {
|
|
111
|
-
if (effort === "none")
|
|
112
|
-
return supported({});
|
|
113
|
-
return supported(bedrockFields({
|
|
114
|
-
reasoningConfig: {
|
|
115
|
-
type: "enabled",
|
|
116
|
-
maxReasoningEffort: NOVA_EFFORT[effort],
|
|
117
|
-
},
|
|
118
|
-
}));
|
|
119
|
-
}
|
|
120
|
-
return {
|
|
121
|
-
supported: false,
|
|
122
|
-
body: {},
|
|
123
|
-
response: {
|
|
124
|
-
reasoningTextPaths: [],
|
|
125
|
-
streamReasoningKeys: [],
|
|
126
|
-
stripFromHistoryPaths: [],
|
|
127
|
-
stripThinkTags: false,
|
|
128
|
-
},
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
//# sourceMappingURL=bedrockDirective.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bedrockDirective.js","sourceRoot":"","sources":["../../src/reasoning/bedrockDirective.ts"],"names":[],"mappings":"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"}
|