@voltx/ai 0.3.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,326 @@
1
+ import { ZodType } from 'zod';
2
+
3
+ interface TextContent {
4
+ type: "text";
5
+ text: string;
6
+ }
7
+ interface ImageContent {
8
+ type: "image_url";
9
+ image_url: {
10
+ url: string;
11
+ detail?: "auto" | "low" | "high";
12
+ };
13
+ }
14
+ type ContentPart = TextContent | ImageContent;
15
+ interface Message {
16
+ role: "system" | "user" | "assistant" | "tool";
17
+ content: string | ContentPart[];
18
+ name?: string;
19
+ tool_call_id?: string;
20
+ tool_calls?: ToolCallResult[];
21
+ }
22
+ interface ToolDefinition {
23
+ name: string;
24
+ description: string;
25
+ parameters: ZodType | Record<string, unknown>;
26
+ }
27
+ interface ToolCallResult {
28
+ id: string;
29
+ type: "function";
30
+ function: {
31
+ name: string;
32
+ arguments: string;
33
+ };
34
+ }
35
+ interface ProviderConfig {
36
+ apiKey?: string;
37
+ baseUrl?: string;
38
+ headers?: Record<string, string>;
39
+ }
40
+ interface ModelRef {
41
+ provider: string;
42
+ model: string;
43
+ config: ProviderConfig;
44
+ }
45
+ interface GenerateTextOptions {
46
+ model: string | ModelRef;
47
+ messages?: Message[];
48
+ system?: string;
49
+ prompt?: string;
50
+ tools?: Record<string, ToolDefinition>;
51
+ temperature?: number;
52
+ maxTokens?: number;
53
+ topP?: number;
54
+ stop?: string[];
55
+ /** Abort signal for cancellation */
56
+ signal?: AbortSignal;
57
+ }
58
+ interface GenerateTextResult {
59
+ text: string;
60
+ toolCalls: ParsedToolCall[];
61
+ usage: TokenUsage;
62
+ finishReason: FinishReason;
63
+ /** Raw response from the provider */
64
+ raw: unknown;
65
+ }
66
+ interface StreamTextOptions extends GenerateTextOptions {
67
+ }
68
+ interface StreamTextResult {
69
+ /** Async iterator of text chunks */
70
+ textStream: AsyncIterable<string>;
71
+ /** Full text (available after stream completes) */
72
+ text: Promise<string>;
73
+ /** Convert to SSE Response for HTTP endpoints */
74
+ toSSEResponse(): Response;
75
+ /** Convert to a ReadableStream of SSE events */
76
+ toReadableStream(): ReadableStream<Uint8Array>;
77
+ /** Usage info (available after stream completes) */
78
+ usage: Promise<TokenUsage>;
79
+ /** Abort the stream */
80
+ abort(): void;
81
+ }
82
+ interface GenerateObjectOptions<T = unknown> {
83
+ model: string | ModelRef;
84
+ messages?: Message[];
85
+ system?: string;
86
+ prompt?: string;
87
+ schema: ZodType<T>;
88
+ schemaName?: string;
89
+ schemaDescription?: string;
90
+ temperature?: number;
91
+ maxTokens?: number;
92
+ signal?: AbortSignal;
93
+ }
94
+ interface GenerateObjectResult<T = unknown> {
95
+ object: T;
96
+ usage: TokenUsage;
97
+ raw: unknown;
98
+ }
99
+ interface EmbedOptions {
100
+ model: string | ModelRef;
101
+ value: string;
102
+ }
103
+ interface EmbedManyOptions {
104
+ model: string | ModelRef;
105
+ values: string[];
106
+ }
107
+ interface EmbedResult {
108
+ embedding: number[];
109
+ usage: {
110
+ tokens: number;
111
+ };
112
+ }
113
+ interface EmbedManyResult {
114
+ embeddings: number[][];
115
+ usage: {
116
+ tokens: number;
117
+ };
118
+ }
119
+ interface ParsedToolCall {
120
+ id: string;
121
+ name: string;
122
+ args: Record<string, unknown>;
123
+ }
124
+ interface TokenUsage {
125
+ promptTokens: number;
126
+ completionTokens: number;
127
+ totalTokens: number;
128
+ }
129
+ type FinishReason = "stop" | "length" | "tool_calls" | "content_filter" | "error" | "unknown";
130
+ interface AIProvider {
131
+ name: string;
132
+ chat(options: ProviderChatOptions): Promise<ProviderChatResponse>;
133
+ stream(options: ProviderChatOptions): Promise<ProviderStreamResponse>;
134
+ embed?(options: ProviderEmbedOptions): Promise<ProviderEmbedResponse>;
135
+ }
136
+ interface ProviderChatOptions {
137
+ model: string;
138
+ messages: ProviderMessage[];
139
+ tools?: ProviderTool[];
140
+ temperature?: number;
141
+ maxTokens?: number;
142
+ topP?: number;
143
+ stop?: string[];
144
+ responseFormat?: {
145
+ type: "json_object" | "json_schema";
146
+ json_schema?: unknown;
147
+ };
148
+ signal?: AbortSignal;
149
+ }
150
+ interface ProviderMessage {
151
+ role: "system" | "user" | "assistant" | "tool";
152
+ content: string | null;
153
+ tool_calls?: ToolCallResult[];
154
+ tool_call_id?: string;
155
+ }
156
+ interface ProviderTool {
157
+ type: "function";
158
+ function: {
159
+ name: string;
160
+ description: string;
161
+ parameters: Record<string, unknown>;
162
+ };
163
+ }
164
+ interface ProviderChatResponse {
165
+ text: string | null;
166
+ toolCalls: ToolCallResult[];
167
+ usage: TokenUsage;
168
+ finishReason: FinishReason;
169
+ raw: unknown;
170
+ }
171
+ interface ProviderStreamResponse {
172
+ stream: AsyncIterable<StreamChunk>;
173
+ raw?: unknown;
174
+ }
175
+ interface StreamChunk {
176
+ type: "text-delta" | "tool-call-delta" | "finish" | "error";
177
+ textDelta?: string;
178
+ toolCallDelta?: Partial<ToolCallResult>;
179
+ finishReason?: FinishReason;
180
+ usage?: TokenUsage;
181
+ error?: string;
182
+ }
183
+ interface ProviderEmbedOptions {
184
+ model: string;
185
+ input: string | string[];
186
+ }
187
+ interface ProviderEmbedResponse {
188
+ embeddings: number[][];
189
+ usage: {
190
+ tokens: number;
191
+ };
192
+ }
193
+
194
+ /**
195
+ * Generate a complete text response from an LLM.
196
+ *
197
+ * @example
198
+ * ```ts
199
+ * const result = await generateText({
200
+ * model: "openai:gpt-4o",
201
+ * system: "You are a helpful assistant.",
202
+ * prompt: "What is TypeScript?",
203
+ * });
204
+ * console.log(result.text);
205
+ * ```
206
+ */
207
+ declare function generateText(options: GenerateTextOptions): Promise<GenerateTextResult>;
208
+
209
+ /**
210
+ * Stream text from an LLM using Server-Sent Events.
211
+ *
212
+ * @example
213
+ * ```ts
214
+ * const result = await streamText({
215
+ * model: "cerebras:llama-4-scout-17b-16e",
216
+ * prompt: "Write a poem about TypeScript",
217
+ * });
218
+ *
219
+ * for await (const chunk of result.textStream) {
220
+ * process.stdout.write(chunk);
221
+ * }
222
+ * ```
223
+ */
224
+ declare function streamText(options: StreamTextOptions): Promise<StreamTextResult>;
225
+
226
+ /**
227
+ * Generate a structured JSON object from an LLM, validated against a Zod schema.
228
+ *
229
+ * @example
230
+ * ```ts
231
+ * import { z } from "zod";
232
+ *
233
+ * const result = await generateObject({
234
+ * model: "openai:gpt-4o",
235
+ * prompt: "Generate a user profile",
236
+ * schema: z.object({
237
+ * name: z.string(),
238
+ * age: z.number(),
239
+ * interests: z.array(z.string()),
240
+ * }),
241
+ * });
242
+ * console.log(result.object); // { name: "...", age: 25, interests: [...] }
243
+ * ```
244
+ */
245
+ declare function generateObject<T>(options: GenerateObjectOptions<T>): Promise<GenerateObjectResult<T>>;
246
+
247
+ /**
248
+ * Generate an embedding vector for a single text.
249
+ *
250
+ * @example
251
+ * ```ts
252
+ * const { embedding } = await embed({
253
+ * model: "openai:text-embedding-3-small",
254
+ * value: "What is TypeScript?",
255
+ * });
256
+ * ```
257
+ */
258
+ declare function embed(options: EmbedOptions): Promise<EmbedResult>;
259
+ /**
260
+ * Generate embedding vectors for multiple texts in a single batch.
261
+ *
262
+ * @example
263
+ * ```ts
264
+ * const { embeddings } = await embedMany({
265
+ * model: "openai:text-embedding-3-small",
266
+ * values: ["Hello world", "TypeScript is great"],
267
+ * });
268
+ * ```
269
+ */
270
+ declare function embedMany(options: EmbedManyOptions): Promise<EmbedManyResult>;
271
+
272
+ declare function createOpenAIProvider(config?: ProviderConfig): AIProvider;
273
+ /** Shorthand: openai("gpt-4o") returns a ModelRef */
274
+ declare function openai(model: string): {
275
+ provider: string;
276
+ model: string;
277
+ config: {};
278
+ };
279
+
280
+ declare function createAnthropicProvider(config?: ProviderConfig): AIProvider;
281
+ /** Shorthand: anthropic("claude-sonnet-4") returns a ModelRef */
282
+ declare function anthropic(model: string): {
283
+ provider: string;
284
+ model: string;
285
+ config: {};
286
+ };
287
+
288
+ declare function createGoogleProvider(config?: ProviderConfig): AIProvider;
289
+ /** Shorthand: google("gemini-2.0-flash") returns a ModelRef */
290
+ declare function google(model: string): {
291
+ provider: string;
292
+ model: string;
293
+ config: {};
294
+ };
295
+
296
+ declare function createCerebrasProvider(config?: ProviderConfig): AIProvider;
297
+ /** Shorthand: cerebras("llama-4-scout-17b-16e") returns a ModelRef */
298
+ declare function cerebras(model: string): {
299
+ provider: string;
300
+ model: string;
301
+ config: {};
302
+ };
303
+
304
+ declare function createOpenRouterProvider(config?: ProviderConfig): AIProvider;
305
+ /** Shorthand: openrouter("meta-llama/llama-4-scout") returns a ModelRef */
306
+ declare function openrouter(model: string): {
307
+ provider: string;
308
+ model: string;
309
+ config: {};
310
+ };
311
+
312
+ declare function createOllamaProvider(config?: ProviderConfig): AIProvider;
313
+ /** Shorthand: ollama("llama3") returns a ModelRef */
314
+ declare function ollama(model: string): {
315
+ provider: string;
316
+ model: string;
317
+ config: {};
318
+ };
319
+
320
+ declare function registerProvider(name: string, factory: (config: ProviderConfig) => AIProvider): void;
321
+ declare function getProvider(name: string, config?: ProviderConfig): AIProvider;
322
+ declare function resolveModel(model: string | ModelRef): ModelRef;
323
+
324
+ declare const VERSION = "0.3.0";
325
+
326
+ export { type AIProvider, type ContentPart, type EmbedManyOptions, type EmbedManyResult, type EmbedOptions, type EmbedResult, type FinishReason, type GenerateObjectOptions, type GenerateObjectResult, type GenerateTextOptions, type GenerateTextResult, type ImageContent, type Message, type ModelRef, type ParsedToolCall, type ProviderConfig, type StreamChunk, type StreamTextOptions, type StreamTextResult, type TextContent, type TokenUsage, type ToolCallResult, type ToolDefinition, VERSION, anthropic, cerebras, createAnthropicProvider, createCerebrasProvider, createGoogleProvider, createOllamaProvider, createOpenAIProvider, createOpenRouterProvider, embed, embedMany, generateObject, generateText, getProvider, google, ollama, openai, openrouter, registerProvider, resolveModel, streamText };
@@ -0,0 +1,326 @@
1
+ import { ZodType } from 'zod';
2
+
3
+ interface TextContent {
4
+ type: "text";
5
+ text: string;
6
+ }
7
+ interface ImageContent {
8
+ type: "image_url";
9
+ image_url: {
10
+ url: string;
11
+ detail?: "auto" | "low" | "high";
12
+ };
13
+ }
14
+ type ContentPart = TextContent | ImageContent;
15
+ interface Message {
16
+ role: "system" | "user" | "assistant" | "tool";
17
+ content: string | ContentPart[];
18
+ name?: string;
19
+ tool_call_id?: string;
20
+ tool_calls?: ToolCallResult[];
21
+ }
22
+ interface ToolDefinition {
23
+ name: string;
24
+ description: string;
25
+ parameters: ZodType | Record<string, unknown>;
26
+ }
27
+ interface ToolCallResult {
28
+ id: string;
29
+ type: "function";
30
+ function: {
31
+ name: string;
32
+ arguments: string;
33
+ };
34
+ }
35
+ interface ProviderConfig {
36
+ apiKey?: string;
37
+ baseUrl?: string;
38
+ headers?: Record<string, string>;
39
+ }
40
+ interface ModelRef {
41
+ provider: string;
42
+ model: string;
43
+ config: ProviderConfig;
44
+ }
45
+ interface GenerateTextOptions {
46
+ model: string | ModelRef;
47
+ messages?: Message[];
48
+ system?: string;
49
+ prompt?: string;
50
+ tools?: Record<string, ToolDefinition>;
51
+ temperature?: number;
52
+ maxTokens?: number;
53
+ topP?: number;
54
+ stop?: string[];
55
+ /** Abort signal for cancellation */
56
+ signal?: AbortSignal;
57
+ }
58
+ interface GenerateTextResult {
59
+ text: string;
60
+ toolCalls: ParsedToolCall[];
61
+ usage: TokenUsage;
62
+ finishReason: FinishReason;
63
+ /** Raw response from the provider */
64
+ raw: unknown;
65
+ }
66
+ interface StreamTextOptions extends GenerateTextOptions {
67
+ }
68
+ interface StreamTextResult {
69
+ /** Async iterator of text chunks */
70
+ textStream: AsyncIterable<string>;
71
+ /** Full text (available after stream completes) */
72
+ text: Promise<string>;
73
+ /** Convert to SSE Response for HTTP endpoints */
74
+ toSSEResponse(): Response;
75
+ /** Convert to a ReadableStream of SSE events */
76
+ toReadableStream(): ReadableStream<Uint8Array>;
77
+ /** Usage info (available after stream completes) */
78
+ usage: Promise<TokenUsage>;
79
+ /** Abort the stream */
80
+ abort(): void;
81
+ }
82
+ interface GenerateObjectOptions<T = unknown> {
83
+ model: string | ModelRef;
84
+ messages?: Message[];
85
+ system?: string;
86
+ prompt?: string;
87
+ schema: ZodType<T>;
88
+ schemaName?: string;
89
+ schemaDescription?: string;
90
+ temperature?: number;
91
+ maxTokens?: number;
92
+ signal?: AbortSignal;
93
+ }
94
+ interface GenerateObjectResult<T = unknown> {
95
+ object: T;
96
+ usage: TokenUsage;
97
+ raw: unknown;
98
+ }
99
+ interface EmbedOptions {
100
+ model: string | ModelRef;
101
+ value: string;
102
+ }
103
+ interface EmbedManyOptions {
104
+ model: string | ModelRef;
105
+ values: string[];
106
+ }
107
+ interface EmbedResult {
108
+ embedding: number[];
109
+ usage: {
110
+ tokens: number;
111
+ };
112
+ }
113
+ interface EmbedManyResult {
114
+ embeddings: number[][];
115
+ usage: {
116
+ tokens: number;
117
+ };
118
+ }
119
+ interface ParsedToolCall {
120
+ id: string;
121
+ name: string;
122
+ args: Record<string, unknown>;
123
+ }
124
+ interface TokenUsage {
125
+ promptTokens: number;
126
+ completionTokens: number;
127
+ totalTokens: number;
128
+ }
129
+ type FinishReason = "stop" | "length" | "tool_calls" | "content_filter" | "error" | "unknown";
130
+ interface AIProvider {
131
+ name: string;
132
+ chat(options: ProviderChatOptions): Promise<ProviderChatResponse>;
133
+ stream(options: ProviderChatOptions): Promise<ProviderStreamResponse>;
134
+ embed?(options: ProviderEmbedOptions): Promise<ProviderEmbedResponse>;
135
+ }
136
+ interface ProviderChatOptions {
137
+ model: string;
138
+ messages: ProviderMessage[];
139
+ tools?: ProviderTool[];
140
+ temperature?: number;
141
+ maxTokens?: number;
142
+ topP?: number;
143
+ stop?: string[];
144
+ responseFormat?: {
145
+ type: "json_object" | "json_schema";
146
+ json_schema?: unknown;
147
+ };
148
+ signal?: AbortSignal;
149
+ }
150
+ interface ProviderMessage {
151
+ role: "system" | "user" | "assistant" | "tool";
152
+ content: string | null;
153
+ tool_calls?: ToolCallResult[];
154
+ tool_call_id?: string;
155
+ }
156
+ interface ProviderTool {
157
+ type: "function";
158
+ function: {
159
+ name: string;
160
+ description: string;
161
+ parameters: Record<string, unknown>;
162
+ };
163
+ }
164
+ interface ProviderChatResponse {
165
+ text: string | null;
166
+ toolCalls: ToolCallResult[];
167
+ usage: TokenUsage;
168
+ finishReason: FinishReason;
169
+ raw: unknown;
170
+ }
171
+ interface ProviderStreamResponse {
172
+ stream: AsyncIterable<StreamChunk>;
173
+ raw?: unknown;
174
+ }
175
+ interface StreamChunk {
176
+ type: "text-delta" | "tool-call-delta" | "finish" | "error";
177
+ textDelta?: string;
178
+ toolCallDelta?: Partial<ToolCallResult>;
179
+ finishReason?: FinishReason;
180
+ usage?: TokenUsage;
181
+ error?: string;
182
+ }
183
+ interface ProviderEmbedOptions {
184
+ model: string;
185
+ input: string | string[];
186
+ }
187
+ interface ProviderEmbedResponse {
188
+ embeddings: number[][];
189
+ usage: {
190
+ tokens: number;
191
+ };
192
+ }
193
+
194
+ /**
195
+ * Generate a complete text response from an LLM.
196
+ *
197
+ * @example
198
+ * ```ts
199
+ * const result = await generateText({
200
+ * model: "openai:gpt-4o",
201
+ * system: "You are a helpful assistant.",
202
+ * prompt: "What is TypeScript?",
203
+ * });
204
+ * console.log(result.text);
205
+ * ```
206
+ */
207
+ declare function generateText(options: GenerateTextOptions): Promise<GenerateTextResult>;
208
+
209
+ /**
210
+ * Stream text from an LLM using Server-Sent Events.
211
+ *
212
+ * @example
213
+ * ```ts
214
+ * const result = await streamText({
215
+ * model: "cerebras:llama-4-scout-17b-16e",
216
+ * prompt: "Write a poem about TypeScript",
217
+ * });
218
+ *
219
+ * for await (const chunk of result.textStream) {
220
+ * process.stdout.write(chunk);
221
+ * }
222
+ * ```
223
+ */
224
+ declare function streamText(options: StreamTextOptions): Promise<StreamTextResult>;
225
+
226
+ /**
227
+ * Generate a structured JSON object from an LLM, validated against a Zod schema.
228
+ *
229
+ * @example
230
+ * ```ts
231
+ * import { z } from "zod";
232
+ *
233
+ * const result = await generateObject({
234
+ * model: "openai:gpt-4o",
235
+ * prompt: "Generate a user profile",
236
+ * schema: z.object({
237
+ * name: z.string(),
238
+ * age: z.number(),
239
+ * interests: z.array(z.string()),
240
+ * }),
241
+ * });
242
+ * console.log(result.object); // { name: "...", age: 25, interests: [...] }
243
+ * ```
244
+ */
245
+ declare function generateObject<T>(options: GenerateObjectOptions<T>): Promise<GenerateObjectResult<T>>;
246
+
247
+ /**
248
+ * Generate an embedding vector for a single text.
249
+ *
250
+ * @example
251
+ * ```ts
252
+ * const { embedding } = await embed({
253
+ * model: "openai:text-embedding-3-small",
254
+ * value: "What is TypeScript?",
255
+ * });
256
+ * ```
257
+ */
258
+ declare function embed(options: EmbedOptions): Promise<EmbedResult>;
259
+ /**
260
+ * Generate embedding vectors for multiple texts in a single batch.
261
+ *
262
+ * @example
263
+ * ```ts
264
+ * const { embeddings } = await embedMany({
265
+ * model: "openai:text-embedding-3-small",
266
+ * values: ["Hello world", "TypeScript is great"],
267
+ * });
268
+ * ```
269
+ */
270
+ declare function embedMany(options: EmbedManyOptions): Promise<EmbedManyResult>;
271
+
272
+ declare function createOpenAIProvider(config?: ProviderConfig): AIProvider;
273
+ /** Shorthand: openai("gpt-4o") returns a ModelRef */
274
+ declare function openai(model: string): {
275
+ provider: string;
276
+ model: string;
277
+ config: {};
278
+ };
279
+
280
+ declare function createAnthropicProvider(config?: ProviderConfig): AIProvider;
281
+ /** Shorthand: anthropic("claude-sonnet-4") returns a ModelRef */
282
+ declare function anthropic(model: string): {
283
+ provider: string;
284
+ model: string;
285
+ config: {};
286
+ };
287
+
288
+ declare function createGoogleProvider(config?: ProviderConfig): AIProvider;
289
+ /** Shorthand: google("gemini-2.0-flash") returns a ModelRef */
290
+ declare function google(model: string): {
291
+ provider: string;
292
+ model: string;
293
+ config: {};
294
+ };
295
+
296
+ declare function createCerebrasProvider(config?: ProviderConfig): AIProvider;
297
+ /** Shorthand: cerebras("llama-4-scout-17b-16e") returns a ModelRef */
298
+ declare function cerebras(model: string): {
299
+ provider: string;
300
+ model: string;
301
+ config: {};
302
+ };
303
+
304
+ declare function createOpenRouterProvider(config?: ProviderConfig): AIProvider;
305
+ /** Shorthand: openrouter("meta-llama/llama-4-scout") returns a ModelRef */
306
+ declare function openrouter(model: string): {
307
+ provider: string;
308
+ model: string;
309
+ config: {};
310
+ };
311
+
312
+ declare function createOllamaProvider(config?: ProviderConfig): AIProvider;
313
+ /** Shorthand: ollama("llama3") returns a ModelRef */
314
+ declare function ollama(model: string): {
315
+ provider: string;
316
+ model: string;
317
+ config: {};
318
+ };
319
+
320
+ declare function registerProvider(name: string, factory: (config: ProviderConfig) => AIProvider): void;
321
+ declare function getProvider(name: string, config?: ProviderConfig): AIProvider;
322
+ declare function resolveModel(model: string | ModelRef): ModelRef;
323
+
324
+ declare const VERSION = "0.3.0";
325
+
326
+ export { type AIProvider, type ContentPart, type EmbedManyOptions, type EmbedManyResult, type EmbedOptions, type EmbedResult, type FinishReason, type GenerateObjectOptions, type GenerateObjectResult, type GenerateTextOptions, type GenerateTextResult, type ImageContent, type Message, type ModelRef, type ParsedToolCall, type ProviderConfig, type StreamChunk, type StreamTextOptions, type StreamTextResult, type TextContent, type TokenUsage, type ToolCallResult, type ToolDefinition, VERSION, anthropic, cerebras, createAnthropicProvider, createCerebrasProvider, createGoogleProvider, createOllamaProvider, createOpenAIProvider, createOpenRouterProvider, embed, embedMany, generateObject, generateText, getProvider, google, ollama, openai, openrouter, registerProvider, resolveModel, streamText };