@higher.archi/boe 1.0.0 → 1.0.2
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/operators/examples.d.ts +1 -1
- package/dist/core/operators/examples.js +1 -1
- package/dist/engines/scoring/compiler.d.ts.map +1 -1
- package/dist/engines/scoring/compiler.js +55 -2
- package/dist/engines/scoring/compiler.js.map +1 -1
- package/dist/engines/scoring/index.d.ts +1 -1
- package/dist/engines/scoring/index.d.ts.map +1 -1
- package/dist/engines/scoring/index.js.map +1 -1
- package/dist/engines/scoring/strategy.d.ts.map +1 -1
- package/dist/engines/scoring/strategy.js +216 -3
- package/dist/engines/scoring/strategy.js.map +1 -1
- package/dist/engines/scoring/types.d.ts +142 -1
- package/dist/engines/scoring/types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/core/operators/examples.ts +1 -1
- package/src/engines/scoring/compiler.ts +76 -3
- package/src/engines/scoring/index.ts +15 -0
- package/src/engines/scoring/strategy.ts +232 -4
- package/src/engines/scoring/types.ts +170 -0
- package/src/index.ts +14 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Operator Examples
|
|
3
3
|
*
|
|
4
4
|
* Demonstrates evaluation for each OperatorCategory.
|
|
5
|
-
* Run with: npx ts-node packages/
|
|
5
|
+
* Run with: npx ts-node packages/boe/src/core/operators/examples.ts
|
|
6
6
|
*/
|
|
7
7
|
export {};
|
|
8
8
|
//# sourceMappingURL=examples.d.ts.map
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Operator Examples
|
|
4
4
|
*
|
|
5
5
|
* Demonstrates evaluation for each OperatorCategory.
|
|
6
|
-
* Run with: npx ts-node packages/
|
|
6
|
+
* Run with: npx ts-node packages/boe/src/core/operators/examples.ts
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
const index_1 = require("./index");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../../src/engines/scoring/compiler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,EACL,WAAW,EACX,cAAc,EAEd,mBAAmB,EACnB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../../src/engines/scoring/compiler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,EACL,WAAW,EACX,cAAc,EAEd,mBAAmB,EACnB,sBAAsB,EAIvB,MAAM,SAAS,CAAC;AAmFjB,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,GAAE,MAAU,GAAG,mBAAmB,CAe5F;AAkBD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,sBAAsB,CA4ErF"}
|
|
@@ -86,20 +86,72 @@ function compileScoringRule(rule, index = 0) {
|
|
|
86
86
|
index,
|
|
87
87
|
inputs,
|
|
88
88
|
when,
|
|
89
|
+
category: rule.category,
|
|
89
90
|
action: compileScoringAction(rule.then)
|
|
90
91
|
};
|
|
91
92
|
}
|
|
92
93
|
// ========================================
|
|
94
|
+
// Override Compilation
|
|
95
|
+
// ========================================
|
|
96
|
+
function compileOverride(override) {
|
|
97
|
+
const { condition, ...rest } = override;
|
|
98
|
+
return {
|
|
99
|
+
...rest,
|
|
100
|
+
condition: (0, core_1.compileCondition)(condition)
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
// ========================================
|
|
93
104
|
// RuleSet Compilation
|
|
94
105
|
// ========================================
|
|
95
106
|
function compileScoringRuleSet(ruleSet) {
|
|
107
|
+
const categories = ruleSet.config?.categories;
|
|
108
|
+
// Validate categories if defined
|
|
109
|
+
if (categories?.length) {
|
|
110
|
+
const categoryIds = new Set(categories.map(c => c.id));
|
|
111
|
+
// Every rule must reference a valid category
|
|
112
|
+
for (const rule of ruleSet.rules) {
|
|
113
|
+
if (!rule.category) {
|
|
114
|
+
throw new Error(`Rule "${rule.id}" is missing a category. When categories are defined, every rule must have a category.`);
|
|
115
|
+
}
|
|
116
|
+
if (!categoryIds.has(rule.category)) {
|
|
117
|
+
throw new Error(`Rule "${rule.id}" references unknown category "${rule.category}". Valid categories: ${[...categoryIds].join(', ')}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Normalize category weights to sum to 1.0
|
|
121
|
+
const totalWeight = categories.reduce((sum, c) => sum + c.weight, 0);
|
|
122
|
+
if (totalWeight > 0 && Math.abs(totalWeight - 1.0) > 0.001) {
|
|
123
|
+
for (const cat of categories) {
|
|
124
|
+
cat.weight = cat.weight / totalWeight;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Validate and compile overrides if defined
|
|
129
|
+
const overrides = ruleSet.config?.overrides;
|
|
130
|
+
let compiledOverrides;
|
|
131
|
+
if (overrides?.length) {
|
|
132
|
+
const tierIds = new Set((ruleSet.config?.tiers ?? []).map(t => t.id));
|
|
133
|
+
for (const override of overrides) {
|
|
134
|
+
// Validate tier effects reference valid tiers
|
|
135
|
+
if (override.effect === 'force_tier' || override.effect === 'floor_tier' || override.effect === 'cap_tier') {
|
|
136
|
+
if (!tierIds.size) {
|
|
137
|
+
throw new Error(`Override "${override.id}" uses effect "${override.effect}" but no tiers are defined.`);
|
|
138
|
+
}
|
|
139
|
+
if (!tierIds.has(override.targetTier)) {
|
|
140
|
+
throw new Error(`Override "${override.id}" references unknown tier "${override.targetTier}". Valid tiers: ${[...tierIds].join(', ')}`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
compiledOverrides = overrides.map(compileOverride);
|
|
145
|
+
}
|
|
96
146
|
const config = {
|
|
97
147
|
mode: 'scoring',
|
|
98
148
|
strategies: ruleSet.config?.strategies ?? ['raw'],
|
|
99
149
|
caps: ruleSet.config?.caps,
|
|
100
150
|
outputBounds: ruleSet.config?.outputBounds,
|
|
101
151
|
baseScore: ruleSet.config?.baseScore,
|
|
102
|
-
tiers: ruleSet.config?.tiers
|
|
152
|
+
tiers: ruleSet.config?.tiers,
|
|
153
|
+
categories,
|
|
154
|
+
overrides
|
|
103
155
|
};
|
|
104
156
|
return {
|
|
105
157
|
id: ruleSet.id,
|
|
@@ -107,7 +159,8 @@ function compileScoringRuleSet(ruleSet) {
|
|
|
107
159
|
mode: 'scoring',
|
|
108
160
|
schema: ruleSet.shape ? (0, core_1.normalizeShape)(ruleSet.shape) : { type: 'object' },
|
|
109
161
|
rules: ruleSet.rules.map((rule, index) => compileScoringRule(rule, index)),
|
|
110
|
-
config
|
|
162
|
+
config,
|
|
163
|
+
overrides: compiledOverrides
|
|
111
164
|
};
|
|
112
165
|
}
|
|
113
166
|
//# sourceMappingURL=compiler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../../src/engines/scoring/compiler.ts"],"names":[],"mappings":";AAAA;;GAEG;;
|
|
1
|
+
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../../src/engines/scoring/compiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Provides scoring-based rule execution where rules contribute
|
|
5
5
|
* scores that are accumulated into a total score.
|
|
6
6
|
*/
|
|
7
|
-
export { ScoringMethod, ScoringCaps, OutputBounds, TierDefinition, ScoringTierMatch, ScoringAction, ScoringRule, ScoringRuleSet, ScoringConfig, CompiledScoringAction, CompiledScoringRule, CompiledScoringRuleSet, ScoreFunction, ScoreFunctionRegistry, ScoringOptions, ScoringResult } from './types';
|
|
7
|
+
export { ScoringMethod, ScoringCaps, OutputBounds, TierDefinition, ScoringTierMatch, ScoringCategory, CategoryResult, OverrideEffect, OverrideDefinition, ForceTierOverride, FloorTierOverride, CapTierOverride, ExcludeOverride, AdjustScoreOverride, ClampScoreOverride, ForceScoreOverride, OverrideResult, CompiledOverrideDefinition, ScoringAction, ScoringRule, ScoringRuleSet, ScoringConfig, CompiledScoringAction, CompiledScoringRule, CompiledScoringRuleSet, ScoreFunction, ScoreFunctionRegistry, ScoringOptions, ScoringResult } from './types';
|
|
8
8
|
export { compileScoringRule, compileScoringRuleSet } from './compiler';
|
|
9
9
|
export { ScoringStrategy, scoringStrategy } from './strategy';
|
|
10
10
|
export { ScoringEngine } from './engine';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/engines/scoring/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAEL,aAAa,EACb,WAAW,EACX,YAAY,EAEZ,cAAc,EACd,gBAAgB,EAEhB,aAAa,EACb,WAAW,EACX,cAAc,EACd,aAAa,EAEb,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EAEtB,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,aAAa,EACd,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,eAAe,EACf,eAAe,EAChB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/engines/scoring/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAEL,aAAa,EACb,WAAW,EACX,YAAY,EAEZ,cAAc,EACd,gBAAgB,EAEhB,eAAe,EACf,cAAc,EAEd,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,0BAA0B,EAE1B,aAAa,EACb,WAAW,EACX,cAAc,EACd,aAAa,EAEb,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EAEtB,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,aAAa,EACd,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,eAAe,EACf,eAAe,EAChB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engines/scoring/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engines/scoring/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AA0CH,WAAW;AACX,uCAGoB;AAFlB,8GAAA,kBAAkB,OAAA;AAClB,iHAAA,qBAAqB,OAAA;AAGvB,WAAW;AACX,uCAGoB;AAFlB,2GAAA,eAAe,OAAA;AACf,2GAAA,eAAe,OAAA;AAGjB,SAAS;AACT,mCAAyC;AAAhC,uGAAA,aAAa,OAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../../src/engines/scoring/strategy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EACL,sBAAsB,EAEtB,cAAc,EACd,aAAa,
|
|
1
|
+
{"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../../src/engines/scoring/strategy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EACL,sBAAsB,EAEtB,cAAc,EACd,aAAa,EAKd,MAAM,SAAS,CAAC;AAEjB,qBAAa,eAAe;IAC1B,GAAG,CACD,OAAO,EAAE,sBAAsB,EAC/B,EAAE,EAAE,cAAc,EAClB,OAAO,GAAE,cAAmB,GAC3B,aAAa;CAiYjB;AAGD,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
|
|
@@ -95,8 +95,96 @@ class ScoringStrategy {
|
|
|
95
95
|
}
|
|
96
96
|
contributions[rule.id] = accumulatedScore;
|
|
97
97
|
}
|
|
98
|
-
// Phase 3: Apply global strategies
|
|
99
|
-
|
|
98
|
+
// Phase 3: Apply global strategies
|
|
99
|
+
let categoryBreakdown;
|
|
100
|
+
if (config.categories?.length) {
|
|
101
|
+
// Category-aware aggregation
|
|
102
|
+
const categories = config.categories;
|
|
103
|
+
// Group all rules (fired and unfired) by category
|
|
104
|
+
const rulesByCategory = new Map();
|
|
105
|
+
for (const cat of categories) {
|
|
106
|
+
rulesByCategory.set(cat.id, { fired: [], missing: [] });
|
|
107
|
+
}
|
|
108
|
+
for (const rule of ruleSet.rules) {
|
|
109
|
+
const catId = rule.category;
|
|
110
|
+
const group = rulesByCategory.get(catId);
|
|
111
|
+
if (fired.includes(rule.id)) {
|
|
112
|
+
group.fired.push(rule.id);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
group.missing.push(rule.id);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Build category results
|
|
119
|
+
const catResults = [];
|
|
120
|
+
for (const cat of categories) {
|
|
121
|
+
const group = rulesByCategory.get(cat.id);
|
|
122
|
+
const totalSignals = group.fired.length + group.missing.length;
|
|
123
|
+
const minRatio = cat.minSignalRatio ?? 0.5;
|
|
124
|
+
const excluded = totalSignals > 0 && (group.fired.length / totalSignals) < minRatio;
|
|
125
|
+
let rawScore = 0;
|
|
126
|
+
if (!excluded && group.fired.length > 0) {
|
|
127
|
+
// Normalize signal weights within category to sum to 1.0 among fired signals
|
|
128
|
+
const firedWeights = {};
|
|
129
|
+
let totalFiredWeight = 0;
|
|
130
|
+
for (const ruleId of group.fired) {
|
|
131
|
+
const w = weights[ruleId] ?? 1;
|
|
132
|
+
firedWeights[ruleId] = w;
|
|
133
|
+
totalFiredWeight += w;
|
|
134
|
+
}
|
|
135
|
+
// Compute weighted average of fired signal scores
|
|
136
|
+
for (const ruleId of group.fired) {
|
|
137
|
+
const normalizedWeight = totalFiredWeight > 0 ? firedWeights[ruleId] / totalFiredWeight : 0;
|
|
138
|
+
rawScore += contributions[ruleId] * normalizedWeight;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catResults.push({
|
|
142
|
+
id: cat.id,
|
|
143
|
+
name: cat.name,
|
|
144
|
+
weight: cat.weight,
|
|
145
|
+
effectiveWeight: excluded ? 0 : cat.weight,
|
|
146
|
+
rawScore,
|
|
147
|
+
weightedContribution: 0, // computed after redistribution
|
|
148
|
+
signalsWithData: group.fired,
|
|
149
|
+
signalsMissing: group.missing,
|
|
150
|
+
excluded
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
// Redistribute excluded category weights proportionally to active categories
|
|
154
|
+
const excludedWeight = catResults.filter(c => c.excluded).reduce((sum, c) => sum + c.weight, 0);
|
|
155
|
+
const activeWeight = catResults.filter(c => !c.excluded).reduce((sum, c) => sum + c.weight, 0);
|
|
156
|
+
if (activeWeight > 0 && excludedWeight > 0) {
|
|
157
|
+
for (const cr of catResults) {
|
|
158
|
+
if (!cr.excluded) {
|
|
159
|
+
cr.effectiveWeight = cr.weight + (cr.weight / activeWeight) * excludedWeight;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
// Compute weighted contributions and update per-rule contributions
|
|
164
|
+
for (const cr of catResults) {
|
|
165
|
+
cr.weightedContribution = cr.effectiveWeight * cr.rawScore;
|
|
166
|
+
}
|
|
167
|
+
// Rewrite per-rule contributions to reflect category-weighted values
|
|
168
|
+
for (const cr of catResults) {
|
|
169
|
+
if (cr.excluded || cr.signalsWithData.length === 0)
|
|
170
|
+
continue;
|
|
171
|
+
const firedWeightsTotal = cr.signalsWithData.reduce((sum, id) => sum + (weights[id] ?? 1), 0);
|
|
172
|
+
for (const ruleId of cr.signalsWithData) {
|
|
173
|
+
const normalizedWeight = firedWeightsTotal > 0 ? (weights[ruleId] ?? 1) / firedWeightsTotal : 0;
|
|
174
|
+
contributions[ruleId] = contributions[ruleId] * normalizedWeight * cr.effectiveWeight;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// Zero out contributions for excluded categories
|
|
178
|
+
for (const cr of catResults) {
|
|
179
|
+
if (cr.excluded) {
|
|
180
|
+
for (const ruleId of cr.signalsWithData) {
|
|
181
|
+
contributions[ruleId] = 0;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
categoryBreakdown = catResults;
|
|
186
|
+
}
|
|
187
|
+
else if (strategies.includes('weighted-percent')) {
|
|
100
188
|
const totalWeight = Object.values(weights).reduce((sum, w) => sum + w, 0);
|
|
101
189
|
if (totalWeight > 0) {
|
|
102
190
|
for (const ruleId in contributions) {
|
|
@@ -120,7 +208,7 @@ class ScoringStrategy {
|
|
|
120
208
|
}
|
|
121
209
|
// Calculate total score (base score + contributions)
|
|
122
210
|
const baseScore = config.baseScore ?? 0;
|
|
123
|
-
|
|
211
|
+
let totalScore = baseScore + Object.values(contributions).reduce((sum, score) => sum + score, 0);
|
|
124
212
|
// Match tier if tiers are configured
|
|
125
213
|
let tier;
|
|
126
214
|
if (config.tiers && config.tiers.length > 0) {
|
|
@@ -141,6 +229,129 @@ class ScoringStrategy {
|
|
|
141
229
|
}
|
|
142
230
|
}
|
|
143
231
|
}
|
|
232
|
+
// Phase 4: Override evaluation
|
|
233
|
+
let overrideResult;
|
|
234
|
+
if (ruleSet.overrides?.length && ruleSet.overrides.length > 0) {
|
|
235
|
+
// Build a BindingContext from all facts in working memory (type name -> fact)
|
|
236
|
+
const allFacts = wm.getAll();
|
|
237
|
+
const context = {};
|
|
238
|
+
for (const fact of allFacts) {
|
|
239
|
+
// Use lowercase type name as the binding key (e.g., Deal -> deal)
|
|
240
|
+
const key = fact.type.charAt(0).toLowerCase() + fact.type.slice(1);
|
|
241
|
+
context[key] = fact;
|
|
242
|
+
}
|
|
243
|
+
// Helper to resolve tier threshold for ranking
|
|
244
|
+
const resolveThreshold = (t) => t === '-Infinity' ? Number.NEGATIVE_INFINITY : t;
|
|
245
|
+
// Build tier lookup and ranking
|
|
246
|
+
const tierMap = new Map();
|
|
247
|
+
const sortedTierIds = [];
|
|
248
|
+
if (config.tiers?.length) {
|
|
249
|
+
const sorted = [...config.tiers].sort((a, b) => resolveThreshold(b.threshold) - resolveThreshold(a.threshold));
|
|
250
|
+
for (const t of sorted) {
|
|
251
|
+
tierMap.set(t.id, t);
|
|
252
|
+
sortedTierIds.push(t.id);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
const tierRank = (tierId) => {
|
|
256
|
+
if (!tierId)
|
|
257
|
+
return -1;
|
|
258
|
+
const idx = sortedTierIds.indexOf(tierId);
|
|
259
|
+
return idx === -1 ? -1 : sortedTierIds.length - idx; // higher rank = higher tier
|
|
260
|
+
};
|
|
261
|
+
const findTier = (tierId) => {
|
|
262
|
+
const def = tierMap.get(tierId);
|
|
263
|
+
if (!def)
|
|
264
|
+
return undefined;
|
|
265
|
+
return {
|
|
266
|
+
id: def.id,
|
|
267
|
+
name: def.name,
|
|
268
|
+
description: def.description,
|
|
269
|
+
threshold: resolveThreshold(def.threshold)
|
|
270
|
+
};
|
|
271
|
+
};
|
|
272
|
+
// Evaluate overrides in order — first match wins
|
|
273
|
+
for (const override of ruleSet.overrides) {
|
|
274
|
+
let matched;
|
|
275
|
+
try {
|
|
276
|
+
matched = (0, core_1.evaluateCondition)(override.condition, context);
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
matched = false;
|
|
280
|
+
}
|
|
281
|
+
if (!matched)
|
|
282
|
+
continue;
|
|
283
|
+
const originalScore = totalScore;
|
|
284
|
+
const originalTier = tier ? { ...tier } : undefined;
|
|
285
|
+
switch (override.effect) {
|
|
286
|
+
case 'force_tier': {
|
|
287
|
+
tier = findTier(override.targetTier);
|
|
288
|
+
if (override.score !== undefined) {
|
|
289
|
+
totalScore = override.score;
|
|
290
|
+
}
|
|
291
|
+
break;
|
|
292
|
+
}
|
|
293
|
+
case 'floor_tier': {
|
|
294
|
+
if (tierRank(tier?.id) < tierRank(override.targetTier)) {
|
|
295
|
+
tier = findTier(override.targetTier);
|
|
296
|
+
}
|
|
297
|
+
break;
|
|
298
|
+
}
|
|
299
|
+
case 'cap_tier': {
|
|
300
|
+
if (tierRank(tier?.id) > tierRank(override.targetTier)) {
|
|
301
|
+
tier = findTier(override.targetTier);
|
|
302
|
+
}
|
|
303
|
+
break;
|
|
304
|
+
}
|
|
305
|
+
case 'exclude': {
|
|
306
|
+
const executionTimeMs = Math.round((performance.now() - startTime) * 100) / 100;
|
|
307
|
+
return {
|
|
308
|
+
totalScore: 0,
|
|
309
|
+
contributions: {},
|
|
310
|
+
fired: [],
|
|
311
|
+
iterations: 1,
|
|
312
|
+
override: {
|
|
313
|
+
id: override.id,
|
|
314
|
+
effect: 'exclude',
|
|
315
|
+
originalScore,
|
|
316
|
+
originalTier,
|
|
317
|
+
applied: true
|
|
318
|
+
},
|
|
319
|
+
categoryBreakdown,
|
|
320
|
+
executionTimeMs
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
case 'adjust_score': {
|
|
324
|
+
totalScore += override.value;
|
|
325
|
+
break;
|
|
326
|
+
}
|
|
327
|
+
case 'clamp_score': {
|
|
328
|
+
if (override.min !== undefined)
|
|
329
|
+
totalScore = Math.max(override.min, totalScore);
|
|
330
|
+
if (override.max !== undefined)
|
|
331
|
+
totalScore = Math.min(override.max, totalScore);
|
|
332
|
+
break;
|
|
333
|
+
}
|
|
334
|
+
case 'force_score': {
|
|
335
|
+
if (typeof override.score === 'number') {
|
|
336
|
+
totalScore = override.score;
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
const result = (0, core_1.evaluateCondition)(override.score, context);
|
|
340
|
+
totalScore = typeof result === 'number' ? result : 0;
|
|
341
|
+
}
|
|
342
|
+
break;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
overrideResult = {
|
|
346
|
+
id: override.id,
|
|
347
|
+
effect: override.effect,
|
|
348
|
+
originalScore,
|
|
349
|
+
originalTier,
|
|
350
|
+
applied: true
|
|
351
|
+
};
|
|
352
|
+
break; // first match wins
|
|
353
|
+
}
|
|
354
|
+
}
|
|
144
355
|
const executionTimeMs = Math.round((performance.now() - startTime) * 100) / 100;
|
|
145
356
|
return {
|
|
146
357
|
totalScore,
|
|
@@ -148,6 +359,8 @@ class ScoringStrategy {
|
|
|
148
359
|
fired,
|
|
149
360
|
iterations: 1,
|
|
150
361
|
tier,
|
|
362
|
+
categoryBreakdown,
|
|
363
|
+
override: overrideResult,
|
|
151
364
|
executionTimeMs
|
|
152
365
|
};
|
|
153
366
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../../src/engines/scoring/strategy.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../../src/engines/scoring/strategy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Scoring Engine Types
|
|
3
3
|
*/
|
|
4
|
-
import { BaseRule, BaseRuleSet, CompiledBaseRule, CompiledBaseRuleSet, CompiledCondition, Expression, BindingContext } from '../../core';
|
|
4
|
+
import { BaseRule, BaseRuleSet, CompiledBaseRule, CompiledBaseRuleSet, CompiledCondition, Condition, Expression, BindingContext } from '../../core';
|
|
5
5
|
/**
|
|
6
6
|
* Scoring methods control how scores are normalized and combined
|
|
7
7
|
*
|
|
@@ -66,6 +66,120 @@ export type ScoringTierMatch = {
|
|
|
66
66
|
description?: string;
|
|
67
67
|
threshold: number;
|
|
68
68
|
};
|
|
69
|
+
/**
|
|
70
|
+
* Category definition for grouping related scoring signals
|
|
71
|
+
*
|
|
72
|
+
* Categories provide a two-level weight hierarchy: category weights
|
|
73
|
+
* control how much each group contributes to the total, and signal
|
|
74
|
+
* weights within each category control relative importance of rules.
|
|
75
|
+
*/
|
|
76
|
+
export type ScoringCategory = {
|
|
77
|
+
id: string;
|
|
78
|
+
name?: string;
|
|
79
|
+
weight: number;
|
|
80
|
+
minSignalRatio?: number;
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Per-category result breakdown showing how each category contributed
|
|
84
|
+
*/
|
|
85
|
+
export type CategoryResult = {
|
|
86
|
+
id: string;
|
|
87
|
+
name?: string;
|
|
88
|
+
weight: number;
|
|
89
|
+
effectiveWeight: number;
|
|
90
|
+
rawScore: number;
|
|
91
|
+
weightedContribution: number;
|
|
92
|
+
signalsWithData: string[];
|
|
93
|
+
signalsMissing: string[];
|
|
94
|
+
excluded: boolean;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Override effect types
|
|
98
|
+
*/
|
|
99
|
+
export type OverrideEffect = 'force_tier' | 'floor_tier' | 'cap_tier' | 'exclude' | 'adjust_score' | 'clamp_score' | 'force_score';
|
|
100
|
+
/**
|
|
101
|
+
* Base override fields shared by all effects
|
|
102
|
+
*/
|
|
103
|
+
type BaseOverride = {
|
|
104
|
+
id: string;
|
|
105
|
+
condition: Condition;
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* Force tier — override to exact tier, optionally replace score
|
|
109
|
+
*/
|
|
110
|
+
export type ForceTierOverride = BaseOverride & {
|
|
111
|
+
effect: 'force_tier';
|
|
112
|
+
targetTier: string;
|
|
113
|
+
score?: number;
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* Floor tier — set minimum tier (bump up if below)
|
|
117
|
+
*/
|
|
118
|
+
export type FloorTierOverride = BaseOverride & {
|
|
119
|
+
effect: 'floor_tier';
|
|
120
|
+
targetTier: string;
|
|
121
|
+
};
|
|
122
|
+
/**
|
|
123
|
+
* Cap tier — set maximum tier (cap down if above)
|
|
124
|
+
*/
|
|
125
|
+
export type CapTierOverride = BaseOverride & {
|
|
126
|
+
effect: 'cap_tier';
|
|
127
|
+
targetTier: string;
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* Exclude — nullify the entire scoring result
|
|
131
|
+
*/
|
|
132
|
+
export type ExcludeOverride = BaseOverride & {
|
|
133
|
+
effect: 'exclude';
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* Adjust score — add/subtract from total score
|
|
137
|
+
*/
|
|
138
|
+
export type AdjustScoreOverride = BaseOverride & {
|
|
139
|
+
effect: 'adjust_score';
|
|
140
|
+
value: number;
|
|
141
|
+
};
|
|
142
|
+
/**
|
|
143
|
+
* Clamp score — enforce floor/ceiling on the score
|
|
144
|
+
*/
|
|
145
|
+
export type ClampScoreOverride = BaseOverride & {
|
|
146
|
+
effect: 'clamp_score';
|
|
147
|
+
min?: number;
|
|
148
|
+
max?: number;
|
|
149
|
+
};
|
|
150
|
+
/**
|
|
151
|
+
* Force score — replace the total score entirely
|
|
152
|
+
*/
|
|
153
|
+
export type ForceScoreOverride = BaseOverride & {
|
|
154
|
+
effect: 'force_score';
|
|
155
|
+
score: number | Expression;
|
|
156
|
+
};
|
|
157
|
+
/**
|
|
158
|
+
* Discriminated union of all override definitions
|
|
159
|
+
*
|
|
160
|
+
* Overrides are evaluated post-scoring in order — first match wins.
|
|
161
|
+
* Each effect type has its own required fields enforced by TypeScript.
|
|
162
|
+
*
|
|
163
|
+
* @example
|
|
164
|
+
* ```typescript
|
|
165
|
+
* const overrides: OverrideDefinition[] = [
|
|
166
|
+
* { id: 'closed-won', condition: ['equals', '$deal.stage', 'Closed Won'], effect: 'force_tier', targetTier: 'strong', score: 1000 },
|
|
167
|
+
* { id: 'fraud-flag', condition: ['equals', '$app.fraud', true], effect: 'exclude' },
|
|
168
|
+
* { id: 'vip-bonus', condition: ['equals', '$customer.vip', true], effect: 'adjust_score', value: 50 }
|
|
169
|
+
* ];
|
|
170
|
+
* ```
|
|
171
|
+
*/
|
|
172
|
+
export type OverrideDefinition = ForceTierOverride | FloorTierOverride | CapTierOverride | ExcludeOverride | AdjustScoreOverride | ClampScoreOverride | ForceScoreOverride;
|
|
173
|
+
/**
|
|
174
|
+
* Override result — attached to ScoringResult when an override fires
|
|
175
|
+
*/
|
|
176
|
+
export type OverrideResult = {
|
|
177
|
+
id: string;
|
|
178
|
+
effect: OverrideEffect;
|
|
179
|
+
originalScore: number;
|
|
180
|
+
originalTier?: ScoringTierMatch;
|
|
181
|
+
applied: true;
|
|
182
|
+
};
|
|
69
183
|
/**
|
|
70
184
|
* Scoring action - contributes a score when rule matches
|
|
71
185
|
*/
|
|
@@ -82,6 +196,7 @@ export type ScoringAction = {
|
|
|
82
196
|
* Scoring rule - uses 'then' for scoring properties
|
|
83
197
|
*/
|
|
84
198
|
export type ScoringRule = BaseRule & {
|
|
199
|
+
category?: string;
|
|
85
200
|
then: ScoringAction;
|
|
86
201
|
};
|
|
87
202
|
/**
|
|
@@ -102,6 +217,8 @@ export type ScoringConfig = {
|
|
|
102
217
|
outputBounds?: OutputBounds;
|
|
103
218
|
baseScore?: number;
|
|
104
219
|
tiers?: TierDefinition[];
|
|
220
|
+
categories?: ScoringCategory[];
|
|
221
|
+
overrides?: OverrideDefinition[];
|
|
105
222
|
};
|
|
106
223
|
/**
|
|
107
224
|
* Compiled scoring action
|
|
@@ -120,8 +237,28 @@ export type CompiledScoringAction = {
|
|
|
120
237
|
* Compiled scoring rule
|
|
121
238
|
*/
|
|
122
239
|
export type CompiledScoringRule = CompiledBaseRule & {
|
|
240
|
+
category?: string;
|
|
123
241
|
action: CompiledScoringAction;
|
|
124
242
|
};
|
|
243
|
+
/**
|
|
244
|
+
* Compiled override — replaces source Condition with CompiledCondition
|
|
245
|
+
* Each variant preserves its effect-specific fields
|
|
246
|
+
*/
|
|
247
|
+
export type CompiledOverrideDefinition = (Omit<ForceTierOverride, 'condition'> & {
|
|
248
|
+
condition: CompiledCondition;
|
|
249
|
+
}) | (Omit<FloorTierOverride, 'condition'> & {
|
|
250
|
+
condition: CompiledCondition;
|
|
251
|
+
}) | (Omit<CapTierOverride, 'condition'> & {
|
|
252
|
+
condition: CompiledCondition;
|
|
253
|
+
}) | (Omit<ExcludeOverride, 'condition'> & {
|
|
254
|
+
condition: CompiledCondition;
|
|
255
|
+
}) | (Omit<AdjustScoreOverride, 'condition'> & {
|
|
256
|
+
condition: CompiledCondition;
|
|
257
|
+
}) | (Omit<ClampScoreOverride, 'condition'> & {
|
|
258
|
+
condition: CompiledCondition;
|
|
259
|
+
}) | (Omit<ForceScoreOverride, 'condition'> & {
|
|
260
|
+
condition: CompiledCondition;
|
|
261
|
+
});
|
|
125
262
|
/**
|
|
126
263
|
* Compiled scoring ruleset
|
|
127
264
|
*/
|
|
@@ -129,6 +266,7 @@ export type CompiledScoringRuleSet = CompiledBaseRuleSet & {
|
|
|
129
266
|
mode: 'scoring';
|
|
130
267
|
rules: CompiledScoringRule[];
|
|
131
268
|
config: ScoringConfig;
|
|
269
|
+
overrides?: CompiledOverrideDefinition[];
|
|
132
270
|
};
|
|
133
271
|
/**
|
|
134
272
|
* Score function for dynamic scoring
|
|
@@ -154,6 +292,9 @@ export type ScoringResult = {
|
|
|
154
292
|
fired: string[];
|
|
155
293
|
iterations: 1;
|
|
156
294
|
tier?: ScoringTierMatch;
|
|
295
|
+
categoryBreakdown?: CategoryResult[];
|
|
296
|
+
override?: OverrideResult;
|
|
157
297
|
executionTimeMs: number;
|
|
158
298
|
};
|
|
299
|
+
export {};
|
|
159
300
|
//# sourceMappingURL=types.d.ts.map
|