@req2rank/core 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.
Files changed (154) hide show
  1. package/LICENSE +21 -0
  2. package/dist/adaptive-calibration.d.ts +13 -0
  3. package/dist/adaptive-calibration.d.ts.map +1 -0
  4. package/dist/adaptive-calibration.js +39 -0
  5. package/dist/adaptive-calibration.js.map +1 -0
  6. package/dist/adaptive-calibration.test.d.ts +2 -0
  7. package/dist/adaptive-calibration.test.d.ts.map +1 -0
  8. package/dist/adaptive-calibration.test.js +20 -0
  9. package/dist/adaptive-calibration.test.js.map +1 -0
  10. package/dist/checkpoint-key.d.ts +3 -0
  11. package/dist/checkpoint-key.d.ts.map +1 -0
  12. package/dist/checkpoint-key.js +27 -0
  13. package/dist/checkpoint-key.js.map +1 -0
  14. package/dist/checkpoint-key.test.d.ts +2 -0
  15. package/dist/checkpoint-key.test.d.ts.map +1 -0
  16. package/dist/checkpoint-key.test.js +24 -0
  17. package/dist/checkpoint-key.test.js.map +1 -0
  18. package/dist/config.d.ts +162 -0
  19. package/dist/config.d.ts.map +1 -0
  20. package/dist/config.js +68 -0
  21. package/dist/config.js.map +1 -0
  22. package/dist/domain-taxonomy.d.ts +13 -0
  23. package/dist/domain-taxonomy.d.ts.map +1 -0
  24. package/dist/domain-taxonomy.js +12 -0
  25. package/dist/domain-taxonomy.js.map +1 -0
  26. package/dist/evaluation-panel.d.ts +27 -0
  27. package/dist/evaluation-panel.d.ts.map +1 -0
  28. package/dist/evaluation-panel.js +158 -0
  29. package/dist/evaluation-panel.js.map +1 -0
  30. package/dist/evaluation-panel.test.d.ts +2 -0
  31. package/dist/evaluation-panel.test.d.ts.map +1 -0
  32. package/dist/evaluation-panel.test.js +160 -0
  33. package/dist/evaluation-panel.test.js.map +1 -0
  34. package/dist/evidence-chain.d.ts +11 -0
  35. package/dist/evidence-chain.d.ts.map +1 -0
  36. package/dist/evidence-chain.js +33 -0
  37. package/dist/evidence-chain.js.map +1 -0
  38. package/dist/evidence-chain.test.d.ts +2 -0
  39. package/dist/evidence-chain.test.d.ts.map +1 -0
  40. package/dist/evidence-chain.test.js +16 -0
  41. package/dist/evidence-chain.test.js.map +1 -0
  42. package/dist/execution-engine.d.ts +29 -0
  43. package/dist/execution-engine.d.ts.map +1 -0
  44. package/dist/execution-engine.js +102 -0
  45. package/dist/execution-engine.js.map +1 -0
  46. package/dist/execution-engine.test.d.ts +2 -0
  47. package/dist/execution-engine.test.d.ts.map +1 -0
  48. package/dist/execution-engine.test.js +81 -0
  49. package/dist/execution-engine.test.js.map +1 -0
  50. package/dist/hub-client.d.ts +21 -0
  51. package/dist/hub-client.d.ts.map +1 -0
  52. package/dist/hub-client.js +103 -0
  53. package/dist/hub-client.js.map +1 -0
  54. package/dist/hub-client.test.d.ts +2 -0
  55. package/dist/hub-client.test.d.ts.map +1 -0
  56. package/dist/hub-client.test.js +129 -0
  57. package/dist/hub-client.test.js.map +1 -0
  58. package/dist/index.d.ts +19 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +19 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/leaderboard-query.d.ts +29 -0
  63. package/dist/leaderboard-query.d.ts.map +1 -0
  64. package/dist/leaderboard-query.js +59 -0
  65. package/dist/leaderboard-query.js.map +1 -0
  66. package/dist/leaderboard-query.test.d.ts +2 -0
  67. package/dist/leaderboard-query.test.d.ts.map +1 -0
  68. package/dist/leaderboard-query.test.js +34 -0
  69. package/dist/leaderboard-query.test.js.map +1 -0
  70. package/dist/local-store.d.ts +17 -0
  71. package/dist/local-store.d.ts.map +1 -0
  72. package/dist/local-store.js +144 -0
  73. package/dist/local-store.js.map +1 -0
  74. package/dist/local-store.test.d.ts +2 -0
  75. package/dist/local-store.test.d.ts.map +1 -0
  76. package/dist/local-store.test.js +116 -0
  77. package/dist/local-store.test.js.map +1 -0
  78. package/dist/pipeline-stage-handoff.test.d.ts +2 -0
  79. package/dist/pipeline-stage-handoff.test.d.ts.map +1 -0
  80. package/dist/pipeline-stage-handoff.test.js +290 -0
  81. package/dist/pipeline-stage-handoff.test.js.map +1 -0
  82. package/dist/pipeline.d.ts +67 -0
  83. package/dist/pipeline.d.ts.map +1 -0
  84. package/dist/pipeline.js +482 -0
  85. package/dist/pipeline.js.map +1 -0
  86. package/dist/providers/anthropic.d.ts +8 -0
  87. package/dist/providers/anthropic.d.ts.map +1 -0
  88. package/dist/providers/anthropic.js +45 -0
  89. package/dist/providers/anthropic.js.map +1 -0
  90. package/dist/providers/base.d.ts +36 -0
  91. package/dist/providers/base.d.ts.map +1 -0
  92. package/dist/providers/base.js +47 -0
  93. package/dist/providers/base.js.map +1 -0
  94. package/dist/providers/custom.d.ts +6 -0
  95. package/dist/providers/custom.d.ts.map +1 -0
  96. package/dist/providers/custom.js +6 -0
  97. package/dist/providers/custom.js.map +1 -0
  98. package/dist/providers/google.d.ts +8 -0
  99. package/dist/providers/google.d.ts.map +1 -0
  100. package/dist/providers/google.js +48 -0
  101. package/dist/providers/google.js.map +1 -0
  102. package/dist/providers/index.d.ts +23 -0
  103. package/dist/providers/index.d.ts.map +1 -0
  104. package/dist/providers/index.js +31 -0
  105. package/dist/providers/index.js.map +1 -0
  106. package/dist/providers/openai.d.ts +8 -0
  107. package/dist/providers/openai.d.ts.map +1 -0
  108. package/dist/providers/openai.js +40 -0
  109. package/dist/providers/openai.js.map +1 -0
  110. package/dist/providers/providers.test.d.ts +2 -0
  111. package/dist/providers/providers.test.d.ts.map +1 -0
  112. package/dist/providers/providers.test.js +44 -0
  113. package/dist/providers/providers.test.js.map +1 -0
  114. package/dist/requirement-generator.d.ts +29 -0
  115. package/dist/requirement-generator.d.ts.map +1 -0
  116. package/dist/requirement-generator.js +358 -0
  117. package/dist/requirement-generator.js.map +1 -0
  118. package/dist/requirement-generator.test.d.ts +2 -0
  119. package/dist/requirement-generator.test.d.ts.map +1 -0
  120. package/dist/requirement-generator.test.js +148 -0
  121. package/dist/requirement-generator.test.js.map +1 -0
  122. package/dist/sandbox.d.ts +32 -0
  123. package/dist/sandbox.d.ts.map +1 -0
  124. package/dist/sandbox.js +123 -0
  125. package/dist/sandbox.js.map +1 -0
  126. package/dist/sandbox.test.d.ts +2 -0
  127. package/dist/sandbox.test.d.ts.map +1 -0
  128. package/dist/sandbox.test.js +20 -0
  129. package/dist/sandbox.test.js.map +1 -0
  130. package/dist/scoring-engine.d.ts +15 -0
  131. package/dist/scoring-engine.d.ts.map +1 -0
  132. package/dist/scoring-engine.js +109 -0
  133. package/dist/scoring-engine.js.map +1 -0
  134. package/dist/scoring-engine.test.d.ts +2 -0
  135. package/dist/scoring-engine.test.d.ts.map +1 -0
  136. package/dist/scoring-engine.test.js +137 -0
  137. package/dist/scoring-engine.test.js.map +1 -0
  138. package/dist/submit-payload-builder.d.ts +9 -0
  139. package/dist/submit-payload-builder.d.ts.map +1 -0
  140. package/dist/submit-payload-builder.js +23 -0
  141. package/dist/submit-payload-builder.js.map +1 -0
  142. package/dist/submit-payload-builder.test.d.ts +2 -0
  143. package/dist/submit-payload-builder.test.d.ts.map +1 -0
  144. package/dist/submit-payload-builder.test.js +75 -0
  145. package/dist/submit-payload-builder.test.js.map +1 -0
  146. package/dist/submitter-types.d.ts +54 -0
  147. package/dist/submitter-types.d.ts.map +1 -0
  148. package/dist/submitter-types.js +2 -0
  149. package/dist/submitter-types.js.map +1 -0
  150. package/dist/types.d.ts +40 -0
  151. package/dist/types.d.ts.map +1 -0
  152. package/dist/types.js +2 -0
  153. package/dist/types.js.map +1 -0
  154. package/package.json +36 -0
@@ -0,0 +1,67 @@
1
+ import { Req2RankConfig, RunRecord } from "./config.js";
2
+ import { EvaluationPanel } from "./evaluation-panel.js";
3
+ import { ExecutionEngine } from "./execution-engine.js";
4
+ import { createProvider } from "./providers/index.js";
5
+ import { RequirementGenerator } from "./requirement-generator.js";
6
+ import { ScoringEngine } from "./scoring-engine.js";
7
+ declare const C12: readonly ["C1", "C2"];
8
+ declare const C1234: readonly ["C1", "C2", "C3", "C4"];
9
+ export interface PipelineRunInput {
10
+ config: Req2RankConfig;
11
+ now?: Date;
12
+ onProgress?: (event: PipelineProgressEvent) => void | Promise<void>;
13
+ sandbox?: {
14
+ enabled: boolean;
15
+ strict?: boolean;
16
+ runner: (code: string, context: {
17
+ roundIndex: number;
18
+ requirementTitle: string;
19
+ language: string;
20
+ }) => Promise<void>;
21
+ };
22
+ checkpoint?: {
23
+ key: string;
24
+ store: PipelineCheckpointStore;
25
+ };
26
+ }
27
+ export interface PipelineProgressEvent {
28
+ timestamp: string;
29
+ roundIndex: number;
30
+ totalRounds: number;
31
+ phase: "generate" | "execute" | "evaluate" | "score";
32
+ state: "started" | "completed" | "failed";
33
+ message?: string;
34
+ }
35
+ export interface PipelineRoundSnapshot {
36
+ index: number;
37
+ overallScore: number;
38
+ dimensionScores: Record<string, number>;
39
+ ija: number;
40
+ requirementTitle: string;
41
+ requirementText?: string;
42
+ codeSubmission?: string;
43
+ }
44
+ export interface PipelineCheckpoint {
45
+ version: 1;
46
+ createdAt: string;
47
+ totalRounds: number;
48
+ completedRounds: PipelineRoundSnapshot[];
49
+ }
50
+ export interface PipelineCheckpointStore {
51
+ load(key: string): Promise<PipelineCheckpoint | undefined>;
52
+ save(key: string, checkpoint: PipelineCheckpoint): Promise<void>;
53
+ clear(key: string): Promise<void>;
54
+ }
55
+ export declare class PipelineOrchestrator {
56
+ private readonly generator;
57
+ private readonly executionEngine;
58
+ private readonly evaluationPanel;
59
+ private readonly scoringEngine;
60
+ private readonly providerFactory;
61
+ private readonly isDefaultProviderFactory;
62
+ constructor(generator?: RequirementGenerator, executionEngine?: ExecutionEngine, evaluationPanel?: EvaluationPanel, scoringEngine?: ScoringEngine, providerFactory?: typeof createProvider);
63
+ private resolveProvider;
64
+ run(input: PipelineRunInput): Promise<RunRecord>;
65
+ }
66
+ export { C12, C1234 };
67
+ //# sourceMappingURL=pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,482 @@
1
+ import { EvaluationPanel } from "./evaluation-panel.js";
2
+ import { ExecutionEngine } from "./execution-engine.js";
3
+ import { createEvidenceChain } from "./evidence-chain.js";
4
+ import { createProvider } from "./providers/index.js";
5
+ import { RequirementGenerator } from "./requirement-generator.js";
6
+ import { ScoringEngine } from "./scoring-engine.js";
7
+ const C12 = ["C1", "C2"];
8
+ const C1234 = ["C1", "C2", "C3", "C4"];
9
+ function resolveComplexity(value, now) {
10
+ if (value === "mixed") {
11
+ const index = now.getTime() % C1234.length;
12
+ return C1234[index];
13
+ }
14
+ return value;
15
+ }
16
+ function buildRunId(now) {
17
+ const base = now.toISOString().replace(/[T:.Z-]/g, "").slice(0, 14);
18
+ return `run-${base}`;
19
+ }
20
+ function average(values) {
21
+ if (values.length === 0) {
22
+ return 0;
23
+ }
24
+ return values.reduce((sum, value) => sum + value, 0) / values.length;
25
+ }
26
+ function roundToOneDecimal(value) {
27
+ return Math.round(value * 10) / 10;
28
+ }
29
+ function calculateStdDev(values) {
30
+ if (values.length <= 1) {
31
+ return 0;
32
+ }
33
+ const mean = average(values);
34
+ const variance = values.reduce((sum, value) => sum + (value - mean) ** 2, 0) / values.length;
35
+ return Math.sqrt(variance);
36
+ }
37
+ function classifyAgreementFromIja(ija) {
38
+ if (ija >= 0.8) {
39
+ return "high";
40
+ }
41
+ if (ija >= 0.5) {
42
+ return "moderate";
43
+ }
44
+ return "low";
45
+ }
46
+ const DIMENSION_KEYS = [
47
+ "functionalCompleteness",
48
+ "codeQuality",
49
+ "logicAccuracy",
50
+ "security",
51
+ "engineeringPractice"
52
+ ];
53
+ function zeroDimensionScores() {
54
+ return {
55
+ functionalCompleteness: 0,
56
+ codeQuality: 0,
57
+ logicAccuracy: 0,
58
+ security: 0,
59
+ engineeringPractice: 0
60
+ };
61
+ }
62
+ function isTimeoutLikeError(error) {
63
+ if (!(error instanceof Error)) {
64
+ return false;
65
+ }
66
+ const message = error.message.toLowerCase();
67
+ return (error.name === "AbortError" ||
68
+ error.name === "TimeoutError" ||
69
+ message.includes("timeout") ||
70
+ message.includes("timed out") ||
71
+ message.includes("request failed after retry attempts"));
72
+ }
73
+ function isRoundRecoverableError(error) {
74
+ if (!(error instanceof Error)) {
75
+ return false;
76
+ }
77
+ return isTimeoutLikeError(error) || error.name === "SandboxValidationError";
78
+ }
79
+ function coerceIsoTime(value) {
80
+ return value.toISOString();
81
+ }
82
+ export class PipelineOrchestrator {
83
+ generator;
84
+ executionEngine;
85
+ evaluationPanel;
86
+ scoringEngine;
87
+ providerFactory;
88
+ isDefaultProviderFactory;
89
+ constructor(generator = new RequirementGenerator(), executionEngine = new ExecutionEngine(), evaluationPanel = new EvaluationPanel(), scoringEngine = new ScoringEngine(), providerFactory = createProvider) {
90
+ this.generator = generator;
91
+ this.executionEngine = executionEngine;
92
+ this.evaluationPanel = evaluationPanel;
93
+ this.scoringEngine = scoringEngine;
94
+ this.providerFactory = providerFactory;
95
+ this.isDefaultProviderFactory = providerFactory === createProvider;
96
+ }
97
+ resolveProvider(config) {
98
+ const apiKey = config.apiKey ?? "";
99
+ if (!apiKey && this.isDefaultProviderFactory) {
100
+ throw new Error(`Missing API key for provider ${config.provider}`);
101
+ }
102
+ if (this.isDefaultProviderFactory &&
103
+ config.provider !== "openai" &&
104
+ config.provider !== "anthropic" &&
105
+ config.provider !== "google" &&
106
+ config.provider !== "custom") {
107
+ throw new Error(`Unsupported provider: ${config.provider}`);
108
+ }
109
+ return this.providerFactory({
110
+ provider: config.provider ?? "openai",
111
+ apiKey: apiKey || "stub-key",
112
+ baseUrl: config.baseUrl ?? undefined
113
+ });
114
+ }
115
+ async run(input) {
116
+ const now = input.now ?? new Date();
117
+ const rounds = input.config.test.rounds;
118
+ const concurrency = Math.min(Math.max(input.config.test.concurrency, 1), rounds);
119
+ let loadedCheckpoint;
120
+ if (input.checkpoint) {
121
+ loadedCheckpoint = await input.checkpoint.store.load(input.checkpoint.key);
122
+ if (loadedCheckpoint && loadedCheckpoint.totalRounds !== rounds) {
123
+ throw new Error("checkpoint round count mismatch");
124
+ }
125
+ }
126
+ const systemProvider = this.resolveProvider({
127
+ provider: input.config.systemModel.provider,
128
+ apiKey: input.config.systemModel.apiKey
129
+ });
130
+ const targetProvider = this.resolveProvider({
131
+ provider: input.config.target.provider,
132
+ apiKey: input.config.target.apiKey,
133
+ baseUrl: input.config.target.baseUrl
134
+ });
135
+ const judges = input.config.judges;
136
+ const judgeProviderById = new Map();
137
+ for (const judge of judges) {
138
+ const providerKey = `${judge.provider}/${judge.model}`;
139
+ if (!judgeProviderById.has(providerKey)) {
140
+ judgeProviderById.set(providerKey, this.resolveProvider({ provider: judge.provider, apiKey: judge.apiKey }));
141
+ }
142
+ }
143
+ const roundScores = new Array(rounds);
144
+ const checkpointCreatedAt = loadedCheckpoint?.createdAt ?? now.toISOString();
145
+ for (const snapshot of loadedCheckpoint?.completedRounds ?? []) {
146
+ if (snapshot.index >= 0 && snapshot.index < rounds) {
147
+ roundScores[snapshot.index] = {
148
+ overallScore: snapshot.overallScore,
149
+ dimensionScores: snapshot.dimensionScores,
150
+ ija: snapshot.ija,
151
+ requirementTitle: snapshot.requirementTitle,
152
+ requirementText: snapshot.requirementText ?? snapshot.requirementTitle,
153
+ codeSubmission: snapshot.codeSubmission ?? "code-unavailable",
154
+ phaseTimes: {
155
+ generate: { startedAt: checkpointCreatedAt, completedAt: checkpointCreatedAt },
156
+ execute: { startedAt: checkpointCreatedAt, completedAt: checkpointCreatedAt },
157
+ evaluate: { startedAt: checkpointCreatedAt, completedAt: checkpointCreatedAt },
158
+ score: { startedAt: checkpointCreatedAt, completedAt: checkpointCreatedAt }
159
+ }
160
+ };
161
+ }
162
+ }
163
+ const pendingRoundIndexes = [];
164
+ for (let index = 0; index < rounds; index += 1) {
165
+ if (!roundScores[index]) {
166
+ pendingRoundIndexes.push(index);
167
+ }
168
+ }
169
+ const buildCheckpoint = () => ({
170
+ version: 1,
171
+ createdAt: now.toISOString(),
172
+ totalRounds: rounds,
173
+ completedRounds: roundScores.reduce((accumulator, item, index) => {
174
+ if (!item) {
175
+ return accumulator;
176
+ }
177
+ accumulator.push({
178
+ index,
179
+ overallScore: item.overallScore,
180
+ dimensionScores: item.dimensionScores,
181
+ ija: item.ija,
182
+ requirementTitle: item.requirementTitle,
183
+ requirementText: item.requirementText,
184
+ codeSubmission: item.codeSubmission
185
+ });
186
+ return accumulator;
187
+ }, [])
188
+ });
189
+ const emitProgress = async (event) => {
190
+ if (!input.onProgress) {
191
+ return;
192
+ }
193
+ await input.onProgress(event);
194
+ };
195
+ let roundCursor = 0;
196
+ const worker = async () => {
197
+ while (true) {
198
+ const pendingIndex = roundCursor;
199
+ roundCursor += 1;
200
+ if (pendingIndex >= pendingRoundIndexes.length) {
201
+ return;
202
+ }
203
+ const index = pendingRoundIndexes[pendingIndex];
204
+ const roundTime = new Date(now.getTime() + index * 1000);
205
+ const roundComplexity = resolveComplexity(input.config.test.complexity, roundTime);
206
+ let requirementTitle = `Round ${index + 1}`;
207
+ let requirementText = "";
208
+ let codeSubmission = "";
209
+ let requirement;
210
+ const phaseTimes = {
211
+ generate: { startedAt: "", completedAt: "" },
212
+ execute: { startedAt: "", completedAt: "" },
213
+ evaluate: { startedAt: "", completedAt: "" },
214
+ score: { startedAt: "", completedAt: "" }
215
+ };
216
+ try {
217
+ const generateStart = new Date();
218
+ await emitProgress({
219
+ timestamp: coerceIsoTime(generateStart),
220
+ roundIndex: index,
221
+ totalRounds: rounds,
222
+ phase: "generate",
223
+ state: "started"
224
+ });
225
+ phaseTimes.generate.startedAt = coerceIsoTime(generateStart);
226
+ requirement = await this.generator.generate({
227
+ skills: ["api-design", "error-handling"],
228
+ complexity: roundComplexity,
229
+ domain: "generic",
230
+ scenario: "pipeline-eval",
231
+ techStack: ["typescript"],
232
+ seed: `${now.toISOString()}-${roundComplexity}-${index}`
233
+ }, {
234
+ provider: systemProvider,
235
+ model: input.config.systemModel.model
236
+ });
237
+ phaseTimes.generate.completedAt = coerceIsoTime(new Date());
238
+ await emitProgress({
239
+ timestamp: phaseTimes.generate.completedAt,
240
+ roundIndex: index,
241
+ totalRounds: rounds,
242
+ phase: "generate",
243
+ state: "completed"
244
+ });
245
+ requirementTitle = requirement.title;
246
+ requirementText = JSON.stringify(requirement, null, 2);
247
+ const executeStart = new Date();
248
+ await emitProgress({
249
+ timestamp: coerceIsoTime(executeStart),
250
+ roundIndex: index,
251
+ totalRounds: rounds,
252
+ phase: "execute",
253
+ state: "started"
254
+ });
255
+ phaseTimes.execute.startedAt = coerceIsoTime(executeStart);
256
+ const execution = await this.executionEngine.execute(requirement, {
257
+ provider: input.config.target.provider,
258
+ model: input.config.target.model
259
+ }, { provider: targetProvider });
260
+ phaseTimes.execute.completedAt = coerceIsoTime(new Date());
261
+ await emitProgress({
262
+ timestamp: phaseTimes.execute.completedAt,
263
+ roundIndex: index,
264
+ totalRounds: rounds,
265
+ phase: "execute",
266
+ state: "completed"
267
+ });
268
+ codeSubmission = execution.code;
269
+ if (input.sandbox?.enabled) {
270
+ try {
271
+ await input.sandbox.runner(codeSubmission, {
272
+ roundIndex: index,
273
+ requirementTitle,
274
+ language: execution.language
275
+ });
276
+ }
277
+ catch (sandboxError) {
278
+ const error = new Error(sandboxError instanceof Error ? sandboxError.message : String(sandboxError));
279
+ error.name = "SandboxValidationError";
280
+ if (input.sandbox.strict ?? true) {
281
+ throw error;
282
+ }
283
+ await emitProgress({
284
+ timestamp: coerceIsoTime(new Date()),
285
+ roundIndex: index,
286
+ totalRounds: rounds,
287
+ phase: "execute",
288
+ state: "failed",
289
+ message: `sandbox warning: ${error.message}`
290
+ });
291
+ }
292
+ }
293
+ const evaluateStart = new Date();
294
+ await emitProgress({
295
+ timestamp: coerceIsoTime(evaluateStart),
296
+ roundIndex: index,
297
+ totalRounds: rounds,
298
+ phase: "evaluate",
299
+ state: "started"
300
+ });
301
+ phaseTimes.evaluate.startedAt = coerceIsoTime(evaluateStart);
302
+ const evaluationOutput = await this.evaluationPanel.evaluateWithIja(requirement, execution, judges, (judge) => {
303
+ const key = `${judge.provider}/${judge.model}`;
304
+ const provider = judgeProviderById.get(key);
305
+ if (!provider) {
306
+ throw new Error(`Missing judge provider: ${key}`);
307
+ }
308
+ return provider;
309
+ });
310
+ phaseTimes.evaluate.completedAt = coerceIsoTime(new Date());
311
+ await emitProgress({
312
+ timestamp: phaseTimes.evaluate.completedAt,
313
+ roundIndex: index,
314
+ totalRounds: rounds,
315
+ phase: "evaluate",
316
+ state: "completed"
317
+ });
318
+ const scoreStart = new Date();
319
+ await emitProgress({
320
+ timestamp: coerceIsoTime(scoreStart),
321
+ roundIndex: index,
322
+ totalRounds: rounds,
323
+ phase: "score",
324
+ state: "started"
325
+ });
326
+ phaseTimes.score.startedAt = coerceIsoTime(scoreStart);
327
+ const scoreResult = this.scoringEngine.score(evaluationOutput.results);
328
+ phaseTimes.score.completedAt = coerceIsoTime(new Date());
329
+ await emitProgress({
330
+ timestamp: phaseTimes.score.completedAt,
331
+ roundIndex: index,
332
+ totalRounds: rounds,
333
+ phase: "score",
334
+ state: "completed"
335
+ });
336
+ roundScores[index] = {
337
+ overallScore: scoreResult.overallScore,
338
+ dimensionScores: scoreResult.dimensionScores,
339
+ ija: evaluationOutput.ija,
340
+ requirementTitle,
341
+ requirementText,
342
+ codeSubmission,
343
+ phaseTimes
344
+ };
345
+ }
346
+ catch (error) {
347
+ await emitProgress({
348
+ timestamp: coerceIsoTime(new Date()),
349
+ roundIndex: index,
350
+ totalRounds: rounds,
351
+ phase: !phaseTimes.generate.completedAt
352
+ ? "generate"
353
+ : !phaseTimes.execute.completedAt
354
+ ? "execute"
355
+ : !phaseTimes.evaluate.completedAt
356
+ ? "evaluate"
357
+ : "score",
358
+ state: "failed",
359
+ message: error instanceof Error ? error.message : String(error)
360
+ });
361
+ if (!isRoundRecoverableError(error)) {
362
+ throw error;
363
+ }
364
+ const timeoutAt = coerceIsoTime(new Date());
365
+ for (const phase of ["generate", "execute", "evaluate", "score"]) {
366
+ if (!phaseTimes[phase].startedAt) {
367
+ phaseTimes[phase].startedAt = timeoutAt;
368
+ }
369
+ if (!phaseTimes[phase].completedAt) {
370
+ phaseTimes[phase].completedAt = timeoutAt;
371
+ }
372
+ }
373
+ roundScores[index] = {
374
+ overallScore: 0,
375
+ dimensionScores: zeroDimensionScores(),
376
+ ija: 0,
377
+ requirementTitle: `${requirementTitle} (failed)`,
378
+ requirementText: requirementText || "Round failed due to timeout or sandbox validation.",
379
+ codeSubmission: codeSubmission || "failed",
380
+ phaseTimes
381
+ };
382
+ }
383
+ if (input.checkpoint) {
384
+ await input.checkpoint.store.save(input.checkpoint.key, buildCheckpoint());
385
+ }
386
+ }
387
+ };
388
+ await Promise.all(Array.from({ length: concurrency }, async () => worker()));
389
+ if (input.checkpoint) {
390
+ await input.checkpoint.store.clear(input.checkpoint.key);
391
+ }
392
+ const overallScores = roundScores.map((item) => item.overallScore);
393
+ const aggregateScore = roundToOneDecimal(average(overallScores));
394
+ const stdDev = calculateStdDev(overallScores);
395
+ const margin = overallScores.length > 1 ? 1.96 * (stdDev / Math.sqrt(overallScores.length)) : 0;
396
+ const dimensionNames = Object.keys(roundScores[0]?.dimensionScores ?? {});
397
+ const aggregateDimensions = dimensionNames.reduce((accumulator, name) => {
398
+ accumulator[name] = roundToOneDecimal(average(roundScores.map((item) => item.dimensionScores[name] ?? 0)));
399
+ return accumulator;
400
+ }, {});
401
+ const aggregateIja = average(roundScores.map((item) => item.ija));
402
+ const requirementTitle = roundScores.map((item) => item.requirementTitle).join(" | ");
403
+ const phaseWindows = {
404
+ generate: {
405
+ startedAt: roundScores.map((item) => item.phaseTimes.generate.startedAt).sort()[0],
406
+ completedAt: roundScores.map((item) => item.phaseTimes.generate.completedAt).sort().at(-1) ?? now.toISOString(),
407
+ model: `${input.config.systemModel.provider}/${input.config.systemModel.model}`
408
+ },
409
+ execute: {
410
+ startedAt: roundScores.map((item) => item.phaseTimes.execute.startedAt).sort()[0],
411
+ completedAt: roundScores.map((item) => item.phaseTimes.execute.completedAt).sort().at(-1) ?? now.toISOString(),
412
+ model: `${input.config.target.provider}/${input.config.target.model}`
413
+ },
414
+ evaluate: {
415
+ startedAt: roundScores.map((item) => item.phaseTimes.evaluate.startedAt).sort()[0],
416
+ completedAt: roundScores.map((item) => item.phaseTimes.evaluate.completedAt).sort().at(-1) ?? now.toISOString(),
417
+ model: judges.map((judge) => `${judge.provider}/${judge.model}`).join(",")
418
+ },
419
+ score: {
420
+ startedAt: roundScores.map((item) => item.phaseTimes.score.startedAt).sort()[0],
421
+ completedAt: roundScores.map((item) => item.phaseTimes.score.completedAt).sort().at(-1) ?? now.toISOString(),
422
+ model: "scoring-engine"
423
+ }
424
+ };
425
+ const timeline = [
426
+ {
427
+ phase: "generate",
428
+ ...phaseWindows.generate
429
+ },
430
+ {
431
+ phase: "execute",
432
+ ...phaseWindows.execute,
433
+ startedAt: phaseWindows.execute.startedAt < phaseWindows.generate.completedAt ? phaseWindows.generate.completedAt : phaseWindows.execute.startedAt
434
+ },
435
+ {
436
+ phase: "evaluate",
437
+ ...phaseWindows.evaluate,
438
+ startedAt: phaseWindows.evaluate.startedAt < phaseWindows.execute.completedAt ? phaseWindows.execute.completedAt : phaseWindows.evaluate.startedAt
439
+ },
440
+ {
441
+ phase: "score",
442
+ ...phaseWindows.score,
443
+ startedAt: phaseWindows.score.startedAt < phaseWindows.evaluate.completedAt ? phaseWindows.evaluate.completedAt : phaseWindows.score.startedAt
444
+ }
445
+ ].map((item, index, all) => {
446
+ if (index > 0 && item.completedAt < all[index - 1].completedAt) {
447
+ return {
448
+ ...item,
449
+ completedAt: all[index - 1].completedAt
450
+ };
451
+ }
452
+ return item;
453
+ });
454
+ const samples = roundScores.slice(0, Math.min(2, roundScores.length)).map((item, index) => ({
455
+ roundIndex: index,
456
+ requirement: item.requirementText,
457
+ codeSubmission: item.codeSubmission
458
+ }));
459
+ const evidenceChain = createEvidenceChain({
460
+ timeline,
461
+ samples,
462
+ judgeModels: judges.map((judge) => `${judge.provider}/${judge.model}`)
463
+ });
464
+ return {
465
+ id: buildRunId(now),
466
+ createdAt: now.toISOString(),
467
+ targetProvider: input.config.target.provider,
468
+ targetModel: input.config.target.model,
469
+ complexity: input.config.test.complexity,
470
+ rounds: input.config.test.rounds,
471
+ requirementTitle,
472
+ overallScore: aggregateScore,
473
+ dimensionScores: aggregateDimensions,
474
+ ci95: [roundToOneDecimal(aggregateScore - margin), roundToOneDecimal(aggregateScore + margin)],
475
+ agreementLevel: classifyAgreementFromIja(aggregateIja),
476
+ ijaScore: roundToOneDecimal(aggregateIja),
477
+ evidenceChain
478
+ };
479
+ }
480
+ }
481
+ export { C12, C1234 };
482
+ //# sourceMappingURL=pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { ChatParams, ChatResponse, HttpProviderBase } from "./base.js";
2
+ export declare class AnthropicProvider extends HttpProviderBase {
3
+ id: string;
4
+ name: string;
5
+ constructor(apiKey: string, baseUrl?: string);
6
+ chat(params: ChatParams): Promise<ChatResponse>;
7
+ }
8
+ //# sourceMappingURL=anthropic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAUvE,qBAAa,iBAAkB,SAAQ,gBAAgB;IACrD,EAAE,SAAe;IACjB,IAAI,SAAe;gBAEP,MAAM,EAAE,MAAM,EAAE,OAAO,SAAiC;IAI9D,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;CAyCtD"}
@@ -0,0 +1,45 @@
1
+ import { HttpProviderBase } from "./base.js";
2
+ export class AnthropicProvider extends HttpProviderBase {
3
+ id = "anthropic";
4
+ name = "Anthropic";
5
+ constructor(apiKey, baseUrl = "https://api.anthropic.com/v1") {
6
+ super(apiKey, baseUrl);
7
+ }
8
+ async chat(params) {
9
+ this.requireApiKey();
10
+ const startedAt = Date.now();
11
+ const system = params.messages.filter((message) => message.role === "system").map((message) => message.content).join("\n\n");
12
+ const messages = params.messages
13
+ .filter((message) => message.role !== "system")
14
+ .map((message) => ({ role: message.role, content: message.content }));
15
+ const response = await this.fetchWithRetry(`${this.baseUrl}/messages`, {
16
+ method: "POST",
17
+ headers: {
18
+ "Content-Type": "application/json",
19
+ "x-api-key": this.apiKey,
20
+ "anthropic-version": "2023-06-01"
21
+ },
22
+ body: JSON.stringify({
23
+ model: params.model,
24
+ max_tokens: params.maxTokens ?? 2048,
25
+ temperature: params.temperature,
26
+ system: system.length > 0 ? system : undefined,
27
+ messages
28
+ })
29
+ });
30
+ if (!response.ok) {
31
+ throw new Error(`Anthropic request failed: ${response.status} ${response.statusText}`);
32
+ }
33
+ const data = (await response.json());
34
+ const firstTextChunk = data.content?.find((item) => item.type === "text")?.text ?? "";
35
+ return {
36
+ content: firstTextChunk,
37
+ usage: {
38
+ promptTokens: data.usage?.input_tokens ?? 0,
39
+ completionTokens: data.usage?.output_tokens ?? 0
40
+ },
41
+ latencyMs: Date.now() - startedAt
42
+ };
43
+ }
44
+ }
45
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAUvE,MAAM,OAAO,iBAAkB,SAAQ,gBAAgB;IACrD,EAAE,GAAG,WAAW,CAAC;IACjB,IAAI,GAAG,WAAW,CAAC;IAEnB,YAAY,MAAc,EAAE,OAAO,GAAG,8BAA8B;QAClE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAkB;QAC3B,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7H,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ;aAC7B,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC;aAC9C,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAExE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,OAAO,WAAW,EAAE;YACrE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,WAAW,EAAE,IAAI,CAAC,MAAM;gBACxB,mBAAmB,EAAE,YAAY;aAClC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,UAAU,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI;gBACpC,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBAC9C,QAAQ;aACT,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACzF,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA6B,CAAC;QACjE,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;QAEtF,OAAO;YACL,OAAO,EAAE,cAAc;YACvB,KAAK,EAAE;gBACL,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC;gBAC3C,gBAAgB,EAAE,IAAI,CAAC,KAAK,EAAE,aAAa,IAAI,CAAC;aACjD;YACD,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SAClC,CAAC;IACJ,CAAC;CACF"}