@llm4ts/flow 2.5.0 → 2.7.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 (82) hide show
  1. package/dist/Classified.d.ts +2 -0
  2. package/dist/Classified.d.ts.map +1 -1
  3. package/dist/Classified.js +4 -0
  4. package/dist/Classified.js.map +1 -1
  5. package/dist/CostReport.d.ts +110 -0
  6. package/dist/CostReport.d.ts.map +1 -0
  7. package/dist/CostReport.js +313 -0
  8. package/dist/CostReport.js.map +1 -0
  9. package/dist/EstimatedUsage.d.ts.map +1 -1
  10. package/dist/EstimatedUsage.js +33 -1
  11. package/dist/EstimatedUsage.js.map +1 -1
  12. package/dist/Flow.d.ts +14 -0
  13. package/dist/Flow.d.ts.map +1 -1
  14. package/dist/Flow.js +45 -2
  15. package/dist/Flow.js.map +1 -1
  16. package/dist/FlowContext.d.ts +7 -0
  17. package/dist/FlowContext.d.ts.map +1 -1
  18. package/dist/FlowContext.js.map +1 -1
  19. package/dist/FlowEvents.d.ts +44 -1
  20. package/dist/FlowEvents.d.ts.map +1 -1
  21. package/dist/FlowEvents.js +35 -0
  22. package/dist/FlowEvents.js.map +1 -1
  23. package/dist/GitTool.d.ts +7 -0
  24. package/dist/GitTool.d.ts.map +1 -1
  25. package/dist/GitTool.js +15 -1
  26. package/dist/GitTool.js.map +1 -1
  27. package/dist/Judgment.d.ts +88 -0
  28. package/dist/Judgment.d.ts.map +1 -0
  29. package/dist/Judgment.js +281 -0
  30. package/dist/Judgment.js.map +1 -0
  31. package/dist/JudgmentDataset.d.ts +79 -0
  32. package/dist/JudgmentDataset.d.ts.map +1 -0
  33. package/dist/JudgmentDataset.js +164 -0
  34. package/dist/JudgmentDataset.js.map +1 -0
  35. package/dist/JudgmentEval.d.ts +143 -0
  36. package/dist/JudgmentEval.d.ts.map +1 -0
  37. package/dist/JudgmentEval.js +242 -0
  38. package/dist/JudgmentEval.js.map +1 -0
  39. package/dist/JudgmentLog.d.ts +46 -0
  40. package/dist/JudgmentLog.d.ts.map +1 -0
  41. package/dist/JudgmentLog.js +62 -0
  42. package/dist/JudgmentLog.js.map +1 -0
  43. package/dist/JudgmentTypes.d.ts +13 -0
  44. package/dist/JudgmentTypes.d.ts.map +1 -0
  45. package/dist/JudgmentTypes.js +11 -0
  46. package/dist/JudgmentTypes.js.map +1 -0
  47. package/dist/ProgramJudge.d.ts +15 -2
  48. package/dist/ProgramJudge.d.ts.map +1 -1
  49. package/dist/ProgramJudge.js +58 -3
  50. package/dist/ProgramJudge.js.map +1 -1
  51. package/dist/Replay.d.ts.map +1 -1
  52. package/dist/Replay.js +9 -4
  53. package/dist/Replay.js.map +1 -1
  54. package/dist/Review.d.ts +35 -0
  55. package/dist/Review.d.ts.map +1 -1
  56. package/dist/Review.js +92 -13
  57. package/dist/Review.js.map +1 -1
  58. package/dist/Reviewer.d.ts +8 -0
  59. package/dist/Reviewer.d.ts.map +1 -1
  60. package/dist/Reviewer.js +12 -1
  61. package/dist/Reviewer.js.map +1 -1
  62. package/dist/TransientRetry.d.ts.map +1 -1
  63. package/dist/TransientRetry.js +1 -0
  64. package/dist/TransientRetry.js.map +1 -1
  65. package/package.json +8 -3
  66. package/src/Classified.ts +5 -0
  67. package/src/CostReport.ts +402 -0
  68. package/src/EstimatedUsage.ts +81 -10
  69. package/src/Flow.ts +77 -2
  70. package/src/FlowContext.ts +7 -0
  71. package/src/FlowEvents.ts +42 -0
  72. package/src/GitTool.ts +19 -1
  73. package/src/Judgment.ts +418 -0
  74. package/src/JudgmentDataset.ts +254 -0
  75. package/src/JudgmentEval.ts +306 -0
  76. package/src/JudgmentLog.ts +96 -0
  77. package/src/JudgmentTypes.ts +15 -0
  78. package/src/ProgramJudge.ts +89 -4
  79. package/src/Replay.ts +23 -17
  80. package/src/Review.ts +163 -13
  81. package/src/Reviewer.ts +15 -1
  82. package/src/TransientRetry.ts +1 -0
@@ -9,6 +9,8 @@ export declare class Classified<A> {
9
9
  static of<A>(value: A): Classified<A>;
10
10
  map<B>(transform: (value: A) => B): Classified<B>;
11
11
  declassify(label: string): Effect.Effect<A, FlowCapabilityDenied, FlowEvents>;
12
+ /** JSON boundaries must use the same sealed representation as text boundaries. */
13
+ toJSON(): string;
12
14
  toString(): string;
13
15
  }
14
16
  //# sourceMappingURL=Classified.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Classified.d.ts","sourceRoot":"","sources":["../src/Classified.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAgB,KAAK,UAAU,EAAyB,MAAM,yBAAyB,CAAA;AAC9F,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,UAAU,EAA0C,MAAM,iBAAiB,CAAA;AAiBpF,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAC7B,YAAY,UAAU,EACtB,WAAW,MAAM,EACjB,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,oBAAoB,EAAE,CAAC,GAAG,UAAU,CAgBxD,CAAA;AAEJ,qBAAa,UAAU,CAAC,CAAC;IACH,OAAO,CAAC,QAAQ,CAAC,KAAK;IAA1C,OAAO;IAEP,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IAIrC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IAIjD,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,oBAAoB,EAAE,UAAU,CAAC;IAU7E,QAAQ,IAAI,MAAM;CAGnB"}
1
+ {"version":3,"file":"Classified.d.ts","sourceRoot":"","sources":["../src/Classified.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAgB,KAAK,UAAU,EAAyB,MAAM,yBAAyB,CAAA;AAC9F,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,UAAU,EAA0C,MAAM,iBAAiB,CAAA;AAiBpF,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAC7B,YAAY,UAAU,EACtB,WAAW,MAAM,EACjB,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,oBAAoB,EAAE,CAAC,GAAG,UAAU,CAgBxD,CAAA;AAEJ,qBAAa,UAAU,CAAC,CAAC;IACH,OAAO,CAAC,QAAQ,CAAC,KAAK;IAA1C,OAAO;IAEP,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IAIrC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IAIjD,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,oBAAoB,EAAE,UAAU,CAAC;IAU7E,kFAAkF;IAClF,MAAM,IAAI,MAAM;IAIhB,QAAQ,IAAI,MAAM;CAGnB"}
@@ -41,6 +41,10 @@ export class Classified {
41
41
  declassify(label) {
42
42
  return guarded(Capabilities.Declassify, `declassify ${label}`, Effect.flatMap(FlowEvents, (events) => Effect.as(events.publish(FlowEventsValues.Declassified(label)), this.value)));
43
43
  }
44
+ /** JSON boundaries must use the same sealed representation as text boundaries. */
45
+ toJSON() {
46
+ return this.toString();
47
+ }
44
48
  toString() {
45
49
  return "Classified(…)";
46
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Classified.js","sourceRoot":"","sources":["../src/Classified.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,YAAY,EAAmB,MAAM,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC9F,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAwB,MAAM,iBAAiB,CAAA;AAEpF,MAAM,cAAc,GAAG,CAAC,UAAsB,EAAU,EAAE,CACxD,UAAU,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAA;AAE9E,MAAM,cAAc,GAAG,CAAC,UAAsB,EAAW,EAAE;IACzD,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,SAAS,CAAC;QACf,KAAK,SAAS,CAAC;QACf,KAAK,UAAU,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,IAAI,CAAA;QACb;YACE,OAAO,KAAK,CAAA;IAChB,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,UAAsB,EACtB,SAAiB,EACjB,IAA4B,EACgC,EAAE,CAC9D,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAoB,KAAK,CAAC,CAAC,UAAU,CAAA;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,aAAa,CAAA;IACnC,MAAM,IAAI,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;IAEvC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAA;QACzE,OAAO,KAAK,CAAC,CAAC,IAAI,oBAAoB,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAA;IACnE,CAAC;IAED,IAAI,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAA;IACzE,CAAC;IAED,OAAO,KAAK,CAAC,CAAC,IAAI,CAAA;AACpB,CAAC,CAAC,CAAA;AAEJ,MAAM,OAAO,UAAU;IACgB;IAArC,YAAqC,KAAQ;QAAR,UAAK,GAAL,KAAK,CAAG;IAAG,CAAC;IAEjD,MAAM,CAAC,EAAE,CAAI,KAAQ;QACnB,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,CAAA;IAC9B,CAAC;IAED,GAAG,CAAI,SAA0B;QAC/B,OAAO,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IAC9C,CAAC;IAED,UAAU,CAAC,KAAa;QACtB,OAAO,OAAO,CACZ,YAAY,CAAC,UAAU,EACvB,cAAc,KAAK,EAAE,EACrB,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CACpC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAC5E,CACF,CAAA;IACH,CAAC;IAED,QAAQ;QACN,OAAO,eAAe,CAAA;IACxB,CAAC;CACF"}
1
+ {"version":3,"file":"Classified.js","sourceRoot":"","sources":["../src/Classified.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,YAAY,EAAmB,MAAM,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC9F,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAwB,MAAM,iBAAiB,CAAA;AAEpF,MAAM,cAAc,GAAG,CAAC,UAAsB,EAAU,EAAE,CACxD,UAAU,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAA;AAE9E,MAAM,cAAc,GAAG,CAAC,UAAsB,EAAW,EAAE;IACzD,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,SAAS,CAAC;QACf,KAAK,SAAS,CAAC;QACf,KAAK,UAAU,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,IAAI,CAAA;QACb;YACE,OAAO,KAAK,CAAA;IAChB,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,UAAsB,EACtB,SAAiB,EACjB,IAA4B,EACgC,EAAE,CAC9D,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAoB,KAAK,CAAC,CAAC,UAAU,CAAA;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,aAAa,CAAA;IACnC,MAAM,IAAI,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;IAEvC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAA;QACzE,OAAO,KAAK,CAAC,CAAC,IAAI,oBAAoB,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAA;IACnE,CAAC;IAED,IAAI,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAA;IACzE,CAAC;IAED,OAAO,KAAK,CAAC,CAAC,IAAI,CAAA;AACpB,CAAC,CAAC,CAAA;AAEJ,MAAM,OAAO,UAAU;IACgB;IAArC,YAAqC,KAAQ;QAAR,UAAK,GAAL,KAAK,CAAG;IAAG,CAAC;IAEjD,MAAM,CAAC,EAAE,CAAI,KAAQ;QACnB,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,CAAA;IAC9B,CAAC;IAED,GAAG,CAAI,SAA0B;QAC/B,OAAO,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IAC9C,CAAC;IAED,UAAU,CAAC,KAAa;QACtB,OAAO,OAAO,CACZ,YAAY,CAAC,UAAU,EACvB,cAAc,KAAK,EAAE,EACrB,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CACpC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAC5E,CACF,CAAA;IACH,CAAC;IAED,kFAAkF;IAClF,MAAM;QACJ,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;IACxB,CAAC;IAED,QAAQ;QACN,OAAO,eAAe,CAAA;IACxB,CAAC;CACF"}
@@ -0,0 +1,110 @@
1
+ import * as DateTime from "effect/DateTime";
2
+ import * as Schema from "effect/Schema";
3
+ import type { TraceLine } from "./FlowRecorder.ts";
4
+ /**
5
+ * Cross-run usage report for budgeting.
6
+ *
7
+ * A run's cost summary (`CostTracker`) answers "what did this run cost"; this
8
+ * module answers "what do my runs cost per day, per hour, and per run" from
9
+ * the `TokensUsed` lines every trace already records. Measured usage (a
10
+ * backend's own token counts) and estimated usage (`EstimatedUsage`'s
11
+ * character-count fallback, labelled `estimated:<model>`) are kept in separate
12
+ * columns so a budget never mistakes one for the other.
13
+ */
14
+ export declare const UnknownModel = "(unknown)";
15
+ declare const UsageSample_base: Schema.Class<UsageSample, Schema.Struct<{
16
+ /** Epoch milliseconds of the token report. */
17
+ readonly at: Schema.Number;
18
+ readonly runId: Schema.String;
19
+ readonly agent: Schema.String;
20
+ readonly model: Schema.String;
21
+ readonly prompt: Schema.Int;
22
+ readonly completion: Schema.Int;
23
+ readonly total: Schema.Int;
24
+ readonly cached: Schema.optionalKey<Schema.Int>;
25
+ readonly costUsd: Schema.optionalKey<Schema.Number>;
26
+ readonly estimated: Schema.Boolean;
27
+ }>, {}>;
28
+ export declare class UsageSample extends UsageSample_base {
29
+ }
30
+ declare const UsageTotals_base: Schema.Class<UsageTotals, Schema.Struct<{
31
+ readonly requests: Schema.Int;
32
+ readonly prompt: Schema.Int;
33
+ readonly completion: Schema.Int;
34
+ readonly total: Schema.Int;
35
+ readonly cached: Schema.optionalKey<Schema.Int>;
36
+ readonly costUsd: Schema.optionalKey<Schema.Number>;
37
+ }>, {}>;
38
+ export declare class UsageTotals extends UsageTotals_base {
39
+ }
40
+ declare const UsageBucket_base: Schema.Class<UsageBucket, Schema.Struct<{
41
+ /** `YYYY-MM-DD` for a day, `YYYY-MM-DD HH:00` for an hour, in the report's zone. */
42
+ readonly key: Schema.String;
43
+ readonly runs: Schema.Int;
44
+ readonly measured: typeof UsageTotals;
45
+ readonly estimated: typeof UsageTotals;
46
+ }>, {}>;
47
+ export declare class UsageBucket extends UsageBucket_base {
48
+ }
49
+ declare const ModelUsage_base: Schema.Class<ModelUsage, Schema.Struct<{
50
+ readonly model: Schema.String;
51
+ readonly estimated: Schema.Boolean;
52
+ readonly totals: typeof UsageTotals;
53
+ }>, {}>;
54
+ export declare class ModelUsage extends ModelUsage_base {
55
+ }
56
+ declare const UsageAverages_base: Schema.Class<UsageAverages, Schema.Struct<{
57
+ readonly activeDays: Schema.Int;
58
+ readonly calendarDays: Schema.Int;
59
+ readonly activeHours: Schema.Int;
60
+ readonly tokensPerActiveDay: Schema.Int;
61
+ readonly tokensPerCalendarDay: Schema.Int;
62
+ readonly tokensPerActiveHour: Schema.Int;
63
+ readonly tokensPerRun: Schema.Int;
64
+ readonly costUsdPerActiveDay: Schema.optionalKey<Schema.Number>;
65
+ readonly costUsdPerCalendarDay: Schema.optionalKey<Schema.Number>;
66
+ readonly costUsdPerActiveHour: Schema.optionalKey<Schema.Number>;
67
+ readonly costUsdPerRun: Schema.optionalKey<Schema.Number>;
68
+ readonly peakDay: Schema.optionalKey<Schema.String>;
69
+ readonly peakHour: Schema.optionalKey<Schema.String>;
70
+ }>, {}>;
71
+ export declare class UsageAverages extends UsageAverages_base {
72
+ }
73
+ declare const UsageProjection_base: Schema.Class<UsageProjection, Schema.Struct<{
74
+ readonly runsPerDay: Schema.Number;
75
+ readonly tokensPerDay: Schema.Int;
76
+ readonly costUsdPerDay: Schema.optionalKey<Schema.Number>;
77
+ }>, {}>;
78
+ export declare class UsageProjection extends UsageProjection_base {
79
+ }
80
+ declare const CostReport_base: Schema.Class<CostReport, Schema.Struct<{
81
+ readonly schemaVersion: Schema.Int;
82
+ readonly timeZone: Schema.String;
83
+ readonly pricesAsOf: Schema.String;
84
+ readonly from: Schema.optionalKey<Schema.String>;
85
+ readonly to: Schema.optionalKey<Schema.String>;
86
+ readonly runs: Schema.Int;
87
+ readonly requests: Schema.Int;
88
+ readonly measured: typeof UsageTotals;
89
+ readonly estimated: typeof UsageTotals;
90
+ readonly averages: typeof UsageAverages;
91
+ readonly projection: Schema.optionalKey<typeof UsageProjection>;
92
+ readonly byDay: Schema.$Array<typeof UsageBucket>;
93
+ readonly byHour: Schema.$Array<typeof UsageBucket>;
94
+ readonly byModel: Schema.$Array<typeof ModelUsage>;
95
+ }>, {}>;
96
+ export declare class CostReport extends CostReport_base {
97
+ }
98
+ export declare const CurrentCostReportSchema = 1;
99
+ /** The token reports of one trace, in trace order; malformed lines are skipped. */
100
+ export declare const usageSamplesFromTrace: (lines: ReadonlyArray<TraceLine>) => ReadonlyArray<UsageSample>;
101
+ export interface CostReportOptions {
102
+ /** Zone the day and hour buckets are cut in. Default UTC. */
103
+ readonly timeZone?: DateTime.TimeZone;
104
+ /** Assumed daily run count for the projection line; none when absent. */
105
+ readonly runsPerDay?: number;
106
+ }
107
+ export declare const buildCostReport: (samples: ReadonlyArray<UsageSample>, options?: CostReportOptions) => CostReport;
108
+ export declare const renderCostReport: (report: CostReport) => string;
109
+ export {};
110
+ //# sourceMappingURL=CostReport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CostReport.d.ts","sourceRoot":"","sources":["../src/CostReport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAE3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAIvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAGlD;;;;;;;;;GASG;AAEH,eAAO,MAAM,YAAY,cAAc,CAAA;;IAGrC,8CAA8C;;;;;;;;;;;;AADhD,qBAAa,WAAY,SAAQ,gBAY/B;CAAG;;;;;;;;;AAEL,qBAAa,WAAY,SAAQ,gBAO/B;CAAG;;IAGH,oFAAoF;;;;;;AADtF,qBAAa,WAAY,SAAQ,gBAM/B;CAAG;;;;;;AAEL,qBAAa,UAAW,SAAQ,eAI9B;CAAG;;;;;;;;;;;;;;;;AAEL,qBAAa,aAAc,SAAQ,kBAcjC;CAAG;;;;;;AAEL,qBAAa,eAAgB,SAAQ,oBAInC;CAAG;;;;;;;;;;;;;;;;;AAEL,qBAAa,UAAW,SAAQ,eAe9B;CAAG;AAEL,eAAO,MAAM,uBAAuB,IAAI,CAAA;AAUxC,mFAAmF;AACnF,eAAO,MAAM,qBAAqB,GAChC,OAAO,aAAa,CAAC,SAAS,CAAC,KAC9B,aAAa,CAAC,WAAW,CA8BxB,CAAA;AA8FJ,MAAM,WAAW,iBAAiB;IAChC,6DAA6D;IAC7D,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAA;IACrC,yEAAyE;IACzE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED,eAAO,MAAM,eAAe,GAC1B,SAAS,aAAa,CAAC,WAAW,CAAC,EACnC,UAAS,iBAAsB,KAC9B,UAgFF,CAAA;AAqBD,eAAO,MAAM,gBAAgB,GAAI,QAAQ,UAAU,KAAG,MAuDrD,CAAA"}
@@ -0,0 +1,313 @@
1
+ import * as DateTime from "effect/DateTime";
2
+ import * as Option from "effect/Option";
3
+ import * as Schema from "effect/Schema";
4
+ import { isEstimatedModel } from "./EstimatedUsage.js";
5
+ import { TokensUsed } from "./FlowEvents.js";
6
+ import { estimateCostUsd, PricesAsOf } from "./PriceList.js";
7
+ /**
8
+ * Cross-run usage report for budgeting.
9
+ *
10
+ * A run's cost summary (`CostTracker`) answers "what did this run cost"; this
11
+ * module answers "what do my runs cost per day, per hour, and per run" from
12
+ * the `TokensUsed` lines every trace already records. Measured usage (a
13
+ * backend's own token counts) and estimated usage (`EstimatedUsage`'s
14
+ * character-count fallback, labelled `estimated:<model>`) are kept in separate
15
+ * columns so a budget never mistakes one for the other.
16
+ */
17
+ export const UnknownModel = "(unknown)";
18
+ export class UsageSample extends Schema.Class("UsageSample")({
19
+ /** Epoch milliseconds of the token report. */
20
+ at: Schema.Number,
21
+ runId: Schema.String,
22
+ agent: Schema.String,
23
+ model: Schema.String,
24
+ prompt: Schema.Int,
25
+ completion: Schema.Int,
26
+ total: Schema.Int,
27
+ cached: Schema.optionalKey(Schema.Int),
28
+ costUsd: Schema.optionalKey(Schema.Number),
29
+ estimated: Schema.Boolean
30
+ }) {
31
+ }
32
+ export class UsageTotals extends Schema.Class("UsageTotals")({
33
+ requests: Schema.Int,
34
+ prompt: Schema.Int,
35
+ completion: Schema.Int,
36
+ total: Schema.Int,
37
+ cached: Schema.optionalKey(Schema.Int),
38
+ costUsd: Schema.optionalKey(Schema.Number)
39
+ }) {
40
+ }
41
+ export class UsageBucket extends Schema.Class("UsageBucket")({
42
+ /** `YYYY-MM-DD` for a day, `YYYY-MM-DD HH:00` for an hour, in the report's zone. */
43
+ key: Schema.String,
44
+ runs: Schema.Int,
45
+ measured: UsageTotals,
46
+ estimated: UsageTotals
47
+ }) {
48
+ }
49
+ export class ModelUsage extends Schema.Class("ModelUsage")({
50
+ model: Schema.String,
51
+ estimated: Schema.Boolean,
52
+ totals: UsageTotals
53
+ }) {
54
+ }
55
+ export class UsageAverages extends Schema.Class("UsageAverages")({
56
+ activeDays: Schema.Int,
57
+ calendarDays: Schema.Int,
58
+ activeHours: Schema.Int,
59
+ tokensPerActiveDay: Schema.Int,
60
+ tokensPerCalendarDay: Schema.Int,
61
+ tokensPerActiveHour: Schema.Int,
62
+ tokensPerRun: Schema.Int,
63
+ costUsdPerActiveDay: Schema.optionalKey(Schema.Number),
64
+ costUsdPerCalendarDay: Schema.optionalKey(Schema.Number),
65
+ costUsdPerActiveHour: Schema.optionalKey(Schema.Number),
66
+ costUsdPerRun: Schema.optionalKey(Schema.Number),
67
+ peakDay: Schema.optionalKey(Schema.String),
68
+ peakHour: Schema.optionalKey(Schema.String)
69
+ }) {
70
+ }
71
+ export class UsageProjection extends Schema.Class("UsageProjection")({
72
+ runsPerDay: Schema.Number,
73
+ tokensPerDay: Schema.Int,
74
+ costUsdPerDay: Schema.optionalKey(Schema.Number)
75
+ }) {
76
+ }
77
+ export class CostReport extends Schema.Class("CostReport")({
78
+ schemaVersion: Schema.Int,
79
+ timeZone: Schema.String,
80
+ pricesAsOf: Schema.String,
81
+ from: Schema.optionalKey(Schema.String),
82
+ to: Schema.optionalKey(Schema.String),
83
+ runs: Schema.Int,
84
+ requests: Schema.Int,
85
+ measured: UsageTotals,
86
+ estimated: UsageTotals,
87
+ averages: UsageAverages,
88
+ projection: Schema.optionalKey(UsageProjection),
89
+ byDay: Schema.Array(UsageBucket),
90
+ byHour: Schema.Array(UsageBucket),
91
+ byModel: Schema.Array(ModelUsage)
92
+ }) {
93
+ }
94
+ export const CurrentCostReportSchema = 1;
95
+ const tokensUsedCodec = Schema.fromJsonString(TokensUsed);
96
+ const decodeTokensUsed = Schema.decodeUnknownOption(tokensUsedCodec);
97
+ // Backend-reported cost is authoritative; the pricing table only fills in
98
+ // when the backend said nothing (the same rule as `CostTracker`).
99
+ const costOf = (model, usage) => usage.costUsd ?? (model === UnknownModel ? undefined : estimateCostUsd(model, usage));
100
+ /** The token reports of one trace, in trace order; malformed lines are skipped. */
101
+ export const usageSamplesFromTrace = (lines) => lines.flatMap((line) => {
102
+ if (line.kind !== "TokensUsed") {
103
+ return [];
104
+ }
105
+ const raw = line.fields.event;
106
+ if (typeof raw !== "string") {
107
+ return [];
108
+ }
109
+ const decoded = decodeTokensUsed(raw);
110
+ if (Option.isNone(decoded)) {
111
+ return [];
112
+ }
113
+ const event = decoded.value;
114
+ const model = event.model ?? UnknownModel;
115
+ const costUsd = costOf(model, event.usage);
116
+ return [
117
+ UsageSample.make({
118
+ at: line.timestamp,
119
+ runId: line.runId,
120
+ agent: event.agent,
121
+ model,
122
+ prompt: event.usage.prompt,
123
+ completion: event.usage.completion,
124
+ total: event.usage.total,
125
+ ...(event.usage.cached === undefined ? {} : { cached: event.usage.cached }),
126
+ ...(costUsd === undefined ? {} : { costUsd }),
127
+ estimated: isEstimatedModel(model)
128
+ })
129
+ ];
130
+ });
131
+ const sumOptional = (values) => {
132
+ const present = values.flatMap((value) => (value === undefined ? [] : [value]));
133
+ return present.length === 0 ? undefined : present.reduce((sum, value) => sum + value, 0);
134
+ };
135
+ const totalsOf = (samples) => {
136
+ const cached = sumOptional(samples.map((sample) => sample.cached));
137
+ const costUsd = sumOptional(samples.map((sample) => sample.costUsd));
138
+ return UsageTotals.make({
139
+ requests: samples.length,
140
+ prompt: samples.reduce((sum, sample) => sum + sample.prompt, 0),
141
+ completion: samples.reduce((sum, sample) => sum + sample.completion, 0),
142
+ total: samples.reduce((sum, sample) => sum + sample.total, 0),
143
+ ...(cached === undefined ? {} : { cached }),
144
+ ...(costUsd === undefined ? {} : { costUsd })
145
+ });
146
+ };
147
+ const distinctRuns = (samples) => new Set(samples.map((sample) => sample.runId)).size;
148
+ const pad = (value) => value.toString().padStart(2, "0");
149
+ const partsIn = (timeZone, at) => {
150
+ const parts = DateTime.toParts(DateTime.makeZonedUnsafe(at, { timeZone }));
151
+ return { year: parts.year, month: parts.month, day: parts.day, hour: parts.hour };
152
+ };
153
+ const dayKey = (parts) => `${parts.year}-${pad(parts.month)}-${pad(parts.day)}`;
154
+ const hourKey = (parts) => `${dayKey(parts)} ${pad(parts.hour)}:00`;
155
+ const zoneLabel = (timeZone) => timeZone._tag === "Named"
156
+ ? timeZone.id
157
+ : timeZone.offset === 0
158
+ ? "UTC"
159
+ : DateTime.zoneToString(timeZone);
160
+ const bucketsBy = (samples, keyOf) => {
161
+ const groups = new Map();
162
+ for (const sample of samples) {
163
+ const key = keyOf(sample);
164
+ groups.set(key, [...(groups.get(key) ?? []), sample]);
165
+ }
166
+ return [...groups.entries()]
167
+ .sort(([left], [right]) => left.localeCompare(right))
168
+ .map(([key, members]) => UsageBucket.make({
169
+ key,
170
+ runs: distinctRuns(members),
171
+ measured: totalsOf(members.filter((sample) => !sample.estimated)),
172
+ estimated: totalsOf(members.filter((sample) => sample.estimated))
173
+ }));
174
+ };
175
+ const bucketTokens = (bucket) => bucket.measured.total + bucket.estimated.total;
176
+ const bucketCost = (bucket) => sumOptional([bucket.measured.costUsd, bucket.estimated.costUsd]);
177
+ /** The first bucket carrying the most tokens, in chronological order. */
178
+ const peakOf = (buckets) => buckets.reduce((best, bucket) => best === undefined || bucketTokens(bucket) > bucketTokens(best) ? bucket : best, undefined);
179
+ const calendarDaysBetween = (first, last) => Math.round((Date.UTC(last.year, last.month - 1, last.day) -
180
+ Date.UTC(first.year, first.month - 1, first.day)) /
181
+ 86_400_000) + 1;
182
+ const ratio = (value, count) => (count === 0 ? 0 : value / count);
183
+ const costRatio = (cost, count) => cost === undefined || count === 0 ? undefined : cost / count;
184
+ export const buildCostReport = (samples, options = {}) => {
185
+ const timeZone = options.timeZone ?? DateTime.zoneMakeOffset(0);
186
+ const ordered = [...samples].sort((left, right) => left.at - right.at);
187
+ const byDay = bucketsBy(ordered, (sample) => dayKey(partsIn(timeZone, sample.at)));
188
+ const byHour = bucketsBy(ordered, (sample) => hourKey(partsIn(timeZone, sample.at)));
189
+ const measured = totalsOf(ordered.filter((sample) => !sample.estimated));
190
+ const estimated = totalsOf(ordered.filter((sample) => sample.estimated));
191
+ const tokens = measured.total + estimated.total;
192
+ const cost = sumOptional([measured.costUsd, estimated.costUsd]);
193
+ const runs = distinctRuns(ordered);
194
+ const first = ordered[0];
195
+ const last = ordered[ordered.length - 1];
196
+ const calendarDays = first === undefined || last === undefined
197
+ ? 0
198
+ : calendarDaysBetween(partsIn(timeZone, first.at), partsIn(timeZone, last.at));
199
+ const tokensPerRun = ratio(tokens, runs);
200
+ const costUsdPerRun = costRatio(cost, runs);
201
+ const costUsdPerActiveDay = costRatio(cost, byDay.length);
202
+ const costUsdPerCalendarDay = costRatio(cost, calendarDays);
203
+ const costUsdPerActiveHour = costRatio(cost, byHour.length);
204
+ const peakDay = peakOf(byDay);
205
+ const peakHour = peakOf(byHour);
206
+ const projection = options.runsPerDay === undefined
207
+ ? undefined
208
+ : UsageProjection.make({
209
+ runsPerDay: options.runsPerDay,
210
+ tokensPerDay: Math.round(tokensPerRun * options.runsPerDay),
211
+ ...(costUsdPerRun === undefined
212
+ ? {}
213
+ : { costUsdPerDay: costUsdPerRun * options.runsPerDay })
214
+ });
215
+ const byModelGroups = new Map();
216
+ for (const sample of ordered) {
217
+ byModelGroups.set(sample.model, [...(byModelGroups.get(sample.model) ?? []), sample]);
218
+ }
219
+ const byModel = [...byModelGroups.entries()]
220
+ .map(([model, members]) => ModelUsage.make({ model, estimated: isEstimatedModel(model), totals: totalsOf(members) }))
221
+ .sort((left, right) => left.estimated === right.estimated
222
+ ? left.model.localeCompare(right.model)
223
+ : left.estimated
224
+ ? 1
225
+ : -1);
226
+ return CostReport.make({
227
+ schemaVersion: CurrentCostReportSchema,
228
+ timeZone: zoneLabel(timeZone),
229
+ pricesAsOf: PricesAsOf,
230
+ ...(first === undefined ? {} : { from: new Date(first.at).toISOString() }),
231
+ ...(last === undefined ? {} : { to: new Date(last.at).toISOString() }),
232
+ runs,
233
+ requests: ordered.length,
234
+ measured,
235
+ estimated,
236
+ averages: UsageAverages.make({
237
+ activeDays: byDay.length,
238
+ calendarDays,
239
+ activeHours: byHour.length,
240
+ tokensPerActiveDay: Math.round(ratio(tokens, byDay.length)),
241
+ tokensPerCalendarDay: Math.round(ratio(tokens, calendarDays)),
242
+ tokensPerActiveHour: Math.round(ratio(tokens, byHour.length)),
243
+ tokensPerRun: Math.round(tokensPerRun),
244
+ ...(costUsdPerActiveDay === undefined ? {} : { costUsdPerActiveDay }),
245
+ ...(costUsdPerCalendarDay === undefined ? {} : { costUsdPerCalendarDay }),
246
+ ...(costUsdPerActiveHour === undefined ? {} : { costUsdPerActiveHour }),
247
+ ...(costUsdPerRun === undefined ? {} : { costUsdPerRun }),
248
+ ...(peakDay === undefined ? {} : { peakDay: peakDay.key }),
249
+ ...(peakHour === undefined ? {} : { peakHour: peakHour.key })
250
+ }),
251
+ ...(projection === undefined ? {} : { projection }),
252
+ byDay,
253
+ byHour,
254
+ byModel
255
+ });
256
+ };
257
+ const thousands = (value) => Math.round(value)
258
+ .toString()
259
+ .replace(/\B(?=(\d{3})+(?!\d))/gu, ",");
260
+ const money = (cost) => cost === undefined ? "" : ` ($${cost.toFixed(4)})`;
261
+ const totalsLine = (label, totals) => {
262
+ const cached = totals.cached === undefined || totals.cached <= 0 ? "" : ` (${thousands(totals.cached)} cached)`;
263
+ return `${label}: ${thousands(totals.prompt)} in${cached}, ${thousands(totals.completion)} out, ${thousands(totals.total)} total${money(totals.costUsd)}`;
264
+ };
265
+ const runsLabel = (runs) => `${runs} run${runs === 1 ? "" : "s"}`;
266
+ const bucketLine = (bucket) => ` ${bucket.key} ${runsLabel(bucket.runs)} ${thousands(bucket.measured.total)} measured ${thousands(bucket.estimated.total)} estimated${money(bucketCost(bucket))}`;
267
+ export const renderCostReport = (report) => {
268
+ if (report.from === undefined || report.to === undefined) {
269
+ return "llm4ts costs\n\nno usage recorded — run a flow whose backend reports token counts, then try again";
270
+ }
271
+ const averages = report.averages;
272
+ const peakDay = peakOf(report.byDay);
273
+ const peakHour = peakOf(report.byHour);
274
+ const peaks = [
275
+ ...(peakDay === undefined
276
+ ? []
277
+ : [`peak day ${peakDay.key} (${thousands(bucketTokens(peakDay))})`]),
278
+ ...(peakHour === undefined
279
+ ? []
280
+ : [`peak hour ${peakHour.key} (${thousands(bucketTokens(peakHour))})`])
281
+ ];
282
+ const sections = [
283
+ "llm4ts costs",
284
+ `window: ${report.from} → ${report.to} (${report.timeZone})`,
285
+ `runs: ${report.runs} · requests: ${report.requests}`,
286
+ totalsLine("measured", report.measured),
287
+ totalsLine("estimated", report.estimated),
288
+ "",
289
+ "averages (measured + estimated):",
290
+ ` per active day: ${thousands(averages.tokensPerActiveDay)} tokens${money(averages.costUsdPerActiveDay)} over ${averages.activeDays} day${averages.activeDays === 1 ? "" : "s"}`,
291
+ ` per calendar day: ${thousands(averages.tokensPerCalendarDay)} tokens${money(averages.costUsdPerCalendarDay)} over ${averages.calendarDays} day${averages.calendarDays === 1 ? "" : "s"}`,
292
+ ` per active hour: ${thousands(averages.tokensPerActiveHour)} tokens${money(averages.costUsdPerActiveHour)} over ${averages.activeHours} hour${averages.activeHours === 1 ? "" : "s"}`,
293
+ ` per run: ${thousands(averages.tokensPerRun)} tokens${money(averages.costUsdPerRun)}`,
294
+ ...(peaks.length === 0 ? [] : [` ${peaks.join(", ")}`])
295
+ ];
296
+ if (report.projection !== undefined) {
297
+ sections.push("projection:", ` at ${report.projection.runsPerDay} runs/day: ${thousands(report.projection.tokensPerDay)} tokens${money(report.projection.costUsdPerDay)} per day`);
298
+ }
299
+ sections.push("", "by day:", ...report.byDay.map(bucketLine));
300
+ sections.push("", "by hour:", ...report.byHour.map(bucketLine));
301
+ sections.push("", "by model:", ...report.byModel.map((entry) => ` ${entry.model} ${thousands(entry.totals.total)} tokens${money(entry.totals.costUsd)}`));
302
+ const notes = [
303
+ `costs are backend-reported where available, otherwise estimated from the pricing table (rates as of ${report.pricesAsOf} — may be stale)`,
304
+ ...(report.estimated.requests === 0
305
+ ? []
306
+ : [
307
+ "estimated:<model> rows come from character counts (LLM4TS_ESTIMATE_MODEL), not backend token counts"
308
+ ])
309
+ ];
310
+ sections.push("", ...notes.map((note) => `* ${note}`));
311
+ return sections.join("\n");
312
+ };
313
+ //# sourceMappingURL=CostReport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CostReport.js","sourceRoot":"","sources":["../src/CostReport.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"EstimatedUsage.d.ts","sourceRoot":"","sources":["../src/EstimatedUsage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAIvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAY,UAAU,EAAgB,MAAM,qBAAqB,CAAA;AAYxE,MAAM,WAAW,qBAAqB;IACpC,uEAAuE;IACvE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,wDAAwD;IACxD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAChC;AAED,eAAO,MAAM,qBAAqB,oBAAoB,CAAA;AAEtD,eAAO,MAAM,4BAA4B,GACvC,aAAa,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,KACxD,qBAMF,CAAA;AAED,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,GAAI,gBAAgB,MAAM,KAAG,MAAuC,CAAA;AAEpG,eAAO,MAAM,gBAAgB,GAAI,OAAO,MAAM,GAAG,SAAS,KAAG,OACN,CAAA;AAKvD,eAAO,MAAM,aAAa,GACxB,aAAa,MAAM,EACnB,iBAAiB,MAAM,EACvB,SAAS,qBAAqB,KAC7B,UAOF,CAAA;AAqBD,MAAM,WAAW,mBAAmB;IAClC,sEAAsE;IACtE,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;IACjC,yFAAyF;IACzF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC,CAAA;CACvD;AA8CD;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,gHA8ClC,CAAA"}
1
+ {"version":3,"file":"EstimatedUsage.d.ts","sourceRoot":"","sources":["../src/EstimatedUsage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAKvC,OAAO,KAAK,EAAiB,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC7E,OAAO,EAA+B,UAAU,EAAgB,MAAM,qBAAqB,CAAA;AAmB3F,MAAM,WAAW,qBAAqB;IACpC,uEAAuE;IACvE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,wDAAwD;IACxD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAChC;AAED,eAAO,MAAM,qBAAqB,oBAAoB,CAAA;AAEtD,eAAO,MAAM,4BAA4B,GACvC,aAAa,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,KACxD,qBAMF,CAAA;AAED,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,GAAI,gBAAgB,MAAM,KAAG,MAAuC,CAAA;AAEpG,eAAO,MAAM,gBAAgB,GAAI,OAAO,MAAM,GAAG,SAAS,KAAG,OACN,CAAA;AAKvD,eAAO,MAAM,aAAa,GACxB,aAAa,MAAM,EACnB,iBAAiB,MAAM,EACvB,SAAS,qBAAqB,KAC7B,UAOF,CAAA;AA6BD,MAAM,WAAW,mBAAmB;IAClC,sEAAsE;IACtE,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;IACjC,yFAAyF;IACzF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC,CAAA;CACvD;AA8CD;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,gHAqGlC,CAAA"}
@@ -1,7 +1,8 @@
1
1
  import * as Effect from "effect/Effect";
2
2
  import * as Ref from "effect/Ref";
3
+ import * as Result from "effect/Result";
3
4
  import * as Stream from "effect/Stream";
4
- import { LlmChunk, TokenUsage } from "@llm4ts/core/Models";
5
+ import { LabelDistribution, LlmChunk, TokenUsage } from "@llm4ts/core/Models";
5
6
  import { estimateCostUsd } from "./PriceList.js";
6
7
  export const defaultReferenceModel = "claude-sonnet-4";
7
8
  export const estimatedUsageOptionsFromEnv = (environment) => {
@@ -24,6 +25,8 @@ export const estimateUsage = (promptChars, completionChars, options) => {
24
25
  return costUsd === undefined ? base : TokenUsage.make({ ...base, costUsd });
25
26
  };
26
27
  const messagesChars = (messages) => messages.reduce((sum, message) => sum + message.content.length, 0);
28
+ /** Characters the backend produced for a batch: the readable answers only. */
29
+ const sequenceCompletionChars = (sequence) => sequence.entries.reduce((sum, entry) => sum + (Result.isSuccess(entry) ? JSON.stringify(entry.success.probabilities).length : 0), 0);
27
30
  const mergeTotals = (previous, usage) => {
28
31
  const cached = [previous?.cached, usage.cached].flatMap((value) => value === undefined ? [] : [value]);
29
32
  const cost = [previous?.costUsd, usage.costUsd].flatMap((value) => value === undefined ? [] : [value]);
@@ -70,6 +73,22 @@ const estimatedStream = (stream, promptChars, options, record) => Stream.unwrap(
70
73
  export const makeEstimatedUsageMeter = Effect.fn("@llm4ts/flow/EstimatedUsage.make")(function* (service, options) {
71
74
  const totals = yield* Ref.make(undefined);
72
75
  const record = (usage) => Ref.update(totals, (previous) => mergeTotals(previous, usage));
76
+ const estimatedLabel = estimatedModelLabel(options.referenceModel);
77
+ const withEstimate = (usage, carry) => record(usage).pipe(Effect.as(carry(usage)));
78
+ // `scoreLabelSequence` is optional on the shape and the judgment layer reads
79
+ // its absence as "this backend cannot batch" (falling back to a verbalized
80
+ // sequence). So it is forwarded only when the seat really has it: defining it
81
+ // unconditionally would advertise a capability the backend lacks, and leaving
82
+ // it out of the decorator would hide one it has.
83
+ const batched = service.scoreLabelSequence;
84
+ const scoreLabelSequence = batched === undefined
85
+ ? undefined
86
+ : (prompt, labelSets) => batched(prompt, labelSets).pipe(Effect.flatMap((sequence) => sequence.usage === undefined
87
+ ? withEstimate(
88
+ // One call, so one estimate for the whole batch: the
89
+ // per-question entries of a sequence carry no usage.
90
+ estimateUsage(prompt.length, sequenceCompletionChars(sequence), options), (usage) => ({ ...sequence, usage, model: estimatedLabel }))
91
+ : record(sequence.usage).pipe(Effect.as(sequence))));
73
92
  const decorated = {
74
93
  executeStream: (prompt) => estimatedStream(service.executeStream(prompt), prompt.length, options, record),
75
94
  executeStreamWithHistory: (messages) => estimatedStream(service.executeStreamWithHistory(messages), messagesChars(messages), options, record),
@@ -84,6 +103,19 @@ export const makeEstimatedUsageMeter = Effect.fn("@llm4ts/flow/EstimatedUsage.ma
84
103
  const estimated = estimateUsage(prompt.length, (JSON.stringify(value) ?? "").length, options);
85
104
  return record(estimated).pipe(Effect.as([value, estimated, estimatedModelLabel(options.referenceModel)]));
86
105
  })),
106
+ // A connector builds its verbalized `scoreLabels` from its own raw
107
+ // `executeStructuredWithUsage`, so the substitution below is the only one
108
+ // that reaches label scoring. Relabelling the model is the point of it:
109
+ // published under the backend's real name, an estimate would land in a
110
+ // measured column. The judgment origin then records `estimated:<model>`
111
+ // rather than the backend's name for such a seat, which is the accepted
112
+ // cost of never mixing the two.
113
+ scoreLabels: (prompt, labels) => service
114
+ .scoreLabels(prompt, labels)
115
+ .pipe(Effect.flatMap((distribution) => distribution.usage === undefined
116
+ ? withEstimate(estimateUsage(prompt.length, JSON.stringify(distribution.probabilities).length, options), (usage) => LabelDistribution.make({ ...distribution, usage, model: estimatedLabel }))
117
+ : record(distribution.usage).pipe(Effect.as(distribution)))),
118
+ ...(scoreLabelSequence === undefined ? {} : { scoreLabelSequence }),
87
119
  isAvailable: service.isAvailable
88
120
  };
89
121
  return { service: decorated, totals: Ref.get(totals) };
@@ -1 +1 @@
1
- {"version":3,"file":"EstimatedUsage.js","sourceRoot":"","sources":["../src/EstimatedUsage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,GAAG,MAAM,YAAY,CAAA;AACjC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAgB,MAAM,qBAAqB,CAAA;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAkBhD,MAAM,CAAC,MAAM,qBAAqB,GAAG,iBAAiB,CAAA;AAEtD,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,WAAyD,EAClC,EAAE;IACzB,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,+BAA+B,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;IACrF,OAAO;QACL,cAAc,EAAE,WAAW,CAAC,qBAAqB,EAAE,IAAI,EAAE,IAAI,qBAAqB;QAClF,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5E,CAAA;AACH,CAAC,CAAA;AAED,6EAA6E;AAC7E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,cAAsB,EAAU,EAAE,CAAC,aAAa,cAAc,EAAE,CAAA;AAEpG,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAyB,EAAW,EAAE,CACrE,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;AAEvD,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,aAAqB,EAAU,EAAE,CACjE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC,CAAA;AAE/C,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,WAAmB,EACnB,eAAuB,EACvB,OAA8B,EAClB,EAAE;IACd,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,CAAA;IAChD,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;IACpD,MAAM,UAAU,GAAG,SAAS,CAAC,eAAe,EAAE,aAAa,CAAC,CAAA;IAC5D,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC,CAAA;IAChF,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IAC7D,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;AAC7E,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,CAAC,QAAgC,EAAU,EAAE,CACjE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;AAEpE,MAAM,WAAW,GAAG,CAAC,QAAgC,EAAE,KAAiB,EAAc,EAAE;IACtF,MAAM,MAAM,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAChE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CACnC,CAAA;IACD,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAChE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CACnC,CAAA;IACD,OAAO,UAAU,CAAC,IAAI,CAAC;QACrB,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM;QAC9C,UAAU,EAAE,CAAC,QAAQ,EAAE,UAAU,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU;QAC1D,KAAK,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK;QAC3C,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;QACzF,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;KACvF,CAAC,CAAA;AACJ,CAAC,CAAA;AASD,MAAM,eAAe,GAAG,CACtB,MAAyC,EACzC,WAAmB,EACnB,OAA8B,EAC9B,MAAkD,EACf,EAAE,CACrC,MAAM,CAAC,MAAM,CACX,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACvC,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CACxB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACnB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACzE,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC9B,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YAC9B,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC,CAAC,CACH,CACF,CAAA;IACD,mEAAmE;IACnE,qEAAqE;IACrE,iCAAiC;IACjC,MAAM,IAAI,GAAsC,MAAM,CAAC,MAAM,CAC3D,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,MAAM,CAAC,KAAK,CAAA;QACrB,CAAC;QACD,MAAM,KAAK,GAAG,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,CAAA;QAClF,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACpB,OAAO,MAAM,CAAC,OAAO,CACnB,QAAQ,CAAC,IAAI,CAAC;YACZ,KAAK,EAAE,EAAE;YACT,KAAK;YACL,QAAQ,EAAE,EAAE,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;SACjE,CAAC,CACH,CAAA;IACH,CAAC,CAAC,CACH,CAAA;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;AACpC,CAAC,CAAC,CACH,CAAA;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,EAAE,CAAC,kCAAkC,CAAC,CAAC,QAAQ,CAAC,EAC5F,OAAwB,EACxB,OAA8B;IAE9B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAyB,SAAS,CAAC,CAAA;IACjE,MAAM,MAAM,GAAG,CAAC,KAAiB,EAAuB,EAAE,CACxD,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAA;IAEhE,MAAM,SAAS,GAAoB;QACjC,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE,CACxB,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;QAChF,wBAAwB,EAAE,CAAC,QAAQ,EAAE,EAAE,CACrC,eAAe,CACb,OAAO,CAAC,wBAAwB,CAAC,QAAQ,CAAC,EAC1C,aAAa,CAAC,QAAQ,CAAC,EACvB,OAAO,EACP,MAAM,CACP;QACH,gBAAgB,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC;QAC5E,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,CAChD,OAAO;aACJ,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC;aAC7C,IAAI,CACH,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACnB,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CACpF,CACF;QACL,0BAA0B,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,CACzD,OAAO,CAAC,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,IAAI,CACjE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE;YACvC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC,CAAC,CAAA;YACtE,CAAC;YACD,MAAM,SAAS,GAAG,aAAa,CAC7B,MAAM,CAAC,MAAM,EACb,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EACpC,OAAO,CACR,CAAA;YACD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAC3B,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAU,CAAC,CACpF,CAAA;QACH,CAAC,CAAC,CACH;QACH,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,CAAA;IACD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAA;AACxD,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"EstimatedUsage.js","sourceRoot":"","sources":["../src/EstimatedUsage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,GAAG,MAAM,YAAY,CAAA;AACjC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAgB,MAAM,qBAAqB,CAAA;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAyBhD,MAAM,CAAC,MAAM,qBAAqB,GAAG,iBAAiB,CAAA;AAEtD,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,WAAyD,EAClC,EAAE;IACzB,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,+BAA+B,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;IACrF,OAAO;QACL,cAAc,EAAE,WAAW,CAAC,qBAAqB,EAAE,IAAI,EAAE,IAAI,qBAAqB;QAClF,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5E,CAAA;AACH,CAAC,CAAA;AAED,6EAA6E;AAC7E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,cAAsB,EAAU,EAAE,CAAC,aAAa,cAAc,EAAE,CAAA;AAEpG,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAyB,EAAW,EAAE,CACrE,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;AAEvD,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,aAAqB,EAAU,EAAE,CACjE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC,CAAA;AAE/C,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,WAAmB,EACnB,eAAuB,EACvB,OAA8B,EAClB,EAAE;IACd,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,CAAA;IAChD,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;IACpD,MAAM,UAAU,GAAG,SAAS,CAAC,eAAe,EAAE,aAAa,CAAC,CAAA;IAC5D,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC,CAAA;IAChF,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IAC7D,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;AAC7E,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,CAAC,QAAgC,EAAU,EAAE,CACjE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;AAEpE,8EAA8E;AAC9E,MAAM,uBAAuB,GAAG,CAAC,QAAuB,EAAU,EAAE,CAClE,QAAQ,CAAC,OAAO,CAAC,MAAM,CACrB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CACb,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAC1F,CAAC,CACF,CAAA;AAEH,MAAM,WAAW,GAAG,CAAC,QAAgC,EAAE,KAAiB,EAAc,EAAE;IACtF,MAAM,MAAM,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAChE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CACnC,CAAA;IACD,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAChE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CACnC,CAAA;IACD,OAAO,UAAU,CAAC,IAAI,CAAC;QACrB,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM;QAC9C,UAAU,EAAE,CAAC,QAAQ,EAAE,UAAU,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU;QAC1D,KAAK,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK;QAC3C,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;QACzF,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;KACvF,CAAC,CAAA;AACJ,CAAC,CAAA;AASD,MAAM,eAAe,GAAG,CACtB,MAAyC,EACzC,WAAmB,EACnB,OAA8B,EAC9B,MAAkD,EACf,EAAE,CACrC,MAAM,CAAC,MAAM,CACX,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACvC,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CACxB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACnB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACzE,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC9B,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YAC9B,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC,CAAC,CACH,CACF,CAAA;IACD,mEAAmE;IACnE,qEAAqE;IACrE,iCAAiC;IACjC,MAAM,IAAI,GAAsC,MAAM,CAAC,MAAM,CAC3D,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,MAAM,CAAC,KAAK,CAAA;QACrB,CAAC;QACD,MAAM,KAAK,GAAG,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,CAAA;QAClF,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACpB,OAAO,MAAM,CAAC,OAAO,CACnB,QAAQ,CAAC,IAAI,CAAC;YACZ,KAAK,EAAE,EAAE;YACT,KAAK;YACL,QAAQ,EAAE,EAAE,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;SACjE,CAAC,CACH,CAAA;IACH,CAAC,CAAC,CACH,CAAA;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;AACpC,CAAC,CAAC,CACH,CAAA;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,EAAE,CAAC,kCAAkC,CAAC,CAAC,QAAQ,CAAC,EAC5F,OAAwB,EACxB,OAA8B;IAE9B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAyB,SAAS,CAAC,CAAA;IACjE,MAAM,MAAM,GAAG,CAAC,KAAiB,EAAuB,EAAE,CACxD,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAA;IAChE,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAClE,MAAM,YAAY,GAAG,CAAI,KAAiB,EAAE,KAA+B,EAAoB,EAAE,CAC/F,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAE7C,6EAA6E;IAC7E,2EAA2E;IAC3E,8EAA8E;IAC9E,8EAA8E;IAC9E,iDAAiD;IACjD,MAAM,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAA;IAC1C,MAAM,kBAAkB,GACtB,OAAO,KAAK,SAAS;QACnB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,CACE,MAAc,EACd,SAA+C,EACP,EAAE,CAC1C,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,IAAI,CAC7B,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC1B,QAAQ,CAAC,KAAK,KAAK,SAAS;YAC1B,CAAC,CAAC,YAAY;YACV,qDAAqD;YACrD,qDAAqD;YACrD,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,EACxE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAC3D;YACH,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CACrD,CACF,CAAA;IAET,MAAM,SAAS,GAAoB;QACjC,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE,CACxB,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;QAChF,wBAAwB,EAAE,CAAC,QAAQ,EAAE,EAAE,CACrC,eAAe,CACb,OAAO,CAAC,wBAAwB,CAAC,QAAQ,CAAC,EAC1C,aAAa,CAAC,QAAQ,CAAC,EACvB,OAAO,EACP,MAAM,CACP;QACH,gBAAgB,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC;QAC5E,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,CAChD,OAAO;aACJ,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC;aAC7C,IAAI,CACH,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACnB,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CACpF,CACF;QACL,0BAA0B,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,CACzD,OAAO,CAAC,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,IAAI,CACjE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE;YACvC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC,CAAC,CAAA;YACtE,CAAC;YACD,MAAM,SAAS,GAAG,aAAa,CAC7B,MAAM,CAAC,MAAM,EACb,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EACpC,OAAO,CACR,CAAA;YACD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAC3B,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAU,CAAC,CACpF,CAAA;QACH,CAAC,CAAC,CACH;QACH,mEAAmE;QACnE,0EAA0E;QAC1E,wEAAwE;QACxE,uEAAuE;QACvE,wEAAwE;QACxE,wEAAwE;QACxE,gCAAgC;QAChC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAC9B,OAAO;aACJ,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;aAC3B,IAAI,CACH,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE,CAC9B,YAAY,CAAC,KAAK,KAAK,SAAS;YAC9B,CAAC,CAAC,YAAY,CACV,aAAa,CACX,MAAM,CAAC,MAAM,EACb,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,MAAM,EACjD,OAAO,CACR,EACD,CAAC,KAAK,EAAE,EAAE,CACR,iBAAiB,CAAC,IAAI,CAAC,EAAE,GAAG,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAC5E;YACH,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAC7D,CACF;QACL,GAAG,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC;QACnE,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,CAAA;IACD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAA;AACxD,CAAC,CAAC,CAAA"}
package/dist/Flow.d.ts CHANGED
@@ -5,6 +5,7 @@ import { FlowAborted, FlowLlmError, type FlowError } from "./FlowError.ts";
5
5
  import { type FlowEventsShape } from "./FlowEvents.ts";
6
6
  import type { Plan, Task } from "./Plan.ts";
7
7
  import type { PlanStoreShape } from "./Persistence.ts";
8
+ import { type JudgmentMode } from "./Judgment.ts";
8
9
  import { type ReviewResult } from "./Review.ts";
9
10
  import type { Reviewer } from "./Reviewer.ts";
10
11
  export { publishUsage, structuredAndPublish } from "./Usage.ts";
@@ -37,6 +38,19 @@ export interface ImplementPlanOptions {
37
38
  * where one unconfirmed no-op should not sink otherwise-finished work.
38
39
  */
39
40
  readonly noopTaskPolicy?: "fail" | "complete";
41
+ /**
42
+ * How the "already satisfied" confirmation is read (ADR 0017): "literal"
43
+ * (default) looks for TASK_ALREADY_SATISFIED without any judgment call.
44
+ * { mode } asks the run's judgment service, defaulting to observe: observe
45
+ * and advise publish the literal outcome and keep using it. Explicit act
46
+ * uses a confident judgment, falling back to the literal reading on doubt
47
+ * or failure. The legacy "judgment" string remains an alias for { mode: "act" }.
48
+ */
49
+ readonly satisfiedProbe?: "literal" | "judgment" | {
50
+ readonly mode?: JudgmentMode;
51
+ };
40
52
  }
53
+ /** The judgment form of the empty-diff probe: one Truth question over the coder's reply. */
54
+ export declare const satisfiedByJudgment: (context: FlowContextShape, taskTitle: string, reply: string, mode?: "observe" | "advise" | "act" | undefined) => Effect.Effect<boolean | undefined, never, never>;
41
55
  export declare const implementPlanFlow: (context: FlowContextShape, options: ImplementPlanOptions) => Effect.Effect<Plan, import("./FlowError.ts").PersistenceError | import("./FlowError.ts").PlanParseError | import("./FlowError.ts").UnsupportedSchemaVersion | import("./FlowError.ts").WorkspacePathError | import("./FlowError.ts").WorkspaceLimitError | import("./FlowError.ts").WorkspaceIoError | FlowAborted | import("./FlowError.ts").ProcessError | FlowLlmError | import("./FlowError.ts").FlowCapabilityDenied | import("./FlowError.ts").ColumnNotFound | import("./FlowError.ts").BudgetExceeded | import("./FlowError.ts").StoryPlanInvalid | import("./FlowError.ts").PerimeterViolation | import("./FlowError.ts").MissingDependency | import("./FlowError.ts").MergeConflict | import("./FlowError.ts").StoryFailed | import("./FlowError.ts").DecisionsInvalid | import("./FlowError.ts").OpenPointsPending | import("./FlowError.ts").ContractConflict, never>;
42
56
  //# sourceMappingURL=Flow.d.ts.map