@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.
- package/dist/{AiError-csR8Bhxx.d.mts → AiError-CAX_48RU.d.mts} +2 -2
- package/dist/{AiError-csR8Bhxx.d.mts.map → AiError-CAX_48RU.d.mts.map} +1 -1
- package/dist/{Image-DxyXqzAM.d.mts → Image-HNmMpMTh.d.mts} +4 -4
- package/dist/{Image-DxyXqzAM.d.mts.map → Image-HNmMpMTh.d.mts.map} +1 -1
- package/dist/{Items-Hg5AsYxl.d.mts → Items-BH8xUkoR.d.mts} +3 -3
- package/dist/{Items-Hg5AsYxl.d.mts.map → Items-BH8xUkoR.d.mts.map} +1 -1
- package/dist/{StructuredFormat-Cl41C56K.d.mts → StructuredFormat-BbN4dosH.d.mts} +11 -4
- package/dist/StructuredFormat-BbN4dosH.d.mts.map +1 -0
- package/dist/{Tool-B8B5qVEy.d.mts → Tool-87ViKCCO.d.mts} +20 -4
- package/dist/Tool-87ViKCCO.d.mts.map +1 -0
- package/dist/Turn-0CwCAyVe.d.mts +388 -0
- package/dist/Turn-0CwCAyVe.d.mts.map +1 -0
- package/dist/domain/AiError.d.mts +1 -1
- package/dist/domain/AiError.mjs +1 -1
- package/dist/domain/AiError.mjs.map +1 -1
- package/dist/domain/Image.d.mts +1 -1
- package/dist/domain/Items.d.mts +1 -1
- package/dist/domain/Items.mjs +1 -1
- package/dist/domain/Items.mjs.map +1 -1
- package/dist/domain/Turn.d.mts +2 -2
- package/dist/domain/Turn.mjs +22 -4
- package/dist/domain/Turn.mjs.map +1 -1
- package/dist/domain/Turn.test.d.mts +1 -0
- package/dist/domain/Turn.test.mjs +136 -0
- package/dist/domain/Turn.test.mjs.map +1 -0
- package/dist/embedding-model/Embedding.d.mts +15 -3
- package/dist/embedding-model/Embedding.d.mts.map +1 -1
- package/dist/embedding-model/Embedding.mjs.map +1 -1
- package/dist/embedding-model/EmbeddingModel.d.mts +33 -17
- package/dist/embedding-model/EmbeddingModel.d.mts.map +1 -1
- package/dist/embedding-model/EmbeddingModel.mjs.map +1 -1
- package/dist/embedding-model/EmbeddingModel.test.d.mts +1 -0
- package/dist/embedding-model/EmbeddingModel.test.mjs +59 -0
- package/dist/embedding-model/EmbeddingModel.test.mjs.map +1 -0
- package/dist/index.d.mts +6 -6
- package/dist/language-model/LanguageModel.d.mts +30 -8
- package/dist/language-model/LanguageModel.d.mts.map +1 -1
- package/dist/language-model/LanguageModel.mjs +33 -3
- package/dist/language-model/LanguageModel.mjs.map +1 -1
- package/dist/language-model/LanguageModel.test.d.mts +1 -0
- package/dist/language-model/LanguageModel.test.mjs +143 -0
- package/dist/language-model/LanguageModel.test.mjs.map +1 -0
- package/dist/loop/Loop.d.mts +94 -11
- package/dist/loop/Loop.d.mts.map +1 -1
- package/dist/loop/Loop.mjs +92 -26
- package/dist/loop/Loop.mjs.map +1 -1
- package/dist/loop/Loop.test.mjs +171 -3
- package/dist/loop/Loop.test.mjs.map +1 -1
- package/dist/music-generator/MusicGenerator.d.mts +1 -1
- package/dist/observability/Metrics.d.mts +1 -1
- package/dist/observability/Metrics.mjs +1 -1
- package/dist/observability/Metrics.mjs.map +1 -1
- package/dist/speech-synthesizer/SpeechSynthesizer.d.mts +1 -1
- package/dist/streaming/JSONL.d.mts +1 -1
- package/dist/streaming/JSONL.d.mts.map +1 -1
- package/dist/streaming/JSONL.mjs +7 -12
- package/dist/streaming/JSONL.mjs.map +1 -1
- package/dist/structured-format/StructuredFormat.d.mts +2 -2
- package/dist/structured-format/StructuredFormat.mjs +9 -1
- package/dist/structured-format/StructuredFormat.mjs.map +1 -1
- package/dist/structured-format/StructuredFormat.test.d.mts +1 -0
- package/dist/structured-format/StructuredFormat.test.mjs +70 -0
- package/dist/structured-format/StructuredFormat.test.mjs.map +1 -0
- package/dist/testing/MockMusicGenerator.d.mts.map +1 -1
- package/dist/testing/MockMusicGenerator.mjs +2 -2
- package/dist/testing/MockMusicGenerator.mjs.map +1 -1
- package/dist/testing/MockProvider.d.mts +23 -18
- package/dist/testing/MockProvider.d.mts.map +1 -1
- package/dist/testing/MockProvider.mjs +56 -72
- package/dist/testing/MockProvider.mjs.map +1 -1
- package/dist/testing/MockSpeechSynthesizer.d.mts.map +1 -1
- package/dist/testing/MockSpeechSynthesizer.mjs +2 -2
- package/dist/testing/MockSpeechSynthesizer.mjs.map +1 -1
- package/dist/testing/MockTranscriber.d.mts.map +1 -1
- package/dist/testing/MockTranscriber.mjs +2 -2
- package/dist/testing/MockTranscriber.mjs.map +1 -1
- package/dist/tool/HistoryCheck.d.mts +1 -1
- package/dist/tool/Outcome.d.mts +1 -1
- package/dist/tool/Resolvers.d.mts +65 -8
- package/dist/tool/Resolvers.d.mts.map +1 -1
- package/dist/tool/Resolvers.mjs +8 -12
- package/dist/tool/Resolvers.mjs.map +1 -1
- package/dist/tool/Resolvers.test.mjs +6 -5
- package/dist/tool/Resolvers.test.mjs.map +1 -1
- package/dist/tool/Tool.d.mts +2 -2
- package/dist/tool/Tool.mjs +18 -1
- package/dist/tool/Tool.mjs.map +1 -1
- package/dist/tool/Tool.test.d.mts +1 -0
- package/dist/tool/Tool.test.mjs +66 -0
- package/dist/tool/Tool.test.mjs.map +1 -0
- package/dist/tool/Toolkit.d.mts +4 -6
- package/dist/tool/Toolkit.d.mts.map +1 -1
- package/dist/tool/Toolkit.mjs +14 -43
- package/dist/tool/Toolkit.mjs.map +1 -1
- package/dist/transcriber/Transcriber.d.mts +1 -1
- package/package.json +1 -1
- package/src/domain/AiError.ts +1 -1
- package/src/domain/Items.ts +1 -1
- package/src/domain/Turn.test.ts +141 -0
- package/src/domain/Turn.ts +50 -43
- package/src/embedding-model/Embedding.ts +23 -0
- package/src/embedding-model/EmbeddingModel.test.ts +92 -0
- package/src/embedding-model/EmbeddingModel.ts +30 -20
- package/src/language-model/LanguageModel.test.ts +170 -0
- package/src/language-model/LanguageModel.ts +64 -1
- package/src/loop/Loop.test.ts +256 -3
- package/src/loop/Loop.ts +225 -49
- package/src/observability/Metrics.ts +1 -1
- package/src/streaming/JSONL.ts +9 -18
- package/src/structured-format/StructuredFormat.test.ts +105 -0
- package/src/structured-format/StructuredFormat.ts +14 -1
- package/src/testing/MockMusicGenerator.ts +4 -6
- package/src/testing/MockProvider.ts +126 -105
- package/src/testing/MockSpeechSynthesizer.ts +4 -6
- package/src/testing/MockTranscriber.ts +4 -6
- package/src/tool/Resolvers.test.ts +8 -5
- package/src/tool/Resolvers.ts +17 -19
- package/src/tool/Tool.test.ts +105 -0
- package/src/tool/Tool.ts +20 -0
- package/src/tool/Toolkit.ts +49 -50
- package/dist/StructuredFormat-Cl41C56K.d.mts.map +0 -1
- package/dist/Tool-B8B5qVEy.d.mts.map +0 -1
- package/dist/Turn-7geUcKsf.d.mts +0 -194
- package/dist/Turn-7geUcKsf.d.mts.map +0 -1
package/src/tool/Toolkit.ts
CHANGED
|
@@ -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 {
|
|
14
|
-
import
|
|
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
|
-
? {
|
|
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
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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
|
|
102
|
-
|
|
103
|
-
|
|
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*
|
|
117
|
-
|
|
118
|
-
|
|
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) => ({
|
|
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*
|
|
142
|
-
|
|
143
|
-
|
|
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
|
-
|
|
152
|
-
|
|
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
|
-
(
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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
|
-
(
|
|
176
|
-
(
|
|
177
|
-
|
|
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
|
|
188
|
-
|
|
189
|
-
|
|
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"}
|
package/dist/Turn-7geUcKsf.d.mts
DELETED
|
@@ -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"}
|