coding-agent-benchmarks 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/LICENSE +21 -0
- package/README.md +474 -0
- package/dist/adapters/claudeCodeCLI.d.ts +19 -0
- package/dist/adapters/claudeCodeCLI.d.ts.map +1 -0
- package/dist/adapters/claudeCodeCLI.js +106 -0
- package/dist/adapters/claudeCodeCLI.js.map +1 -0
- package/dist/adapters/copilotCLI.d.ts +19 -0
- package/dist/adapters/copilotCLI.d.ts.map +1 -0
- package/dist/adapters/copilotCLI.js +104 -0
- package/dist/adapters/copilotCLI.js.map +1 -0
- package/dist/config/defaultScenarios.d.ts +6 -0
- package/dist/config/defaultScenarios.d.ts.map +1 -0
- package/dist/config/defaultScenarios.js +209 -0
- package/dist/config/defaultScenarios.js.map +1 -0
- package/dist/config/loader.d.ts +13 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +153 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/evaluator.d.ts +45 -0
- package/dist/evaluator.d.ts.map +1 -0
- package/dist/evaluator.js +226 -0
- package/dist/evaluator.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/runner.d.ts +6 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.js +233 -0
- package/dist/runner.js.map +1 -0
- package/dist/types.d.ts +354 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/baselineManager.d.ts +53 -0
- package/dist/utils/baselineManager.d.ts.map +1 -0
- package/dist/utils/baselineManager.js +220 -0
- package/dist/utils/baselineManager.js.map +1 -0
- package/dist/utils/gitUtils.d.ts +39 -0
- package/dist/utils/gitUtils.d.ts.map +1 -0
- package/dist/utils/gitUtils.js +121 -0
- package/dist/utils/gitUtils.js.map +1 -0
- package/dist/utils/githubAuth.d.ts +22 -0
- package/dist/utils/githubAuth.d.ts.map +1 -0
- package/dist/utils/githubAuth.js +79 -0
- package/dist/utils/githubAuth.js.map +1 -0
- package/dist/utils/workspaceUtils.d.ts +32 -0
- package/dist/utils/workspaceUtils.d.ts.map +1 -0
- package/dist/utils/workspaceUtils.js +121 -0
- package/dist/utils/workspaceUtils.js.map +1 -0
- package/dist/validators/eslintValidator.d.ts +22 -0
- package/dist/validators/eslintValidator.d.ts.map +1 -0
- package/dist/validators/eslintValidator.js +217 -0
- package/dist/validators/eslintValidator.js.map +1 -0
- package/dist/validators/llmJudge.d.ts +28 -0
- package/dist/validators/llmJudge.d.ts.map +1 -0
- package/dist/validators/llmJudge.js +241 -0
- package/dist/validators/llmJudge.js.map +1 -0
- package/dist/validators/patternValidator.d.ts +27 -0
- package/dist/validators/patternValidator.d.ts.map +1 -0
- package/dist/validators/patternValidator.js +233 -0
- package/dist/validators/patternValidator.js.map +1 -0
- package/package.json +50 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core type definitions for coding-agent-benchmarks
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Generic categories for test scenarios
|
|
6
|
+
*/
|
|
7
|
+
export type TestCategory = 'typescript' | 'react' | 'testing' | 'architecture' | 'performance' | 'general';
|
|
8
|
+
/**
|
|
9
|
+
* Severity levels for test scenarios
|
|
10
|
+
*/
|
|
11
|
+
export type Severity = 'critical' | 'major' | 'minor';
|
|
12
|
+
/**
|
|
13
|
+
* Supported adapter types
|
|
14
|
+
*/
|
|
15
|
+
export type AdapterType = 'copilot' | 'claude-code';
|
|
16
|
+
/**
|
|
17
|
+
* Pattern matching configuration for code validation
|
|
18
|
+
*/
|
|
19
|
+
export interface PatternValidation {
|
|
20
|
+
/**
|
|
21
|
+
* Regex patterns that should NOT appear in generated code
|
|
22
|
+
*/
|
|
23
|
+
forbiddenPatterns?: readonly RegExp[];
|
|
24
|
+
/**
|
|
25
|
+
* Regex patterns that MUST appear in generated code
|
|
26
|
+
*/
|
|
27
|
+
requiredPatterns?: readonly RegExp[];
|
|
28
|
+
/**
|
|
29
|
+
* Import statements that should NOT be present
|
|
30
|
+
* Example: ['from "lodash"', 'import * as']
|
|
31
|
+
*/
|
|
32
|
+
forbiddenImports?: readonly string[];
|
|
33
|
+
/**
|
|
34
|
+
* Import statements that MUST be present
|
|
35
|
+
*/
|
|
36
|
+
requiredImports?: readonly string[];
|
|
37
|
+
/**
|
|
38
|
+
* File name patterns that should NOT be created
|
|
39
|
+
*/
|
|
40
|
+
forbiddenFileNamePatterns?: readonly RegExp[];
|
|
41
|
+
/**
|
|
42
|
+
* File name patterns that MUST be created
|
|
43
|
+
*/
|
|
44
|
+
requiredFileNamePatterns?: readonly RegExp[];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* LLM-as-judge validation configuration
|
|
48
|
+
*/
|
|
49
|
+
export interface LLMJudgeValidation {
|
|
50
|
+
/**
|
|
51
|
+
* Enable LLM-based semantic validation
|
|
52
|
+
*/
|
|
53
|
+
enabled: boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Custom prompt for the LLM judge
|
|
56
|
+
* If not provided, a default judgment prompt will be used
|
|
57
|
+
*/
|
|
58
|
+
judgmentPrompt?: string;
|
|
59
|
+
/**
|
|
60
|
+
* Model to use for judgment (default: openai/gpt-4.1)
|
|
61
|
+
*/
|
|
62
|
+
model?: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* ESLint validation configuration
|
|
66
|
+
*/
|
|
67
|
+
export interface ESLintValidation {
|
|
68
|
+
/**
|
|
69
|
+
* Enable ESLint validation on generated code
|
|
70
|
+
*/
|
|
71
|
+
enabled: boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Custom ESLint config path (optional)
|
|
74
|
+
*/
|
|
75
|
+
configPath?: string;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Validation strategy combining multiple validation methods
|
|
79
|
+
*/
|
|
80
|
+
export interface ValidationStrategy {
|
|
81
|
+
/**
|
|
82
|
+
* Pattern-based validation
|
|
83
|
+
*/
|
|
84
|
+
patterns?: PatternValidation;
|
|
85
|
+
/**
|
|
86
|
+
* LLM-as-judge validation
|
|
87
|
+
*/
|
|
88
|
+
llmJudge?: LLMJudgeValidation;
|
|
89
|
+
/**
|
|
90
|
+
* ESLint validation
|
|
91
|
+
*/
|
|
92
|
+
eslint?: ESLintValidation;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* A test scenario defining a coding task and validation criteria
|
|
96
|
+
*/
|
|
97
|
+
export interface TestScenario {
|
|
98
|
+
/**
|
|
99
|
+
* Unique identifier for the scenario
|
|
100
|
+
*/
|
|
101
|
+
id: string;
|
|
102
|
+
/**
|
|
103
|
+
* Category of the test
|
|
104
|
+
*/
|
|
105
|
+
category: TestCategory;
|
|
106
|
+
/**
|
|
107
|
+
* Severity level of violations
|
|
108
|
+
*/
|
|
109
|
+
severity: Severity;
|
|
110
|
+
/**
|
|
111
|
+
* Tags for filtering and organization
|
|
112
|
+
*/
|
|
113
|
+
tags: readonly string[];
|
|
114
|
+
/**
|
|
115
|
+
* Human-readable description of what this scenario tests
|
|
116
|
+
*/
|
|
117
|
+
description: string;
|
|
118
|
+
/**
|
|
119
|
+
* The prompt/instruction given to the coding agent
|
|
120
|
+
*/
|
|
121
|
+
prompt: string;
|
|
122
|
+
/**
|
|
123
|
+
* Optional inline context to include with the prompt
|
|
124
|
+
*/
|
|
125
|
+
context?: string;
|
|
126
|
+
/**
|
|
127
|
+
* Optional context files to provide to the agent
|
|
128
|
+
* Paths are resolved relative to the workspace root
|
|
129
|
+
*/
|
|
130
|
+
contextFiles?: readonly string[];
|
|
131
|
+
/**
|
|
132
|
+
* Validation strategy to apply to generated code
|
|
133
|
+
*/
|
|
134
|
+
validationStrategy: ValidationStrategy;
|
|
135
|
+
/**
|
|
136
|
+
* Optional timeout in milliseconds
|
|
137
|
+
* - number: Specific timeout (e.g., 120000 = 2 minutes)
|
|
138
|
+
* - null: No timeout (wait indefinitely)
|
|
139
|
+
* - undefined: Use defaultTimeout from config, or 120000ms default
|
|
140
|
+
*/
|
|
141
|
+
timeout?: number | null;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* A violation found during validation
|
|
145
|
+
*/
|
|
146
|
+
export interface Violation {
|
|
147
|
+
/**
|
|
148
|
+
* Type of validation that found this violation
|
|
149
|
+
*/
|
|
150
|
+
type: 'pattern' | 'llm-judge' | 'eslint';
|
|
151
|
+
/**
|
|
152
|
+
* Description of the violation
|
|
153
|
+
*/
|
|
154
|
+
message: string;
|
|
155
|
+
/**
|
|
156
|
+
* File where the violation was found (if applicable)
|
|
157
|
+
*/
|
|
158
|
+
file?: string;
|
|
159
|
+
/**
|
|
160
|
+
* Line number where the violation was found (if applicable)
|
|
161
|
+
*/
|
|
162
|
+
line?: number;
|
|
163
|
+
/**
|
|
164
|
+
* Severity of the violation
|
|
165
|
+
*/
|
|
166
|
+
severity: Severity;
|
|
167
|
+
/**
|
|
168
|
+
* Additional details about the violation
|
|
169
|
+
*/
|
|
170
|
+
details?: string;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Result of a single validation
|
|
174
|
+
*/
|
|
175
|
+
export interface ValidationResult {
|
|
176
|
+
/**
|
|
177
|
+
* Whether the validation passed
|
|
178
|
+
*/
|
|
179
|
+
passed: boolean;
|
|
180
|
+
/**
|
|
181
|
+
* Score from 0.0 to 1.0 (1.0 = perfect, 0.0 = failed)
|
|
182
|
+
* -1 = validation was skipped
|
|
183
|
+
*/
|
|
184
|
+
score: number;
|
|
185
|
+
/**
|
|
186
|
+
* List of violations found
|
|
187
|
+
*/
|
|
188
|
+
violations: Violation[];
|
|
189
|
+
/**
|
|
190
|
+
* Type of validator that produced this result
|
|
191
|
+
*/
|
|
192
|
+
validatorType: 'pattern' | 'llm-judge' | 'eslint';
|
|
193
|
+
/**
|
|
194
|
+
* Error message if the validator itself failed
|
|
195
|
+
*/
|
|
196
|
+
error?: string;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Result of evaluating a single scenario
|
|
200
|
+
*/
|
|
201
|
+
export interface EvaluationResult {
|
|
202
|
+
/**
|
|
203
|
+
* The scenario that was evaluated
|
|
204
|
+
*/
|
|
205
|
+
scenario: TestScenario;
|
|
206
|
+
/**
|
|
207
|
+
* Whether the scenario passed overall
|
|
208
|
+
*/
|
|
209
|
+
passed: boolean;
|
|
210
|
+
/**
|
|
211
|
+
* Overall score (average of all validator scores)
|
|
212
|
+
*/
|
|
213
|
+
score: number;
|
|
214
|
+
/**
|
|
215
|
+
* Results from each validator
|
|
216
|
+
*/
|
|
217
|
+
validationResults: ValidationResult[];
|
|
218
|
+
/**
|
|
219
|
+
* All violations found across all validators
|
|
220
|
+
*/
|
|
221
|
+
violations: Violation[];
|
|
222
|
+
/**
|
|
223
|
+
* Generated code (if available)
|
|
224
|
+
*/
|
|
225
|
+
generatedCode?: {
|
|
226
|
+
files: {
|
|
227
|
+
path: string;
|
|
228
|
+
content: string;
|
|
229
|
+
}[];
|
|
230
|
+
};
|
|
231
|
+
/**
|
|
232
|
+
* Time taken to evaluate (milliseconds)
|
|
233
|
+
*/
|
|
234
|
+
duration: number;
|
|
235
|
+
/**
|
|
236
|
+
* Error message if evaluation failed
|
|
237
|
+
*/
|
|
238
|
+
error?: string;
|
|
239
|
+
/**
|
|
240
|
+
* Baseline comparison (if available)
|
|
241
|
+
*/
|
|
242
|
+
baselineComparison?: {
|
|
243
|
+
baselineScore: number;
|
|
244
|
+
delta: number;
|
|
245
|
+
isImprovement: boolean;
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Full evaluation report for multiple scenarios
|
|
250
|
+
*/
|
|
251
|
+
export interface EvaluationReport {
|
|
252
|
+
/**
|
|
253
|
+
* Adapter used for code generation
|
|
254
|
+
*/
|
|
255
|
+
adapter: AdapterType;
|
|
256
|
+
/**
|
|
257
|
+
* Model used (if applicable)
|
|
258
|
+
*/
|
|
259
|
+
model?: string;
|
|
260
|
+
/**
|
|
261
|
+
* Timestamp when evaluation started
|
|
262
|
+
*/
|
|
263
|
+
timestamp: string;
|
|
264
|
+
/**
|
|
265
|
+
* Results for each scenario
|
|
266
|
+
*/
|
|
267
|
+
results: EvaluationResult[];
|
|
268
|
+
/**
|
|
269
|
+
* Summary statistics
|
|
270
|
+
*/
|
|
271
|
+
summary: {
|
|
272
|
+
total: number;
|
|
273
|
+
passed: number;
|
|
274
|
+
failed: number;
|
|
275
|
+
skipped: number;
|
|
276
|
+
averageScore: number;
|
|
277
|
+
totalViolations: number;
|
|
278
|
+
};
|
|
279
|
+
/**
|
|
280
|
+
* Total duration of all evaluations (milliseconds)
|
|
281
|
+
*/
|
|
282
|
+
totalDuration: number;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Interface for code generation adapters
|
|
286
|
+
*/
|
|
287
|
+
export interface CodeGenerationAdapter {
|
|
288
|
+
/**
|
|
289
|
+
* Type identifier for this adapter
|
|
290
|
+
*/
|
|
291
|
+
type: AdapterType;
|
|
292
|
+
/**
|
|
293
|
+
* Check if the adapter's CLI tool is available
|
|
294
|
+
*/
|
|
295
|
+
checkAvailability(): Promise<boolean>;
|
|
296
|
+
/**
|
|
297
|
+
* Generate code based on a prompt
|
|
298
|
+
* @param prompt The instruction/prompt for the coding agent
|
|
299
|
+
* @param contextFiles Optional context files to provide
|
|
300
|
+
* @param timeout Timeout in milliseconds, or null for no timeout (default: null = no timeout)
|
|
301
|
+
* @returns List of files that were created or modified
|
|
302
|
+
*/
|
|
303
|
+
generate(prompt: string, contextFiles?: readonly string[], timeout?: number | null): Promise<string[]>;
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Interface for code validators
|
|
307
|
+
*/
|
|
308
|
+
export interface CodeValidator {
|
|
309
|
+
/**
|
|
310
|
+
* Type identifier for this validator
|
|
311
|
+
*/
|
|
312
|
+
type: 'pattern' | 'llm-judge' | 'eslint';
|
|
313
|
+
/**
|
|
314
|
+
* Validate generated code
|
|
315
|
+
* @param files List of file paths that were generated
|
|
316
|
+
* @param scenario The test scenario being evaluated
|
|
317
|
+
* @returns Validation result
|
|
318
|
+
*/
|
|
319
|
+
validate(files: readonly string[], scenario: TestScenario): Promise<ValidationResult>;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Configuration file structure
|
|
323
|
+
*/
|
|
324
|
+
export interface BenchmarkConfig {
|
|
325
|
+
/**
|
|
326
|
+
* Custom test scenarios
|
|
327
|
+
*/
|
|
328
|
+
scenarios?: TestScenario[];
|
|
329
|
+
/**
|
|
330
|
+
* Default adapter to use
|
|
331
|
+
*/
|
|
332
|
+
defaultAdapter?: AdapterType;
|
|
333
|
+
/**
|
|
334
|
+
* Default LLM model for judge
|
|
335
|
+
*/
|
|
336
|
+
defaultModel?: string;
|
|
337
|
+
/**
|
|
338
|
+
* Workspace root directory (auto-detected if not specified)
|
|
339
|
+
*/
|
|
340
|
+
workspaceRoot?: string;
|
|
341
|
+
/**
|
|
342
|
+
* Default timeout for code generation in milliseconds
|
|
343
|
+
* Applies to all scenarios unless overridden per-scenario
|
|
344
|
+
* - number: Specific timeout (e.g., 120000 = 2 minutes)
|
|
345
|
+
* - null: No timeout (wait indefinitely)
|
|
346
|
+
* - undefined: Use built-in default of 120000ms
|
|
347
|
+
*/
|
|
348
|
+
defaultTimeout?: number | null;
|
|
349
|
+
/**
|
|
350
|
+
* Output directory for reports
|
|
351
|
+
*/
|
|
352
|
+
outputDir?: string;
|
|
353
|
+
}
|
|
354
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Baseline management for tracking evaluation results over time
|
|
3
|
+
*/
|
|
4
|
+
import { AdapterType, EvaluationResult, Violation } from '../types';
|
|
5
|
+
export interface BaselineData {
|
|
6
|
+
scenarioId: string;
|
|
7
|
+
score: number;
|
|
8
|
+
violations: Violation[];
|
|
9
|
+
timestamp: string;
|
|
10
|
+
adapter: AdapterType;
|
|
11
|
+
model?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare class BaselineManager {
|
|
14
|
+
private baselineDir;
|
|
15
|
+
constructor(workspaceRoot: string);
|
|
16
|
+
/**
|
|
17
|
+
* Get the baseline file path for a scenario
|
|
18
|
+
*/
|
|
19
|
+
private getBaselinePath;
|
|
20
|
+
/**
|
|
21
|
+
* Save a baseline result
|
|
22
|
+
*/
|
|
23
|
+
saveBaseline(result: EvaluationResult, adapter: AdapterType, model?: string): void;
|
|
24
|
+
/**
|
|
25
|
+
* Load a baseline result
|
|
26
|
+
*/
|
|
27
|
+
loadBaseline(adapter: AdapterType, model: string, scenarioId: string): BaselineData | null;
|
|
28
|
+
/**
|
|
29
|
+
* Compare current result with baseline
|
|
30
|
+
*/
|
|
31
|
+
compareWithBaseline(result: EvaluationResult, adapter: AdapterType, model?: string): {
|
|
32
|
+
baselineScore: number;
|
|
33
|
+
delta: number;
|
|
34
|
+
isImprovement: boolean;
|
|
35
|
+
} | null;
|
|
36
|
+
/**
|
|
37
|
+
* List all baselines for an adapter
|
|
38
|
+
*/
|
|
39
|
+
listBaselines(adapter: AdapterType, model?: string): BaselineData[];
|
|
40
|
+
/**
|
|
41
|
+
* Collect baselines from a directory
|
|
42
|
+
*/
|
|
43
|
+
private collectBaselinesFromDir;
|
|
44
|
+
/**
|
|
45
|
+
* Delete a baseline
|
|
46
|
+
*/
|
|
47
|
+
deleteBaseline(adapter: AdapterType, model: string, scenarioId: string): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Delete all baselines for an adapter
|
|
50
|
+
*/
|
|
51
|
+
deleteAllBaselines(adapter: AdapterType, model?: string): number;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=baselineManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baselineManager.d.ts","sourceRoot":"","sources":["../../src/utils/baselineManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEpE,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAS;gBAEhB,aAAa,EAAE,MAAM;IAIjC;;OAEG;IACH,OAAO,CAAC,eAAe;IAQvB;;OAEG;IACH,YAAY,CACV,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,WAAW,EACpB,KAAK,GAAE,MAAkB,GACxB,IAAI;IAsBP;;OAEG;IACH,YAAY,CACV,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACjB,YAAY,GAAG,IAAI;IAgBtB;;OAEG;IACH,mBAAmB,CACjB,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,WAAW,EACpB,KAAK,GAAE,MAAkB,GACxB;QACD,aAAa,EAAE,MAAM,CAAC;QACtB,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,OAAO,CAAC;KACxB,GAAG,IAAI;IAiBR;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE;IA4BnE;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAe/B;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;IAgBhF;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;CA8CjE"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Baseline management for tracking evaluation results over time
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.BaselineManager = void 0;
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
class BaselineManager {
|
|
43
|
+
constructor(workspaceRoot) {
|
|
44
|
+
this.baselineDir = path.join(workspaceRoot, '.benchmarks', 'baselines');
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get the baseline file path for a scenario
|
|
48
|
+
*/
|
|
49
|
+
getBaselinePath(adapter, model, scenarioId) {
|
|
50
|
+
return path.join(this.baselineDir, adapter, model, `${scenarioId}.json`);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Save a baseline result
|
|
54
|
+
*/
|
|
55
|
+
saveBaseline(result, adapter, model = 'default') {
|
|
56
|
+
const baseline = {
|
|
57
|
+
scenarioId: result.scenario.id,
|
|
58
|
+
score: result.score,
|
|
59
|
+
violations: result.violations,
|
|
60
|
+
timestamp: new Date().toISOString(),
|
|
61
|
+
adapter,
|
|
62
|
+
model,
|
|
63
|
+
};
|
|
64
|
+
const baselinePath = this.getBaselinePath(adapter, model, result.scenario.id);
|
|
65
|
+
const dir = path.dirname(baselinePath);
|
|
66
|
+
// Ensure directory exists
|
|
67
|
+
if (!fs.existsSync(dir)) {
|
|
68
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
69
|
+
}
|
|
70
|
+
// Write baseline file
|
|
71
|
+
fs.writeFileSync(baselinePath, JSON.stringify(baseline, null, 2), 'utf-8');
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Load a baseline result
|
|
75
|
+
*/
|
|
76
|
+
loadBaseline(adapter, model, scenarioId) {
|
|
77
|
+
const baselinePath = this.getBaselinePath(adapter, model, scenarioId);
|
|
78
|
+
if (!fs.existsSync(baselinePath)) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
const content = fs.readFileSync(baselinePath, 'utf-8');
|
|
83
|
+
return JSON.parse(content);
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
console.warn(`Failed to load baseline for ${scenarioId}:`, error);
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Compare current result with baseline
|
|
92
|
+
*/
|
|
93
|
+
compareWithBaseline(result, adapter, model = 'default') {
|
|
94
|
+
const baseline = this.loadBaseline(adapter, model, result.scenario.id);
|
|
95
|
+
if (!baseline) {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
const delta = result.score - baseline.score;
|
|
99
|
+
const isImprovement = delta > 0;
|
|
100
|
+
return {
|
|
101
|
+
baselineScore: baseline.score,
|
|
102
|
+
delta,
|
|
103
|
+
isImprovement,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* List all baselines for an adapter
|
|
108
|
+
*/
|
|
109
|
+
listBaselines(adapter, model) {
|
|
110
|
+
const baselines = [];
|
|
111
|
+
const adapterDir = path.join(this.baselineDir, adapter);
|
|
112
|
+
if (!fs.existsSync(adapterDir)) {
|
|
113
|
+
return baselines;
|
|
114
|
+
}
|
|
115
|
+
// If model specified, only search that model directory
|
|
116
|
+
if (model) {
|
|
117
|
+
const modelDir = path.join(adapterDir, model);
|
|
118
|
+
if (fs.existsSync(modelDir)) {
|
|
119
|
+
this.collectBaselinesFromDir(modelDir, baselines);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
// Search all model directories
|
|
124
|
+
const modelDirs = fs.readdirSync(adapterDir, { withFileTypes: true });
|
|
125
|
+
for (const dir of modelDirs) {
|
|
126
|
+
if (dir.isDirectory()) {
|
|
127
|
+
const modelDir = path.join(adapterDir, dir.name);
|
|
128
|
+
this.collectBaselinesFromDir(modelDir, baselines);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return baselines;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Collect baselines from a directory
|
|
136
|
+
*/
|
|
137
|
+
collectBaselinesFromDir(dir, baselines) {
|
|
138
|
+
const files = fs.readdirSync(dir);
|
|
139
|
+
for (const file of files) {
|
|
140
|
+
if (file.endsWith('.json')) {
|
|
141
|
+
try {
|
|
142
|
+
const content = fs.readFileSync(path.join(dir, file), 'utf-8');
|
|
143
|
+
const baseline = JSON.parse(content);
|
|
144
|
+
baselines.push(baseline);
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
console.warn(`Failed to load baseline ${file}:`, error);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Delete a baseline
|
|
154
|
+
*/
|
|
155
|
+
deleteBaseline(adapter, model, scenarioId) {
|
|
156
|
+
const baselinePath = this.getBaselinePath(adapter, model, scenarioId);
|
|
157
|
+
if (!fs.existsSync(baselinePath)) {
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
try {
|
|
161
|
+
fs.unlinkSync(baselinePath);
|
|
162
|
+
return true;
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
console.warn(`Failed to delete baseline for ${scenarioId}:`, error);
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Delete all baselines for an adapter
|
|
171
|
+
*/
|
|
172
|
+
deleteAllBaselines(adapter, model) {
|
|
173
|
+
let count = 0;
|
|
174
|
+
const adapterDir = path.join(this.baselineDir, adapter);
|
|
175
|
+
if (!fs.existsSync(adapterDir)) {
|
|
176
|
+
return 0;
|
|
177
|
+
}
|
|
178
|
+
if (model) {
|
|
179
|
+
const modelDir = path.join(adapterDir, model);
|
|
180
|
+
if (fs.existsSync(modelDir)) {
|
|
181
|
+
const files = fs.readdirSync(modelDir);
|
|
182
|
+
for (const file of files) {
|
|
183
|
+
if (file.endsWith('.json')) {
|
|
184
|
+
try {
|
|
185
|
+
fs.unlinkSync(path.join(modelDir, file));
|
|
186
|
+
count++;
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
console.warn(`Failed to delete ${file}:`, error);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
// Delete all models
|
|
197
|
+
const modelDirs = fs.readdirSync(adapterDir, { withFileTypes: true });
|
|
198
|
+
for (const dir of modelDirs) {
|
|
199
|
+
if (dir.isDirectory()) {
|
|
200
|
+
const modelDir = path.join(adapterDir, dir.name);
|
|
201
|
+
const files = fs.readdirSync(modelDir);
|
|
202
|
+
for (const file of files) {
|
|
203
|
+
if (file.endsWith('.json')) {
|
|
204
|
+
try {
|
|
205
|
+
fs.unlinkSync(path.join(modelDir, file));
|
|
206
|
+
count++;
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
console.warn(`Failed to delete ${file}:`, error);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return count;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
exports.BaselineManager = BaselineManager;
|
|
220
|
+
//# sourceMappingURL=baselineManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baselineManager.js","sourceRoot":"","sources":["../../src/utils/baselineManager.ts"],"names":[],"mappings":"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"}
|