@deepthonk/core 0.1.4 → 0.2.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 (43) hide show
  1. package/README.md +26 -11
  2. package/dist/artifacts.js +178 -11
  3. package/dist/artifacts.js.map +1 -1
  4. package/dist/bradleyTerry.d.ts +1 -0
  5. package/dist/bradleyTerry.js +27 -2
  6. package/dist/bradleyTerry.js.map +1 -1
  7. package/dist/budget.d.ts +7 -1
  8. package/dist/budget.js +6 -1
  9. package/dist/budget.js.map +1 -1
  10. package/dist/budgetTracker.d.ts +6 -1
  11. package/dist/budgetTracker.js +32 -1
  12. package/dist/budgetTracker.js.map +1 -1
  13. package/dist/checkpointStore.d.ts +56 -0
  14. package/dist/checkpointStore.js +351 -0
  15. package/dist/checkpointStore.js.map +1 -0
  16. package/dist/critique.d.ts +3 -1
  17. package/dist/critique.js +24 -9
  18. package/dist/critique.js.map +1 -1
  19. package/dist/index.d.ts +2 -0
  20. package/dist/index.js +2 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/lifecycle.d.ts +33 -1
  23. package/dist/lifecycle.js +207 -6
  24. package/dist/lifecycle.js.map +1 -1
  25. package/dist/phaseRunner.d.ts +6 -1
  26. package/dist/phaseRunner.js +53 -19
  27. package/dist/phaseRunner.js.map +1 -1
  28. package/dist/resume.d.ts +10 -3
  29. package/dist/resume.js +357 -39
  30. package/dist/resume.js.map +1 -1
  31. package/dist/runner.d.ts +3 -1
  32. package/dist/runner.js +894 -246
  33. package/dist/runner.js.map +1 -1
  34. package/dist/schemas.d.ts +397 -47
  35. package/dist/schemas.js +67 -5
  36. package/dist/schemas.js.map +1 -1
  37. package/dist/services.d.ts +9 -0
  38. package/dist/services.js +115 -12
  39. package/dist/services.js.map +1 -1
  40. package/dist/traceStore.d.ts +31 -2
  41. package/dist/traceStore.js +182 -21
  42. package/dist/traceStore.js.map +1 -1
  43. package/package.json +1 -1
package/dist/schemas.d.ts CHANGED
@@ -199,9 +199,10 @@ declare const promptOverridesSchema: z.ZodObject<{
199
199
  }>;
200
200
  export type PromptOverride = z.infer<typeof promptOverrideSchema>;
201
201
  export type PromptOverrides = z.infer<typeof promptOverridesSchema>;
202
+ export declare const runIdSchema: z.ZodEffects<z.ZodString, string, string>;
202
203
  export declare const runConfigSchema: z.ZodObject<{
203
204
  version: z.ZodOptional<z.ZodString>;
204
- runId: z.ZodOptional<z.ZodString>;
205
+ runId: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
205
206
  task: z.ZodString;
206
207
  rubric: z.ZodOptional<z.ZodString>;
207
208
  promptStyle: z.ZodDefault<z.ZodEnum<["general", "paper-programming"]>>;
@@ -317,6 +318,23 @@ export declare const runConfigSchema: z.ZodObject<{
317
318
  baseUrl: z.ZodOptional<z.ZodString>;
318
319
  apiKeyEnv: z.ZodOptional<z.ZodString>;
319
320
  supportsJsonMode: z.ZodOptional<z.ZodBoolean>;
321
+ routeFingerprint: z.ZodOptional<z.ZodString>;
322
+ samplingPreferences: z.ZodOptional<z.ZodObject<{
323
+ modelHints: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
324
+ costPriority: z.ZodOptional<z.ZodNumber>;
325
+ speedPriority: z.ZodOptional<z.ZodNumber>;
326
+ intelligencePriority: z.ZodOptional<z.ZodNumber>;
327
+ }, "strip", z.ZodTypeAny, {
328
+ modelHints?: string[] | undefined;
329
+ costPriority?: number | undefined;
330
+ speedPriority?: number | undefined;
331
+ intelligencePriority?: number | undefined;
332
+ }, {
333
+ modelHints?: string[] | undefined;
334
+ costPriority?: number | undefined;
335
+ speedPriority?: number | undefined;
336
+ intelligencePriority?: number | undefined;
337
+ }>>;
320
338
  models: z.ZodObject<{
321
339
  generator: z.ZodString;
322
340
  mutator: z.ZodString;
@@ -333,25 +351,142 @@ export declare const runConfigSchema: z.ZodObject<{
333
351
  judge: string;
334
352
  finalizer?: string | undefined;
335
353
  }>;
336
- roleProviders: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
337
- provider: z.ZodString;
338
- baseUrl: z.ZodOptional<z.ZodString>;
339
- apiKeyEnv: z.ZodOptional<z.ZodString>;
340
- model: z.ZodString;
341
- supportsJsonMode: z.ZodOptional<z.ZodBoolean>;
342
- }, "strip", z.ZodTypeAny, {
343
- model: string;
344
- provider: string;
345
- baseUrl?: string | undefined;
346
- apiKeyEnv?: string | undefined;
347
- supportsJsonMode?: boolean | undefined;
354
+ roleProviders: z.ZodOptional<z.ZodObject<{
355
+ generator: z.ZodOptional<z.ZodObject<{
356
+ provider: z.ZodString;
357
+ baseUrl: z.ZodOptional<z.ZodString>;
358
+ apiKeyEnv: z.ZodOptional<z.ZodString>;
359
+ model: z.ZodString;
360
+ supportsJsonMode: z.ZodOptional<z.ZodBoolean>;
361
+ }, "strip", z.ZodTypeAny, {
362
+ model: string;
363
+ provider: string;
364
+ baseUrl?: string | undefined;
365
+ apiKeyEnv?: string | undefined;
366
+ supportsJsonMode?: boolean | undefined;
367
+ }, {
368
+ model: string;
369
+ provider: string;
370
+ baseUrl?: string | undefined;
371
+ apiKeyEnv?: string | undefined;
372
+ supportsJsonMode?: boolean | undefined;
373
+ }>>;
374
+ mutator: z.ZodOptional<z.ZodObject<{
375
+ provider: z.ZodString;
376
+ baseUrl: z.ZodOptional<z.ZodString>;
377
+ apiKeyEnv: z.ZodOptional<z.ZodString>;
378
+ model: z.ZodString;
379
+ supportsJsonMode: z.ZodOptional<z.ZodBoolean>;
380
+ }, "strip", z.ZodTypeAny, {
381
+ model: string;
382
+ provider: string;
383
+ baseUrl?: string | undefined;
384
+ apiKeyEnv?: string | undefined;
385
+ supportsJsonMode?: boolean | undefined;
386
+ }, {
387
+ model: string;
388
+ provider: string;
389
+ baseUrl?: string | undefined;
390
+ apiKeyEnv?: string | undefined;
391
+ supportsJsonMode?: boolean | undefined;
392
+ }>>;
393
+ judge: z.ZodOptional<z.ZodObject<{
394
+ provider: z.ZodString;
395
+ baseUrl: z.ZodOptional<z.ZodString>;
396
+ apiKeyEnv: z.ZodOptional<z.ZodString>;
397
+ model: z.ZodString;
398
+ supportsJsonMode: z.ZodOptional<z.ZodBoolean>;
399
+ }, "strip", z.ZodTypeAny, {
400
+ model: string;
401
+ provider: string;
402
+ baseUrl?: string | undefined;
403
+ apiKeyEnv?: string | undefined;
404
+ supportsJsonMode?: boolean | undefined;
405
+ }, {
406
+ model: string;
407
+ provider: string;
408
+ baseUrl?: string | undefined;
409
+ apiKeyEnv?: string | undefined;
410
+ supportsJsonMode?: boolean | undefined;
411
+ }>>;
412
+ finalizer: z.ZodOptional<z.ZodObject<{
413
+ provider: z.ZodString;
414
+ baseUrl: z.ZodOptional<z.ZodString>;
415
+ apiKeyEnv: z.ZodOptional<z.ZodString>;
416
+ model: z.ZodString;
417
+ supportsJsonMode: z.ZodOptional<z.ZodBoolean>;
418
+ }, "strip", z.ZodTypeAny, {
419
+ model: string;
420
+ provider: string;
421
+ baseUrl?: string | undefined;
422
+ apiKeyEnv?: string | undefined;
423
+ supportsJsonMode?: boolean | undefined;
424
+ }, {
425
+ model: string;
426
+ provider: string;
427
+ baseUrl?: string | undefined;
428
+ apiKeyEnv?: string | undefined;
429
+ supportsJsonMode?: boolean | undefined;
430
+ }>>;
431
+ }, "strict", z.ZodTypeAny, {
432
+ generator?: {
433
+ model: string;
434
+ provider: string;
435
+ baseUrl?: string | undefined;
436
+ apiKeyEnv?: string | undefined;
437
+ supportsJsonMode?: boolean | undefined;
438
+ } | undefined;
439
+ mutator?: {
440
+ model: string;
441
+ provider: string;
442
+ baseUrl?: string | undefined;
443
+ apiKeyEnv?: string | undefined;
444
+ supportsJsonMode?: boolean | undefined;
445
+ } | undefined;
446
+ judge?: {
447
+ model: string;
448
+ provider: string;
449
+ baseUrl?: string | undefined;
450
+ apiKeyEnv?: string | undefined;
451
+ supportsJsonMode?: boolean | undefined;
452
+ } | undefined;
453
+ finalizer?: {
454
+ model: string;
455
+ provider: string;
456
+ baseUrl?: string | undefined;
457
+ apiKeyEnv?: string | undefined;
458
+ supportsJsonMode?: boolean | undefined;
459
+ } | undefined;
348
460
  }, {
349
- model: string;
350
- provider: string;
351
- baseUrl?: string | undefined;
352
- apiKeyEnv?: string | undefined;
353
- supportsJsonMode?: boolean | undefined;
354
- }>>>;
461
+ generator?: {
462
+ model: string;
463
+ provider: string;
464
+ baseUrl?: string | undefined;
465
+ apiKeyEnv?: string | undefined;
466
+ supportsJsonMode?: boolean | undefined;
467
+ } | undefined;
468
+ mutator?: {
469
+ model: string;
470
+ provider: string;
471
+ baseUrl?: string | undefined;
472
+ apiKeyEnv?: string | undefined;
473
+ supportsJsonMode?: boolean | undefined;
474
+ } | undefined;
475
+ judge?: {
476
+ model: string;
477
+ provider: string;
478
+ baseUrl?: string | undefined;
479
+ apiKeyEnv?: string | undefined;
480
+ supportsJsonMode?: boolean | undefined;
481
+ } | undefined;
482
+ finalizer?: {
483
+ model: string;
484
+ provider: string;
485
+ baseUrl?: string | undefined;
486
+ apiKeyEnv?: string | undefined;
487
+ supportsJsonMode?: boolean | undefined;
488
+ } | undefined;
489
+ }>>;
355
490
  }, "strip", z.ZodTypeAny, {
356
491
  provider: string;
357
492
  models: {
@@ -363,13 +498,43 @@ export declare const runConfigSchema: z.ZodObject<{
363
498
  baseUrl?: string | undefined;
364
499
  apiKeyEnv?: string | undefined;
365
500
  supportsJsonMode?: boolean | undefined;
366
- roleProviders?: Record<string, {
367
- model: string;
368
- provider: string;
369
- baseUrl?: string | undefined;
370
- apiKeyEnv?: string | undefined;
371
- supportsJsonMode?: boolean | undefined;
372
- }> | undefined;
501
+ routeFingerprint?: string | undefined;
502
+ samplingPreferences?: {
503
+ modelHints?: string[] | undefined;
504
+ costPriority?: number | undefined;
505
+ speedPriority?: number | undefined;
506
+ intelligencePriority?: number | undefined;
507
+ } | undefined;
508
+ roleProviders?: {
509
+ generator?: {
510
+ model: string;
511
+ provider: string;
512
+ baseUrl?: string | undefined;
513
+ apiKeyEnv?: string | undefined;
514
+ supportsJsonMode?: boolean | undefined;
515
+ } | undefined;
516
+ mutator?: {
517
+ model: string;
518
+ provider: string;
519
+ baseUrl?: string | undefined;
520
+ apiKeyEnv?: string | undefined;
521
+ supportsJsonMode?: boolean | undefined;
522
+ } | undefined;
523
+ judge?: {
524
+ model: string;
525
+ provider: string;
526
+ baseUrl?: string | undefined;
527
+ apiKeyEnv?: string | undefined;
528
+ supportsJsonMode?: boolean | undefined;
529
+ } | undefined;
530
+ finalizer?: {
531
+ model: string;
532
+ provider: string;
533
+ baseUrl?: string | undefined;
534
+ apiKeyEnv?: string | undefined;
535
+ supportsJsonMode?: boolean | undefined;
536
+ } | undefined;
537
+ } | undefined;
373
538
  }, {
374
539
  provider: string;
375
540
  models: {
@@ -381,18 +546,88 @@ export declare const runConfigSchema: z.ZodObject<{
381
546
  baseUrl?: string | undefined;
382
547
  apiKeyEnv?: string | undefined;
383
548
  supportsJsonMode?: boolean | undefined;
384
- roleProviders?: Record<string, {
385
- model: string;
386
- provider: string;
387
- baseUrl?: string | undefined;
388
- apiKeyEnv?: string | undefined;
389
- supportsJsonMode?: boolean | undefined;
390
- }> | undefined;
549
+ routeFingerprint?: string | undefined;
550
+ samplingPreferences?: {
551
+ modelHints?: string[] | undefined;
552
+ costPriority?: number | undefined;
553
+ speedPriority?: number | undefined;
554
+ intelligencePriority?: number | undefined;
555
+ } | undefined;
556
+ roleProviders?: {
557
+ generator?: {
558
+ model: string;
559
+ provider: string;
560
+ baseUrl?: string | undefined;
561
+ apiKeyEnv?: string | undefined;
562
+ supportsJsonMode?: boolean | undefined;
563
+ } | undefined;
564
+ mutator?: {
565
+ model: string;
566
+ provider: string;
567
+ baseUrl?: string | undefined;
568
+ apiKeyEnv?: string | undefined;
569
+ supportsJsonMode?: boolean | undefined;
570
+ } | undefined;
571
+ judge?: {
572
+ model: string;
573
+ provider: string;
574
+ baseUrl?: string | undefined;
575
+ apiKeyEnv?: string | undefined;
576
+ supportsJsonMode?: boolean | undefined;
577
+ } | undefined;
578
+ finalizer?: {
579
+ model: string;
580
+ provider: string;
581
+ baseUrl?: string | undefined;
582
+ apiKeyEnv?: string | undefined;
583
+ supportsJsonMode?: boolean | undefined;
584
+ } | undefined;
585
+ } | undefined;
391
586
  }>>;
392
587
  generatorModel: z.ZodString;
393
588
  mutatorModel: z.ZodString;
394
589
  judgeModel: z.ZodString;
395
590
  finalizerModel: z.ZodOptional<z.ZodString>;
591
+ modelOutputTokens: z.ZodOptional<z.ZodObject<{
592
+ generation: z.ZodOptional<z.ZodNumber>;
593
+ mutation: z.ZodOptional<z.ZodNumber>;
594
+ judge: z.ZodOptional<z.ZodNumber>;
595
+ finalizer: z.ZodOptional<z.ZodNumber>;
596
+ }, "strict", z.ZodTypeAny, {
597
+ generation?: number | undefined;
598
+ mutation?: number | undefined;
599
+ judge?: number | undefined;
600
+ finalizer?: number | undefined;
601
+ }, {
602
+ generation?: number | undefined;
603
+ mutation?: number | undefined;
604
+ judge?: number | undefined;
605
+ finalizer?: number | undefined;
606
+ }>>;
607
+ critiqueLimits: z.ZodOptional<z.ZodObject<{
608
+ aggregateChars: z.ZodOptional<z.ZodNumber>;
609
+ }, "strict", z.ZodTypeAny, {
610
+ aggregateChars?: number | undefined;
611
+ }, {
612
+ aggregateChars?: number | undefined;
613
+ }>>;
614
+ rank: z.ZodOptional<z.ZodObject<{
615
+ mode: z.ZodEnum<["all-pairs", "k-regular"]>;
616
+ k: z.ZodOptional<z.ZodNumber>;
617
+ seed: z.ZodOptional<z.ZodNumber>;
618
+ maxCalls: z.ZodOptional<z.ZodNumber>;
619
+ }, "strict", z.ZodTypeAny, {
620
+ mode: "all-pairs" | "k-regular";
621
+ k?: number | undefined;
622
+ seed?: number | undefined;
623
+ maxCalls?: number | undefined;
624
+ }, {
625
+ mode: "all-pairs" | "k-regular";
626
+ k?: number | undefined;
627
+ seed?: number | undefined;
628
+ maxCalls?: number | undefined;
629
+ }>>;
630
+ providerMaxConcurrency: z.ZodOptional<z.ZodNumber>;
396
631
  concurrency: z.ZodObject<{
397
632
  generate: z.ZodNumber;
398
633
  judge: z.ZodNumber;
@@ -583,15 +818,61 @@ export declare const runConfigSchema: z.ZodObject<{
583
818
  baseUrl?: string | undefined;
584
819
  apiKeyEnv?: string | undefined;
585
820
  supportsJsonMode?: boolean | undefined;
586
- roleProviders?: Record<string, {
587
- model: string;
588
- provider: string;
589
- baseUrl?: string | undefined;
590
- apiKeyEnv?: string | undefined;
591
- supportsJsonMode?: boolean | undefined;
592
- }> | undefined;
821
+ routeFingerprint?: string | undefined;
822
+ samplingPreferences?: {
823
+ modelHints?: string[] | undefined;
824
+ costPriority?: number | undefined;
825
+ speedPriority?: number | undefined;
826
+ intelligencePriority?: number | undefined;
827
+ } | undefined;
828
+ roleProviders?: {
829
+ generator?: {
830
+ model: string;
831
+ provider: string;
832
+ baseUrl?: string | undefined;
833
+ apiKeyEnv?: string | undefined;
834
+ supportsJsonMode?: boolean | undefined;
835
+ } | undefined;
836
+ mutator?: {
837
+ model: string;
838
+ provider: string;
839
+ baseUrl?: string | undefined;
840
+ apiKeyEnv?: string | undefined;
841
+ supportsJsonMode?: boolean | undefined;
842
+ } | undefined;
843
+ judge?: {
844
+ model: string;
845
+ provider: string;
846
+ baseUrl?: string | undefined;
847
+ apiKeyEnv?: string | undefined;
848
+ supportsJsonMode?: boolean | undefined;
849
+ } | undefined;
850
+ finalizer?: {
851
+ model: string;
852
+ provider: string;
853
+ baseUrl?: string | undefined;
854
+ apiKeyEnv?: string | undefined;
855
+ supportsJsonMode?: boolean | undefined;
856
+ } | undefined;
857
+ } | undefined;
593
858
  } | undefined;
594
859
  finalizerModel?: string | undefined;
860
+ modelOutputTokens?: {
861
+ generation?: number | undefined;
862
+ mutation?: number | undefined;
863
+ judge?: number | undefined;
864
+ finalizer?: number | undefined;
865
+ } | undefined;
866
+ critiqueLimits?: {
867
+ aggregateChars?: number | undefined;
868
+ } | undefined;
869
+ rank?: {
870
+ mode: "all-pairs" | "k-regular";
871
+ k?: number | undefined;
872
+ seed?: number | undefined;
873
+ maxCalls?: number | undefined;
874
+ } | undefined;
875
+ providerMaxConcurrency?: number | undefined;
595
876
  budget?: {
596
877
  maxCalls?: number | undefined;
597
878
  maxInputTokens?: number | undefined;
@@ -670,15 +951,61 @@ export declare const runConfigSchema: z.ZodObject<{
670
951
  baseUrl?: string | undefined;
671
952
  apiKeyEnv?: string | undefined;
672
953
  supportsJsonMode?: boolean | undefined;
673
- roleProviders?: Record<string, {
674
- model: string;
675
- provider: string;
676
- baseUrl?: string | undefined;
677
- apiKeyEnv?: string | undefined;
678
- supportsJsonMode?: boolean | undefined;
679
- }> | undefined;
954
+ routeFingerprint?: string | undefined;
955
+ samplingPreferences?: {
956
+ modelHints?: string[] | undefined;
957
+ costPriority?: number | undefined;
958
+ speedPriority?: number | undefined;
959
+ intelligencePriority?: number | undefined;
960
+ } | undefined;
961
+ roleProviders?: {
962
+ generator?: {
963
+ model: string;
964
+ provider: string;
965
+ baseUrl?: string | undefined;
966
+ apiKeyEnv?: string | undefined;
967
+ supportsJsonMode?: boolean | undefined;
968
+ } | undefined;
969
+ mutator?: {
970
+ model: string;
971
+ provider: string;
972
+ baseUrl?: string | undefined;
973
+ apiKeyEnv?: string | undefined;
974
+ supportsJsonMode?: boolean | undefined;
975
+ } | undefined;
976
+ judge?: {
977
+ model: string;
978
+ provider: string;
979
+ baseUrl?: string | undefined;
980
+ apiKeyEnv?: string | undefined;
981
+ supportsJsonMode?: boolean | undefined;
982
+ } | undefined;
983
+ finalizer?: {
984
+ model: string;
985
+ provider: string;
986
+ baseUrl?: string | undefined;
987
+ apiKeyEnv?: string | undefined;
988
+ supportsJsonMode?: boolean | undefined;
989
+ } | undefined;
990
+ } | undefined;
680
991
  } | undefined;
681
992
  finalizerModel?: string | undefined;
993
+ modelOutputTokens?: {
994
+ generation?: number | undefined;
995
+ mutation?: number | undefined;
996
+ judge?: number | undefined;
997
+ finalizer?: number | undefined;
998
+ } | undefined;
999
+ critiqueLimits?: {
1000
+ aggregateChars?: number | undefined;
1001
+ } | undefined;
1002
+ rank?: {
1003
+ mode: "all-pairs" | "k-regular";
1004
+ k?: number | undefined;
1005
+ seed?: number | undefined;
1006
+ maxCalls?: number | undefined;
1007
+ } | undefined;
1008
+ providerMaxConcurrency?: number | undefined;
682
1009
  budget?: {
683
1010
  maxCalls?: number | undefined;
684
1011
  maxInputTokens?: number | undefined;
@@ -702,6 +1029,21 @@ export declare const runConfigSchema: z.ZodObject<{
702
1029
  } | undefined;
703
1030
  }>;
704
1031
  export type RunConfig = z.infer<typeof runConfigSchema>;
1032
+ export interface ModelOutputTokens {
1033
+ generation: number;
1034
+ mutation: number;
1035
+ judge: number;
1036
+ finalizer: number;
1037
+ }
1038
+ export interface CritiqueLimits {
1039
+ aggregateChars: number;
1040
+ }
1041
+ export declare const defaultModelOutputTokens: Readonly<ModelOutputTokens>;
1042
+ export declare const defaultCritiqueLimits: Readonly<CritiqueLimits>;
1043
+ export declare function resolveRunConfigDefaults(config: RunConfig): RunConfig & {
1044
+ modelOutputTokens: ModelOutputTokens;
1045
+ critiqueLimits: CritiqueLimits;
1046
+ };
705
1047
  export declare const phaseNameSchema: z.ZodEnum<["initial_generation", "generation_judging", "generation_mutation", "final_judging", "finalizing"]>;
706
1048
  export type PhaseName = z.infer<typeof phaseNameSchema>;
707
1049
  export declare const phaseCompletedEventSchema: z.ZodObject<{
@@ -743,6 +1085,8 @@ export interface GenerateInput {
743
1085
  temperature: number;
744
1086
  candidateIndex?: number;
745
1087
  prompt?: PromptMessages;
1088
+ signal?: AbortSignal;
1089
+ maxOutputTokens?: number;
746
1090
  }
747
1091
  export interface CompareInput {
748
1092
  task: string;
@@ -752,6 +1096,8 @@ export interface CompareInput {
752
1096
  candidateA: Candidate;
753
1097
  candidateB: Candidate;
754
1098
  prompt?: PromptMessages;
1099
+ signal?: AbortSignal;
1100
+ maxOutputTokens?: number;
755
1101
  }
756
1102
  export interface MutateInput {
757
1103
  task: string;
@@ -761,6 +1107,8 @@ export interface MutateInput {
761
1107
  candidate: Candidate;
762
1108
  critique: string;
763
1109
  prompt?: PromptMessages;
1110
+ signal?: AbortSignal;
1111
+ maxOutputTokens?: number;
764
1112
  }
765
1113
  export interface FinalizeInput {
766
1114
  task: string;
@@ -768,6 +1116,8 @@ export interface FinalizeInput {
768
1116
  model: string;
769
1117
  candidate: Candidate;
770
1118
  prompt?: PromptMessages;
1119
+ signal?: AbortSignal;
1120
+ maxOutputTokens?: number;
771
1121
  }
772
1122
  export interface PromptMessages {
773
1123
  system: string;
package/dist/schemas.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { z } from "zod";
2
+ import { maxPhaseConcurrency } from "./phaseRunner.js";
2
3
  export const candidateStatusSchema = z.enum(["generated", "mutated", "elite", "discarded"]);
3
4
  export const profileSchema = z.object({
4
5
  n: z.number().int().min(2),
@@ -59,22 +60,44 @@ const providerReplayRoleSchema = z.object({
59
60
  model: z.string().min(1),
60
61
  supportsJsonMode: z.boolean().optional()
61
62
  });
63
+ const samplingPreferencesSchema = z.object({
64
+ modelHints: z.array(z.string().min(1)).optional(),
65
+ costPriority: z.number().min(0).max(1).optional(),
66
+ speedPriority: z.number().min(0).max(1).optional(),
67
+ intelligencePriority: z.number().min(0).max(1).optional()
68
+ });
62
69
  const providerReplaySchema = z.object({
63
70
  provider: z.string().min(1),
64
71
  baseUrl: z.string().optional(),
65
72
  apiKeyEnv: z.string().optional(),
66
73
  supportsJsonMode: z.boolean().optional(),
74
+ routeFingerprint: z.string().regex(/^sha256:[0-9a-f]{64}$/).optional(),
75
+ samplingPreferences: samplingPreferencesSchema.optional(),
67
76
  models: z.object({
68
77
  generator: z.string().min(1),
69
78
  mutator: z.string().min(1),
70
79
  judge: z.string().min(1),
71
80
  finalizer: z.string().optional()
72
81
  }),
73
- roleProviders: z.record(providerReplayRoleSchema).optional()
82
+ roleProviders: z
83
+ .object({
84
+ generator: providerReplayRoleSchema.optional(),
85
+ mutator: providerReplayRoleSchema.optional(),
86
+ judge: providerReplayRoleSchema.optional(),
87
+ finalizer: providerReplayRoleSchema.optional()
88
+ })
89
+ .strict()
90
+ .optional()
74
91
  });
92
+ export const runIdSchema = z
93
+ .string()
94
+ .min(1)
95
+ .max(128)
96
+ .regex(/^[A-Za-z0-9][A-Za-z0-9._-]*$/, "Run IDs may contain only letters, digits, dot, underscore, and hyphen.")
97
+ .refine((value) => value !== "." && value !== "..", "Run ID cannot be a path segment.");
75
98
  export const runConfigSchema = z.object({
76
99
  version: z.string().optional(),
77
- runId: z.string().optional(),
100
+ runId: runIdSchema.optional(),
78
101
  task: z.string().min(1),
79
102
  rubric: z.string().optional(),
80
103
  promptStyle: z.enum(["general", "paper-programming"]).default("general"),
@@ -88,10 +111,35 @@ export const runConfigSchema = z.object({
88
111
  mutatorModel: z.string().min(1),
89
112
  judgeModel: z.string().min(1),
90
113
  finalizerModel: z.string().optional(),
114
+ modelOutputTokens: z
115
+ .object({
116
+ generation: z.number().int().min(1).optional(),
117
+ mutation: z.number().int().min(1).optional(),
118
+ judge: z.number().int().min(1).optional(),
119
+ finalizer: z.number().int().min(1).optional()
120
+ })
121
+ .strict()
122
+ .optional(),
123
+ critiqueLimits: z
124
+ .object({
125
+ aggregateChars: z.number().int().min(256).optional()
126
+ })
127
+ .strict()
128
+ .optional(),
129
+ rank: z
130
+ .object({
131
+ mode: z.enum(["all-pairs", "k-regular"]),
132
+ k: z.number().int().min(1).optional(),
133
+ seed: z.number().int().optional(),
134
+ maxCalls: z.number().int().min(1).optional()
135
+ })
136
+ .strict()
137
+ .optional(),
138
+ providerMaxConcurrency: z.number().int().min(1).max(maxPhaseConcurrency).optional(),
91
139
  concurrency: z.object({
92
- generate: z.number().int().min(1),
93
- judge: z.number().int().min(1),
94
- mutate: z.number().int().min(1)
140
+ generate: z.number().int().min(1).max(maxPhaseConcurrency),
141
+ judge: z.number().int().min(1).max(maxPhaseConcurrency),
142
+ mutate: z.number().int().min(1).max(maxPhaseConcurrency)
95
143
  }),
96
144
  retry: z.object({
97
145
  httpRetries: z.number().int().min(0).default(12),
@@ -139,6 +187,20 @@ export const runConfigSchema = z.object({
139
187
  })
140
188
  .default({ includeRawModelOutputs: false, includePrompts: false })
141
189
  });
190
+ export const defaultModelOutputTokens = Object.freeze({
191
+ generation: 4_096,
192
+ mutation: 4_096,
193
+ judge: 1_024,
194
+ finalizer: 4_096
195
+ });
196
+ export const defaultCritiqueLimits = Object.freeze({ aggregateChars: 16_000 });
197
+ export function resolveRunConfigDefaults(config) {
198
+ return {
199
+ ...config,
200
+ modelOutputTokens: { ...defaultModelOutputTokens, ...config.modelOutputTokens },
201
+ critiqueLimits: { ...defaultCritiqueLimits, ...config.critiqueLimits }
202
+ };
203
+ }
142
204
  export const phaseNameSchema = z.enum([
143
205
  "initial_generation",
144
206
  "generation_judging",