@x12i/ai-profiles 4.3.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 (156) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +1086 -1075
  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/buildCatalogFromOpenRouterApi.d.ts +3 -1
  8. package/dist/buildCatalogFromOpenRouterApi.d.ts.map +1 -1
  9. package/dist/buildCatalogFromOpenRouterApi.js +11 -69
  10. package/dist/buildCatalogFromOpenRouterApi.js.map +1 -1
  11. package/dist/constants.d.ts +5 -3
  12. package/dist/constants.d.ts.map +1 -1
  13. package/dist/constants.js +15 -2
  14. package/dist/constants.js.map +1 -1
  15. package/dist/data/models-catalog.json +17393 -14412
  16. package/dist/data/models-profiles.bak.json +2336 -2336
  17. package/dist/data/models-profiles.json +10370 -6170
  18. package/dist/data/models-profiles.schema.json +240 -240
  19. package/dist/data/models-registry.json +11192 -8906
  20. package/dist/ensureRemoteOpenRouterBackend.d.ts +4 -0
  21. package/dist/ensureRemoteOpenRouterBackend.d.ts.map +1 -0
  22. package/dist/ensureRemoteOpenRouterBackend.js +33 -0
  23. package/dist/ensureRemoteOpenRouterBackend.js.map +1 -0
  24. package/dist/evidence/adapterTypes.d.ts +14 -0
  25. package/dist/evidence/adapterTypes.d.ts.map +1 -0
  26. package/dist/evidence/adapterTypes.js +2 -0
  27. package/dist/evidence/adapterTypes.js.map +1 -0
  28. package/dist/evidence/adapters.d.ts +28 -0
  29. package/dist/evidence/adapters.d.ts.map +1 -0
  30. package/dist/evidence/adapters.js +102 -0
  31. package/dist/evidence/adapters.js.map +1 -0
  32. package/dist/evidence/index.d.ts +13 -0
  33. package/dist/evidence/index.d.ts.map +1 -0
  34. package/dist/evidence/index.js +9 -0
  35. package/dist/evidence/index.js.map +1 -0
  36. package/dist/evidence/local/probes.d.ts +58 -0
  37. package/dist/evidence/local/probes.d.ts.map +1 -0
  38. package/dist/evidence/local/probes.js +210 -0
  39. package/dist/evidence/local/probes.js.map +1 -0
  40. package/dist/evidence/openRouter.d.ts +11 -0
  41. package/dist/evidence/openRouter.d.ts.map +1 -0
  42. package/dist/evidence/openRouter.js +80 -0
  43. package/dist/evidence/openRouter.js.map +1 -0
  44. package/dist/evidence/patch.d.ts +8 -0
  45. package/dist/evidence/patch.d.ts.map +1 -0
  46. package/dist/evidence/patch.js +50 -0
  47. package/dist/evidence/patch.js.map +1 -0
  48. package/dist/evidence/recommend.d.ts +20 -0
  49. package/dist/evidence/recommend.d.ts.map +1 -0
  50. package/dist/evidence/recommend.js +142 -0
  51. package/dist/evidence/recommend.js.map +1 -0
  52. package/dist/evidence/refreshModelEvidence.d.ts +25 -0
  53. package/dist/evidence/refreshModelEvidence.d.ts.map +1 -0
  54. package/dist/evidence/refreshModelEvidence.js +104 -0
  55. package/dist/evidence/refreshModelEvidence.js.map +1 -0
  56. package/dist/evidence/scoreModelForTask.d.ts +13 -0
  57. package/dist/evidence/scoreModelForTask.d.ts.map +1 -0
  58. package/dist/evidence/scoreModelForTask.js +137 -0
  59. package/dist/evidence/scoreModelForTask.js.map +1 -0
  60. package/dist/evidence/scoringConfig.d.ts +11 -0
  61. package/dist/evidence/scoringConfig.d.ts.map +1 -0
  62. package/dist/evidence/scoringConfig.js +259 -0
  63. package/dist/evidence/scoringConfig.js.map +1 -0
  64. package/dist/evidence/types.d.ts +218 -0
  65. package/dist/evidence/types.d.ts.map +1 -0
  66. package/dist/evidence/types.js +2 -0
  67. package/dist/evidence/types.js.map +1 -0
  68. package/dist/finalProfileModelMappingPatch.d.ts +31 -0
  69. package/dist/finalProfileModelMappingPatch.d.ts.map +1 -0
  70. package/dist/finalProfileModelMappingPatch.js +405 -0
  71. package/dist/finalProfileModelMappingPatch.js.map +1 -0
  72. package/dist/index.d.ts +12 -0
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +8 -0
  75. package/dist/index.js.map +1 -1
  76. package/dist/inferModelFamily.d.ts +10 -0
  77. package/dist/inferModelFamily.d.ts.map +1 -0
  78. package/dist/inferModelFamily.js +273 -0
  79. package/dist/inferModelFamily.js.map +1 -0
  80. package/dist/modelIdentity.d.ts.map +1 -1
  81. package/dist/modelIdentity.js +2 -1
  82. package/dist/modelIdentity.js.map +1 -1
  83. package/dist/modelsCatalog.d.ts +2 -2
  84. package/dist/modelsCatalog.d.ts.map +1 -1
  85. package/dist/modelsCatalog.js +36 -34
  86. package/dist/modelsCatalog.js.map +1 -1
  87. package/dist/openRouterProviderMap.d.ts +57 -0
  88. package/dist/openRouterProviderMap.d.ts.map +1 -0
  89. package/dist/openRouterProviderMap.js +120 -0
  90. package/dist/openRouterProviderMap.js.map +1 -0
  91. package/dist/profileRegistryV3.d.ts.map +1 -1
  92. package/dist/profileRegistryV3.js +30 -23
  93. package/dist/profileRegistryV3.js.map +1 -1
  94. package/dist/resolveInstructionTierAndBackend.d.ts.map +1 -1
  95. package/dist/resolveInstructionTierAndBackend.js +18 -5
  96. package/dist/resolveInstructionTierAndBackend.js.map +1 -1
  97. package/dist/resolveLocalRuntime.d.ts +22 -0
  98. package/dist/resolveLocalRuntime.d.ts.map +1 -0
  99. package/dist/resolveLocalRuntime.js +60 -0
  100. package/dist/resolveLocalRuntime.js.map +1 -0
  101. package/dist/resolveModelRouting.d.ts.map +1 -1
  102. package/dist/resolveModelRouting.js +8 -1
  103. package/dist/resolveModelRouting.js.map +1 -1
  104. package/dist/sourceCatalogProviders.d.ts +9 -0
  105. package/dist/sourceCatalogProviders.d.ts.map +1 -0
  106. package/dist/sourceCatalogProviders.js +51 -0
  107. package/dist/sourceCatalogProviders.js.map +1 -0
  108. package/dist/types.d.ts +6 -2
  109. package/dist/types.d.ts.map +1 -1
  110. package/dist/validateFunctionalRouting.d.ts +14 -0
  111. package/dist/validateFunctionalRouting.d.ts.map +1 -0
  112. package/dist/validateFunctionalRouting.js +178 -0
  113. package/dist/validateFunctionalRouting.js.map +1 -0
  114. package/dist/validateProfileTransportPolicy.d.ts.map +1 -1
  115. package/dist/validateProfileTransportPolicy.js +19 -5
  116. package/dist/validateProfileTransportPolicy.js.map +1 -1
  117. package/dist/validation/openRouterAlignment.d.ts +1 -1
  118. package/dist/validation/openRouterAlignment.d.ts.map +1 -1
  119. package/dist/validation/validateModelsProfilesJson.d.ts.map +1 -1
  120. package/dist/validation/validateModelsProfilesJson.js +6 -3
  121. package/dist/validation/validateModelsProfilesJson.js.map +1 -1
  122. package/dist/vendorModelId.d.ts +1 -1
  123. package/dist/vendorModelId.d.ts.map +1 -1
  124. package/dist/vendorModelId.js +4 -3
  125. package/dist/vendorModelId.js.map +1 -1
  126. package/package.json +90 -84
  127. package/dist/data/openrouter-models-catalog.json +0 -857
  128. package/dist/data/profiles-shortcuts.json +0 -295
  129. package/dist/isKnownProfileInput.d.ts +0 -9
  130. package/dist/isKnownProfileInput.d.ts.map +0 -1
  131. package/dist/isKnownProfileInput.js +0 -14
  132. package/dist/isKnownProfileInput.js.map +0 -1
  133. package/dist/isKnownProfileOrShortcut.d.ts +0 -6
  134. package/dist/isKnownProfileOrShortcut.d.ts.map +0 -1
  135. package/dist/isKnownProfileOrShortcut.js +0 -11
  136. package/dist/isKnownProfileOrShortcut.js.map +0 -1
  137. package/dist/legacyGraphEngineAliasMap.d.ts +0 -13
  138. package/dist/legacyGraphEngineAliasMap.d.ts.map +0 -1
  139. package/dist/legacyGraphEngineAliasMap.js +0 -16
  140. package/dist/legacyGraphEngineAliasMap.js.map +0 -1
  141. package/dist/listAIShortcuts.d.ts +0 -4
  142. package/dist/listAIShortcuts.d.ts.map +0 -1
  143. package/dist/listAIShortcuts.js +0 -12
  144. package/dist/listAIShortcuts.js.map +0 -1
  145. package/dist/profileDiscoveryMatch.d.ts +0 -15
  146. package/dist/profileDiscoveryMatch.d.ts.map +0 -1
  147. package/dist/profileDiscoveryMatch.js +0 -18
  148. package/dist/profileDiscoveryMatch.js.map +0 -1
  149. package/dist/profileInputMatch.d.ts +0 -20
  150. package/dist/profileInputMatch.d.ts.map +0 -1
  151. package/dist/profileInputMatch.js +0 -30
  152. package/dist/profileInputMatch.js.map +0 -1
  153. package/dist/profileModelFallback.d.ts +0 -13
  154. package/dist/profileModelFallback.d.ts.map +0 -1
  155. package/dist/profileModelFallback.js +0 -180
  156. package/dist/profileModelFallback.js.map +0 -1
@@ -0,0 +1,8 @@
1
+ import type { FinalProfileModelMappingPatch } from "../finalProfileModelMappingPatch.js";
2
+ import type { NormalizedModel, PatchValidationError, ProfileChoiceKey, ProfileModelRecommendation } from "./types.js";
3
+ export declare function buildPatchFromApprovedRecommendations(recommendations: ProfileModelRecommendation[], approvedKeys: Set<ProfileChoiceKey | string>): FinalProfileModelMappingPatch;
4
+ export declare function validatePatchAgainstCatalog(args: {
5
+ patch: FinalProfileModelMappingPatch;
6
+ models: NormalizedModel[];
7
+ }): PatchValidationError[];
8
+ //# sourceMappingURL=patch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patch.d.ts","sourceRoot":"","sources":["../../src/evidence/patch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,qCAAqC,CAAC;AACzF,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,0BAA0B,EAC3B,MAAM,YAAY,CAAC;AAEpB,wBAAgB,qCAAqC,CACnD,eAAe,EAAE,0BAA0B,EAAE,EAC7C,YAAY,EAAE,GAAG,CAAC,gBAAgB,GAAG,MAAM,CAAC,GAC3C,6BAA6B,CAc/B;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAChD,KAAK,EAAE,6BAA6B,CAAC;IACrC,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B,GAAG,oBAAoB,EAAE,CAuCzB"}
@@ -0,0 +1,50 @@
1
+ export function buildPatchFromApprovedRecommendations(recommendations, approvedKeys) {
2
+ const patch = {};
3
+ for (const rec of recommendations) {
4
+ if (!approvedKeys.has(rec.profileChoiceKey))
5
+ continue;
6
+ patch[rec.profileChoiceKey] = {
7
+ provider: rec.recommended.provider,
8
+ modelId: rec.recommended.modelId,
9
+ modelStatus: "verified",
10
+ reason: rec.reason,
11
+ };
12
+ }
13
+ return patch;
14
+ }
15
+ export function validatePatchAgainstCatalog(args) {
16
+ const { patch, models } = args;
17
+ const modelSet = new Set(models.map((m) => `${m.identity.provider}/${m.identity.modelId}`));
18
+ const errors = [];
19
+ const seen = new Set();
20
+ for (const [key, value] of Object.entries(patch)) {
21
+ if (seen.has(key)) {
22
+ errors.push({
23
+ profileChoiceKey: key,
24
+ message: "Duplicate conflicting patch key",
25
+ });
26
+ }
27
+ seen.add(key);
28
+ const lookup = `${value.provider}/${value.modelId}`;
29
+ if (!modelSet.has(lookup) && value.provider !== "local") {
30
+ errors.push({
31
+ profileChoiceKey: key,
32
+ message: `Model not found in active catalog: ${lookup}`,
33
+ });
34
+ }
35
+ if (value.modelStatus !== "verified") {
36
+ errors.push({
37
+ profileChoiceKey: key,
38
+ message: "Functional patch must use modelStatus=verified",
39
+ });
40
+ }
41
+ if (value.modelId.includes("latest")) {
42
+ errors.push({
43
+ profileChoiceKey: key,
44
+ message: "Do not use latest alias in final profile patch",
45
+ });
46
+ }
47
+ }
48
+ return errors;
49
+ }
50
+ //# sourceMappingURL=patch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patch.js","sourceRoot":"","sources":["../../src/evidence/patch.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,qCAAqC,CACnD,eAA6C,EAC7C,YAA4C;IAE5C,MAAM,KAAK,GAAkC,EAAE,CAAC;IAEhD,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QAClC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC;YAAE,SAAS;QACtD,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG;YAC5B,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,QAAQ;YAClC,OAAO,EAAE,GAAG,CAAC,WAAW,CAAC,OAAO;YAChC,WAAW,EAAE,UAAU;YACvB,MAAM,EAAE,GAAG,CAAC,MAAM;SACnB,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,IAG3C;IACC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAI,GAAG,CACtB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAClE,CAAC;IACF,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC;gBACV,gBAAgB,EAAE,GAAG;gBACrB,OAAO,EAAE,iCAAiC;aAC3C,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEd,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACxD,MAAM,CAAC,IAAI,CAAC;gBACV,gBAAgB,EAAE,GAAG;gBACrB,OAAO,EAAE,sCAAsC,MAAM,EAAE;aACxD,CAAC,CAAC;QACL,CAAC;QACD,IAAI,KAAK,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC;gBACV,gBAAgB,EAAE,GAAG;gBACrB,OAAO,EAAE,gDAAgD;aAC1D,CAAC,CAAC;QACL,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC;gBACV,gBAAgB,EAAE,GAAG;gBACrB,OAAO,EAAE,gDAAgD;aAC1D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { ProviderId } from "../types.js";
2
+ import type { BenchmarkSignal, InternalEvalResult, ModelIssueSignal, ModelTaskScore, NormalizedModel, ProfileModelRecommendation, TaskProfile } from "./types.js";
3
+ export declare const profileChoiceToTaskProfile: Record<string, TaskProfile>;
4
+ export declare const candidateProviderFamiliesByTask: Record<TaskProfile, ProviderId[]>;
5
+ export declare function buildRecommendationReason(score: ModelTaskScore, current?: {
6
+ provider: ProviderId;
7
+ modelId: string;
8
+ }): string;
9
+ export declare function summarizeEvidence(evidence: Array<BenchmarkSignal | InternalEvalResult>): string[];
10
+ export declare function recommendModelsForProfiles(args: {
11
+ models: NormalizedModel[];
12
+ benchmarkSignals: BenchmarkSignal[];
13
+ internalResults: InternalEvalResult[];
14
+ issues: ModelIssueSignal[];
15
+ currentMappings: Record<string, {
16
+ provider: ProviderId;
17
+ modelId: string;
18
+ }>;
19
+ }): ProfileModelRecommendation[];
20
+ //# sourceMappingURL=recommend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommend.d.ts","sourceRoot":"","sources":["../../src/evidence/recommend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,eAAe,EAEf,0BAA0B,EAC1B,WAAW,EACZ,MAAM,YAAY,CAAC;AAGpB,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAqClE,CAAC;AAEF,eAAO,MAAM,+BAA+B,EAAE,MAAM,CAAC,WAAW,EAAE,UAAU,EAAE,CAoB3E,CAAC;AAIJ,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,cAAc,EACrB,OAAO,CAAC,EAAE;IAAE,QAAQ,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAClD,MAAM,CAMR;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,KAAK,CAAC,eAAe,GAAG,kBAAkB,CAAC,GACpD,MAAM,EAAE,CAOV;AAaD,wBAAgB,0BAA0B,CAAC,IAAI,EAAE;IAC/C,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,eAAe,EAAE,kBAAkB,EAAE,CAAC;IACtC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,eAAe,EAAE,MAAM,CACrB,MAAM,EACN;QAAE,QAAQ,EAAE,UAAU,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAC1C,CAAC;CACH,GAAG,0BAA0B,EAAE,CAsF/B"}
@@ -0,0 +1,142 @@
1
+ import { resolveFinalProfileModelMappingPatch } from "../finalProfileModelMappingPatch.js";
2
+ import { scoreModelForTask } from "./scoreModelForTask.js";
3
+ export const profileChoiceToTaskProfile = {
4
+ "cheap/default": "cheap",
5
+ "cheap/google_floor": "cheap",
6
+ "routing/default": "routing",
7
+ "extraction/default": "extraction",
8
+ "json/default": "json",
9
+ "json/google_json": "json",
10
+ "json/deepseek_json": "json",
11
+ "fast/default": "fast",
12
+ "balanced/default": "balanced",
13
+ "value/default": "value",
14
+ "deep/default": "deep",
15
+ "deep/openai_deep": "deep",
16
+ "deep/google_deep": "deep",
17
+ "deep/deepseek_pro": "deep",
18
+ "pro/default": "pro",
19
+ "pro/claude_pro": "pro",
20
+ "agentic/default": "agentic",
21
+ "agentic/openai_agentic": "agentic",
22
+ "agentic/deepseek_agentic": "agentic",
23
+ "research/default": "research",
24
+ "research/openai_research": "research",
25
+ "research/google_research": "research",
26
+ "cyber/default": "cyber",
27
+ "cyber/deep_forensics": "cyber",
28
+ "cyber/gpt_forensics": "cyber",
29
+ "cyber/log_analysis": "cyber",
30
+ "coding/default": "coding",
31
+ "coding/deepseek_pro": "coding",
32
+ "coding/claude_coding": "coding",
33
+ "coding/openai_coding": "coding",
34
+ "content/default": "content",
35
+ "content/pseo_bulk": "content",
36
+ "content/brand_voice": "content",
37
+ "sum/default": "summarization",
38
+ "sum/mega_context": "long_context",
39
+ "vol/default": "vol",
40
+ };
41
+ export const candidateProviderFamiliesByTask = {
42
+ cheap: ["deepseek", "google", "openai", "minimax"],
43
+ routing: ["google", "openai", "anthropic", "deepseek"],
44
+ extraction: ["google", "openai", "anthropic", "deepseek"],
45
+ json: ["openai", "google", "deepseek", "anthropic"],
46
+ fast: ["openai", "google", "xai", "anthropic", "minimax"],
47
+ balanced: ["openai", "anthropic", "deepseek", "google", "minimax"],
48
+ value: ["deepseek", "minimax", "google", "qwen"],
49
+ deep: ["anthropic", "openai", "deepseek", "google", "xai"],
50
+ pro: ["openai", "anthropic"],
51
+ agentic: ["anthropic", "openai", "deepseek", "minimax", "google"],
52
+ research: ["anthropic", "openai", "google", "perplexity"],
53
+ cyber: ["deepseek", "openai", "xai", "google", "anthropic"],
54
+ coding: ["deepseek", "anthropic", "openai", "qwen", "moonshotai", "minimax"],
55
+ content: ["anthropic", "openai", "google"],
56
+ summarization: ["anthropic", "google", "deepseek"],
57
+ long_context: ["google", "deepseek", "xai"],
58
+ local: ["local"],
59
+ vol: ["deepseek", "google", "openai", "minimax"],
60
+ };
61
+ const POLICY_PRIOR_BOOST = 0.35;
62
+ export function buildRecommendationReason(score, current) {
63
+ const target = `${score.model.provider}/${score.model.modelId}`;
64
+ if (!current) {
65
+ return `Recommended ${target} for ${score.taskProfile} based on score ${score.finalScore.toFixed(3)}.`;
66
+ }
67
+ return `Recommended ${target} over ${current.provider}/${current.modelId} for ${score.taskProfile}; score=${score.finalScore.toFixed(3)}, estimatedCostUsd=${score.estimatedCostUsd.toFixed(6)}.`;
68
+ }
69
+ export function summarizeEvidence(evidence) {
70
+ return evidence.slice(0, 6).map((item) => {
71
+ if ("metric" in item) {
72
+ return `${item.source}:${item.metric}=${item.value}`;
73
+ }
74
+ return `internal:${item.taskId}:quality=${item.qualityScore ?? item.passRate ?? "n/a"}`;
75
+ });
76
+ }
77
+ function hasInternalEvidence(internalResults, model) {
78
+ return internalResults.some((r) => r.provider === model.identity.provider &&
79
+ r.modelId === model.identity.modelId);
80
+ }
81
+ export function recommendModelsForProfiles(args) {
82
+ const { models, benchmarkSignals, internalResults, issues, currentMappings, } = args;
83
+ const policyPatch = resolveFinalProfileModelMappingPatch();
84
+ const recommendations = [];
85
+ for (const [profileChoiceKey, taskProfile] of Object.entries(profileChoiceToTaskProfile)) {
86
+ const allowedProviders = new Set(candidateProviderFamiliesByTask[taskProfile]);
87
+ const candidates = models.filter((m) => allowedProviders.has(m.identity.provider));
88
+ const policy = policyPatch[profileChoiceKey];
89
+ const scored = candidates
90
+ .map((model) => {
91
+ const base = scoreModelForTask({
92
+ model,
93
+ taskProfile,
94
+ benchmarkSignals,
95
+ internalResults,
96
+ issues,
97
+ });
98
+ if (base.disqualifiedReasons.length > 0)
99
+ return base;
100
+ const isPolicyPrior = policy &&
101
+ model.identity.provider === policy.provider &&
102
+ model.identity.modelId === policy.modelId;
103
+ const lacksInternal = !hasInternalEvidence(internalResults, model);
104
+ const boosted = isPolicyPrior && lacksInternal
105
+ ? Math.min(1, base.finalScore + POLICY_PRIOR_BOOST)
106
+ : base.finalScore;
107
+ return { ...base, finalScore: boosted };
108
+ })
109
+ .filter((s) => s.disqualifiedReasons.length === 0)
110
+ .sort((a, b) => b.finalScore - a.finalScore);
111
+ const policyHit = policy
112
+ ? scored.find((s) => s.model.provider === policy.provider &&
113
+ s.model.modelId === policy.modelId)
114
+ : undefined;
115
+ const best = policyHit ?? scored[0];
116
+ if (!best)
117
+ continue;
118
+ const current = currentMappings[profileChoiceKey];
119
+ const changed = !current ||
120
+ current.provider !== best.model.provider ||
121
+ current.modelId !== best.model.modelId;
122
+ recommendations.push({
123
+ profileChoiceKey: profileChoiceKey,
124
+ current,
125
+ recommended: {
126
+ provider: best.model.provider,
127
+ modelId: best.model.modelId,
128
+ modelStatus: "verified",
129
+ },
130
+ taskProfile,
131
+ score: best.finalScore,
132
+ estimatedCostUsd: best.estimatedCostUsd,
133
+ reason: buildRecommendationReason(best, current),
134
+ confidence: best.benchmarkConfidenceScore,
135
+ evidenceSummary: summarizeEvidence(best.evidence),
136
+ issuesSummary: best.issues.map((i) => `${i.issue}: ${i.severity}`),
137
+ requiresHumanApproval: changed,
138
+ });
139
+ }
140
+ return recommendations;
141
+ }
142
+ //# sourceMappingURL=recommend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommend.js","sourceRoot":"","sources":["../../src/evidence/recommend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { ProviderId } from "../types.js";
2
+ import type { BenchmarkSignal, InternalEvalResult, ModelEvidenceFile, ModelIssueSignal, NormalizedModel, ProfileModelRecommendation } from "./types.js";
3
+ export type RefreshModelEvidenceOptions = {
4
+ includeArtificialAnalysis?: boolean;
5
+ artificialAnalysisPath?: string;
6
+ includeHuggingFace?: boolean;
7
+ includeInternalEvals?: boolean;
8
+ internalEvalsPath?: string;
9
+ includeLocalProbes?: boolean;
10
+ /** When set, use these models instead of live OpenRouter fetch (tests / offline). */
11
+ models?: NormalizedModel[];
12
+ };
13
+ export type RefreshModelEvidenceResult = {
14
+ models: NormalizedModel[];
15
+ benchmarkSignals: BenchmarkSignal[];
16
+ internalResults: InternalEvalResult[];
17
+ issues: ModelIssueSignal[];
18
+ recommendations: ProfileModelRecommendation[];
19
+ evidenceFile: ModelEvidenceFile;
20
+ };
21
+ export declare function refreshModelEvidence(options: RefreshModelEvidenceOptions, currentMappings: Record<string, {
22
+ provider: ProviderId;
23
+ modelId: string;
24
+ }>): Promise<RefreshModelEvidenceResult>;
25
+ //# sourceMappingURL=refreshModelEvidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refreshModelEvidence.d.ts","sourceRoot":"","sources":["../../src/evidence/refreshModelEvidence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAW9C,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,0BAA0B,EAC3B,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,2BAA2B,GAAG;IACxC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,qFAAqF;IACrF,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,eAAe,EAAE,kBAAkB,EAAE,CAAC;IACtC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,eAAe,EAAE,0BAA0B,EAAE,CAAC;IAC9C,YAAY,EAAE,iBAAiB,CAAC;CACjC,CAAC;AAEF,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,2BAA2B,EACpC,eAAe,EAAE,MAAM,CACrB,MAAM,EACN;IAAE,QAAQ,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAC1C,GACA,OAAO,CAAC,0BAA0B,CAAC,CA8GrC"}
@@ -0,0 +1,104 @@
1
+ import { loadArtificialAnalysisFromJson, loadInternalEvalResultsFromJson, } from "./adapters.js";
2
+ import { probeAllLocalRuntimes } from "./local/probes.js";
3
+ import { fetchOpenRouterModels, normalizeOpenRouterModel, } from "./openRouter.js";
4
+ import { recommendModelsForProfiles } from "./recommend.js";
5
+ export async function refreshModelEvidence(options, currentMappings) {
6
+ const openrouterFetchedAt = new Date().toISOString();
7
+ let models;
8
+ if (options.models) {
9
+ models = options.models;
10
+ }
11
+ else {
12
+ const openRouterRaw = await fetchOpenRouterModels({
13
+ outputModalities: ["text"],
14
+ });
15
+ models = openRouterRaw.map(normalizeOpenRouterModel);
16
+ }
17
+ const benchmarkSignals = [];
18
+ const internalResults = [];
19
+ const issues = [];
20
+ let artificialAnalysisFetchedAt;
21
+ let internalEvalFetchedAt;
22
+ if (options.includeArtificialAnalysis && options.artificialAnalysisPath) {
23
+ const aa = await loadArtificialAnalysisFromJson(options.artificialAnalysisPath);
24
+ benchmarkSignals.push(...aa);
25
+ artificialAnalysisFetchedAt = new Date().toISOString();
26
+ }
27
+ if (options.includeHuggingFace) {
28
+ // Optional: plug dataset adapters when configured. No aggressive scraping.
29
+ }
30
+ if (options.includeInternalEvals && options.internalEvalsPath) {
31
+ internalResults.push(...loadInternalEvalResultsFromJson(options.internalEvalsPath));
32
+ internalEvalFetchedAt = new Date().toISOString();
33
+ }
34
+ if (options.includeLocalProbes) {
35
+ const probes = await probeAllLocalRuntimes();
36
+ for (const probe of probes) {
37
+ if (!probe.available) {
38
+ issues.push({
39
+ source: "internal_eval",
40
+ issue: "localInstallRisk",
41
+ provider: "local",
42
+ modelId: probe.runtime,
43
+ severity: "low",
44
+ score: 0.2,
45
+ evidence: probe.error ?? "runtime unavailable",
46
+ fetchedAt: new Date().toISOString(),
47
+ });
48
+ continue;
49
+ }
50
+ for (const modelId of probe.installedModels) {
51
+ models.push({
52
+ identity: {
53
+ provider: "local",
54
+ modelId: `${probe.runtime}:${modelId}`,
55
+ },
56
+ source: "local",
57
+ capabilities: {
58
+ inputModalities: ["text"],
59
+ outputModalities: ["text"],
60
+ supportsTools: false,
61
+ supportsToolChoice: false,
62
+ supportsStructuredOutputs: false,
63
+ supportsResponseFormat: false,
64
+ supportsReasoning: false,
65
+ supportsIncludeReasoning: false,
66
+ supportsTemperature: true,
67
+ supportsSeed: false,
68
+ isDeprecated: false,
69
+ },
70
+ pricing: {},
71
+ fetchedAt: new Date().toISOString(),
72
+ });
73
+ }
74
+ }
75
+ }
76
+ const recommendations = recommendModelsForProfiles({
77
+ models,
78
+ benchmarkSignals,
79
+ internalResults,
80
+ issues,
81
+ currentMappings,
82
+ });
83
+ const evidenceFile = {
84
+ generatedAt: new Date().toISOString(),
85
+ sourceVersions: {
86
+ openrouterFetchedAt,
87
+ artificialAnalysisFetchedAt,
88
+ internalEvalFetchedAt,
89
+ },
90
+ models,
91
+ benchmarkSignals,
92
+ issues,
93
+ recommendations,
94
+ };
95
+ return {
96
+ models,
97
+ benchmarkSignals,
98
+ internalResults,
99
+ issues,
100
+ recommendations,
101
+ evidenceFile,
102
+ };
103
+ }
104
+ //# sourceMappingURL=refreshModelEvidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refreshModelEvidence.js","sourceRoot":"","sources":["../../src/evidence/refreshModelEvidence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { BenchmarkMetricName, BenchmarkSignal, InternalEvalResult, ModelIssueSignal, ModelTaskScore, NormalizedModel, TaskProfile } from "./types.js";
2
+ import { taskRequirements } from "./scoringConfig.js";
3
+ export declare function modelSatisfiesTask(model: NormalizedModel, requirements: (typeof taskRequirements)[TaskProfile]): boolean;
4
+ export declare function normalizeRawBenchmarkValue(value: number, metric: BenchmarkMetricName, higherIsBetter: boolean): number;
5
+ export declare function aggregateBenchmarkQuality(signals: BenchmarkSignal[], taskProfile: TaskProfile): number;
6
+ export declare function scoreModelForTask(args: {
7
+ model: NormalizedModel;
8
+ taskProfile: TaskProfile;
9
+ benchmarkSignals: BenchmarkSignal[];
10
+ internalResults: InternalEvalResult[];
11
+ issues: ModelIssueSignal[];
12
+ }): ModelTaskScore;
13
+ //# sourceMappingURL=scoreModelForTask.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoreModelForTask.d.ts","sourceRoot":"","sources":["../../src/evidence/scoreModelForTask.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,WAAW,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EASL,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAE5B,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,eAAe,EACtB,YAAY,EAAE,CAAC,OAAO,gBAAgB,CAAC,CAAC,WAAW,CAAC,GACnD,OAAO,CAiCT;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,mBAAmB,EAC3B,cAAc,EAAE,OAAO,GACtB,MAAM,CAqBR;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,eAAe,EAAE,EAC1B,WAAW,EAAE,WAAW,GACvB,MAAM,CAkBR;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,KAAK,EAAE,eAAe,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,eAAe,EAAE,kBAAkB,EAAE,CAAC;IACtC,MAAM,EAAE,gBAAgB,EAAE,CAAC;CAC5B,GAAG,cAAc,CA4GjB"}
@@ -0,0 +1,137 @@
1
+ import { average, clamp01, contextScore, defaultProfileTaskShapes, estimateTaskCostUsd, inverseCostScore, issuePenalty, scoreWeightsByTask, taskRequirements, } from "./scoringConfig.js";
2
+ export function modelSatisfiesTask(model, requirements) {
3
+ const c = model.capabilities;
4
+ if (!requirements.allowDeprecated && c.isDeprecated) {
5
+ return false;
6
+ }
7
+ if (requirements.minContextTokens != null &&
8
+ (c.contextLength ?? 0) < requirements.minContextTokens) {
9
+ return false;
10
+ }
11
+ if (requirements.requiresTools && !c.supportsTools) {
12
+ return false;
13
+ }
14
+ if (requirements.requiresStructuredOutputs &&
15
+ !c.supportsStructuredOutputs &&
16
+ !c.supportsResponseFormat) {
17
+ return false;
18
+ }
19
+ if (requirements.requiresReasoning && !c.supportsReasoning) {
20
+ return false;
21
+ }
22
+ if (requirements.requiresTextOutput &&
23
+ c.outputModalities.length > 0 &&
24
+ !c.outputModalities.includes("text")) {
25
+ return false;
26
+ }
27
+ return true;
28
+ }
29
+ export function normalizeRawBenchmarkValue(value, metric, higherIsBetter) {
30
+ const assumedMaxByMetric = {
31
+ intelligence: 100,
32
+ coding: 100,
33
+ agentic: 100,
34
+ functionCalling: 100,
35
+ factuality: 100,
36
+ nonHallucination: 100,
37
+ longContext: 100,
38
+ mathReasoning: 100,
39
+ instructionFollowing: 100,
40
+ writingPreference: 2000,
41
+ costPerTask: 1,
42
+ outputTokensPerTask: 10_000,
43
+ tokensPerSecond: 500,
44
+ latencyP50Ms: 10_000,
45
+ latencyP95Ms: 30_000,
46
+ };
47
+ const max = assumedMaxByMetric[metric] ?? 100;
48
+ const raw = clamp01(value / max);
49
+ return higherIsBetter ? raw : 1 - raw;
50
+ }
51
+ export function aggregateBenchmarkQuality(signals, taskProfile) {
52
+ const relevant = signals.filter((s) => s.taskProfiles.includes(taskProfile));
53
+ if (relevant.length === 0)
54
+ return 0.5;
55
+ let weightedTotal = 0;
56
+ let weightSum = 0;
57
+ for (const signal of relevant) {
58
+ const normalized = signal.normalizedValue ??
59
+ normalizeRawBenchmarkValue(signal.value, signal.metric, signal.higherIsBetter);
60
+ weightedTotal += normalized * signal.confidence;
61
+ weightSum += signal.confidence;
62
+ }
63
+ return weightSum > 0 ? weightedTotal / weightSum : 0.5;
64
+ }
65
+ export function scoreModelForTask(args) {
66
+ const { model, taskProfile, benchmarkSignals, internalResults, issues } = args;
67
+ const requirements = taskRequirements[taskProfile];
68
+ const shape = defaultProfileTaskShapes[taskProfile];
69
+ const weights = scoreWeightsByTask[taskProfile];
70
+ const disqualifiedReasons = [];
71
+ if (!modelSatisfiesTask(model, requirements)) {
72
+ disqualifiedReasons.push("Model does not satisfy task requirements");
73
+ }
74
+ const estimatedCostUsd = estimateTaskCostUsd(model.pricing, shape);
75
+ if (requirements.maxCostUsd != null &&
76
+ estimatedCostUsd > requirements.maxCostUsd) {
77
+ disqualifiedReasons.push(`Estimated cost ${estimatedCostUsd} exceeds max ${requirements.maxCostUsd}`);
78
+ }
79
+ const relevantInternal = internalResults.filter((r) => r.provider === model.identity.provider &&
80
+ r.modelId === model.identity.modelId);
81
+ const internalQuality = relevantInternal.length > 0
82
+ ? average(relevantInternal
83
+ .map((r) => r.qualityScore ?? r.passRate)
84
+ .filter((v) => v != null))
85
+ : undefined;
86
+ const modelSignals = benchmarkSignals.filter((s) => {
87
+ if (s.openRouterId && s.openRouterId === model.identity.openRouterId) {
88
+ return true;
89
+ }
90
+ return (s.provider === model.identity.provider &&
91
+ s.modelId === model.identity.modelId);
92
+ });
93
+ const benchmarkQuality = aggregateBenchmarkQuality(modelSignals, taskProfile);
94
+ const qualityScore = internalQuality ?? benchmarkQuality;
95
+ const maxCost = requirements.maxCostUsd ?? Math.max(estimatedCostUsd * 3, 0.01);
96
+ const costScore = inverseCostScore(estimatedCostUsd, maxCost);
97
+ const latencyFromInternal = average(relevantInternal
98
+ .map((r) => r.avgLatencyMs)
99
+ .filter((v) => v != null));
100
+ const latencyScore = latencyFromInternal != null && latencyFromInternal > 0
101
+ ? clamp01(1 - latencyFromInternal / (requirements.maxLatencyMs ?? 10_000))
102
+ : 0.5;
103
+ const modelIssues = issues.filter((i) => {
104
+ if (i.openRouterId && i.openRouterId === model.identity.openRouterId) {
105
+ return true;
106
+ }
107
+ return (i.provider === model.identity.provider &&
108
+ i.modelId === model.identity.modelId);
109
+ });
110
+ const reliabilityScore = 1 - issuePenalty(modelIssues);
111
+ const cScore = contextScore(model.capabilities.contextLength, requirements.minContextTokens);
112
+ const benchmarkConfidenceScore = modelSignals.length > 0
113
+ ? average(modelSignals.map((s) => s.confidence))
114
+ : 0.2;
115
+ const finalScore = qualityScore * weights.quality +
116
+ costScore * weights.cost +
117
+ latencyScore * weights.latency +
118
+ reliabilityScore * weights.reliability +
119
+ cScore * weights.context +
120
+ benchmarkConfidenceScore * weights.benchmarkConfidence;
121
+ return {
122
+ model: model.identity,
123
+ taskProfile,
124
+ qualityScore,
125
+ costScore,
126
+ latencyScore,
127
+ reliabilityScore,
128
+ contextScore: cScore,
129
+ benchmarkConfidenceScore,
130
+ finalScore: disqualifiedReasons.length ? 0 : clamp01(finalScore),
131
+ estimatedCostUsd,
132
+ evidence: [...modelSignals, ...relevantInternal],
133
+ issues: modelIssues,
134
+ disqualifiedReasons,
135
+ };
136
+ }
137
+ //# sourceMappingURL=scoreModelForTask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoreModelForTask.js","sourceRoot":"","sources":["../../src/evidence/scoreModelForTask.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { EstimatedTaskShape, ModelIssueSignal, ModelPricing, ScoreWeights, TaskProfile, TaskRequirements } from "./types.js";
2
+ export declare const defaultProfileTaskShapes: Record<TaskProfile, EstimatedTaskShape>;
3
+ export declare const taskRequirements: Record<TaskProfile, TaskRequirements>;
4
+ export declare const scoreWeightsByTask: Record<TaskProfile, ScoreWeights>;
5
+ export declare function estimateTaskCostUsd(pricing: ModelPricing, task: EstimatedTaskShape): number;
6
+ export declare function clamp01(value: number): number;
7
+ export declare function inverseCostScore(costUsd: number, maxAcceptableCostUsd: number): number;
8
+ export declare function contextScore(contextLength: number | undefined, required: number | undefined): number;
9
+ export declare function issuePenalty(issues: ModelIssueSignal[]): number;
10
+ export declare function average(values: number[]): number;
11
+ //# sourceMappingURL=scoringConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoringConfig.d.ts","sourceRoot":"","sources":["../../src/evidence/scoringConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,WAAW,EAAE,kBAAkB,CAwC5E,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,WAAW,EAAE,gBAAgB,CA2BlE,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,WAAW,EAAE,YAAY,CAiJhE,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,kBAAkB,GACvB,MAAM,CAaR;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,oBAAoB,EAAE,MAAM,GAC3B,MAAM,CAGR;AAED,wBAAgB,YAAY,CAC1B,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,MAAM,CAIR;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAa/D;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAGhD"}