@cogitator-ai/core 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +117 -0
- package/dist/causal/capabilities/causal-explainer.d.ts +33 -0
- package/dist/causal/capabilities/causal-explainer.d.ts.map +1 -0
- package/dist/causal/capabilities/causal-explainer.js +327 -0
- package/dist/causal/capabilities/causal-explainer.js.map +1 -0
- package/dist/causal/capabilities/causal-planner.d.ts +42 -0
- package/dist/causal/capabilities/causal-planner.d.ts.map +1 -0
- package/dist/causal/capabilities/causal-planner.js +289 -0
- package/dist/causal/capabilities/causal-planner.js.map +1 -0
- package/dist/causal/capabilities/effect-predictor.d.ts +30 -0
- package/dist/causal/capabilities/effect-predictor.d.ts.map +1 -0
- package/dist/causal/capabilities/effect-predictor.js +270 -0
- package/dist/causal/capabilities/effect-predictor.js.map +1 -0
- package/dist/causal/causal-reasoner.d.ts +63 -0
- package/dist/causal/causal-reasoner.d.ts.map +1 -0
- package/dist/causal/causal-reasoner.js +325 -0
- package/dist/causal/causal-reasoner.js.map +1 -0
- package/dist/causal/discovery/causal-extractor.d.ts +46 -0
- package/dist/causal/discovery/causal-extractor.d.ts.map +1 -0
- package/dist/causal/discovery/causal-extractor.js +154 -0
- package/dist/causal/discovery/causal-extractor.js.map +1 -0
- package/dist/causal/discovery/causal-validator.d.ts +50 -0
- package/dist/causal/discovery/causal-validator.d.ts.map +1 -0
- package/dist/causal/discovery/causal-validator.js +235 -0
- package/dist/causal/discovery/causal-validator.js.map +1 -0
- package/dist/causal/discovery/hypothesis-generator.d.ts +37 -0
- package/dist/causal/discovery/hypothesis-generator.d.ts.map +1 -0
- package/dist/causal/discovery/hypothesis-generator.js +225 -0
- package/dist/causal/discovery/hypothesis-generator.js.map +1 -0
- package/dist/causal/discovery/prompts.d.ts +99 -0
- package/dist/causal/discovery/prompts.d.ts.map +1 -0
- package/dist/causal/discovery/prompts.js +263 -0
- package/dist/causal/discovery/prompts.js.map +1 -0
- package/dist/causal/graph/causal-graph.d.ts +38 -0
- package/dist/causal/graph/causal-graph.d.ts.map +1 -0
- package/dist/causal/graph/causal-graph.js +321 -0
- package/dist/causal/graph/causal-graph.js.map +1 -0
- package/dist/causal/graph/graph-builder.d.ts +68 -0
- package/dist/causal/graph/graph-builder.d.ts.map +1 -0
- package/dist/causal/graph/graph-builder.js +128 -0
- package/dist/causal/graph/graph-builder.js.map +1 -0
- package/dist/causal/index.d.ts +28 -0
- package/dist/causal/index.d.ts.map +1 -0
- package/dist/causal/index.js +18 -0
- package/dist/causal/index.js.map +1 -0
- package/dist/causal/inference/adjustment.d.ts +5 -0
- package/dist/causal/inference/adjustment.d.ts.map +1 -0
- package/dist/causal/inference/adjustment.js +189 -0
- package/dist/causal/inference/adjustment.js.map +1 -0
- package/dist/causal/inference/counterfactual.d.ts +24 -0
- package/dist/causal/inference/counterfactual.d.ts.map +1 -0
- package/dist/causal/inference/counterfactual.js +199 -0
- package/dist/causal/inference/counterfactual.js.map +1 -0
- package/dist/causal/inference/d-separation.d.ts +4 -0
- package/dist/causal/inference/d-separation.d.ts.map +1 -0
- package/dist/causal/inference/d-separation.js +168 -0
- package/dist/causal/inference/d-separation.js.map +1 -0
- package/dist/causal/inference/inference-engine.d.ts +33 -0
- package/dist/causal/inference/inference-engine.d.ts.map +1 -0
- package/dist/causal/inference/inference-engine.js +254 -0
- package/dist/causal/inference/inference-engine.js.map +1 -0
- package/dist/causal/stores/causal-graph-store.d.ts +12 -0
- package/dist/causal/stores/causal-graph-store.d.ts.map +1 -0
- package/dist/causal/stores/causal-graph-store.js +60 -0
- package/dist/causal/stores/causal-graph-store.js.map +1 -0
- package/dist/causal/stores/causal-pattern-store.d.ts +19 -0
- package/dist/causal/stores/causal-pattern-store.d.ts.map +1 -0
- package/dist/causal/stores/causal-pattern-store.js +117 -0
- package/dist/causal/stores/causal-pattern-store.js.map +1 -0
- package/dist/causal/stores/intervention-log.d.ts +16 -0
- package/dist/causal/stores/intervention-log.d.ts.map +1 -0
- package/dist/causal/stores/intervention-log.js +113 -0
- package/dist/causal/stores/intervention-log.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/learning/ab-testing.d.ts.map +1 -1
- package/dist/learning/ab-testing.js +6 -5
- package/dist/learning/ab-testing.js.map +1 -1
- package/dist/learning/auto-optimizer.d.ts.map +1 -1
- package/dist/learning/auto-optimizer.js +4 -2
- package/dist/learning/auto-optimizer.js.map +1 -1
- package/dist/learning/postgres-trace-store.d.ts.map +1 -1
- package/dist/learning/postgres-trace-store.js +15 -5
- package/dist/learning/postgres-trace-store.js.map +1 -1
- package/dist/learning/prompt-monitor.d.ts.map +1 -1
- package/dist/learning/prompt-monitor.js.map +1 -1
- package/dist/learning/rollback-manager.d.ts.map +1 -1
- package/dist/learning/rollback-manager.js.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
import { CausalEffectPredictor } from './effect-predictor';
|
|
2
|
+
export class CausalPlanner {
|
|
3
|
+
llm;
|
|
4
|
+
model;
|
|
5
|
+
effectPredictor;
|
|
6
|
+
maxPlanSteps;
|
|
7
|
+
maxAlternatives;
|
|
8
|
+
robustnessThreshold;
|
|
9
|
+
constructor(options) {
|
|
10
|
+
this.llm = options.llmBackend;
|
|
11
|
+
this.model = options.model ?? 'gpt-4';
|
|
12
|
+
this.effectPredictor = new CausalEffectPredictor({ llmBackend: options.llmBackend });
|
|
13
|
+
this.maxPlanSteps = options.maxPlanSteps ?? 10;
|
|
14
|
+
this.maxAlternatives = options.maxAlternatives ?? 2;
|
|
15
|
+
this.robustnessThreshold = options.robustnessThreshold ?? 0.6;
|
|
16
|
+
}
|
|
17
|
+
async planForGoal(goal, goalValue, graph, context, constraints) {
|
|
18
|
+
const interventions = this.findInterventions(goal, goalValue, graph, context);
|
|
19
|
+
const filteredInterventions = this.applyConstraints(interventions, constraints);
|
|
20
|
+
const steps = await this.buildPlanSteps(filteredInterventions, graph, context);
|
|
21
|
+
const robustness = await this.analyzeRobustness(steps, graph, context);
|
|
22
|
+
const expectedOutcome = this.calculateExpectedOutcome(steps);
|
|
23
|
+
const reasoning = await this.generatePlanReasoning(goal, goalValue, steps, context);
|
|
24
|
+
return {
|
|
25
|
+
goal,
|
|
26
|
+
goalValue,
|
|
27
|
+
steps,
|
|
28
|
+
expectedOutcome,
|
|
29
|
+
robustness,
|
|
30
|
+
estimatedCost: this.estimateCost(steps),
|
|
31
|
+
reasoning,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
findInterventions(target, targetValue, graph, _context) {
|
|
35
|
+
const interventions = [];
|
|
36
|
+
const parents = graph.getParents(target);
|
|
37
|
+
for (const parent of parents) {
|
|
38
|
+
const edge = graph.getEdgeBetween(parent.id, target);
|
|
39
|
+
if (!edge)
|
|
40
|
+
continue;
|
|
41
|
+
let interventionValue;
|
|
42
|
+
if (edge.relationType === 'causes' || edge.relationType === 'enables') {
|
|
43
|
+
interventionValue = typeof targetValue === 'boolean' ? targetValue : 1;
|
|
44
|
+
}
|
|
45
|
+
else if (edge.relationType === 'prevents') {
|
|
46
|
+
interventionValue = typeof targetValue === 'boolean' ? !targetValue : 0;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
interventionValue = 1;
|
|
50
|
+
}
|
|
51
|
+
interventions.push({
|
|
52
|
+
variable: parent.id,
|
|
53
|
+
value: interventionValue,
|
|
54
|
+
effectiveness: edge.strength * edge.confidence,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
const ancestors = graph.getAncestors(target);
|
|
58
|
+
for (const ancestor of ancestors) {
|
|
59
|
+
if (parents.some((p) => p.id === ancestor.id))
|
|
60
|
+
continue;
|
|
61
|
+
const paths = graph.findPaths(ancestor.id, target);
|
|
62
|
+
if (paths.length === 0)
|
|
63
|
+
continue;
|
|
64
|
+
const bestPath = paths.reduce((a, b) => a.totalStrength > b.totalStrength ? a : b);
|
|
65
|
+
if (bestPath.totalStrength > 0.3) {
|
|
66
|
+
interventions.push({
|
|
67
|
+
variable: ancestor.id,
|
|
68
|
+
value: 1,
|
|
69
|
+
effectiveness: bestPath.totalStrength * 0.8,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
interventions.sort((a, b) => b.effectiveness - a.effectiveness);
|
|
74
|
+
return interventions;
|
|
75
|
+
}
|
|
76
|
+
async reverseEngineer(desiredOutcome, graph, context) {
|
|
77
|
+
const plans = [];
|
|
78
|
+
for (const [outcome, value] of Object.entries(desiredOutcome)) {
|
|
79
|
+
const plan = await this.planForGoal(outcome, value, graph, context);
|
|
80
|
+
plans.push(plan);
|
|
81
|
+
}
|
|
82
|
+
plans.sort((a, b) => b.expectedOutcome.probability - a.expectedOutcome.probability);
|
|
83
|
+
return plans;
|
|
84
|
+
}
|
|
85
|
+
async analyzeRobustness(steps, graph, _context) {
|
|
86
|
+
const vulnerabilities = [];
|
|
87
|
+
let robustnessScore = 1.0;
|
|
88
|
+
for (const step of steps) {
|
|
89
|
+
if (step.expectedEffect.confidence < this.robustnessThreshold) {
|
|
90
|
+
vulnerabilities.push(`Step ${step.order}: Low confidence (${Math.round(step.expectedEffect.confidence * 100)}%)`);
|
|
91
|
+
robustnessScore *= step.expectedEffect.confidence;
|
|
92
|
+
}
|
|
93
|
+
for (const sideEffect of step.expectedEffect.sideEffects) {
|
|
94
|
+
if (sideEffect.unintended && sideEffect.probability > 0.3) {
|
|
95
|
+
vulnerabilities.push(`Step ${step.order}: Risk of unintended ${sideEffect.variable}`);
|
|
96
|
+
robustnessScore *= 1 - sideEffect.probability * 0.3;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
for (const step of steps) {
|
|
101
|
+
const node = graph.getNode(step.target);
|
|
102
|
+
if (node) {
|
|
103
|
+
const confounders = graph.getParents(step.target).filter((p) => p.variableType === 'confounder');
|
|
104
|
+
for (const confounder of confounders) {
|
|
105
|
+
if (!steps.some((s) => s.target === confounder.id)) {
|
|
106
|
+
vulnerabilities.push(`Uncontrolled confounder: ${confounder.id} affects ${step.target}`);
|
|
107
|
+
robustnessScore *= 0.9;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const backupPlans = [];
|
|
113
|
+
for (const step of steps) {
|
|
114
|
+
if (step.alternatives && step.alternatives.length > 0) {
|
|
115
|
+
const alternativeSteps = steps.map((s) => s.order === step.order ? step.alternatives[0] : s);
|
|
116
|
+
backupPlans.push({
|
|
117
|
+
goal: 'backup',
|
|
118
|
+
goalValue: true,
|
|
119
|
+
steps: alternativeSteps,
|
|
120
|
+
expectedOutcome: { probability: 0.6, confidence: 0.5 },
|
|
121
|
+
robustness: { score: 0.5, vulnerabilities: [], backupPlans: [] },
|
|
122
|
+
estimatedCost: this.estimateCost(alternativeSteps),
|
|
123
|
+
reasoning: `Backup plan using alternative for step ${step.order}`,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return {
|
|
128
|
+
score: Math.max(0, robustnessScore),
|
|
129
|
+
vulnerabilities,
|
|
130
|
+
backupPlans: backupPlans.slice(0, 2),
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
applyConstraints(interventions, constraints) {
|
|
134
|
+
if (!constraints)
|
|
135
|
+
return interventions;
|
|
136
|
+
let filtered = interventions;
|
|
137
|
+
if (constraints.forbidden) {
|
|
138
|
+
filtered = filtered.filter((i) => !constraints.forbidden.includes(i.variable));
|
|
139
|
+
}
|
|
140
|
+
if (constraints.required) {
|
|
141
|
+
for (const required of constraints.required) {
|
|
142
|
+
if (!filtered.some((i) => i.variable === required)) {
|
|
143
|
+
filtered.push({
|
|
144
|
+
variable: required,
|
|
145
|
+
value: 1,
|
|
146
|
+
effectiveness: 0.5,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return filtered;
|
|
152
|
+
}
|
|
153
|
+
async buildPlanSteps(interventions, graph, context) {
|
|
154
|
+
const steps = [];
|
|
155
|
+
const sortedInterventions = this.topologicalSortInterventions(interventions, graph);
|
|
156
|
+
for (let i = 0; i < Math.min(sortedInterventions.length, this.maxPlanSteps); i++) {
|
|
157
|
+
const intervention = sortedInterventions[i];
|
|
158
|
+
const action = `Set ${intervention.variable} to ${intervention.value}`;
|
|
159
|
+
const expectedEffect = await this.effectPredictor.predictEffect(action, graph, context);
|
|
160
|
+
const preconditions = this.findPreconditions(intervention.variable, graph);
|
|
161
|
+
const alternatives = await this.findAlternativeSteps(intervention, graph, context);
|
|
162
|
+
steps.push({
|
|
163
|
+
order: i + 1,
|
|
164
|
+
action,
|
|
165
|
+
target: intervention.variable,
|
|
166
|
+
value: intervention.value,
|
|
167
|
+
expectedEffect,
|
|
168
|
+
preconditions,
|
|
169
|
+
alternatives,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
return steps;
|
|
173
|
+
}
|
|
174
|
+
topologicalSortInterventions(interventions, graph) {
|
|
175
|
+
const variableSet = new Set(interventions.map((i) => i.variable));
|
|
176
|
+
const sorted = [];
|
|
177
|
+
const visited = new Set();
|
|
178
|
+
const visit = (variable) => {
|
|
179
|
+
if (visited.has(variable))
|
|
180
|
+
return;
|
|
181
|
+
visited.add(variable);
|
|
182
|
+
const parents = graph.getParents(variable);
|
|
183
|
+
for (const parent of parents) {
|
|
184
|
+
if (variableSet.has(parent.id)) {
|
|
185
|
+
visit(parent.id);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
const intervention = interventions.find((i) => i.variable === variable);
|
|
189
|
+
if (intervention) {
|
|
190
|
+
sorted.push(intervention);
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
for (const intervention of interventions) {
|
|
194
|
+
visit(intervention.variable);
|
|
195
|
+
}
|
|
196
|
+
return sorted;
|
|
197
|
+
}
|
|
198
|
+
findPreconditions(variable, graph) {
|
|
199
|
+
const preconditions = [];
|
|
200
|
+
const parents = graph.getParents(variable);
|
|
201
|
+
for (const parent of parents) {
|
|
202
|
+
const edge = graph.getEdgeBetween(parent.id, variable);
|
|
203
|
+
if (edge?.relationType === 'enables') {
|
|
204
|
+
preconditions.push(`${parent.id} must be active`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return preconditions;
|
|
208
|
+
}
|
|
209
|
+
async findAlternativeSteps(intervention, graph, context) {
|
|
210
|
+
const alternatives = [];
|
|
211
|
+
const siblings = graph.getParents(intervention.variable);
|
|
212
|
+
for (const sibling of siblings.slice(0, this.maxAlternatives)) {
|
|
213
|
+
if (sibling.variableType === 'treatment') {
|
|
214
|
+
const action = `Use ${sibling.id} instead of ${intervention.variable}`;
|
|
215
|
+
const expectedEffect = await this.effectPredictor.predictEffect(action, graph, context);
|
|
216
|
+
alternatives.push({
|
|
217
|
+
order: 0,
|
|
218
|
+
action,
|
|
219
|
+
target: sibling.id,
|
|
220
|
+
value: intervention.value,
|
|
221
|
+
expectedEffect,
|
|
222
|
+
preconditions: [],
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return alternatives;
|
|
227
|
+
}
|
|
228
|
+
calculateExpectedOutcome(steps) {
|
|
229
|
+
if (steps.length === 0) {
|
|
230
|
+
return { probability: 0, confidence: 0 };
|
|
231
|
+
}
|
|
232
|
+
let probability = 1.0;
|
|
233
|
+
let totalConfidence = 0;
|
|
234
|
+
for (const step of steps) {
|
|
235
|
+
const mainEffects = step.expectedEffect.effects;
|
|
236
|
+
if (mainEffects.length > 0) {
|
|
237
|
+
const avgProbability = mainEffects.reduce((sum, e) => sum + e.probability, 0) / mainEffects.length;
|
|
238
|
+
probability *= avgProbability;
|
|
239
|
+
}
|
|
240
|
+
totalConfidence += step.expectedEffect.confidence;
|
|
241
|
+
}
|
|
242
|
+
return {
|
|
243
|
+
probability: Math.max(0, Math.min(1, probability)),
|
|
244
|
+
confidence: totalConfidence / steps.length,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
estimateCost(steps) {
|
|
248
|
+
let cost = 0;
|
|
249
|
+
for (const step of steps) {
|
|
250
|
+
cost += 1;
|
|
251
|
+
cost += step.preconditions.length * 0.5;
|
|
252
|
+
for (const sideEffect of step.expectedEffect.sideEffects) {
|
|
253
|
+
if (sideEffect.unintended) {
|
|
254
|
+
cost += sideEffect.probability * 2;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
return cost;
|
|
259
|
+
}
|
|
260
|
+
async generatePlanReasoning(goal, goalValue, steps, context) {
|
|
261
|
+
const prompt = `Explain the reasoning behind this causal plan.
|
|
262
|
+
|
|
263
|
+
Goal: ${goal} = ${goalValue}
|
|
264
|
+
|
|
265
|
+
Planned steps:
|
|
266
|
+
${steps.map((s) => `${s.order}. ${s.action} (targeting ${s.target})`).join('\n')}
|
|
267
|
+
|
|
268
|
+
Context:
|
|
269
|
+
- Agent: ${context.agentId}
|
|
270
|
+
- Current state: ${JSON.stringify(context.observedVariables)}
|
|
271
|
+
|
|
272
|
+
Provide a brief explanation (2-3 sentences) of:
|
|
273
|
+
1. Why these steps were chosen
|
|
274
|
+
2. The causal chain from interventions to goal
|
|
275
|
+
3. Key assumptions made`;
|
|
276
|
+
try {
|
|
277
|
+
const response = await this.llm.chat({
|
|
278
|
+
model: this.model,
|
|
279
|
+
messages: [{ role: 'user', content: prompt }],
|
|
280
|
+
temperature: 0.3,
|
|
281
|
+
});
|
|
282
|
+
return response.content.trim();
|
|
283
|
+
}
|
|
284
|
+
catch {
|
|
285
|
+
return `Plan to achieve ${goal}=${goalValue} through ${steps.length} interventions targeting the causal pathway.`;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
//# sourceMappingURL=causal-planner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"causal-planner.js","sourceRoot":"","sources":["../../../src/causal/capabilities/causal-planner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { CausalGraph, CausalContext, PredictedEffect, CausalActionEvaluation, LLMBackend, ThoughtBranch } from '@cogitator-ai/types';
|
|
2
|
+
export interface EffectPredictorOptions {
|
|
3
|
+
llmBackend: LLMBackend;
|
|
4
|
+
model?: string;
|
|
5
|
+
safetyThresholds?: {
|
|
6
|
+
maxRisk: number;
|
|
7
|
+
minConfidence: number;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export declare class CausalEffectPredictor {
|
|
11
|
+
private llm;
|
|
12
|
+
private model;
|
|
13
|
+
private safetyThresholds;
|
|
14
|
+
constructor(options: EffectPredictorOptions);
|
|
15
|
+
predictEffect(action: string, graph: CausalGraph, context: CausalContext): Promise<PredictedEffect>;
|
|
16
|
+
predictEffectsBatch(branches: ThoughtBranch[], graph: CausalGraph, context: CausalContext): Promise<Map<string, PredictedEffect>>;
|
|
17
|
+
evaluateSafety(action: string, graph: CausalGraph, context: CausalContext): Promise<CausalActionEvaluation>;
|
|
18
|
+
whatIf(scenario: {
|
|
19
|
+
action: string;
|
|
20
|
+
conditions: Record<string, unknown>;
|
|
21
|
+
}, graph: CausalGraph, context: CausalContext): Promise<PredictedEffect[]>;
|
|
22
|
+
private findRelevantNodes;
|
|
23
|
+
private predictDirectEffects;
|
|
24
|
+
private predictSideEffects;
|
|
25
|
+
private enhanceWithLLM;
|
|
26
|
+
private isNegativeOutcome;
|
|
27
|
+
private findRelatedActions;
|
|
28
|
+
private normalizeConditions;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=effect-predictor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effect-predictor.d.ts","sourceRoot":"","sources":["../../../src/causal/capabilities/effect-predictor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,UAAU,EACV,aAAa,EACd,MAAM,qBAAqB,CAAC;AAG7B,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,gBAAgB,CAA6C;gBAEzD,OAAO,EAAE,sBAAsB;IASrC,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,eAAe,CAAC;IA0BrB,mBAAmB,CACvB,QAAQ,EAAE,aAAa,EAAE,EACzB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAqBlC,cAAc,CAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,sBAAsB,CAAC;IA6D5B,MAAM,CACV,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EACjE,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,eAAe,EAAE,CAAC;IAuB7B,OAAO,CAAC,iBAAiB;IAyBzB,OAAO,CAAC,oBAAoB;IA8C5B,OAAO,CAAC,kBAAkB;YAmDZ,cAAc;IAwE5B,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,mBAAmB;CAe5B"}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import { CausalInferenceEngine } from '../inference/inference-engine';
|
|
2
|
+
export class CausalEffectPredictor {
|
|
3
|
+
llm;
|
|
4
|
+
model;
|
|
5
|
+
safetyThresholds;
|
|
6
|
+
constructor(options) {
|
|
7
|
+
this.llm = options.llmBackend;
|
|
8
|
+
this.model = options.model ?? 'gpt-4';
|
|
9
|
+
this.safetyThresholds = options.safetyThresholds ?? {
|
|
10
|
+
maxRisk: 0.7,
|
|
11
|
+
minConfidence: 0.3,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
async predictEffect(action, graph, context) {
|
|
15
|
+
const engine = new CausalInferenceEngine(graph);
|
|
16
|
+
const relevantNodes = this.findRelevantNodes(action, graph);
|
|
17
|
+
const directEffects = this.predictDirectEffects(action, relevantNodes, graph, engine);
|
|
18
|
+
const sideEffects = this.predictSideEffects(action, relevantNodes, graph, engine, context);
|
|
19
|
+
const llmEnhanced = await this.enhanceWithLLM(action, directEffects, sideEffects, context);
|
|
20
|
+
return {
|
|
21
|
+
action,
|
|
22
|
+
effects: llmEnhanced.effects,
|
|
23
|
+
sideEffects: llmEnhanced.sideEffects,
|
|
24
|
+
confidence: llmEnhanced.confidence,
|
|
25
|
+
reasoning: llmEnhanced.reasoning,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
async predictEffectsBatch(branches, graph, context) {
|
|
29
|
+
const results = new Map();
|
|
30
|
+
const predictions = await Promise.all(branches.map(async (branch) => {
|
|
31
|
+
const prediction = await this.predictEffect(branch.thought, graph, context);
|
|
32
|
+
return { branchId: branch.id, prediction };
|
|
33
|
+
}));
|
|
34
|
+
for (const { branchId, prediction } of predictions) {
|
|
35
|
+
results.set(branchId, prediction);
|
|
36
|
+
}
|
|
37
|
+
return results;
|
|
38
|
+
}
|
|
39
|
+
async evaluateSafety(action, graph, context) {
|
|
40
|
+
const prediction = await this.predictEffect(action, graph, context);
|
|
41
|
+
const warnings = [];
|
|
42
|
+
const recommendations = [];
|
|
43
|
+
const blockedReasons = [];
|
|
44
|
+
let riskScore = 0;
|
|
45
|
+
for (const sideEffect of prediction.sideEffects) {
|
|
46
|
+
if (sideEffect.unintended && sideEffect.probability > 0.5) {
|
|
47
|
+
riskScore += sideEffect.probability * 0.3;
|
|
48
|
+
warnings.push(`Potential unintended effect on ${sideEffect.variable} (${Math.round(sideEffect.probability * 100)}% probability)`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
for (const effect of prediction.effects) {
|
|
52
|
+
if (this.isNegativeOutcome(effect.variable, effect.expectedValue)) {
|
|
53
|
+
riskScore += effect.probability * 0.5;
|
|
54
|
+
warnings.push(`May cause negative outcome: ${effect.variable} = ${effect.expectedValue}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
let riskLevel;
|
|
58
|
+
if (riskScore < 0.2) {
|
|
59
|
+
riskLevel = 'low';
|
|
60
|
+
}
|
|
61
|
+
else if (riskScore < 0.4) {
|
|
62
|
+
riskLevel = 'medium';
|
|
63
|
+
}
|
|
64
|
+
else if (riskScore < 0.7) {
|
|
65
|
+
riskLevel = 'high';
|
|
66
|
+
recommendations.push('Consider alternative approaches');
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
riskLevel = 'critical';
|
|
70
|
+
blockedReasons.push('Risk score exceeds safety threshold');
|
|
71
|
+
}
|
|
72
|
+
const isSafe = riskScore < this.safetyThresholds.maxRisk &&
|
|
73
|
+
prediction.confidence >= this.safetyThresholds.minConfidence;
|
|
74
|
+
if (!isSafe && blockedReasons.length === 0) {
|
|
75
|
+
if (prediction.confidence < this.safetyThresholds.minConfidence) {
|
|
76
|
+
warnings.push('Low confidence in effect prediction');
|
|
77
|
+
recommendations.push('Gather more information before proceeding');
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
action,
|
|
82
|
+
isSafe,
|
|
83
|
+
riskLevel,
|
|
84
|
+
predictedEffects: prediction,
|
|
85
|
+
warnings,
|
|
86
|
+
recommendations,
|
|
87
|
+
blockedReasons: blockedReasons.length > 0 ? blockedReasons : undefined,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
async whatIf(scenario, graph, context) {
|
|
91
|
+
const predictions = [];
|
|
92
|
+
const baseContext = {
|
|
93
|
+
...context,
|
|
94
|
+
observedVariables: {
|
|
95
|
+
...context.observedVariables,
|
|
96
|
+
...this.normalizeConditions(scenario.conditions),
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
const mainPrediction = await this.predictEffect(scenario.action, graph, baseContext);
|
|
100
|
+
predictions.push(mainPrediction);
|
|
101
|
+
const relatedActions = this.findRelatedActions(scenario.action, graph);
|
|
102
|
+
for (const relatedAction of relatedActions.slice(0, 3)) {
|
|
103
|
+
const prediction = await this.predictEffect(relatedAction, graph, baseContext);
|
|
104
|
+
predictions.push(prediction);
|
|
105
|
+
}
|
|
106
|
+
return predictions;
|
|
107
|
+
}
|
|
108
|
+
findRelevantNodes(action, graph) {
|
|
109
|
+
const nodes = graph.getNodes();
|
|
110
|
+
const relevant = [];
|
|
111
|
+
const actionWords = action.toLowerCase().split(/\s+/);
|
|
112
|
+
for (const node of nodes) {
|
|
113
|
+
const nodeWords = [
|
|
114
|
+
node.id.toLowerCase(),
|
|
115
|
+
node.name.toLowerCase(),
|
|
116
|
+
];
|
|
117
|
+
for (const actionWord of actionWords) {
|
|
118
|
+
for (const nodeWord of nodeWords) {
|
|
119
|
+
if (nodeWord.includes(actionWord) || actionWord.includes(nodeWord)) {
|
|
120
|
+
relevant.push(node.id);
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return [...new Set(relevant)];
|
|
127
|
+
}
|
|
128
|
+
predictDirectEffects(_action, relevantNodes, graph, _engine) {
|
|
129
|
+
const effects = [];
|
|
130
|
+
for (const nodeId of relevantNodes) {
|
|
131
|
+
const children = graph.getChildren(nodeId);
|
|
132
|
+
for (const child of children) {
|
|
133
|
+
const edge = graph.getEdgeBetween(nodeId, child.id);
|
|
134
|
+
if (!edge)
|
|
135
|
+
continue;
|
|
136
|
+
let expectedValue;
|
|
137
|
+
if (edge.relationType === 'causes' || edge.relationType === 'enables') {
|
|
138
|
+
expectedValue = true;
|
|
139
|
+
}
|
|
140
|
+
else if (edge.relationType === 'prevents') {
|
|
141
|
+
expectedValue = false;
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
expectedValue = edge.strength;
|
|
145
|
+
}
|
|
146
|
+
effects.push({
|
|
147
|
+
variable: child.id,
|
|
148
|
+
expectedValue,
|
|
149
|
+
probability: edge.strength * edge.confidence,
|
|
150
|
+
mechanism: edge.mechanism || `${nodeId} ${edge.relationType} ${child.id}`,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return effects;
|
|
155
|
+
}
|
|
156
|
+
predictSideEffects(_action, relevantNodes, graph, _engine, _context) {
|
|
157
|
+
const sideEffects = [];
|
|
158
|
+
const directEffectNodes = new Set();
|
|
159
|
+
for (const nodeId of relevantNodes) {
|
|
160
|
+
for (const child of graph.getChildren(nodeId)) {
|
|
161
|
+
directEffectNodes.add(child.id);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
for (const nodeId of relevantNodes) {
|
|
165
|
+
const descendants = graph.getDescendants(nodeId);
|
|
166
|
+
for (const descendant of descendants) {
|
|
167
|
+
if (directEffectNodes.has(descendant.id))
|
|
168
|
+
continue;
|
|
169
|
+
const paths = graph.findPaths(nodeId, descendant.id);
|
|
170
|
+
if (paths.length === 0)
|
|
171
|
+
continue;
|
|
172
|
+
const bestPath = paths.reduce((a, b) => a.totalStrength > b.totalStrength ? a : b);
|
|
173
|
+
sideEffects.push({
|
|
174
|
+
variable: descendant.id,
|
|
175
|
+
expectedValue: bestPath.totalStrength > 0.5,
|
|
176
|
+
probability: bestPath.totalStrength * 0.8,
|
|
177
|
+
unintended: true,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return sideEffects;
|
|
182
|
+
}
|
|
183
|
+
async enhanceWithLLM(action, directEffects, sideEffects, context) {
|
|
184
|
+
const prompt = `Analyze the predicted effects of this action and provide reasoning.
|
|
185
|
+
|
|
186
|
+
Action: ${action}
|
|
187
|
+
|
|
188
|
+
Direct effects predicted:
|
|
189
|
+
${directEffects.map((e) => `- ${e.variable}: ${e.expectedValue} (${Math.round(e.probability * 100)}% probability) via ${e.mechanism}`).join('\n')}
|
|
190
|
+
|
|
191
|
+
Side effects predicted:
|
|
192
|
+
${sideEffects.map((e) => `- ${e.variable}: ${e.expectedValue} (${Math.round(e.probability * 100)}% probability, ${e.unintended ? 'unintended' : 'intended'})`).join('\n')}
|
|
193
|
+
|
|
194
|
+
Current context:
|
|
195
|
+
- Agent: ${context.agentId}
|
|
196
|
+
- Observed: ${JSON.stringify(context.observedVariables)}
|
|
197
|
+
|
|
198
|
+
Provide:
|
|
199
|
+
1. Confidence in these predictions (0-1)
|
|
200
|
+
2. Reasoning for the predictions
|
|
201
|
+
3. Any additional effects not captured
|
|
202
|
+
|
|
203
|
+
Respond in JSON:
|
|
204
|
+
{
|
|
205
|
+
"confidence": 0.75,
|
|
206
|
+
"reasoning": "Explanation of the causal chain",
|
|
207
|
+
"additionalEffects": []
|
|
208
|
+
}`;
|
|
209
|
+
try {
|
|
210
|
+
const response = await this.llm.chat({
|
|
211
|
+
model: this.model,
|
|
212
|
+
messages: [{ role: 'user', content: prompt }],
|
|
213
|
+
temperature: 0.3,
|
|
214
|
+
});
|
|
215
|
+
const match = response.content.match(/\{[\s\S]*\}/);
|
|
216
|
+
if (match) {
|
|
217
|
+
const parsed = JSON.parse(match[0]);
|
|
218
|
+
return {
|
|
219
|
+
action,
|
|
220
|
+
effects: directEffects,
|
|
221
|
+
sideEffects,
|
|
222
|
+
confidence: parsed.confidence ?? 0.5,
|
|
223
|
+
reasoning: parsed.reasoning ?? 'No reasoning provided',
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
}
|
|
229
|
+
return {
|
|
230
|
+
action,
|
|
231
|
+
effects: directEffects,
|
|
232
|
+
sideEffects,
|
|
233
|
+
confidence: 0.5,
|
|
234
|
+
reasoning: 'Based on causal graph analysis',
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
isNegativeOutcome(variable, value) {
|
|
238
|
+
const negativePatterns = ['error', 'fail', 'crash', 'loss', 'damage', 'risk'];
|
|
239
|
+
const varLower = variable.toLowerCase();
|
|
240
|
+
for (const pattern of negativePatterns) {
|
|
241
|
+
if (varLower.includes(pattern)) {
|
|
242
|
+
return value === true || (typeof value === 'number' && value > 0.5);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return false;
|
|
246
|
+
}
|
|
247
|
+
findRelatedActions(action, graph) {
|
|
248
|
+
const nodes = graph.getNodes();
|
|
249
|
+
const related = [];
|
|
250
|
+
for (const node of nodes) {
|
|
251
|
+
if (node.variableType === 'treatment' && !action.includes(node.id)) {
|
|
252
|
+
related.push(`Apply ${node.name}`);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return related;
|
|
256
|
+
}
|
|
257
|
+
normalizeConditions(conditions) {
|
|
258
|
+
const normalized = {};
|
|
259
|
+
for (const [key, value] of Object.entries(conditions)) {
|
|
260
|
+
if (typeof value === 'number' || typeof value === 'string' || typeof value === 'boolean') {
|
|
261
|
+
normalized[key] = value;
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
normalized[key] = String(value);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return normalized;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=effect-predictor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effect-predictor.js","sourceRoot":"","sources":["../../../src/causal/capabilities/effect-predictor.ts"],"names":[],"mappings":"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"}
|