@x12i/ai-profiles 4.1.0 → 4.2.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.
Files changed (53) hide show
  1. package/README.md +35 -4
  2. package/dist/data/models-catalog.json +2183 -264
  3. package/dist/data/models-profiles.json +57 -20
  4. package/dist/data/models-registry.json +1 -1
  5. package/dist/deriveModelTags.d.ts +18 -0
  6. package/dist/deriveModelTags.d.ts.map +1 -0
  7. package/dist/deriveModelTags.js +148 -0
  8. package/dist/deriveModelTags.js.map +1 -0
  9. package/dist/index.d.ts +12 -3
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +6 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/listAICatalogModels.d.ts +30 -0
  14. package/dist/listAICatalogModels.d.ts.map +1 -0
  15. package/dist/listAICatalogModels.js +157 -0
  16. package/dist/listAICatalogModels.js.map +1 -0
  17. package/dist/listAIProfiles.d.ts +2 -4
  18. package/dist/listAIProfiles.d.ts.map +1 -1
  19. package/dist/listAIProfiles.js +13 -10
  20. package/dist/listAIProfiles.js.map +1 -1
  21. package/dist/listUsedAIProfileTags.d.ts +13 -0
  22. package/dist/listUsedAIProfileTags.d.ts.map +1 -0
  23. package/dist/listUsedAIProfileTags.js +52 -0
  24. package/dist/listUsedAIProfileTags.js.map +1 -0
  25. package/dist/modelsCatalog.d.ts.map +1 -1
  26. package/dist/modelsCatalog.js +5 -0
  27. package/dist/modelsCatalog.js.map +1 -1
  28. package/dist/profileDiscovery.d.ts +38 -6
  29. package/dist/profileDiscovery.d.ts.map +1 -1
  30. package/dist/profileDiscovery.js +78 -22
  31. package/dist/profileDiscovery.js.map +1 -1
  32. package/dist/profileTags.d.ts +43 -0
  33. package/dist/profileTags.d.ts.map +1 -0
  34. package/dist/profileTags.js +355 -0
  35. package/dist/profileTags.js.map +1 -0
  36. package/dist/resolveAIProfileByTags.d.ts +13 -3
  37. package/dist/resolveAIProfileByTags.d.ts.map +1 -1
  38. package/dist/resolveAIProfileByTags.js +26 -7
  39. package/dist/resolveAIProfileByTags.js.map +1 -1
  40. package/dist/resolveCatalogModelByTags.d.ts +39 -0
  41. package/dist/resolveCatalogModelByTags.d.ts.map +1 -0
  42. package/dist/resolveCatalogModelByTags.js +112 -0
  43. package/dist/resolveCatalogModelByTags.js.map +1 -0
  44. package/dist/types.d.ts +30 -4
  45. package/dist/types.d.ts.map +1 -1
  46. package/dist/validation/validateModelsCatalog.d.ts.map +1 -1
  47. package/dist/validation/validateModelsCatalog.js +11 -0
  48. package/dist/validation/validateModelsCatalog.js.map +1 -1
  49. package/dist/validation/validateModelsProfilesJson.d.ts +5 -1
  50. package/dist/validation/validateModelsProfilesJson.d.ts.map +1 -1
  51. package/dist/validation/validateModelsProfilesJson.js +10 -13
  52. package/dist/validation/validateModelsProfilesJson.js.map +1 -1
  53. package/package.json +1 -1
@@ -0,0 +1,157 @@
1
+ import { loadModelsCatalogWithWarnings } from "./loader/loadModelsCatalog.js";
2
+ import { loadAIProfilesRegistryWithWarnings } from "./loader/loadAIProfilesRegistry.js";
3
+ import { profileIncludedInTagPool, scoreTagOverlap, } from "./profileDiscovery.js";
4
+ import { resolveAIProfileTagTokens } from "./profileTags.js";
5
+ import { formatProfileChoiceKey } from "./profileChoiceKey.js";
6
+ function modelMatchesLane(entry, lane) {
7
+ if (!lane || lane === "text") {
8
+ const output = entry.openrouter.modalities?.output ?? entry.modalities?.output;
9
+ if (output && !output.includes("text")) {
10
+ return false;
11
+ }
12
+ return true;
13
+ }
14
+ if (lane === "image") {
15
+ const input = entry.openrouter.modalities?.input ?? entry.modalities?.input ?? [];
16
+ return input.some((m) => /image/i.test(m));
17
+ }
18
+ return true;
19
+ }
20
+ function modelMatchesSearch(entry, search) {
21
+ const trimmed = search.trim().toLowerCase();
22
+ if (!trimmed)
23
+ return true;
24
+ const haystack = [
25
+ entry.openrouter.modelId,
26
+ entry.direct.modelId,
27
+ entry.displayName ?? "",
28
+ entry.family ?? "",
29
+ entry.modelFamily ?? "",
30
+ ...(entry.tags ?? []),
31
+ ]
32
+ .join(" ")
33
+ .toLowerCase();
34
+ return haystack.includes(trimmed);
35
+ }
36
+ function modelMatchesTags(entry, tags, mode) {
37
+ if (tags.length === 0)
38
+ return true;
39
+ const { matchedTags, score } = scoreTagOverlap(entry.tags, tags);
40
+ if (mode === "all") {
41
+ return matchedTags.length === tags.length;
42
+ }
43
+ return score > 0;
44
+ }
45
+ function buildProfileChoiceIndex(profiles) {
46
+ const index = new Map();
47
+ const add = (key, profileChoice) => {
48
+ const k = key.trim().toLowerCase();
49
+ if (!k)
50
+ return;
51
+ const list = index.get(k) ?? [];
52
+ if (!list.includes(profileChoice)) {
53
+ list.push(profileChoice);
54
+ }
55
+ index.set(k, list);
56
+ };
57
+ for (const [profileKey, profile] of Object.entries(profiles)) {
58
+ if (!profileIncludedInTagPool(profile, { includeDiscovery: false })) {
59
+ continue;
60
+ }
61
+ for (const [choiceKey, choice] of Object.entries(profile.choices ?? {})) {
62
+ const composite = formatProfileChoiceKey(profileKey, choiceKey);
63
+ add(`${choice.provider}/${choice.modelId}`, composite);
64
+ add(choice.modelId, composite);
65
+ }
66
+ }
67
+ return index;
68
+ }
69
+ function profileChoicesForEntry(entry, index) {
70
+ const keys = [
71
+ entry.openrouter.modelId,
72
+ entry.openrouter.canonicalSlug,
73
+ `${entry.direct.provider}/${entry.direct.modelId}`,
74
+ entry.direct.modelId,
75
+ ].filter((k) => typeof k === "string" && k.length > 0);
76
+ const out = [];
77
+ for (const key of keys) {
78
+ for (const hit of index.get(key.toLowerCase()) ?? []) {
79
+ if (!out.includes(hit))
80
+ out.push(hit);
81
+ }
82
+ }
83
+ return out.sort();
84
+ }
85
+ /**
86
+ * List catalog models, optionally filtered/ranked by tags.
87
+ * Empty match → `[]` (does not throw).
88
+ */
89
+ export async function listAICatalogModels(options = {}) {
90
+ const [{ catalog }, { registry }] = await Promise.all([
91
+ loadModelsCatalogWithWarnings({
92
+ source: options.source,
93
+ refresh: options.refresh,
94
+ }),
95
+ loadAIProfilesRegistryWithWarnings({
96
+ source: options.source,
97
+ refresh: options.refresh,
98
+ }),
99
+ ]);
100
+ const requestedTags = resolveAIProfileTagTokens((options.tags ?? []).map(String));
101
+ const tagMatch = options.tagMatch ?? "any";
102
+ const choiceIndex = buildProfileChoiceIndex(registry.profiles);
103
+ const matched = [];
104
+ for (const entry of catalog.models) {
105
+ if (!modelMatchesLane(entry, options.catalogLane)) {
106
+ continue;
107
+ }
108
+ if (options.search && !modelMatchesSearch(entry, options.search)) {
109
+ continue;
110
+ }
111
+ if (!modelMatchesTags(entry, requestedTags, tagMatch)) {
112
+ continue;
113
+ }
114
+ const scored = requestedTags.length > 0
115
+ ? scoreTagOverlap(entry.tags, requestedTags)
116
+ : { score: 0, matchedTags: [], coverageRatio: 0 };
117
+ matched.push({
118
+ openRouterModelId: entry.openrouter.modelId,
119
+ provider: entry.direct.provider,
120
+ modelId: entry.direct.modelId,
121
+ displayName: entry.displayName,
122
+ tags: entry.tags ?? [],
123
+ modelFamily: entry.modelFamily,
124
+ status: entry.status ?? entry.openrouter.status,
125
+ profileChoices: profileChoicesForEntry(entry, choiceIndex),
126
+ ...(requestedTags.length > 0
127
+ ? { score: scored.score, matchedTags: scored.matchedTags }
128
+ : {}),
129
+ });
130
+ }
131
+ if (requestedTags.length > 0) {
132
+ matched.sort((a, b) => {
133
+ const aScore = a.score ?? 0;
134
+ const bScore = b.score ?? 0;
135
+ if (bScore !== aScore)
136
+ return bScore - aScore;
137
+ const aCov = requestedTags.length > 0
138
+ ? (a.matchedTags?.length ?? 0) / requestedTags.length
139
+ : 0;
140
+ const bCov = requestedTags.length > 0
141
+ ? (b.matchedTags?.length ?? 0) / requestedTags.length
142
+ : 0;
143
+ if (bCov !== aCov)
144
+ return bCov - aCov;
145
+ const aLen = a.tags.length;
146
+ const bLen = b.tags.length;
147
+ if (aLen !== bLen)
148
+ return aLen - bLen;
149
+ return a.openRouterModelId.localeCompare(b.openRouterModelId);
150
+ });
151
+ }
152
+ else {
153
+ matched.sort((a, b) => a.openRouterModelId.localeCompare(b.openRouterModelId));
154
+ }
155
+ return matched;
156
+ }
157
+ //# sourceMappingURL=listAICatalogModels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listAICatalogModels.js","sourceRoot":"","sources":["../src/listAICatalogModels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,kCAAkC,EAAE,MAAM,oCAAoC,CAAC;AACxF,OAAO,EACL,wBAAwB,EACxB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAmC/D,SAAS,gBAAgB,CACvB,KAAwB,EACxB,IAAoC;IAEpC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,IAAI,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC;QAC/E,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,IAAI,KAAK,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC;QAClF,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAwB,EAAE,MAAc;IAClE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5C,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,QAAQ,GAAG;QACf,KAAK,CAAC,UAAU,CAAC,OAAO;QACxB,KAAK,CAAC,MAAM,CAAC,OAAO;QACpB,KAAK,CAAC,WAAW,IAAI,EAAE;QACvB,KAAK,CAAC,MAAM,IAAI,EAAE;QAClB,KAAK,CAAC,WAAW,IAAI,EAAE;QACvB,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;KACtB;SACE,IAAI,CAAC,GAAG,CAAC;SACT,WAAW,EAAE,CAAC;IACjB,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAwB,EACxB,IAAoB,EACpB,IAAyB;IAEzB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjE,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,OAAO,WAAW,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC;IAC5C,CAAC;IACD,OAAO,KAAK,GAAG,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,uBAAuB,CAC9B,QAAkE;IAElE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC1C,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,aAAqB,EAAE,EAAE;QACjD,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,CAAC,CAAC;YAAE,OAAO;QACf,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3B,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,KAAK,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7D,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YACpE,SAAS;QACX,CAAC;QACD,KAAK,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;YACxE,MAAM,SAAS,GAAG,sBAAsB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YAChE,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;YACvD,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,sBAAsB,CAC7B,KAAwB,EACxB,KAA4B;IAE5B,MAAM,IAAI,GAAG;QACX,KAAK,CAAC,UAAU,CAAC,OAAO;QACxB,KAAK,CAAC,UAAU,CAAC,aAAa;QAC9B,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE;QAClD,KAAK,CAAC,MAAM,CAAC,OAAO;KACrB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEpE,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YACrD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAAsC,EAAE;IAExC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACpD,6BAA6B,CAAC;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC;QACF,kCAAkC,CAAC;YACjC,MAAM,EAAE,OAAO,CAAC,MAAuC;YACvD,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC;KACH,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,yBAAyB,CAC7C,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CACjC,CAAC;IACF,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;IAC3C,MAAM,WAAW,GAAG,uBAAuB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE/D,MAAM,OAAO,GAA0B,EAAE,CAAC;IAE1C,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAClD,SAAS;QACX,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACjE,SAAS;QACX,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,CAAC;YACtD,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GACV,aAAa,CAAC,MAAM,GAAG,CAAC;YACtB,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC;YAC5C,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,EAAoB,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;QAExE,OAAO,CAAC,IAAI,CAAC;YACX,iBAAiB,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO;YAC3C,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ;YAC/B,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;YAC7B,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;YACtB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM;YAC/C,cAAc,EAAE,sBAAsB,CAAC,KAAK,EAAE,WAAW,CAAC;YAC1D,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;gBAC1B,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE;gBAC1D,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;IACL,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACpB,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YAC5B,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YAC5B,IAAI,MAAM,KAAK,MAAM;gBAAE,OAAO,MAAM,GAAG,MAAM,CAAC;YAC9C,MAAM,IAAI,GACR,aAAa,CAAC,MAAM,GAAG,CAAC;gBACtB,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,aAAa,CAAC,MAAM;gBACrD,CAAC,CAAC,CAAC,CAAC;YACR,MAAM,IAAI,GACR,aAAa,CAAC,MAAM,GAAG,CAAC;gBACtB,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,aAAa,CAAC,MAAM;gBACrD,CAAC,CAAC,CAAC,CAAC;YACR,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,IAAI,GAAG,IAAI,CAAC;YACtC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;YAC3B,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;YAC3B,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,IAAI,GAAG,IAAI,CAAC;YACtC,OAAO,CAAC,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACpB,CAAC,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,iBAAiB,CAAC,CACvD,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1,9 +1,7 @@
1
1
  import type { AIProfileSummary, ListAIProfilesOptions } from "./types.js";
2
2
  /**
3
- * List profile capability contracts (primary keys, choices, defaults).
4
- * Use for pickers and discovery; call {@link resolveAIProfile} to get model + runtime details.
5
- *
6
- * @see README.md — “Why AI profiles”
3
+ * List profiles. Pass `tags` (+ optional `tagMatch`) to **filter** by tag.
4
+ * Call {@link resolveAIProfile} on a returned `profile/choice` to materialize a model.
7
5
  */
8
6
  export declare function listAIProfiles(options?: ListAIProfilesOptions): Promise<AIProfileSummary[]>;
9
7
  //# sourceMappingURL=listAIProfiles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"listAIProfiles.d.ts","sourceRoot":"","sources":["../src/listAIProfiles.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE1E;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAsG7B"}
1
+ {"version":3,"file":"listAIProfiles.d.ts","sourceRoot":"","sources":["../src/listAIProfiles.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE1E;;;GAGG;AACH,wBAAsB,cAAc,CAClC,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA4G7B"}
@@ -1,13 +1,12 @@
1
1
  import { loadAIProfilesRegistryWithWarnings } from "./loader/loadAIProfilesRegistry.js";
2
2
  import { profileMatchesCatalogLane } from "./profileCatalogLane.js";
3
3
  import { profileMatchesDiscovery, scoreProfileTags, } from "./profileDiscovery.js";
4
+ import { resolveAIProfileTagTokens } from "./profileTags.js";
4
5
  import { loadModelsCatalogWithWarnings } from "./loader/loadModelsCatalog.js";
5
6
  import { pickProfileChoiceWithConstraints } from "./modalityPolicy.js";
6
7
  /**
7
- * List profile capability contracts (primary keys, choices, defaults).
8
- * Use for pickers and discovery; call {@link resolveAIProfile} to get model + runtime details.
9
- *
10
- * @see README.md — “Why AI profiles”
8
+ * List profiles. Pass `tags` (+ optional `tagMatch`) to **filter** by tag.
9
+ * Call {@link resolveAIProfile} on a returned `profile/choice` to materialize a model.
11
10
  */
12
11
  export async function listAIProfiles(options = {}) {
13
12
  const { registry } = await loadAIProfilesRegistryWithWarnings({
@@ -21,7 +20,7 @@ export async function listAIProfiles(options = {}) {
21
20
  refresh: options.refresh,
22
21
  })).catalog
23
22
  : undefined;
24
- const requestedTags = options.tags ?? [];
23
+ const requestedTags = resolveAIProfileTagTokens((options.tags ?? []).map(String));
25
24
  const filtered = Object.values(registry.profiles).filter((profile) => {
26
25
  if (!options.includeDeprecated && profile.status === "deprecated") {
27
26
  return false;
@@ -37,9 +36,10 @@ export async function listAIProfiles(options = {}) {
37
36
  return false;
38
37
  }
39
38
  if (!profileMatchesDiscovery(profile, {
40
- tags: options.tags,
39
+ tags: requestedTags.length > 0 ? requestedTags : undefined,
41
40
  tagMatch: options.tagMatch,
42
41
  search: options.search,
42
+ includeDiscovery: options.includeDiscovery,
43
43
  })) {
44
44
  return false;
45
45
  }
@@ -61,10 +61,13 @@ export async function listAIProfiles(options = {}) {
61
61
  });
62
62
  if (requestedTags.length > 0) {
63
63
  filtered.sort((a, b) => {
64
- const aScore = scoreProfileTags(a, requestedTags).score;
65
- const bScore = scoreProfileTags(b, requestedTags).score;
66
- if (bScore !== aScore) {
67
- return bScore - aScore;
64
+ const aResult = scoreProfileTags(a, requestedTags);
65
+ const bResult = scoreProfileTags(b, requestedTags);
66
+ if (bResult.score !== aResult.score) {
67
+ return bResult.score - aResult.score;
68
+ }
69
+ if (bResult.coverageRatio !== aResult.coverageRatio) {
70
+ return bResult.coverageRatio - aResult.coverageRatio;
68
71
  }
69
72
  const aLen = a.tags?.length ?? 0;
70
73
  const bLen = b.tags?.length ?? 0;
@@ -1 +1 @@
1
- {"version":3,"file":"listAIProfiles.js","sourceRoot":"","sources":["../src/listAIProfiles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"listAIProfiles.js","sourceRoot":"","sources":["../src/listAIProfiles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { AIProfileTagUsage, LoadRegistryOptions, ProfileCatalogLane } from "./types.js";
2
+ export interface ListUsedAIProfileTagsOptions extends LoadRegistryOptions {
3
+ /** Only count profiles in this catalog lane. */
4
+ catalogLane?: ProfileCatalogLane;
5
+ includeDeprecated?: boolean;
6
+ includeExperimental?: boolean;
7
+ }
8
+ /**
9
+ * Tags currently used by loaded profiles (what's available to filter on),
10
+ * with which profiles each tag hits. Full enum: {@link listAIProfileTags}.
11
+ */
12
+ export declare function listUsedAIProfileTags(options?: ListUsedAIProfileTagsOptions): Promise<AIProfileTagUsage[]>;
13
+ //# sourceMappingURL=listUsedAIProfileTags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listUsedAIProfileTags.d.ts","sourceRoot":"","sources":["../src/listUsedAIProfileTags.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,4BAA6B,SAAQ,mBAAmB;IACvE,gDAAgD;IAChD,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAkD9B"}
@@ -0,0 +1,52 @@
1
+ import { loadAIProfilesRegistryWithWarnings } from "./loader/loadAIProfilesRegistry.js";
2
+ import { getAIProfileTag } from "./profileTags.js";
3
+ import { collectProfileTags } from "./profileDiscovery.js";
4
+ import { profileMatchesCatalogLane } from "./profileCatalogLane.js";
5
+ /**
6
+ * Tags currently used by loaded profiles (what's available to filter on),
7
+ * with which profiles each tag hits. Full enum: {@link listAIProfileTags}.
8
+ */
9
+ export async function listUsedAIProfileTags(options = {}) {
10
+ const { registry } = await loadAIProfilesRegistryWithWarnings({
11
+ source: options.source,
12
+ refresh: options.refresh,
13
+ });
14
+ const usedByTag = new Map();
15
+ for (const [profileKey, profile] of Object.entries(registry.profiles)) {
16
+ if (!options.includeDeprecated && profile.status === "deprecated") {
17
+ continue;
18
+ }
19
+ if (!options.includeExperimental && profile.status === "experimental") {
20
+ continue;
21
+ }
22
+ if (options.catalogLane &&
23
+ !profileMatchesCatalogLane(profile, options.catalogLane)) {
24
+ continue;
25
+ }
26
+ for (const tag of profile.tags ?? []) {
27
+ const list = usedByTag.get(tag) ?? [];
28
+ list.push(profileKey);
29
+ usedByTag.set(tag, list);
30
+ }
31
+ }
32
+ const tags = usedByTag.size > 0
33
+ ? [...usedByTag.keys()].sort()
34
+ : collectProfileTags(registry.profiles);
35
+ return tags.map((tag) => {
36
+ const profiles = (usedByTag.get(tag) ?? []).sort();
37
+ const info = getAIProfileTag(tag);
38
+ return {
39
+ tag,
40
+ profiles,
41
+ count: profiles.length,
42
+ ...(info
43
+ ? {
44
+ label: info.label,
45
+ category: info.category,
46
+ description: info.description,
47
+ }
48
+ : {}),
49
+ };
50
+ });
51
+ }
52
+ //# sourceMappingURL=listUsedAIProfileTags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listUsedAIProfileTags.js","sourceRoot":"","sources":["../src/listUsedAIProfileTags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kCAAkC,EAAE,MAAM,oCAAoC,CAAC;AACxF,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAO3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AASpE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,UAAwC,EAAE;IAE1C,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,kCAAkC,CAAC;QAC5D,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,GAAG,EAA0B,CAAC;IAEpD,KAAK,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtE,IAAI,CAAC,OAAO,CAAC,iBAAiB,IAAI,OAAO,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YAClE,SAAS;QACX,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,mBAAmB,IAAI,OAAO,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;YACtE,SAAS;QACX,CAAC;QACD,IACE,OAAO,CAAC,WAAW;YACnB,CAAC,yBAAyB,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,EACxD,CAAC;YACD,SAAS;QACX,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACtB,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GACR,SAAS,CAAC,IAAI,GAAG,CAAC;QAChB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QAC9B,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE5C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACtB,MAAM,QAAQ,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO;YACL,GAAG;YACH,QAAQ;YACR,KAAK,EAAE,QAAQ,CAAC,MAAM;YACtB,GAAG,CAAC,IAAI;gBACN,CAAC,CAAC;oBACE,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,WAAW,EAAE,IAAI,CAAC,WAAW;iBAC9B;gBACH,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"modelsCatalog.d.ts","sourceRoot":"","sources":["../src/modelsCatalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,kBAAkB,EAIlB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAe5D;AAwBD,kFAAkF;AAClF,eAAO,MAAM,yBAAyB,wDAA4B,CAAC;AAEnE,4FAA4F;AAC5F,eAAO,MAAM,oCAAoC,gEACc,CAAC;AAEhE,eAAO,MAAM,uBAAuB,wBAAwB,CAAC;AAE7D,eAAO,MAAM,qBAAqB,EAAG,iCAA0C,CAAC;AAgBhF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAMF,yGAAyG;AACzG,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,GACd,kBAAkB,CAgCpB;AAiID,gFAAgF;AAChF,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,CAmDtE;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,iBAAiB,GACzB,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CA2CjC;AAED,sDAAsD;AACtD,eAAO,MAAM,2BAA2B,gCAA0B,CAAC"}
1
+ {"version":3,"file":"modelsCatalog.d.ts","sourceRoot":"","sources":["../src/modelsCatalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,kBAAkB,EAIlB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAe5D;AAwBD,kFAAkF;AAClF,eAAO,MAAM,yBAAyB,wDAA4B,CAAC;AAEnE,4FAA4F;AAC5F,eAAO,MAAM,oCAAoC,gEACc,CAAC;AAEhE,eAAO,MAAM,uBAAuB,wBAAwB,CAAC;AAE7D,eAAO,MAAM,qBAAqB,EAAG,iCAA0C,CAAC;AAgBhF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAMF,yGAAyG;AACzG,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,GACd,kBAAkB,CAgCpB;AAwID,gFAAgF;AAChF,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,CAmDtE;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,iBAAiB,GACzB,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CA2CjC;AAED,sDAAsD;AACtD,eAAO,MAAM,2BAA2B,gCAA0B,CAAC"}
@@ -111,6 +111,7 @@ function legacyEntryToCatalogModel(entry) {
111
111
  maxCompletionTokens: entry.maxCompletionTokens,
112
112
  knowledgeCutoff: entry.knowledgeCutoff,
113
113
  releasedAt: entry.releasedAt,
114
+ ...(Array.isArray(entry.tags) ? { tags: entry.tags } : {}),
114
115
  };
115
116
  }
116
117
  function upgradeCatalogEntry(raw) {
@@ -150,6 +151,9 @@ function upgradeCatalogEntry(raw) {
150
151
  if (!direct || direct.provider === "openrouter") {
151
152
  direct = parseDirectFromOpenRouterSlug(openrouter.modelId, raw.family);
152
153
  }
154
+ const tags = Array.isArray(raw.tags)
155
+ ? raw.tags
156
+ : undefined;
153
157
  return {
154
158
  direct,
155
159
  openrouter,
@@ -162,6 +166,7 @@ function upgradeCatalogEntry(raw) {
162
166
  maxCompletionTokens: raw.maxCompletionTokens,
163
167
  knowledgeCutoff: raw.knowledgeCutoff,
164
168
  releasedAt: raw.releasedAt,
169
+ ...(tags ? { tags } : {}),
165
170
  };
166
171
  }
167
172
  /** Normalize legacy OpenRouter-only catalog or pass through unified catalog. */
@@ -1 +1 @@
1
- {"version":3,"file":"modelsCatalog.js","sourceRoot":"","sources":["../src/modelsCatalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"modelsCatalog.js","sourceRoot":"","sources":["../src/modelsCatalog.ts"],"names":[],"mappings":"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"}
@@ -5,17 +5,37 @@ export interface ProfileTagScore {
5
5
  profile: AIProfileDefinition;
6
6
  score: number;
7
7
  matchedTags: AIProfileTag[];
8
+ coverageRatio: number;
8
9
  }
10
+ export interface TagScoreResult {
11
+ score: number;
12
+ matchedTags: AIProfileTag[];
13
+ /** Matched weight / total requested weight (0–1). */
14
+ coverageRatio: number;
15
+ }
16
+ /**
17
+ * Weighted overlap of requested tags against a candidate tag list.
18
+ * Weights: domain/task 3, capability 2, tier/vendor 1, `wf` 0.25.
19
+ */
20
+ export declare function scoreTagOverlap(candidateTags: readonly AIProfileTag[] | undefined, tags: readonly AIProfileTag[]): TagScoreResult;
9
21
  /**
10
- * Count of requested tags present on the profile (partial match OK).
22
+ * Weighted score of requested tags present on the profile.
11
23
  */
12
- export declare function scoreProfileTags(profile: AIProfileDefinition, tags: AIProfileTag[]): {
24
+ export declare function scoreProfileTags(profile: AIProfileDefinition, tags: AIProfileTag[]): TagScoreResult;
25
+ declare function compareTagScores(a: {
13
26
  score: number;
14
- matchedTags: AIProfileTag[];
15
- };
27
+ coverageRatio: number;
28
+ tagCount: number;
29
+ key: string;
30
+ }, b: {
31
+ score: number;
32
+ coverageRatio: number;
33
+ tagCount: number;
34
+ key: string;
35
+ }): number;
16
36
  /**
17
- * Rank profiles by tag overlap (highest score first).
18
- * Tie-break: fewer total profile tags (more specific), then profile key lexicographically.
37
+ * Rank profiles by weighted tag score (highest first).
38
+ * Tie-break: coverage ratio → fewer total tags → profile key lex.
19
39
  */
20
40
  export declare function rankProfilesByTags(profiles: Record<string, AIProfileDefinition>, tags: AIProfileTag[]): ProfileTagScore[];
21
41
  /**
@@ -31,13 +51,25 @@ export declare function profileMatchesTags(profile: AIProfileDefinition, tags: A
31
51
  * Free-text discovery across profile metadata, tags, and choice labels.
32
52
  */
33
53
  export declare function profileMatchesSearch(profile: AIProfileDefinition, search: string): boolean;
54
+ /** True for vendor-family / catalog discovery profiles. */
55
+ export declare function isDiscoveryProfile(profile: AIProfileDefinition): boolean;
56
+ /**
57
+ * Whether a profile belongs in the default tag list/resolve pool.
58
+ * Discovery/vendor profiles are excluded unless `includeDiscovery` or tags include `vnd`.
59
+ */
60
+ export declare function profileIncludedInTagPool(profile: AIProfileDefinition, options?: {
61
+ includeDiscovery?: boolean;
62
+ tags?: readonly AIProfileTag[];
63
+ }): boolean;
34
64
  export declare function profileMatchesDiscovery(profile: AIProfileDefinition, options: {
35
65
  tags?: AIProfileTag[];
36
66
  tagMatch?: ProfileTagMatchMode;
37
67
  search?: string;
68
+ includeDiscovery?: boolean;
38
69
  }): boolean;
39
70
  /** Collect every tag used across profiles (sorted). */
40
71
  export declare function collectProfileTags(profiles: Record<string, AIProfileDefinition>): AIProfileTag[];
41
72
  /** Stable signature for a profile tag set (sorted, comma-joined). */
42
73
  export declare function profileTagSetSignature(tags: AIProfileTag[]): string;
74
+ export { compareTagScores };
43
75
  //# sourceMappingURL=profileDiscovery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"profileDiscovery.d.ts","sourceRoot":"","sources":["../src/profileDiscovery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,mBAAmB,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,YAAY,EAAE,CAAC;CAC7B;AA+BD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,mBAAmB,EAC5B,IAAI,EAAE,YAAY,EAAE,GACnB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,YAAY,EAAE,CAAA;CAAE,CAQhD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAC7C,IAAI,EAAE,YAAY,EAAE,GACnB,eAAe,EAAE,CAuBnB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAC7C,IAAI,EAAE,YAAY,EAAE,GACnB,eAAe,GAAG,SAAS,CAE7B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,mBAAmB,EAC5B,IAAI,EAAE,YAAY,EAAE,EACpB,IAAI,GAAE,mBAA2B,GAChC,OAAO,CAWT;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,mBAAmB,EAC5B,MAAM,EAAE,MAAM,GACb,OAAO,CAqBT;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE;IACP,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAUT;AAED,uDAAuD;AACvD,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAC5C,YAAY,EAAE,CAQhB;AAED,qEAAqE;AACrE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,CAEnE"}
1
+ {"version":3,"file":"profileDiscovery.d.ts","sourceRoot":"","sources":["../src/profileDiscovery.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { normalizeKey } from "./normalizeKey.js";
2
+ import { getAIProfileTag, getAIProfileTagWeight } from "./profileTags.js";
2
3
  function tokenizeSearch(value) {
3
4
  return normalizeKey(value)
4
5
  .split(/[^a-z0-9]+/g)
@@ -13,12 +14,19 @@ function profileSearchHaystack(profile) {
13
14
  choice.modelId,
14
15
  choice.reason ?? "",
15
16
  ]);
17
+ const tagExpanded = (profile.tags ?? []).flatMap((tag) => {
18
+ const info = getAIProfileTag(tag);
19
+ if (!info) {
20
+ return [tag];
21
+ }
22
+ return [tag, info.label, info.description, ...(info.aliases ?? [])];
23
+ });
16
24
  return [
17
25
  profile.profile,
18
26
  profile.displayName,
19
27
  profile.description,
20
28
  profile.category,
21
- ...(profile.tags ?? []),
29
+ ...tagExpanded,
22
30
  ...(profile.intendedUseCases ?? []),
23
31
  ...choiceText,
24
32
  ]
@@ -26,39 +34,61 @@ function profileSearchHaystack(profile) {
26
34
  .join(" ");
27
35
  }
28
36
  /**
29
- * Count of requested tags present on the profile (partial match OK).
37
+ * Weighted overlap of requested tags against a candidate tag list.
38
+ * Weights: domain/task 3, capability 2, tier/vendor 1, `wf` 0.25.
30
39
  */
31
- export function scoreProfileTags(profile, tags) {
40
+ export function scoreTagOverlap(candidateTags, tags) {
32
41
  if (tags.length === 0) {
33
- return { score: 0, matchedTags: [] };
42
+ return { score: 0, matchedTags: [], coverageRatio: 0 };
43
+ }
44
+ const candidateSet = new Set(candidateTags ?? []);
45
+ const matchedTags = tags.filter((tag) => candidateSet.has(tag));
46
+ const score = matchedTags.reduce((sum, tag) => sum + getAIProfileTagWeight(tag), 0);
47
+ const requestWeight = tags.reduce((sum, tag) => sum + getAIProfileTagWeight(tag), 0);
48
+ const coverageRatio = requestWeight > 0 ? score / requestWeight : 0;
49
+ return { score, matchedTags, coverageRatio };
50
+ }
51
+ /**
52
+ * Weighted score of requested tags present on the profile.
53
+ */
54
+ export function scoreProfileTags(profile, tags) {
55
+ return scoreTagOverlap(profile.tags, tags);
56
+ }
57
+ function compareTagScores(a, b) {
58
+ if (b.score !== a.score) {
59
+ return b.score - a.score;
34
60
  }
35
- const profileTags = new Set(profile.tags ?? []);
36
- const matchedTags = tags.filter((tag) => profileTags.has(tag));
37
- return { score: matchedTags.length, matchedTags };
61
+ if (b.coverageRatio !== a.coverageRatio) {
62
+ return b.coverageRatio - a.coverageRatio;
63
+ }
64
+ if (a.tagCount !== b.tagCount) {
65
+ return a.tagCount - b.tagCount;
66
+ }
67
+ return a.key.localeCompare(b.key);
38
68
  }
39
69
  /**
40
- * Rank profiles by tag overlap (highest score first).
41
- * Tie-break: fewer total profile tags (more specific), then profile key lexicographically.
70
+ * Rank profiles by weighted tag score (highest first).
71
+ * Tie-break: coverage ratio → fewer total tags → profile key lex.
42
72
  */
43
73
  export function rankProfilesByTags(profiles, tags) {
44
74
  const ranked = [];
45
75
  for (const [profileKey, profile] of Object.entries(profiles)) {
46
- const { score, matchedTags } = scoreProfileTags(profile, tags);
76
+ const { score, matchedTags, coverageRatio } = scoreProfileTags(profile, tags);
47
77
  if (score > 0) {
48
- ranked.push({ profileKey, profile, score, matchedTags });
78
+ ranked.push({ profileKey, profile, score, matchedTags, coverageRatio });
49
79
  }
50
80
  }
51
- ranked.sort((a, b) => {
52
- if (b.score !== a.score) {
53
- return b.score - a.score;
54
- }
55
- const aLen = a.profile.tags?.length ?? 0;
56
- const bLen = b.profile.tags?.length ?? 0;
57
- if (aLen !== bLen) {
58
- return aLen - bLen;
59
- }
60
- return a.profileKey.localeCompare(b.profileKey);
61
- });
81
+ ranked.sort((a, b) => compareTagScores({
82
+ score: a.score,
83
+ coverageRatio: a.coverageRatio,
84
+ tagCount: a.profile.tags?.length ?? 0,
85
+ key: a.profileKey,
86
+ }, {
87
+ score: b.score,
88
+ coverageRatio: b.coverageRatio,
89
+ tagCount: b.profile.tags?.length ?? 0,
90
+ key: b.profileKey,
91
+ }));
62
92
  return ranked;
63
93
  }
64
94
  /**
@@ -102,7 +132,32 @@ export function profileMatchesSearch(profile, search) {
102
132
  }
103
133
  return tokens.every((token) => haystack.includes(token));
104
134
  }
135
+ /** True for vendor-family / catalog discovery profiles. */
136
+ export function isDiscoveryProfile(profile) {
137
+ return profile.vendorFamily === true || profile.category === "discovery";
138
+ }
139
+ /**
140
+ * Whether a profile belongs in the default tag list/resolve pool.
141
+ * Discovery/vendor profiles are excluded unless `includeDiscovery` or tags include `vnd`.
142
+ */
143
+ export function profileIncludedInTagPool(profile, options = {}) {
144
+ if (options.includeDiscovery) {
145
+ return true;
146
+ }
147
+ if (options.tags?.includes("vnd")) {
148
+ return true;
149
+ }
150
+ return !isDiscoveryProfile(profile);
151
+ }
105
152
  export function profileMatchesDiscovery(profile, options) {
153
+ // Discovery exclusion only applies to tag-filtered pools (not bare list/search).
154
+ if (options.tags?.length &&
155
+ !profileIncludedInTagPool(profile, {
156
+ includeDiscovery: options.includeDiscovery,
157
+ tags: options.tags,
158
+ })) {
159
+ return false;
160
+ }
106
161
  if (options.tags?.length && !profileMatchesTags(profile, options.tags, options.tagMatch)) {
107
162
  return false;
108
163
  }
@@ -125,4 +180,5 @@ export function collectProfileTags(profiles) {
125
180
  export function profileTagSetSignature(tags) {
126
181
  return [...tags].sort().join(",");
127
182
  }
183
+ export { compareTagScores };
128
184
  //# sourceMappingURL=profileDiscovery.js.map