@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.
@@ -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 { };