@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.
- package/LICENSE +21 -21
- package/README.md +1086 -1075
- package/dist/browser.d.ts +10 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +22 -0
- package/dist/browser.js.map +1 -0
- 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 +17393 -14412
- package/dist/data/models-profiles.bak.json +2336 -2336
- package/dist/data/models-profiles.json +10370 -6170
- package/dist/data/models-profiles.schema.json +240 -240
- package/dist/data/models-registry.json +11192 -8906
- 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 +10 -0
- package/dist/inferModelFamily.d.ts.map +1 -0
- package/dist/inferModelFamily.js +273 -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 +90 -84
- package/dist/data/openrouter-models-catalog.json +0 -857
- package/dist/data/profiles-shortcuts.json +0 -295
- package/dist/isKnownProfileInput.d.ts +0 -9
- package/dist/isKnownProfileInput.d.ts.map +0 -1
- package/dist/isKnownProfileInput.js +0 -14
- package/dist/isKnownProfileInput.js.map +0 -1
- package/dist/isKnownProfileOrShortcut.d.ts +0 -6
- package/dist/isKnownProfileOrShortcut.d.ts.map +0 -1
- package/dist/isKnownProfileOrShortcut.js +0 -11
- package/dist/isKnownProfileOrShortcut.js.map +0 -1
- package/dist/legacyGraphEngineAliasMap.d.ts +0 -13
- package/dist/legacyGraphEngineAliasMap.d.ts.map +0 -1
- package/dist/legacyGraphEngineAliasMap.js +0 -16
- package/dist/legacyGraphEngineAliasMap.js.map +0 -1
- package/dist/listAIShortcuts.d.ts +0 -4
- package/dist/listAIShortcuts.d.ts.map +0 -1
- package/dist/listAIShortcuts.js +0 -12
- package/dist/listAIShortcuts.js.map +0 -1
- package/dist/profileDiscoveryMatch.d.ts +0 -15
- package/dist/profileDiscoveryMatch.d.ts.map +0 -1
- package/dist/profileDiscoveryMatch.js +0 -18
- package/dist/profileDiscoveryMatch.js.map +0 -1
- package/dist/profileInputMatch.d.ts +0 -20
- package/dist/profileInputMatch.d.ts.map +0 -1
- package/dist/profileInputMatch.js +0 -30
- package/dist/profileInputMatch.js.map +0 -1
- package/dist/profileModelFallback.d.ts +0 -13
- package/dist/profileModelFallback.d.ts.map +0 -1
- package/dist/profileModelFallback.js +0 -180
- 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"}
|