cognitive-core 0.0.1 → 0.1.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 +363 -2
- package/SKILL.md +193 -0
- package/dist/agents/index.d.ts +3 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +5 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/mock-provider.d.ts +23 -0
- package/dist/agents/mock-provider.d.ts.map +1 -0
- package/dist/agents/mock-provider.js +71 -0
- package/dist/agents/mock-provider.js.map +1 -0
- package/dist/agents/types.d.ts +98 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +44 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/atlas.d.ts +196 -0
- package/dist/atlas.d.ts.map +1 -0
- package/dist/atlas.js +373 -0
- package/dist/atlas.js.map +1 -0
- package/dist/bin/cognitive-core.d.ts +18 -0
- package/dist/bin/cognitive-core.d.ts.map +1 -0
- package/dist/bin/cognitive-core.js +419 -0
- package/dist/bin/cognitive-core.js.map +1 -0
- package/dist/embeddings/bm25.d.ts +104 -0
- package/dist/embeddings/bm25.d.ts.map +1 -0
- package/dist/embeddings/bm25.js +264 -0
- package/dist/embeddings/bm25.js.map +1 -0
- package/dist/embeddings/index.d.ts +12 -0
- package/dist/embeddings/index.d.ts.map +1 -0
- package/dist/embeddings/index.js +16 -0
- package/dist/embeddings/index.js.map +1 -0
- package/dist/embeddings/manager.d.ts +112 -0
- package/dist/embeddings/manager.d.ts.map +1 -0
- package/dist/embeddings/manager.js +215 -0
- package/dist/embeddings/manager.js.map +1 -0
- package/dist/embeddings/provider.d.ts +101 -0
- package/dist/embeddings/provider.d.ts.map +1 -0
- package/dist/embeddings/provider.js +232 -0
- package/dist/embeddings/provider.js.map +1 -0
- package/dist/embeddings/vector-store.d.ts +101 -0
- package/dist/embeddings/vector-store.d.ts.map +1 -0
- package/dist/embeddings/vector-store.js +256 -0
- package/dist/embeddings/vector-store.js.map +1 -0
- package/dist/factory.d.ts +193 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/factory.js +109 -0
- package/dist/factory.js.map +1 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +84 -0
- package/dist/index.js.map +1 -0
- package/dist/learning/analyzer.d.ts +110 -0
- package/dist/learning/analyzer.d.ts.map +1 -0
- package/dist/learning/analyzer.js +213 -0
- package/dist/learning/analyzer.js.map +1 -0
- package/dist/learning/effectiveness.d.ts +158 -0
- package/dist/learning/effectiveness.d.ts.map +1 -0
- package/dist/learning/effectiveness.js +251 -0
- package/dist/learning/effectiveness.js.map +1 -0
- package/dist/learning/index.d.ts +8 -0
- package/dist/learning/index.d.ts.map +1 -0
- package/dist/learning/index.js +11 -0
- package/dist/learning/index.js.map +1 -0
- package/dist/learning/llm-extractor.d.ts +88 -0
- package/dist/learning/llm-extractor.d.ts.map +1 -0
- package/dist/learning/llm-extractor.js +372 -0
- package/dist/learning/llm-extractor.js.map +1 -0
- package/dist/learning/meta-learner.d.ts +80 -0
- package/dist/learning/meta-learner.d.ts.map +1 -0
- package/dist/learning/meta-learner.js +355 -0
- package/dist/learning/meta-learner.js.map +1 -0
- package/dist/learning/pipeline.d.ts +65 -0
- package/dist/learning/pipeline.d.ts.map +1 -0
- package/dist/learning/pipeline.js +170 -0
- package/dist/learning/pipeline.js.map +1 -0
- package/dist/learning/playbook-extractor.d.ts +113 -0
- package/dist/learning/playbook-extractor.d.ts.map +1 -0
- package/dist/learning/playbook-extractor.js +523 -0
- package/dist/learning/playbook-extractor.js.map +1 -0
- package/dist/learning/usage-inference.d.ts +82 -0
- package/dist/learning/usage-inference.d.ts.map +1 -0
- package/dist/learning/usage-inference.js +261 -0
- package/dist/learning/usage-inference.js.map +1 -0
- package/dist/mcp/index.d.ts +6 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +6 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/playbook-server.d.ts +120 -0
- package/dist/mcp/playbook-server.d.ts.map +1 -0
- package/dist/mcp/playbook-server.js +427 -0
- package/dist/mcp/playbook-server.js.map +1 -0
- package/dist/memory/curated-loader.d.ts +62 -0
- package/dist/memory/curated-loader.d.ts.map +1 -0
- package/dist/memory/curated-loader.js +106 -0
- package/dist/memory/curated-loader.js.map +1 -0
- package/dist/memory/experience.d.ts +122 -0
- package/dist/memory/experience.d.ts.map +1 -0
- package/dist/memory/experience.js +392 -0
- package/dist/memory/experience.js.map +1 -0
- package/dist/memory/index.d.ts +6 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +9 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/meta.d.ts +90 -0
- package/dist/memory/meta.d.ts.map +1 -0
- package/dist/memory/meta.js +362 -0
- package/dist/memory/meta.js.map +1 -0
- package/dist/memory/playbook.d.ts +133 -0
- package/dist/memory/playbook.d.ts.map +1 -0
- package/dist/memory/playbook.js +357 -0
- package/dist/memory/playbook.js.map +1 -0
- package/dist/memory/system.d.ts +167 -0
- package/dist/memory/system.d.ts.map +1 -0
- package/dist/memory/system.js +383 -0
- package/dist/memory/system.js.map +1 -0
- package/dist/runtime/backends/acp.d.ts +67 -0
- package/dist/runtime/backends/acp.d.ts.map +1 -0
- package/dist/runtime/backends/acp.js +290 -0
- package/dist/runtime/backends/acp.js.map +1 -0
- package/dist/runtime/backends/index.d.ts +5 -0
- package/dist/runtime/backends/index.d.ts.map +1 -0
- package/dist/runtime/backends/index.js +6 -0
- package/dist/runtime/backends/index.js.map +1 -0
- package/dist/runtime/backends/mock.d.ts +67 -0
- package/dist/runtime/backends/mock.d.ts.map +1 -0
- package/dist/runtime/backends/mock.js +153 -0
- package/dist/runtime/backends/mock.js.map +1 -0
- package/dist/runtime/backends/subprocess.d.ts +56 -0
- package/dist/runtime/backends/subprocess.d.ts.map +1 -0
- package/dist/runtime/backends/subprocess.js +260 -0
- package/dist/runtime/backends/subprocess.js.map +1 -0
- package/dist/runtime/flows/learning.d.ts +73 -0
- package/dist/runtime/flows/learning.d.ts.map +1 -0
- package/dist/runtime/flows/learning.js +116 -0
- package/dist/runtime/flows/learning.js.map +1 -0
- package/dist/runtime/flows/validation.d.ts +122 -0
- package/dist/runtime/flows/validation.d.ts.map +1 -0
- package/dist/runtime/flows/validation.js +223 -0
- package/dist/runtime/flows/validation.js.map +1 -0
- package/dist/runtime/index.d.ts +6 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +8 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/manager.d.ts +116 -0
- package/dist/runtime/manager.d.ts.map +1 -0
- package/dist/runtime/manager.js +416 -0
- package/dist/runtime/manager.js.map +1 -0
- package/dist/runtime/types.d.ts +138 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +2 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/search/evaluator.d.ts +102 -0
- package/dist/search/evaluator.d.ts.map +1 -0
- package/dist/search/evaluator.js +352 -0
- package/dist/search/evaluator.js.map +1 -0
- package/dist/search/index.d.ts +7 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +11 -0
- package/dist/search/index.js.map +1 -0
- package/dist/search/refinement-loop.d.ts +73 -0
- package/dist/search/refinement-loop.d.ts.map +1 -0
- package/dist/search/refinement-loop.js +245 -0
- package/dist/search/refinement-loop.js.map +1 -0
- package/dist/search/refinement-types.d.ts +154 -0
- package/dist/search/refinement-types.d.ts.map +1 -0
- package/dist/search/refinement-types.js +99 -0
- package/dist/search/refinement-types.js.map +1 -0
- package/dist/search/router.d.ts +61 -0
- package/dist/search/router.d.ts.map +1 -0
- package/dist/search/router.js +197 -0
- package/dist/search/router.js.map +1 -0
- package/dist/search/solver.d.ts +75 -0
- package/dist/search/solver.d.ts.map +1 -0
- package/dist/search/solver.js +216 -0
- package/dist/search/solver.js.map +1 -0
- package/dist/search/verification-runner.d.ts +125 -0
- package/dist/search/verification-runner.d.ts.map +1 -0
- package/dist/search/verification-runner.js +440 -0
- package/dist/search/verification-runner.js.map +1 -0
- package/dist/surfacing/index.d.ts +2 -0
- package/dist/surfacing/index.d.ts.map +1 -0
- package/dist/surfacing/index.js +2 -0
- package/dist/surfacing/index.js.map +1 -0
- package/dist/surfacing/skill-library.d.ts +158 -0
- package/dist/surfacing/skill-library.d.ts.map +1 -0
- package/dist/surfacing/skill-library.js +429 -0
- package/dist/surfacing/skill-library.js.map +1 -0
- package/dist/types/config.d.ts +1113 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +274 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +14 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/memory.d.ts +339 -0
- package/dist/types/memory.d.ts.map +1 -0
- package/dist/types/memory.js +207 -0
- package/dist/types/memory.js.map +1 -0
- package/dist/types/meta.d.ts +146 -0
- package/dist/types/meta.d.ts.map +1 -0
- package/dist/types/meta.js +51 -0
- package/dist/types/meta.js.map +1 -0
- package/dist/types/outcome.d.ts +42 -0
- package/dist/types/outcome.d.ts.map +1 -0
- package/dist/types/outcome.js +50 -0
- package/dist/types/outcome.js.map +1 -0
- package/dist/types/playbook.d.ts +119 -0
- package/dist/types/playbook.d.ts.map +1 -0
- package/dist/types/playbook.js +71 -0
- package/dist/types/playbook.js.map +1 -0
- package/dist/types/step.d.ts +44 -0
- package/dist/types/step.d.ts.map +1 -0
- package/dist/types/step.js +32 -0
- package/dist/types/step.js.map +1 -0
- package/dist/types/task.d.ts +91 -0
- package/dist/types/task.d.ts.map +1 -0
- package/dist/types/task.js +39 -0
- package/dist/types/task.js.map +1 -0
- package/dist/types/trajectory.d.ts +221 -0
- package/dist/types/trajectory.d.ts.map +1 -0
- package/dist/types/trajectory.js +60 -0
- package/dist/types/trajectory.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/similarity.d.ts +31 -0
- package/dist/utils/similarity.d.ts.map +1 -0
- package/dist/utils/similarity.js +107 -0
- package/dist/utils/similarity.js.map +1 -0
- package/dist/utils/storage.d.ts +106 -0
- package/dist/utils/storage.d.ts.map +1 -0
- package/dist/utils/storage.js +203 -0
- package/dist/utils/storage.js.map +1 -0
- package/dist/utils/validation.d.ts +129 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +171 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +61 -9
- package/scripts/migrate-to-playbooks.ts +307 -0
- package/src/agents/index.ts +14 -0
- package/src/agents/mock-provider.ts +93 -0
- package/src/agents/types.ts +137 -0
- package/src/atlas.ts +560 -0
- package/src/bin/cognitive-core.ts +470 -0
- package/src/embeddings/bm25.ts +337 -0
- package/src/embeddings/index.ts +39 -0
- package/src/embeddings/manager.ts +288 -0
- package/src/embeddings/provider.ts +311 -0
- package/src/embeddings/vector-store.ts +353 -0
- package/src/factory.ts +263 -0
- package/src/index.ts +246 -0
- package/src/learning/analyzer.ts +335 -0
- package/src/learning/effectiveness.ts +428 -0
- package/src/learning/index.ts +58 -0
- package/src/learning/llm-extractor.ts +542 -0
- package/src/learning/meta-learner.ts +516 -0
- package/src/learning/pipeline.ts +244 -0
- package/src/learning/playbook-extractor.ts +702 -0
- package/src/learning/usage-inference.ts +372 -0
- package/src/mcp/index.ts +12 -0
- package/src/mcp/playbook-server.ts +565 -0
- package/src/memory/curated-loader.ts +160 -0
- package/src/memory/experience.ts +515 -0
- package/src/memory/index.ts +27 -0
- package/src/memory/meta.ts +506 -0
- package/src/memory/playbook.ts +493 -0
- package/src/memory/system.ts +551 -0
- package/src/runtime/backends/acp.ts +378 -0
- package/src/runtime/backends/index.ts +24 -0
- package/src/runtime/backends/mock.ts +218 -0
- package/src/runtime/backends/subprocess.ts +356 -0
- package/src/runtime/flows/learning.ts +183 -0
- package/src/runtime/flows/validation.ts +381 -0
- package/src/runtime/index.ts +53 -0
- package/src/runtime/manager.ts +541 -0
- package/src/runtime/types.ts +157 -0
- package/src/search/evaluator.ts +474 -0
- package/src/search/index.ts +59 -0
- package/src/search/refinement-loop.ts +363 -0
- package/src/search/refinement-types.ts +159 -0
- package/src/search/router.ts +261 -0
- package/src/search/solver.ts +303 -0
- package/src/search/verification-runner.ts +570 -0
- package/src/surfacing/index.ts +6 -0
- package/src/surfacing/skill-library.ts +594 -0
- package/src/types/config.ts +333 -0
- package/src/types/index.ts +130 -0
- package/src/types/memory.ts +270 -0
- package/src/types/meta.ts +218 -0
- package/src/types/outcome.ts +66 -0
- package/src/types/playbook.ts +196 -0
- package/src/types/step.ts +40 -0
- package/src/types/task.ts +52 -0
- package/src/types/trajectory.ts +80 -0
- package/src/utils/index.ts +38 -0
- package/src/utils/similarity.ts +139 -0
- package/src/utils/storage.ts +249 -0
- package/src/utils/validation.ts +286 -0
- package/tests/embeddings/bm25.test.ts +130 -0
- package/tests/embeddings/manager.test.ts +205 -0
- package/tests/integration/atlas.test.ts +266 -0
- package/tests/integration/e2e.test.ts +929 -0
- package/tests/learning/analyzer.test.ts +426 -0
- package/tests/learning/effectiveness.test.ts +542 -0
- package/tests/learning/pipeline.test.ts +176 -0
- package/tests/learning/playbook-extractor-provenance.test.ts +114 -0
- package/tests/learning/usage-inference.test.ts +254 -0
- package/tests/mcp/playbook-server.test.ts +252 -0
- package/tests/memory/experience.test.ts +198 -0
- package/tests/memory/playbook.test.ts +338 -0
- package/tests/memory/provenance.test.ts +639 -0
- package/tests/memory/system.test.ts +325 -0
- package/tests/runtime/agent-manager.test.ts +512 -0
- package/tests/runtime/mock-backend.test.ts +248 -0
- package/tests/search/refinement-loop.test.ts +468 -0
- package/tests/search/refinement.test.ts +267 -0
- package/tests/search/router.test.ts +427 -0
- package/tests/surfacing/skill-library.test.ts +292 -0
- package/tests/types/outcome.test.ts +147 -0
- package/tests/types/step.test.ts +133 -0
- package/tests/types/task.test.ts +158 -0
- package/tests/types/trajectory.test.ts +253 -0
- package/tests/utils/similarity.test.ts +188 -0
- package/tests/utils/validation.test.ts +252 -0
- package/tsconfig.json +25 -0
- package/vitest.config.ts +22 -0
- package/index.d.ts +0 -4
- package/index.js +0 -4
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
import type { Trajectory, CreditStrategy } from '../types/index.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Analysis result from trajectory examination
|
|
5
|
+
*/
|
|
6
|
+
export interface AnalysisResult {
|
|
7
|
+
/** Whether the trajectory succeeded */
|
|
8
|
+
success: boolean;
|
|
9
|
+
/** Indices of key steps (above attribution threshold) */
|
|
10
|
+
keySteps: number[];
|
|
11
|
+
/** Attribution score for each step */
|
|
12
|
+
stepAttribution: number[];
|
|
13
|
+
/** Detected error patterns */
|
|
14
|
+
errorPatterns: ErrorPattern[];
|
|
15
|
+
/** Whether this trajectory is worth extracting patterns from */
|
|
16
|
+
abstractable: boolean;
|
|
17
|
+
/** Suggested training examples */
|
|
18
|
+
trainingExamples: TrainingExample[];
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Detected error pattern
|
|
23
|
+
*/
|
|
24
|
+
export interface ErrorPattern {
|
|
25
|
+
type: string;
|
|
26
|
+
signature: string;
|
|
27
|
+
description: string;
|
|
28
|
+
suggestedFix?: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Training example extracted from trajectory
|
|
33
|
+
*/
|
|
34
|
+
export interface TrainingExample {
|
|
35
|
+
input: string;
|
|
36
|
+
output: string;
|
|
37
|
+
stepIndex: number;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Configuration for trajectory analyzer
|
|
42
|
+
*/
|
|
43
|
+
export interface AnalyzerConfig {
|
|
44
|
+
/** Credit decay factor for exponential decay (default: 0.5) */
|
|
45
|
+
creditDecayFactor: number;
|
|
46
|
+
/** Minimum action repetitions to flag as repetition pattern (default: 3) */
|
|
47
|
+
actionRepetitionThreshold: number;
|
|
48
|
+
/** Attribution threshold for key step identification (default: 0.15) */
|
|
49
|
+
attributionThreshold: number;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const DEFAULT_ANALYZER_CONFIG: AnalyzerConfig = {
|
|
53
|
+
creditDecayFactor: 0.5,
|
|
54
|
+
actionRepetitionThreshold: 3,
|
|
55
|
+
attributionThreshold: 0.15,
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Credit assignment strategies
|
|
60
|
+
*/
|
|
61
|
+
export type CreditAssignmentFn = (
|
|
62
|
+
trajectory: Trajectory,
|
|
63
|
+
config: AnalyzerConfig
|
|
64
|
+
) => Promise<number[]>;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Simple exponential decay credit assignment
|
|
68
|
+
* Last step gets 1.0, decays exponentially backwards
|
|
69
|
+
*/
|
|
70
|
+
export function simpleCreditAssignment(
|
|
71
|
+
trajectory: Trajectory,
|
|
72
|
+
config: AnalyzerConfig
|
|
73
|
+
): Promise<number[]> {
|
|
74
|
+
const n = trajectory.steps.length;
|
|
75
|
+
const scores: number[] = [];
|
|
76
|
+
const decay = config.creditDecayFactor;
|
|
77
|
+
|
|
78
|
+
for (let i = 0; i < n; i++) {
|
|
79
|
+
const distanceFromEnd = n - 1 - i;
|
|
80
|
+
scores.push(Math.pow(decay, distanceFromEnd));
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return Promise.resolve(scores);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Outcome-based credit assignment
|
|
88
|
+
* Successful trajectories get higher credit for all steps
|
|
89
|
+
*/
|
|
90
|
+
export function outcomeCreditAssignment(
|
|
91
|
+
trajectory: Trajectory,
|
|
92
|
+
_config: AnalyzerConfig
|
|
93
|
+
): Promise<number[]> {
|
|
94
|
+
const baseScores: number[] = trajectory.steps.map(() =>
|
|
95
|
+
trajectory.outcome.success ? 0.7 : 0.3
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
// Boost last step for successful trajectories
|
|
99
|
+
if (trajectory.outcome.success && baseScores.length > 0) {
|
|
100
|
+
baseScores[baseScores.length - 1] = 1.0;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return Promise.resolve(baseScores);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Get credit assignment function by strategy type
|
|
108
|
+
*/
|
|
109
|
+
export function getCreditAssignmentFn(
|
|
110
|
+
strategy: CreditStrategy
|
|
111
|
+
): CreditAssignmentFn {
|
|
112
|
+
switch (strategy) {
|
|
113
|
+
case 'simple':
|
|
114
|
+
return simpleCreditAssignment;
|
|
115
|
+
case 'llm':
|
|
116
|
+
// LLM-based credit assignment would require an LLM client
|
|
117
|
+
// Fall back to simple for now
|
|
118
|
+
return simpleCreditAssignment;
|
|
119
|
+
case 'counterfactual':
|
|
120
|
+
// Counterfactual requires environment replay
|
|
121
|
+
// Fall back to outcome-based
|
|
122
|
+
return outcomeCreditAssignment;
|
|
123
|
+
default:
|
|
124
|
+
return simpleCreditAssignment;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Trajectory Analyzer
|
|
130
|
+
* Analyzes trajectories to extract learning signals
|
|
131
|
+
*/
|
|
132
|
+
export class TrajectoryAnalyzer {
|
|
133
|
+
private creditFn: CreditAssignmentFn;
|
|
134
|
+
private config: AnalyzerConfig;
|
|
135
|
+
|
|
136
|
+
constructor(strategy: CreditStrategy = 'simple', config?: Partial<AnalyzerConfig>) {
|
|
137
|
+
this.creditFn = getCreditAssignmentFn(strategy);
|
|
138
|
+
this.config = { ...DEFAULT_ANALYZER_CONFIG, ...config };
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Analyze a trajectory
|
|
143
|
+
*/
|
|
144
|
+
async analyze(trajectory: Trajectory): Promise<AnalysisResult> {
|
|
145
|
+
// Assign credit to steps
|
|
146
|
+
const stepAttribution = await this.creditFn(trajectory, this.config);
|
|
147
|
+
|
|
148
|
+
// Apply attribution to steps
|
|
149
|
+
for (let i = 0; i < trajectory.steps.length; i++) {
|
|
150
|
+
trajectory.steps[i].attributionScore = stepAttribution[i];
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// Identify key steps
|
|
154
|
+
const keySteps = stepAttribution
|
|
155
|
+
.map((score, index) => ({ score, index }))
|
|
156
|
+
.filter(({ score }) => score >= this.config.attributionThreshold)
|
|
157
|
+
.map(({ index }) => index);
|
|
158
|
+
|
|
159
|
+
// Detect error patterns
|
|
160
|
+
const errorPatterns = this.detectErrorPatterns(trajectory);
|
|
161
|
+
|
|
162
|
+
// Assess abstractability
|
|
163
|
+
const abstractable = this.assessAbstractability(
|
|
164
|
+
trajectory,
|
|
165
|
+
keySteps,
|
|
166
|
+
errorPatterns
|
|
167
|
+
);
|
|
168
|
+
|
|
169
|
+
// Extract training examples
|
|
170
|
+
const trainingExamples = this.extractTrainingExamples(
|
|
171
|
+
trajectory,
|
|
172
|
+
keySteps
|
|
173
|
+
);
|
|
174
|
+
|
|
175
|
+
return {
|
|
176
|
+
success: trajectory.outcome.success,
|
|
177
|
+
keySteps,
|
|
178
|
+
stepAttribution,
|
|
179
|
+
errorPatterns,
|
|
180
|
+
abstractable,
|
|
181
|
+
trainingExamples,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Detect error patterns in failed trajectories
|
|
187
|
+
*/
|
|
188
|
+
private detectErrorPatterns(trajectory: Trajectory): ErrorPattern[] {
|
|
189
|
+
const patterns: ErrorPattern[] = [];
|
|
190
|
+
|
|
191
|
+
if (!trajectory.outcome.success && trajectory.outcome.errorInfo) {
|
|
192
|
+
// Extract error type from error info
|
|
193
|
+
const errorInfo = trajectory.outcome.errorInfo;
|
|
194
|
+
|
|
195
|
+
// Common error patterns
|
|
196
|
+
const errorTypes: Array<[RegExp, string, string]> = [
|
|
197
|
+
[/timeout/i, 'timeout', 'Operation timed out'],
|
|
198
|
+
[/not found/i, 'not_found', 'Resource not found'],
|
|
199
|
+
[/permission denied/i, 'permission', 'Permission denied'],
|
|
200
|
+
[/syntax error/i, 'syntax', 'Syntax error in code'],
|
|
201
|
+
[/type error/i, 'type', 'Type mismatch error'],
|
|
202
|
+
[/assertion|assert/i, 'assertion', 'Assertion failed'],
|
|
203
|
+
[/exception|error/i, 'general', 'General error'],
|
|
204
|
+
];
|
|
205
|
+
|
|
206
|
+
for (const [pattern, type, desc] of errorTypes) {
|
|
207
|
+
if (pattern.test(errorInfo)) {
|
|
208
|
+
patterns.push({
|
|
209
|
+
type,
|
|
210
|
+
signature: errorInfo.slice(0, 100),
|
|
211
|
+
description: desc,
|
|
212
|
+
});
|
|
213
|
+
break;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// Check for repeated failed actions
|
|
219
|
+
const actionCounts = new Map<string, number>();
|
|
220
|
+
for (const step of trajectory.steps) {
|
|
221
|
+
const count = (actionCounts.get(step.action) ?? 0) + 1;
|
|
222
|
+
actionCounts.set(step.action, count);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
for (const [action, count] of actionCounts) {
|
|
226
|
+
if (count >= this.config.actionRepetitionThreshold) {
|
|
227
|
+
patterns.push({
|
|
228
|
+
type: 'repetition',
|
|
229
|
+
signature: action,
|
|
230
|
+
description: `Action repeated ${count} times`,
|
|
231
|
+
suggestedFix: 'Try a different approach',
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
return patterns;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Assess whether a trajectory is worth abstracting patterns from
|
|
241
|
+
*/
|
|
242
|
+
private assessAbstractability(
|
|
243
|
+
trajectory: Trajectory,
|
|
244
|
+
keySteps: number[],
|
|
245
|
+
errorPatterns: ErrorPattern[]
|
|
246
|
+
): boolean {
|
|
247
|
+
// Successful trajectories are generally abstractable
|
|
248
|
+
if (trajectory.outcome.success) {
|
|
249
|
+
// Must have enough meaningful steps
|
|
250
|
+
return keySteps.length >= 2;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// Failed trajectories with clear error patterns might be useful
|
|
254
|
+
// for learning what NOT to do
|
|
255
|
+
if (errorPatterns.length > 0) {
|
|
256
|
+
return (
|
|
257
|
+
errorPatterns.some((p) => p.suggestedFix) ||
|
|
258
|
+
trajectory.outcome.partialScore >= 0.3
|
|
259
|
+
);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
return false;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Extract training examples from trajectory
|
|
267
|
+
*/
|
|
268
|
+
private extractTrainingExamples(
|
|
269
|
+
trajectory: Trajectory,
|
|
270
|
+
keySteps: number[]
|
|
271
|
+
): TrainingExample[] {
|
|
272
|
+
const examples: TrainingExample[] = [];
|
|
273
|
+
|
|
274
|
+
// Extract from key steps
|
|
275
|
+
for (const index of keySteps) {
|
|
276
|
+
const step = trajectory.steps[index];
|
|
277
|
+
if (step.thought && step.action) {
|
|
278
|
+
examples.push({
|
|
279
|
+
input: step.thought,
|
|
280
|
+
output: step.action,
|
|
281
|
+
stepIndex: index,
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
// Add final step as input-output pair
|
|
287
|
+
if (trajectory.steps.length > 0 && trajectory.outcome.success) {
|
|
288
|
+
examples.push({
|
|
289
|
+
input: trajectory.task.description,
|
|
290
|
+
output: JSON.stringify(trajectory.outcome.solution),
|
|
291
|
+
stepIndex: trajectory.steps.length - 1,
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
return examples;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* Set credit assignment strategy
|
|
300
|
+
*/
|
|
301
|
+
setStrategy(strategy: CreditStrategy): void {
|
|
302
|
+
this.creditFn = getCreditAssignmentFn(strategy);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* Set attribution threshold
|
|
307
|
+
*/
|
|
308
|
+
setThreshold(threshold: number): void {
|
|
309
|
+
this.config.attributionThreshold = threshold;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* Update configuration
|
|
314
|
+
*/
|
|
315
|
+
updateConfig(config: Partial<AnalyzerConfig>): void {
|
|
316
|
+
this.config = { ...this.config, ...config };
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
/**
|
|
320
|
+
* Get current configuration
|
|
321
|
+
*/
|
|
322
|
+
getConfig(): AnalyzerConfig {
|
|
323
|
+
return { ...this.config };
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* Create a trajectory analyzer
|
|
329
|
+
*/
|
|
330
|
+
export function createAnalyzer(
|
|
331
|
+
strategy: CreditStrategy = 'simple',
|
|
332
|
+
config?: Partial<AnalyzerConfig>
|
|
333
|
+
): TrajectoryAnalyzer {
|
|
334
|
+
return new TrajectoryAnalyzer(strategy, config);
|
|
335
|
+
}
|