@deepthonk/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 (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +293 -0
  3. package/dist/artifacts.d.ts +36 -0
  4. package/dist/artifacts.js +211 -0
  5. package/dist/artifacts.js.map +1 -0
  6. package/dist/bradleyTerry.d.ts +2 -0
  7. package/dist/bradleyTerry.js +204 -0
  8. package/dist/bradleyTerry.js.map +1 -0
  9. package/dist/budget.d.ts +14 -0
  10. package/dist/budget.js +41 -0
  11. package/dist/budget.js.map +1 -0
  12. package/dist/budgetTracker.d.ts +16 -0
  13. package/dist/budgetTracker.js +137 -0
  14. package/dist/budgetTracker.js.map +1 -0
  15. package/dist/critique.d.ts +2 -0
  16. package/dist/critique.js +52 -0
  17. package/dist/critique.js.map +1 -0
  18. package/dist/errors.d.ts +24 -0
  19. package/dist/errors.js +27 -0
  20. package/dist/errors.js.map +1 -0
  21. package/dist/index.d.ts +15 -0
  22. package/dist/index.js +16 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/json.d.ts +1 -0
  25. package/dist/json.js +28 -0
  26. package/dist/json.js.map +1 -0
  27. package/dist/lifecycle.d.ts +63 -0
  28. package/dist/lifecycle.js +45 -0
  29. package/dist/lifecycle.js.map +1 -0
  30. package/dist/pairScheduler.d.ts +6 -0
  31. package/dist/pairScheduler.js +79 -0
  32. package/dist/pairScheduler.js.map +1 -0
  33. package/dist/prompts.d.ts +15 -0
  34. package/dist/prompts.js +200 -0
  35. package/dist/prompts.js.map +1 -0
  36. package/dist/rng.d.ts +8 -0
  37. package/dist/rng.js +31 -0
  38. package/dist/rng.js.map +1 -0
  39. package/dist/runner.d.ts +11 -0
  40. package/dist/runner.js +518 -0
  41. package/dist/runner.js.map +1 -0
  42. package/dist/schemas.d.ts +648 -0
  43. package/dist/schemas.js +119 -0
  44. package/dist/schemas.js.map +1 -0
  45. package/dist/services.d.ts +40 -0
  46. package/dist/services.js +104 -0
  47. package/dist/services.js.map +1 -0
  48. package/dist/traceStore.d.ts +22 -0
  49. package/dist/traceStore.js +105 -0
  50. package/dist/traceStore.js.map +1 -0
  51. package/package.json +42 -0
package/dist/runner.js ADDED
@@ -0,0 +1,518 @@
1
+ import pLimit from "p-limit";
2
+ import { z } from "zod";
3
+ import { fitBradleyTerry } from "./bradleyTerry.js";
4
+ import { BudgetTracker } from "./budgetTracker.js";
5
+ import { planBudget, validateProfile } from "./budget.js";
6
+ import { BudgetExceededError, CancelledError, ConfigError, DeepThonkError } from "./errors.js";
7
+ import { parseJsonObject } from "./json.js";
8
+ import { emptyUsage } from "./lifecycle.js";
9
+ import { makeKRegularPairs } from "./pairScheduler.js";
10
+ import { comparePrompt, finalizePrompt, generatePrompt, mutatePrompt } from "./prompts.js";
11
+ import { createRng } from "./rng.js";
12
+ import { runConfigSchema } from "./schemas.js";
13
+ import { aggregateCritiques } from "./critique.js";
14
+ import { TraceStore } from "./traceStore.js";
15
+ const compareOutputSchema = z.object({
16
+ winner: z.enum(["A", "B", "tie"]),
17
+ confidence: z.number().min(0).max(1).optional(),
18
+ critique_for_A: z.string().optional(),
19
+ critique_for_B: z.string().optional(),
20
+ feedback_a: z.string().optional(),
21
+ feedback_b: z.string().optional(),
22
+ selection_reason: z.string().default("")
23
+ });
24
+ export async function runDeepThonk(configInput, driver, control = {}) {
25
+ const config = runConfigSchema.parse(configInput);
26
+ validateProfile(config.profile);
27
+ enforceBudget(config);
28
+ const runId = `run_${new Date().toISOString().replace(/[:.]/g, "-")}_${Math.abs(config.seed)}`;
29
+ const trace = new TraceStore(config.runDir);
30
+ const rng = createRng(config.seed);
31
+ const tracker = new BudgetTracker(config);
32
+ const startedAt = new Date().toISOString();
33
+ await trace.init(config, runId);
34
+ let stopped = false;
35
+ const writeStatus = async (state, phase, extra = {}) => {
36
+ await trace.writeStatus({
37
+ job_id: control.jobId,
38
+ run_id: runId,
39
+ run_dir: config.runDir,
40
+ state,
41
+ phase,
42
+ usage: cloneUsage(tracker.usage),
43
+ started_at: startedAt,
44
+ worker_pid: process.pid,
45
+ updated_at: new Date().toISOString(),
46
+ ...extra
47
+ });
48
+ };
49
+ const assertNotCancelled = async (phase) => {
50
+ if (await control.shouldCancel?.()) {
51
+ throw new CancelledError(`Run cancelled before ${phase}.`, {
52
+ code: "run.cancelled",
53
+ retryable: false,
54
+ fix: "Start a new run with a fresh output directory. Automatic replay is not implemented yet."
55
+ });
56
+ }
57
+ };
58
+ const assertBudget = async (phase) => {
59
+ try {
60
+ tracker.assertWithinBudget(phase);
61
+ }
62
+ catch (error) {
63
+ if (error instanceof BudgetExceededError) {
64
+ stopped = true;
65
+ await trace.event({ type: "budget.exceeded", phase, usage: cloneUsage(tracker.usage), error: serializeRunError(error) });
66
+ }
67
+ throw error;
68
+ }
69
+ };
70
+ const guards = {
71
+ async beforeCall(phase) {
72
+ if (stopped)
73
+ throw new BudgetExceededError(`Run already stopped before ${phase}.`, { code: "budget.stopped" });
74
+ await assertNotCancelled(phase);
75
+ await assertBudget(phase);
76
+ },
77
+ async afterCall(phase) {
78
+ await assertNotCancelled(phase);
79
+ await assertBudget(phase);
80
+ }
81
+ };
82
+ try {
83
+ await writeStatus("running", "initialized");
84
+ await assertNotCancelled("initial population");
85
+ let population = await generateInitialPopulation(config, driver, trace, rng, runId, tracker, guards);
86
+ await trace.writePopulation(0, population);
87
+ await assertBudget("initial population");
88
+ await writeStatus("running", "population_completed", { generation: 0 });
89
+ for (let gen = 1; gen <= config.profile.t; gen += 1) {
90
+ await assertNotCancelled(`generation ${gen} comparisons`);
91
+ await writeStatus("running", "generation_comparisons", { generation: gen });
92
+ const pairs = makeKRegularPairs(population.map((candidate) => candidate.id), config.profile.k, rng);
93
+ const comparisons = await judgePairs({
94
+ config,
95
+ driver,
96
+ trace,
97
+ rng,
98
+ runId,
99
+ generation: gen,
100
+ pairs,
101
+ population,
102
+ tracker,
103
+ guards
104
+ });
105
+ const scores = fitBradleyTerry(population, comparisons, config.profile.lambda, gen);
106
+ await trace.writeScores(gen, scores);
107
+ await assertBudget(`generation ${gen} comparisons`);
108
+ const ranked = rankPopulation(population, scores);
109
+ const elites = topQuartile(ranked);
110
+ const discarded = bottomQuartile(ranked);
111
+ const survivors = ranked.filter((candidate) => !discarded.has(candidate.id));
112
+ const mutationParents = survivors.slice(0, config.profile.n - elites.length);
113
+ const critiquesByCandidate = aggregateCritiques(population, comparisons);
114
+ await assertNotCancelled(`generation ${gen} mutation`);
115
+ await writeStatus("running", "generation_mutation", { generation: gen });
116
+ const mutants = await mutateSurvivors({
117
+ config,
118
+ driver,
119
+ trace,
120
+ generation: gen,
121
+ survivors: mutationParents,
122
+ critiquesByCandidate,
123
+ tracker,
124
+ guards
125
+ });
126
+ const eliteCopies = copyElites(elites, gen);
127
+ for (const elite of eliteCopies) {
128
+ await trace.writeCandidate(elite);
129
+ await trace.event({ type: "candidate.elite_copied", candidate_id: elite.id, parent_id: elite.parentId, generation: gen });
130
+ }
131
+ population = keepPopulationSize([...eliteCopies, ...mutants], config.profile.n);
132
+ await trace.writePopulation(gen, population);
133
+ await assertBudget(`generation ${gen} mutation`);
134
+ await writeStatus("running", "generation_completed", { generation: gen });
135
+ }
136
+ await assertNotCancelled("final ranking");
137
+ await writeStatus("running", "final_ranking", { generation: "final" });
138
+ const finalPairs = makeKRegularPairs(population.map((candidate) => candidate.id), config.profile.m, rng);
139
+ const finalComparisons = await judgePairs({
140
+ config,
141
+ driver,
142
+ trace,
143
+ rng,
144
+ runId,
145
+ generation: "final",
146
+ pairs: finalPairs,
147
+ population,
148
+ tracker,
149
+ guards
150
+ });
151
+ const finalScores = fitBradleyTerry(population, finalComparisons, config.profile.lambda, "final");
152
+ await trace.writeScores("final", finalScores);
153
+ await assertBudget("final ranking");
154
+ const winner = rankPopulation(population, finalScores)[0];
155
+ if (!winner)
156
+ throw new ConfigError("Run produced no winner.");
157
+ await assertNotCancelled("finalization");
158
+ await writeStatus("running", "finalizing", { generation: "final" });
159
+ const finalAnswer = await maybeFinalize(winner, config, driver, trace, tracker, guards);
160
+ await assertBudget("finalization");
161
+ const completedAt = new Date().toISOString();
162
+ const summary = {
163
+ run_id: runId,
164
+ winner_id: winner.id,
165
+ calls: tracker.usage.calls,
166
+ usage: cloneUsage(tracker.usage),
167
+ ranked_winner_answer_path: "artifacts/winner.txt",
168
+ final_answer_path: "artifacts/final.txt",
169
+ final_answer_is_postprocessed: finalAnswer !== winner.content,
170
+ final_scores: finalScores,
171
+ completed_at: completedAt
172
+ };
173
+ await trace.writeSummary(summary, finalAnswer, winner.content);
174
+ await trace.event({ type: "run.completed", winner_id: winner.id, completed_at: completedAt });
175
+ await writeStatus("completed", "summary", { generation: "final", completed_at: completedAt });
176
+ return {
177
+ runId,
178
+ runDir: config.runDir,
179
+ winner,
180
+ finalAnswer,
181
+ finalScores,
182
+ calls: tracker.usage.calls
183
+ };
184
+ }
185
+ catch (error) {
186
+ const serialized = serializeRunError(error);
187
+ const state = error instanceof CancelledError ? "cancelled" : error instanceof BudgetExceededError ? "budget_exceeded" : "failed";
188
+ await trace.event({ type: `run.${state}`, run_id: runId, error: serialized, updated_at: new Date().toISOString() });
189
+ await writeStatus(state, state, { error: serialized });
190
+ throw error;
191
+ }
192
+ }
193
+ export function rankPopulation(population, scores) {
194
+ const order = new Map(scores.map((score) => [score.candidateId, score.rank]));
195
+ return [...population].sort((left, right) => {
196
+ return (order.get(left.id) ?? Number.POSITIVE_INFINITY) - (order.get(right.id) ?? Number.POSITIVE_INFINITY);
197
+ });
198
+ }
199
+ export function topQuartile(ranked) {
200
+ return ranked.slice(0, Math.ceil(ranked.length / 4));
201
+ }
202
+ export function bottomQuartile(ranked) {
203
+ return new Set(ranked.slice(ranked.length - Math.floor(ranked.length / 4)).map((candidate) => candidate.id));
204
+ }
205
+ export function copyElites(elites, generation) {
206
+ return elites.map((candidate, index) => ({
207
+ ...candidate,
208
+ id: `g${generation}_elite_${index}_${candidate.id}`,
209
+ generation,
210
+ parentId: candidate.id,
211
+ kind: "elite-copy",
212
+ status: "elite",
213
+ metadata: {
214
+ ...candidate.metadata,
215
+ createdAt: new Date().toISOString()
216
+ }
217
+ }));
218
+ }
219
+ export function keepPopulationSize(population, n) {
220
+ return population.slice(0, n);
221
+ }
222
+ async function generateInitialPopulation(config, driver, trace, rng, runId, tracker, guards) {
223
+ const limit = pLimit(config.concurrency.generate);
224
+ const jobs = Array.from({ length: config.profile.n }, (_, index) => ({
225
+ index,
226
+ id: `g0_c${index}_${rng.id("c")}`,
227
+ prompt: generatePrompt(config.task, config.rubric, config.promptStyle, config.promptOverrides?.generate)
228
+ }));
229
+ const candidates = await Promise.all(jobs.map((job) => limit(async () => {
230
+ await guards.beforeCall("initial population call");
231
+ const result = await driver.generate({
232
+ task: config.task,
233
+ rubric: config.rubric,
234
+ model: config.generatorModel,
235
+ temperature: config.profile.sampleTemperature,
236
+ candidateIndex: job.index,
237
+ prompt: job.prompt
238
+ });
239
+ const delta = tracker.record(result, { provider: config.provider, model: config.generatorModel });
240
+ await trace.writeUsage(buildUsageRecord({
241
+ phase: "gen0_initial",
242
+ role: "generator",
243
+ result,
244
+ delta,
245
+ provider: result.provider ?? config.provider,
246
+ model: result.model ?? config.generatorModel
247
+ }));
248
+ await guards.afterCall("initial population call");
249
+ const candidate = {
250
+ id: job.id,
251
+ generation: 0,
252
+ kind: "initial",
253
+ content: result.text,
254
+ status: "generated",
255
+ metadata: resultMetadata(result, config, job.prompt)
256
+ };
257
+ await trace.writeCandidate(candidate);
258
+ await trace.event({ type: "candidate.generated", run_id: runId, candidate_id: candidate.id });
259
+ return candidate;
260
+ })));
261
+ return candidates;
262
+ }
263
+ async function judgePairs(args) {
264
+ const byId = new Map(args.population.map((candidate) => [candidate.id, candidate]));
265
+ const limit = pLimit(args.config.concurrency.judge);
266
+ const jobs = args.pairs.map((pair, pairIndex) => {
267
+ const originalA = byId.get(pair.a);
268
+ const originalB = byId.get(pair.b);
269
+ if (!originalA || !originalB)
270
+ throw new ConfigError(`Pair referenced missing candidate: ${pair.a}, ${pair.b}.`);
271
+ const swap = args.rng.bool();
272
+ const presentedA = swap ? originalB : originalA;
273
+ const presentedB = swap ? originalA : originalB;
274
+ return {
275
+ pairIndex,
276
+ originalA,
277
+ originalB,
278
+ presentedA,
279
+ presentedB,
280
+ id: `${args.generation}_cmp_${pairIndex}_${args.rng.id("cmp")}`,
281
+ prompt: comparePrompt(args.config.task, presentedA, presentedB, args.config.rubric, args.config.promptStyle, args.config.promptOverrides?.compare)
282
+ };
283
+ });
284
+ const comparisons = await Promise.all(jobs.map((job) => limit(async () => {
285
+ let parsed;
286
+ let rawOutput;
287
+ let invalidJson = false;
288
+ let resultModel;
289
+ let resultProvider;
290
+ let resultRetryCount = 0;
291
+ let jsonParseFailures = 0;
292
+ let inputTokens = 0;
293
+ let inputCacheHitTokens = 0;
294
+ let inputCacheMissTokens = 0;
295
+ let outputTokens = 0;
296
+ let totalTokens = 0;
297
+ for (let attempt = 0; attempt <= args.config.retry.invalidJsonRetries; attempt += 1) {
298
+ await args.guards.beforeCall(`${args.generation} comparison call`);
299
+ const result = await args.driver.compare({
300
+ task: args.config.task,
301
+ rubric: args.config.rubric,
302
+ model: args.config.judgeModel,
303
+ temperature: args.config.profile.judgeTemperature,
304
+ candidateA: job.presentedA,
305
+ candidateB: job.presentedB,
306
+ prompt: job.prompt
307
+ });
308
+ const delta = args.tracker.record(result, { provider: args.config.provider, model: args.config.judgeModel });
309
+ await args.trace.writeUsage(buildUsageRecord({
310
+ phase: args.generation === "final" ? "final_judge" : `gen${args.generation}_judge`,
311
+ role: "judge",
312
+ result,
313
+ delta,
314
+ provider: result.provider ?? args.config.provider,
315
+ model: result.model ?? args.config.judgeModel
316
+ }));
317
+ await args.guards.afterCall(`${args.generation} comparison call`);
318
+ inputTokens += result.usage?.inputTokens ?? 0;
319
+ inputCacheHitTokens += result.usage?.inputCacheHitTokens ?? 0;
320
+ inputCacheMissTokens += result.usage?.inputCacheMissTokens ?? 0;
321
+ outputTokens += result.usage?.outputTokens ?? 0;
322
+ totalTokens += result.usage?.totalTokens ?? (result.usage?.inputTokens ?? 0) + (result.usage?.outputTokens ?? 0);
323
+ rawOutput = args.config.output.includeRawModelOutputs ? result.raw ?? result.text : undefined;
324
+ resultModel = result.model;
325
+ resultProvider = result.provider;
326
+ resultRetryCount += result.retryCount ?? 0;
327
+ try {
328
+ parsed = compareOutputSchema.parse(parseJsonObject(result.text));
329
+ invalidJson = false;
330
+ break;
331
+ }
332
+ catch {
333
+ invalidJson = true;
334
+ jsonParseFailures += 1;
335
+ }
336
+ }
337
+ const comparison = {
338
+ id: job.id,
339
+ runId: args.runId,
340
+ generation: args.generation,
341
+ candidateAId: job.presentedA.id,
342
+ candidateBId: job.presentedB.id,
343
+ presentedAOriginalId: job.presentedA.id,
344
+ presentedBOriginalId: job.presentedB.id,
345
+ winner: parsed?.winner ?? "tie",
346
+ confidence: parsed?.confidence,
347
+ critiqueForA: parsed?.feedback_a ?? parsed?.critique_for_A ?? "Invalid comparison JSON; recorded as tie.",
348
+ critiqueForB: parsed?.feedback_b ?? parsed?.critique_for_B ?? "Invalid comparison JSON; recorded as tie.",
349
+ selectionReason: parsed?.selection_reason ?? "invalid_json_tie",
350
+ rawOutput,
351
+ model: resultModel,
352
+ provider: resultProvider,
353
+ metadata: compactMetadata({
354
+ invalid_json_tie: invalidJson ? true : undefined,
355
+ json_parse_failures: jsonParseFailures || undefined,
356
+ model_call_count: jsonParseFailures + (parsed ? 1 : 0),
357
+ input_tokens: inputTokens || undefined,
358
+ input_cache_hit_tokens: inputCacheHitTokens || undefined,
359
+ input_cache_miss_tokens: inputCacheMissTokens || undefined,
360
+ output_tokens: outputTokens || undefined,
361
+ total_tokens: totalTokens || undefined,
362
+ scheduled_candidate_a_id: job.originalA.id,
363
+ scheduled_candidate_b_id: job.originalB.id,
364
+ provider_retry_count: resultRetryCount || undefined,
365
+ prompt: args.config.output.includePrompts ? job.prompt : undefined
366
+ })
367
+ };
368
+ await args.trace.writeComparison(comparison);
369
+ await args.trace.event({
370
+ type: "comparison.completed",
371
+ run_id: args.runId,
372
+ comparison_id: comparison.id,
373
+ generation: args.generation
374
+ });
375
+ return comparison;
376
+ })));
377
+ return comparisons;
378
+ }
379
+ async function mutateSurvivors(args) {
380
+ const limit = pLimit(args.config.concurrency.mutate);
381
+ const mutants = await Promise.all(args.survivors.map((candidate, index) => limit(async () => {
382
+ const critique = args.critiquesByCandidate.get(candidate.id) ?? "";
383
+ const prompt = mutatePrompt(args.config.task, candidate, critique, args.config.rubric, args.config.promptStyle, args.config.promptOverrides?.mutate);
384
+ await args.guards.beforeCall(`generation ${args.generation} mutation call`);
385
+ const result = await args.driver.mutate({
386
+ task: args.config.task,
387
+ rubric: args.config.rubric,
388
+ model: args.config.mutatorModel,
389
+ temperature: args.config.profile.mutateTemperature,
390
+ candidate,
391
+ critique,
392
+ prompt
393
+ });
394
+ const delta = args.tracker.record(result, { provider: args.config.provider, model: args.config.mutatorModel });
395
+ await args.trace.writeUsage(buildUsageRecord({
396
+ phase: `gen${args.generation}_mutate`,
397
+ role: "mutator",
398
+ result,
399
+ delta,
400
+ provider: result.provider ?? args.config.provider,
401
+ model: result.model ?? args.config.mutatorModel
402
+ }));
403
+ await args.guards.afterCall(`generation ${args.generation} mutation call`);
404
+ const mutant = {
405
+ id: `g${args.generation}_m${index}_${candidate.id}`,
406
+ generation: args.generation,
407
+ parentId: candidate.id,
408
+ kind: "mutation",
409
+ content: result.text,
410
+ status: "mutated",
411
+ metadata: resultMetadata(result, args.config, prompt)
412
+ };
413
+ await args.trace.writeCandidate(mutant);
414
+ await args.trace.event({ type: "candidate.mutated", candidate_id: mutant.id, parent_id: mutant.parentId });
415
+ return mutant;
416
+ })));
417
+ return mutants;
418
+ }
419
+ async function maybeFinalize(winner, config, driver, trace, tracker, guards) {
420
+ if (!config.finalizerModel || !driver.finalize)
421
+ return winner.content;
422
+ await guards.beforeCall("finalization call");
423
+ const result = await driver.finalize({
424
+ task: config.task,
425
+ rubric: config.rubric,
426
+ model: config.finalizerModel,
427
+ candidate: winner,
428
+ prompt: finalizePrompt(config.task, winner, config.rubric, config.promptStyle, config.promptOverrides?.finalize)
429
+ });
430
+ const delta = tracker.record(result, { provider: config.provider, model: config.finalizerModel });
431
+ await trace.writeUsage(buildUsageRecord({
432
+ phase: "finalize",
433
+ role: "finalizer",
434
+ result,
435
+ delta,
436
+ provider: result.provider ?? config.provider,
437
+ model: result.model ?? config.finalizerModel
438
+ }));
439
+ await guards.afterCall("finalization call");
440
+ await trace.event({ type: "finalized", winner_id: winner.id, model: result.model, provider: result.provider });
441
+ return result.text;
442
+ }
443
+ function resultMetadata(result, config, prompt) {
444
+ return compactMetadata({
445
+ model: result.model,
446
+ provider: result.provider,
447
+ promptTokens: result.usage?.inputTokens,
448
+ promptCacheHitTokens: result.usage?.inputCacheHitTokens,
449
+ promptCacheMissTokens: result.usage?.inputCacheMissTokens,
450
+ completionTokens: result.usage?.outputTokens,
451
+ totalTokens: result.usage?.totalTokens,
452
+ latencyMs: result.latencyMs,
453
+ retryCount: result.retryCount,
454
+ rawOutput: config.output.includeRawModelOutputs ? result.raw : undefined,
455
+ prompt: config.output.includePrompts ? prompt : undefined,
456
+ createdAt: new Date().toISOString()
457
+ });
458
+ }
459
+ function compactMetadata(metadata) {
460
+ return Object.fromEntries(Object.entries(metadata).filter(([, value]) => value !== undefined));
461
+ }
462
+ function buildUsageRecord(args) {
463
+ return {
464
+ ts: new Date().toISOString(),
465
+ phase: args.phase,
466
+ role: args.role,
467
+ provider: args.provider,
468
+ model: args.model,
469
+ input_tokens: args.delta.inputTokens,
470
+ input_cache_hit_tokens: args.delta.inputCacheHitTokens,
471
+ input_cache_miss_tokens: args.delta.inputCacheMissTokens,
472
+ output_tokens: args.delta.outputTokens,
473
+ total_tokens: args.delta.totalTokens,
474
+ input_usd: args.delta.inputUsd,
475
+ output_usd: args.delta.outputUsd,
476
+ total_usd: args.delta.usd,
477
+ latency_ms: args.result.latencyMs,
478
+ retry_count: args.result.retryCount
479
+ };
480
+ }
481
+ function enforceBudget(config) {
482
+ const plan = planBudget(config.profile);
483
+ // Each comparison call may fire up to invalidJsonRetries extra requests before the loop gives up.
484
+ // Include that worst-case headroom so a user who sets --max-calls = plan.calls isn't tripped by
485
+ // a single retry mid-run.
486
+ const judgeCalls = plan.per_generation_judge_calls * config.profile.t + plan.final_judge_calls;
487
+ const retryHeadroom = judgeCalls * config.retry.invalidJsonRetries;
488
+ const finalizerCalls = config.finalizerModel ? 1 : 0;
489
+ const plannedCalls = plan.calls + finalizerCalls + retryHeadroom;
490
+ if (config.budget?.maxCalls !== undefined && plannedCalls > config.budget.maxCalls) {
491
+ throw new BudgetExceededError(`Planned call count ${plannedCalls} exceeds maxCalls ${config.budget.maxCalls}.`, {
492
+ code: "budget.planned_calls_exceeded",
493
+ fix: "Raise maxCalls or use a smaller profile."
494
+ });
495
+ }
496
+ }
497
+ function cloneUsage(usage) {
498
+ return {
499
+ ...emptyUsage(),
500
+ ...usage
501
+ };
502
+ }
503
+ function serializeRunError(error) {
504
+ if (error instanceof DeepThonkError) {
505
+ return {
506
+ code: error.code,
507
+ message: error.message,
508
+ retryable: error.retryable,
509
+ fix: error.fix
510
+ };
511
+ }
512
+ return {
513
+ code: "unexpected_error",
514
+ message: error instanceof Error ? error.message : String(error),
515
+ retryable: false
516
+ };
517
+ }
518
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}