@effect-uai/ai-sdk 0.10.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/LICENSE +21 -0
- package/README.md +80 -0
- package/dist/Messages.d.mts +40 -0
- package/dist/Messages.d.mts.map +1 -0
- package/dist/Messages.mjs +76 -0
- package/dist/Messages.mjs.map +1 -0
- package/dist/UIMessageStream.d.mts +112 -0
- package/dist/UIMessageStream.d.mts.map +1 -0
- package/dist/UIMessageStream.mjs +160 -0
- package/dist/UIMessageStream.mjs.map +1 -0
- package/dist/UIMessageStream.test.d.mts +1 -0
- package/dist/UIMessageStream.test.mjs +239 -0
- package/dist/UIMessageStream.test.mjs.map +1 -0
- package/dist/chunk-CfYAbeIz.mjs +13 -0
- package/dist/conformance.test.d.mts +1 -0
- package/dist/conformance.test.mjs +11374 -0
- package/dist/conformance.test.mjs.map +1 -0
- package/dist/dist-DaKrk-s5.mjs +13769 -0
- package/dist/dist-DaKrk-s5.mjs.map +1 -0
- package/dist/index.d.mts +3 -0
- package/dist/index.mjs +3 -0
- package/dist/magic-string.es-CaWgF-3p.mjs +1013 -0
- package/dist/magic-string.es-CaWgF-3p.mjs.map +1 -0
- package/package.json +66 -0
- package/src/Messages.ts +122 -0
- package/src/UIMessageStream.test.ts +219 -0
- package/src/UIMessageStream.ts +233 -0
- package/src/conformance.test.ts +93 -0
- package/src/index.ts +2 -0
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
import { decodeMessages } from "./Messages.mjs";
|
|
2
|
+
import { n as globalExpect, r as describe, t as it } from "./dist-DaKrk-s5.mjs";
|
|
3
|
+
import { dataPart, messageMetadata, toUIMessageStream } from "./UIMessageStream.mjs";
|
|
4
|
+
import * as Image from "@effect-uai/core/Image";
|
|
5
|
+
import * as Items from "@effect-uai/core/Items";
|
|
6
|
+
import { Effect, Stream } from "effect";
|
|
7
|
+
import * as Turn from "@effect-uai/core/Turn";
|
|
8
|
+
//#region src/UIMessageStream.test.ts
|
|
9
|
+
const turn = (items, stop) => ({
|
|
10
|
+
items,
|
|
11
|
+
usage: {},
|
|
12
|
+
stop_reason: stop
|
|
13
|
+
});
|
|
14
|
+
const encode = (events) => Stream.fromIterable(events).pipe(toUIMessageStream("m1"), Stream.runCollect, Effect.map((sse) => sse.map((e) => e.data === "[DONE]" ? "[DONE]" : JSON.parse(e.data))));
|
|
15
|
+
const types = (parts) => parts.map((p) => p === "[DONE]" ? "[DONE]" : p.type);
|
|
16
|
+
describe("toUIMessageStream", () => {
|
|
17
|
+
it.effect("brackets text deltas with start / text-start / text-end / finish / [DONE]", () => Effect.gen(function* () {
|
|
18
|
+
const parts = yield* encode([
|
|
19
|
+
Turn.TurnEvent.TextDelta({ text: "Hel" }),
|
|
20
|
+
Turn.TurnEvent.TextDelta({ text: "lo" }),
|
|
21
|
+
Turn.TurnEvent.TurnComplete({ turn: turn([Items.assistantText("Hello")], "stop") })
|
|
22
|
+
]);
|
|
23
|
+
globalExpect(types(parts)).toEqual([
|
|
24
|
+
"start",
|
|
25
|
+
"text-start",
|
|
26
|
+
"text-delta",
|
|
27
|
+
"text-delta",
|
|
28
|
+
"text-end",
|
|
29
|
+
"finish",
|
|
30
|
+
"[DONE]"
|
|
31
|
+
]);
|
|
32
|
+
globalExpect(parts[0]).toEqual({
|
|
33
|
+
type: "start",
|
|
34
|
+
messageId: "m1"
|
|
35
|
+
});
|
|
36
|
+
const id = parts[1].id;
|
|
37
|
+
globalExpect(parts[2].id).toBe(id);
|
|
38
|
+
globalExpect(parts[4].id).toBe(id);
|
|
39
|
+
}));
|
|
40
|
+
it.effect("maps a tool round-trip to input-start/delta/available then output-available", () => Effect.gen(function* () {
|
|
41
|
+
const parts = yield* encode([
|
|
42
|
+
Turn.TurnEvent.ToolCallStart({
|
|
43
|
+
call_id: "c1",
|
|
44
|
+
name: "search"
|
|
45
|
+
}),
|
|
46
|
+
Turn.TurnEvent.ToolCallArgsDelta({
|
|
47
|
+
call_id: "c1",
|
|
48
|
+
delta: `{"q":"lisbon"}`
|
|
49
|
+
}),
|
|
50
|
+
Turn.TurnEvent.TurnComplete({ turn: turn([{
|
|
51
|
+
type: "function_call",
|
|
52
|
+
call_id: "c1",
|
|
53
|
+
name: "search",
|
|
54
|
+
arguments: `{"q":"lisbon"}`
|
|
55
|
+
}], "tool_calls") }),
|
|
56
|
+
Items.toolCallOutput("c1", `{"hits":3}`)
|
|
57
|
+
]);
|
|
58
|
+
globalExpect(types(parts)).toEqual([
|
|
59
|
+
"start",
|
|
60
|
+
"tool-input-start",
|
|
61
|
+
"tool-input-delta",
|
|
62
|
+
"tool-input-available",
|
|
63
|
+
"tool-output-available",
|
|
64
|
+
"finish",
|
|
65
|
+
"[DONE]"
|
|
66
|
+
]);
|
|
67
|
+
globalExpect(parts[3]).toEqual({
|
|
68
|
+
type: "tool-input-available",
|
|
69
|
+
toolCallId: "c1",
|
|
70
|
+
toolName: "search",
|
|
71
|
+
input: { q: "lisbon" }
|
|
72
|
+
});
|
|
73
|
+
globalExpect(parts[4]).toEqual({
|
|
74
|
+
type: "tool-output-available",
|
|
75
|
+
toolCallId: "c1",
|
|
76
|
+
output: { hits: 3 }
|
|
77
|
+
});
|
|
78
|
+
}));
|
|
79
|
+
it.effect("surfaces a refusal as an error part", () => Effect.gen(function* () {
|
|
80
|
+
const parts = yield* encode([Turn.TurnEvent.RefusalDelta({ text: "cannot help" })]);
|
|
81
|
+
globalExpect(types(parts)).toEqual([
|
|
82
|
+
"start",
|
|
83
|
+
"error",
|
|
84
|
+
"finish",
|
|
85
|
+
"[DONE]"
|
|
86
|
+
]);
|
|
87
|
+
globalExpect(parts[1]).toEqual({
|
|
88
|
+
type: "error",
|
|
89
|
+
errorText: "cannot help"
|
|
90
|
+
});
|
|
91
|
+
}));
|
|
92
|
+
it.effect("interleaves data-part and message-metadata emissions", () => Effect.gen(function* () {
|
|
93
|
+
const parts = yield* encode([
|
|
94
|
+
dataPart("metrics", { tokps: 42 }, { transient: true }),
|
|
95
|
+
Turn.TurnEvent.TextDelta({ text: "hi" }),
|
|
96
|
+
messageMetadata({
|
|
97
|
+
model: "gpt-5.4-mini",
|
|
98
|
+
usage: { output_tokens: 7 }
|
|
99
|
+
}),
|
|
100
|
+
Turn.TurnEvent.TurnComplete({ turn: turn([Items.assistantText("hi")], "stop") })
|
|
101
|
+
]);
|
|
102
|
+
globalExpect(types(parts)).toEqual([
|
|
103
|
+
"start",
|
|
104
|
+
"data-metrics",
|
|
105
|
+
"text-start",
|
|
106
|
+
"text-delta",
|
|
107
|
+
"message-metadata",
|
|
108
|
+
"text-end",
|
|
109
|
+
"finish",
|
|
110
|
+
"[DONE]"
|
|
111
|
+
]);
|
|
112
|
+
globalExpect(parts[1]).toEqual({
|
|
113
|
+
type: "data-metrics",
|
|
114
|
+
data: { tokps: 42 },
|
|
115
|
+
transient: true
|
|
116
|
+
});
|
|
117
|
+
globalExpect(parts[4]).toEqual({
|
|
118
|
+
type: "message-metadata",
|
|
119
|
+
messageMetadata: {
|
|
120
|
+
model: "gpt-5.4-mini",
|
|
121
|
+
usage: { output_tokens: 7 }
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
}));
|
|
125
|
+
});
|
|
126
|
+
describe("decodeMessages", () => {
|
|
127
|
+
it("folds UIMessage text parts back into HistoryItems by role", () => {
|
|
128
|
+
globalExpect(decodeMessages([
|
|
129
|
+
{
|
|
130
|
+
role: "system",
|
|
131
|
+
parts: [{
|
|
132
|
+
type: "text",
|
|
133
|
+
text: "be terse"
|
|
134
|
+
}]
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
role: "user",
|
|
138
|
+
parts: [{
|
|
139
|
+
type: "text",
|
|
140
|
+
text: "hi "
|
|
141
|
+
}, {
|
|
142
|
+
type: "text",
|
|
143
|
+
text: "there"
|
|
144
|
+
}]
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
role: "assistant",
|
|
148
|
+
parts: [{
|
|
149
|
+
type: "text",
|
|
150
|
+
text: "hello"
|
|
151
|
+
}]
|
|
152
|
+
}
|
|
153
|
+
])).toEqual([
|
|
154
|
+
Items.systemText("be terse"),
|
|
155
|
+
Items.userText("hi there"),
|
|
156
|
+
Items.assistantText("hello")
|
|
157
|
+
]);
|
|
158
|
+
});
|
|
159
|
+
it("folds an image file part into an input_image block and drops non-image files", () => {
|
|
160
|
+
globalExpect(decodeMessages([{
|
|
161
|
+
role: "user",
|
|
162
|
+
parts: [
|
|
163
|
+
{
|
|
164
|
+
type: "text",
|
|
165
|
+
text: "look",
|
|
166
|
+
state: "done"
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
type: "file",
|
|
170
|
+
mediaType: "image/png",
|
|
171
|
+
url: "https://x/i.png",
|
|
172
|
+
filename: "i.png"
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
type: "file",
|
|
176
|
+
mediaType: "application/pdf",
|
|
177
|
+
url: "https://x/doc.pdf"
|
|
178
|
+
}
|
|
179
|
+
]
|
|
180
|
+
}])).toEqual([{
|
|
181
|
+
type: "message",
|
|
182
|
+
role: "user",
|
|
183
|
+
content: [{
|
|
184
|
+
type: "input_text",
|
|
185
|
+
text: "look"
|
|
186
|
+
}, {
|
|
187
|
+
type: "input_image",
|
|
188
|
+
source: Image.imageUrl("https://x/i.png", "image/png")
|
|
189
|
+
}]
|
|
190
|
+
}]);
|
|
191
|
+
});
|
|
192
|
+
it("expands an assistant tool call into function_call + function_call_output", () => {
|
|
193
|
+
globalExpect(decodeMessages([{
|
|
194
|
+
role: "assistant",
|
|
195
|
+
parts: [{
|
|
196
|
+
type: "text",
|
|
197
|
+
text: "Here",
|
|
198
|
+
state: "done"
|
|
199
|
+
}, {
|
|
200
|
+
type: "tool-search",
|
|
201
|
+
toolCallId: "c1",
|
|
202
|
+
state: "output-available",
|
|
203
|
+
input: { q: "lisbon" },
|
|
204
|
+
output: { hits: 3 },
|
|
205
|
+
providerExecuted: false
|
|
206
|
+
}]
|
|
207
|
+
}])).toEqual([
|
|
208
|
+
Items.assistantText("Here"),
|
|
209
|
+
{
|
|
210
|
+
type: "function_call",
|
|
211
|
+
call_id: "c1",
|
|
212
|
+
name: "search",
|
|
213
|
+
arguments: `{"q":"lisbon"}`
|
|
214
|
+
},
|
|
215
|
+
Items.toolCallOutput("c1", `{"hits":3}`)
|
|
216
|
+
]);
|
|
217
|
+
});
|
|
218
|
+
it("emits only function_call for a dynamic tool with no resolved output", () => {
|
|
219
|
+
globalExpect(decodeMessages([{
|
|
220
|
+
role: "assistant",
|
|
221
|
+
parts: [{
|
|
222
|
+
type: "dynamic-tool",
|
|
223
|
+
toolName: "lookup",
|
|
224
|
+
toolCallId: "c9",
|
|
225
|
+
state: "input-available",
|
|
226
|
+
input: { id: 7 }
|
|
227
|
+
}]
|
|
228
|
+
}])).toEqual([{
|
|
229
|
+
type: "function_call",
|
|
230
|
+
call_id: "c9",
|
|
231
|
+
name: "lookup",
|
|
232
|
+
arguments: `{"id":7}`
|
|
233
|
+
}]);
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
//#endregion
|
|
237
|
+
export {};
|
|
238
|
+
|
|
239
|
+
//# sourceMappingURL=UIMessageStream.test.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UIMessageStream.test.mjs","names":[],"sources":["../src/UIMessageStream.test.ts"],"sourcesContent":["import * as Image from \"@effect-uai/core/Image\"\nimport * as Items from \"@effect-uai/core/Items\"\nimport * as Turn from \"@effect-uai/core/Turn\"\nimport { describe, it } from \"@effect/vitest\"\nimport { Effect, Stream } from \"effect\"\nimport { expect } from \"vitest\"\nimport { decodeMessages } from \"./Messages.js\"\nimport { dataPart, type Emission, messageMetadata, toUIMessageStream } from \"./UIMessageStream.js\"\n\nconst turn = (items: ReadonlyArray<Items.HistoryItem>, stop: Items.StopReason): Turn.Turn => ({\n items,\n usage: {},\n stop_reason: stop,\n})\n\n// Run an InteractionEvent script through the encoder and return the decoded\n// parts (the `data:` payload of each SSE event, JSON-parsed except `[DONE]`).\nconst encode = (events: ReadonlyArray<Emission>): Effect.Effect<ReadonlyArray<unknown>> =>\n Stream.fromIterable(events).pipe(\n toUIMessageStream(\"m1\"),\n Stream.runCollect,\n Effect.map((sse) => sse.map((e) => (e.data === \"[DONE]\" ? \"[DONE]\" : JSON.parse(e.data)))),\n )\n\nconst types = (parts: ReadonlyArray<unknown>): ReadonlyArray<string> =>\n parts.map((p) => (p === \"[DONE]\" ? \"[DONE]\" : (p as { type: string }).type))\n\ndescribe(\"toUIMessageStream\", () => {\n it.effect(\"brackets text deltas with start / text-start / text-end / finish / [DONE]\", () =>\n Effect.gen(function* () {\n const parts = yield* encode([\n Turn.TurnEvent.TextDelta({ text: \"Hel\" }),\n Turn.TurnEvent.TextDelta({ text: \"lo\" }),\n Turn.TurnEvent.TurnComplete({ turn: turn([Items.assistantText(\"Hello\")], \"stop\") }),\n ])\n\n expect(types(parts)).toEqual([\n \"start\",\n \"text-start\",\n \"text-delta\",\n \"text-delta\",\n \"text-end\",\n \"finish\",\n \"[DONE]\",\n ])\n expect(parts[0]).toEqual({ type: \"start\", messageId: \"m1\" })\n // Both deltas share the one synthesized block id.\n const id = (parts[1] as { id: string }).id\n expect((parts[2] as { id: string }).id).toBe(id)\n expect((parts[4] as { id: string }).id).toBe(id)\n }),\n )\n\n it.effect(\"maps a tool round-trip to input-start/delta/available then output-available\", () =>\n Effect.gen(function* () {\n const call: Items.ToolCall = {\n type: \"function_call\",\n call_id: \"c1\",\n name: \"search\",\n arguments: `{\"q\":\"lisbon\"}`,\n }\n const parts = yield* encode([\n Turn.TurnEvent.ToolCallStart({ call_id: \"c1\", name: \"search\" }),\n Turn.TurnEvent.ToolCallArgsDelta({ call_id: \"c1\", delta: `{\"q\":\"lisbon\"}` }),\n Turn.TurnEvent.TurnComplete({ turn: turn([call], \"tool_calls\") }),\n Items.toolCallOutput(\"c1\", `{\"hits\":3}`),\n ])\n\n expect(types(parts)).toEqual([\n \"start\",\n \"tool-input-start\",\n \"tool-input-delta\",\n \"tool-input-available\",\n \"tool-output-available\",\n \"finish\",\n \"[DONE]\",\n ])\n // JSON payloads are decoded, not passed through as strings.\n expect(parts[3]).toEqual({\n type: \"tool-input-available\",\n toolCallId: \"c1\",\n toolName: \"search\",\n input: { q: \"lisbon\" },\n })\n expect(parts[4]).toEqual({\n type: \"tool-output-available\",\n toolCallId: \"c1\",\n output: { hits: 3 },\n })\n }),\n )\n\n it.effect(\"surfaces a refusal as an error part\", () =>\n Effect.gen(function* () {\n const parts = yield* encode([Turn.TurnEvent.RefusalDelta({ text: \"cannot help\" })])\n expect(types(parts)).toEqual([\"start\", \"error\", \"finish\", \"[DONE]\"])\n expect(parts[1]).toEqual({ type: \"error\", errorText: \"cannot help\" })\n }),\n )\n\n it.effect(\"interleaves data-part and message-metadata emissions\", () =>\n Effect.gen(function* () {\n const parts = yield* encode([\n dataPart(\"metrics\", { tokps: 42 }, { transient: true }),\n Turn.TurnEvent.TextDelta({ text: \"hi\" }),\n messageMetadata({ model: \"gpt-5.4-mini\", usage: { output_tokens: 7 } }),\n Turn.TurnEvent.TurnComplete({ turn: turn([Items.assistantText(\"hi\")], \"stop\") }),\n ])\n\n expect(types(parts)).toEqual([\n \"start\",\n \"data-metrics\",\n \"text-start\",\n \"text-delta\",\n \"message-metadata\",\n \"text-end\",\n \"finish\",\n \"[DONE]\",\n ])\n expect(parts[1]).toEqual({ type: \"data-metrics\", data: { tokps: 42 }, transient: true })\n expect(parts[4]).toEqual({\n type: \"message-metadata\",\n messageMetadata: { model: \"gpt-5.4-mini\", usage: { output_tokens: 7 } },\n })\n }),\n )\n})\n\ndescribe(\"decodeMessages\", () => {\n it(\"folds UIMessage text parts back into HistoryItems by role\", () => {\n const items = decodeMessages([\n { role: \"system\", parts: [{ type: \"text\", text: \"be terse\" }] },\n {\n role: \"user\",\n parts: [\n { type: \"text\", text: \"hi \" },\n { type: \"text\", text: \"there\" },\n ],\n },\n { role: \"assistant\", parts: [{ type: \"text\", text: \"hello\" }] },\n ])\n\n expect(items).toEqual([\n Items.systemText(\"be terse\"),\n Items.userText(\"hi there\"),\n Items.assistantText(\"hello\"),\n ])\n })\n\n it(\"folds an image file part into an input_image block and drops non-image files\", () => {\n const items = decodeMessages([\n {\n role: \"user\",\n parts: [\n { type: \"text\", text: \"look\", state: \"done\" },\n { type: \"file\", mediaType: \"image/png\", url: \"https://x/i.png\", filename: \"i.png\" },\n { type: \"file\", mediaType: \"application/pdf\", url: \"https://x/doc.pdf\" },\n ],\n },\n ])\n\n expect(items).toEqual([\n {\n type: \"message\",\n role: \"user\",\n content: [\n { type: \"input_text\", text: \"look\" },\n { type: \"input_image\", source: Image.imageUrl(\"https://x/i.png\", \"image/png\") },\n ],\n },\n ])\n })\n\n it(\"expands an assistant tool call into function_call + function_call_output\", () => {\n const items = decodeMessages([\n {\n role: \"assistant\",\n parts: [\n { type: \"text\", text: \"Here\", state: \"done\" },\n {\n type: \"tool-search\",\n toolCallId: \"c1\",\n state: \"output-available\",\n input: { q: \"lisbon\" },\n output: { hits: 3 },\n providerExecuted: false,\n },\n ],\n },\n ])\n\n expect(items).toEqual([\n Items.assistantText(\"Here\"),\n { type: \"function_call\", call_id: \"c1\", name: \"search\", arguments: `{\"q\":\"lisbon\"}` },\n Items.toolCallOutput(\"c1\", `{\"hits\":3}`),\n ])\n })\n\n it(\"emits only function_call for a dynamic tool with no resolved output\", () => {\n const items = decodeMessages([\n {\n role: \"assistant\",\n parts: [\n {\n type: \"dynamic-tool\",\n toolName: \"lookup\",\n toolCallId: \"c9\",\n state: \"input-available\",\n input: { id: 7 },\n },\n ],\n },\n ])\n\n expect(items).toEqual([\n { type: \"function_call\", call_id: \"c9\", name: \"lookup\", arguments: `{\"id\":7}` },\n ])\n })\n})\n"],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __exportAll = (all, no_symbols) => {
|
|
4
|
+
let target = {};
|
|
5
|
+
for (var name in all) __defProp(target, name, {
|
|
6
|
+
get: all[name],
|
|
7
|
+
enumerable: true
|
|
8
|
+
});
|
|
9
|
+
if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
|
|
10
|
+
return target;
|
|
11
|
+
};
|
|
12
|
+
//#endregion
|
|
13
|
+
export { __exportAll as t };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|