@llm4ts/flow 2.33.0 → 2.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/Timing.js CHANGED
@@ -53,6 +53,15 @@ const replyContent = (content, text) => content === "off"
53
53
  { role: "assistant", content: clean(text, inputChars) }
54
54
  ])
55
55
  };
56
+ /** A structured reply as text for `output.value`; empty when it does not serialize. */
57
+ const rendered = (value) => {
58
+ try {
59
+ return typeof value === "string" ? value : (JSON.stringify(value) ?? "");
60
+ }
61
+ catch {
62
+ return "";
63
+ }
64
+ };
56
65
  const count = (counter, attributes, by) => by === 0 ? Effect.void : Metric.update(by)(Metric.withAttributes(attributes)(counter));
57
66
  /** The usage and the model a call ends with: measured from the chunks, else estimated when asked. */
58
67
  const settleUsage = (measured, model, promptChars, completionChars, estimate) => measured !== undefined
@@ -105,17 +114,20 @@ const reportedMs = (chunk, key) => {
105
114
  export const timeEffect = (events, effect, timed) => Effect.flatMap(Effect.all([Clock.currentTimeMillis, TimedRole]), ([start, role]) => Effect.onExit(effect, (exit) => Effect.flatMap(Clock.currentTimeMillis, (end) => events.publish(timed(end - start, Exit.isFailure(exit), role)))));
106
115
  /**
107
116
  * `timeEffect` under an LLM span named for the role; `usageOf` reads what
108
- * the result says about tokens and model, when it says anything.
117
+ * the result says about tokens and model, when it says anything, and
118
+ * `replyOf` what the reply was, for the span's content when it may carry any.
109
119
  */
110
- const tracedEffect = (events, label, options, effect, timed, usageOf) => Effect.gen(function* () {
120
+ const tracedEffect = (events, label, options, prompt, effect, timed, usageOf, replyOf = rendered) => Effect.gen(function* () {
111
121
  const role = (yield* TimedRole) ?? label;
112
122
  const executor = options.executor === undefined ? undefined : yield* options.executor;
123
+ const content = options.content ?? "off";
113
124
  return yield* withKindSpan(role, {
114
125
  kind: "LLM",
115
126
  attributes: {
116
127
  [attr.role]: role,
117
128
  [attr.operation]: "generate",
118
- ...(executor === undefined ? {} : { [attr.executor]: executor })
129
+ ...(executor === undefined ? {} : { [attr.executor]: executor }),
130
+ ...promptContent(content, [Message.make({ role: "User", content: prompt })])
119
131
  }
120
132
  }, timeEffect(events, effect, timed).pipe(Effect.onExit((exit) => {
121
133
  const known = Exit.isSuccess(exit)
@@ -123,7 +135,10 @@ const tracedEffect = (events, label, options, effect, timed, usageOf) => Effect.
123
135
  : { usage: undefined, model: undefined };
124
136
  const settled = settleUsage(known.usage, known.model, 0, 0, undefined);
125
137
  return Effect.all([
126
- Effect.annotateCurrentSpan(usageAttributes(settled.model, settled.usage, settled.estimated)),
138
+ Effect.annotateCurrentSpan({
139
+ ...usageAttributes(settled.model, settled.usage, settled.estimated),
140
+ ...(Exit.isSuccess(exit) ? replyContent(content, replyOf(exit.value)) : {})
141
+ }),
127
142
  recordCall(role, executor, settled, Exit.isFailure(exit))
128
143
  ], { discard: true });
129
144
  })));
@@ -267,14 +282,14 @@ export const timedSeat = (service, events, label, options = {}) => {
267
282
  return {
268
283
  executeStream: (text) => timedStream(events, label, options, prompt(text), service.executeStream(text)),
269
284
  executeStreamWithHistory: (messages) => timedStream(events, label, options, messages, service.executeStreamWithHistory(messages)),
270
- executeWithTools: (text, tools) => tracedEffect(events, label, options, service.executeWithTools(text, tools), model, nothing),
271
- executeStructured: (text, schema, jsonSchema) => tracedEffect(events, label, options, service.executeStructured(text, schema, jsonSchema), model, nothing),
272
- executeStructuredWithUsage: (text, schema, jsonSchema) => tracedEffect(events, label, options, service.executeStructuredWithUsage(text, schema, jsonSchema), model, ([, usage, modelName]) => ({ usage, model: modelName })),
273
- scoreLabels: (text, labels) => tracedEffect(events, label, options, service.scoreLabels(text, labels), model, nothing),
285
+ executeWithTools: (text, tools) => tracedEffect(events, label, options, text, service.executeWithTools(text, tools), model, nothing),
286
+ executeStructured: (text, schema, jsonSchema) => tracedEffect(events, label, options, text, service.executeStructured(text, schema, jsonSchema), model, nothing),
287
+ executeStructuredWithUsage: (text, schema, jsonSchema) => tracedEffect(events, label, options, text, service.executeStructuredWithUsage(text, schema, jsonSchema), model, ([, usage, modelName]) => ({ usage, model: modelName }), ([value]) => rendered(value)),
288
+ scoreLabels: (text, labels) => tracedEffect(events, label, options, text, service.scoreLabels(text, labels), model, nothing),
274
289
  ...(batched === undefined
275
290
  ? {}
276
291
  : {
277
- scoreLabelSequence: (text, labelSets) => tracedEffect(events, label, options, batched(text, labelSets), model, nothing)
292
+ scoreLabelSequence: (text, labelSets) => tracedEffect(events, label, options, text, batched(text, labelSets), model, nothing)
278
293
  }),
279
294
  isAvailable: service.isAvailable
280
295
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Timing.js","sourceRoot":"","sources":["../src/Timing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Timing.js","sourceRoot":"","sources":["../src/Timing.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@llm4ts/flow",
3
- "version": "2.33.0",
3
+ "version": "2.35.0",
4
4
  "description": "Effect-native LLM workflow, persistence, review, and repository automation",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -122,7 +122,7 @@
122
122
  "typescript"
123
123
  ],
124
124
  "dependencies": {
125
- "@llm4ts/core": "2.33.0"
125
+ "@llm4ts/core": "2.35.0"
126
126
  },
127
127
  "peerDependencies": {
128
128
  "effect": "4.0.0"
@@ -12,10 +12,11 @@ export class Diagnostic extends Schema.Class<Diagnostic>("Diagnostic")({
12
12
  unit: Schema.optionalKey(Schema.String)
13
13
  }) {}
14
14
 
15
- export const DiagnosticsFormat = Schema.Literals(["json", "cargo"])
15
+ export const DiagnosticsFormat = Schema.Literals(["json", "cargo", "tsc"])
16
16
  export type DiagnosticsFormat = typeof DiagnosticsFormat.Type
17
17
 
18
18
  const decodeJsonLine = Schema.decodeUnknownOption(Schema.fromJsonString(Diagnostic))
19
+ const tscLine = /^(.+?)\((\d+),\d+\): error (TS\d+: .+)$/u
19
20
 
20
21
  const CargoMessage = Schema.fromJsonString(
21
22
  Schema.Struct({
@@ -43,13 +44,32 @@ const decodeCargo = Schema.decodeUnknownOption(CargoMessage)
43
44
  /**
44
45
  * `json`: one `{file, line?, message, unit?}` object per line. `cargo`:
45
46
  * `cargo check --message-format=json`, errors only, the crate as the unit.
46
- * Lines that do not parse are skipped: a build prints more than diagnostics.
47
+ * `tsc`: `tsc --pretty false`, the file's top folders as the unit. Lines
48
+ * that do not parse are skipped: a build prints more than diagnostics.
47
49
  */
48
50
  export const parseDiagnostics = (
49
51
  text: string,
50
52
  format: DiagnosticsFormat = "json"
51
53
  ): ReadonlyArray<Diagnostic> => {
52
54
  const out: Array<Diagnostic> = []
55
+ if (format === "tsc") {
56
+ // `tsc --pretty false`: `path(line,col): error TS1234: message`; the unit is the top folder.
57
+ for (const raw of text.split("\n")) {
58
+ const match = tscLine.exec(raw.trim())
59
+ if (match?.[1] === undefined || match[3] === undefined) continue
60
+ const file = match[1]
61
+ const top = file.split("/")
62
+ out.push(
63
+ Diagnostic.make({
64
+ file,
65
+ line: Number.parseInt(match[2] ?? "0", 10),
66
+ message: match[3],
67
+ unit: top.length > 2 ? `${top[0]}/${top[1]}` : (top[0] ?? file)
68
+ })
69
+ )
70
+ }
71
+ return out
72
+ }
53
73
  for (const raw of text.split("\n")) {
54
74
  const line = raw.trim()
55
75
  if (line.length === 0 || !line.startsWith("{")) continue
package/src/Pack.ts CHANGED
@@ -91,8 +91,31 @@ export interface Pack {
91
91
  * build, `- format: json | cargo` says how to read it. Present only in a
92
92
  * porting pack.
93
93
  */
94
+ /**
95
+ * `## Ledger` (ADR 0028): what `port-ledger` classifies. `- unit: <regex>`
96
+ * whose first capture group names a unit in a source file, `- classes: A,
97
+ * B, UNKNOWN`, `- question: <what to decide for each unit>`.
98
+ */
99
+ readonly ledger:
100
+ | { readonly unit: string; readonly classes: ReadonlyArray<string>; readonly question: string }
101
+ | undefined
102
+ /**
103
+ * `## Differential` (ADR 0028): what `port-tests` compares. `- tests: <regex>`
104
+ * over test files, `- legacy: <command with {{file}}>` run on the old
105
+ * build, `- target: <command with {{file}}>` on the new, `- timeout: <s>`.
106
+ */
107
+ readonly differential:
108
+ | {
109
+ readonly tests: string
110
+ readonly legacy: ReadonlyArray<string>
111
+ readonly target: ReadonlyArray<string>
112
+ readonly timeoutSeconds: number
113
+ }
114
+ | undefined
115
+ /** `## Audit` (ADR 0028): `- dimensions: a, b, c` the rulebook auditors take; default list in the flow. */
116
+ readonly audit: ReadonlyArray<string> | undefined
94
117
  readonly diagnostics:
95
- | { readonly command: ReadonlyArray<string>; readonly format: "json" | "cargo" }
118
+ | { readonly command: ReadonlyArray<string>; readonly format: "json" | "cargo" | "tsc" }
96
119
  | undefined
97
120
  readonly dir: string
98
121
  readonly gate: (name: string) => ReadonlyArray<string> | undefined
@@ -329,8 +352,33 @@ export const loadPack = Effect.fn("@llm4ts/flow/Pack.load")(function* (
329
352
  format:
330
353
  diagnosticsValues.format?.toLowerCase() === "cargo"
331
354
  ? ("cargo" as const)
332
- : ("json" as const)
355
+ : diagnosticsValues.format?.toLowerCase() === "tsc"
356
+ ? ("tsc" as const)
357
+ : ("json" as const)
358
+ }
359
+ const ledgerValues = namedItems(section(manifest.sections, "Ledger"))
360
+ const ledger =
361
+ ledgerValues.unit === undefined
362
+ ? undefined
363
+ : {
364
+ unit: ledgerValues.unit,
365
+ classes: commaList(ledgerValues.classes),
366
+ question: ledgerValues.question ?? "Classify this unit."
367
+ }
368
+ const differentialValues = namedItems(section(manifest.sections, "Differential"))
369
+ const differential =
370
+ differentialValues.tests === undefined ||
371
+ differentialValues.legacy === undefined ||
372
+ differentialValues.target === undefined
373
+ ? undefined
374
+ : {
375
+ tests: differentialValues.tests,
376
+ legacy: differentialValues.legacy.split(/\s+/),
377
+ target: differentialValues.target.split(/\s+/),
378
+ timeoutSeconds: Number.parseInt(differentialValues.timeout ?? "", 10) || 120
333
379
  }
380
+ const auditBody = section(manifest.sections, "Audit")
381
+ const audit = auditBody === undefined ? undefined : commaList(namedItems(auditBody).dimensions)
334
382
  const oracleValues = namedItems(section(manifest.sections, "Oracle"))
335
383
  const oracle: OracleRules | undefined =
336
384
  section(manifest.sections, "Oracle") === undefined
@@ -407,6 +455,9 @@ export const loadPack = Effect.fn("@llm4ts/flow/Pack.load")(function* (
407
455
  reviewRules,
408
456
  target: fields["target"],
409
457
  comment: fields["comment"],
458
+ ledger,
459
+ differential,
460
+ audit,
410
461
  diagnostics,
411
462
  dir: directory,
412
463
  gate: (name) => gates[name],
package/src/Port.ts CHANGED
@@ -3,6 +3,7 @@
3
3
  // draft ends with, and the pilot report. Pure; the flows own the seats.
4
4
  import { basename, dirname, extname } from "node:path"
5
5
  import * as Schema from "effect/Schema"
6
+ import type { ReviewResult } from "./Review.ts"
6
7
  import { DraftApprovalMarker } from "./Approval.ts"
7
8
  import type { QueueOutcome } from "./WorkQueue.ts"
8
9
 
@@ -176,3 +177,253 @@ export const asAddedFileDiff = (path: string, content: string): string => {
176
177
  ...lines.map((line) => `+${line}`)
177
178
  ].join("\n")
178
179
  }
180
+
181
+ // ---- Ledger (port-ledger) --------------------------------------------------------------
182
+
183
+ /** One classified unit of a source file, with the line that proves it. */
184
+ export class LedgerRow extends Schema.Class<LedgerRow>("LedgerRow")({
185
+ file: Schema.String,
186
+ unit: Schema.String,
187
+ class: Schema.String,
188
+ /** `file:line` of the statement the classification rests on. */
189
+ evidence: Schema.String,
190
+ confidence: PortConfidence
191
+ }) {}
192
+
193
+ const tsvEscape = (value: string): string => value.replaceAll("\t", " ").replaceAll("\n", " ")
194
+
195
+ /** The ledger as a TSV with a header: `file unit class evidence confidence`. */
196
+ export const renderLedger = (rows: ReadonlyArray<LedgerRow>): string =>
197
+ [
198
+ "file\tunit\tclass\tevidence\tconfidence",
199
+ ...rows.map((row) =>
200
+ [row.file, row.unit, row.class, row.evidence, row.confidence].map(tsvEscape).join("\t")
201
+ )
202
+ ].join("\n") + "\n"
203
+
204
+ export const parseLedger = (text: string): ReadonlyArray<LedgerRow> =>
205
+ text
206
+ .split(/\r?\n/u)
207
+ .slice(1)
208
+ .filter((line) => line.trim().length > 0)
209
+ .flatMap((line) => {
210
+ const [file, unit, klass, evidence, confidence] = line.split("\t")
211
+ return file === undefined || unit === undefined || klass === undefined
212
+ ? []
213
+ : [
214
+ LedgerRow.make({
215
+ file,
216
+ unit,
217
+ class: klass,
218
+ evidence: evidence ?? "",
219
+ confidence:
220
+ confidence === "high" || confidence === "medium" || confidence === "low"
221
+ ? confidence
222
+ : "low"
223
+ })
224
+ ]
225
+ })
226
+
227
+ /** The rows of one source file, rendered for its implementer ("trust the table over local guessing"). */
228
+ export const ledgerRowsFor = (rows: ReadonlyArray<LedgerRow>, file: string): string | undefined => {
229
+ const mine = rows.filter((row) => row.file === file)
230
+ return mine.length === 0
231
+ ? undefined
232
+ : mine
233
+ .map((row) => `- ${row.unit}: ${row.class} (${row.evidence}; ${row.confidence})`)
234
+ .join("\n")
235
+ }
236
+
237
+ /** The units a pack's `## Ledger` regex names in a source file, each once. */
238
+ export const unitsIn = (text: string, unitRegex: string): ReadonlyArray<string> => {
239
+ const pattern = new RegExp(unitRegex, "gmu")
240
+ const units: Array<string> = []
241
+ for (let match = pattern.exec(text); match !== null; match = pattern.exec(text)) {
242
+ const name = match.slice(1).find((group) => group !== undefined && group.length > 0)
243
+ if (name !== undefined && !units.includes(name)) units.push(name)
244
+ if (match[0].length === 0) pattern.lastIndex += 1
245
+ }
246
+ return units
247
+ }
248
+
249
+ // ---- Refutes (port-guide, port-ledger) ----------------------------------------------------
250
+
251
+ /** A claim stands unless a majority of its refuters reject it (the Bun port's 3-vote refute). */
252
+ export const standsAfterRefutes = (votes: ReadonlyArray<boolean>): boolean => {
253
+ const rejected = votes.filter((holds) => !holds).length
254
+ return votes.length === 0 ? true : rejected * 2 < votes.length
255
+ }
256
+
257
+ // ---- Guide audit (port-guide) -------------------------------------------------------------
258
+
259
+ export class GuideFinding extends Schema.Class<GuideFinding>("GuideFinding")({
260
+ dimension: Schema.String,
261
+ finding: Schema.String,
262
+ /** A rulebook line, a sample source line, or a draft line that shows it. */
263
+ evidence: Schema.String,
264
+ /** The rule the rulebook should gain or change, one line. */
265
+ proposedRule: Schema.String
266
+ }) {}
267
+
268
+ export const defaultAuditDimensions: ReadonlyArray<string> = [
269
+ "error model",
270
+ "ownership and memory",
271
+ "collections and strings",
272
+ "control flow and compile-time constructs",
273
+ "API shape and naming",
274
+ "concurrency and resources",
275
+ "build, test and tooling idioms",
276
+ "what not to translate"
277
+ ]
278
+
279
+ export const renderGuideAudit = (facts: {
280
+ readonly pack: string
281
+ readonly kept: ReadonlyArray<GuideFinding>
282
+ readonly dropped: ReadonlyArray<GuideFinding>
283
+ readonly trial: ReadonlyArray<string>
284
+ readonly sample: ReadonlyArray<string>
285
+ }): string =>
286
+ [
287
+ `# Rulebook audit — pack ${facts.pack}`,
288
+ "",
289
+ `- sample files: ${facts.sample.join(", ") || "none"}`,
290
+ `- findings kept after the refute: ${facts.kept.length}; dropped: ${facts.dropped.length}`,
291
+ "",
292
+ ...(facts.kept.length === 0
293
+ ? ["No finding survived: the rulebook stands as written.", ""]
294
+ : [
295
+ "## Proposed rules",
296
+ "",
297
+ "Each is an `append-rule` to `prompts/porting.md`, applied on the next run once approved.",
298
+ "",
299
+ ...facts.kept.flatMap((finding) => [
300
+ `### ${finding.dimension}`,
301
+ "",
302
+ `**Finding.** ${finding.finding.trim()}`,
303
+ "",
304
+ `**Evidence.** ${finding.evidence.trim()}`,
305
+ "",
306
+ "```diff",
307
+ `+ - ${finding.proposedRule.trim()}`,
308
+ "```",
309
+ ""
310
+ ])
311
+ ]),
312
+ ...(facts.trial.length === 0
313
+ ? []
314
+ : [
315
+ "## Trial port: where the native port and the rulebook port differ",
316
+ "",
317
+ ...facts.trial.map((line) => `- ${line}`),
318
+ ""
319
+ ]),
320
+ ...(facts.dropped.length === 0
321
+ ? []
322
+ : [
323
+ "## Dropped by the refute",
324
+ "",
325
+ ...facts.dropped.map((finding) => `- ${finding.dimension}: ${finding.finding.trim()}`),
326
+ ""
327
+ ]),
328
+ DraftApprovalMarker,
329
+ ""
330
+ ].join("\n")
331
+
332
+ // ---- Differential (port-tests) ------------------------------------------------------------
333
+
334
+ export const DiffClass = Schema.Literals(["pass", "diverge", "crash", "hang", "legacy-red"])
335
+ export type DiffClass = typeof DiffClass.Type
336
+
337
+ export class DiffVerdict extends Schema.Class<DiffVerdict>("DiffVerdict")({
338
+ file: Schema.String,
339
+ class: DiffClass,
340
+ legacyPassed: Schema.optionalKey(Schema.Int),
341
+ targetPassed: Schema.optionalKey(Schema.Int),
342
+ detail: Schema.String
343
+ }) {}
344
+
345
+ /**
346
+ * The Bun test swarm's verdict: a test file passes when the target exits 0
347
+ * AND its pass count equals the legacy baseline's (when both are known). A
348
+ * legacy run that is red itself is no evidence about the target.
349
+ */
350
+ export const diffVerdict = (
351
+ file: string,
352
+ legacy: ReviewResult,
353
+ target: ReviewResult,
354
+ roots: ReadonlyArray<string> = []
355
+ ): DiffVerdict => {
356
+ const strip = (text: string): string =>
357
+ roots.reduce((acc, root) => acc.replaceAll(`${root}/`, ""), text)
358
+ const legacyPassed = legacy.passed
359
+ const targetPassed = target.passed
360
+ const counts = {
361
+ ...(legacyPassed === undefined ? {} : { legacyPassed }),
362
+ ...(targetPassed === undefined ? {} : { targetPassed })
363
+ }
364
+ if (!legacy.isClean) {
365
+ return DiffVerdict.make({
366
+ file,
367
+ class: "legacy-red",
368
+ ...counts,
369
+ detail: "the legacy build fails this file too; nothing to compare"
370
+ })
371
+ }
372
+ const gate = target.issues.find((issue) => issue.gateClass !== undefined)
373
+ if (gate?.gateClass === "hang") {
374
+ return DiffVerdict.make({ file, class: "hang", ...counts, detail: strip(gate.description) })
375
+ }
376
+ if (gate?.gateClass === "crash") {
377
+ return DiffVerdict.make({ file, class: "crash", ...counts, detail: strip(gate.description) })
378
+ }
379
+ if (!target.isClean) {
380
+ return DiffVerdict.make({
381
+ file,
382
+ class: "diverge",
383
+ ...counts,
384
+ detail: strip(target.issues.map((issue) => issue.description).join("\n"))
385
+ })
386
+ }
387
+ if (legacyPassed !== undefined && targetPassed !== undefined && targetPassed !== legacyPassed) {
388
+ return DiffVerdict.make({
389
+ file,
390
+ class: "diverge",
391
+ ...counts,
392
+ detail: `${targetPassed} test(s) pass on the target, ${legacyPassed} on the legacy build`
393
+ })
394
+ }
395
+ return DiffVerdict.make({ file, class: "pass", ...counts, detail: "" })
396
+ }
397
+
398
+ /** The `.diag` a fixer reads as its only runtime evidence. */
399
+ export const renderDiag = (verdict: DiffVerdict, tailChars = 4_000): string =>
400
+ [
401
+ `# ${verdict.file}: ${verdict.class}`,
402
+ "",
403
+ `- legacy passed: ${verdict.legacyPassed ?? "unknown"}; target passed: ${verdict.targetPassed ?? "unknown"}`,
404
+ "",
405
+ "## Target output (tail)",
406
+ "",
407
+ "```",
408
+ verdict.detail.length > tailChars ? `…${verdict.detail.slice(-tailChars)}` : verdict.detail,
409
+ "```",
410
+ ""
411
+ ].join("\n")
412
+
413
+ export const renderDifferentialReport = (
414
+ round: number,
415
+ verdicts: ReadonlyArray<DiffVerdict>
416
+ ): string => {
417
+ const by = (klass: DiffClass) => verdicts.filter((verdict) => verdict.class === klass)
418
+ return [
419
+ `# Differential tests, round ${round}`,
420
+ "",
421
+ `- files: ${verdicts.length}; pass ${by("pass").length}, diverge ${by("diverge").length}, crash ${by("crash").length}, hang ${by("hang").length}, legacy-red ${by("legacy-red").length}`,
422
+ "",
423
+ ...(["diverge", "crash", "hang"] as const).flatMap((klass) =>
424
+ by(klass).length === 0
425
+ ? []
426
+ : [`## ${klass}`, "", ...by(klass).map((verdict) => `- ${verdict.file}`), ""]
427
+ )
428
+ ].join("\n")
429
+ }
package/src/Timing.ts CHANGED
@@ -98,6 +98,15 @@ const replyContent = (content: OtelContent, text: string): Record<string, unknow
98
98
  ])
99
99
  }
100
100
 
101
+ /** A structured reply as text for `output.value`; empty when it does not serialize. */
102
+ const rendered = (value: unknown): string => {
103
+ try {
104
+ return typeof value === "string" ? value : (JSON.stringify(value) ?? "")
105
+ } catch {
106
+ return ""
107
+ }
108
+ }
109
+
101
110
  const count = (
102
111
  counter: Metric.Counter<number>,
103
112
  attributes: Record<string, string>,
@@ -199,22 +208,26 @@ export const timeEffect = <A, E, R>(
199
208
 
200
209
  /**
201
210
  * `timeEffect` under an LLM span named for the role; `usageOf` reads what
202
- * the result says about tokens and model, when it says anything.
211
+ * the result says about tokens and model, when it says anything, and
212
+ * `replyOf` what the reply was, for the span's content when it may carry any.
203
213
  */
204
214
  const tracedEffect = <A, E, R>(
205
215
  events: FlowEventsShape,
206
216
  label: string,
207
217
  options: TimedSeatOptions,
218
+ prompt: string,
208
219
  effect: Effect.Effect<A, E, R>,
209
220
  timed: (ms: number, failed: boolean, role: string | undefined) => Timed,
210
221
  usageOf: (value: A) => {
211
222
  readonly usage: TokenUsage | undefined
212
223
  readonly model: string | undefined
213
- }
224
+ },
225
+ replyOf: (value: A) => string = rendered
214
226
  ): Effect.Effect<A, E, R> =>
215
227
  Effect.gen(function* () {
216
228
  const role = (yield* TimedRole) ?? label
217
229
  const executor = options.executor === undefined ? undefined : yield* options.executor
230
+ const content = options.content ?? "off"
218
231
  return yield* withKindSpan(
219
232
  role,
220
233
  {
@@ -222,7 +235,8 @@ const tracedEffect = <A, E, R>(
222
235
  attributes: {
223
236
  [attr.role]: role,
224
237
  [attr.operation]: "generate",
225
- ...(executor === undefined ? {} : { [attr.executor]: executor })
238
+ ...(executor === undefined ? {} : { [attr.executor]: executor }),
239
+ ...promptContent(content, [Message.make({ role: "User", content: prompt })])
226
240
  }
227
241
  },
228
242
  timeEffect(events, effect, timed).pipe(
@@ -233,9 +247,10 @@ const tracedEffect = <A, E, R>(
233
247
  const settled = settleUsage(known.usage, known.model, 0, 0, undefined)
234
248
  return Effect.all(
235
249
  [
236
- Effect.annotateCurrentSpan(
237
- usageAttributes(settled.model, settled.usage, settled.estimated)
238
- ),
250
+ Effect.annotateCurrentSpan({
251
+ ...usageAttributes(settled.model, settled.usage, settled.estimated),
252
+ ...(Exit.isSuccess(exit) ? replyContent(content, replyOf(exit.value)) : {})
253
+ }),
239
254
  recordCall(role, executor, settled, Exit.isFailure(exit))
240
255
  ],
241
256
  { discard: true }
@@ -427,12 +442,21 @@ export const timedSeat = (
427
442
  executeStreamWithHistory: (messages) =>
428
443
  timedStream(events, label, options, messages, service.executeStreamWithHistory(messages)),
429
444
  executeWithTools: (text, tools) =>
430
- tracedEffect(events, label, options, service.executeWithTools(text, tools), model, nothing),
445
+ tracedEffect(
446
+ events,
447
+ label,
448
+ options,
449
+ text,
450
+ service.executeWithTools(text, tools),
451
+ model,
452
+ nothing
453
+ ),
431
454
  executeStructured: (text, schema, jsonSchema) =>
432
455
  tracedEffect(
433
456
  events,
434
457
  label,
435
458
  options,
459
+ text,
436
460
  service.executeStructured(text, schema, jsonSchema),
437
461
  model,
438
462
  nothing
@@ -442,17 +466,19 @@ export const timedSeat = (
442
466
  events,
443
467
  label,
444
468
  options,
469
+ text,
445
470
  service.executeStructuredWithUsage(text, schema, jsonSchema),
446
471
  model,
447
- ([, usage, modelName]) => ({ usage, model: modelName })
472
+ ([, usage, modelName]) => ({ usage, model: modelName }),
473
+ ([value]) => rendered(value)
448
474
  ),
449
475
  scoreLabels: (text, labels) =>
450
- tracedEffect(events, label, options, service.scoreLabels(text, labels), model, nothing),
476
+ tracedEffect(events, label, options, text, service.scoreLabels(text, labels), model, nothing),
451
477
  ...(batched === undefined
452
478
  ? {}
453
479
  : {
454
480
  scoreLabelSequence: (text: string, labelSets: ReadonlyArray<ReadonlyArray<string>>) =>
455
- tracedEffect(events, label, options, batched(text, labelSets), model, nothing)
481
+ tracedEffect(events, label, options, text, batched(text, labelSets), model, nothing)
456
482
  }),
457
483
  isAvailable: service.isAvailable
458
484
  }