@higher.archi/boe 1.0.6 → 1.0.8
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/evaluation/decay.d.ts +60 -0
- package/dist/core/evaluation/decay.d.ts.map +1 -0
- package/dist/core/evaluation/decay.js +111 -0
- package/dist/core/evaluation/decay.js.map +1 -0
- package/dist/core/evaluation/index.d.ts +2 -0
- package/dist/core/evaluation/index.d.ts.map +1 -1
- package/dist/core/evaluation/index.js +5 -1
- package/dist/core/evaluation/index.js.map +1 -1
- package/dist/engines/bayesian/compiler.d.ts.map +1 -1
- package/dist/engines/bayesian/compiler.js +14 -2
- package/dist/engines/bayesian/compiler.js.map +1 -1
- package/dist/engines/bayesian/strategy.d.ts.map +1 -1
- package/dist/engines/bayesian/strategy.js +41 -4
- package/dist/engines/bayesian/strategy.js.map +1 -1
- package/dist/engines/bayesian/types.d.ts +16 -0
- package/dist/engines/bayesian/types.d.ts.map +1 -1
- package/dist/engines/bayesian/types.js.map +1 -1
- package/dist/engines/defeasible/compiler.d.ts.map +1 -1
- package/dist/engines/defeasible/compiler.js +16 -2
- package/dist/engines/defeasible/compiler.js.map +1 -1
- package/dist/engines/defeasible/strategy.d.ts.map +1 -1
- package/dist/engines/defeasible/strategy.js +47 -2
- package/dist/engines/defeasible/strategy.js.map +1 -1
- package/dist/engines/defeasible/types.d.ts +29 -1
- package/dist/engines/defeasible/types.d.ts.map +1 -1
- package/dist/engines/defeasible/types.js.map +1 -1
- package/dist/engines/scoring/compiler.d.ts.map +1 -1
- package/dist/engines/scoring/compiler.js +17 -4
- package/dist/engines/scoring/compiler.js.map +1 -1
- package/dist/engines/scoring/strategy.d.ts.map +1 -1
- package/dist/engines/scoring/strategy.js +82 -2
- package/dist/engines/scoring/strategy.js.map +1 -1
- package/dist/engines/scoring/types.d.ts +17 -0
- package/dist/engines/scoring/types.d.ts.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/core/evaluation/decay.ts +165 -0
- package/src/core/evaluation/index.ts +13 -0
- package/src/engines/bayesian/compiler.ts +15 -2
- package/src/engines/bayesian/strategy.ts +54 -4
- package/src/engines/bayesian/types.ts +17 -0
- package/src/engines/defeasible/compiler.ts +17 -2
- package/src/engines/defeasible/strategy.ts +62 -2
- package/src/engines/defeasible/types.ts +33 -0
- package/src/engines/scoring/compiler.ts +18 -4
- package/src/engines/scoring/strategy.ts +101 -3
- package/src/engines/scoring/types.ts +18 -0
- package/src/index.ts +12 -0
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Scoring Engine Types
|
|
3
3
|
*/
|
|
4
4
|
import { BaseRule, BaseRuleSet, CompiledBaseRule, CompiledBaseRuleSet, CompiledCondition, Condition, Expression, BindingContext } from '../../core';
|
|
5
|
+
import { DecayConfig, DecayInfo } from '../../core/evaluation/decay';
|
|
5
6
|
/**
|
|
6
7
|
* Scoring methods control how scores are normalized and combined
|
|
7
8
|
*
|
|
@@ -199,6 +200,10 @@ export type ScoringAction = {
|
|
|
199
200
|
};
|
|
200
201
|
reason?: string;
|
|
201
202
|
nullHandling?: NullHandling;
|
|
203
|
+
decay?: {
|
|
204
|
+
timestamp: string | Expression;
|
|
205
|
+
config?: Partial<DecayConfig>;
|
|
206
|
+
};
|
|
202
207
|
};
|
|
203
208
|
/**
|
|
204
209
|
* Scoring rule - uses 'then' for scoring properties
|
|
@@ -228,6 +233,10 @@ export type ScoringConfig = {
|
|
|
228
233
|
categories?: ScoringCategory[];
|
|
229
234
|
overrides?: OverrideDefinition[];
|
|
230
235
|
nullHandling?: NullHandling;
|
|
236
|
+
decay?: {
|
|
237
|
+
timestamp?: string | Expression;
|
|
238
|
+
config: DecayConfig;
|
|
239
|
+
};
|
|
231
240
|
};
|
|
232
241
|
/**
|
|
233
242
|
* Compiled scoring action
|
|
@@ -242,6 +251,10 @@ export type CompiledScoringAction = {
|
|
|
242
251
|
};
|
|
243
252
|
reason?: string;
|
|
244
253
|
nullHandling?: NullHandling;
|
|
254
|
+
decay?: {
|
|
255
|
+
timestamp: string | CompiledCondition;
|
|
256
|
+
config?: Partial<DecayConfig>;
|
|
257
|
+
};
|
|
245
258
|
};
|
|
246
259
|
/**
|
|
247
260
|
* Compiled scoring rule
|
|
@@ -300,11 +313,15 @@ export type ScoringResult = {
|
|
|
300
313
|
totalScore: number;
|
|
301
314
|
confidence: number;
|
|
302
315
|
contributions: Record<string, number>;
|
|
316
|
+
contributionPercentages: Record<string, number>;
|
|
303
317
|
fired: string[];
|
|
304
318
|
iterations: 1;
|
|
305
319
|
tier?: ScoringTierMatch;
|
|
306
320
|
categoryBreakdown?: CategoryResult[];
|
|
307
321
|
override?: OverrideResult;
|
|
322
|
+
totalScoreBeforeDecay?: number;
|
|
323
|
+
contributionsBeforeDecay?: Record<string, number>;
|
|
324
|
+
decayInfo?: Record<string, DecayInfo>;
|
|
308
325
|
executionTimeMs: number;
|
|
309
326
|
};
|
|
310
327
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/engines/scoring/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,cAAc,EACf,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/engines/scoring/types.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -53,5 +53,7 @@ export type { ExpertRule, ExpertRuleSet, ExpertConfig, ExplainBlock, CompiledExp
|
|
|
53
53
|
export { PricingStrategy, compilePricingRuleSet, compilePricingRule, pricingStrategy, pricingEngine, calculateFlat, calculateGraduated, calculateVolume, formatCurrency, formatNumber, formatPercent, round, calculateDiscount, applyMinMax, CURRENCIES, getCurrencyInfo } from './engines/pricing';
|
|
54
54
|
export type { CurrencyCode, CurrencyInfo, PricingRule, PricingRuleSet, PricingConfig, PricingComponent, PricingMode, PricingInput, PricingPackage, FlatPricing, GraduatedTier, GraduatedPricing, VolumeBracket, VolumePricing, Meter, MultiMeterPricing, FormulaPricing, Adjustment, DiscountAdjustment, MinimumAdjustment, MaximumAdjustment, Metric, ScenarioDefinition, ScenarioDefinitions, AttributeSchema, ProductType, ResolvedPricingConfig, CompiledPricingRuleSet, CompiledPricingRule, CompiledPricingComponent, CompiledPricingMode, CompiledAdjustment, CompiledMetric, PricingOptions, PricingResult, ScenarioComparisonResult, ScenarioResult, ComponentResult, AdjustmentResult, TierBreakdown, MeterResult, PricingSummary, CalculatorContext, TierCalculationResult } from './engines/pricing';
|
|
55
55
|
export { soundex, nysiis, caverphone2, cosineSimilarity } from './functions';
|
|
56
|
+
export { calculateDecayMultiplier, resolveDecayTimestamp } from './core/evaluation/decay';
|
|
57
|
+
export type { DecayCurve, DecayTimeUnit, DecayConfig, DecayInfo } from './core/evaluation/decay';
|
|
56
58
|
export * from './qfacts';
|
|
57
59
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -30,7 +30,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
30
30
|
};
|
|
31
31
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
32
|
exports.compileUtilityRule = exports.compileUtilityRuleSet = exports.UtilityStrategy = exports.SEMANTIC_WEIGHTS = exports.constraintStrategy = exports.compileConstraintRuleSet = exports.ConstraintStrategy = exports.stateMachineStrategy = exports.compileStateMachineDefinition = exports.compileStateMachine = exports.StateMachineStrategy = exports.monteCarloStrategy = exports.compileMonteCarloRuleSet = exports.MonteCarloStrategy = exports.SEMANTIC_LIKELIHOODS = exports.parseLikelihood = exports.bayesianStrategy = exports.compileBayesianRule = exports.compileBayesianRuleSet = exports.BayesianStrategy = exports.autoAdjustCoverage = exports.analyzeCoverage = exports.compileFuzzyVariable = exports.fuzzyStrategy = exports.compileFuzzyRuleSet = exports.FuzzyStrategy = exports.sequentialStrategy = exports.compileSequentialRuleSet = exports.SequentialStrategy = exports.scoringStrategy = exports.compileScoringRuleSet = exports.ScoringStrategy = exports.backwardStrategy = exports.compileBackwardRuleSet = exports.BackwardChainingStrategy = exports.forwardStrategy = exports.compileForwardRule = exports.compileForwardRuleSet = exports.ForwardChainingStrategy = exports.PricingEngine = exports.UtilityEngine = exports.ConstraintEngine = exports.StateMachineEngine = exports.MonteCarloEngine = exports.BayesianEngine = exports.FuzzyEngine = exports.SequentialEngine = exports.ScoringEngine = exports.BackwardEngine = exports.ForwardEngine = void 0;
|
|
33
|
-
exports.cosineSimilarity = exports.caverphone2 = exports.nysiis = exports.soundex = exports.getCurrencyInfo = exports.CURRENCIES = exports.applyMinMax = exports.calculateDiscount = exports.round = exports.formatPercent = exports.formatNumber = exports.formatCurrency = exports.calculateVolume = exports.calculateGraduated = exports.calculateFlat = exports.pricingEngine = exports.pricingStrategy = exports.compilePricingRule = exports.compilePricingRuleSet = exports.PricingStrategy = exports.buildAvailableRefs = exports.hasInterpolation = exports.interpolate = exports.compileTemplate = exports.expertStrategy = exports.compileExpertRuleSet = exports.ExpertStrategy = exports.ExpertEngine = exports.compileDefeasibleRuleSet = exports.DefeasibleEngine = exports.utilityStrategy = void 0;
|
|
33
|
+
exports.resolveDecayTimestamp = exports.calculateDecayMultiplier = exports.cosineSimilarity = exports.caverphone2 = exports.nysiis = exports.soundex = exports.getCurrencyInfo = exports.CURRENCIES = exports.applyMinMax = exports.calculateDiscount = exports.round = exports.formatPercent = exports.formatNumber = exports.formatCurrency = exports.calculateVolume = exports.calculateGraduated = exports.calculateFlat = exports.pricingEngine = exports.pricingStrategy = exports.compilePricingRule = exports.compilePricingRuleSet = exports.PricingStrategy = exports.buildAvailableRefs = exports.hasInterpolation = exports.interpolate = exports.compileTemplate = exports.expertStrategy = exports.compileExpertRuleSet = exports.ExpertStrategy = exports.ExpertEngine = exports.compileDefeasibleRuleSet = exports.DefeasibleEngine = exports.utilityStrategy = void 0;
|
|
34
34
|
// ========================================
|
|
35
35
|
// Engines
|
|
36
36
|
// ========================================
|
|
@@ -169,6 +169,10 @@ Object.defineProperty(exports, "soundex", { enumerable: true, get: function () {
|
|
|
169
169
|
Object.defineProperty(exports, "nysiis", { enumerable: true, get: function () { return functions_1.nysiis; } });
|
|
170
170
|
Object.defineProperty(exports, "caverphone2", { enumerable: true, get: function () { return functions_1.caverphone2; } });
|
|
171
171
|
Object.defineProperty(exports, "cosineSimilarity", { enumerable: true, get: function () { return functions_1.cosineSimilarity; } });
|
|
172
|
+
// Temporal Decay (re-exported from core for convenience)
|
|
173
|
+
var decay_1 = require("./core/evaluation/decay");
|
|
174
|
+
Object.defineProperty(exports, "calculateDecayMultiplier", { enumerable: true, get: function () { return decay_1.calculateDecayMultiplier; } });
|
|
175
|
+
Object.defineProperty(exports, "resolveDecayTimestamp", { enumerable: true, get: function () { return decay_1.resolveDecayTimestamp; } });
|
|
172
176
|
// ========================================
|
|
173
177
|
// QFacts - Probabilistic Fact Hydration
|
|
174
178
|
// ========================================
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@higher.archi/boe",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.8",
|
|
4
4
|
"description": "A multi-strategy rule engine supporting forward chaining, backward chaining, scoring, sequential, fuzzy logic, and Bayesian inference",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Temporal Decay Utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides continuous decay multipliers (0→1) that degrade a rule's
|
|
5
|
+
* contribution based on how old its underlying data is.
|
|
6
|
+
*
|
|
7
|
+
* Complementary to temporal validity (binary gate) — validity runs first,
|
|
8
|
+
* decay modifies strength continuously.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { BindingContext, Fact } from '../types';
|
|
12
|
+
|
|
13
|
+
// ========================================
|
|
14
|
+
// Types
|
|
15
|
+
// ========================================
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Decay curve shape
|
|
19
|
+
* - exponential: e^(-ln(2)/halfLife * age), smooth asymptotic decay
|
|
20
|
+
* - linear: 1 - age/maxAge, straight-line to zero
|
|
21
|
+
* - step: binary cutoff at threshold age
|
|
22
|
+
*/
|
|
23
|
+
export type DecayCurve = 'exponential' | 'linear' | 'step';
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Time unit for decay calculations
|
|
27
|
+
*/
|
|
28
|
+
export type DecayTimeUnit = 'hours' | 'days' | 'weeks' | 'months';
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Configuration for temporal decay
|
|
32
|
+
*/
|
|
33
|
+
export type DecayConfig = {
|
|
34
|
+
curve: DecayCurve;
|
|
35
|
+
timeUnit: DecayTimeUnit;
|
|
36
|
+
halfLife?: number; // exponential: age at which multiplier = 0.5
|
|
37
|
+
maxAge?: number; // linear: age at which multiplier = 0
|
|
38
|
+
threshold?: number; // step: binary cutoff age
|
|
39
|
+
floor?: number; // minimum multiplier (default 0)
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Decay calculation result with audit trail
|
|
44
|
+
*/
|
|
45
|
+
export type DecayInfo = {
|
|
46
|
+
multiplier: number;
|
|
47
|
+
ageInUnits: number;
|
|
48
|
+
curve: DecayCurve;
|
|
49
|
+
timestamp: string; // resolved ISO timestamp
|
|
50
|
+
fullyDecayed: boolean;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
// ========================================
|
|
54
|
+
// Time Unit Conversion
|
|
55
|
+
// ========================================
|
|
56
|
+
|
|
57
|
+
const MS_PER_HOUR = 3_600_000;
|
|
58
|
+
const MS_PER_DAY = 86_400_000;
|
|
59
|
+
const MS_PER_WEEK = 604_800_000;
|
|
60
|
+
const MS_PER_MONTH = 2_592_000_000; // 30 days
|
|
61
|
+
|
|
62
|
+
function msPerUnit(unit: DecayTimeUnit): number {
|
|
63
|
+
switch (unit) {
|
|
64
|
+
case 'hours': return MS_PER_HOUR;
|
|
65
|
+
case 'days': return MS_PER_DAY;
|
|
66
|
+
case 'weeks': return MS_PER_WEEK;
|
|
67
|
+
case 'months': return MS_PER_MONTH;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// ========================================
|
|
72
|
+
// Core Calculation
|
|
73
|
+
// ========================================
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Calculate a decay multiplier based on age and configuration
|
|
77
|
+
*
|
|
78
|
+
* @param dataTimestamp - When the data was collected/created
|
|
79
|
+
* @param now - Current time reference point
|
|
80
|
+
* @param config - Decay configuration
|
|
81
|
+
* @returns DecayInfo with multiplier and audit data
|
|
82
|
+
*/
|
|
83
|
+
export function calculateDecayMultiplier(
|
|
84
|
+
dataTimestamp: Date,
|
|
85
|
+
now: Date,
|
|
86
|
+
config: DecayConfig
|
|
87
|
+
): DecayInfo {
|
|
88
|
+
const ageMs = now.getTime() - dataTimestamp.getTime();
|
|
89
|
+
const ageInUnits = ageMs / msPerUnit(config.timeUnit);
|
|
90
|
+
const floor = config.floor ?? 0;
|
|
91
|
+
|
|
92
|
+
let rawMultiplier: number;
|
|
93
|
+
|
|
94
|
+
switch (config.curve) {
|
|
95
|
+
case 'exponential': {
|
|
96
|
+
const halfLife = config.halfLife ?? 1;
|
|
97
|
+
// e^(-ln(2)/halfLife * age)
|
|
98
|
+
rawMultiplier = Math.exp(-Math.LN2 / halfLife * ageInUnits);
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
case 'linear': {
|
|
103
|
+
const maxAge = config.maxAge ?? 1;
|
|
104
|
+
rawMultiplier = 1 - ageInUnits / maxAge;
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
case 'step': {
|
|
109
|
+
const threshold = config.threshold ?? 1;
|
|
110
|
+
rawMultiplier = ageInUnits < threshold ? 1.0 : 0.0;
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Clamp to [floor, 1]
|
|
116
|
+
const multiplier = Math.max(floor, Math.min(1, rawMultiplier));
|
|
117
|
+
|
|
118
|
+
return {
|
|
119
|
+
multiplier,
|
|
120
|
+
ageInUnits,
|
|
121
|
+
curve: config.curve,
|
|
122
|
+
timestamp: dataTimestamp.toISOString(),
|
|
123
|
+
fullyDecayed: multiplier <= floor
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Resolve a decay timestamp from a $-prefixed path in the binding context
|
|
129
|
+
*
|
|
130
|
+
* @param ref - A $-prefixed path like '$inspection.date'
|
|
131
|
+
* @param context - The current binding context
|
|
132
|
+
* @returns Resolved Date, or null if path is missing/invalid
|
|
133
|
+
*/
|
|
134
|
+
export function resolveDecayTimestamp(ref: string, context: BindingContext): Date | null {
|
|
135
|
+
if (!ref.startsWith('$')) return null;
|
|
136
|
+
|
|
137
|
+
const stripped = ref.slice(1);
|
|
138
|
+
const parts = stripped.split('.');
|
|
139
|
+
const param = parts[0];
|
|
140
|
+
const path = parts.slice(1);
|
|
141
|
+
|
|
142
|
+
const fact = context[param] as Fact | undefined;
|
|
143
|
+
if (!fact) return null;
|
|
144
|
+
|
|
145
|
+
let value: any = fact.data;
|
|
146
|
+
for (const key of path) {
|
|
147
|
+
if (value === null || value === undefined) return null;
|
|
148
|
+
value = value[key];
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (value === null || value === undefined) return null;
|
|
152
|
+
|
|
153
|
+
// Accept Date objects, ISO strings, or numeric timestamps
|
|
154
|
+
if (value instanceof Date) return value;
|
|
155
|
+
if (typeof value === 'string') {
|
|
156
|
+
const parsed = new Date(value);
|
|
157
|
+
return isNaN(parsed.getTime()) ? null : parsed;
|
|
158
|
+
}
|
|
159
|
+
if (typeof value === 'number') {
|
|
160
|
+
const parsed = new Date(value);
|
|
161
|
+
return isNaN(parsed.getTime()) ? null : parsed;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
@@ -18,3 +18,16 @@ export {
|
|
|
18
18
|
getRuleTemporalInfo,
|
|
19
19
|
RulesetMetadata
|
|
20
20
|
} from './temporal';
|
|
21
|
+
|
|
22
|
+
// Temporal decay utilities
|
|
23
|
+
export {
|
|
24
|
+
calculateDecayMultiplier,
|
|
25
|
+
resolveDecayTimestamp
|
|
26
|
+
} from './decay';
|
|
27
|
+
|
|
28
|
+
export type {
|
|
29
|
+
DecayCurve,
|
|
30
|
+
DecayTimeUnit,
|
|
31
|
+
DecayConfig,
|
|
32
|
+
DecayInfo
|
|
33
|
+
} from './decay';
|
|
@@ -346,6 +346,17 @@ export function compileBayesianRule(
|
|
|
346
346
|
const inputs = rule.inputs.map(compileInputParameter);
|
|
347
347
|
const when = rule.when ? compileCondition(rule.when) : undefined;
|
|
348
348
|
|
|
349
|
+
// Compile decay — only pass through $-prefixed string timestamps
|
|
350
|
+
let compiledDecay: { timestamp: string; config?: any } | undefined;
|
|
351
|
+
if (rule.decay) {
|
|
352
|
+
const ts = rule.decay.timestamp;
|
|
353
|
+
if (typeof ts === 'string') {
|
|
354
|
+
compiledDecay = { timestamp: ts, config: rule.decay.config };
|
|
355
|
+
}
|
|
356
|
+
// Expression timestamps for Bayesian are not supported (would need runtime eval);
|
|
357
|
+
// only $-prefixed paths are supported
|
|
358
|
+
}
|
|
359
|
+
|
|
349
360
|
return {
|
|
350
361
|
id: rule.id,
|
|
351
362
|
name: rule.name,
|
|
@@ -354,7 +365,8 @@ export function compileBayesianRule(
|
|
|
354
365
|
index,
|
|
355
366
|
inputs,
|
|
356
367
|
when,
|
|
357
|
-
likelihood: compileLikelihoodMap(rule.likelihood, hypothesisNames, rule.id)
|
|
368
|
+
likelihood: compileLikelihoodMap(rule.likelihood, hypothesisNames, rule.id),
|
|
369
|
+
decay: compiledDecay
|
|
358
370
|
};
|
|
359
371
|
}
|
|
360
372
|
|
|
@@ -370,7 +382,8 @@ export function compileBayesianRuleSet(ruleSet: BayesianRuleSet): CompiledBayesi
|
|
|
370
382
|
const config: BayesianConfig = {
|
|
371
383
|
mode: 'bayesian',
|
|
372
384
|
threshold: ruleSet.config?.threshold,
|
|
373
|
-
priorDefault: ruleSet.config?.priorDefault ?? 'uniform'
|
|
385
|
+
priorDefault: ruleSet.config?.priorDefault ?? 'uniform',
|
|
386
|
+
decay: ruleSet.config?.decay
|
|
374
387
|
};
|
|
375
388
|
|
|
376
389
|
// Get hypothesis names for validation
|
|
@@ -13,6 +13,12 @@ import {
|
|
|
13
13
|
Fact
|
|
14
14
|
} from '../../core';
|
|
15
15
|
import { IWorkingMemory } from '../../core/memory';
|
|
16
|
+
import {
|
|
17
|
+
calculateDecayMultiplier,
|
|
18
|
+
resolveDecayTimestamp,
|
|
19
|
+
DecayConfig,
|
|
20
|
+
DecayInfo
|
|
21
|
+
} from '../../core/evaluation/decay';
|
|
16
22
|
|
|
17
23
|
import {
|
|
18
24
|
CompiledBayesianRuleSet,
|
|
@@ -191,6 +197,8 @@ export class BayesianStrategy {
|
|
|
191
197
|
const fired: string[] = [];
|
|
192
198
|
const evidence: EvidenceEntry[] = [];
|
|
193
199
|
let thresholdExceeded: string | undefined;
|
|
200
|
+
const decayInfoMap: Record<string, DecayInfo> = {};
|
|
201
|
+
const now = new Date();
|
|
194
202
|
|
|
195
203
|
// Track which hypotheses were below threshold initially
|
|
196
204
|
// (so we can detect when they cross it)
|
|
@@ -213,20 +221,59 @@ export class BayesianStrategy {
|
|
|
213
221
|
fired.push(rule.id);
|
|
214
222
|
}
|
|
215
223
|
|
|
224
|
+
// Compute decay for this rule's evidence
|
|
225
|
+
let effectiveLikelihoods = rule.likelihood;
|
|
226
|
+
let likelihoodsBeforeDecay: CompiledLikelihoodMap | undefined;
|
|
227
|
+
let ruleDecayInfo: DecayInfo | undefined;
|
|
228
|
+
|
|
229
|
+
const ruleDecay = rule.decay;
|
|
230
|
+
const engineDecay = config.decay;
|
|
231
|
+
|
|
232
|
+
if (ruleDecay || engineDecay) {
|
|
233
|
+
const tsRef = ruleDecay?.timestamp ?? (engineDecay?.timestamp as string | undefined);
|
|
234
|
+
|
|
235
|
+
if (typeof tsRef === 'string') {
|
|
236
|
+
const dataTimestamp = resolveDecayTimestamp(tsRef, activation.facts);
|
|
237
|
+
|
|
238
|
+
if (dataTimestamp) {
|
|
239
|
+
const decayConfig: DecayConfig = {
|
|
240
|
+
...(engineDecay?.config ?? { curve: 'exponential', timeUnit: 'days' }),
|
|
241
|
+
...ruleDecay?.config
|
|
242
|
+
} as DecayConfig;
|
|
243
|
+
|
|
244
|
+
const info = calculateDecayMultiplier(dataTimestamp, now, decayConfig);
|
|
245
|
+
ruleDecayInfo = info;
|
|
246
|
+
decayInfoMap[rule.id] = info;
|
|
247
|
+
|
|
248
|
+
// Decay likelihoods toward 1.0 (neutral)
|
|
249
|
+
// decayedLikelihood = 1.0 + (originalLikelihood - 1.0) * multiplier
|
|
250
|
+
if (info.multiplier < 1.0) {
|
|
251
|
+
likelihoodsBeforeDecay = { ...rule.likelihood };
|
|
252
|
+
effectiveLikelihoods = {};
|
|
253
|
+
for (const [h, lh] of Object.entries(rule.likelihood)) {
|
|
254
|
+
effectiveLikelihoods[h] = 1.0 + (lh - 1.0) * info.multiplier;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
|
|
216
261
|
// Record evidence
|
|
217
262
|
evidence.push({
|
|
218
263
|
ruleId: rule.id,
|
|
219
264
|
ruleName: rule.name,
|
|
220
|
-
likelihoods:
|
|
265
|
+
likelihoods: effectiveLikelihoods,
|
|
266
|
+
likelihoodsBeforeDecay,
|
|
267
|
+
decayInfo: ruleDecayInfo
|
|
221
268
|
});
|
|
222
269
|
|
|
223
270
|
// Callback
|
|
224
271
|
if (onFire) {
|
|
225
|
-
onFire(rule.id, activation.facts,
|
|
272
|
+
onFire(rule.id, activation.facts, effectiveLikelihoods);
|
|
226
273
|
}
|
|
227
274
|
|
|
228
|
-
// Update posteriors with this evidence
|
|
229
|
-
posteriors = applyEvidence(posteriors,
|
|
275
|
+
// Update posteriors with this evidence (using decayed likelihoods)
|
|
276
|
+
posteriors = applyEvidence(posteriors, effectiveLikelihoods);
|
|
230
277
|
|
|
231
278
|
// Check if any hypothesis crossed the threshold (from below to above)
|
|
232
279
|
if (threshold !== undefined && thresholdExceeded === undefined) {
|
|
@@ -255,6 +302,8 @@ export class BayesianStrategy {
|
|
|
255
302
|
|
|
256
303
|
const executionTimeMs = Math.round((performance.now() - startTime) * 100) / 100;
|
|
257
304
|
|
|
305
|
+
const hasDecay = Object.keys(decayInfoMap).length > 0;
|
|
306
|
+
|
|
258
307
|
return {
|
|
259
308
|
priors: normalizedPriors,
|
|
260
309
|
posteriors,
|
|
@@ -263,6 +312,7 @@ export class BayesianStrategy {
|
|
|
263
312
|
fired,
|
|
264
313
|
evidence,
|
|
265
314
|
thresholdExceeded,
|
|
315
|
+
...(hasDecay ? { decayInfo: decayInfoMap } : {}),
|
|
266
316
|
iterations: 1,
|
|
267
317
|
executionTimeMs
|
|
268
318
|
};
|
|
@@ -17,6 +17,8 @@ import {
|
|
|
17
17
|
BindingContext
|
|
18
18
|
} from '../../core';
|
|
19
19
|
|
|
20
|
+
import { DecayConfig, DecayInfo } from '../../core/evaluation/decay';
|
|
21
|
+
|
|
20
22
|
// ========================================
|
|
21
23
|
// Likelihood Value Types
|
|
22
24
|
// ========================================
|
|
@@ -100,6 +102,10 @@ export type PriorDefault =
|
|
|
100
102
|
*/
|
|
101
103
|
export type BayesianRule = BaseRule & {
|
|
102
104
|
likelihood: LikelihoodMap; // How this evidence affects each hypothesis
|
|
105
|
+
decay?: {
|
|
106
|
+
timestamp: string | Expression; // e.g. '$sensor.readingDate'
|
|
107
|
+
config?: Partial<DecayConfig>; // overrides engine-level defaults
|
|
108
|
+
};
|
|
103
109
|
};
|
|
104
110
|
|
|
105
111
|
/**
|
|
@@ -109,6 +115,10 @@ export type BayesianConfig = {
|
|
|
109
115
|
mode: 'bayesian';
|
|
110
116
|
threshold?: number; // Flag if any posterior exceeds this (e.g., 0.5)
|
|
111
117
|
priorDefault?: PriorDefault; // How to fill missing priors (default: 'uniform')
|
|
118
|
+
decay?: {
|
|
119
|
+
timestamp?: string | Expression; // default timestamp path for all rules
|
|
120
|
+
config: DecayConfig; // engine-level decay config
|
|
121
|
+
};
|
|
112
122
|
};
|
|
113
123
|
|
|
114
124
|
/**
|
|
@@ -152,6 +162,10 @@ export type CompiledLikelihoodMap = Record<string, number>;
|
|
|
152
162
|
*/
|
|
153
163
|
export type CompiledBayesianRule = CompiledBaseRule & {
|
|
154
164
|
likelihood: CompiledLikelihoodMap;
|
|
165
|
+
decay?: {
|
|
166
|
+
timestamp: string; // $-prefixed path
|
|
167
|
+
config?: Partial<DecayConfig>;
|
|
168
|
+
};
|
|
155
169
|
};
|
|
156
170
|
|
|
157
171
|
/**
|
|
@@ -176,6 +190,8 @@ export type EvidenceEntry = {
|
|
|
176
190
|
ruleId: string;
|
|
177
191
|
ruleName?: string;
|
|
178
192
|
likelihoods: CompiledLikelihoodMap;
|
|
193
|
+
likelihoodsBeforeDecay?: CompiledLikelihoodMap; // original likelihoods before decay
|
|
194
|
+
decayInfo?: DecayInfo;
|
|
179
195
|
};
|
|
180
196
|
|
|
181
197
|
/**
|
|
@@ -197,6 +213,7 @@ export type BayesianResult = {
|
|
|
197
213
|
fired: string[]; // Rules that matched and provided evidence
|
|
198
214
|
evidence: EvidenceEntry[]; // Audit trail
|
|
199
215
|
thresholdExceeded?: string; // First hypothesis to exceed threshold (if any)
|
|
216
|
+
decayInfo?: Record<string, DecayInfo>; // per-rule decay audit
|
|
200
217
|
iterations: 1; // Bayesian is always one-pass
|
|
201
218
|
executionTimeMs: number; // Processing time in milliseconds
|
|
202
219
|
};
|
|
@@ -34,7 +34,8 @@ const DEFAULT_CONFIG: Required<DefeasibleConfig> = {
|
|
|
34
34
|
aggregation: 'average',
|
|
35
35
|
threshold: 0.5,
|
|
36
36
|
conflictResolution: 'specificity',
|
|
37
|
-
maxIterations: 100
|
|
37
|
+
maxIterations: 100,
|
|
38
|
+
decay: undefined as any // Optional at runtime; Required<> demands a key
|
|
38
39
|
};
|
|
39
40
|
|
|
40
41
|
// ========================================
|
|
@@ -198,6 +199,19 @@ function compileRule(rule: DefeasibleRule, index: number): CompiledDefeasibleRul
|
|
|
198
199
|
const inputs = (rule.inputs || []).map(compileInputParameter);
|
|
199
200
|
const when = rule.when ? compileCondition(rule.when) : undefined;
|
|
200
201
|
|
|
202
|
+
// Compile decay — only pass through $-prefixed string timestamps
|
|
203
|
+
let compiledDecay: CompiledDefeasibleRule['decay'] | undefined;
|
|
204
|
+
if (rule.decay) {
|
|
205
|
+
const ts = rule.decay.timestamp;
|
|
206
|
+
if (typeof ts === 'string') {
|
|
207
|
+
compiledDecay = {
|
|
208
|
+
timestamp: ts,
|
|
209
|
+
config: rule.decay.config,
|
|
210
|
+
target: rule.decay.target
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
201
215
|
return {
|
|
202
216
|
id: rule.id,
|
|
203
217
|
name: rule.name,
|
|
@@ -210,7 +224,8 @@ function compileRule(rule: DefeasibleRule, index: number): CompiledDefeasibleRul
|
|
|
210
224
|
credibility: normalizeCredibility(rule.credibility),
|
|
211
225
|
conclusion: compileConclusion(rule.conclude),
|
|
212
226
|
defeats: (rule.defeats || []).map(normalizeDefeat),
|
|
213
|
-
specificity: countSpecificity(rule)
|
|
227
|
+
specificity: countSpecificity(rule),
|
|
228
|
+
decay: compiledDecay
|
|
214
229
|
};
|
|
215
230
|
}
|
|
216
231
|
|