@higher.archi/boe 1.0.20 → 1.0.22
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/dist/core/types/rule.d.ts +1 -1
- package/dist/core/types/rule.d.ts.map +1 -1
- package/dist/engines/ensemble/index.d.ts +2 -0
- package/dist/engines/ensemble/index.d.ts.map +1 -1
- package/dist/engines/ensemble/index.js +8 -1
- package/dist/engines/ensemble/index.js.map +1 -1
- package/dist/engines/ensemble/members.d.ts +66 -0
- package/dist/engines/ensemble/members.d.ts.map +1 -0
- package/dist/engines/ensemble/members.js +86 -0
- package/dist/engines/ensemble/members.js.map +1 -0
- package/dist/engines/ranking/compiler.d.ts +12 -0
- package/dist/engines/ranking/compiler.d.ts.map +1 -0
- package/dist/engines/ranking/compiler.js +163 -0
- package/dist/engines/ranking/compiler.js.map +1 -0
- package/dist/engines/ranking/engine.d.ts +48 -0
- package/dist/engines/ranking/engine.d.ts.map +1 -0
- package/dist/engines/ranking/engine.js +89 -0
- package/dist/engines/ranking/engine.js.map +1 -0
- package/dist/engines/ranking/index.d.ts +9 -0
- package/dist/engines/ranking/index.d.ts.map +1 -0
- package/dist/engines/ranking/index.js +23 -0
- package/dist/engines/ranking/index.js.map +1 -0
- package/dist/engines/ranking/strategy.d.ts +21 -0
- package/dist/engines/ranking/strategy.d.ts.map +1 -0
- package/dist/engines/ranking/strategy.js +250 -0
- package/dist/engines/ranking/strategy.js.map +1 -0
- package/dist/engines/ranking/types.d.ts +142 -0
- package/dist/engines/ranking/types.d.ts.map +1 -0
- package/dist/engines/ranking/types.js +46 -0
- package/dist/engines/ranking/types.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/core/types/rule.ts +1 -1
- package/src/engines/ensemble/index.ts +9 -0
- package/src/engines/ensemble/members.ts +156 -0
- package/src/engines/ranking/compiler.ts +194 -0
- package/src/engines/ranking/engine.ts +120 -0
- package/src/engines/ranking/index.ts +46 -0
- package/src/engines/ranking/strategy.ts +333 -0
- package/src/engines/ranking/types.ts +231 -0
- package/src/index.ts +41 -2
|
@@ -21,7 +21,7 @@ export type ValidityDuration = {
|
|
|
21
21
|
months?: number;
|
|
22
22
|
from: string;
|
|
23
23
|
};
|
|
24
|
-
export type RuleSetMode = "forward" | "scoring" | "backward" | "sequential" | "fuzzy" | "bayesian" | "monte-carlo" | "state-machine" | "constraint" | "utility" | "defeasible" | "expert" | "pricing" | "ensemble";
|
|
24
|
+
export type RuleSetMode = "forward" | "scoring" | "backward" | "sequential" | "fuzzy" | "bayesian" | "monte-carlo" | "state-machine" | "constraint" | "utility" | "defeasible" | "expert" | "pricing" | "ensemble" | "ranking";
|
|
25
25
|
export type BaseRule = {
|
|
26
26
|
id: string;
|
|
27
27
|
name?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../src/core/types/rule.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAM7C,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAMF;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAMF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,OAAO,GAAG,UAAU,GAAG,aAAa,GAAG,eAAe,GAAG,YAAY,GAAG,SAAS,GAAG,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../src/core/types/rule.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAM7C,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAMF;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAMF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,OAAO,GAAG,UAAU,GAAG,aAAa,GAAG,eAAe,GAAG,YAAY,GAAG,SAAS,GAAG,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AAE/N,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,SAAS,CAAC;IAGjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC;IAGd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAMF,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB,CAAC;AAMF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,sBAAsB,EAAE,CAAC;IACjC,IAAI,CAAC,EAAE,iBAAiB,CAAC;IAGzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;IAGnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC"}
|
|
@@ -6,4 +6,6 @@ export { compileEnsembleRuleSet } from './compiler';
|
|
|
6
6
|
export { EnsembleStrategy, ensembleStrategy } from './strategy';
|
|
7
7
|
export { EnsembleEngine } from './engine';
|
|
8
8
|
export { summarizeEnsemble } from './summary';
|
|
9
|
+
export { bayesianMember, fuzzyMember, monteCarloMember, expertMember, scoringMember } from './members';
|
|
10
|
+
export type { BayesianMemberConfig, FuzzyMemberConfig, MonteCarloMemberConfig, ExpertMemberConfig, ScoringMemberConfig } from './members';
|
|
9
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/engines/ensemble/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,cAAc,EACd,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,uBAAuB,EACvB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAGpD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGhE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/engines/ensemble/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,cAAc,EACd,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,uBAAuB,EACvB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAGpD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGhE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAG9C,OAAO,EACL,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAC3E,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,oBAAoB,EAAE,iBAAiB,EAAE,sBAAsB,EAC/D,kBAAkB,EAAE,mBAAmB,EACxC,MAAM,WAAW,CAAC"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Ensemble Engine — Multi-Model Score Fusion
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.summarizeEnsemble = exports.EnsembleEngine = exports.ensembleStrategy = exports.EnsembleStrategy = exports.compileEnsembleRuleSet = void 0;
|
|
6
|
+
exports.scoringMember = exports.expertMember = exports.monteCarloMember = exports.fuzzyMember = exports.bayesianMember = exports.summarizeEnsemble = exports.EnsembleEngine = exports.ensembleStrategy = exports.EnsembleStrategy = exports.compileEnsembleRuleSet = void 0;
|
|
7
7
|
// Compiler
|
|
8
8
|
var compiler_1 = require("./compiler");
|
|
9
9
|
Object.defineProperty(exports, "compileEnsembleRuleSet", { enumerable: true, get: function () { return compiler_1.compileEnsembleRuleSet; } });
|
|
@@ -17,4 +17,11 @@ Object.defineProperty(exports, "EnsembleEngine", { enumerable: true, get: functi
|
|
|
17
17
|
// Summary
|
|
18
18
|
var summary_1 = require("./summary");
|
|
19
19
|
Object.defineProperty(exports, "summarizeEnsemble", { enumerable: true, get: function () { return summary_1.summarizeEnsemble; } });
|
|
20
|
+
// Member adapter factories
|
|
21
|
+
var members_1 = require("./members");
|
|
22
|
+
Object.defineProperty(exports, "bayesianMember", { enumerable: true, get: function () { return members_1.bayesianMember; } });
|
|
23
|
+
Object.defineProperty(exports, "fuzzyMember", { enumerable: true, get: function () { return members_1.fuzzyMember; } });
|
|
24
|
+
Object.defineProperty(exports, "monteCarloMember", { enumerable: true, get: function () { return members_1.monteCarloMember; } });
|
|
25
|
+
Object.defineProperty(exports, "expertMember", { enumerable: true, get: function () { return members_1.expertMember; } });
|
|
26
|
+
Object.defineProperty(exports, "scoringMember", { enumerable: true, get: function () { return members_1.scoringMember; } });
|
|
20
27
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engines/ensemble/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAsBH,WAAW;AACX,uCAAoD;AAA3C,kHAAA,sBAAsB,OAAA;AAE/B,WAAW;AACX,uCAAgE;AAAvD,4GAAA,gBAAgB,OAAA;AAAE,4GAAA,gBAAgB,OAAA;AAE3C,SAAS;AACT,mCAA0C;AAAjC,wGAAA,cAAc,OAAA;AAEvB,UAAU;AACV,qCAA8C;AAArC,4GAAA,iBAAiB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engines/ensemble/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAsBH,WAAW;AACX,uCAAoD;AAA3C,kHAAA,sBAAsB,OAAA;AAE/B,WAAW;AACX,uCAAgE;AAAvD,4GAAA,gBAAgB,OAAA;AAAE,4GAAA,gBAAgB,OAAA;AAE3C,SAAS;AACT,mCAA0C;AAAjC,wGAAA,cAAc,OAAA;AAEvB,UAAU;AACV,qCAA8C;AAArC,4GAAA,iBAAiB,OAAA;AAE1B,2BAA2B;AAC3B,qCAEmB;AADjB,yGAAA,cAAc,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAAE,uGAAA,YAAY,OAAA;AAAE,wGAAA,aAAa,OAAA"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ensemble Member Adapter Factories
|
|
3
|
+
*
|
|
4
|
+
* Factory functions that wrap non-scoring engines (Bayesian, Fuzzy, etc.)
|
|
5
|
+
* into CustomMemberDef or ScoringMemberDef for use in ensemble rulesets.
|
|
6
|
+
*/
|
|
7
|
+
import type { ScoreExtractor, ConfidenceExtractor, CustomMemberDef, ScoringMemberDef } from './types';
|
|
8
|
+
import type { CompiledBayesianRuleSet, BayesianOptions, BayesianResult } from '../bayesian';
|
|
9
|
+
import type { CompiledFuzzyRuleSet, FuzzyOptions, FuzzyResult } from '../fuzzy';
|
|
10
|
+
import type { CompiledMonteCarloRuleSet, MonteCarloOptions, MonteCarloResult } from '../monte-carlo';
|
|
11
|
+
import type { CompiledExpertRuleSet, ExpertOptions, ExpertResult } from '../expert';
|
|
12
|
+
import type { CompiledScoringRuleSet, ScoringOptions } from '../scoring/types';
|
|
13
|
+
export type BayesianMemberConfig = {
|
|
14
|
+
id: string;
|
|
15
|
+
name?: string;
|
|
16
|
+
weight: number;
|
|
17
|
+
ruleset: CompiledBayesianRuleSet;
|
|
18
|
+
extractScore: ScoreExtractor<BayesianResult>;
|
|
19
|
+
extractConfidence?: ConfidenceExtractor<BayesianResult>;
|
|
20
|
+
options?: BayesianOptions;
|
|
21
|
+
};
|
|
22
|
+
export type FuzzyMemberConfig = {
|
|
23
|
+
id: string;
|
|
24
|
+
name?: string;
|
|
25
|
+
weight: number;
|
|
26
|
+
ruleset: CompiledFuzzyRuleSet;
|
|
27
|
+
extractScore: ScoreExtractor<FuzzyResult>;
|
|
28
|
+
extractConfidence?: ConfidenceExtractor<FuzzyResult>;
|
|
29
|
+
options?: FuzzyOptions;
|
|
30
|
+
};
|
|
31
|
+
export type MonteCarloMemberConfig = {
|
|
32
|
+
id: string;
|
|
33
|
+
name?: string;
|
|
34
|
+
weight: number;
|
|
35
|
+
ruleset: CompiledMonteCarloRuleSet;
|
|
36
|
+
extractScore: ScoreExtractor<MonteCarloResult>;
|
|
37
|
+
extractConfidence?: ConfidenceExtractor<MonteCarloResult>;
|
|
38
|
+
options?: MonteCarloOptions;
|
|
39
|
+
};
|
|
40
|
+
export type ExpertMemberConfig = {
|
|
41
|
+
id: string;
|
|
42
|
+
name?: string;
|
|
43
|
+
weight: number;
|
|
44
|
+
ruleset: CompiledExpertRuleSet;
|
|
45
|
+
extractScore: ScoreExtractor<ExpertResult>;
|
|
46
|
+
extractConfidence?: ConfidenceExtractor<ExpertResult>;
|
|
47
|
+
options?: ExpertOptions;
|
|
48
|
+
};
|
|
49
|
+
export type ScoringMemberConfig = {
|
|
50
|
+
id: string;
|
|
51
|
+
name?: string;
|
|
52
|
+
weight: number;
|
|
53
|
+
ruleset: CompiledScoringRuleSet;
|
|
54
|
+
options?: ScoringOptions;
|
|
55
|
+
};
|
|
56
|
+
/** Wrap a Bayesian engine as an ensemble member. Default confidence uses result.confidence. */
|
|
57
|
+
export declare function bayesianMember(config: BayesianMemberConfig): CustomMemberDef;
|
|
58
|
+
/** Wrap a Fuzzy engine as an ensemble member. Default confidence is 1.0 (outputs are crisp). */
|
|
59
|
+
export declare function fuzzyMember(config: FuzzyMemberConfig): CustomMemberDef;
|
|
60
|
+
/** Wrap a Monte Carlo engine as an ensemble member. Default confidence is 1.0 (domain-specific). */
|
|
61
|
+
export declare function monteCarloMember(config: MonteCarloMemberConfig): CustomMemberDef;
|
|
62
|
+
/** Wrap an Expert engine as an ensemble member. Default confidence is 1.0 (per-conclusion only). */
|
|
63
|
+
export declare function expertMember(config: ExpertMemberConfig): CustomMemberDef;
|
|
64
|
+
/** Shorthand for creating a ScoringMemberDef. Consistency helper, no wrapping needed. */
|
|
65
|
+
export declare function scoringMember(config: ScoringMemberConfig): ScoringMemberDef;
|
|
66
|
+
//# sourceMappingURL=members.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"members.d.ts","sourceRoot":"","sources":["../../../src/engines/ensemble/members.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Ensemble Member Adapter Factories
|
|
4
|
+
*
|
|
5
|
+
* Factory functions that wrap non-scoring engines (Bayesian, Fuzzy, etc.)
|
|
6
|
+
* into CustomMemberDef or ScoringMemberDef for use in ensemble rulesets.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.bayesianMember = bayesianMember;
|
|
10
|
+
exports.fuzzyMember = fuzzyMember;
|
|
11
|
+
exports.monteCarloMember = monteCarloMember;
|
|
12
|
+
exports.expertMember = expertMember;
|
|
13
|
+
exports.scoringMember = scoringMember;
|
|
14
|
+
const bayesian_1 = require("../bayesian");
|
|
15
|
+
const fuzzy_1 = require("../fuzzy");
|
|
16
|
+
const monte_carlo_1 = require("../monte-carlo");
|
|
17
|
+
const expert_1 = require("../expert");
|
|
18
|
+
// ========================================
|
|
19
|
+
// Factory Functions
|
|
20
|
+
// ========================================
|
|
21
|
+
/** Wrap a Bayesian engine as an ensemble member. Default confidence uses result.confidence. */
|
|
22
|
+
function bayesianMember(config) {
|
|
23
|
+
const { id, name, weight, ruleset, extractScore, extractConfidence = (r) => r.confidence, options } = config;
|
|
24
|
+
return {
|
|
25
|
+
id, name, weight,
|
|
26
|
+
execute: (facts) => {
|
|
27
|
+
const engine = new bayesian_1.BayesianEngine();
|
|
28
|
+
for (const f of facts)
|
|
29
|
+
engine.add(f);
|
|
30
|
+
return engine.execute(ruleset, options);
|
|
31
|
+
},
|
|
32
|
+
extractScore,
|
|
33
|
+
extractConfidence
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/** Wrap a Fuzzy engine as an ensemble member. Default confidence is 1.0 (outputs are crisp). */
|
|
37
|
+
function fuzzyMember(config) {
|
|
38
|
+
const { id, name, weight, ruleset, extractScore, extractConfidence = () => 1.0, options } = config;
|
|
39
|
+
return {
|
|
40
|
+
id, name, weight,
|
|
41
|
+
execute: (facts) => {
|
|
42
|
+
const engine = new fuzzy_1.FuzzyEngine();
|
|
43
|
+
for (const f of facts)
|
|
44
|
+
engine.add(f);
|
|
45
|
+
return engine.execute(ruleset, options);
|
|
46
|
+
},
|
|
47
|
+
extractScore,
|
|
48
|
+
extractConfidence
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/** Wrap a Monte Carlo engine as an ensemble member. Default confidence is 1.0 (domain-specific). */
|
|
52
|
+
function monteCarloMember(config) {
|
|
53
|
+
const { id, name, weight, ruleset, extractScore, extractConfidence = () => 1.0, options } = config;
|
|
54
|
+
return {
|
|
55
|
+
id, name, weight,
|
|
56
|
+
execute: (facts) => {
|
|
57
|
+
const engine = new monte_carlo_1.MonteCarloEngine();
|
|
58
|
+
for (const f of facts)
|
|
59
|
+
engine.add(f);
|
|
60
|
+
return engine.execute(ruleset, options);
|
|
61
|
+
},
|
|
62
|
+
extractScore,
|
|
63
|
+
extractConfidence
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/** Wrap an Expert engine as an ensemble member. Default confidence is 1.0 (per-conclusion only). */
|
|
67
|
+
function expertMember(config) {
|
|
68
|
+
const { id, name, weight, ruleset, extractScore, extractConfidence = () => 1.0, options } = config;
|
|
69
|
+
return {
|
|
70
|
+
id, name, weight,
|
|
71
|
+
execute: (facts) => {
|
|
72
|
+
const engine = new expert_1.ExpertEngine();
|
|
73
|
+
for (const f of facts)
|
|
74
|
+
engine.add(f);
|
|
75
|
+
return engine.execute(ruleset, options);
|
|
76
|
+
},
|
|
77
|
+
extractScore,
|
|
78
|
+
extractConfidence
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/** Shorthand for creating a ScoringMemberDef. Consistency helper, no wrapping needed. */
|
|
82
|
+
function scoringMember(config) {
|
|
83
|
+
const { id, name, weight, ruleset, options } = config;
|
|
84
|
+
return { id, name, weight, ruleset, options };
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=members.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"members.js","sourceRoot":"","sources":["../../../src/engines/ensemble/members.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ranking Engine Compiler
|
|
3
|
+
*
|
|
4
|
+
* Validates ranking rulesets and resolves defaults.
|
|
5
|
+
*/
|
|
6
|
+
import type { TierDefinition } from '../scoring/types';
|
|
7
|
+
import type { RankingRuleSet, CompiledRankingRuleSet } from './types';
|
|
8
|
+
/**
|
|
9
|
+
* Compile and validate a ranking ruleset.
|
|
10
|
+
*/
|
|
11
|
+
export declare function compileRankingRuleSet<T extends TierDefinition = TierDefinition>(ruleSet: RankingRuleSet<T>): CompiledRankingRuleSet<T>;
|
|
12
|
+
//# sourceMappingURL=compiler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../../src/engines/ranking/compiler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EACV,cAAc,EACd,sBAAsB,EAMvB,MAAM,SAAS,CAAC;AAGjB;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAC7E,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GACzB,sBAAsB,CAAC,CAAC,CAAC,CAuB3B"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Ranking Engine Compiler
|
|
4
|
+
*
|
|
5
|
+
* Validates ranking rulesets and resolves defaults.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.compileRankingRuleSet = compileRankingRuleSet;
|
|
9
|
+
const errors_1 = require("../../core/errors");
|
|
10
|
+
const types_1 = require("../utility/types");
|
|
11
|
+
const types_2 = require("./types");
|
|
12
|
+
/**
|
|
13
|
+
* Compile and validate a ranking ruleset.
|
|
14
|
+
*/
|
|
15
|
+
function compileRankingRuleSet(ruleSet) {
|
|
16
|
+
if (!ruleSet.id) {
|
|
17
|
+
throw new errors_1.CompilationError('Ranking ruleset requires an id');
|
|
18
|
+
}
|
|
19
|
+
if (ruleSet.mode !== 'ranking') {
|
|
20
|
+
throw new errors_1.CompilationError(`Expected mode 'ranking', got '${ruleSet.mode}'`);
|
|
21
|
+
}
|
|
22
|
+
if (!ruleSet.entityType || ruleSet.entityType.trim() === '') {
|
|
23
|
+
throw new errors_1.CompilationError('entityType is required and must be non-empty');
|
|
24
|
+
}
|
|
25
|
+
switch (ruleSet.strategy) {
|
|
26
|
+
case 'score':
|
|
27
|
+
return compileScore(ruleSet);
|
|
28
|
+
case 'elo':
|
|
29
|
+
return compileElo(ruleSet);
|
|
30
|
+
case 'head-to-head':
|
|
31
|
+
return compileHeadToHead(ruleSet);
|
|
32
|
+
default:
|
|
33
|
+
throw new errors_1.CompilationError(`Unknown ranking strategy: '${ruleSet.strategy}'`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function compileScore(ruleSet) {
|
|
37
|
+
if (!ruleSet.scoringRuleset) {
|
|
38
|
+
throw new errors_1.CompilationError('Score strategy requires a scoringRuleset');
|
|
39
|
+
}
|
|
40
|
+
if (ruleSet.scoringRuleset.mode !== 'scoring') {
|
|
41
|
+
throw new errors_1.CompilationError(`scoringRuleset must have mode 'scoring', got '${ruleSet.scoringRuleset.mode}'`);
|
|
42
|
+
}
|
|
43
|
+
// Validate tier IDs are unique
|
|
44
|
+
const tiers = ruleSet.config?.tiers;
|
|
45
|
+
if (tiers) {
|
|
46
|
+
const tierIds = new Set();
|
|
47
|
+
for (const tier of tiers) {
|
|
48
|
+
if (tierIds.has(tier.id)) {
|
|
49
|
+
throw new errors_1.CompilationError(`Duplicate tier id: '${tier.id}'`);
|
|
50
|
+
}
|
|
51
|
+
tierIds.add(tier.id);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
id: ruleSet.id,
|
|
56
|
+
name: ruleSet.name,
|
|
57
|
+
mode: 'ranking',
|
|
58
|
+
strategy: 'score',
|
|
59
|
+
scoringRuleset: ruleSet.scoringRuleset,
|
|
60
|
+
scoringOptions: ruleSet.scoringOptions,
|
|
61
|
+
entityType: ruleSet.entityType,
|
|
62
|
+
config: {
|
|
63
|
+
direction: ruleSet.config?.direction ?? 'highest-first',
|
|
64
|
+
tiers: ruleSet.config?.tiers
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function compileElo(ruleSet) {
|
|
69
|
+
const config = ruleSet.config ?? {};
|
|
70
|
+
// Resolve kFactor
|
|
71
|
+
let kFactor;
|
|
72
|
+
if (config.kFactor === undefined) {
|
|
73
|
+
kFactor = types_2.K_FACTOR_VALUES['standard'];
|
|
74
|
+
}
|
|
75
|
+
else if ((0, types_2.isKFactorPreset)(config.kFactor)) {
|
|
76
|
+
kFactor = types_2.K_FACTOR_VALUES[config.kFactor];
|
|
77
|
+
}
|
|
78
|
+
else if (typeof config.kFactor === 'number') {
|
|
79
|
+
if (config.kFactor <= 0) {
|
|
80
|
+
throw new errors_1.CompilationError('kFactor must be a positive number');
|
|
81
|
+
}
|
|
82
|
+
kFactor = config.kFactor;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
throw new errors_1.CompilationError(`Invalid kFactor: '${config.kFactor}'`);
|
|
86
|
+
}
|
|
87
|
+
const initialRating = config.initialRating ?? 1500;
|
|
88
|
+
if (initialRating <= 0) {
|
|
89
|
+
throw new errors_1.CompilationError('initialRating must be a positive number');
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
id: ruleSet.id,
|
|
93
|
+
name: ruleSet.name,
|
|
94
|
+
mode: 'ranking',
|
|
95
|
+
strategy: 'elo',
|
|
96
|
+
entityType: ruleSet.entityType,
|
|
97
|
+
matchType: ruleSet.matchType ?? 'MatchResult',
|
|
98
|
+
config: {
|
|
99
|
+
initialRating,
|
|
100
|
+
kFactor,
|
|
101
|
+
direction: config.direction ?? 'highest-first'
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
function compileHeadToHead(ruleSet) {
|
|
106
|
+
const criteria = ruleSet.criteria;
|
|
107
|
+
if (!criteria || !Array.isArray(criteria) || criteria.length === 0) {
|
|
108
|
+
throw new errors_1.CompilationError('Head-to-head strategy requires at least one criterion');
|
|
109
|
+
}
|
|
110
|
+
// Validate no duplicate criterion IDs
|
|
111
|
+
const criterionIds = new Set();
|
|
112
|
+
for (const c of criteria) {
|
|
113
|
+
if (!c.id) {
|
|
114
|
+
throw new errors_1.CompilationError('Each criterion requires an id');
|
|
115
|
+
}
|
|
116
|
+
if (criterionIds.has(c.id)) {
|
|
117
|
+
throw new errors_1.CompilationError(`Duplicate criterion id: '${c.id}'`);
|
|
118
|
+
}
|
|
119
|
+
criterionIds.add(c.id);
|
|
120
|
+
}
|
|
121
|
+
// Resolve semantic weights to numeric
|
|
122
|
+
const resolvedCriteria = criteria.map((c) => {
|
|
123
|
+
let weight;
|
|
124
|
+
if ((0, types_1.isSemanticPriority)(c.weight)) {
|
|
125
|
+
weight = types_1.SEMANTIC_PRIORITY_VALUES[c.weight];
|
|
126
|
+
}
|
|
127
|
+
else if (typeof c.weight === 'number') {
|
|
128
|
+
weight = c.weight;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
throw new errors_1.CompilationError(`Invalid weight for criterion '${c.id}': '${c.weight}'`);
|
|
132
|
+
}
|
|
133
|
+
if (!c.direction) {
|
|
134
|
+
throw new errors_1.CompilationError(`Criterion '${c.id}' requires a direction`);
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
id: c.id,
|
|
138
|
+
name: c.name,
|
|
139
|
+
weight,
|
|
140
|
+
direction: c.direction
|
|
141
|
+
};
|
|
142
|
+
});
|
|
143
|
+
// Normalize weights to sum to 1.0
|
|
144
|
+
const totalWeight = resolvedCriteria.reduce((sum, c) => sum + c.weight, 0);
|
|
145
|
+
if (totalWeight === 0) {
|
|
146
|
+
throw new errors_1.CompilationError('Criteria weights must not all be zero');
|
|
147
|
+
}
|
|
148
|
+
for (const c of resolvedCriteria) {
|
|
149
|
+
c.weight = c.weight / totalWeight;
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
id: ruleSet.id,
|
|
153
|
+
name: ruleSet.name,
|
|
154
|
+
mode: 'ranking',
|
|
155
|
+
strategy: 'head-to-head',
|
|
156
|
+
entityType: ruleSet.entityType,
|
|
157
|
+
criteria: resolvedCriteria,
|
|
158
|
+
config: {
|
|
159
|
+
direction: ruleSet.config?.direction ?? 'highest-first'
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=compiler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../../src/engines/ranking/compiler.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAoBH,sDAyBC;AA3CD,8CAAqD;AACrD,4CAAuG;AAYvG,mCAA2D;AAE3D;;GAEG;AACH,SAAgB,qBAAqB,CACnC,OAA0B;IAE1B,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QAChB,MAAM,IAAI,yBAAgB,CAAC,gCAAgC,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,IAAI,yBAAgB,CAAC,iCAAiC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC5D,MAAM,IAAI,yBAAgB,CAAC,8CAA8C,CAAC,CAAC;IAC7E,CAAC;IAED,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;QACzB,KAAK,OAAO;YACV,OAAO,YAAY,CAAC,OAAO,CAA8B,CAAC;QAC5D,KAAK,KAAK;YACR,OAAO,UAAU,CAAC,OAAc,CAA8B,CAAC;QACjE,KAAK,cAAc;YACjB,OAAO,iBAAiB,CAAC,OAAc,CAA8B,CAAC;QACxE;YACE,MAAM,IAAI,yBAAgB,CAAC,8BAA+B,OAAe,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC3F,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CACnB,OAAkD;IAElD,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,IAAI,yBAAgB,CAAC,0CAA0C,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9C,MAAM,IAAI,yBAAgB,CAAC,iDAAiD,OAAO,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,CAAC;IAC9G,CAAC;IAED,+BAA+B;IAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC;IACpC,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,yBAAgB,CAAC,uBAAuB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YAChE,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,OAAO;QACjB,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,MAAM,EAAE;YACN,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,IAAI,eAAe;YACvD,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK;SAC7B;KACF,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,OAA6C;IAE7C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;IAEpC,kBAAkB;IAClB,IAAI,OAAe,CAAC;IACpB,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,GAAG,uBAAe,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;SAAM,IAAI,IAAA,uBAAe,EAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,OAAO,GAAG,uBAAe,CAAC,MAAM,CAAC,OAAwB,CAAC,CAAC;IAC7D,CAAC;SAAM,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC9C,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,yBAAgB,CAAC,mCAAmC,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAC3B,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,yBAAgB,CAAC,qBAAqB,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC;IACnD,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,yBAAgB,CAAC,yCAAyC,CAAC,CAAC;IACxE,CAAC;IAED,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,KAAK;QACf,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,SAAS,EAAG,OAAe,CAAC,SAAS,IAAI,aAAa;QACtD,MAAM,EAAE;YACN,aAAa;YACb,OAAO;YACP,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,eAAe;SAC/C;KACF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,OAAsD;IAEtD,MAAM,QAAQ,GAAI,OAAe,CAAC,QAAQ,CAAC;IAE3C,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,yBAAgB,CAAC,uDAAuD,CAAC,CAAC;IACtF,CAAC;IAED,sCAAsC;IACtC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACV,MAAM,IAAI,yBAAgB,CAAC,+BAA+B,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,yBAAgB,CAAC,4BAA4B,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAClE,CAAC;QACD,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAED,sCAAsC;IACtC,MAAM,gBAAgB,GAA+B,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;QAC3E,IAAI,MAAc,CAAC;QACnB,IAAI,IAAA,0BAAkB,EAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,MAAM,GAAG,gCAAwB,CAAC,CAAC,CAAC,MAA0B,CAAC,CAAC;QAClE,CAAC;aAAM,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,yBAAgB,CAAC,iCAAiC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QACtF,CAAC;QAED,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YACjB,MAAM,IAAI,yBAAgB,CAAC,cAAc,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC;QACzE,CAAC;QAED,OAAO;YACL,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,MAAM;YACN,SAAS,EAAE,CAAC,CAAC,SAAS;SACvB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,kCAAkC;IAClC,MAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3E,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,yBAAgB,CAAC,uCAAuC,CAAC,CAAC;IACtE,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;QACjC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,WAAW,CAAC;IACpC,CAAC;IAED,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,cAAc;QACxB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,QAAQ,EAAE,gBAAgB;QAC1B,MAAM,EAAE;YACN,SAAS,EAAG,OAAe,CAAC,MAAM,EAAE,SAAS,IAAI,eAAe;SACjE;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ranking Engine
|
|
3
|
+
*
|
|
4
|
+
* Comparative scoring engine that ranks N entities relative to each other.
|
|
5
|
+
* Supports score-based ranking, Elo ratings, and head-to-head comparison.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* const engine = new RankingEngine();
|
|
10
|
+
* engine.add({ type: 'Vendor', data: { id: 'v1', revenue: 500000 } });
|
|
11
|
+
* engine.add({ type: 'Vendor', data: { id: 'v2', revenue: 120000 } });
|
|
12
|
+
*
|
|
13
|
+
* const result = engine.execute(compiledRanking);
|
|
14
|
+
* console.log(result.rankings[0]); // { rank: 1, entityId: 'v1', percentileLabel: 'top-1%', ... }
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
import { WorkingMemory, Fact, FactInput, FactChange } from '../../core';
|
|
18
|
+
import type { TierDefinition } from '../scoring/types';
|
|
19
|
+
import type { CompiledRankingRuleSet, RankingOptions, RankingResult } from './types';
|
|
20
|
+
export declare class RankingEngine {
|
|
21
|
+
private wm;
|
|
22
|
+
private strategy;
|
|
23
|
+
constructor(workingMemory?: WorkingMemory);
|
|
24
|
+
add<T = Record<string, any>>(input: FactInput<T>): Fact<T>;
|
|
25
|
+
remove(factId: string): Fact | undefined;
|
|
26
|
+
update<T = Record<string, any>>(input: FactInput<T>): Fact<T>;
|
|
27
|
+
get(factId: string): Fact | undefined;
|
|
28
|
+
getByType(type: string): Fact[];
|
|
29
|
+
getAll(): Fact[];
|
|
30
|
+
has(factId: string): boolean;
|
|
31
|
+
size(): number;
|
|
32
|
+
clear(): void;
|
|
33
|
+
getChanges(): FactChange[];
|
|
34
|
+
clearChanges(): void;
|
|
35
|
+
/**
|
|
36
|
+
* Execute a ranking ruleset.
|
|
37
|
+
*
|
|
38
|
+
* Scores all entities of the configured type and produces
|
|
39
|
+
* a ranked list with percentiles and optional tier/movement tracking.
|
|
40
|
+
*
|
|
41
|
+
* @param ruleSet - Compiled ranking ruleset
|
|
42
|
+
* @param options - Runtime options (previousRankings for movement, onRank callback)
|
|
43
|
+
* @returns Ranking result with sorted entities
|
|
44
|
+
*/
|
|
45
|
+
execute<T extends TierDefinition = TierDefinition>(ruleSet: CompiledRankingRuleSet<T>, options?: RankingOptions): RankingResult<T>;
|
|
46
|
+
getWorkingMemory(): WorkingMemory;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/engines/ranking/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EACL,aAAa,EACb,IAAI,EACJ,SAAS,EACT,UAAU,EACX,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,KAAK,EACV,sBAAsB,EACtB,cAAc,EACd,aAAa,EACd,MAAM,SAAS,CAAC;AAIjB,qBAAa,aAAa;IACxB,OAAO,CAAC,EAAE,CAAgB;IAC1B,OAAO,CAAC,QAAQ,CAAkB;gBAEtB,aAAa,CAAC,EAAE,aAAa;IASzC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAI1D,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAIxC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAI7D,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAIrC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE;IAI/B,MAAM,IAAI,IAAI,EAAE;IAIhB,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAI5B,IAAI,IAAI,MAAM;IAId,KAAK,IAAI,IAAI;IAIb,UAAU,IAAI,UAAU,EAAE;IAI1B,YAAY,IAAI,IAAI;IAQpB;;;;;;;;;OASG;IACH,OAAO,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAC/C,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,EAClC,OAAO,GAAE,cAAmB,GAC3B,aAAa,CAAC,CAAC,CAAC;IAQnB,gBAAgB,IAAI,aAAa;CAGlC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Ranking Engine
|
|
4
|
+
*
|
|
5
|
+
* Comparative scoring engine that ranks N entities relative to each other.
|
|
6
|
+
* Supports score-based ranking, Elo ratings, and head-to-head comparison.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const engine = new RankingEngine();
|
|
11
|
+
* engine.add({ type: 'Vendor', data: { id: 'v1', revenue: 500000 } });
|
|
12
|
+
* engine.add({ type: 'Vendor', data: { id: 'v2', revenue: 120000 } });
|
|
13
|
+
*
|
|
14
|
+
* const result = engine.execute(compiledRanking);
|
|
15
|
+
* console.log(result.rankings[0]); // { rank: 1, entityId: 'v1', percentileLabel: 'top-1%', ... }
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.RankingEngine = void 0;
|
|
20
|
+
const core_1 = require("../../core");
|
|
21
|
+
const strategy_1 = require("./strategy");
|
|
22
|
+
class RankingEngine {
|
|
23
|
+
wm;
|
|
24
|
+
strategy;
|
|
25
|
+
constructor(workingMemory) {
|
|
26
|
+
this.wm = workingMemory ?? new core_1.WorkingMemory();
|
|
27
|
+
this.strategy = new strategy_1.RankingExecutor();
|
|
28
|
+
}
|
|
29
|
+
// ========================================
|
|
30
|
+
// IWorkingMemory Implementation
|
|
31
|
+
// ========================================
|
|
32
|
+
add(input) {
|
|
33
|
+
return this.wm.add(input);
|
|
34
|
+
}
|
|
35
|
+
remove(factId) {
|
|
36
|
+
return this.wm.remove(factId);
|
|
37
|
+
}
|
|
38
|
+
update(input) {
|
|
39
|
+
return this.wm.update(input);
|
|
40
|
+
}
|
|
41
|
+
get(factId) {
|
|
42
|
+
return this.wm.get(factId);
|
|
43
|
+
}
|
|
44
|
+
getByType(type) {
|
|
45
|
+
return this.wm.getByType(type);
|
|
46
|
+
}
|
|
47
|
+
getAll() {
|
|
48
|
+
return this.wm.getAll();
|
|
49
|
+
}
|
|
50
|
+
has(factId) {
|
|
51
|
+
return this.wm.has(factId);
|
|
52
|
+
}
|
|
53
|
+
size() {
|
|
54
|
+
return this.wm.size();
|
|
55
|
+
}
|
|
56
|
+
clear() {
|
|
57
|
+
this.wm.clear();
|
|
58
|
+
}
|
|
59
|
+
getChanges() {
|
|
60
|
+
return this.wm.getChanges();
|
|
61
|
+
}
|
|
62
|
+
clearChanges() {
|
|
63
|
+
this.wm.clearChanges();
|
|
64
|
+
}
|
|
65
|
+
// ========================================
|
|
66
|
+
// Engine Execution
|
|
67
|
+
// ========================================
|
|
68
|
+
/**
|
|
69
|
+
* Execute a ranking ruleset.
|
|
70
|
+
*
|
|
71
|
+
* Scores all entities of the configured type and produces
|
|
72
|
+
* a ranked list with percentiles and optional tier/movement tracking.
|
|
73
|
+
*
|
|
74
|
+
* @param ruleSet - Compiled ranking ruleset
|
|
75
|
+
* @param options - Runtime options (previousRankings for movement, onRank callback)
|
|
76
|
+
* @returns Ranking result with sorted entities
|
|
77
|
+
*/
|
|
78
|
+
execute(ruleSet, options = {}) {
|
|
79
|
+
return this.strategy.run(ruleSet, this.wm, options);
|
|
80
|
+
}
|
|
81
|
+
// ========================================
|
|
82
|
+
// Utility Methods
|
|
83
|
+
// ========================================
|
|
84
|
+
getWorkingMemory() {
|
|
85
|
+
return this.wm;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
exports.RankingEngine = RankingEngine;
|
|
89
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/engines/ranking/engine.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAEH,qCAKoB;AAUpB,yCAA6C;AAE7C,MAAa,aAAa;IAChB,EAAE,CAAgB;IAClB,QAAQ,CAAkB;IAElC,YAAY,aAA6B;QACvC,IAAI,CAAC,EAAE,GAAG,aAAa,IAAI,IAAI,oBAAa,EAAE,CAAC;QAC/C,IAAI,CAAC,QAAQ,GAAG,IAAI,0BAAe,EAAE,CAAC;IACxC,CAAC;IAED,2CAA2C;IAC3C,gCAAgC;IAChC,2CAA2C;IAE3C,GAAG,CAA0B,KAAmB;QAC9C,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,MAAc;QACnB,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,CAA0B,KAAmB;QACjD,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,GAAG,CAAC,MAAc;QAChB,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,SAAS,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;IAC1B,CAAC;IAED,GAAG,CAAC,MAAc;QAChB,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC;IAC9B,CAAC;IAED,YAAY;QACV,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;IAED,2CAA2C;IAC3C,mBAAmB;IACnB,2CAA2C;IAE3C;;;;;;;;;OASG;IACH,OAAO,CACL,OAAkC,EAClC,UAA0B,EAAE;QAE5B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAED,2CAA2C;IAC3C,kBAAkB;IAClB,2CAA2C;IAE3C,gBAAgB;QACd,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;CACF;AArFD,sCAqFC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ranking Engine — Comparative Entity Ranking
|
|
3
|
+
*/
|
|
4
|
+
export type { RankingStrategy, RankingDirection, PercentileLabel, Movement, KFactorPreset, RankingCriterion, CompiledRankingCriterion, ScoreRankingConfig, EloConfig, HeadToHeadConfig, ScoreRankingRuleSet, EloRankingRuleSet, HeadToHeadRankingRuleSet, RankingRuleSet, CompiledScoreRankingRuleSet, CompiledEloRankingRuleSet, CompiledHeadToHeadRankingRuleSet, CompiledRankingRuleSet, PreviousRanking, RankingOptions, RankedEntity, RankingResult } from './types';
|
|
5
|
+
export { K_FACTOR_VALUES, isKFactorPreset, resolvePercentileLabel, resolveMovement } from './types';
|
|
6
|
+
export { compileRankingRuleSet } from './compiler';
|
|
7
|
+
export { RankingExecutor, rankingStrategy } from './strategy';
|
|
8
|
+
export { RankingEngine } from './engine';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/engines/ranking/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,wBAAwB,EACxB,kBAAkB,EAClB,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,wBAAwB,EACxB,cAAc,EACd,2BAA2B,EAC3B,yBAAyB,EACzB,gCAAgC,EAChC,sBAAsB,EACtB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,aAAa,EACd,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,eAAe,EAChB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG9D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Ranking Engine — Comparative Entity Ranking
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.RankingEngine = exports.rankingStrategy = exports.RankingExecutor = exports.compileRankingRuleSet = exports.resolveMovement = exports.resolvePercentileLabel = exports.isKFactorPreset = exports.K_FACTOR_VALUES = void 0;
|
|
7
|
+
// Constants & utilities
|
|
8
|
+
var types_1 = require("./types");
|
|
9
|
+
Object.defineProperty(exports, "K_FACTOR_VALUES", { enumerable: true, get: function () { return types_1.K_FACTOR_VALUES; } });
|
|
10
|
+
Object.defineProperty(exports, "isKFactorPreset", { enumerable: true, get: function () { return types_1.isKFactorPreset; } });
|
|
11
|
+
Object.defineProperty(exports, "resolvePercentileLabel", { enumerable: true, get: function () { return types_1.resolvePercentileLabel; } });
|
|
12
|
+
Object.defineProperty(exports, "resolveMovement", { enumerable: true, get: function () { return types_1.resolveMovement; } });
|
|
13
|
+
// Compiler
|
|
14
|
+
var compiler_1 = require("./compiler");
|
|
15
|
+
Object.defineProperty(exports, "compileRankingRuleSet", { enumerable: true, get: function () { return compiler_1.compileRankingRuleSet; } });
|
|
16
|
+
// Strategy
|
|
17
|
+
var strategy_1 = require("./strategy");
|
|
18
|
+
Object.defineProperty(exports, "RankingExecutor", { enumerable: true, get: function () { return strategy_1.RankingExecutor; } });
|
|
19
|
+
Object.defineProperty(exports, "rankingStrategy", { enumerable: true, get: function () { return strategy_1.rankingStrategy; } });
|
|
20
|
+
// Engine
|
|
21
|
+
var engine_1 = require("./engine");
|
|
22
|
+
Object.defineProperty(exports, "RankingEngine", { enumerable: true, get: function () { return engine_1.RankingEngine; } });
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engines/ranking/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AA4BH,wBAAwB;AACxB,iCAKiB;AAJf,wGAAA,eAAe,OAAA;AACf,wGAAA,eAAe,OAAA;AACf,+GAAA,sBAAsB,OAAA;AACtB,wGAAA,eAAe,OAAA;AAGjB,WAAW;AACX,uCAAmD;AAA1C,iHAAA,qBAAqB,OAAA;AAE9B,WAAW;AACX,uCAA8D;AAArD,2GAAA,eAAe,OAAA;AAAE,2GAAA,eAAe,OAAA;AAEzC,SAAS;AACT,mCAAyC;AAAhC,uGAAA,aAAa,OAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ranking Engine Strategy
|
|
3
|
+
*
|
|
4
|
+
* Core execution logic for all ranking strategies:
|
|
5
|
+
* - score: Delegates to ScoringEngine, ranks by totalScore
|
|
6
|
+
* - elo: Processes match history, computes Elo ratings
|
|
7
|
+
* - head-to-head: Pairwise comparison on weighted criteria
|
|
8
|
+
*/
|
|
9
|
+
import type { IWorkingMemory } from '../../core';
|
|
10
|
+
import type { TierDefinition } from '../scoring/types';
|
|
11
|
+
import type { CompiledRankingRuleSet, RankingOptions, RankingResult } from './types';
|
|
12
|
+
export declare class RankingExecutor {
|
|
13
|
+
run<T extends TierDefinition = TierDefinition>(ruleSet: CompiledRankingRuleSet<T>, wm: IWorkingMemory, options?: RankingOptions): RankingResult<T>;
|
|
14
|
+
private runScore;
|
|
15
|
+
private runElo;
|
|
16
|
+
private runHeadToHead;
|
|
17
|
+
private buildRankedEntities;
|
|
18
|
+
}
|
|
19
|
+
/** Singleton instance */
|
|
20
|
+
export declare const rankingStrategy: RankingExecutor;
|
|
21
|
+
//# sourceMappingURL=strategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../../src/engines/ranking/strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAQ,MAAM,YAAY,CAAC;AAEvD,OAAO,KAAK,EAAE,cAAc,EAAoB,MAAM,kBAAkB,CAAC;AAEzE,OAAO,KAAK,EACV,sBAAsB,EAItB,cAAc,EACd,aAAa,EAId,MAAM,SAAS,CAAC;AAGjB,qBAAa,eAAe;IAC1B,GAAG,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAC3C,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,EAClC,EAAE,EAAE,cAAc,EAClB,OAAO,GAAE,cAAmB,GAC3B,aAAa,CAAC,CAAC,CAAC;IAiCnB,OAAO,CAAC,QAAQ;IA0ChB,OAAO,CAAC,MAAM;IAuDd,OAAO,CAAC,aAAa;IAiErB,OAAO,CAAC,mBAAmB;CAoF5B;AAqBD,yBAAyB;AACzB,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
|