@x12i/ai-profiles 4.4.0 → 4.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +1086 -1082
  3. package/dist/browser.d.ts +10 -0
  4. package/dist/browser.d.ts.map +1 -0
  5. package/dist/browser.js +22 -0
  6. package/dist/browser.js.map +1 -0
  7. package/dist/data/models-catalog.json +17393 -17393
  8. package/dist/data/models-profiles.bak.json +2336 -2336
  9. package/dist/data/models-profiles.json +10370 -8746
  10. package/dist/data/models-profiles.schema.json +240 -240
  11. package/dist/data/models-registry.json +11192 -10728
  12. package/dist/index.d.ts +1 -1
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +1 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/inferModelFamily.d.ts +2 -0
  17. package/dist/inferModelFamily.d.ts.map +1 -1
  18. package/dist/inferModelFamily.js +32 -1
  19. package/dist/inferModelFamily.js.map +1 -1
  20. package/package.json +90 -85
  21. package/dist/data/openrouter-models-catalog.json +0 -857
  22. package/dist/data/profiles-shortcuts.json +0 -295
  23. package/dist/isKnownProfileInput.d.ts +0 -9
  24. package/dist/isKnownProfileInput.d.ts.map +0 -1
  25. package/dist/isKnownProfileInput.js +0 -14
  26. package/dist/isKnownProfileInput.js.map +0 -1
  27. package/dist/isKnownProfileOrShortcut.d.ts +0 -6
  28. package/dist/isKnownProfileOrShortcut.d.ts.map +0 -1
  29. package/dist/isKnownProfileOrShortcut.js +0 -11
  30. package/dist/isKnownProfileOrShortcut.js.map +0 -1
  31. package/dist/legacyGraphEngineAliasMap.d.ts +0 -13
  32. package/dist/legacyGraphEngineAliasMap.d.ts.map +0 -1
  33. package/dist/legacyGraphEngineAliasMap.js +0 -16
  34. package/dist/legacyGraphEngineAliasMap.js.map +0 -1
  35. package/dist/listAIShortcuts.d.ts +0 -4
  36. package/dist/listAIShortcuts.d.ts.map +0 -1
  37. package/dist/listAIShortcuts.js +0 -12
  38. package/dist/listAIShortcuts.js.map +0 -1
  39. package/dist/profileDiscoveryMatch.d.ts +0 -15
  40. package/dist/profileDiscoveryMatch.d.ts.map +0 -1
  41. package/dist/profileDiscoveryMatch.js +0 -18
  42. package/dist/profileDiscoveryMatch.js.map +0 -1
  43. package/dist/profileInputMatch.d.ts +0 -20
  44. package/dist/profileInputMatch.d.ts.map +0 -1
  45. package/dist/profileInputMatch.js +0 -30
  46. package/dist/profileInputMatch.js.map +0 -1
  47. package/dist/profileModelFallback.d.ts +0 -13
  48. package/dist/profileModelFallback.d.ts.map +0 -1
  49. package/dist/profileModelFallback.js +0 -180
  50. package/dist/profileModelFallback.js.map +0 -1
@@ -1,180 +0,0 @@
1
- import { DebugLogAbstract } from "@x12i/logxer";
2
- import { buildModelInvocation } from "./modelIdentity.js";
3
- import { normalizeKey } from "./normalizeKey.js";
4
- import { resolveChoiceInvocation } from "./resolveCatalogListing.js";
5
- import { resolveModelIdentity } from "./resolveModelIdentity.js";
6
- const HIGH_CONFIDENCE_SCORE = 0.72;
7
- const AMBIGUOUS_SCORE_GAP = 0.12;
8
- function canonicalIdentifier(value) {
9
- return normalizeKey(value).replace(/^x-ai\//, "xai/");
10
- }
11
- function compactIdentifier(value) {
12
- return canonicalIdentifier(value).replace(/[^a-z0-9]/g, "");
13
- }
14
- function tokenize(value) {
15
- return canonicalIdentifier(value)
16
- .split(/[^a-z0-9]+/g)
17
- .filter(Boolean);
18
- }
19
- function uniqueValues(values) {
20
- return [...new Set(values.filter((value) => Boolean(value)))];
21
- }
22
- function choiceIdentities(choice, catalog) {
23
- const invocation = (catalog ? resolveChoiceInvocation(choice, catalog) : undefined) ??
24
- buildModelInvocation(choice.provider, choice.modelId);
25
- return uniqueValues([
26
- choice.modelId,
27
- `${choice.provider}/${choice.modelId}`,
28
- invocation.direct.modelId,
29
- `${invocation.direct.provider}/${invocation.direct.modelId}`,
30
- invocation.openrouter?.modelId,
31
- choice.displayName,
32
- ]);
33
- }
34
- function buildCandidates(registry, catalog) {
35
- const candidates = [];
36
- for (const [profileKey, profile] of Object.entries(registry.profiles)) {
37
- for (const [choiceKey, choice] of Object.entries(profile.choices)) {
38
- candidates.push({
39
- profileKey,
40
- choiceKey,
41
- choice,
42
- identities: choiceIdentities(choice, catalog),
43
- });
44
- }
45
- }
46
- return candidates;
47
- }
48
- function findExactCandidate(candidates, inputs) {
49
- for (const input of inputs) {
50
- const normalizedInput = canonicalIdentifier(input);
51
- const compactInput = compactIdentifier(input);
52
- for (const candidate of candidates) {
53
- for (const identity of candidate.identities) {
54
- if (canonicalIdentifier(identity) === normalizedInput ||
55
- compactIdentifier(identity) === compactInput) {
56
- return {
57
- profileKey: candidate.profileKey,
58
- choiceKey: candidate.choiceKey,
59
- confidence: "exact",
60
- score: 1,
61
- matchedBy: identity,
62
- };
63
- }
64
- }
65
- }
66
- }
67
- return undefined;
68
- }
69
- function slashSearchParts(input) {
70
- const parts = input
71
- .split("/")
72
- .map((part) => part.trim())
73
- .filter(Boolean);
74
- return uniqueValues([input, ...parts]).sort((a, b) => b.length - a.length);
75
- }
76
- function scoreIdentity(input, identity) {
77
- const inputCompact = compactIdentifier(input);
78
- const identityCompact = compactIdentifier(identity);
79
- if (!inputCompact || !identityCompact) {
80
- return { score: 0, matchedBy: identity };
81
- }
82
- if (inputCompact === identityCompact) {
83
- return { score: 1, matchedBy: identity };
84
- }
85
- let substringScore = 0;
86
- if (inputCompact.includes(identityCompact)) {
87
- substringScore = Math.min(0.9, identityCompact.length / inputCompact.length);
88
- }
89
- else if (identityCompact.includes(inputCompact)) {
90
- substringScore = Math.min(0.82, inputCompact.length / identityCompact.length);
91
- }
92
- const inputTokens = new Set(tokenize(input));
93
- const identityTokens = new Set(tokenize(identity));
94
- const sharedTokens = [...inputTokens].filter((token) => identityTokens.has(token));
95
- const inputCoverage = inputTokens.size > 0 ? sharedTokens.length / inputTokens.size : 0;
96
- const identityCoverage = identityTokens.size > 0 ? sharedTokens.length / identityTokens.size : 0;
97
- const tokenScore = inputCoverage * 0.55 + identityCoverage * 0.35;
98
- return {
99
- score: Math.max(substringScore, tokenScore),
100
- matchedBy: identity,
101
- };
102
- }
103
- function scoreCandidate(input, candidate) {
104
- const parts = slashSearchParts(input);
105
- let best = { score: 0, matchedBy: candidate.identities[0] ?? candidate.choice.modelId };
106
- for (const part of parts) {
107
- for (const identity of candidate.identities) {
108
- const scored = scoreIdentity(part, identity);
109
- if (scored.score > best.score) {
110
- best = scored;
111
- }
112
- }
113
- }
114
- const providerHint = input.includes("/") ? canonicalIdentifier(input.split("/")[0]) : "";
115
- const providerBonus = providerHint && providerHint === canonicalIdentifier(candidate.choice.provider) ? 0.12 : 0;
116
- return {
117
- ...candidate,
118
- score: Math.min(1, best.score + providerBonus),
119
- matchedBy: best.matchedBy,
120
- };
121
- }
122
- function isModelLikeInput(input) {
123
- if (input.includes("/")) {
124
- return true;
125
- }
126
- const identity = resolveModelIdentity(input);
127
- return identity !== null;
128
- }
129
- function modelIdentityInputs(input) {
130
- const identity = resolveModelIdentity(input);
131
- if (!identity) {
132
- return [input];
133
- }
134
- return uniqueValues([input, identity.modelId, `${identity.provider}/${identity.modelId}`]);
135
- }
136
- export function resolveProfileFromModelInput(registry, input, catalog) {
137
- if (!isModelLikeInput(input)) {
138
- return undefined;
139
- }
140
- const candidates = buildCandidates(registry, catalog);
141
- const exact = findExactCandidate(candidates, modelIdentityInputs(input));
142
- if (exact) {
143
- return exact;
144
- }
145
- const [best, runnerUp] = candidates
146
- .map((candidate) => scoreCandidate(input, candidate))
147
- .sort((a, b) => b.score - a.score);
148
- if (!best) {
149
- return undefined;
150
- }
151
- const ambiguous = runnerUp !== undefined &&
152
- runnerUp.profileKey !== best.profileKey &&
153
- best.score - runnerUp.score < AMBIGUOUS_SCORE_GAP;
154
- const confidence = best.score >= HIGH_CONFIDENCE_SCORE && !ambiguous ? "high" : "low";
155
- const warning = confidence === "low"
156
- ? `Model-like input '${input}' did not match a known profile alias exactly; using best-effort profile '${best.profileKey}' choice '${best.choiceKey}' from '${best.matchedBy}'.`
157
- : undefined;
158
- return {
159
- profileKey: best.profileKey,
160
- choiceKey: best.choiceKey,
161
- confidence,
162
- score: Number(best.score.toFixed(3)),
163
- matchedBy: best.matchedBy,
164
- ...(warning ? { warning } : {}),
165
- };
166
- }
167
- export function modelFallbackLogMeta(input, match) {
168
- return {
169
- debugKind: match.confidence === "low"
170
- ? DebugLogAbstract.ANOMALY
171
- : DebugLogAbstract.EVENT,
172
- input,
173
- profile: match.profileKey,
174
- choice: match.choiceKey,
175
- confidence: match.confidence,
176
- score: match.score,
177
- matchedBy: match.matchedBy,
178
- };
179
- }
180
- //# sourceMappingURL=profileModelFallback.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"profileModelFallback.js","sourceRoot":"","sources":["../src/profileModelFallback.ts"],"names":[],"mappings":"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"}