@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.
- package/README.md +39 -32
- package/dist/buildCatalogFromOpenRouterApi.d.ts +3 -1
- package/dist/buildCatalogFromOpenRouterApi.d.ts.map +1 -1
- package/dist/buildCatalogFromOpenRouterApi.js +11 -69
- package/dist/buildCatalogFromOpenRouterApi.js.map +1 -1
- package/dist/constants.d.ts +5 -3
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +15 -2
- package/dist/constants.js.map +1 -1
- package/dist/data/models-catalog.json +5036 -2055
- package/dist/data/models-profiles.json +3442 -866
- package/dist/data/models-registry.json +4594 -2772
- package/dist/ensureRemoteOpenRouterBackend.d.ts +4 -0
- package/dist/ensureRemoteOpenRouterBackend.d.ts.map +1 -0
- package/dist/ensureRemoteOpenRouterBackend.js +33 -0
- package/dist/ensureRemoteOpenRouterBackend.js.map +1 -0
- package/dist/evidence/adapterTypes.d.ts +14 -0
- package/dist/evidence/adapterTypes.d.ts.map +1 -0
- package/dist/evidence/adapterTypes.js +2 -0
- package/dist/evidence/adapterTypes.js.map +1 -0
- package/dist/evidence/adapters.d.ts +28 -0
- package/dist/evidence/adapters.d.ts.map +1 -0
- package/dist/evidence/adapters.js +102 -0
- package/dist/evidence/adapters.js.map +1 -0
- package/dist/evidence/index.d.ts +13 -0
- package/dist/evidence/index.d.ts.map +1 -0
- package/dist/evidence/index.js +9 -0
- package/dist/evidence/index.js.map +1 -0
- package/dist/evidence/local/probes.d.ts +58 -0
- package/dist/evidence/local/probes.d.ts.map +1 -0
- package/dist/evidence/local/probes.js +210 -0
- package/dist/evidence/local/probes.js.map +1 -0
- package/dist/evidence/openRouter.d.ts +11 -0
- package/dist/evidence/openRouter.d.ts.map +1 -0
- package/dist/evidence/openRouter.js +80 -0
- package/dist/evidence/openRouter.js.map +1 -0
- package/dist/evidence/patch.d.ts +8 -0
- package/dist/evidence/patch.d.ts.map +1 -0
- package/dist/evidence/patch.js +50 -0
- package/dist/evidence/patch.js.map +1 -0
- package/dist/evidence/recommend.d.ts +20 -0
- package/dist/evidence/recommend.d.ts.map +1 -0
- package/dist/evidence/recommend.js +142 -0
- package/dist/evidence/recommend.js.map +1 -0
- package/dist/evidence/refreshModelEvidence.d.ts +25 -0
- package/dist/evidence/refreshModelEvidence.d.ts.map +1 -0
- package/dist/evidence/refreshModelEvidence.js +104 -0
- package/dist/evidence/refreshModelEvidence.js.map +1 -0
- package/dist/evidence/scoreModelForTask.d.ts +13 -0
- package/dist/evidence/scoreModelForTask.d.ts.map +1 -0
- package/dist/evidence/scoreModelForTask.js +137 -0
- package/dist/evidence/scoreModelForTask.js.map +1 -0
- package/dist/evidence/scoringConfig.d.ts +11 -0
- package/dist/evidence/scoringConfig.d.ts.map +1 -0
- package/dist/evidence/scoringConfig.js +259 -0
- package/dist/evidence/scoringConfig.js.map +1 -0
- package/dist/evidence/types.d.ts +218 -0
- package/dist/evidence/types.d.ts.map +1 -0
- package/dist/evidence/types.js +2 -0
- package/dist/evidence/types.js.map +1 -0
- package/dist/finalProfileModelMappingPatch.d.ts +31 -0
- package/dist/finalProfileModelMappingPatch.d.ts.map +1 -0
- package/dist/finalProfileModelMappingPatch.js +405 -0
- package/dist/finalProfileModelMappingPatch.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/inferModelFamily.d.ts +8 -0
- package/dist/inferModelFamily.d.ts.map +1 -0
- package/dist/inferModelFamily.js +242 -0
- package/dist/inferModelFamily.js.map +1 -0
- package/dist/modelIdentity.d.ts.map +1 -1
- package/dist/modelIdentity.js +2 -1
- package/dist/modelIdentity.js.map +1 -1
- package/dist/modelsCatalog.d.ts +2 -2
- package/dist/modelsCatalog.d.ts.map +1 -1
- package/dist/modelsCatalog.js +36 -34
- package/dist/modelsCatalog.js.map +1 -1
- package/dist/openRouterProviderMap.d.ts +57 -0
- package/dist/openRouterProviderMap.d.ts.map +1 -0
- package/dist/openRouterProviderMap.js +120 -0
- package/dist/openRouterProviderMap.js.map +1 -0
- package/dist/profileRegistryV3.d.ts.map +1 -1
- package/dist/profileRegistryV3.js +30 -23
- package/dist/profileRegistryV3.js.map +1 -1
- package/dist/resolveInstructionTierAndBackend.d.ts.map +1 -1
- package/dist/resolveInstructionTierAndBackend.js +18 -5
- package/dist/resolveInstructionTierAndBackend.js.map +1 -1
- package/dist/resolveLocalRuntime.d.ts +22 -0
- package/dist/resolveLocalRuntime.d.ts.map +1 -0
- package/dist/resolveLocalRuntime.js +60 -0
- package/dist/resolveLocalRuntime.js.map +1 -0
- package/dist/resolveModelRouting.d.ts.map +1 -1
- package/dist/resolveModelRouting.js +8 -1
- package/dist/resolveModelRouting.js.map +1 -1
- package/dist/sourceCatalogProviders.d.ts +9 -0
- package/dist/sourceCatalogProviders.d.ts.map +1 -0
- package/dist/sourceCatalogProviders.js +51 -0
- package/dist/sourceCatalogProviders.js.map +1 -0
- package/dist/types.d.ts +6 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/validateFunctionalRouting.d.ts +14 -0
- package/dist/validateFunctionalRouting.d.ts.map +1 -0
- package/dist/validateFunctionalRouting.js +178 -0
- package/dist/validateFunctionalRouting.js.map +1 -0
- package/dist/validateProfileTransportPolicy.d.ts.map +1 -1
- package/dist/validateProfileTransportPolicy.js +19 -5
- package/dist/validateProfileTransportPolicy.js.map +1 -1
- package/dist/validation/openRouterAlignment.d.ts +1 -1
- package/dist/validation/openRouterAlignment.d.ts.map +1 -1
- package/dist/validation/validateModelsProfilesJson.d.ts.map +1 -1
- package/dist/validation/validateModelsProfilesJson.js +6 -3
- package/dist/validation/validateModelsProfilesJson.js.map +1 -1
- package/dist/vendorModelId.d.ts +1 -1
- package/dist/vendorModelId.d.ts.map +1 -1
- package/dist/vendorModelId.js +4 -3
- package/dist/vendorModelId.js.map +1 -1
- 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 @@
|
|
|
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":"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"}
|