@effect-uai/core 0.4.0 → 0.5.1

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 (124) hide show
  1. package/dist/{AiError-csR8Bhxx.d.mts → AiError-CAX_48RU.d.mts} +2 -2
  2. package/dist/{AiError-csR8Bhxx.d.mts.map → AiError-CAX_48RU.d.mts.map} +1 -1
  3. package/dist/{Image-DxyXqzAM.d.mts → Image-HNmMpMTh.d.mts} +4 -4
  4. package/dist/{Image-DxyXqzAM.d.mts.map → Image-HNmMpMTh.d.mts.map} +1 -1
  5. package/dist/{Items-Hg5AsYxl.d.mts → Items-BH8xUkoR.d.mts} +3 -3
  6. package/dist/{Items-Hg5AsYxl.d.mts.map → Items-BH8xUkoR.d.mts.map} +1 -1
  7. package/dist/{StructuredFormat-Cl41C56K.d.mts → StructuredFormat-BbN4dosH.d.mts} +11 -4
  8. package/dist/StructuredFormat-BbN4dosH.d.mts.map +1 -0
  9. package/dist/{Tool-B8B5qVEy.d.mts → Tool-87ViKCCO.d.mts} +20 -4
  10. package/dist/Tool-87ViKCCO.d.mts.map +1 -0
  11. package/dist/Turn-0CwCAyVe.d.mts +388 -0
  12. package/dist/Turn-0CwCAyVe.d.mts.map +1 -0
  13. package/dist/domain/AiError.d.mts +1 -1
  14. package/dist/domain/AiError.mjs +1 -1
  15. package/dist/domain/AiError.mjs.map +1 -1
  16. package/dist/domain/Image.d.mts +1 -1
  17. package/dist/domain/Items.d.mts +1 -1
  18. package/dist/domain/Items.mjs +1 -1
  19. package/dist/domain/Items.mjs.map +1 -1
  20. package/dist/domain/Turn.d.mts +2 -2
  21. package/dist/domain/Turn.mjs +22 -4
  22. package/dist/domain/Turn.mjs.map +1 -1
  23. package/dist/domain/Turn.test.d.mts +1 -0
  24. package/dist/domain/Turn.test.mjs +136 -0
  25. package/dist/domain/Turn.test.mjs.map +1 -0
  26. package/dist/embedding-model/Embedding.d.mts +15 -3
  27. package/dist/embedding-model/Embedding.d.mts.map +1 -1
  28. package/dist/embedding-model/Embedding.mjs.map +1 -1
  29. package/dist/embedding-model/EmbeddingModel.d.mts +33 -17
  30. package/dist/embedding-model/EmbeddingModel.d.mts.map +1 -1
  31. package/dist/embedding-model/EmbeddingModel.mjs.map +1 -1
  32. package/dist/embedding-model/EmbeddingModel.test.d.mts +1 -0
  33. package/dist/embedding-model/EmbeddingModel.test.mjs +59 -0
  34. package/dist/embedding-model/EmbeddingModel.test.mjs.map +1 -0
  35. package/dist/index.d.mts +6 -6
  36. package/dist/language-model/LanguageModel.d.mts +30 -8
  37. package/dist/language-model/LanguageModel.d.mts.map +1 -1
  38. package/dist/language-model/LanguageModel.mjs +33 -3
  39. package/dist/language-model/LanguageModel.mjs.map +1 -1
  40. package/dist/language-model/LanguageModel.test.d.mts +1 -0
  41. package/dist/language-model/LanguageModel.test.mjs +143 -0
  42. package/dist/language-model/LanguageModel.test.mjs.map +1 -0
  43. package/dist/loop/Loop.d.mts +94 -11
  44. package/dist/loop/Loop.d.mts.map +1 -1
  45. package/dist/loop/Loop.mjs +92 -26
  46. package/dist/loop/Loop.mjs.map +1 -1
  47. package/dist/loop/Loop.test.mjs +171 -3
  48. package/dist/loop/Loop.test.mjs.map +1 -1
  49. package/dist/music-generator/MusicGenerator.d.mts +1 -1
  50. package/dist/observability/Metrics.d.mts +1 -1
  51. package/dist/observability/Metrics.mjs +1 -1
  52. package/dist/observability/Metrics.mjs.map +1 -1
  53. package/dist/speech-synthesizer/SpeechSynthesizer.d.mts +1 -1
  54. package/dist/streaming/JSONL.d.mts +1 -1
  55. package/dist/streaming/JSONL.d.mts.map +1 -1
  56. package/dist/streaming/JSONL.mjs +7 -12
  57. package/dist/streaming/JSONL.mjs.map +1 -1
  58. package/dist/structured-format/StructuredFormat.d.mts +2 -2
  59. package/dist/structured-format/StructuredFormat.mjs +9 -1
  60. package/dist/structured-format/StructuredFormat.mjs.map +1 -1
  61. package/dist/structured-format/StructuredFormat.test.d.mts +1 -0
  62. package/dist/structured-format/StructuredFormat.test.mjs +70 -0
  63. package/dist/structured-format/StructuredFormat.test.mjs.map +1 -0
  64. package/dist/testing/MockMusicGenerator.d.mts.map +1 -1
  65. package/dist/testing/MockMusicGenerator.mjs +2 -2
  66. package/dist/testing/MockMusicGenerator.mjs.map +1 -1
  67. package/dist/testing/MockProvider.d.mts +23 -18
  68. package/dist/testing/MockProvider.d.mts.map +1 -1
  69. package/dist/testing/MockProvider.mjs +56 -72
  70. package/dist/testing/MockProvider.mjs.map +1 -1
  71. package/dist/testing/MockSpeechSynthesizer.d.mts.map +1 -1
  72. package/dist/testing/MockSpeechSynthesizer.mjs +2 -2
  73. package/dist/testing/MockSpeechSynthesizer.mjs.map +1 -1
  74. package/dist/testing/MockTranscriber.d.mts.map +1 -1
  75. package/dist/testing/MockTranscriber.mjs +2 -2
  76. package/dist/testing/MockTranscriber.mjs.map +1 -1
  77. package/dist/tool/HistoryCheck.d.mts +1 -1
  78. package/dist/tool/Outcome.d.mts +1 -1
  79. package/dist/tool/Resolvers.d.mts +65 -8
  80. package/dist/tool/Resolvers.d.mts.map +1 -1
  81. package/dist/tool/Resolvers.mjs +8 -12
  82. package/dist/tool/Resolvers.mjs.map +1 -1
  83. package/dist/tool/Resolvers.test.mjs +6 -5
  84. package/dist/tool/Resolvers.test.mjs.map +1 -1
  85. package/dist/tool/Tool.d.mts +2 -2
  86. package/dist/tool/Tool.mjs +18 -1
  87. package/dist/tool/Tool.mjs.map +1 -1
  88. package/dist/tool/Tool.test.d.mts +1 -0
  89. package/dist/tool/Tool.test.mjs +66 -0
  90. package/dist/tool/Tool.test.mjs.map +1 -0
  91. package/dist/tool/Toolkit.d.mts +4 -6
  92. package/dist/tool/Toolkit.d.mts.map +1 -1
  93. package/dist/tool/Toolkit.mjs +14 -43
  94. package/dist/tool/Toolkit.mjs.map +1 -1
  95. package/dist/transcriber/Transcriber.d.mts +1 -1
  96. package/package.json +1 -1
  97. package/src/domain/AiError.ts +1 -1
  98. package/src/domain/Items.ts +1 -1
  99. package/src/domain/Turn.test.ts +141 -0
  100. package/src/domain/Turn.ts +50 -43
  101. package/src/embedding-model/Embedding.ts +23 -0
  102. package/src/embedding-model/EmbeddingModel.test.ts +92 -0
  103. package/src/embedding-model/EmbeddingModel.ts +30 -20
  104. package/src/language-model/LanguageModel.test.ts +170 -0
  105. package/src/language-model/LanguageModel.ts +64 -1
  106. package/src/loop/Loop.test.ts +256 -3
  107. package/src/loop/Loop.ts +225 -49
  108. package/src/observability/Metrics.ts +1 -1
  109. package/src/streaming/JSONL.ts +9 -18
  110. package/src/structured-format/StructuredFormat.test.ts +105 -0
  111. package/src/structured-format/StructuredFormat.ts +14 -1
  112. package/src/testing/MockMusicGenerator.ts +4 -6
  113. package/src/testing/MockProvider.ts +126 -105
  114. package/src/testing/MockSpeechSynthesizer.ts +4 -6
  115. package/src/testing/MockTranscriber.ts +4 -6
  116. package/src/tool/Resolvers.test.ts +8 -5
  117. package/src/tool/Resolvers.ts +17 -19
  118. package/src/tool/Tool.test.ts +105 -0
  119. package/src/tool/Tool.ts +20 -0
  120. package/src/tool/Toolkit.ts +49 -50
  121. package/dist/StructuredFormat-Cl41C56K.d.mts.map +0 -1
  122. package/dist/Tool-B8B5qVEy.d.mts.map +0 -1
  123. package/dist/Turn-7geUcKsf.d.mts +0 -194
  124. package/dist/Turn-7geUcKsf.d.mts.map +0 -1
@@ -1,4 +1,4 @@
1
- import { Array as Arr, Effect, Function, Ref, Stream } from "effect"
1
+ import { Array as Arr, Effect, Function, Ref, Schema, Stream } from "effect"
2
2
  import * as Loop from "../loop/Loop.js"
3
3
  import type { FunctionCall } from "../domain/Items.js"
4
4
  import {
@@ -10,8 +10,8 @@ import {
10
10
  type Tool,
11
11
  type ToolDescriptor,
12
12
  } from "./Tool.js"
13
- import { type ToolResult, executionError, rejected } from "./Outcome.js"
14
- import type { ToolEvent } from "./ToolEvent.js"
13
+ import { ToolResult, executionError, rejected } from "./Outcome.js"
14
+ import { ToolEvent } from "./ToolEvent.js"
15
15
  import { isOutput } from "./ToolEvent.js"
16
16
 
17
17
  export type AnyTool = Tool<string, any, any, any>
@@ -52,7 +52,12 @@ export const toDescriptors = <Tools extends ReadonlyArray<AnyTool>>(
52
52
  target: "draft-2020-12",
53
53
  })
54
54
  return tool.strict !== undefined
55
- ? { name: tool.name, description: tool.description, inputSchema, strict: tool.strict }
55
+ ? {
56
+ name: tool.name,
57
+ description: tool.description,
58
+ inputSchema,
59
+ strict: tool.strict,
60
+ }
56
61
  : { name: tool.name, description: tool.description, inputSchema }
57
62
  })
58
63
 
@@ -78,17 +83,12 @@ export const executeAll = <Tools extends ReadonlyArray<AnyKindTool<any>>>(
78
83
  }),
79
84
  )
80
85
 
81
- export const outputEvent = (result: ToolResult): ToolEvent => ({ _tag: "Output", result })
82
-
83
- export const outputEvents = (results: ReadonlyArray<ToolResult>): Stream.Stream<ToolEvent> =>
84
- Stream.fromIterable(results.map(outputEvent))
85
-
86
- const valueResult = (call: FunctionCall, tool: string, value: unknown): ToolResult => ({
87
- _tag: "Value",
88
- call_id: call.call_id,
89
- tool,
90
- value,
91
- })
86
+ const valueResult = (call: FunctionCall, tool: string, value: unknown): ToolResult =>
87
+ ToolResult.Value({
88
+ call_id: call.call_id,
89
+ tool,
90
+ value,
91
+ })
92
92
 
93
93
  const runOne = <R>(
94
94
  tools: ReadonlyArray<AnyKindTool<R>>,
@@ -98,25 +98,27 @@ const runOne = <R>(
98
98
  if (tool === undefined) {
99
99
  // Graceful: emit a synthetic Failure so OTHER calls in this turn
100
100
  // still execute. LLMs hallucinate tool names; MCP tools come and go.
101
- return Stream.succeed<ToolEvent>({
102
- _tag: "Output",
103
- result: rejected(call, "unknown_tool", `No tool registered with name "${call.name}"`),
104
- })
101
+ return Stream.succeed(
102
+ ToolEvent.Output({
103
+ result: rejected(call, "unknown_tool", `No tool registered with name "${call.name}"`),
104
+ }),
105
+ )
105
106
  }
106
107
  if (isStreamingTool(tool)) return runStreaming(tool, call)
107
108
  return runPlain(tool, call)
108
109
  }
109
110
 
111
+ const parseJsonUnknown = Schema.decodeUnknownEffect(Schema.fromJsonString(Schema.Unknown))
112
+
110
113
  const runPlain = <R>(
111
114
  tool: AnyPlainTool<R>,
112
115
  call: FunctionCall,
113
116
  ): Stream.Stream<ToolEvent, never, R> =>
114
117
  Stream.fromEffect(
115
118
  Effect.gen(function* () {
116
- const parsed = yield* Effect.try({
117
- try: () => JSON.parse(call.arguments) as unknown,
118
- catch: () => "json_parse_error" as const,
119
- })
119
+ const parsed = yield* parseJsonUnknown(call.arguments).pipe(
120
+ Effect.mapError(() => "json_parse_error" as const),
121
+ )
120
122
  const validated = yield* Effect.tryPromise({
121
123
  try: () => Promise.resolve(tool.inputSchema["~standard"].validate(parsed)),
122
124
  catch: () => "validation_threw" as const,
@@ -128,7 +130,7 @@ const runPlain = <R>(
128
130
  return valueResult(call, tool.name, output)
129
131
  }).pipe(
130
132
  Effect.catchCause(() => Effect.succeed(executionError(call, "Tool execution failed"))),
131
- Effect.map((result) => ({ _tag: "Output", result }) satisfies ToolEvent),
133
+ Effect.map((result) => ToolEvent.Output({ result })),
132
134
  ),
133
135
  )
134
136
 
@@ -138,19 +140,19 @@ const runStreaming = <R>(
138
140
  ): Stream.Stream<ToolEvent, never, R> =>
139
141
  Stream.unwrap(
140
142
  Effect.gen(function* () {
141
- const parsed = yield* Effect.try({
142
- try: () => JSON.parse(call.arguments) as unknown,
143
- catch: () => "json_parse_error" as const,
144
- })
143
+ const parsed = yield* parseJsonUnknown(call.arguments).pipe(
144
+ Effect.mapError(() => "json_parse_error" as const),
145
+ )
145
146
  const validated = yield* Effect.tryPromise({
146
147
  try: () => Promise.resolve(tool.inputSchema["~standard"].validate(parsed)),
147
148
  catch: () => "validation_threw" as const,
148
149
  })
149
150
  if (validated.issues !== undefined) {
150
- return Stream.succeed<ToolEvent>({
151
- _tag: "Output",
152
- result: executionError(call, "Tool input failed schema validation"),
153
- })
151
+ return Stream.succeed<ToolEvent>(
152
+ ToolEvent.Output({
153
+ result: executionError(call, "Tool input failed schema validation"),
154
+ }),
155
+ )
154
156
  }
155
157
 
156
158
  // Real-time: tap each event into a Ref as it flows; emit one
@@ -159,24 +161,20 @@ const runStreaming = <R>(
159
161
  const ref = yield* Ref.make<Array<unknown>>([])
160
162
  const intermediates = tool.run(validated.value).pipe(
161
163
  Stream.tap((event) => Ref.update(ref, Arr.append(event))),
162
- Stream.map(
163
- (data) =>
164
- ({
165
- _tag: "Intermediate",
166
- call_id: call.call_id,
167
- tool: tool.name,
168
- data,
169
- }) satisfies ToolEvent,
164
+ Stream.map((data) =>
165
+ ToolEvent.Intermediate({
166
+ call_id: call.call_id,
167
+ tool: tool.name,
168
+ data,
169
+ }),
170
170
  ),
171
171
  )
172
172
  const output = Stream.fromEffect(
173
173
  Ref.get(ref).pipe(
174
- Effect.map(
175
- (events) =>
176
- ({
177
- _tag: "Output",
178
- result: valueResult(call, tool.name, tool.finalize(events)),
179
- }) satisfies ToolEvent,
174
+ Effect.map((events) =>
175
+ ToolEvent.Output({
176
+ result: valueResult(call, tool.name, tool.finalize(events)),
177
+ }),
180
178
  ),
181
179
  ),
182
180
  )
@@ -184,10 +182,11 @@ const runStreaming = <R>(
184
182
  }),
185
183
  ).pipe(
186
184
  Stream.catchCause(() =>
187
- Stream.succeed<ToolEvent>({
188
- _tag: "Output",
189
- result: executionError(call, "Tool execution failed"),
190
- }),
185
+ Stream.succeed(
186
+ ToolEvent.Output({
187
+ result: executionError(call, "Tool execution failed"),
188
+ }),
189
+ ),
191
190
  ),
192
191
  )
193
192
 
@@ -1 +0,0 @@
1
- {"version":3,"file":"StructuredFormat-Cl41C56K.d.mts","names":[],"sources":["../src/structured-format/StructuredFormat.ts"],"mappings":";;;;;;;;;;;;;;;KAaY,gBAAA,qBAAqC,gBAAA,UAA0B,MAAA,IACzE,oBAAA,UAA8B,MAAA;;;;;;KAOpB,gBAAA;EAAA,SACD,IAAA;EAAA,SACA,WAAA;EAAA,SACA,MAAA,EAAQ,gBAAA,CAAiB,CAAA;EAXxB;;;;EAAA,SAgBD,MAAA;AAAA;;KAIC,WAAA;EAAA,SACD,IAAA,EAAM,aAAA;EAAA,SACN,OAAA;AAAA;AAAA,cACV,0BAAA;;;;;AAfD;;cAyBa,qBAAA,SAA8B,0BAAA;EAAA,SAChC,GAAA;EAAA,SACA,MAAA,EAAQ,aAAA,CAAc,WAAA;AAAA;AAAA,cAC5B,mBAAA;;;;;;AAhBL;cAsBa,cAAA,SAAuB,mBAAA;EAAA,SACzB,GAAA;EAAA,SACA,KAAA;AAAA;;;;AArBV;;cAiCY,gBAAA,aAA8B,MAAA,CAAO,KAAA,wBAChD,MAAA,EAAQ,CAAA,EACR,OAAA;EAAA,SACW,IAAA;EAAA,SACA,WAAA;EAAA,SACA,MAAA;AAAA,MAEV,gBAAA,CAAiB,CAAA;;;;;;cAyCP,MAAA,MACP,MAAA,EAAQ,gBAAA,CAAiB,CAAA,OAC5B,GAAA,cAAe,MAAA,CAAO,MAAA,CAAO,CAAA,EAAG,qBAAA;;;;;;cAoBtB,SAAA,MACP,MAAA,EAAQ,gBAAA,CAAiB,CAAA,OAC5B,GAAA,aAAc,MAAA,CAAO,MAAA,CAAO,CAAA,EAAG,cAAA,GAAiB,qBAAA;;;;;cAatC,eAAA,MACP,MAAA,EAAQ,gBAAA,CAAiB,CAAA,aAE3B,IAAA,EAAM,MAAA,CAAO,MAAA,SAAe,CAAA,EAAG,CAAA,MAC9B,MAAA,CAAO,MAAA,CAAO,CAAA,EAAG,CAAA,GAAI,cAAA,GAAiB,qBAAA,EAAuB,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tool-B8B5qVEy.d.mts","names":[],"sources":["../src/tool/Tool.ts"],"mappings":";;;;;;;;;cAE0E,cAAA;;;;;;cAG7D,SAAA,SAAkB,cAAA;;;;;;;;;;KAmBnB,eAAA,oBAAmC,gBAAA,UAA0B,KAAA,IACvE,oBAAA,UAA8B,KAAA;;;AAvB0C;;;cA8B7D,gBAAA,aAA8B,MAAA,CAAO,KAAA,wBAChD,MAAA,EAAQ,CAAA,KACP,CAAA,GAAI,eAAA,CAAgB,CAAA;AAAA,KAIX,IAAA;EAAA,SACD,IAAA,EAAM,IAAA;EAAA,SACN,WAAA;EAAA,SACA,WAAA,EAAa,eAAA,CAAgB,KAAA;EAAA,SAC7B,GAAA,GAAM,KAAA,EAAO,KAAA,KAAU,MAAA,CAAO,MAAA,CAAO,MAAA,WAAiB,CAAA;;;;;;;WAOtD,MAAA;AAAA;;;;;;KAQC,cAAA;EAAA,SACD,IAAA;EAAA,SACA,WAAA;EAAA,SACA,WAAA,EAAa,MAAA;EAAA,SACb,MAAA;AAAA;AAAA,cAGE,IAAA,kDACX,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,CAAA,MAC/B,IAAA,CAAK,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,CAAA;AAAA,KAWjB,aAAA;EAAA,SACD,KAAA;EAAA,SACA,IAAA,EAAM,IAAA;EAAA,SACN,WAAA;EAAA,SACA,WAAA,EAAa,eAAA,CAAgB,KAAA;EAAA,SAC7B,GAAA,GAAM,KAAA,EAAO,KAAA,KAAU,MAAA,CAAO,MAAA,CAAO,KAAA,WAAgB,CAAA;EAAA,SACrD,QAAA,GAAW,MAAA,EAAQ,aAAA,CAAc,KAAA,MAAW,MAAA;EAAA,SAC5C,MAAA;AAAA;AAAA,cAGE,SAAA,yDACX,IAAA,EAAM,IAAA,CAAK,aAAA,CAAc,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,CAAA,gBACpD,aAAA,CAAc,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,CAAA;AAAA,KAEjC,gBAAA,YAA4B,aAAA,wBAAqC,CAAA;AAAA,KACjE,YAAA,YAAwB,IAAA,mBAAuB,CAAA;AAAA,KAC/C,WAAA,YAAuB,gBAAA,CAAiB,CAAA,IAAK,YAAA,CAAa,CAAA;AAAA,cAEzD,eAAA,MAAsB,CAAA,EAAG,WAAA,CAAY,CAAA,MAAK,CAAA,IAAK,gBAAA,CAAiB,CAAA;;;;;;cAQhE,aAAA,MACX,KAAA,EAAO,aAAA,CAAc,WAAA,CAAY,CAAA,OAChC,aAAA,CAAc,cAAA;;;;;;cAkBJ,OAAA,0CACX,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,CAAA,GAChC,IAAA,EAAM,YAAA,KACL,MAAA,CAAO,MAAA,CAAO,kBAAA,EAAoB,SAAA,EAAW,CAAA"}
@@ -1,194 +0,0 @@
1
- import { i as ImageSource } from "./Image-DxyXqzAM.mjs";
2
- import { d as Item, g as Reasoning, o as FunctionCall, p as Message, s as FunctionCallOutput, x as Usage } from "./Items-Hg5AsYxl.mjs";
3
- import { i as StructuredFormat, n as JsonParseError, r as StructuredDecodeError } from "./StructuredFormat-Cl41C56K.mjs";
4
- import { Effect, Schema, Stream } from "effect";
5
- import * as _$effect_Types0 from "effect/Types";
6
- import * as _$effect_Cause0 from "effect/Cause";
7
-
8
- //#region src/domain/Turn.d.ts
9
- declare namespace Turn_d_exports {
10
- export { InteractionEvent, RefusalRejected, Turn, TurnEvent, appendTurn, assistantMessages, functionCalls, isTurnComplete, reasonings, textDeltas, toStructured };
11
- }
12
- /**
13
- * The result of a single LLM generation. A turn produces zero or more items
14
- * (typically one assistant message and zero or more function_call items)
15
- * and reports usage + a stop reason.
16
- */
17
- declare const Turn: Schema.Struct<{
18
- readonly items: Schema.$Array<Schema.Union<readonly [Schema.Struct<{
19
- readonly type: Schema.Literal<"message">;
20
- readonly role: Schema.Literals<readonly ["user", "assistant", "system"]>;
21
- readonly content: Schema.$Array<Schema.Union<readonly [Schema.Struct<{
22
- readonly type: Schema.Literal<"input_text">;
23
- readonly text: Schema.String;
24
- }>, Schema.Struct<{
25
- readonly type: Schema.Literal<"input_image">;
26
- readonly source: Schema.Schema<ImageSource>;
27
- }>, Schema.Struct<{
28
- readonly type: Schema.Literal<"output_text">;
29
- readonly text: Schema.String;
30
- readonly annotations: Schema.optional<Schema.$Array<Schema.Union<readonly [Schema.Struct<{
31
- readonly type: Schema.Literal<"url_citation">;
32
- readonly url: Schema.String;
33
- readonly start_index: Schema.Number;
34
- readonly end_index: Schema.Number;
35
- readonly title: Schema.String;
36
- }>, Schema.Struct<{
37
- readonly type: Schema.Literal<"file_citation">;
38
- readonly file_id: Schema.String;
39
- readonly index: Schema.Number;
40
- }>, Schema.Struct<{
41
- readonly type: Schema.Literal<"container_file_citation">;
42
- readonly container_id: Schema.String;
43
- readonly file_id: Schema.String;
44
- readonly start_index: Schema.Number;
45
- readonly end_index: Schema.Number;
46
- }>, Schema.Struct<{
47
- readonly type: Schema.Literal<"file_path">;
48
- readonly file_id: Schema.String;
49
- readonly index: Schema.Number;
50
- }>]>>>;
51
- }>, Schema.Struct<{
52
- readonly type: Schema.Literal<"refusal">;
53
- readonly text: Schema.String;
54
- }>]>>;
55
- readonly providerData: Schema.optional<Schema.Unknown>;
56
- }>, Schema.Struct<{
57
- readonly type: Schema.Literal<"function_call">;
58
- readonly call_id: Schema.String;
59
- readonly name: Schema.String;
60
- readonly arguments: Schema.String;
61
- readonly providerData: Schema.optional<Schema.Unknown>;
62
- }>, Schema.Struct<{
63
- readonly type: Schema.Literal<"function_call_output">;
64
- readonly call_id: Schema.String;
65
- readonly output: Schema.String;
66
- readonly providerData: Schema.optional<Schema.Unknown>;
67
- }>, Schema.Struct<{
68
- readonly type: Schema.Literal<"reasoning">;
69
- readonly id: Schema.optional<Schema.String>;
70
- readonly summary: Schema.optional<Schema.String>;
71
- readonly signature: Schema.optional<Schema.String>;
72
- readonly providerData: Schema.optional<Schema.Unknown>;
73
- }>]>>;
74
- readonly usage: Schema.Struct<{
75
- readonly input_tokens: Schema.optional<Schema.Number>;
76
- readonly output_tokens: Schema.optional<Schema.Number>;
77
- readonly total_tokens: Schema.optional<Schema.Number>;
78
- readonly input_tokens_details: Schema.optional<Schema.Struct<{
79
- readonly cached_tokens: Schema.optional<Schema.Number>;
80
- }>>;
81
- readonly output_tokens_details: Schema.optional<Schema.Struct<{
82
- readonly reasoning_tokens: Schema.optional<Schema.Number>;
83
- }>>;
84
- }>;
85
- readonly stop_reason: Schema.Literals<readonly ["stop", "tool_calls", "max_tokens", "refusal", "content_filter", "max_tool_calls"]>;
86
- }>;
87
- type Turn = typeof Turn.Type;
88
- /**
89
- * Canonical events emitted while a single turn is being generated. Most
90
- * variants are streaming deltas (text, reasoning, tool-call args); the
91
- * terminal `turn_complete` carries the assembled `Turn`. Lifecycle members
92
- * aren't deltas, hence the union name.
93
- */
94
- type TurnEvent = {
95
- readonly type: "text_delta";
96
- readonly text: string;
97
- } | {
98
- readonly type: "reasoning_delta";
99
- readonly text: string;
100
- /**
101
- * `trace` is the model's raw chain-of-thought; `summary` is a
102
- * model-written summary intended for display. OpenAI Responses emits
103
- * both as separate wire events; Anthropic and Gemini only emit
104
- * `trace`. Consumers who just want any reasoning text match once;
105
- * those who want only summaries filter `kind === "summary"`.
106
- */
107
- readonly kind: "trace" | "summary";
108
- }
109
- /**
110
- * The model declined to answer. `text` is the (streamed) explanation.
111
- * Distinct from the failure channel: a refusal is normal model output and
112
- * the stream still completes with `turn_complete`. OpenAI Responses emits
113
- * this; Anthropic surfaces refusals via `stop_reason`, and Gemini collapses
114
- * them into `finishReason: SAFETY` - both go without a `refusal_delta`.
115
- */
116
- | {
117
- readonly type: "refusal_delta";
118
- readonly text: string;
119
- } | {
120
- readonly type: "tool_call_start";
121
- readonly call_id: string;
122
- readonly name: string;
123
- } | {
124
- readonly type: "tool_call_args_delta";
125
- readonly call_id: string;
126
- readonly delta: string;
127
- }
128
- /**
129
- * Mid-stream cumulative usage. Carries the full `Usage` (including cache
130
- * token fields when the provider surfaces them) so consumers can drive
131
- * live budget / cost tracking without waiting for `turn_complete`.
132
- * Anthropic emits this on `message_start` and `message_delta`; other
133
- * providers may not emit any `usage_update` and only deliver usage via
134
- * `turn_complete.turn.usage`.
135
- */
136
- | {
137
- readonly type: "usage_update";
138
- readonly usage: Usage;
139
- } | {
140
- readonly type: "turn_complete";
141
- readonly turn: Turn;
142
- };
143
- /**
144
- * What flows out of an agent loop body to its consumer per turn: every
145
- * `TurnEvent` the provider emits (including the terminal `turn_complete`
146
- * carrying the assembled `Turn`), plus the output of any tool the loop ran.
147
- * Both variants carry a `type` discriminator.
148
- */
149
- type InteractionEvent = TurnEvent | FunctionCallOutput;
150
- declare const isTurnComplete: (d: TurnEvent) => d is Extract<TurnEvent, {
151
- type: "turn_complete";
152
- }>;
153
- declare const functionCalls: (turn: Turn) => ReadonlyArray<FunctionCall>;
154
- declare const reasonings: (turn: Turn) => ReadonlyArray<Reasoning>;
155
- declare const assistantMessages: (turn: Turn) => ReadonlyArray<Message>;
156
- /**
157
- * Append a completed turn and optional follow-up items to a state record's
158
- * history. Recipes use this at the point where structured tool results are
159
- * converted to model-facing `FunctionCallOutput`s.
160
- */
161
- declare const appendTurn: <S extends {
162
- readonly history: ReadonlyArray<Item>;
163
- }>(state: S, turn: Turn, items?: ReadonlyArray<Item>) => S;
164
- /**
165
- * Project a `TurnEvent` stream onto its `text_delta` payloads. Other
166
- * variants are dropped. Composes with `Lines.lines` +
167
- * `decodeJsonLines` for prompted-JSONL streaming.
168
- */
169
- declare const textDeltas: <E, R>(self: Stream.Stream<TurnEvent, E, R>) => Stream.Stream<string, E, R>;
170
- declare const RefusalRejected_base: new <A extends Record<string, any> = {}>(args: _$effect_Types0.VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }>) => _$effect_Cause0.YieldableError & {
171
- readonly _tag: "RefusalRejected";
172
- } & Readonly<A>;
173
- /**
174
- * The assistant message on the just-completed turn was a refusal block,
175
- * not an `output_text` payload. Returned by `toStructured` to short-circuit
176
- * decoding before `JSON.parse` / schema validation runs.
177
- */
178
- declare class RefusalRejected extends RefusalRejected_base<{
179
- readonly turn: Turn;
180
- }> {}
181
- /**
182
- * Validate a completed `Turn` against a `StructuredFormat`. Concatenates
183
- * `output_text` blocks on the last assistant message, then runs
184
- * `JSON.parse` + the format's schema validation.
185
- *
186
- * Three failure modes:
187
- * - `RefusalRejected` — the assistant emitted a refusal block.
188
- * - `JsonParseError` — the assembled text wasn't valid JSON.
189
- * - `StructuredDecodeError` — the JSON didn't match the schema.
190
- */
191
- declare const toStructured: <A>(turn: Turn, format: StructuredFormat<A>) => Effect.Effect<A, RefusalRejected | JsonParseError | StructuredDecodeError>;
192
- //#endregion
193
- export { Turn_d_exports as a, functionCalls as c, textDeltas as d, toStructured as f, TurnEvent as i, isTurnComplete as l, RefusalRejected as n, appendTurn as o, Turn as r, assistantMessages as s, InteractionEvent as t, reasonings as u };
194
- //# sourceMappingURL=Turn-7geUcKsf.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Turn-7geUcKsf.d.mts","names":[],"sources":["../src/domain/Turn.ts"],"mappings":";;;;;;;;;;;;;;;;cAmBa,IAAA,EAAI,MAAA,CAAA,MAAA;EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAKL,IAAA,UAAc,IAAA,CAAK,IAAA;;;;;;;KAQnB,SAAA;EAAA,SACG,IAAA;EAAA,SAA6B,IAAA;AAAA;EAAA,SAE7B,IAAA;EAAA,SACA,IAAA;;;;;;;;WAQA,IAAA;AAAA;;;;;;;;;WASA,IAAA;EAAA,SAAgC,IAAA;AAAA;EAAA,SAChC,IAAA;EAAA,SAAkC,OAAA;EAAA,SAA0B,IAAA;AAAA;EAAA,SAC5D,IAAA;EAAA,SAAuC,OAAA;EAAA,SAA0B,KAAA;AAAA;;;;;;;;;;WASjE,IAAA;EAAA,SAA+B,KAAA,EAAO,KAAA;AAAA;EAAA,SACtC,IAAA;EAAA,SAAgC,IAAA,EAAM,IAAA;AAAA;;;;;;;KAQzC,gBAAA,GAAmB,SAAA,GAAY,kBAAA;AAAA,cAE9B,cAAA,GAAkB,CAAA,EAAG,SAAA,KAAY,CAAA,IAAK,OAAA,CAAQ,SAAA;EAAa,IAAA;AAAA;AAAA,cAG3D,aAAA,GAAiB,IAAA,EAAM,IAAA,KAAO,aAAA,CAAc,YAAA;AAAA,cAG5C,UAAA,GAAc,IAAA,EAAM,IAAA,KAAO,aAAA,CAAc,SAAA;AAAA,cAGzC,iBAAA,GAAqB,IAAA,EAAM,IAAA,KAAO,aAAA,CAAc,OAAA;;;;;;cAQhD,UAAA;EAAA,SAAmC,OAAA,EAAS,aAAA,CAAc,IAAA;AAAA,GACrE,KAAA,EAAO,CAAA,EACP,IAAA,EAAM,IAAA,EACN,KAAA,GAAO,aAAA,CAAc,IAAA,MACpB,CAAA;;;;;;cAcU,UAAA,SACX,IAAA,EAAM,MAAA,CAAO,MAAA,CAAO,SAAA,EAAW,CAAA,EAAG,CAAA,MACjC,MAAA,CAAO,MAAA,SAAe,CAAA,EAAG,CAAA;AAAA,cAKzB,oBAAA;;;;;;;;cAWU,eAAA,SAAwB,oBAAA;EAAA,SAC1B,IAAA,EAAM,IAAA;AAAA;;;;;;;;;;;cAyBJ,YAAA,MACX,IAAA,EAAM,IAAA,EACN,MAAA,EAAQ,gBAAA,CAAkC,CAAA,MACzC,MAAA,CAAO,MAAA,CACR,CAAA,EACA,eAAA,GAAkB,cAAA,GAAkC,qBAAA"}