@mohanscodex/spectra-ai 0.4.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.
Files changed (62) hide show
  1. package/README.md +189 -0
  2. package/dist/__tests__/e2e.test.d.ts +2 -0
  3. package/dist/__tests__/e2e.test.d.ts.map +1 -0
  4. package/dist/__tests__/e2e.test.js +364 -0
  5. package/dist/__tests__/e2e.test.js.map +1 -0
  6. package/dist/__tests__/event-stream.test.d.ts +2 -0
  7. package/dist/__tests__/event-stream.test.d.ts.map +1 -0
  8. package/dist/__tests__/event-stream.test.js +87 -0
  9. package/dist/__tests__/event-stream.test.js.map +1 -0
  10. package/dist/__tests__/provider.test.d.ts +2 -0
  11. package/dist/__tests__/provider.test.d.ts.map +1 -0
  12. package/dist/__tests__/provider.test.js +40 -0
  13. package/dist/__tests__/provider.test.js.map +1 -0
  14. package/dist/event-stream.d.ts +19 -0
  15. package/dist/event-stream.d.ts.map +1 -0
  16. package/dist/event-stream.js +74 -0
  17. package/dist/event-stream.js.map +1 -0
  18. package/dist/index.d.ts +8 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +5 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/models.d.ts +6 -0
  23. package/dist/models.d.ts.map +1 -0
  24. package/dist/models.js +16480 -0
  25. package/dist/models.js.map +1 -0
  26. package/dist/providers/anthropic.d.ts +8 -0
  27. package/dist/providers/anthropic.d.ts.map +1 -0
  28. package/dist/providers/anthropic.js +279 -0
  29. package/dist/providers/anthropic.js.map +1 -0
  30. package/dist/providers/groq.d.ts +16 -0
  31. package/dist/providers/groq.d.ts.map +1 -0
  32. package/dist/providers/groq.js +196 -0
  33. package/dist/providers/groq.js.map +1 -0
  34. package/dist/providers/openai-completions.d.ts +17 -0
  35. package/dist/providers/openai-completions.d.ts.map +1 -0
  36. package/dist/providers/openai-completions.js +319 -0
  37. package/dist/providers/openai-completions.js.map +1 -0
  38. package/dist/providers/openai-responses.d.ts +12 -0
  39. package/dist/providers/openai-responses.d.ts.map +1 -0
  40. package/dist/providers/openai-responses.js +335 -0
  41. package/dist/providers/openai-responses.js.map +1 -0
  42. package/dist/providers/openrouter.d.ts +12 -0
  43. package/dist/providers/openrouter.d.ts.map +1 -0
  44. package/dist/providers/openrouter.js +42 -0
  45. package/dist/providers/openrouter.js.map +1 -0
  46. package/dist/providers/register-builtins.d.ts +2 -0
  47. package/dist/providers/register-builtins.d.ts.map +1 -0
  48. package/dist/providers/register-builtins.js +41 -0
  49. package/dist/providers/register-builtins.js.map +1 -0
  50. package/dist/providers/shared.d.ts +3 -0
  51. package/dist/providers/shared.d.ts.map +1 -0
  52. package/dist/providers/shared.js +12 -0
  53. package/dist/providers/shared.js.map +1 -0
  54. package/dist/registry.d.ts +19 -0
  55. package/dist/registry.d.ts.map +1 -0
  56. package/dist/registry.js +28 -0
  57. package/dist/registry.js.map +1 -0
  58. package/dist/types.d.ts +164 -0
  59. package/dist/types.d.ts.map +1 -0
  60. package/dist/types.js +2 -0
  61. package/dist/types.js.map +1 -0
  62. package/package.json +33 -0
package/README.md ADDED
@@ -0,0 +1,189 @@
1
+ # @singularity-ai/spectra-ai
2
+
3
+ **LLM provider abstraction layer with real-time streaming.**
4
+
5
+ A registry-based system for interacting with multiple LLM providers through a unified streaming interface. Built-in providers for Anthropic, OpenAI (Chat Completions + Responses API), Groq, and OpenRouter — all streaming SSE by default.
6
+
7
+ ## Features
8
+
9
+ - **Streaming-first** — Every provider streams SSE events. No polling, no buffering.
10
+ - **Provider registry** — Register, resolve, and swap providers at runtime. Extensible for custom implementations.
11
+ - **Typed events** — Fine-grained delta events (`text_delta`, `thinking_delta`, `toolcall_delta`) for real-time UI updates.
12
+ - **Abort support** — Pass an `AbortSignal` to cancel in-flight requests.
13
+ - **Zero SD KB at rest** — SDK is size-zero until streamed; no pre-bundled provider payloads.
14
+
15
+ ## Installation
16
+
17
+ ```bash
18
+ bun add @singularity-ai/spectra-ai
19
+ ```
20
+
21
+ ## Quick Start
22
+
23
+ ```typescript
24
+ import { stream, complete, initProviders } from "@singularity-ai/spectra-ai";
25
+
26
+ // Registers anthropic, openai-completions, openai-responses, groq, openrouter
27
+ initProviders();
28
+
29
+ const model = {
30
+ id: "claude-sonnet-4-20250514",
31
+ name: "Claude Sonnet 4",
32
+ provider: "anthropic",
33
+ api: "anthropic-messages",
34
+ };
35
+
36
+ // Stream events as they arrive
37
+ const eventStream = stream(model, {
38
+ systemPrompt: "You are a helpful assistant.",
39
+ messages: [{ role: "user", content: "Hello!", timestamp: Date.now() }],
40
+ });
41
+
42
+ for await (const event of eventStream) {
43
+ if (event.type === "text_delta") process.stdout.write(event.delta);
44
+ }
45
+
46
+ // Or accumulate into a complete message
47
+ const msg = await complete(model, {
48
+ systemPrompt: "You are a helpful assistant.",
49
+ messages: [{ role: "user", content: "Tell me a joke.", timestamp: Date.now() }],
50
+ });
51
+ console.log(msg.content);
52
+ ```
53
+
54
+ ## Architecture
55
+
56
+ ```
57
+ ┌─────────────────────────┐
58
+ │ Provider Registry │
59
+ │ (Map<string, Provider>) │
60
+ └──────┬──────────────────┘
61
+ │ resolve by model.provider
62
+ ┌────────────┼────────────┬───────────────┐
63
+ ▼ ▼ ▼ ▼
64
+ ┌──────────┐ ┌────────────┐ ┌──────────┐ ┌──────────┐
65
+ │anthropic │ │openai- │ │openai- │ │ groq / │
66
+ │ │ │completions │ │responses │ │openrouter│
67
+ └──────────┘ └────────────┘ └──────────┘ └──────────┘
68
+ │ │ │ │
69
+ ▼ ▼ ▼ ▼
70
+ ┌──────────────────────────────────────────────────┐
71
+ │ AssistantMessageEventStream │
72
+ │ (AsyncIterable<AssistantMessageEvent>) │
73
+ └──────────────────────────────────────────────────┘
74
+
75
+ consume via
76
+ for await...of
77
+ ```
78
+
79
+ ## Built-in Providers
80
+
81
+ | Provider name | API | Environment variable |
82
+ |---|---|---|
83
+ | `anthropic` | Anthropic Messages API | `ANTHROPIC_API_KEY` |
84
+ | `openai-completions` | OpenAI Chat Completions | `OPENAI_API_KEY` |
85
+ | `openai-responses` | OpenAI Responses API | `OPENAI_API_KEY` |
86
+ | `groq` | Groq (OpenAI-compatible) | `GROQ_API_KEY` |
87
+ | `openrouter` | OpenRouter (OpenAI-compatible) | `OPENROUTER_API_KEY` |
88
+
89
+ ## API
90
+
91
+ ### `stream(model, context, options?)`
92
+
93
+ Returns an `AssistantMessageEventStream` — an `AsyncIterable` that yields `AssistantMessageEvent` deltas.
94
+
95
+ ### `complete(model, context, options?)`
96
+
97
+ Convenience wrapper. Returns a `Promise<AssistantMessage>` — accumulates the stream into the final message.
98
+
99
+ ### `registerProvider(provider)`
100
+
101
+ Register a custom provider:
102
+
103
+ ```typescript
104
+ import { registerProvider } from "@singularity-ai/spectra-ai";
105
+
106
+ registerProvider({
107
+ name: "my-provider",
108
+ stream: (model, context, options) => {
109
+ // Return an AssistantMessageEventStream
110
+ const stream = new AssistantMessageEventStream();
111
+ // ... push events ...
112
+ return stream;
113
+ },
114
+ });
115
+ ```
116
+
117
+ ### `initProviders()`
118
+
119
+ Registers all built-in providers. Called automatically on import — safe to call multiple times (idempotent).
120
+
121
+ ## Event Types
122
+
123
+ Each `AssistantMessageEvent` is a discriminated union:
124
+
125
+ | Event | Payload |
126
+ |---|---|
127
+ | `start` | Initial `partial: AssistantMessage` |
128
+ | `text_start` / `text_delta` / `text_end` | Text content delta |
129
+ | `thinking_start` / `thinking_delta` / `thinking_end` | Reasoning/thinking content delta |
130
+ | `toolcall_start` / `toolcall_delta` / `toolcall_end` | Tool call argument delta |
131
+ | `done` | Final `message: AssistantMessage` with `stopReason` |
132
+ | `error` | Error with `error: AssistantMessage` containing `errorMessage` |
133
+
134
+ ## Key Types
135
+
136
+ ```typescript
137
+ interface Model {
138
+ id: string; // e.g. "gpt-4o"
139
+ name: string; // display name
140
+ provider: string; // registered provider name
141
+ api: string; // API variant
142
+ baseUrl?: string; // custom base URL
143
+ reasoning?: boolean; // enable reasoning features
144
+ maxTokens?: number;
145
+ headers?: Record<string, string>;
146
+ }
147
+
148
+ interface Context {
149
+ systemPrompt?: string;
150
+ messages: Message[];
151
+ tools?: Tool[];
152
+ }
153
+
154
+ interface StreamOptions {
155
+ signal?: AbortSignal;
156
+ apiKey?: string;
157
+ headers?: Record<string, string>;
158
+ maxTokens?: number;
159
+ temperature?: number;
160
+ }
161
+ ```
162
+
163
+ ## Message Types
164
+
165
+ - `UserMessage` — role `"user"`, content is a string or array of `TextContent | ImageContent` blocks
166
+ - `AssistantMessage` — role `"assistant"`, content is `(TextContent | ThinkingContent | ToolCall)[]`, includes `usage`, `stopReason`, `provider`, `model`, `responseId`, `errorMessage`
167
+ - `ToolResultMessage` — role `"toolResult"`, maps tool call results back to the model
168
+
169
+ ## Usage
170
+
171
+ ```typescript
172
+ import { complete } from "@singularity-ai/spectra-ai";
173
+
174
+ const msg = await complete(
175
+ { id: "gpt-4o", name: "GPT-4o", provider: "openai-completions", api: "openai" },
176
+ {
177
+ systemPrompt: "You are a mathematician.",
178
+ messages: [
179
+ { role: "user", content: "What is 2+2?", timestamp: Date.now() },
180
+ ],
181
+ tools: [{ name: "calculate", description: "Calculate", parameters: { type: "object", properties: { expr: { type: "string" } }, required: ["expr"] } }],
182
+ },
183
+ { apiKey: process.env.OPENAI_API_KEY }
184
+ );
185
+ ```
186
+
187
+ ## License
188
+
189
+ MIT
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=e2e.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2e.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/e2e.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,364 @@
1
+ import { describe, it, expect, beforeEach } from "vitest";
2
+ import { EventStream, AssistantMessageEventStream } from "../event-stream.js";
3
+ import { registerProvider, getProvider, stream, complete } from "../registry.js";
4
+ // Mock provider for testing (following pi-mono's provider pattern)
5
+ function createMockProvider(name, responseEvents) {
6
+ return {
7
+ name,
8
+ stream(model, context) {
9
+ const stream = new AssistantMessageEventStream();
10
+ // Simulate async streaming (pi-mono pattern: push events, then end)
11
+ setTimeout(() => {
12
+ for (const event of responseEvents) {
13
+ stream.push(event);
14
+ }
15
+ stream.end();
16
+ }, 10);
17
+ return stream;
18
+ },
19
+ };
20
+ }
21
+ // Helper to create a complete assistant message
22
+ function createAssistantMessage(text, stopReason = "stop") {
23
+ return {
24
+ role: "assistant",
25
+ content: [{ type: "text", text }],
26
+ provider: "test",
27
+ model: "test-model",
28
+ usage: { input: 10, output: 20, cacheRead: 0, cacheWrite: 0, totalTokens: 30 },
29
+ stopReason,
30
+ timestamp: Date.now(),
31
+ };
32
+ }
33
+ describe("EventStream (pi-mono pattern)", () => {
34
+ it("should implement AsyncIterable interface", async () => {
35
+ const stream = new EventStream((e) => e === "end", (e) => e);
36
+ // Verify it's async iterable (pi-mono core pattern)
37
+ expect(typeof stream[Symbol.asyncIterator]).toBe("function");
38
+ });
39
+ it("should stream events in order (pi-mono push pattern)", async () => {
40
+ const stream = new EventStream((e) => e === "end", (e) => e);
41
+ stream.push("first");
42
+ stream.push("second");
43
+ stream.push("third");
44
+ stream.push("end");
45
+ const events = [];
46
+ for await (const event of stream) {
47
+ events.push(event);
48
+ }
49
+ expect(events).toEqual(["first", "second", "third", "end"]);
50
+ });
51
+ it("should resolve result after completion", async () => {
52
+ const stream = new EventStream((e) => e === "done", (e) => e === "done" ? 42 : 0);
53
+ stream.push("working");
54
+ stream.push("done");
55
+ stream.end();
56
+ const result = await stream.result();
57
+ expect(result).toBe(42);
58
+ });
59
+ it("should handle single consumer pattern (pi-mono design)", async () => {
60
+ const stream = new EventStream((e) => e === "end", (e) => e);
61
+ stream.push("event1");
62
+ stream.push("event2");
63
+ stream.push("end");
64
+ const events = [];
65
+ for await (const e of stream) {
66
+ events.push(e);
67
+ }
68
+ expect(events).toEqual(["event1", "event2", "end"]);
69
+ // Note: EventStream is single-consumer by design (pi-mono pattern)
70
+ // Multiple consumers would require a broadcast mechanism
71
+ });
72
+ });
73
+ describe("AssistantMessageEventStream (pi-mono pattern)", () => {
74
+ it("should emit start, delta, and done events", async () => {
75
+ const stream = new AssistantMessageEventStream();
76
+ const partial = createAssistantMessage("");
77
+ stream.push({ type: "start", partial });
78
+ stream.push({ type: "text_start", contentIndex: 0, partial });
79
+ stream.push({ type: "text_delta", contentIndex: 0, delta: "Hello", partial });
80
+ stream.push({ type: "text_delta", contentIndex: 0, delta: " World", partial });
81
+ stream.push({ type: "text_end", contentIndex: 0, content: "Hello World", partial });
82
+ stream.push({
83
+ type: "done",
84
+ reason: "stop",
85
+ message: createAssistantMessage("Hello World"),
86
+ });
87
+ stream.end();
88
+ const events = [];
89
+ for await (const event of stream) {
90
+ events.push(event);
91
+ }
92
+ expect(events).toHaveLength(6);
93
+ expect(events[0].type).toBe("start");
94
+ expect(events[1].type).toBe("text_start");
95
+ expect(events[2].type).toBe("text_delta");
96
+ expect(events[5].type).toBe("done");
97
+ });
98
+ it("should resolve to final AssistantMessage", async () => {
99
+ const stream = new AssistantMessageEventStream();
100
+ const finalMessage = createAssistantMessage("Final result");
101
+ stream.push({ type: "start", partial: createAssistantMessage("") });
102
+ stream.push({ type: "done", reason: "stop", message: finalMessage });
103
+ stream.end();
104
+ const result = await stream.result();
105
+ expect(result.content[0]).toEqual({ type: "text", text: "Final result" });
106
+ expect(result.stopReason).toBe("stop");
107
+ });
108
+ it("should handle error events", async () => {
109
+ const stream = new AssistantMessageEventStream();
110
+ const errorMessage = createAssistantMessage("");
111
+ errorMessage.stopReason = "error";
112
+ errorMessage.errorMessage = "Something went wrong";
113
+ stream.push({ type: "error", reason: "error", error: errorMessage });
114
+ stream.end();
115
+ const result = await stream.result();
116
+ expect(result.stopReason).toBe("error");
117
+ expect(result.errorMessage).toBe("Something went wrong");
118
+ });
119
+ it("should handle tool call streaming (pi-mono tool pattern)", async () => {
120
+ const stream = new AssistantMessageEventStream();
121
+ const partial = createAssistantMessage("");
122
+ stream.push({ type: "start", partial });
123
+ stream.push({ type: "toolcall_start", contentIndex: 0, partial });
124
+ stream.push({ type: "toolcall_delta", contentIndex: 0, delta: '{"lo', partial });
125
+ stream.push({ type: "toolcall_delta", contentIndex: 0, delta: 'cation":', partial });
126
+ stream.push({ type: "toolcall_delta", contentIndex: 0, delta: '"NYC"}', partial });
127
+ stream.push({
128
+ type: "toolcall_end",
129
+ contentIndex: 0,
130
+ toolCall: {
131
+ type: "toolCall",
132
+ id: "call_1",
133
+ name: "get_weather",
134
+ arguments: { location: "NYC" },
135
+ },
136
+ partial,
137
+ });
138
+ stream.push({
139
+ type: "done",
140
+ reason: "toolUse",
141
+ message: createAssistantMessage("", "toolUse"),
142
+ });
143
+ stream.end();
144
+ const events = [];
145
+ for await (const event of stream) {
146
+ events.push(event);
147
+ }
148
+ const toolCallEnd = events.find((e) => e.type === "toolcall_end");
149
+ expect(toolCallEnd).toBeDefined();
150
+ if (toolCallEnd?.type === "toolcall_end") {
151
+ expect(toolCallEnd.toolCall.name).toBe("get_weather");
152
+ expect(toolCallEnd.toolCall.arguments).toEqual({ location: "NYC" });
153
+ }
154
+ });
155
+ });
156
+ describe("Provider Registry (pi-mono provider pattern)", () => {
157
+ beforeEach(() => {
158
+ // Clear registry
159
+ const providers = ["test-provider", "anthropic", "openai"];
160
+ for (const name of providers) {
161
+ try {
162
+ // Re-register to ensure clean state
163
+ }
164
+ catch {
165
+ // ignore
166
+ }
167
+ }
168
+ });
169
+ it("should register and retrieve providers", () => {
170
+ const provider = createMockProvider("test-provider", []);
171
+ registerProvider(provider);
172
+ const retrieved = getProvider("test-provider");
173
+ expect(retrieved).toBeDefined();
174
+ expect(retrieved?.name).toBe("test-provider");
175
+ });
176
+ it("should stream through registered provider", async () => {
177
+ const mockMessage = createAssistantMessage("Hello from mock");
178
+ const provider = createMockProvider("mock-ai", [
179
+ { type: "start", partial: createAssistantMessage("") },
180
+ { type: "done", reason: "stop", message: mockMessage },
181
+ ]);
182
+ registerProvider(provider);
183
+ const model = {
184
+ id: "mock-model",
185
+ name: "Mock Model",
186
+ provider: "mock-ai",
187
+ api: "mock",
188
+ };
189
+ const context = {
190
+ messages: [{ role: "user", content: "Hi", timestamp: Date.now() }],
191
+ };
192
+ const eventStream = stream(model, context);
193
+ const events = [];
194
+ for await (const event of eventStream) {
195
+ events.push(event);
196
+ }
197
+ expect(events.length).toBeGreaterThan(0);
198
+ const doneEvent = events.find((e) => e.type === "done");
199
+ expect(doneEvent).toBeDefined();
200
+ });
201
+ it("should complete through registered provider", async () => {
202
+ const mockMessage = createAssistantMessage("Completed");
203
+ const provider = createMockProvider("complete-ai", [
204
+ { type: "start", partial: createAssistantMessage("") },
205
+ { type: "done", reason: "stop", message: mockMessage },
206
+ ]);
207
+ registerProvider(provider);
208
+ const model = {
209
+ id: "complete-model",
210
+ name: "Complete Model",
211
+ provider: "complete-ai",
212
+ api: "complete",
213
+ };
214
+ const context = {
215
+ messages: [{ role: "user", content: "Test", timestamp: Date.now() }],
216
+ };
217
+ const result = await complete(model, context);
218
+ expect(result.content[0]).toEqual({ type: "text", text: "Completed" });
219
+ });
220
+ it("should throw for unregistered provider", () => {
221
+ const model = {
222
+ id: "unknown",
223
+ name: "Unknown",
224
+ provider: "nonexistent",
225
+ api: "unknown",
226
+ };
227
+ const context = { messages: [] };
228
+ expect(() => stream(model, context)).toThrow("No provider registered");
229
+ });
230
+ });
231
+ describe("Provider Error Handling", () => {
232
+ it("should emit error event on provider failure", async () => {
233
+ const errorProvider = {
234
+ name: "error-provider",
235
+ stream() {
236
+ const stream = new AssistantMessageEventStream();
237
+ setTimeout(() => {
238
+ const errorMsg = {
239
+ role: "assistant",
240
+ content: [],
241
+ provider: "error-provider",
242
+ model: "error-model",
243
+ usage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, totalTokens: 0 },
244
+ stopReason: "error",
245
+ errorMessage: "API Error",
246
+ timestamp: Date.now(),
247
+ };
248
+ stream.push({ type: "error", reason: "error", error: errorMsg });
249
+ stream.end();
250
+ }, 10);
251
+ return stream;
252
+ },
253
+ };
254
+ registerProvider(errorProvider);
255
+ const model = {
256
+ id: "error-model",
257
+ name: "Error Model",
258
+ provider: "error-provider",
259
+ api: "error",
260
+ };
261
+ const context = { messages: [] };
262
+ const result = await complete(model, context);
263
+ expect(result.stopReason).toBe("error");
264
+ expect(result.errorMessage).toBe("API Error");
265
+ });
266
+ });
267
+ describe("Streaming with AbortSignal", () => {
268
+ it("should respect abort signal", async () => {
269
+ const controller = new AbortController();
270
+ const slowProvider = {
271
+ name: "slow-provider",
272
+ stream(model, context, options) {
273
+ const stream = new AssistantMessageEventStream();
274
+ // Simulate slow stream
275
+ const interval = setInterval(() => {
276
+ if (options?.signal?.aborted) {
277
+ clearInterval(interval);
278
+ const abortedMsg = {
279
+ role: "assistant",
280
+ content: [],
281
+ provider: "slow-provider",
282
+ model: "slow-model",
283
+ usage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, totalTokens: 0 },
284
+ stopReason: "aborted",
285
+ timestamp: Date.now(),
286
+ };
287
+ stream.push({ type: "error", reason: "aborted", error: abortedMsg });
288
+ stream.end();
289
+ return;
290
+ }
291
+ stream.push({
292
+ type: "text_delta",
293
+ contentIndex: 0,
294
+ delta: "chunk ",
295
+ partial: createAssistantMessage(""),
296
+ });
297
+ }, 50);
298
+ // Auto-abort after 100ms
299
+ setTimeout(() => controller.abort(), 100);
300
+ return stream;
301
+ },
302
+ };
303
+ registerProvider(slowProvider);
304
+ const model = {
305
+ id: "slow-model",
306
+ name: "Slow Model",
307
+ provider: "slow-provider",
308
+ api: "slow",
309
+ };
310
+ const context = { messages: [] };
311
+ const eventStream = stream(model, context, { signal: controller.signal });
312
+ const events = [];
313
+ for await (const event of eventStream) {
314
+ events.push(event);
315
+ if (event.type === "error" || event.type === "done")
316
+ break;
317
+ }
318
+ // Should have received at least one event before abort
319
+ expect(events.length).toBeGreaterThan(0);
320
+ });
321
+ });
322
+ describe("Message Content Types", () => {
323
+ it("should handle text content", async () => {
324
+ const message = createAssistantMessage("Plain text");
325
+ expect(message.content[0]).toEqual({ type: "text", text: "Plain text" });
326
+ });
327
+ it("should handle thinking content", async () => {
328
+ const message = {
329
+ role: "assistant",
330
+ content: [
331
+ { type: "thinking", thinking: "Let me think...", thinkingSignature: "sig1" },
332
+ { type: "text", text: "Answer" },
333
+ ],
334
+ provider: "test",
335
+ model: "test",
336
+ usage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, totalTokens: 0 },
337
+ stopReason: "stop",
338
+ timestamp: Date.now(),
339
+ };
340
+ expect(message.content).toHaveLength(2);
341
+ expect(message.content[0].type).toBe("thinking");
342
+ });
343
+ it("should handle tool call content", async () => {
344
+ const message = {
345
+ role: "assistant",
346
+ content: [
347
+ {
348
+ type: "toolCall",
349
+ id: "call_1",
350
+ name: "get_weather",
351
+ arguments: { location: "NYC" },
352
+ },
353
+ ],
354
+ provider: "test",
355
+ model: "test",
356
+ usage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, totalTokens: 0 },
357
+ stopReason: "toolUse",
358
+ timestamp: Date.now(),
359
+ };
360
+ expect(message.content[0].type).toBe("toolCall");
361
+ expect(message.content[0].name).toBe("get_weather");
362
+ });
363
+ });
364
+ //# sourceMappingURL=e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2e.test.js","sourceRoot":"","sources":["../../src/__tests__/e2e.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=event-stream.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-stream.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/event-stream.test.ts"],"names":[],"mappings":""}