ai-functions 2.1.3 → 2.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.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +55 -1
- package/README.md +38 -0
- package/dist/ai-promise.d.ts +3 -3
- package/dist/ai-promise.d.ts.map +1 -1
- package/dist/ai-promise.js +135 -64
- package/dist/ai-promise.js.map +1 -1
- package/dist/ai-schemas.d.ts +56 -0
- package/dist/ai-schemas.d.ts.map +1 -0
- package/dist/ai-schemas.js +53 -0
- package/dist/ai-schemas.js.map +1 -0
- package/dist/ai.d.ts +16 -242
- package/dist/ai.d.ts.map +1 -1
- package/dist/ai.js +51 -858
- package/dist/ai.js.map +1 -1
- package/dist/batch/anthropic.d.ts +6 -4
- package/dist/batch/anthropic.d.ts.map +1 -1
- package/dist/batch/anthropic.js +83 -145
- package/dist/batch/anthropic.js.map +1 -1
- package/dist/batch/bedrock.d.ts +8 -30
- package/dist/batch/bedrock.d.ts.map +1 -1
- package/dist/batch/bedrock.js +155 -338
- package/dist/batch/bedrock.js.map +1 -1
- package/dist/batch/cloudflare.d.ts +8 -20
- package/dist/batch/cloudflare.d.ts.map +1 -1
- package/dist/batch/cloudflare.js +68 -189
- package/dist/batch/cloudflare.js.map +1 -1
- package/dist/batch/google.d.ts +6 -20
- package/dist/batch/google.d.ts.map +1 -1
- package/dist/batch/google.js +70 -238
- package/dist/batch/google.js.map +1 -1
- package/dist/batch/index.d.ts +4 -1
- package/dist/batch/index.d.ts.map +1 -1
- package/dist/batch/index.js +4 -1
- package/dist/batch/index.js.map +1 -1
- package/dist/batch/memory.d.ts +1 -1
- package/dist/batch/memory.d.ts.map +1 -1
- package/dist/batch/memory.js +14 -10
- package/dist/batch/memory.js.map +1 -1
- package/dist/batch/openai.d.ts +11 -14
- package/dist/batch/openai.d.ts.map +1 -1
- package/dist/batch/openai.js +52 -156
- package/dist/batch/openai.js.map +1 -1
- package/dist/batch/provider.d.ts +111 -0
- package/dist/batch/provider.d.ts.map +1 -0
- package/dist/batch/provider.js +233 -0
- package/dist/batch/provider.js.map +1 -0
- package/dist/batch-map.d.ts.map +1 -1
- package/dist/batch-map.js +23 -17
- package/dist/batch-map.js.map +1 -1
- package/dist/batch-queue.d.ts +65 -0
- package/dist/batch-queue.d.ts.map +1 -1
- package/dist/batch-queue.js +169 -14
- package/dist/batch-queue.js.map +1 -1
- package/dist/budget.d.ts.map +1 -1
- package/dist/budget.js +27 -14
- package/dist/budget.js.map +1 -1
- package/dist/cache.d.ts +23 -0
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +36 -15
- package/dist/cache.js.map +1 -1
- package/dist/context.d.ts +26 -8
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +64 -62
- package/dist/context.js.map +1 -1
- package/dist/digital-objects-registry.d.ts +229 -0
- package/dist/digital-objects-registry.d.ts.map +1 -0
- package/dist/digital-objects-registry.js +617 -0
- package/dist/digital-objects-registry.js.map +1 -0
- package/dist/embeddings.d.ts +2 -2
- package/dist/embeddings.d.ts.map +1 -1
- package/dist/errors.d.ts +22 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +35 -0
- package/dist/errors.js.map +1 -0
- package/dist/eval/runner.d.ts +8 -0
- package/dist/eval/runner.d.ts.map +1 -1
- package/dist/eval/runner.js +41 -35
- package/dist/eval/runner.js.map +1 -1
- package/dist/eval-log/in-memory.d.ts +34 -0
- package/dist/eval-log/in-memory.d.ts.map +1 -0
- package/dist/eval-log/in-memory.js +84 -0
- package/dist/eval-log/in-memory.js.map +1 -0
- package/dist/eval-log/index.d.ts +29 -0
- package/dist/eval-log/index.d.ts.map +1 -0
- package/dist/eval-log/index.js +39 -0
- package/dist/eval-log/index.js.map +1 -0
- package/dist/eval-log/types.d.ts +101 -0
- package/dist/eval-log/types.d.ts.map +1 -0
- package/dist/eval-log/types.js +16 -0
- package/dist/eval-log/types.js.map +1 -0
- package/dist/function-registry.d.ts +116 -0
- package/dist/function-registry.d.ts.map +1 -0
- package/dist/function-registry.js +546 -0
- package/dist/function-registry.js.map +1 -0
- package/dist/generate.d.ts +9 -3
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +18 -18
- package/dist/generate.js.map +1 -1
- package/dist/index.d.ts +18 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -18
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +118 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +187 -0
- package/dist/logger.js.map +1 -0
- package/dist/middleware/budget.d.ts +84 -0
- package/dist/middleware/budget.d.ts.map +1 -0
- package/dist/middleware/budget.js +110 -0
- package/dist/middleware/budget.js.map +1 -0
- package/dist/middleware/cache.d.ts +103 -0
- package/dist/middleware/cache.d.ts.map +1 -0
- package/dist/middleware/cache.js +228 -0
- package/dist/middleware/cache.js.map +1 -0
- package/dist/middleware/embed-cache.d.ts +99 -0
- package/dist/middleware/embed-cache.d.ts.map +1 -0
- package/dist/middleware/embed-cache.js +128 -0
- package/dist/middleware/embed-cache.js.map +1 -0
- package/dist/middleware/index.d.ts +11 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +11 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/trace.d.ts +103 -0
- package/dist/middleware/trace.d.ts.map +1 -0
- package/dist/middleware/trace.js +176 -0
- package/dist/middleware/trace.js.map +1 -0
- package/dist/primitives.d.ts +120 -1
- package/dist/primitives.d.ts.map +1 -1
- package/dist/primitives.js +398 -26
- package/dist/primitives.js.map +1 -1
- package/dist/retry.d.ts +66 -1
- package/dist/retry.d.ts.map +1 -1
- package/dist/retry.js +115 -8
- package/dist/retry.js.map +1 -1
- package/dist/schema.js +2 -2
- package/dist/schema.js.map +1 -1
- package/dist/telemetry.d.ts +128 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +285 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/template.d.ts.map +1 -1
- package/dist/template.js +6 -1
- package/dist/template.js.map +1 -1
- package/dist/tool-orchestration.d.ts +66 -4
- package/dist/tool-orchestration.d.ts.map +1 -1
- package/dist/tool-orchestration.js +123 -23
- package/dist/tool-orchestration.js.map +1 -1
- package/dist/type-guards.d.ts +28 -0
- package/dist/type-guards.d.ts.map +1 -0
- package/dist/type-guards.js +29 -0
- package/dist/type-guards.js.map +1 -0
- package/dist/types.d.ts +135 -17
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +36 -1
- package/dist/types.js.map +1 -1
- package/dist/wrap-for-v3.d.ts +80 -0
- package/dist/wrap-for-v3.d.ts.map +1 -0
- package/dist/wrap-for-v3.js +89 -0
- package/dist/wrap-for-v3.js.map +1 -0
- package/examples/00-quickstart.ts +232 -0
- package/examples/01-rag-chatbot.ts +212 -0
- package/examples/02-multi-agent-research.ts +290 -0
- package/examples/03-email-classification.ts +379 -0
- package/examples/04-content-moderation.ts +400 -0
- package/examples/05-document-extraction.ts +455 -0
- package/examples/06-streaming-chat-nextjs.ts +437 -0
- package/examples/07-cloudflare-worker.ts +483 -0
- package/examples/08-batch-processing.ts +491 -0
- package/examples/09-budget-constrained.ts +527 -0
- package/examples/10-tool-orchestration.ts +565 -0
- package/examples/11-retry-resilience.ts +403 -0
- package/examples/12-caching-strategies.ts +422 -0
- package/examples/README.md +145 -0
- package/package.json +28 -25
- package/src/ai-promise.ts +226 -140
- package/src/ai-schemas.ts +122 -0
- package/src/ai.ts +69 -1176
- package/src/batch/anthropic.ts +96 -161
- package/src/batch/bedrock.ts +203 -454
- package/src/batch/cloudflare.ts +99 -282
- package/src/batch/google.ts +91 -297
- package/src/batch/index.ts +4 -1
- package/src/batch/memory.ts +15 -10
- package/src/batch/openai.ts +65 -193
- package/src/batch/provider.ts +336 -0
- package/src/batch-map.ts +29 -24
- package/src/batch-queue.ts +200 -11
- package/src/budget.ts +31 -18
- package/src/cache.ts +45 -17
- package/src/context.ts +106 -77
- package/src/digital-objects-registry.ts +750 -0
- package/src/errors.ts +37 -0
- package/src/eval/runner.ts +60 -36
- package/src/eval-log/in-memory.ts +90 -0
- package/src/eval-log/index.ts +46 -0
- package/src/eval-log/types.ts +110 -0
- package/src/function-registry.ts +671 -0
- package/src/generate.ts +33 -28
- package/src/index.ts +119 -21
- package/src/logger.ts +232 -0
- package/src/middleware/budget.ts +171 -0
- package/src/middleware/cache.ts +299 -0
- package/src/middleware/embed-cache.ts +195 -0
- package/src/middleware/index.ts +23 -0
- package/src/middleware/trace.ts +248 -0
- package/src/primitives.ts +589 -62
- package/src/retry.ts +144 -18
- package/src/schema.ts +8 -8
- package/src/telemetry.ts +403 -0
- package/src/template.ts +8 -4
- package/src/tool-orchestration.ts +213 -48
- package/src/type-guards.ts +31 -0
- package/src/types.ts +164 -25
- package/src/wrap-for-v3.ts +105 -0
- package/test/ai-promise.test.ts +1080 -0
- package/test/ai-proxy.test.ts +1 -1
- package/test/batch-autosubmit-errors.test.ts +49 -37
- package/test/batch-blog-posts.test.ts +87 -129
- package/test/core-functions.test.ts +183 -579
- package/test/decide.test.ts +154 -322
- package/test/define.test.ts +211 -8
- package/test/digital-objects-registry.test.ts +760 -0
- package/test/embedding-cache-middleware.test.ts +140 -0
- package/test/generate-core.test.ts +140 -229
- package/test/implicit-batch.test.ts +22 -65
- package/test/retry-policy-integration.test.ts +117 -0
- package/test/schema.test.ts +55 -19
- package/test/template.test.ts +1164 -0
- package/test/tool-orchestration.test.ts +270 -0
- package/test/wrap-for-v3.test.ts +612 -0
- package/vitest.config.js +6 -0
- package/vitest.config.ts +20 -0
- package/LICENSE +0 -21
- package/dist/rpc/auth.d.ts +0 -69
- package/dist/rpc/auth.d.ts.map +0 -1
- package/dist/rpc/auth.js +0 -136
- package/dist/rpc/auth.js.map +0 -1
- package/dist/rpc/client.d.ts +0 -62
- package/dist/rpc/client.d.ts.map +0 -1
- package/dist/rpc/client.js +0 -103
- package/dist/rpc/client.js.map +0 -1
- package/dist/rpc/deferred.d.ts +0 -60
- package/dist/rpc/deferred.d.ts.map +0 -1
- package/dist/rpc/deferred.js +0 -96
- package/dist/rpc/deferred.js.map +0 -1
- package/dist/rpc/index.d.ts +0 -22
- package/dist/rpc/index.d.ts.map +0 -1
- package/dist/rpc/index.js +0 -38
- package/dist/rpc/index.js.map +0 -1
- package/dist/rpc/local.d.ts +0 -42
- package/dist/rpc/local.d.ts.map +0 -1
- package/dist/rpc/local.js +0 -50
- package/dist/rpc/local.js.map +0 -1
- package/dist/rpc/server.d.ts +0 -165
- package/dist/rpc/server.d.ts.map +0 -1
- package/dist/rpc/server.js +0 -405
- package/dist/rpc/server.js.map +0 -1
- package/dist/rpc/session.d.ts +0 -32
- package/dist/rpc/session.d.ts.map +0 -1
- package/dist/rpc/session.js +0 -43
- package/dist/rpc/session.js.map +0 -1
- package/dist/rpc/transport.d.ts +0 -306
- package/dist/rpc/transport.d.ts.map +0 -1
- package/dist/rpc/transport.js +0 -731
- package/dist/rpc/transport.js.map +0 -1
- package/src/batch/anthropic.js +0 -256
- package/src/batch/bedrock.js +0 -584
- package/src/batch/cloudflare.js +0 -287
- package/src/batch/google.js +0 -359
- package/src/batch/index.js +0 -30
- package/src/batch/memory.js +0 -187
- package/src/batch/openai.js +0 -402
- package/src/eval/index.js +0 -7
- package/src/eval/models.js +0 -119
- package/src/eval/runner.js +0 -147
- package/test/schema.test.js +0 -96
package/src/generate.ts
CHANGED
|
@@ -10,18 +10,15 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import {
|
|
13
|
-
generateObject as sdkGenerateObject,
|
|
14
13
|
generateText as sdkGenerateText,
|
|
15
|
-
streamObject as sdkStreamObject,
|
|
16
14
|
streamText as sdkStreamText,
|
|
17
|
-
|
|
15
|
+
Output,
|
|
18
16
|
type GenerateTextResult,
|
|
19
|
-
type StreamObjectResult,
|
|
20
17
|
type StreamTextResult,
|
|
21
|
-
type LanguageModel
|
|
18
|
+
type LanguageModel,
|
|
22
19
|
} from 'ai'
|
|
23
20
|
import { schema as convertSchema, type SimpleSchema } from './schema.js'
|
|
24
|
-
import { isZodSchema } from '
|
|
21
|
+
import { isZodSchema } from './type-guards.js'
|
|
25
22
|
import type { ZodTypeAny } from 'zod'
|
|
26
23
|
|
|
27
24
|
type ModelArg = string | LanguageModel
|
|
@@ -44,7 +41,11 @@ interface GenerateObjectOptions<T> {
|
|
|
44
41
|
maxRetries?: number
|
|
45
42
|
abortSignal?: AbortSignal
|
|
46
43
|
headers?: Record<string, string>
|
|
47
|
-
experimental_telemetry?: {
|
|
44
|
+
experimental_telemetry?: {
|
|
45
|
+
isEnabled?: boolean
|
|
46
|
+
functionId?: string
|
|
47
|
+
metadata?: Record<string, string>
|
|
48
|
+
}
|
|
48
49
|
}
|
|
49
50
|
|
|
50
51
|
interface GenerateTextOptions {
|
|
@@ -65,7 +66,11 @@ interface GenerateTextOptions {
|
|
|
65
66
|
tools?: Record<string, unknown>
|
|
66
67
|
toolChoice?: 'auto' | 'none' | 'required' | { type: 'tool'; toolName: string }
|
|
67
68
|
maxSteps?: number
|
|
68
|
-
experimental_telemetry?: {
|
|
69
|
+
experimental_telemetry?: {
|
|
70
|
+
isEnabled?: boolean
|
|
71
|
+
functionId?: string
|
|
72
|
+
metadata?: Record<string, string>
|
|
73
|
+
}
|
|
69
74
|
}
|
|
70
75
|
|
|
71
76
|
/**
|
|
@@ -131,16 +136,17 @@ function resolveSchema(schemaArg: SchemaArg): ZodTypeAny {
|
|
|
131
136
|
*/
|
|
132
137
|
export async function generateObject<T>(
|
|
133
138
|
options: GenerateObjectOptions<T>
|
|
134
|
-
): Promise<
|
|
139
|
+
): Promise<{ object: T; usage?: unknown; warnings?: unknown[] | undefined }> {
|
|
135
140
|
const model = await resolveModel(options.model)
|
|
136
141
|
const schema = resolveSchema(options.schema as SchemaArg)
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
142
|
+
const { schema: _schema, mode: _mode, ...rest } = options
|
|
143
|
+
// Using unknown cast for SDK compatibility - the AI SDK has complex type unions
|
|
144
|
+
const result = await sdkGenerateText({
|
|
145
|
+
...rest,
|
|
140
146
|
model,
|
|
141
|
-
schema,
|
|
142
|
-
|
|
143
|
-
|
|
147
|
+
output: Output.object({ schema }),
|
|
148
|
+
} as unknown as Parameters<typeof sdkGenerateText>[0])
|
|
149
|
+
return { object: result.output as T, usage: result.usage, warnings: result.warnings }
|
|
144
150
|
}
|
|
145
151
|
|
|
146
152
|
/**
|
|
@@ -172,7 +178,7 @@ export async function generateText(
|
|
|
172
178
|
const model = await resolveModel(options.model)
|
|
173
179
|
return sdkGenerateText({
|
|
174
180
|
...options,
|
|
175
|
-
model
|
|
181
|
+
model,
|
|
176
182
|
} as Parameters<typeof sdkGenerateText>[0])
|
|
177
183
|
}
|
|
178
184
|
|
|
@@ -196,20 +202,19 @@ export async function generateText(
|
|
|
196
202
|
*/
|
|
197
203
|
export async function streamObject<T>(
|
|
198
204
|
options: GenerateObjectOptions<T>
|
|
199
|
-
): Promise<
|
|
205
|
+
): Promise<{ partialObjectStream: AsyncIterable<T> }> {
|
|
200
206
|
const model = await resolveModel(options.model)
|
|
201
207
|
const schema = resolveSchema(options.schema as SchemaArg)
|
|
202
|
-
|
|
203
|
-
//
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
207
|
-
return sdkStreamObject({
|
|
208
|
-
...options,
|
|
208
|
+
const { schema: _schema, mode: _mode, ...rest } = options
|
|
209
|
+
// Using unknown cast for SDK compatibility - the AI SDK has complex type unions
|
|
210
|
+
const result = await sdkStreamText({
|
|
211
|
+
...rest,
|
|
209
212
|
model,
|
|
210
|
-
schema,
|
|
211
|
-
|
|
212
|
-
|
|
213
|
+
output: Output.object({ schema }),
|
|
214
|
+
} as unknown as Parameters<typeof sdkStreamText>[0])
|
|
215
|
+
return {
|
|
216
|
+
partialObjectStream: result.partialOutputStream as AsyncIterable<T>,
|
|
217
|
+
}
|
|
213
218
|
}
|
|
214
219
|
|
|
215
220
|
/**
|
|
@@ -235,6 +240,6 @@ export async function streamText(
|
|
|
235
240
|
const model = await resolveModel(options.model)
|
|
236
241
|
return sdkStreamText({
|
|
237
242
|
...options,
|
|
238
|
-
model
|
|
243
|
+
model,
|
|
239
244
|
} as Parameters<typeof sdkStreamText>[0])
|
|
240
245
|
}
|
package/src/index.ts
CHANGED
|
@@ -17,10 +17,10 @@
|
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
19
|
// ============================================================================
|
|
20
|
-
// Re-export core primitives
|
|
20
|
+
// Re-export core primitives for backward compatibility
|
|
21
21
|
// ============================================================================
|
|
22
22
|
|
|
23
|
-
// Types
|
|
23
|
+
// Types
|
|
24
24
|
export type {
|
|
25
25
|
AIFunctionDefinition,
|
|
26
26
|
JSONSchema,
|
|
@@ -46,6 +46,7 @@ export type {
|
|
|
46
46
|
BaseFunctionDefinition,
|
|
47
47
|
CodeFunctionDefinition,
|
|
48
48
|
CodeFunctionResult,
|
|
49
|
+
CodeGenerationDefinition,
|
|
49
50
|
GenerativeFunctionDefinition,
|
|
50
51
|
GenerativeFunctionResult,
|
|
51
52
|
AgenticFunctionDefinition,
|
|
@@ -56,12 +57,12 @@ export type {
|
|
|
56
57
|
DefinedFunction,
|
|
57
58
|
FunctionRegistry,
|
|
58
59
|
AutoDefineResult,
|
|
59
|
-
} from '
|
|
60
|
+
} from './types.js'
|
|
60
61
|
|
|
61
|
-
// Schema exports
|
|
62
|
-
export { schema, type SimpleSchema } from '
|
|
62
|
+
// Schema exports
|
|
63
|
+
export { schema, type SimpleSchema } from './schema.js'
|
|
63
64
|
|
|
64
|
-
// Template exports
|
|
65
|
+
// Template exports
|
|
65
66
|
export {
|
|
66
67
|
parseTemplate,
|
|
67
68
|
createTemplateFunction,
|
|
@@ -73,9 +74,9 @@ export {
|
|
|
73
74
|
type BatchableFunction,
|
|
74
75
|
type StreamableList,
|
|
75
76
|
type ChainablePromise,
|
|
76
|
-
} from '
|
|
77
|
+
} from './template.js'
|
|
77
78
|
|
|
78
|
-
// AIPromise exports
|
|
79
|
+
// AIPromise exports
|
|
79
80
|
export {
|
|
80
81
|
AIPromise,
|
|
81
82
|
isAIPromise,
|
|
@@ -93,12 +94,12 @@ export {
|
|
|
93
94
|
type AIPromiseOptions,
|
|
94
95
|
type StreamingAIPromise,
|
|
95
96
|
type StreamOptions,
|
|
96
|
-
} from '
|
|
97
|
+
} from './ai-promise.js'
|
|
97
98
|
|
|
98
|
-
// Generation exports
|
|
99
|
-
export { generateObject, generateText, streamObject, streamText } from '
|
|
99
|
+
// Generation exports
|
|
100
|
+
export { generateObject, generateText, streamObject, streamText } from './generate.js'
|
|
100
101
|
|
|
101
|
-
// Primitives
|
|
102
|
+
// Primitives
|
|
102
103
|
export {
|
|
103
104
|
generate,
|
|
104
105
|
type GenerateType,
|
|
@@ -125,9 +126,9 @@ export {
|
|
|
125
126
|
review,
|
|
126
127
|
type HumanOptions,
|
|
127
128
|
type HumanResult,
|
|
128
|
-
} from '
|
|
129
|
+
} from './primitives.js'
|
|
129
130
|
|
|
130
|
-
// Context exports
|
|
131
|
+
// Context exports
|
|
131
132
|
export {
|
|
132
133
|
configure,
|
|
133
134
|
getContext,
|
|
@@ -137,20 +138,39 @@ export {
|
|
|
137
138
|
getModel,
|
|
138
139
|
getProvider,
|
|
139
140
|
type ExecutionContext,
|
|
140
|
-
} from '
|
|
141
|
+
} from './context.js'
|
|
141
142
|
|
|
142
|
-
// Type guards
|
|
143
|
-
export { isZodSchema } from '
|
|
143
|
+
// Type guards
|
|
144
|
+
export { isZodSchema } from './type-guards.js'
|
|
144
145
|
|
|
145
146
|
// ============================================================================
|
|
146
147
|
// Export AI Proxy (the AI class/proxy from ai.ts)
|
|
147
148
|
// This is separate from the core 'ai' template function
|
|
148
149
|
// ============================================================================
|
|
149
150
|
|
|
150
|
-
export {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
151
|
+
export {
|
|
152
|
+
AI,
|
|
153
|
+
ai as aiProxy,
|
|
154
|
+
define,
|
|
155
|
+
defineFunction,
|
|
156
|
+
functions,
|
|
157
|
+
createFunctionRegistry,
|
|
158
|
+
resetGlobalRegistry,
|
|
159
|
+
withTemplate,
|
|
160
|
+
type AIProxy,
|
|
161
|
+
// Also export from new split modules
|
|
162
|
+
createSchemaFunctions,
|
|
163
|
+
type AISchemaOptions,
|
|
164
|
+
type SchemaFunctions,
|
|
165
|
+
type InferSimpleSchemaResult,
|
|
166
|
+
createDefinedFunction,
|
|
167
|
+
convertArgsToJSONSchema,
|
|
168
|
+
fillTemplate,
|
|
169
|
+
generateCode,
|
|
170
|
+
} from './ai.js'
|
|
171
|
+
|
|
172
|
+
// Also export 'ai' primitive as 'aiPrompt' for convenience
|
|
173
|
+
export { ai as aiPrompt } from './primitives.js'
|
|
154
174
|
|
|
155
175
|
// Export embedding utilities (not in ai-core)
|
|
156
176
|
export * from './embeddings.js'
|
|
@@ -169,6 +189,11 @@ export {
|
|
|
169
189
|
withBatch as withBatchQueue,
|
|
170
190
|
registerBatchAdapter,
|
|
171
191
|
getBatchAdapter,
|
|
192
|
+
registerFlexAdapter,
|
|
193
|
+
getFlexAdapter,
|
|
194
|
+
hasFlexAdapter,
|
|
195
|
+
tiersForModel,
|
|
196
|
+
modelSupportsTier,
|
|
172
197
|
isBatchMode,
|
|
173
198
|
deferToBatch,
|
|
174
199
|
BATCH_MODE_SYMBOL,
|
|
@@ -180,10 +205,21 @@ export {
|
|
|
180
205
|
type BatchResult,
|
|
181
206
|
type BatchSubmitResult,
|
|
182
207
|
type BatchAdapter,
|
|
208
|
+
type FlexAdapter,
|
|
183
209
|
type BatchQueueOptions,
|
|
184
210
|
type DeferredOptions,
|
|
185
211
|
} from './batch-queue.js'
|
|
186
212
|
|
|
213
|
+
// Export per-model policy data (sourced from language-models)
|
|
214
|
+
export {
|
|
215
|
+
policyFor as modelPolicyFor,
|
|
216
|
+
type ModelPolicy,
|
|
217
|
+
type BatchTier,
|
|
218
|
+
type RetryPolicyData,
|
|
219
|
+
type CircuitBreakerPolicyData,
|
|
220
|
+
type ErrorCategoryName,
|
|
221
|
+
} from 'language-models'
|
|
222
|
+
|
|
187
223
|
// Export batch map for automatic batching
|
|
188
224
|
export {
|
|
189
225
|
BatchMapPromise,
|
|
@@ -330,3 +366,65 @@ export {
|
|
|
330
366
|
type FallbackOptions,
|
|
331
367
|
type FallbackMetrics,
|
|
332
368
|
} from './retry.js'
|
|
369
|
+
|
|
370
|
+
// Export digital-objects function registry
|
|
371
|
+
export {
|
|
372
|
+
DigitalObjectsFunctionRegistry,
|
|
373
|
+
createDigitalObjectsRegistry,
|
|
374
|
+
FUNCTION_NOUNS,
|
|
375
|
+
FUNCTION_VERBS,
|
|
376
|
+
type StoredFunctionDefinition,
|
|
377
|
+
type FunctionCallData,
|
|
378
|
+
type DigitalObjectsRegistryOptions,
|
|
379
|
+
} from './digital-objects-registry.js'
|
|
380
|
+
|
|
381
|
+
// Export configurable logger
|
|
382
|
+
export {
|
|
383
|
+
configureLogger,
|
|
384
|
+
getLogger,
|
|
385
|
+
resetLogger,
|
|
386
|
+
getLogLevel,
|
|
387
|
+
setLogLevel,
|
|
388
|
+
type Logger,
|
|
389
|
+
type LoggerConfig,
|
|
390
|
+
} from './logger.js'
|
|
391
|
+
|
|
392
|
+
// ============================================================================
|
|
393
|
+
// V3 middleware stack — cache / budget / trace via wrapLanguageModel
|
|
394
|
+
// ============================================================================
|
|
395
|
+
|
|
396
|
+
// Composable middleware primitives
|
|
397
|
+
export {
|
|
398
|
+
cacheMiddleware,
|
|
399
|
+
embeddingCacheMiddleware,
|
|
400
|
+
budgetMiddleware,
|
|
401
|
+
traceMiddleware,
|
|
402
|
+
type CacheMiddlewareOptions,
|
|
403
|
+
type CacheMiddlewareStore,
|
|
404
|
+
type EmbedCacheMiddlewareOptions,
|
|
405
|
+
type EmbedCacheMiddlewareStore,
|
|
406
|
+
type BudgetMiddlewareOptions,
|
|
407
|
+
type PricingOverlay,
|
|
408
|
+
type TraceEvent,
|
|
409
|
+
type TraceEventKind,
|
|
410
|
+
type TraceMiddlewareOptions,
|
|
411
|
+
} from './middleware/index.js'
|
|
412
|
+
|
|
413
|
+
// Convenience composer
|
|
414
|
+
export { wrapForV3, type WrapForV3Options } from './wrap-for-v3.js'
|
|
415
|
+
|
|
416
|
+
// Type re-export — downstream packages (services-as-software EvaluatorPanel
|
|
417
|
+
// model-injection point, etc.) need `LanguageModelV3` for typing wrapped-model
|
|
418
|
+
// arguments. Re-exporting from ai-functions avoids forcing every consumer to
|
|
419
|
+
// depend on `@ai-sdk/provider` directly.
|
|
420
|
+
export type { LanguageModelV3 } from '@ai-sdk/provider'
|
|
421
|
+
|
|
422
|
+
// Pluggable persistence primitive for trace/eval entries
|
|
423
|
+
export {
|
|
424
|
+
InMemoryEvalLogStore,
|
|
425
|
+
getEvalLogStore,
|
|
426
|
+
configureEvalLogStore,
|
|
427
|
+
type EvalLogEntry,
|
|
428
|
+
type EvalLogListOptions,
|
|
429
|
+
type EvalLogStore,
|
|
430
|
+
} from './eval-log/index.js'
|
package/src/logger.ts
ADDED
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configurable Logger for AI Functions
|
|
3
|
+
*
|
|
4
|
+
* Provides a pluggable logging interface that defaults to console but can be
|
|
5
|
+
* configured to use any logging implementation. This allows library consumers
|
|
6
|
+
* to integrate with their own logging infrastructure.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { configureLogger, getLogger } from 'ai-functions'
|
|
11
|
+
*
|
|
12
|
+
* // Use with default console logger
|
|
13
|
+
* const logger = getLogger()
|
|
14
|
+
* logger.warn('Something happened')
|
|
15
|
+
*
|
|
16
|
+
* // Configure a custom logger
|
|
17
|
+
* configureLogger({
|
|
18
|
+
* debug: (msg, ...args) => myLogger.debug(msg, ...args),
|
|
19
|
+
* info: (msg, ...args) => myLogger.info(msg, ...args),
|
|
20
|
+
* warn: (msg, ...args) => myLogger.warn(msg, ...args),
|
|
21
|
+
* error: (msg, ...args) => myLogger.error(msg, ...args),
|
|
22
|
+
* })
|
|
23
|
+
*
|
|
24
|
+
* // Disable logging entirely
|
|
25
|
+
* configureLogger(null)
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* @packageDocumentation
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
// ============================================================================
|
|
32
|
+
// Logger Interface
|
|
33
|
+
// ============================================================================
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Logger interface that matches the standard console methods.
|
|
37
|
+
*
|
|
38
|
+
* All methods are optional to allow partial implementations.
|
|
39
|
+
* Missing methods will be no-ops when called.
|
|
40
|
+
*/
|
|
41
|
+
export interface Logger {
|
|
42
|
+
/** Debug level logging (verbose) */
|
|
43
|
+
debug?: (message: string, ...args: unknown[]) => void
|
|
44
|
+
/** Info level logging (general information) */
|
|
45
|
+
info?: (message: string, ...args: unknown[]) => void
|
|
46
|
+
/** Warning level logging (potential issues) */
|
|
47
|
+
warn?: (message: string, ...args: unknown[]) => void
|
|
48
|
+
/** Error level logging (errors and exceptions) */
|
|
49
|
+
error?: (message: string, ...args: unknown[]) => void
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Logger configuration options
|
|
54
|
+
*/
|
|
55
|
+
export interface LoggerConfig {
|
|
56
|
+
/** The logger implementation to use */
|
|
57
|
+
logger?: Logger | null
|
|
58
|
+
/** Minimum log level to output */
|
|
59
|
+
level?: 'debug' | 'info' | 'warn' | 'error' | 'silent'
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// ============================================================================
|
|
63
|
+
// Logger State
|
|
64
|
+
// ============================================================================
|
|
65
|
+
|
|
66
|
+
/** Log level priority (lower = more verbose) */
|
|
67
|
+
const LOG_LEVELS: Record<string, number> = {
|
|
68
|
+
debug: 0,
|
|
69
|
+
info: 1,
|
|
70
|
+
warn: 2,
|
|
71
|
+
error: 3,
|
|
72
|
+
silent: 4,
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** Default console-based logger */
|
|
76
|
+
const defaultLogger: Logger = {
|
|
77
|
+
debug: (message: string, ...args: unknown[]) => console.debug(message, ...args),
|
|
78
|
+
info: (message: string, ...args: unknown[]) => console.info(message, ...args),
|
|
79
|
+
warn: (message: string, ...args: unknown[]) => console.warn(message, ...args),
|
|
80
|
+
error: (message: string, ...args: unknown[]) => console.error(message, ...args),
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** No-op logger for when logging is disabled */
|
|
84
|
+
const noopLogger: Logger = {
|
|
85
|
+
debug: () => {},
|
|
86
|
+
info: () => {},
|
|
87
|
+
warn: () => {},
|
|
88
|
+
error: () => {},
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/** Current logger instance */
|
|
92
|
+
let currentLogger: Logger = defaultLogger
|
|
93
|
+
|
|
94
|
+
/** Current minimum log level */
|
|
95
|
+
let currentLevel: string = 'warn'
|
|
96
|
+
|
|
97
|
+
// ============================================================================
|
|
98
|
+
// Configuration Functions
|
|
99
|
+
// ============================================================================
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Configure the global logger for ai-functions.
|
|
103
|
+
*
|
|
104
|
+
* @param config - Logger configuration or just a logger instance
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```ts
|
|
108
|
+
* // Use a custom logger
|
|
109
|
+
* configureLogger({
|
|
110
|
+
* logger: {
|
|
111
|
+
* debug: (msg) => myLogger.debug(msg),
|
|
112
|
+
* info: (msg) => myLogger.info(msg),
|
|
113
|
+
* warn: (msg) => myLogger.warn(msg),
|
|
114
|
+
* error: (msg) => myLogger.error(msg),
|
|
115
|
+
* },
|
|
116
|
+
* level: 'info',
|
|
117
|
+
* })
|
|
118
|
+
*
|
|
119
|
+
* // Just set the log level
|
|
120
|
+
* configureLogger({ level: 'debug' })
|
|
121
|
+
*
|
|
122
|
+
* // Disable all logging
|
|
123
|
+
* configureLogger({ logger: null })
|
|
124
|
+
* // or
|
|
125
|
+
* configureLogger({ level: 'silent' })
|
|
126
|
+
*
|
|
127
|
+
* // Reset to defaults
|
|
128
|
+
* configureLogger({})
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
export function configureLogger(config: LoggerConfig | Logger | null): void {
|
|
132
|
+
// Handle null (disable logging)
|
|
133
|
+
if (config === null) {
|
|
134
|
+
currentLogger = noopLogger
|
|
135
|
+
return
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Handle Logger directly
|
|
139
|
+
if (config && ('debug' in config || 'info' in config || 'warn' in config || 'error' in config)) {
|
|
140
|
+
// Check if it's a Logger (has at least one log method but no 'logger' or 'level' key)
|
|
141
|
+
if (!('logger' in config) && !('level' in config)) {
|
|
142
|
+
currentLogger = config as Logger
|
|
143
|
+
return
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// Handle LoggerConfig
|
|
148
|
+
const loggerConfig = config as LoggerConfig
|
|
149
|
+
|
|
150
|
+
if (loggerConfig.logger === null) {
|
|
151
|
+
currentLogger = noopLogger
|
|
152
|
+
} else if (loggerConfig.logger) {
|
|
153
|
+
currentLogger = loggerConfig.logger
|
|
154
|
+
} else if (config === undefined || Object.keys(config as object).length === 0) {
|
|
155
|
+
// Reset to default
|
|
156
|
+
currentLogger = defaultLogger
|
|
157
|
+
currentLevel = 'warn'
|
|
158
|
+
return
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if (loggerConfig.level) {
|
|
162
|
+
currentLevel = loggerConfig.level
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Get the current logger instance.
|
|
168
|
+
*
|
|
169
|
+
* Returns a logger that respects the configured log level.
|
|
170
|
+
* Methods for levels below the configured minimum will be no-ops.
|
|
171
|
+
*
|
|
172
|
+
* @returns Logger instance with level filtering applied
|
|
173
|
+
*
|
|
174
|
+
* @example
|
|
175
|
+
* ```ts
|
|
176
|
+
* const logger = getLogger()
|
|
177
|
+
* logger.warn('This is a warning')
|
|
178
|
+
* logger.error('This is an error', { details: 'foo' })
|
|
179
|
+
* ```
|
|
180
|
+
*/
|
|
181
|
+
export function getLogger(): Required<Logger> {
|
|
182
|
+
const minLevel = LOG_LEVELS[currentLevel] ?? LOG_LEVELS['warn']!
|
|
183
|
+
|
|
184
|
+
return {
|
|
185
|
+
debug: (message: string, ...args: unknown[]) => {
|
|
186
|
+
if (minLevel <= LOG_LEVELS['debug']!) {
|
|
187
|
+
currentLogger.debug?.(message, ...args)
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
info: (message: string, ...args: unknown[]) => {
|
|
191
|
+
if (minLevel <= LOG_LEVELS['info']!) {
|
|
192
|
+
currentLogger.info?.(message, ...args)
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
warn: (message: string, ...args: unknown[]) => {
|
|
196
|
+
if (minLevel <= LOG_LEVELS['warn']!) {
|
|
197
|
+
currentLogger.warn?.(message, ...args)
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
error: (message: string, ...args: unknown[]) => {
|
|
201
|
+
if (minLevel <= LOG_LEVELS['error']!) {
|
|
202
|
+
currentLogger.error?.(message, ...args)
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Reset the logger to default configuration.
|
|
210
|
+
*
|
|
211
|
+
* Restores the console-based logger with 'warn' minimum level.
|
|
212
|
+
*/
|
|
213
|
+
export function resetLogger(): void {
|
|
214
|
+
currentLogger = defaultLogger
|
|
215
|
+
currentLevel = 'warn'
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Get the current log level
|
|
220
|
+
*/
|
|
221
|
+
export function getLogLevel(): string {
|
|
222
|
+
return currentLevel
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Set the minimum log level
|
|
227
|
+
*
|
|
228
|
+
* @param level - Minimum level to log ('debug' | 'info' | 'warn' | 'error' | 'silent')
|
|
229
|
+
*/
|
|
230
|
+
export function setLogLevel(level: 'debug' | 'info' | 'warn' | 'error' | 'silent'): void {
|
|
231
|
+
currentLevel = level
|
|
232
|
+
}
|