@x12i/ai-profiles 4.4.2 → 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 +30 -5
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +11 -8
- package/dist/browser.js.map +1 -1
- package/dist/buildCatalogFromOpenRouterApi.d.ts +11 -0
- package/dist/buildCatalogFromOpenRouterApi.d.ts.map +1 -1
- package/dist/buildCatalogFromOpenRouterApi.js +9 -0
- package/dist/buildCatalogFromOpenRouterApi.js.map +1 -1
- package/dist/catalogEnrichment.d.ts.map +1 -1
- package/dist/catalogEnrichment.js +5 -4
- package/dist/catalogEnrichment.js.map +1 -1
- package/dist/cost/computeInvokeCost.d.ts.map +1 -1
- package/dist/cost/computeInvokeCost.js +2 -1
- package/dist/cost/computeInvokeCost.js.map +1 -1
- package/dist/data/models-catalog.json +21228 -17393
- package/dist/data/models-profiles.json +10855 -10370
- package/dist/data/models-registry.json +12438 -11192
- 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/evidence/openRouter.d.ts.map +1 -1
- package/dist/evidence/openRouter.js +3 -0
- package/dist/evidence/openRouter.js.map +1 -1
- package/dist/evidence/scoringConfig.d.ts.map +1 -1
- package/dist/evidence/scoringConfig.js +8 -7
- package/dist/evidence/scoringConfig.js.map +1 -1
- package/dist/finalProfileModelMappingPatch.d.ts.map +1 -1
- package/dist/finalProfileModelMappingPatch.js +24 -19
- package/dist/finalProfileModelMappingPatch.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/inferModelFamily.d.ts.map +1 -1
- package/dist/inferModelFamily.js +2 -0
- package/dist/inferModelFamily.js.map +1 -1
- package/dist/modelsCatalog.d.ts +2 -0
- package/dist/modelsCatalog.d.ts.map +1 -1
- package/dist/modelsCatalog.js +12 -6
- package/dist/modelsCatalog.js.map +1 -1
- package/dist/pricingNormalize.d.ts +13 -0
- package/dist/pricingNormalize.d.ts.map +1 -0
- package/dist/pricingNormalize.js +58 -0
- package/dist/pricingNormalize.js.map +1 -0
- package/dist/profileRegistryV2.d.ts.map +1 -1
- package/dist/profileRegistryV2.js +5 -4
- package/dist/profileRegistryV2.js.map +1 -1
- package/dist/profileRegistryV3.d.ts.map +1 -1
- package/dist/profileRegistryV3.js +18 -3
- package/dist/profileRegistryV3.js.map +1 -1
- package/dist/reasoning/catalogReasoning.d.ts +8 -0
- package/dist/reasoning/catalogReasoning.d.ts.map +1 -0
- package/dist/reasoning/catalogReasoning.js +53 -0
- package/dist/reasoning/catalogReasoning.js.map +1 -0
- 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 +88 -0
- package/dist/reasoning/types.d.ts.map +1 -0
- package/dist/reasoning/types.js +20 -0
- package/dist/reasoning/types.js.map +1 -0
- 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 +9 -0
- package/dist/resolveReasoning.d.ts.map +1 -0
- package/dist/resolveReasoning.js +13 -0
- package/dist/resolveReasoning.js.map +1 -0
- package/dist/types.d.ts +17 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { AIProfilesError } from "../errors.js";
|
|
2
|
+
import { assertReasoningDirectives } from "./validateReasoningDirectives.js";
|
|
3
|
+
import { REASONING_EFFORTS, REASONING_TARGETS, } from "./types.js";
|
|
4
|
+
const preparedCache = new WeakMap();
|
|
5
|
+
function normalize(value) {
|
|
6
|
+
return value.trim().toLowerCase();
|
|
7
|
+
}
|
|
8
|
+
function isEffort(value) {
|
|
9
|
+
return typeof value === "string" && REASONING_EFFORTS.includes(value);
|
|
10
|
+
}
|
|
11
|
+
function isTarget(value) {
|
|
12
|
+
return typeof value === "string" && REASONING_TARGETS.includes(value);
|
|
13
|
+
}
|
|
14
|
+
function prepare(document, catalog) {
|
|
15
|
+
const cached = preparedCache.get(document);
|
|
16
|
+
if (cached)
|
|
17
|
+
return cached;
|
|
18
|
+
const catalogIds = new Set(catalog.models.map((entry) => entry.openrouter.modelId));
|
|
19
|
+
assertReasoningDirectives(document, catalogIds);
|
|
20
|
+
const catalogKeys = new Map();
|
|
21
|
+
const addCatalogKey = (key, entry) => {
|
|
22
|
+
const normalized = normalize(key);
|
|
23
|
+
if (!normalized)
|
|
24
|
+
return;
|
|
25
|
+
const existing = catalogKeys.get(normalized);
|
|
26
|
+
if (!existing) {
|
|
27
|
+
catalogKeys.set(normalized, { entry });
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (existing === "ambiguous" || existing.entry !== entry) {
|
|
31
|
+
catalogKeys.set(normalized, "ambiguous");
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
for (const entry of catalog.models) {
|
|
35
|
+
addCatalogKey(entry.openrouter.modelId, entry);
|
|
36
|
+
if (entry.openrouter.canonicalSlug) {
|
|
37
|
+
addCatalogKey(entry.openrouter.canonicalSlug, entry);
|
|
38
|
+
}
|
|
39
|
+
addCatalogKey(`${entry.direct.provider}/${entry.direct.modelId}`, entry);
|
|
40
|
+
addCatalogKey(`openrouter/${entry.openrouter.modelId}`, entry);
|
|
41
|
+
addCatalogKey(entry.direct.modelId, entry);
|
|
42
|
+
}
|
|
43
|
+
const targets = new Map();
|
|
44
|
+
for (const target of REASONING_TARGETS) {
|
|
45
|
+
targets.set(target, { assignments: new Map(), gaps: new Map() });
|
|
46
|
+
}
|
|
47
|
+
for (const assignment of document.assignments) {
|
|
48
|
+
const index = targets.get(assignment.target);
|
|
49
|
+
if (!index)
|
|
50
|
+
continue;
|
|
51
|
+
for (const alias of assignment.aliases) {
|
|
52
|
+
index.assignments.set(normalize(alias), assignment);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
for (const gap of document.gaps) {
|
|
56
|
+
const index = targets.get(gap.target);
|
|
57
|
+
if (!index)
|
|
58
|
+
continue;
|
|
59
|
+
const keys = new Set([gap.modelId, gap.catalogModelId, ...gap.aliases]);
|
|
60
|
+
for (const alias of keys) {
|
|
61
|
+
index.gaps.set(normalize(alias), gap);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const prepared = { targets, catalogKeys, catalogIds };
|
|
65
|
+
preparedCache.set(document, prepared);
|
|
66
|
+
return prepared;
|
|
67
|
+
}
|
|
68
|
+
function lookupCatalog(model, prepared) {
|
|
69
|
+
const direct = prepared.catalogKeys.get(normalize(model));
|
|
70
|
+
if (direct)
|
|
71
|
+
return direct === "ambiguous" ? "ambiguous" : direct.entry;
|
|
72
|
+
const gateway = normalize(model);
|
|
73
|
+
if (gateway.startsWith("openrouter/")) {
|
|
74
|
+
const stripped = prepared.catalogKeys.get(gateway.slice("openrouter/".length));
|
|
75
|
+
if (stripped)
|
|
76
|
+
return stripped === "ambiguous" ? "ambiguous" : stripped.entry;
|
|
77
|
+
}
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
function cloneDirective(directive) {
|
|
81
|
+
return structuredClone(directive);
|
|
82
|
+
}
|
|
83
|
+
function finishDirective(directive, canonicalModelId, inputModel) {
|
|
84
|
+
const copy = cloneDirective(directive);
|
|
85
|
+
if (copy.outcome === "ignored") {
|
|
86
|
+
delete copy.model;
|
|
87
|
+
delete copy.promptPrefix;
|
|
88
|
+
delete copy.usage;
|
|
89
|
+
return copy;
|
|
90
|
+
}
|
|
91
|
+
if (!copy.model && normalize(inputModel) !== normalize(canonicalModelId)) {
|
|
92
|
+
copy.model = canonicalModelId;
|
|
93
|
+
}
|
|
94
|
+
return copy;
|
|
95
|
+
}
|
|
96
|
+
export function resolveReasoningDocument(input, document, catalog) {
|
|
97
|
+
if (!input || typeof input !== "object") {
|
|
98
|
+
throw new AIProfilesError("INVALID_MODEL_ID", "Reasoning model id must be a non-empty string.");
|
|
99
|
+
}
|
|
100
|
+
const target = input.target;
|
|
101
|
+
const effort = input.effort;
|
|
102
|
+
const model = input.model;
|
|
103
|
+
if (!isTarget(target)) {
|
|
104
|
+
throw new AIProfilesError("UNSUPPORTED_TARGET", `Unsupported reasoning target '${String(target)}'.`, { target });
|
|
105
|
+
}
|
|
106
|
+
if (!isEffort(effort)) {
|
|
107
|
+
throw new AIProfilesError("INVALID_EFFORT", `Invalid reasoning effort '${String(effort)}'.`, { target, effort });
|
|
108
|
+
}
|
|
109
|
+
if (typeof model !== "string" || !model.trim()) {
|
|
110
|
+
throw new AIProfilesError("INVALID_MODEL_ID", "Reasoning model id must be a non-empty string.", { target, effort });
|
|
111
|
+
}
|
|
112
|
+
const prepared = prepare(document, catalog);
|
|
113
|
+
const index = prepared.targets.get(target);
|
|
114
|
+
if (!index) {
|
|
115
|
+
throw new AIProfilesError("UNSUPPORTED_TARGET", `Unsupported reasoning target '${target}'.`, {
|
|
116
|
+
target,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
const assignment = index.assignments.get(normalize(model));
|
|
120
|
+
if (assignment) {
|
|
121
|
+
const profile = document.profiles[assignment.profileId];
|
|
122
|
+
const directive = profile?.efforts[effort];
|
|
123
|
+
if (!profile || !directive) {
|
|
124
|
+
throw new AIProfilesError("REASONING_MAPPING_INVALID", `Reasoning profile '${assignment.profileId}' is missing effort '${effort}'.`, { target, model, effort, profileId: assignment.profileId });
|
|
125
|
+
}
|
|
126
|
+
if (directive.model) {
|
|
127
|
+
const replacement = index.assignments.get(normalize(directive.model));
|
|
128
|
+
if (!replacement || replacement.modelId !== directive.model) {
|
|
129
|
+
throw new AIProfilesError("REASONING_MAPPING_INVALID", `Replacement model '${directive.model}' is not assigned on target '${target}'.`, { target, model, effort, replacement: directive.model });
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return finishDirective(directive, assignment.modelId, model);
|
|
133
|
+
}
|
|
134
|
+
const catalogHit = lookupCatalog(model, prepared);
|
|
135
|
+
if (catalogHit === "ambiguous") {
|
|
136
|
+
throw new AIProfilesError("AMBIGUOUS_MODEL_ALIAS", `Model alias '${model}' is ambiguous on target '${target}'.`, { target, model, effort });
|
|
137
|
+
}
|
|
138
|
+
const gapKey = catalogHit
|
|
139
|
+
? normalize(catalogHit.openrouter.modelId)
|
|
140
|
+
: normalize(model);
|
|
141
|
+
const gap = index.gaps.get(gapKey) ?? index.gaps.get(normalize(model));
|
|
142
|
+
if (gap && gap.reason) {
|
|
143
|
+
throw new AIProfilesError("REASONING_MAPPING_MISSING", `No verified reasoning mapping for '${gap.catalogModelId}' on target '${target}'.`, { target, model, effort, catalogModelId: gap.catalogModelId, reason: gap.reason });
|
|
144
|
+
}
|
|
145
|
+
if (!catalogHit) {
|
|
146
|
+
throw new AIProfilesError("UNKNOWN_MODEL", `Unknown model '${model}'.`, { target, model, effort });
|
|
147
|
+
}
|
|
148
|
+
if (target === "openrouter") {
|
|
149
|
+
throw new AIProfilesError("REASONING_MAPPING_MISSING", `No verified reasoning mapping for '${catalogHit.openrouter.modelId}' on target 'openrouter'.`, { target, model, effort, catalogModelId: catalogHit.openrouter.modelId });
|
|
150
|
+
}
|
|
151
|
+
throw new AIProfilesError("TARGET_MODEL_UNAVAILABLE", `Model '${catalogHit.openrouter.modelId}' is not available on target '${target}'.`, { target, model, effort, catalogModelId: catalogHit.openrouter.modelId });
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=resolveReasoningDocument.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveReasoningDocument.js","sourceRoot":"","sources":["../../src/reasoning/resolveReasoningDocument.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EACL,iBAAiB,EACjB,iBAAiB,GAQlB,MAAM,YAAY,CAAC;AAiBpB,MAAM,aAAa,GAAG,IAAI,OAAO,EAAyC,CAAC;AAE3E,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,iBAAuC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/F,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,iBAAuC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/F,CAAC;AAED,SAAS,OAAO,CACd,QAAqC,EACrC,OAA0B;IAE1B,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IACpF,yBAAyB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAEhD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAoC,CAAC;IAChE,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,KAAwB,EAAE,EAAE;QAC9D,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,UAAU;YAAE,OAAO;QACxB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACvC,OAAO;QACT,CAAC;QACD,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;YACzD,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC/C,IAAI,KAAK,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;YACnC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC;QACD,aAAa,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;QACzE,aAAa,CAAC,cAAc,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;QAC/D,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAgC,CAAC;IACxD,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,cAAc,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACxE,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAa,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;IAChE,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACtC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,aAAa,CACpB,KAAa,EACb,QAAkB;IAElB,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1D,IAAI,MAAM;QAAE,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IAEvE,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/E,IAAI,QAAQ;YAAE,OAAO,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC/E,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,cAAc,CAAC,SAA6B;IACnD,OAAO,eAAe,CAAC,SAAS,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,eAAe,CACtB,SAA6B,EAC7B,gBAAwB,EACxB,UAAkB;IAElB,MAAM,IAAI,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IACvC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,KAAK,CAAC;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACzE,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC;IAChC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,KAA4B,EAC5B,QAAqC,EACrC,OAA0B;IAE1B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,eAAe,CACvB,kBAAkB,EAClB,gDAAgD,CACjD,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAY,KAAK,CAAC,MAAM,CAAC;IACrC,MAAM,MAAM,GAAY,KAAK,CAAC,MAAM,CAAC;IACrC,MAAM,KAAK,GAAY,KAAK,CAAC,KAAK,CAAC;IAEnC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,eAAe,CACvB,oBAAoB,EACpB,iCAAiC,MAAM,CAAC,MAAM,CAAC,IAAI,EACnD,EAAE,MAAM,EAAE,CACX,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,eAAe,CACvB,gBAAgB,EAChB,6BAA6B,MAAM,CAAC,MAAM,CAAC,IAAI,EAC/C,EAAE,MAAM,EAAE,MAAM,EAAE,CACnB,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/C,MAAM,IAAI,eAAe,CACvB,kBAAkB,EAClB,gDAAgD,EAChD,EAAE,MAAM,EAAE,MAAM,EAAE,CACnB,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,eAAe,CAAC,oBAAoB,EAAE,iCAAiC,MAAM,IAAI,EAAE;YAC3F,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3D,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,eAAe,CACvB,2BAA2B,EAC3B,sBAAsB,UAAU,CAAC,SAAS,wBAAwB,MAAM,IAAI,EAC5E,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE,CAC3D,CAAC;QACJ,CAAC;QACD,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACpB,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YACtE,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,OAAO,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC;gBAC5D,MAAM,IAAI,eAAe,CACvB,2BAA2B,EAC3B,sBAAsB,SAAS,CAAC,KAAK,gCAAgC,MAAM,IAAI,EAC/E,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,CAAC,KAAK,EAAE,CACxD,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAClD,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;QAC/B,MAAM,IAAI,eAAe,CACvB,uBAAuB,EACvB,gBAAgB,KAAK,6BAA6B,MAAM,IAAI,EAC5D,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAC1B,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,UAAU;QACvB,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC;QAC1C,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACrB,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACvE,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,IAAI,eAAe,CACvB,2BAA2B,EAC3B,sCAAsC,GAAG,CAAC,cAAc,gBAAgB,MAAM,IAAI,EAClF,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAClF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,eAAe,CACvB,eAAe,EACf,kBAAkB,KAAK,IAAI,EAC3B,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAC1B,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QAC5B,MAAM,IAAI,eAAe,CACvB,2BAA2B,EAC3B,sCAAsC,UAAU,CAAC,UAAU,CAAC,OAAO,2BAA2B,EAC9F,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE,CACzE,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,eAAe,CACvB,0BAA0B,EAC1B,UAAU,UAAU,CAAC,UAAU,CAAC,OAAO,iCAAiC,MAAM,IAAI,EAClF,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE,CACzE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/** Caller-facing effort. Vendor spellings stay inside the directive body. */
|
|
2
|
+
export type ReasoningEffort = "minimal" | "low" | "medium" | "high" | "max";
|
|
3
|
+
export type ReasoningTarget = "openrouter" | "bedrock" | "openai";
|
|
4
|
+
export type ReasoningOutcome = "applied" | "degraded" | "ignored";
|
|
5
|
+
export interface ResolveReasoningInput {
|
|
6
|
+
target: ReasoningTarget;
|
|
7
|
+
model: string;
|
|
8
|
+
effort: ReasoningEffort;
|
|
9
|
+
}
|
|
10
|
+
export interface ReasoningResponseMetadata {
|
|
11
|
+
/**
|
|
12
|
+
* JSON Pointers (RFC 6901, `*` = every array element) into a complete raw response.
|
|
13
|
+
* Ordered alternatives: the first path that yields one or more strings wins.
|
|
14
|
+
* Strings from that one path are concatenated in array order.
|
|
15
|
+
*/
|
|
16
|
+
reasoningTextPaths: string[];
|
|
17
|
+
/** Exact keys on the documented flat stream-delta object. Empty when paths are used. */
|
|
18
|
+
streamReasoningKeys: string[];
|
|
19
|
+
/**
|
|
20
|
+
* JSON Pointers into one documented stream event.
|
|
21
|
+
* Empty when `streamReasoningKeys` is used.
|
|
22
|
+
*/
|
|
23
|
+
streamReasoningPaths: string[];
|
|
24
|
+
/** JSON Pointers relative to one reusable history message. Delete only these fields. */
|
|
25
|
+
stripFromHistoryPaths: string[];
|
|
26
|
+
/**
|
|
27
|
+
* When true, separate the full `<think>...</think>` section from answer text.
|
|
28
|
+
* Streaming consumers hold tags split across chunks and do not release an unclosed
|
|
29
|
+
* thought section into answer text at end of stream.
|
|
30
|
+
*/
|
|
31
|
+
stripThinkTags: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface ReasoningDirective {
|
|
34
|
+
outcome: ReasoningOutcome;
|
|
35
|
+
/** Fields to merge into the selected target's request body. */
|
|
36
|
+
body: Record<string, unknown>;
|
|
37
|
+
/** Optional replacement for the selected model ID, in that target's namespace. */
|
|
38
|
+
model?: string;
|
|
39
|
+
/** Optional literal prefix for the input prompt. */
|
|
40
|
+
promptPrefix?: string;
|
|
41
|
+
response: ReasoningResponseMetadata;
|
|
42
|
+
usage?: {
|
|
43
|
+
/**
|
|
44
|
+
* JSON Pointers into raw response usage for one reasoning-token count.
|
|
45
|
+
* Ordered alternatives: the first present number wins. Do not sum them.
|
|
46
|
+
*/
|
|
47
|
+
reasoningTokenPaths: string[];
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export declare const REASONING_EFFORTS: readonly ReasoningEffort[];
|
|
51
|
+
export declare const REASONING_TARGETS: readonly ReasoningTarget[];
|
|
52
|
+
export declare const EMPTY_REASONING_RESPONSE: ReasoningResponseMetadata;
|
|
53
|
+
export interface ReasoningProvenance {
|
|
54
|
+
docs: string[];
|
|
55
|
+
api: string;
|
|
56
|
+
modelScope: string;
|
|
57
|
+
verifiedAt: string;
|
|
58
|
+
constraints: string[];
|
|
59
|
+
}
|
|
60
|
+
export interface ReasoningProfile {
|
|
61
|
+
provenance: ReasoningProvenance;
|
|
62
|
+
efforts: Record<ReasoningEffort, ReasoningDirective>;
|
|
63
|
+
}
|
|
64
|
+
export interface ReasoningAssignment {
|
|
65
|
+
target: ReasoningTarget;
|
|
66
|
+
/** Canonical id in the target namespace. */
|
|
67
|
+
modelId: string;
|
|
68
|
+
aliases: string[];
|
|
69
|
+
profileId: string;
|
|
70
|
+
/** OpenRouter catalog id of the underlying catalog row. */
|
|
71
|
+
catalogModelId: string;
|
|
72
|
+
}
|
|
73
|
+
export interface ReasoningGap {
|
|
74
|
+
target: ReasoningTarget;
|
|
75
|
+
modelId: string;
|
|
76
|
+
aliases: string[];
|
|
77
|
+
catalogModelId: string;
|
|
78
|
+
reason: string;
|
|
79
|
+
}
|
|
80
|
+
export interface ReasoningDirectivesDocument {
|
|
81
|
+
schema: "x12i.ai-profiles.reasoning-directives";
|
|
82
|
+
version: string;
|
|
83
|
+
verifiedAt: string;
|
|
84
|
+
profiles: Record<string, ReasoningProfile>;
|
|
85
|
+
assignments: ReasoningAssignment[];
|
|
86
|
+
gaps: ReasoningGap[];
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/reasoning/types.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;AAE5E,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAC;AAElE,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AAElE,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,WAAW,yBAAyB;IACxC;;;;OAIG;IACH,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,wFAAwF;IACxF,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B;;;OAGG;IACH,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,wFAAwF;IACxF,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC;;;;OAIG;IACH,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,kFAAkF;IAClF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,yBAAyB,CAAC;IACpC,KAAK,CAAC,EAAE;QACN;;;WAGG;QACH,mBAAmB,EAAE,MAAM,EAAE,CAAC;KAC/B,CAAC;CACH;AAED,eAAO,MAAM,iBAAiB,EAAE,SAAS,eAAe,EAMvD,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,SAAS,eAAe,EAIvD,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,yBAMtC,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,mBAAmB,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,eAAe,CAAC;IACxB,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,uCAAuC,CAAC;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC3C,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,IAAI,EAAE,YAAY,EAAE,CAAC;CACtB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export const REASONING_EFFORTS = [
|
|
2
|
+
"minimal",
|
|
3
|
+
"low",
|
|
4
|
+
"medium",
|
|
5
|
+
"high",
|
|
6
|
+
"max",
|
|
7
|
+
];
|
|
8
|
+
export const REASONING_TARGETS = [
|
|
9
|
+
"openrouter",
|
|
10
|
+
"bedrock",
|
|
11
|
+
"openai",
|
|
12
|
+
];
|
|
13
|
+
export const EMPTY_REASONING_RESPONSE = {
|
|
14
|
+
reasoningTextPaths: [],
|
|
15
|
+
streamReasoningKeys: [],
|
|
16
|
+
streamReasoningPaths: [],
|
|
17
|
+
stripFromHistoryPaths: [],
|
|
18
|
+
stripThinkTags: false,
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/reasoning/types.ts"],"names":[],"mappings":"AAuDA,MAAM,CAAC,MAAM,iBAAiB,GAA+B;IAC3D,SAAS;IACT,KAAK;IACL,QAAQ;IACR,MAAM;IACN,KAAK;CACN,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAA+B;IAC3D,YAAY;IACZ,SAAS;IACT,QAAQ;CACT,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAA8B;IACjE,kBAAkB,EAAE,EAAE;IACtB,mBAAmB,EAAE,EAAE;IACvB,oBAAoB,EAAE,EAAE;IACxB,qBAAqB,EAAE,EAAE;IACzB,cAAc,EAAE,KAAK;CACtB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type ReasoningDirectivesDocument } from "./types.js";
|
|
2
|
+
export interface ReasoningValidationIssue {
|
|
3
|
+
code: "REASONING_MAPPING_INVALID";
|
|
4
|
+
message: string;
|
|
5
|
+
path: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function validateReasoningDirectives(document: ReasoningDirectivesDocument, catalogModelIds: ReadonlySet<string>): ReasoningValidationIssue[];
|
|
8
|
+
export declare function assertReasoningDirectives(document: ReasoningDirectivesDocument, catalogModelIds: ReadonlySet<string>): void;
|
|
9
|
+
//# sourceMappingURL=validateReasoningDirectives.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateReasoningDirectives.d.ts","sourceRoot":"","sources":["../../src/reasoning/validateReasoningDirectives.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,2BAA2B,EAEjC,MAAM,YAAY,CAAC;AAKpB,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,2BAA2B,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AA4JD,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,2BAA2B,EACrC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,GACnC,wBAAwB,EAAE,CA4K5B;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,2BAA2B,EACrC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,GACnC,IAAI,CAMN"}
|
|
@@ -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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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
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
|
+
/**
|
|
5
|
+
* Translate one provider-neutral reasoning effort into a directive for the
|
|
6
|
+
* selected target and model. Reads bundled data only.
|
|
7
|
+
*/
|
|
8
|
+
export declare function resolveReasoning(input: ResolveReasoningInput): ReasoningDirective;
|
|
9
|
+
//# sourceMappingURL=resolveReasoning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|