@x12i/ai-profiles 4.3.0 → 4.4.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 (119) hide show
  1. package/README.md +39 -32
  2. package/dist/buildCatalogFromOpenRouterApi.d.ts +3 -1
  3. package/dist/buildCatalogFromOpenRouterApi.d.ts.map +1 -1
  4. package/dist/buildCatalogFromOpenRouterApi.js +11 -69
  5. package/dist/buildCatalogFromOpenRouterApi.js.map +1 -1
  6. package/dist/constants.d.ts +5 -3
  7. package/dist/constants.d.ts.map +1 -1
  8. package/dist/constants.js +15 -2
  9. package/dist/constants.js.map +1 -1
  10. package/dist/data/models-catalog.json +5036 -2055
  11. package/dist/data/models-profiles.json +3442 -866
  12. package/dist/data/models-registry.json +4594 -2772
  13. package/dist/ensureRemoteOpenRouterBackend.d.ts +4 -0
  14. package/dist/ensureRemoteOpenRouterBackend.d.ts.map +1 -0
  15. package/dist/ensureRemoteOpenRouterBackend.js +33 -0
  16. package/dist/ensureRemoteOpenRouterBackend.js.map +1 -0
  17. package/dist/evidence/adapterTypes.d.ts +14 -0
  18. package/dist/evidence/adapterTypes.d.ts.map +1 -0
  19. package/dist/evidence/adapterTypes.js +2 -0
  20. package/dist/evidence/adapterTypes.js.map +1 -0
  21. package/dist/evidence/adapters.d.ts +28 -0
  22. package/dist/evidence/adapters.d.ts.map +1 -0
  23. package/dist/evidence/adapters.js +102 -0
  24. package/dist/evidence/adapters.js.map +1 -0
  25. package/dist/evidence/index.d.ts +13 -0
  26. package/dist/evidence/index.d.ts.map +1 -0
  27. package/dist/evidence/index.js +9 -0
  28. package/dist/evidence/index.js.map +1 -0
  29. package/dist/evidence/local/probes.d.ts +58 -0
  30. package/dist/evidence/local/probes.d.ts.map +1 -0
  31. package/dist/evidence/local/probes.js +210 -0
  32. package/dist/evidence/local/probes.js.map +1 -0
  33. package/dist/evidence/openRouter.d.ts +11 -0
  34. package/dist/evidence/openRouter.d.ts.map +1 -0
  35. package/dist/evidence/openRouter.js +80 -0
  36. package/dist/evidence/openRouter.js.map +1 -0
  37. package/dist/evidence/patch.d.ts +8 -0
  38. package/dist/evidence/patch.d.ts.map +1 -0
  39. package/dist/evidence/patch.js +50 -0
  40. package/dist/evidence/patch.js.map +1 -0
  41. package/dist/evidence/recommend.d.ts +20 -0
  42. package/dist/evidence/recommend.d.ts.map +1 -0
  43. package/dist/evidence/recommend.js +142 -0
  44. package/dist/evidence/recommend.js.map +1 -0
  45. package/dist/evidence/refreshModelEvidence.d.ts +25 -0
  46. package/dist/evidence/refreshModelEvidence.d.ts.map +1 -0
  47. package/dist/evidence/refreshModelEvidence.js +104 -0
  48. package/dist/evidence/refreshModelEvidence.js.map +1 -0
  49. package/dist/evidence/scoreModelForTask.d.ts +13 -0
  50. package/dist/evidence/scoreModelForTask.d.ts.map +1 -0
  51. package/dist/evidence/scoreModelForTask.js +137 -0
  52. package/dist/evidence/scoreModelForTask.js.map +1 -0
  53. package/dist/evidence/scoringConfig.d.ts +11 -0
  54. package/dist/evidence/scoringConfig.d.ts.map +1 -0
  55. package/dist/evidence/scoringConfig.js +259 -0
  56. package/dist/evidence/scoringConfig.js.map +1 -0
  57. package/dist/evidence/types.d.ts +218 -0
  58. package/dist/evidence/types.d.ts.map +1 -0
  59. package/dist/evidence/types.js +2 -0
  60. package/dist/evidence/types.js.map +1 -0
  61. package/dist/finalProfileModelMappingPatch.d.ts +31 -0
  62. package/dist/finalProfileModelMappingPatch.d.ts.map +1 -0
  63. package/dist/finalProfileModelMappingPatch.js +405 -0
  64. package/dist/finalProfileModelMappingPatch.js.map +1 -0
  65. package/dist/index.d.ts +12 -0
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +8 -0
  68. package/dist/index.js.map +1 -1
  69. package/dist/inferModelFamily.d.ts +8 -0
  70. package/dist/inferModelFamily.d.ts.map +1 -0
  71. package/dist/inferModelFamily.js +242 -0
  72. package/dist/inferModelFamily.js.map +1 -0
  73. package/dist/modelIdentity.d.ts.map +1 -1
  74. package/dist/modelIdentity.js +2 -1
  75. package/dist/modelIdentity.js.map +1 -1
  76. package/dist/modelsCatalog.d.ts +2 -2
  77. package/dist/modelsCatalog.d.ts.map +1 -1
  78. package/dist/modelsCatalog.js +36 -34
  79. package/dist/modelsCatalog.js.map +1 -1
  80. package/dist/openRouterProviderMap.d.ts +57 -0
  81. package/dist/openRouterProviderMap.d.ts.map +1 -0
  82. package/dist/openRouterProviderMap.js +120 -0
  83. package/dist/openRouterProviderMap.js.map +1 -0
  84. package/dist/profileRegistryV3.d.ts.map +1 -1
  85. package/dist/profileRegistryV3.js +30 -23
  86. package/dist/profileRegistryV3.js.map +1 -1
  87. package/dist/resolveInstructionTierAndBackend.d.ts.map +1 -1
  88. package/dist/resolveInstructionTierAndBackend.js +18 -5
  89. package/dist/resolveInstructionTierAndBackend.js.map +1 -1
  90. package/dist/resolveLocalRuntime.d.ts +22 -0
  91. package/dist/resolveLocalRuntime.d.ts.map +1 -0
  92. package/dist/resolveLocalRuntime.js +60 -0
  93. package/dist/resolveLocalRuntime.js.map +1 -0
  94. package/dist/resolveModelRouting.d.ts.map +1 -1
  95. package/dist/resolveModelRouting.js +8 -1
  96. package/dist/resolveModelRouting.js.map +1 -1
  97. package/dist/sourceCatalogProviders.d.ts +9 -0
  98. package/dist/sourceCatalogProviders.d.ts.map +1 -0
  99. package/dist/sourceCatalogProviders.js +51 -0
  100. package/dist/sourceCatalogProviders.js.map +1 -0
  101. package/dist/types.d.ts +6 -2
  102. package/dist/types.d.ts.map +1 -1
  103. package/dist/validateFunctionalRouting.d.ts +14 -0
  104. package/dist/validateFunctionalRouting.d.ts.map +1 -0
  105. package/dist/validateFunctionalRouting.js +178 -0
  106. package/dist/validateFunctionalRouting.js.map +1 -0
  107. package/dist/validateProfileTransportPolicy.d.ts.map +1 -1
  108. package/dist/validateProfileTransportPolicy.js +19 -5
  109. package/dist/validateProfileTransportPolicy.js.map +1 -1
  110. package/dist/validation/openRouterAlignment.d.ts +1 -1
  111. package/dist/validation/openRouterAlignment.d.ts.map +1 -1
  112. package/dist/validation/validateModelsProfilesJson.d.ts.map +1 -1
  113. package/dist/validation/validateModelsProfilesJson.js +6 -3
  114. package/dist/validation/validateModelsProfilesJson.js.map +1 -1
  115. package/dist/vendorModelId.d.ts +1 -1
  116. package/dist/vendorModelId.d.ts.map +1 -1
  117. package/dist/vendorModelId.js +4 -3
  118. package/dist/vendorModelId.js.map +1 -1
  119. package/package.json +2 -1
@@ -0,0 +1,4 @@
1
+ import type { ModelsProfilesJson } from "./types.js";
2
+ /** Ensure remote (non-local) choices declare OpenRouter as the callability backend. */
3
+ export declare function ensureRemoteOpenRouterBackend(profiles: ModelsProfilesJson): ModelsProfilesJson;
4
+ //# sourceMappingURL=ensureRemoteOpenRouterBackend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureRemoteOpenRouterBackend.d.ts","sourceRoot":"","sources":["../src/ensureRemoteOpenRouterBackend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB,uFAAuF;AACvF,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,kBAAkB,GAC3B,kBAAkB,CAuCpB"}
@@ -0,0 +1,33 @@
1
+ /** Ensure remote (non-local) choices declare OpenRouter as the callability backend. */
2
+ export function ensureRemoteOpenRouterBackend(profiles) {
3
+ const next = {
4
+ ...profiles,
5
+ profiles: { ...profiles.profiles },
6
+ };
7
+ for (const [profileKey, profile] of Object.entries(next.profiles)) {
8
+ const choices = {};
9
+ let changed = false;
10
+ for (const [choiceKey, choice] of Object.entries(profile.choices ?? {})) {
11
+ if (choice.provider === "local") {
12
+ choices[choiceKey] = choice;
13
+ continue;
14
+ }
15
+ const runtime = {
16
+ ...(choice.runtime ?? {}),
17
+ backend: choice.runtime?.backend ?? "openrouter",
18
+ };
19
+ if (choice.runtime?.backend === runtime.backend &&
20
+ choice.runtime !== undefined) {
21
+ choices[choiceKey] = choice;
22
+ continue;
23
+ }
24
+ changed = true;
25
+ choices[choiceKey] = { ...choice, runtime };
26
+ }
27
+ next.profiles[profileKey] = changed
28
+ ? { ...profile, choices }
29
+ : profile;
30
+ }
31
+ return next;
32
+ }
33
+ //# sourceMappingURL=ensureRemoteOpenRouterBackend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureRemoteOpenRouterBackend.js","sourceRoot":"","sources":["../src/ensureRemoteOpenRouterBackend.ts"],"names":[],"mappings":"AAMA,uFAAuF;AACvF,MAAM,UAAU,6BAA6B,CAC3C,QAA4B;IAE5B,MAAM,IAAI,GAAuB;QAC/B,GAAG,QAAQ;QACX,QAAQ,EAAE,EAAE,GAAG,QAAQ,CAAC,QAAQ,EAAE;KACnC,CAAC;IAEF,KAAK,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClE,MAAM,OAAO,GAAoC,EAAE,CAAC;QACpD,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,KAAK,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;YACxE,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAChC,OAAO,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;gBAC5B,SAAS;YACX,CAAC;YAED,MAAM,OAAO,GAAsB;gBACjC,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;gBACzB,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,IAAI,YAAY;aACjD,CAAC;YAEF,IACE,MAAM,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO;gBAC3C,MAAM,CAAC,OAAO,KAAK,SAAS,EAC5B,CAAC;gBACD,OAAO,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;gBAC5B,SAAS;YACX,CAAC;YAED,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC;QAC9C,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,OAAO;YACjC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE;YACzB,CAAC,CAAC,OAAO,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,14 @@
1
+ export type ArtificialAnalysisRawRow = {
2
+ modelName: string;
3
+ providerName?: string;
4
+ intelligenceIndex?: number;
5
+ codingIndex?: number;
6
+ agenticIndex?: number;
7
+ costPerTaskUsd?: number;
8
+ outputTokensPerTask?: number;
9
+ outputTokensPerSecond?: number;
10
+ longContextReasoning?: number;
11
+ nonHallucinationRate?: number;
12
+ fetchedAt: string;
13
+ };
14
+ //# sourceMappingURL=adapterTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapterTypes.d.ts","sourceRoot":"","sources":["../../src/evidence/adapterTypes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=adapterTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapterTypes.js","sourceRoot":"","sources":["../../src/evidence/adapterTypes.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ import type { ArtificialAnalysisRawRow } from "./adapterTypes.js";
2
+ import type { BenchmarkSignal, InternalEvalResult } from "./types.js";
3
+ export type { ArtificialAnalysisRawRow } from "./adapterTypes.js";
4
+ export interface ArtificialAnalysisClient {
5
+ fetchRows(): Promise<ArtificialAnalysisRawRow[]>;
6
+ }
7
+ /**
8
+ * Optional AA adapter. Prefer official export/API when configured.
9
+ * Do not scrape aggressively.
10
+ */
11
+ export declare function mapArtificialAnalysisRowToSignals(row: ArtificialAnalysisRawRow): BenchmarkSignal[];
12
+ export declare function loadArtificialAnalysisFromJson(path: string): Promise<BenchmarkSignal[]>;
13
+ export type HuggingFaceDatasetRef = {
14
+ dataset: string;
15
+ config?: string;
16
+ split: string;
17
+ };
18
+ export type HuggingFaceRowsResponse<T> = {
19
+ rows: Array<{
20
+ row_idx: number;
21
+ row: T;
22
+ truncated_cells?: string[];
23
+ }>;
24
+ num_rows_total?: number;
25
+ };
26
+ export declare function fetchHuggingFaceRows<T>(ref: HuggingFaceDatasetRef, offset?: number, length?: number): Promise<HuggingFaceRowsResponse<T>>;
27
+ export declare function loadInternalEvalResultsFromJson(path: string): InternalEvalResult[];
28
+ //# sourceMappingURL=adapters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../src/evidence/adapters.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEtE,YAAY,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAElE,MAAM,WAAW,wBAAwB;IACvC,SAAS,IAAI,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAAC;CAClD;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,wBAAwB,GAC5B,eAAe,EAAE,CA0EnB;AAED,wBAAsB,8BAA8B,CAClD,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,eAAe,EAAE,CAAC,CAG5B;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,uBAAuB,CAAC,CAAC,IAAI;IACvC,IAAI,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,CAAC,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,GAAG,EAAE,qBAAqB,EAC1B,MAAM,SAAI,EACV,MAAM,SAAM,GACX,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAarC;AAED,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,MAAM,GACX,kBAAkB,EAAE,CAGtB"}
@@ -0,0 +1,102 @@
1
+ import { readFileSync } from "node:fs";
2
+ /**
3
+ * Optional AA adapter. Prefer official export/API when configured.
4
+ * Do not scrape aggressively.
5
+ */
6
+ export function mapArtificialAnalysisRowToSignals(row) {
7
+ const fetchedAt = row.fetchedAt;
8
+ const signals = [];
9
+ const base = {
10
+ source: "artificial_analysis",
11
+ displayName: row.modelName,
12
+ fetchedAt,
13
+ confidence: 0.75,
14
+ };
15
+ if (row.intelligenceIndex != null) {
16
+ signals.push({
17
+ ...base,
18
+ metric: "intelligence",
19
+ value: row.intelligenceIndex,
20
+ higherIsBetter: true,
21
+ taskProfiles: ["deep", "pro", "research", "cyber", "agentic"],
22
+ });
23
+ }
24
+ if (row.codingIndex != null) {
25
+ signals.push({
26
+ ...base,
27
+ metric: "coding",
28
+ value: row.codingIndex,
29
+ higherIsBetter: true,
30
+ taskProfiles: ["coding", "agentic"],
31
+ });
32
+ }
33
+ if (row.agenticIndex != null) {
34
+ signals.push({
35
+ ...base,
36
+ metric: "agentic",
37
+ value: row.agenticIndex,
38
+ higherIsBetter: true,
39
+ taskProfiles: ["agentic", "coding", "research"],
40
+ });
41
+ }
42
+ if (row.costPerTaskUsd != null) {
43
+ signals.push({
44
+ ...base,
45
+ metric: "costPerTask",
46
+ value: row.costPerTaskUsd,
47
+ higherIsBetter: false,
48
+ taskProfiles: ["cheap", "value", "routing", "extraction", "json", "vol"],
49
+ });
50
+ }
51
+ if (row.outputTokensPerSecond != null) {
52
+ signals.push({
53
+ ...base,
54
+ metric: "tokensPerSecond",
55
+ value: row.outputTokensPerSecond,
56
+ higherIsBetter: true,
57
+ taskProfiles: ["fast", "agentic", "coding"],
58
+ });
59
+ }
60
+ if (row.longContextReasoning != null) {
61
+ signals.push({
62
+ ...base,
63
+ metric: "longContext",
64
+ value: row.longContextReasoning,
65
+ higherIsBetter: true,
66
+ taskProfiles: ["long_context", "research", "summarization", "cyber"],
67
+ });
68
+ }
69
+ if (row.nonHallucinationRate != null) {
70
+ signals.push({
71
+ ...base,
72
+ metric: "nonHallucination",
73
+ value: row.nonHallucinationRate,
74
+ higherIsBetter: true,
75
+ taskProfiles: ["research", "pro", "cyber"],
76
+ });
77
+ }
78
+ return signals;
79
+ }
80
+ export async function loadArtificialAnalysisFromJson(path) {
81
+ const raw = JSON.parse(readFileSync(path, "utf8"));
82
+ return raw.flatMap(mapArtificialAnalysisRowToSignals);
83
+ }
84
+ export async function fetchHuggingFaceRows(ref, offset = 0, length = 100) {
85
+ const url = new URL("https://datasets-server.huggingface.co/rows");
86
+ url.searchParams.set("dataset", ref.dataset);
87
+ url.searchParams.set("split", ref.split);
88
+ url.searchParams.set("offset", String(offset));
89
+ url.searchParams.set("length", String(length));
90
+ if (ref.config)
91
+ url.searchParams.set("config", ref.config);
92
+ const res = await fetch(url);
93
+ if (!res.ok) {
94
+ throw new Error(`HF rows fetch failed: ${res.status} ${res.statusText}`);
95
+ }
96
+ return (await res.json());
97
+ }
98
+ export function loadInternalEvalResultsFromJson(path) {
99
+ const raw = JSON.parse(readFileSync(path, "utf8"));
100
+ return Array.isArray(raw) ? raw : [];
101
+ }
102
+ //# sourceMappingURL=adapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../src/evidence/adapters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export type { BenchmarkMetricName, BenchmarkSignal, BenchmarkSourceId, EstimatedTaskShape, InternalEvalResult, InternalEvalTaskId, ModelCapabilities, ModelEvidenceFile, ModelIdentity, ModelIssueSignal, ModelIssueSignalName, ModelPricing, ModelTaskScore, NormalizedModel, OpenRouterModel, PatchValidationError, ProfileChoiceKey, ProfileModelRecommendation, ScoreWeights, TaskProfile, TaskRequirements, } from "./types.js";
2
+ export { fetchOpenRouterModels, normalizeOpenRouterModel, normalizeOpenRouterPricing, tokenPriceToPerMillion, } from "./openRouter.js";
3
+ export { average, clamp01, contextScore, defaultProfileTaskShapes, estimateTaskCostUsd, inverseCostScore, issuePenalty, scoreWeightsByTask, taskRequirements, } from "./scoringConfig.js";
4
+ export { aggregateBenchmarkQuality, modelSatisfiesTask, normalizeRawBenchmarkValue, scoreModelForTask, } from "./scoreModelForTask.js";
5
+ export { buildRecommendationReason, candidateProviderFamiliesByTask, profileChoiceToTaskProfile, recommendModelsForProfiles, summarizeEvidence, } from "./recommend.js";
6
+ export { buildPatchFromApprovedRecommendations, validatePatchAgainstCatalog, } from "./patch.js";
7
+ export { fetchHuggingFaceRows, loadArtificialAnalysisFromJson, loadInternalEvalResultsFromJson, mapArtificialAnalysisRowToSignals, } from "./adapters.js";
8
+ export type { ArtificialAnalysisRawRow } from "./adapterTypes.js";
9
+ export { LOCAL_HARDWARE_PRESETS, LlamaCppProbe, LmStudioProbe, OllamaProbe, OnnxRuntimeProbe, TransformersJsProbe, VllmProbe, probeAllLocalRuntimes, resolveLocalPresetCandidate, } from "./local/probes.js";
10
+ export type { LocalHardwarePreset, LocalModelCandidate, LocalRuntimeKind, LocalRuntimeProbe, LocalRuntimeProbeResult, } from "./local/probes.js";
11
+ export { refreshModelEvidence, } from "./refreshModelEvidence.js";
12
+ export type { RefreshModelEvidenceOptions, RefreshModelEvidenceResult, } from "./refreshModelEvidence.js";
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/evidence/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,0BAA0B,EAC1B,YAAY,EACZ,WAAW,EACX,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,OAAO,EACP,OAAO,EACP,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,0BAA0B,EAC1B,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,yBAAyB,EACzB,+BAA+B,EAC/B,0BAA0B,EAC1B,0BAA0B,EAC1B,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,qCAAqC,EACrC,2BAA2B,GAC5B,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,oBAAoB,EACpB,8BAA8B,EAC9B,+BAA+B,EAC/B,iCAAiC,GAClC,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAElE,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,SAAS,EACT,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,9 @@
1
+ export { fetchOpenRouterModels, normalizeOpenRouterModel, normalizeOpenRouterPricing, tokenPriceToPerMillion, } from "./openRouter.js";
2
+ export { average, clamp01, contextScore, defaultProfileTaskShapes, estimateTaskCostUsd, inverseCostScore, issuePenalty, scoreWeightsByTask, taskRequirements, } from "./scoringConfig.js";
3
+ export { aggregateBenchmarkQuality, modelSatisfiesTask, normalizeRawBenchmarkValue, scoreModelForTask, } from "./scoreModelForTask.js";
4
+ export { buildRecommendationReason, candidateProviderFamiliesByTask, profileChoiceToTaskProfile, recommendModelsForProfiles, summarizeEvidence, } from "./recommend.js";
5
+ export { buildPatchFromApprovedRecommendations, validatePatchAgainstCatalog, } from "./patch.js";
6
+ export { fetchHuggingFaceRows, loadArtificialAnalysisFromJson, loadInternalEvalResultsFromJson, mapArtificialAnalysisRowToSignals, } from "./adapters.js";
7
+ export { LOCAL_HARDWARE_PRESETS, LlamaCppProbe, LmStudioProbe, OllamaProbe, OnnxRuntimeProbe, TransformersJsProbe, VllmProbe, probeAllLocalRuntimes, resolveLocalPresetCandidate, } from "./local/probes.js";
8
+ export { refreshModelEvidence, } from "./refreshModelEvidence.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/evidence/index.ts"],"names":[],"mappings":"AAwBA,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,OAAO,EACP,OAAO,EACP,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,0BAA0B,EAC1B,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,yBAAyB,EACzB,+BAA+B,EAC/B,0BAA0B,EAC1B,0BAA0B,EAC1B,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,qCAAqC,EACrC,2BAA2B,GAC5B,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,oBAAoB,EACpB,8BAA8B,EAC9B,+BAA+B,EAC/B,iCAAiC,GAClC,MAAM,eAAe,CAAC;AAIvB,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,SAAS,EACT,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC;AAU3B,OAAO,EACL,oBAAoB,GACrB,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,58 @@
1
+ export type LocalRuntimeKind = "llama-cpp" | "ollama" | "lmstudio" | "vllm" | "transformersjs" | "onnxruntime";
2
+ export type LocalRuntimeProbeResult = {
3
+ runtime: LocalRuntimeKind;
4
+ available: boolean;
5
+ baseUrl?: string;
6
+ installedModels: string[];
7
+ error?: string;
8
+ };
9
+ export type LocalModelCandidate = {
10
+ runtime: LocalRuntimeKind;
11
+ modelId: string;
12
+ contextLength?: number;
13
+ quantization?: string;
14
+ estimatedMemoryGb?: number;
15
+ supportsJson?: boolean;
16
+ supportsTools?: boolean;
17
+ };
18
+ export type LocalHardwarePreset = "tiny_cpu" | "small_cpu" | "dev_laptop" | "workstation_gpu" | "private_server";
19
+ export interface LocalRuntimeProbe {
20
+ probe(): Promise<LocalRuntimeProbeResult>;
21
+ }
22
+ export declare const LOCAL_HARDWARE_PRESETS: Record<LocalHardwarePreset, {
23
+ preferredRuntimes: LocalRuntimeKind[];
24
+ maxMemoryGb: number;
25
+ preferredContext: number;
26
+ }>;
27
+ export declare class OllamaProbe implements LocalRuntimeProbe {
28
+ private readonly baseUrl;
29
+ constructor(baseUrl?: string);
30
+ probe(): Promise<LocalRuntimeProbeResult>;
31
+ }
32
+ export declare class LmStudioProbe implements LocalRuntimeProbe {
33
+ private readonly baseUrl;
34
+ constructor(baseUrl?: string);
35
+ probe(): Promise<LocalRuntimeProbeResult>;
36
+ }
37
+ export declare class VllmProbe implements LocalRuntimeProbe {
38
+ private readonly baseUrl;
39
+ constructor(baseUrl?: string);
40
+ probe(): Promise<LocalRuntimeProbeResult>;
41
+ }
42
+ /** Env/path presence probe — does not load weights. */
43
+ export declare class LlamaCppProbe implements LocalRuntimeProbe {
44
+ probe(): Promise<LocalRuntimeProbeResult>;
45
+ }
46
+ export declare class TransformersJsProbe implements LocalRuntimeProbe {
47
+ probe(): Promise<LocalRuntimeProbeResult>;
48
+ }
49
+ export declare class OnnxRuntimeProbe implements LocalRuntimeProbe {
50
+ probe(): Promise<LocalRuntimeProbeResult>;
51
+ }
52
+ export declare function probeAllLocalRuntimes(): Promise<LocalRuntimeProbeResult[]>;
53
+ /**
54
+ * Choose an installed local model for a hardware preset.
55
+ * Adapter verified ≠ weights present; callers must probe first.
56
+ */
57
+ export declare function resolveLocalPresetCandidate(preset: LocalHardwarePreset, probes: LocalRuntimeProbeResult[]): LocalModelCandidate | null;
58
+ //# sourceMappingURL=probes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probes.d.ts","sourceRoot":"","sources":["../../../src/evidence/local/probes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GACxB,WAAW,GACX,QAAQ,GACR,UAAU,GACV,MAAM,GACN,gBAAgB,GAChB,aAAa,CAAC;AAElB,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAC3B,UAAU,GACV,WAAW,GACX,YAAY,GACZ,iBAAiB,GACjB,gBAAgB,CAAC;AAErB,MAAM,WAAW,iBAAiB;IAChC,KAAK,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAAC;CAC3C;AAED,eAAO,MAAM,sBAAsB,EAAE,MAAM,CACzC,mBAAmB,EACnB;IACE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CA2BF,CAAC;AAEF,qBAAa,WAAY,YAAW,iBAAiB;IAEjD,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,SACE;IAGtB,KAAK,IAAI,OAAO,CAAC,uBAAuB,CAAC;CA6BhD;AAED,qBAAa,aAAc,YAAW,iBAAiB;IAEnD,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,SACC;IAGrB,KAAK,IAAI,OAAO,CAAC,uBAAuB,CAAC;CA6BhD;AAED,qBAAa,SAAU,YAAW,iBAAiB;IAE/C,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,SACC;IAGrB,KAAK,IAAI,OAAO,CAAC,uBAAuB,CAAC;CA6BhD;AAED,uDAAuD;AACvD,qBAAa,aAAc,YAAW,iBAAiB;IAC/C,KAAK,IAAI,OAAO,CAAC,uBAAuB,CAAC;CAiBhD;AAED,qBAAa,mBAAoB,YAAW,iBAAiB;IACrD,KAAK,IAAI,OAAO,CAAC,uBAAuB,CAAC;CAShD;AAED,qBAAa,gBAAiB,YAAW,iBAAiB;IAClD,KAAK,IAAI,OAAO,CAAC,uBAAuB,CAAC;CAgBhD;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CACpD,uBAAuB,EAAE,CAC1B,CAUA;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,uBAAuB,EAAE,GAChC,mBAAmB,GAAG,IAAI,CAa5B"}
@@ -0,0 +1,210 @@
1
+ export const LOCAL_HARDWARE_PRESETS = {
2
+ tiny_cpu: {
3
+ preferredRuntimes: ["transformersjs", "llama-cpp"],
4
+ maxMemoryGb: 4,
5
+ preferredContext: 2048,
6
+ },
7
+ small_cpu: {
8
+ preferredRuntimes: ["llama-cpp", "ollama", "transformersjs"],
9
+ maxMemoryGb: 8,
10
+ preferredContext: 4096,
11
+ },
12
+ dev_laptop: {
13
+ preferredRuntimes: ["ollama", "lmstudio", "llama-cpp"],
14
+ maxMemoryGb: 16,
15
+ preferredContext: 8192,
16
+ },
17
+ workstation_gpu: {
18
+ preferredRuntimes: ["vllm", "ollama", "lmstudio", "llama-cpp"],
19
+ maxMemoryGb: 48,
20
+ preferredContext: 32_768,
21
+ },
22
+ private_server: {
23
+ preferredRuntimes: ["vllm", "ollama", "llama-cpp"],
24
+ maxMemoryGb: 128,
25
+ preferredContext: 131_072,
26
+ },
27
+ };
28
+ export class OllamaProbe {
29
+ baseUrl;
30
+ constructor(baseUrl = process.env.OLLAMA_BASE_URL ??
31
+ "http://localhost:11434") {
32
+ this.baseUrl = baseUrl;
33
+ }
34
+ async probe() {
35
+ try {
36
+ const res = await fetch(`${this.baseUrl}/api/tags`);
37
+ if (!res.ok) {
38
+ return {
39
+ runtime: "ollama",
40
+ available: false,
41
+ installedModels: [],
42
+ error: `${res.status} ${res.statusText}`,
43
+ };
44
+ }
45
+ const json = (await res.json());
46
+ return {
47
+ runtime: "ollama",
48
+ available: true,
49
+ baseUrl: this.baseUrl,
50
+ installedModels: json.models?.map((m) => m.name) ?? [],
51
+ };
52
+ }
53
+ catch (err) {
54
+ return {
55
+ runtime: "ollama",
56
+ available: false,
57
+ installedModels: [],
58
+ error: err instanceof Error ? err.message : String(err),
59
+ };
60
+ }
61
+ }
62
+ }
63
+ export class LmStudioProbe {
64
+ baseUrl;
65
+ constructor(baseUrl = process.env.LMSTUDIO_BASE_URL ??
66
+ "http://localhost:1234") {
67
+ this.baseUrl = baseUrl;
68
+ }
69
+ async probe() {
70
+ try {
71
+ const res = await fetch(`${this.baseUrl}/v1/models`);
72
+ if (!res.ok) {
73
+ return {
74
+ runtime: "lmstudio",
75
+ available: false,
76
+ installedModels: [],
77
+ error: `${res.status} ${res.statusText}`,
78
+ };
79
+ }
80
+ const json = (await res.json());
81
+ return {
82
+ runtime: "lmstudio",
83
+ available: true,
84
+ baseUrl: this.baseUrl,
85
+ installedModels: json.data?.map((m) => m.id) ?? [],
86
+ };
87
+ }
88
+ catch (err) {
89
+ return {
90
+ runtime: "lmstudio",
91
+ available: false,
92
+ installedModels: [],
93
+ error: err instanceof Error ? err.message : String(err),
94
+ };
95
+ }
96
+ }
97
+ }
98
+ export class VllmProbe {
99
+ baseUrl;
100
+ constructor(baseUrl = process.env.VLLM_BASE_URL ??
101
+ "http://localhost:8000") {
102
+ this.baseUrl = baseUrl;
103
+ }
104
+ async probe() {
105
+ try {
106
+ const res = await fetch(`${this.baseUrl}/v1/models`);
107
+ if (!res.ok) {
108
+ return {
109
+ runtime: "vllm",
110
+ available: false,
111
+ installedModels: [],
112
+ error: `${res.status} ${res.statusText}`,
113
+ };
114
+ }
115
+ const json = (await res.json());
116
+ return {
117
+ runtime: "vllm",
118
+ available: true,
119
+ baseUrl: this.baseUrl,
120
+ installedModels: json.data?.map((m) => m.id) ?? [],
121
+ };
122
+ }
123
+ catch (err) {
124
+ return {
125
+ runtime: "vllm",
126
+ available: false,
127
+ installedModels: [],
128
+ error: err instanceof Error ? err.message : String(err),
129
+ };
130
+ }
131
+ }
132
+ }
133
+ /** Env/path presence probe — does not load weights. */
134
+ export class LlamaCppProbe {
135
+ async probe() {
136
+ const path = process.env.LLAMA_CPP_MODEL_PATH ?? process.env.LLAMA_CPP_MODEL;
137
+ if (!path) {
138
+ return {
139
+ runtime: "llama-cpp",
140
+ available: false,
141
+ installedModels: [],
142
+ error: "LLAMA_CPP_MODEL_PATH not set",
143
+ };
144
+ }
145
+ return {
146
+ runtime: "llama-cpp",
147
+ available: true,
148
+ installedModels: [path],
149
+ };
150
+ }
151
+ }
152
+ export class TransformersJsProbe {
153
+ async probe() {
154
+ const modelId = process.env.TRANSFORMERS_JS_MODEL_ID ?? "Xenova/distilbart-cnn-6-6";
155
+ return {
156
+ runtime: "transformersjs",
157
+ available: true,
158
+ installedModels: [modelId],
159
+ };
160
+ }
161
+ }
162
+ export class OnnxRuntimeProbe {
163
+ async probe() {
164
+ const path = process.env.ONNX_MODEL_PATH;
165
+ if (!path) {
166
+ return {
167
+ runtime: "onnxruntime",
168
+ available: false,
169
+ installedModels: [],
170
+ error: "ONNX_MODEL_PATH not set",
171
+ };
172
+ }
173
+ return {
174
+ runtime: "onnxruntime",
175
+ available: true,
176
+ installedModels: [path],
177
+ };
178
+ }
179
+ }
180
+ export async function probeAllLocalRuntimes() {
181
+ const probes = [
182
+ new LlamaCppProbe(),
183
+ new OllamaProbe(),
184
+ new LmStudioProbe(),
185
+ new VllmProbe(),
186
+ new TransformersJsProbe(),
187
+ new OnnxRuntimeProbe(),
188
+ ];
189
+ return Promise.all(probes.map((p) => p.probe()));
190
+ }
191
+ /**
192
+ * Choose an installed local model for a hardware preset.
193
+ * Adapter verified ≠ weights present; callers must probe first.
194
+ */
195
+ export function resolveLocalPresetCandidate(preset, probes) {
196
+ const spec = LOCAL_HARDWARE_PRESETS[preset];
197
+ for (const runtime of spec.preferredRuntimes) {
198
+ const probe = probes.find((p) => p.runtime === runtime && p.available);
199
+ if (!probe || probe.installedModels.length === 0)
200
+ continue;
201
+ return {
202
+ runtime,
203
+ modelId: probe.installedModels[0],
204
+ contextLength: spec.preferredContext,
205
+ estimatedMemoryGb: spec.maxMemoryGb,
206
+ };
207
+ }
208
+ return null;
209
+ }
210
+ //# sourceMappingURL=probes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probes.js","sourceRoot":"","sources":["../../../src/evidence/local/probes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { ModelPricing, NormalizedModel, OpenRouterModel } from "./types.js";
2
+ export type FetchOpenRouterModelsOptions = {
3
+ outputModalities?: Array<"text" | "image" | "audio" | "embeddings" | "all">;
4
+ supportedParameters?: string[];
5
+ sort?: "pricing-low-to-high" | "pricing-high-to-low" | "context-high-to-low" | "throughput-high-to-low" | "latency-low-to-high" | "most-popular" | "top-weekly" | "newest";
6
+ };
7
+ export declare function fetchOpenRouterModels(options?: FetchOpenRouterModelsOptions): Promise<OpenRouterModel[]>;
8
+ export declare function tokenPriceToPerMillion(value?: string): number | undefined;
9
+ export declare function normalizeOpenRouterPricing(model: OpenRouterModel): ModelPricing;
10
+ export declare function normalizeOpenRouterModel(model: OpenRouterModel): NormalizedModel;
11
+ //# sourceMappingURL=openRouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openRouter.d.ts","sourceRoot":"","sources":["../../src/evidence/openRouter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,YAAY,EACZ,eAAe,EACf,eAAe,EAEhB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,4BAA4B,GAAG;IACzC,gBAAgB,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,GAAG,KAAK,CAAC,CAAC;IAC5E,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,IAAI,CAAC,EACD,qBAAqB,GACrB,qBAAqB,GACrB,qBAAqB,GACrB,wBAAwB,GACxB,qBAAqB,GACrB,cAAc,GACd,YAAY,GACZ,QAAQ,CAAC;CACd,CAAC;AAEF,wBAAsB,qBAAqB,CACzC,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,eAAe,EAAE,CAAC,CA4B5B;AAED,wBAAgB,sBAAsB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKzE;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,eAAe,GAAG,YAAY,CAY/E;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,eAAe,GAAG,eAAe,CAmChF"}
@@ -0,0 +1,80 @@
1
+ import { OPENROUTER_MODELS_API_URL } from "../constants.js";
2
+ import { normalizeOpenRouterId } from "../openRouterProviderMap.js";
3
+ import { roundCatalogPricingUsd } from "../modelsCatalog.js";
4
+ export async function fetchOpenRouterModels(options = {}) {
5
+ const url = new URL(OPENROUTER_MODELS_API_URL);
6
+ if (options.outputModalities?.length) {
7
+ url.searchParams.set("output_modalities", options.outputModalities.join(","));
8
+ }
9
+ if (options.supportedParameters?.length) {
10
+ url.searchParams.set("supported_parameters", options.supportedParameters.join(","));
11
+ }
12
+ if (options.sort) {
13
+ url.searchParams.set("sort", options.sort);
14
+ }
15
+ const res = await fetch(url);
16
+ if (!res.ok) {
17
+ throw new Error(`OpenRouter models fetch failed: ${res.status} ${res.statusText}`);
18
+ }
19
+ const json = (await res.json());
20
+ if (!Array.isArray(json.data)) {
21
+ throw new Error("OpenRouter response did not contain data[]");
22
+ }
23
+ return json.data;
24
+ }
25
+ export function tokenPriceToPerMillion(value) {
26
+ if (value == null || value === "")
27
+ return undefined;
28
+ const numeric = Number(value);
29
+ if (!Number.isFinite(numeric))
30
+ return undefined;
31
+ return roundCatalogPricingUsd(numeric * 1_000_000);
32
+ }
33
+ export function normalizeOpenRouterPricing(model) {
34
+ const p = model.pricing ?? {};
35
+ return {
36
+ inputUsdPer1M: tokenPriceToPerMillion(p.prompt),
37
+ outputUsdPer1M: tokenPriceToPerMillion(p.completion),
38
+ requestUsd: p.request ? Number(p.request) : undefined,
39
+ imageUsd: p.image ? Number(p.image) : undefined,
40
+ webSearchUsd: p.web_search ? Number(p.web_search) : undefined,
41
+ reasoningUsdPer1M: tokenPriceToPerMillion(p.internal_reasoning),
42
+ cacheReadUsdPer1M: tokenPriceToPerMillion(p.input_cache_read),
43
+ cacheWriteUsdPer1M: tokenPriceToPerMillion(p.input_cache_write),
44
+ };
45
+ }
46
+ export function normalizeOpenRouterModel(model) {
47
+ const identity = normalizeOpenRouterId(model.id);
48
+ const supported = new Set(model.supported_parameters ?? []);
49
+ const architecture = model.architecture ?? {};
50
+ const topProvider = model.top_provider ?? {};
51
+ const capabilities = {
52
+ inputModalities: architecture.input_modalities ?? [],
53
+ outputModalities: architecture.output_modalities ?? [],
54
+ contextLength: topProvider.context_length ?? model.context_length,
55
+ maxOutputTokens: topProvider.max_completion_tokens,
56
+ supportsTools: supported.has("tools"),
57
+ supportsToolChoice: supported.has("tool_choice"),
58
+ supportsStructuredOutputs: supported.has("structured_outputs"),
59
+ supportsResponseFormat: supported.has("response_format"),
60
+ supportsReasoning: supported.has("reasoning"),
61
+ supportsIncludeReasoning: supported.has("include_reasoning"),
62
+ supportsTemperature: supported.has("temperature"),
63
+ supportsSeed: supported.has("seed"),
64
+ isDeprecated: Boolean(model.expiration_date),
65
+ deprecationDate: model.expiration_date ?? undefined,
66
+ };
67
+ return {
68
+ identity: {
69
+ ...identity,
70
+ canonicalSlug: model.canonical_slug,
71
+ displayName: model.name,
72
+ },
73
+ source: "openrouter",
74
+ capabilities,
75
+ pricing: normalizeOpenRouterPricing(model),
76
+ raw: { openRouter: model },
77
+ fetchedAt: new Date().toISOString(),
78
+ };
79
+ }
80
+ //# sourceMappingURL=openRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openRouter.js","sourceRoot":"","sources":["../../src/evidence/openRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAuB7D,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,UAAwC,EAAE;IAE1C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAE/C,IAAI,OAAO,CAAC,gBAAgB,EAAE,MAAM,EAAE,CAAC;QACrC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,EAAE,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,OAAO,CAAC,mBAAmB,EAAE,MAAM,EAAE,CAAC;QACxC,GAAG,CAAC,YAAY,CAAC,GAAG,CAClB,sBAAsB,EACtB,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CACtC,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,mCAAmC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAClE,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA4B,CAAC;IAC3D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IACpD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IAChD,OAAO,sBAAsB,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAsB;IAC/D,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;IAC9B,OAAO;QACL,aAAa,EAAE,sBAAsB,CAAC,CAAC,CAAC,MAAM,CAAC;QAC/C,cAAc,EAAE,sBAAsB,CAAC,CAAC,CAAC,UAAU,CAAC;QACpD,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;QACrD,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;QAC/C,YAAY,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;QAC7D,iBAAiB,EAAE,sBAAsB,CAAC,CAAC,CAAC,kBAAkB,CAAC;QAC/D,iBAAiB,EAAE,sBAAsB,CAAC,CAAC,CAAC,gBAAgB,CAAC;QAC7D,kBAAkB,EAAE,sBAAsB,CAAC,CAAC,CAAC,iBAAiB,CAAC;KAChE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAsB;IAC7D,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;IAC9C,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;IAE7C,MAAM,YAAY,GAAsB;QACtC,eAAe,EAAE,YAAY,CAAC,gBAAgB,IAAI,EAAE;QACpD,gBAAgB,EAAE,YAAY,CAAC,iBAAiB,IAAI,EAAE;QACtD,aAAa,EAAE,WAAW,CAAC,cAAc,IAAI,KAAK,CAAC,cAAc;QACjE,eAAe,EAAE,WAAW,CAAC,qBAAqB;QAClD,aAAa,EAAE,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;QACrC,kBAAkB,EAAE,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;QAChD,yBAAyB,EAAE,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC;QAC9D,sBAAsB,EAAE,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC;QACxD,iBAAiB,EAAE,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;QAC7C,wBAAwB,EAAE,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAC5D,mBAAmB,EAAE,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;QACjD,YAAY,EAAE,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;QACnC,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC;QAC5C,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,SAAS;KACpD,CAAC;IAEF,OAAO;QACL,QAAQ,EAAE;YACR,GAAG,QAAQ;YACX,aAAa,EAAE,KAAK,CAAC,cAAc;YACnC,WAAW,EAAE,KAAK,CAAC,IAAI;SACxB;QACD,MAAM,EAAE,YAAY;QACpB,YAAY;QACZ,OAAO,EAAE,0BAA0B,CAAC,KAAK,CAAC;QAC1C,GAAG,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE;QAC1B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;AACJ,CAAC"}