ai-functions 0.3.0 → 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.
- package/.turbo/turbo-build.log +5 -0
- package/.turbo/turbo-test.log +105 -0
- package/README.md +190 -86
- package/TODO.md +138 -0
- package/dist/ai-promise.d.ts +219 -0
- package/dist/ai-promise.d.ts.map +1 -0
- package/dist/ai-promise.js +610 -0
- package/dist/ai-promise.js.map +1 -0
- package/dist/ai.d.ts +285 -0
- package/dist/ai.d.ts.map +1 -0
- package/dist/ai.js +842 -0
- package/dist/ai.js.map +1 -0
- package/dist/batch/anthropic.d.ts +23 -0
- package/dist/batch/anthropic.d.ts.map +1 -0
- package/dist/batch/anthropic.js +257 -0
- package/dist/batch/anthropic.js.map +1 -0
- package/dist/batch/bedrock.d.ts +64 -0
- package/dist/batch/bedrock.d.ts.map +1 -0
- package/dist/batch/bedrock.js +586 -0
- package/dist/batch/bedrock.js.map +1 -0
- package/dist/batch/cloudflare.d.ts +37 -0
- package/dist/batch/cloudflare.d.ts.map +1 -0
- package/dist/batch/cloudflare.js +289 -0
- package/dist/batch/cloudflare.js.map +1 -0
- package/dist/batch/google.d.ts +41 -0
- package/dist/batch/google.d.ts.map +1 -0
- package/dist/batch/google.js +360 -0
- package/dist/batch/google.js.map +1 -0
- package/dist/batch/index.d.ts +31 -0
- package/dist/batch/index.d.ts.map +1 -0
- package/dist/batch/index.js +31 -0
- package/dist/batch/index.js.map +1 -0
- package/dist/batch/memory.d.ts +44 -0
- package/dist/batch/memory.d.ts.map +1 -0
- package/dist/batch/memory.js +188 -0
- package/dist/batch/memory.js.map +1 -0
- package/dist/batch/openai.d.ts +37 -0
- package/dist/batch/openai.d.ts.map +1 -0
- package/dist/batch/openai.js +403 -0
- package/dist/batch/openai.js.map +1 -0
- package/dist/batch-map.d.ts +125 -0
- package/dist/batch-map.d.ts.map +1 -0
- package/dist/batch-map.js +406 -0
- package/dist/batch-map.js.map +1 -0
- package/dist/batch-queue.d.ts +273 -0
- package/dist/batch-queue.d.ts.map +1 -0
- package/dist/batch-queue.js +271 -0
- package/dist/batch-queue.js.map +1 -0
- package/dist/context.d.ts +133 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +267 -0
- package/dist/context.js.map +1 -0
- package/dist/embeddings.d.ts +123 -0
- package/dist/embeddings.d.ts.map +1 -0
- package/dist/embeddings.js +170 -0
- package/dist/embeddings.js.map +1 -0
- package/dist/eval/index.d.ts +8 -0
- package/dist/eval/index.d.ts.map +1 -0
- package/dist/eval/index.js +8 -0
- package/dist/eval/index.js.map +1 -0
- package/dist/eval/models.d.ts +66 -0
- package/dist/eval/models.d.ts.map +1 -0
- package/dist/eval/models.js +120 -0
- package/dist/eval/models.js.map +1 -0
- package/dist/eval/runner.d.ts +64 -0
- package/dist/eval/runner.d.ts.map +1 -0
- package/dist/eval/runner.js +148 -0
- package/dist/eval/runner.js.map +1 -0
- package/dist/generate.d.ts +168 -0
- package/dist/generate.d.ts.map +1 -0
- package/dist/generate.js +174 -0
- package/dist/generate.js.map +1 -0
- package/dist/index.d.ts +29 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +53 -52
- package/dist/index.js.map +1 -1
- package/dist/primitives.d.ts +292 -0
- package/dist/primitives.d.ts.map +1 -0
- package/dist/primitives.js +471 -0
- package/dist/primitives.js.map +1 -0
- package/dist/providers/cloudflare.d.ts +9 -0
- package/dist/providers/cloudflare.d.ts.map +1 -0
- package/dist/providers/cloudflare.js +9 -0
- package/dist/providers/cloudflare.js.map +1 -0
- package/dist/providers/index.d.ts +9 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +9 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/schema.d.ts +54 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +109 -0
- package/dist/schema.js.map +1 -0
- package/dist/template.d.ts +73 -0
- package/dist/template.d.ts.map +1 -0
- package/dist/template.js +129 -0
- package/dist/template.js.map +1 -0
- package/dist/types.d.ts +474 -106
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -8
- package/dist/types.js.map +1 -1
- package/evalite.config.ts +19 -0
- package/evals/README.md +212 -0
- package/evals/classification.eval.ts +108 -0
- package/evals/marketing.eval.ts +370 -0
- package/evals/math.eval.ts +94 -0
- package/evals/run-evals.ts +166 -0
- package/evals/structured-output.eval.ts +143 -0
- package/evals/writing.eval.ts +117 -0
- package/examples/batch-blog-posts.ts +160 -0
- package/package.json +57 -57
- package/src/ai-promise.ts +784 -0
- package/src/ai.ts +1183 -0
- package/src/batch/anthropic.ts +375 -0
- package/src/batch/bedrock.ts +801 -0
- package/src/batch/cloudflare.ts +421 -0
- package/src/batch/google.ts +491 -0
- package/src/batch/index.ts +31 -0
- package/src/batch/memory.ts +253 -0
- package/src/batch/openai.ts +557 -0
- package/src/batch-map.ts +534 -0
- package/src/batch-queue.ts +493 -0
- package/src/context.ts +332 -0
- package/src/embeddings.ts +244 -0
- package/src/eval/index.ts +8 -0
- package/src/eval/models.ts +158 -0
- package/src/eval/runner.ts +217 -0
- package/src/generate.ts +245 -0
- package/src/index.ts +154 -0
- package/src/primitives.ts +612 -0
- package/src/providers/cloudflare.ts +15 -0
- package/src/providers/index.ts +14 -0
- package/src/schema.ts +147 -0
- package/src/template.ts +209 -0
- package/src/types.ts +540 -0
- package/test/README.md +105 -0
- package/test/ai-proxy.test.ts +192 -0
- package/test/async-iterators.test.ts +327 -0
- package/test/batch-background.test.ts +482 -0
- package/test/batch-blog-posts.test.ts +387 -0
- package/test/blog-generation.test.ts +510 -0
- package/test/browse-read.test.ts +611 -0
- package/test/core-functions.test.ts +694 -0
- package/test/decide.test.ts +393 -0
- package/test/define.test.ts +274 -0
- package/test/e2e-bedrock-manual.ts +163 -0
- package/test/e2e-bedrock.test.ts +191 -0
- package/test/e2e-flex-gateway.ts +157 -0
- package/test/e2e-flex-manual.ts +183 -0
- package/test/e2e-flex.test.ts +209 -0
- package/test/e2e-google-manual.ts +178 -0
- package/test/e2e-google.test.ts +216 -0
- package/test/embeddings.test.ts +284 -0
- package/test/evals/define-function.eval.test.ts +379 -0
- package/test/evals/primitives.eval.test.ts +384 -0
- package/test/function-types.test.ts +492 -0
- package/test/generate-core.test.ts +319 -0
- package/test/generate.test.ts +163 -0
- package/test/implicit-batch.test.ts +422 -0
- package/test/schema.test.ts +109 -0
- package/test/tagged-templates.test.ts +302 -0
- package/tsconfig.json +10 -0
- package/vitest.config.ts +42 -0
- package/LICENSE +0 -21
- package/bin/cli.js +0 -5
- package/dist/cli/index.d.ts +0 -10
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -38
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/index.test.d.ts +0 -2
- package/dist/cli/index.test.d.ts.map +0 -1
- package/dist/cli/index.test.js +0 -35
- package/dist/cli/index.test.js.map +0 -1
- package/dist/constants/models.d.ts +0 -10
- package/dist/constants/models.d.ts.map +0 -1
- package/dist/constants/models.js +0 -12
- package/dist/constants/models.js.map +0 -1
- package/dist/converters/index.d.ts +0 -3
- package/dist/converters/index.d.ts.map +0 -1
- package/dist/converters/index.js +0 -3
- package/dist/converters/index.js.map +0 -1
- package/dist/converters/model.d.ts +0 -4
- package/dist/converters/model.d.ts.map +0 -1
- package/dist/converters/model.js +0 -19
- package/dist/converters/model.js.map +0 -1
- package/dist/converters/schema.d.ts +0 -4
- package/dist/converters/schema.d.ts.map +0 -1
- package/dist/converters/schema.js +0 -25
- package/dist/converters/schema.js.map +0 -1
- package/dist/core/responses.d.ts +0 -5
- package/dist/core/responses.d.ts.map +0 -1
- package/dist/core/responses.js +0 -16
- package/dist/core/responses.js.map +0 -1
- package/dist/core/responses.test.d.ts +0 -2
- package/dist/core/responses.test.d.ts.map +0 -1
- package/dist/core/responses.test.js +0 -31
- package/dist/core/responses.test.js.map +0 -1
- package/dist/errors.d.ts +0 -6
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -9
- package/dist/errors.js.map +0 -1
- package/dist/examples/streaming.test.d.ts +0 -2
- package/dist/examples/streaming.test.d.ts.map +0 -1
- package/dist/examples/streaming.test.js +0 -176
- package/dist/examples/streaming.test.js.map +0 -1
- package/dist/factory/__tests__/index.test.d.ts +0 -2
- package/dist/factory/__tests__/index.test.d.ts.map +0 -1
- package/dist/factory/__tests__/index.test.js +0 -430
- package/dist/factory/__tests__/index.test.js.map +0 -1
- package/dist/factory/__tests__/list.test.d.ts +0 -2
- package/dist/factory/__tests__/list.test.d.ts.map +0 -1
- package/dist/factory/__tests__/list.test.js +0 -92
- package/dist/factory/__tests__/list.test.js.map +0 -1
- package/dist/factory/index.d.ts +0 -20
- package/dist/factory/index.d.ts.map +0 -1
- package/dist/factory/index.js +0 -287
- package/dist/factory/index.js.map +0 -1
- package/dist/factory/index.test.d.ts +0 -2
- package/dist/factory/index.test.d.ts.map +0 -1
- package/dist/factory/index.test.js +0 -287
- package/dist/factory/index.test.js.map +0 -1
- package/dist/factory/list.d.ts +0 -3
- package/dist/factory/list.d.ts.map +0 -1
- package/dist/factory/list.js +0 -221
- package/dist/factory/list.js.map +0 -1
- package/dist/factory/list.test.d.ts +0 -2
- package/dist/factory/list.test.d.ts.map +0 -1
- package/dist/factory/list.test.js +0 -84
- package/dist/factory/list.test.js.map +0 -1
- package/dist/generate/index.d.ts +0 -5
- package/dist/generate/index.d.ts.map +0 -1
- package/dist/generate/index.js +0 -17
- package/dist/generate/index.js.map +0 -1
- package/dist/index.test.d.ts +0 -2
- package/dist/index.test.d.ts.map +0 -1
- package/dist/index.test.js +0 -59
- package/dist/index.test.js.map +0 -1
- package/dist/list/await.d.ts +0 -3
- package/dist/list/await.d.ts.map +0 -1
- package/dist/list/await.js +0 -28
- package/dist/list/await.js.map +0 -1
- package/dist/list/constants.d.ts +0 -4
- package/dist/list/constants.d.ts.map +0 -1
- package/dist/list/constants.js +0 -5
- package/dist/list/constants.js.map +0 -1
- package/dist/list/create-function.d.ts +0 -3
- package/dist/list/create-function.d.ts.map +0 -1
- package/dist/list/create-function.js +0 -11
- package/dist/list/create-function.js.map +0 -1
- package/dist/list/index.d.ts +0 -4
- package/dist/list/index.d.ts.map +0 -1
- package/dist/list/index.js +0 -5
- package/dist/list/index.js.map +0 -1
- package/dist/list/prompt.d.ts +0 -3
- package/dist/list/prompt.d.ts.map +0 -1
- package/dist/list/prompt.js +0 -6
- package/dist/list/prompt.js.map +0 -1
- package/dist/list/schemas.d.ts +0 -4
- package/dist/list/schemas.d.ts.map +0 -1
- package/dist/list/schemas.js +0 -8
- package/dist/list/schemas.js.map +0 -1
- package/dist/list/stream.d.ts +0 -3
- package/dist/list/stream.d.ts.map +0 -1
- package/dist/list/stream.js +0 -33
- package/dist/list/stream.js.map +0 -1
- package/dist/list/types.d.ts +0 -11
- package/dist/list/types.d.ts.map +0 -1
- package/dist/list/types.js +0 -2
- package/dist/list/types.js.map +0 -1
- package/dist/list/validation.d.ts +0 -3
- package/dist/list/validation.d.ts.map +0 -1
- package/dist/list/validation.js +0 -12
- package/dist/list/validation.js.map +0 -1
- package/dist/providers/config.d.ts +0 -4
- package/dist/providers/config.d.ts.map +0 -1
- package/dist/providers/config.js +0 -21
- package/dist/providers/config.js.map +0 -1
- package/dist/providers/config.test.d.ts +0 -2
- package/dist/providers/config.test.d.ts.map +0 -1
- package/dist/providers/config.test.js +0 -37
- package/dist/providers/config.test.js.map +0 -1
- package/dist/proxy/constants.d.ts +0 -4
- package/dist/proxy/constants.d.ts.map +0 -1
- package/dist/proxy/constants.js +0 -5
- package/dist/proxy/constants.js.map +0 -1
- package/dist/proxy/create-function.d.ts +0 -4
- package/dist/proxy/create-function.d.ts.map +0 -1
- package/dist/proxy/create-function.js +0 -24
- package/dist/proxy/create-function.js.map +0 -1
- package/dist/proxy/create-proxy.d.ts +0 -2
- package/dist/proxy/create-proxy.d.ts.map +0 -1
- package/dist/proxy/create-proxy.js +0 -11
- package/dist/proxy/create-proxy.js.map +0 -1
- package/dist/proxy/function-generator.d.ts +0 -9
- package/dist/proxy/function-generator.d.ts.map +0 -1
- package/dist/proxy/function-generator.js +0 -29
- package/dist/proxy/function-generator.js.map +0 -1
- package/dist/proxy/index.d.ts +0 -4
- package/dist/proxy/index.d.ts.map +0 -1
- package/dist/proxy/index.js +0 -4
- package/dist/proxy/index.js.map +0 -1
- package/dist/proxy/prompt.d.ts +0 -2
- package/dist/proxy/prompt.d.ts.map +0 -1
- package/dist/proxy/prompt.js +0 -6
- package/dist/proxy/prompt.js.map +0 -1
- package/dist/proxy/types.d.ts +0 -7
- package/dist/proxy/types.d.ts.map +0 -1
- package/dist/proxy/types.js +0 -2
- package/dist/proxy/types.js.map +0 -1
- package/dist/queue/manager.d.ts +0 -5
- package/dist/queue/manager.d.ts.map +0 -1
- package/dist/queue/manager.js +0 -37
- package/dist/queue/manager.js.map +0 -1
- package/dist/queue/manager.test.d.ts +0 -2
- package/dist/queue/manager.test.d.ts.map +0 -1
- package/dist/queue/manager.test.js +0 -52
- package/dist/queue/manager.test.js.map +0 -1
- package/dist/schema-converter.d.ts +0 -4
- package/dist/schema-converter.d.ts.map +0 -1
- package/dist/schema-converter.js +0 -30
- package/dist/schema-converter.js.map +0 -1
- package/dist/stream/index.d.ts +0 -7
- package/dist/stream/index.d.ts.map +0 -1
- package/dist/stream/index.js +0 -23
- package/dist/stream/index.js.map +0 -1
- package/dist/streaming/utils.d.ts +0 -4
- package/dist/streaming/utils.d.ts.map +0 -1
- package/dist/streaming/utils.js +0 -131
- package/dist/streaming/utils.js.map +0 -1
- package/dist/streaming/utils.test.d.ts +0 -2
- package/dist/streaming/utils.test.d.ts.map +0 -1
- package/dist/streaming/utils.test.js +0 -84
- package/dist/streaming/utils.test.js.map +0 -1
- package/dist/templates/result.d.ts +0 -7
- package/dist/templates/result.d.ts.map +0 -1
- package/dist/templates/result.js +0 -40
- package/dist/templates/result.js.map +0 -1
- package/dist/templates/result.test.d.ts +0 -2
- package/dist/templates/result.test.d.ts.map +0 -1
- package/dist/templates/result.test.js +0 -75
- package/dist/templates/result.test.js.map +0 -1
- package/dist/test/setup.d.ts +0 -2
- package/dist/test/setup.d.ts.map +0 -1
- package/dist/test/setup.js +0 -21
- package/dist/test/setup.js.map +0 -1
- package/dist/test-types.d.ts +0 -13
- package/dist/test-types.d.ts.map +0 -1
- package/dist/test-types.js +0 -55
- package/dist/test-types.js.map +0 -1
- package/dist/types/index.d.ts +0 -4
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -4
- package/dist/types/index.js.map +0 -1
- package/dist/types/list.d.ts +0 -10
- package/dist/types/list.d.ts.map +0 -1
- package/dist/types/list.js +0 -2
- package/dist/types/list.js.map +0 -1
- package/dist/types/model.d.ts +0 -7
- package/dist/types/model.d.ts.map +0 -1
- package/dist/types/model.js +0 -2
- package/dist/types/model.js.map +0 -1
- package/dist/types/options.d.ts +0 -25
- package/dist/types/options.d.ts.map +0 -1
- package/dist/types/options.js +0 -2
- package/dist/types/options.js.map +0 -1
- package/dist/types/schema.d.ts +0 -5
- package/dist/types/schema.d.ts.map +0 -1
- package/dist/types/schema.js +0 -2
- package/dist/types/schema.js.map +0 -1
- package/dist/utils/__tests__/request-handler.test.d.ts +0 -2
- package/dist/utils/__tests__/request-handler.test.d.ts.map +0 -1
- package/dist/utils/__tests__/request-handler.test.js +0 -134
- package/dist/utils/__tests__/request-handler.test.js.map +0 -1
- package/dist/utils/__tests__/schema.test.d.ts +0 -2
- package/dist/utils/__tests__/schema.test.d.ts.map +0 -1
- package/dist/utils/__tests__/schema.test.js +0 -49
- package/dist/utils/__tests__/schema.test.js.map +0 -1
- package/dist/utils/__tests__/stream-progress.test.d.ts +0 -2
- package/dist/utils/__tests__/stream-progress.test.d.ts.map +0 -1
- package/dist/utils/__tests__/stream-progress.test.js +0 -85
- package/dist/utils/__tests__/stream-progress.test.js.map +0 -1
- package/dist/utils/index.d.ts +0 -2
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -2
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/request-handler.d.ts +0 -17
- package/dist/utils/request-handler.d.ts.map +0 -1
- package/dist/utils/request-handler.js +0 -105
- package/dist/utils/request-handler.js.map +0 -1
- package/dist/utils/schema.d.ts +0 -11
- package/dist/utils/schema.d.ts.map +0 -1
- package/dist/utils/schema.js +0 -51
- package/dist/utils/schema.js.map +0 -1
- package/dist/utils/stream-progress.d.ts +0 -17
- package/dist/utils/stream-progress.d.ts.map +0 -1
- package/dist/utils/stream-progress.js +0 -86
- package/dist/utils/stream-progress.js.map +0 -1
- package/dist/utils/validation.d.ts +0 -3
- package/dist/utils/validation.d.ts.map +0 -1
- package/dist/utils/validation.js +0 -30
- package/dist/utils/validation.js.map +0 -1
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BatchQueue - Deferred execution queue for batch processing
|
|
3
|
+
*
|
|
4
|
+
* Collects AI operations and submits them to provider batch APIs
|
|
5
|
+
* for cost-effective processing (typically 50% discount, 24hr turnaround).
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* // Create a batch queue
|
|
10
|
+
* const batch = createBatch({ provider: 'openai' })
|
|
11
|
+
*
|
|
12
|
+
* // Add items to the batch (these are deferred, not executed)
|
|
13
|
+
* const titles = await list`10 blog post titles about startups`
|
|
14
|
+
* const posts = titles.map(title => batch.add(write`blog post about ${title}`))
|
|
15
|
+
*
|
|
16
|
+
* // Submit the batch - returns job info
|
|
17
|
+
* const job = await batch.submit()
|
|
18
|
+
* console.log(job.id) // batch_abc123
|
|
19
|
+
*
|
|
20
|
+
* // Poll for results or use webhook
|
|
21
|
+
* const results = await batch.wait()
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* @packageDocumentation
|
|
25
|
+
*/
|
|
26
|
+
import type { FunctionOptions } from './template.js';
|
|
27
|
+
import type { SimpleSchema } from './schema.js';
|
|
28
|
+
/** Batch processing mode */
|
|
29
|
+
export type BatchMode = 'sync' | 'async' | 'background';
|
|
30
|
+
/** Supported batch providers */
|
|
31
|
+
export type BatchProvider = 'openai' | 'anthropic' | 'google' | 'bedrock' | 'cloudflare';
|
|
32
|
+
/** Status of a batch job */
|
|
33
|
+
export type BatchStatus = 'pending' | 'validating' | 'in_progress' | 'finalizing' | 'completed' | 'failed' | 'expired' | 'cancelling' | 'cancelled';
|
|
34
|
+
/** Individual item in a batch */
|
|
35
|
+
export interface BatchItem<T = unknown> {
|
|
36
|
+
/** Unique ID for this item */
|
|
37
|
+
id: string;
|
|
38
|
+
/** The prompt to process */
|
|
39
|
+
prompt: string;
|
|
40
|
+
/** Schema for structured output */
|
|
41
|
+
schema?: SimpleSchema;
|
|
42
|
+
/** Generation options */
|
|
43
|
+
options?: FunctionOptions;
|
|
44
|
+
/** Custom metadata */
|
|
45
|
+
metadata?: Record<string, unknown>;
|
|
46
|
+
/** Resolved value (after completion) */
|
|
47
|
+
result?: T;
|
|
48
|
+
/** Error if failed */
|
|
49
|
+
error?: string;
|
|
50
|
+
/** Status of this item */
|
|
51
|
+
status: 'pending' | 'completed' | 'failed';
|
|
52
|
+
}
|
|
53
|
+
/** Batch job information */
|
|
54
|
+
export interface BatchJob {
|
|
55
|
+
/** Unique batch ID */
|
|
56
|
+
id: string;
|
|
57
|
+
/** Provider this batch was submitted to */
|
|
58
|
+
provider: BatchProvider;
|
|
59
|
+
/** Current status */
|
|
60
|
+
status: BatchStatus;
|
|
61
|
+
/** Number of items in the batch */
|
|
62
|
+
totalItems: number;
|
|
63
|
+
/** Number of completed items */
|
|
64
|
+
completedItems: number;
|
|
65
|
+
/** Number of failed items */
|
|
66
|
+
failedItems: number;
|
|
67
|
+
/** When the batch was created */
|
|
68
|
+
createdAt: Date;
|
|
69
|
+
/** When the batch started processing */
|
|
70
|
+
startedAt?: Date;
|
|
71
|
+
/** When the batch completed */
|
|
72
|
+
completedAt?: Date;
|
|
73
|
+
/** Expected completion time */
|
|
74
|
+
expiresAt?: Date;
|
|
75
|
+
/** Webhook URL for completion notification */
|
|
76
|
+
webhookUrl?: string;
|
|
77
|
+
/** Input file ID (for OpenAI) */
|
|
78
|
+
inputFileId?: string;
|
|
79
|
+
/** Output file ID (for OpenAI) */
|
|
80
|
+
outputFileId?: string;
|
|
81
|
+
/** Error file ID (for OpenAI) */
|
|
82
|
+
errorFileId?: string;
|
|
83
|
+
}
|
|
84
|
+
/** Result of a batch submission */
|
|
85
|
+
export interface BatchSubmitResult {
|
|
86
|
+
job: BatchJob;
|
|
87
|
+
/** Promise that resolves when batch is complete */
|
|
88
|
+
completion: Promise<BatchResult[]>;
|
|
89
|
+
}
|
|
90
|
+
/** Result of a single item in the batch */
|
|
91
|
+
export interface BatchResult<T = unknown> {
|
|
92
|
+
/** Item ID */
|
|
93
|
+
id: string;
|
|
94
|
+
/** Custom ID if provided */
|
|
95
|
+
customId?: string;
|
|
96
|
+
/** Status */
|
|
97
|
+
status: 'completed' | 'failed';
|
|
98
|
+
/** The result (if successful) */
|
|
99
|
+
result?: T;
|
|
100
|
+
/** Error message (if failed) */
|
|
101
|
+
error?: string;
|
|
102
|
+
/** Token usage */
|
|
103
|
+
usage?: {
|
|
104
|
+
promptTokens: number;
|
|
105
|
+
completionTokens: number;
|
|
106
|
+
totalTokens: number;
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/** Options for creating a batch queue */
|
|
110
|
+
export interface BatchQueueOptions {
|
|
111
|
+
/** Provider to use for batch processing */
|
|
112
|
+
provider?: BatchProvider;
|
|
113
|
+
/** Model to use */
|
|
114
|
+
model?: string;
|
|
115
|
+
/** Webhook URL for completion notification */
|
|
116
|
+
webhookUrl?: string;
|
|
117
|
+
/** Custom metadata for the batch */
|
|
118
|
+
metadata?: Record<string, unknown>;
|
|
119
|
+
/** Maximum items per batch (provider-specific limits) */
|
|
120
|
+
maxItems?: number;
|
|
121
|
+
/** Auto-submit when queue reaches maxItems */
|
|
122
|
+
autoSubmit?: boolean;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* BatchQueue collects AI operations for deferred batch execution
|
|
126
|
+
*/
|
|
127
|
+
export declare class BatchQueue {
|
|
128
|
+
private items;
|
|
129
|
+
private options;
|
|
130
|
+
private idCounter;
|
|
131
|
+
private submitted;
|
|
132
|
+
private job;
|
|
133
|
+
constructor(options?: BatchQueueOptions);
|
|
134
|
+
/**
|
|
135
|
+
* Add an item to the batch queue
|
|
136
|
+
* Returns a placeholder that will be resolved after batch completion
|
|
137
|
+
*/
|
|
138
|
+
add<T = unknown>(prompt: string, options?: {
|
|
139
|
+
schema?: SimpleSchema;
|
|
140
|
+
options?: FunctionOptions;
|
|
141
|
+
customId?: string;
|
|
142
|
+
metadata?: Record<string, unknown>;
|
|
143
|
+
}): BatchItem<T>;
|
|
144
|
+
/**
|
|
145
|
+
* Get all items in the queue
|
|
146
|
+
*/
|
|
147
|
+
getItems(): BatchItem[];
|
|
148
|
+
/**
|
|
149
|
+
* Get the number of items in the queue
|
|
150
|
+
*/
|
|
151
|
+
get size(): number;
|
|
152
|
+
/**
|
|
153
|
+
* Check if the batch has been submitted
|
|
154
|
+
*/
|
|
155
|
+
get isSubmitted(): boolean;
|
|
156
|
+
/**
|
|
157
|
+
* Get the batch job info (after submission)
|
|
158
|
+
*/
|
|
159
|
+
getJob(): BatchJob | null;
|
|
160
|
+
/**
|
|
161
|
+
* Submit the batch to the provider
|
|
162
|
+
*/
|
|
163
|
+
submit(): Promise<BatchSubmitResult>;
|
|
164
|
+
/**
|
|
165
|
+
* Cancel the batch (if supported by provider)
|
|
166
|
+
*/
|
|
167
|
+
cancel(): Promise<void>;
|
|
168
|
+
/**
|
|
169
|
+
* Get the current status of the batch
|
|
170
|
+
*/
|
|
171
|
+
getStatus(): Promise<BatchJob>;
|
|
172
|
+
/**
|
|
173
|
+
* Wait for the batch to complete and return results
|
|
174
|
+
*/
|
|
175
|
+
wait(pollInterval?: number): Promise<BatchResult[]>;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Interface for provider-specific batch implementations
|
|
179
|
+
*/
|
|
180
|
+
export interface BatchAdapter {
|
|
181
|
+
/** Submit a batch to the provider */
|
|
182
|
+
submit(items: BatchItem[], options: BatchQueueOptions): Promise<BatchSubmitResult>;
|
|
183
|
+
/** Get the status of a batch */
|
|
184
|
+
getStatus(batchId: string): Promise<BatchJob>;
|
|
185
|
+
/** Cancel a batch */
|
|
186
|
+
cancel(batchId: string): Promise<void>;
|
|
187
|
+
/** Get results of a completed batch */
|
|
188
|
+
getResults(batchId: string): Promise<BatchResult[]>;
|
|
189
|
+
/** Wait for batch completion */
|
|
190
|
+
waitForCompletion(batchId: string, pollInterval?: number): Promise<BatchResult[]>;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Interface for flex processing (faster than batch, ~50% discount)
|
|
194
|
+
* Available for OpenAI and AWS Bedrock
|
|
195
|
+
*/
|
|
196
|
+
export interface FlexAdapter {
|
|
197
|
+
/**
|
|
198
|
+
* Submit items for flex processing
|
|
199
|
+
* Flex is faster than batch (minutes vs hours) but has same discount
|
|
200
|
+
*
|
|
201
|
+
* @param items - Items to process
|
|
202
|
+
* @param options - Processing options
|
|
203
|
+
* @returns Results (resolves when all items complete)
|
|
204
|
+
*/
|
|
205
|
+
submitFlex(items: BatchItem[], options: {
|
|
206
|
+
model?: string;
|
|
207
|
+
}): Promise<BatchResult[]>;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Register a batch adapter for a provider
|
|
211
|
+
*/
|
|
212
|
+
export declare function registerBatchAdapter(provider: BatchProvider, adapter: BatchAdapter): void;
|
|
213
|
+
/**
|
|
214
|
+
* Register a flex adapter for a provider
|
|
215
|
+
*/
|
|
216
|
+
export declare function registerFlexAdapter(provider: BatchProvider, adapter: FlexAdapter): void;
|
|
217
|
+
/**
|
|
218
|
+
* Get the batch adapter for a provider
|
|
219
|
+
*/
|
|
220
|
+
export declare function getBatchAdapter(provider: BatchProvider): BatchAdapter;
|
|
221
|
+
/**
|
|
222
|
+
* Get the flex adapter for a provider
|
|
223
|
+
*/
|
|
224
|
+
export declare function getFlexAdapter(provider: BatchProvider): FlexAdapter;
|
|
225
|
+
/**
|
|
226
|
+
* Check if flex is available for a provider
|
|
227
|
+
*/
|
|
228
|
+
export declare function hasFlexAdapter(provider: BatchProvider): boolean;
|
|
229
|
+
/**
|
|
230
|
+
* Create a new batch queue
|
|
231
|
+
*
|
|
232
|
+
* @example
|
|
233
|
+
* ```ts
|
|
234
|
+
* const batch = createBatch({ provider: 'openai' })
|
|
235
|
+
* batch.add('Write a poem about cats')
|
|
236
|
+
* batch.add('Write a poem about dogs')
|
|
237
|
+
* const { job } = await batch.submit()
|
|
238
|
+
* const results = await batch.wait()
|
|
239
|
+
* ```
|
|
240
|
+
*/
|
|
241
|
+
export declare function createBatch(options?: BatchQueueOptions): BatchQueue;
|
|
242
|
+
/**
|
|
243
|
+
* Execute operations in batch mode
|
|
244
|
+
*
|
|
245
|
+
* @example
|
|
246
|
+
* ```ts
|
|
247
|
+
* const results = await withBatch(async (batch) => {
|
|
248
|
+
* const titles = ['TypeScript', 'React', 'Next.js']
|
|
249
|
+
* return titles.map(title => batch.add(`Write a blog post about ${title}`))
|
|
250
|
+
* })
|
|
251
|
+
* ```
|
|
252
|
+
*/
|
|
253
|
+
export declare function withBatch<T>(fn: (batch: BatchQueue) => T[] | Promise<T[]>, options?: BatchQueueOptions): Promise<BatchResult<T>[]>;
|
|
254
|
+
/** Symbol to mark an AIPromise as batched/deferred */
|
|
255
|
+
export declare const BATCH_MODE_SYMBOL: unique symbol;
|
|
256
|
+
/** Options for deferred execution */
|
|
257
|
+
export interface DeferredOptions extends FunctionOptions {
|
|
258
|
+
/** Batch queue to add to */
|
|
259
|
+
batch?: BatchQueue;
|
|
260
|
+
/** Custom ID for this item in the batch */
|
|
261
|
+
customId?: string;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Check if we're in batch mode
|
|
265
|
+
*/
|
|
266
|
+
export declare function isBatchMode(options?: DeferredOptions): boolean;
|
|
267
|
+
/**
|
|
268
|
+
* Add an operation to the batch queue instead of executing immediately
|
|
269
|
+
*/
|
|
270
|
+
export declare function deferToBatch<T>(batch: BatchQueue, prompt: string, schema: SimpleSchema | undefined, options?: FunctionOptions & {
|
|
271
|
+
customId?: string;
|
|
272
|
+
}): BatchItem<T>;
|
|
273
|
+
//# sourceMappingURL=batch-queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-queue.d.ts","sourceRoot":"","sources":["../src/batch-queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BatchQueue - Deferred execution queue for batch processing
|
|
3
|
+
*
|
|
4
|
+
* Collects AI operations and submits them to provider batch APIs
|
|
5
|
+
* for cost-effective processing (typically 50% discount, 24hr turnaround).
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* // Create a batch queue
|
|
10
|
+
* const batch = createBatch({ provider: 'openai' })
|
|
11
|
+
*
|
|
12
|
+
* // Add items to the batch (these are deferred, not executed)
|
|
13
|
+
* const titles = await list`10 blog post titles about startups`
|
|
14
|
+
* const posts = titles.map(title => batch.add(write`blog post about ${title}`))
|
|
15
|
+
*
|
|
16
|
+
* // Submit the batch - returns job info
|
|
17
|
+
* const job = await batch.submit()
|
|
18
|
+
* console.log(job.id) // batch_abc123
|
|
19
|
+
*
|
|
20
|
+
* // Poll for results or use webhook
|
|
21
|
+
* const results = await batch.wait()
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* @packageDocumentation
|
|
25
|
+
*/
|
|
26
|
+
// ============================================================================
|
|
27
|
+
// BatchQueue Implementation
|
|
28
|
+
// ============================================================================
|
|
29
|
+
/**
|
|
30
|
+
* BatchQueue collects AI operations for deferred batch execution
|
|
31
|
+
*/
|
|
32
|
+
export class BatchQueue {
|
|
33
|
+
items = [];
|
|
34
|
+
options;
|
|
35
|
+
idCounter = 0;
|
|
36
|
+
submitted = false;
|
|
37
|
+
job = null;
|
|
38
|
+
constructor(options = {}) {
|
|
39
|
+
this.options = {
|
|
40
|
+
provider: 'openai',
|
|
41
|
+
maxItems: 50000, // OpenAI's limit
|
|
42
|
+
autoSubmit: false,
|
|
43
|
+
...options,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Add an item to the batch queue
|
|
48
|
+
* Returns a placeholder that will be resolved after batch completion
|
|
49
|
+
*/
|
|
50
|
+
add(prompt, options) {
|
|
51
|
+
if (this.submitted) {
|
|
52
|
+
throw new Error('Cannot add items to a submitted batch');
|
|
53
|
+
}
|
|
54
|
+
const item = {
|
|
55
|
+
id: options?.customId || `item_${++this.idCounter}`,
|
|
56
|
+
prompt,
|
|
57
|
+
schema: options?.schema,
|
|
58
|
+
options: options?.options,
|
|
59
|
+
metadata: options?.metadata,
|
|
60
|
+
status: 'pending',
|
|
61
|
+
};
|
|
62
|
+
this.items.push(item);
|
|
63
|
+
// Auto-submit if we hit the limit
|
|
64
|
+
if (this.options.autoSubmit && this.items.length >= (this.options.maxItems || 50000)) {
|
|
65
|
+
// Fire and forget - user can await the completion promise
|
|
66
|
+
this.submit().catch(console.error);
|
|
67
|
+
}
|
|
68
|
+
return item;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get all items in the queue
|
|
72
|
+
*/
|
|
73
|
+
getItems() {
|
|
74
|
+
return [...this.items];
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Get the number of items in the queue
|
|
78
|
+
*/
|
|
79
|
+
get size() {
|
|
80
|
+
return this.items.length;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Check if the batch has been submitted
|
|
84
|
+
*/
|
|
85
|
+
get isSubmitted() {
|
|
86
|
+
return this.submitted;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Get the batch job info (after submission)
|
|
90
|
+
*/
|
|
91
|
+
getJob() {
|
|
92
|
+
return this.job;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Submit the batch to the provider
|
|
96
|
+
*/
|
|
97
|
+
async submit() {
|
|
98
|
+
if (this.submitted) {
|
|
99
|
+
throw new Error('Batch has already been submitted');
|
|
100
|
+
}
|
|
101
|
+
if (this.items.length === 0) {
|
|
102
|
+
throw new Error('Cannot submit empty batch');
|
|
103
|
+
}
|
|
104
|
+
this.submitted = true;
|
|
105
|
+
// Get the appropriate batch adapter
|
|
106
|
+
const adapter = getBatchAdapter(this.options.provider || 'openai');
|
|
107
|
+
// Submit the batch
|
|
108
|
+
const result = await adapter.submit(this.items, this.options);
|
|
109
|
+
this.job = result.job;
|
|
110
|
+
// When completion resolves, update item statuses
|
|
111
|
+
result.completion.then((results) => {
|
|
112
|
+
for (const r of results) {
|
|
113
|
+
const item = this.items.find((i) => i.id === r.id);
|
|
114
|
+
if (item) {
|
|
115
|
+
item.status = r.status;
|
|
116
|
+
item.result = r.result;
|
|
117
|
+
item.error = r.error;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
return result;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Cancel the batch (if supported by provider)
|
|
125
|
+
*/
|
|
126
|
+
async cancel() {
|
|
127
|
+
if (!this.job) {
|
|
128
|
+
throw new Error('Batch has not been submitted');
|
|
129
|
+
}
|
|
130
|
+
const adapter = getBatchAdapter(this.options.provider || 'openai');
|
|
131
|
+
await adapter.cancel(this.job.id);
|
|
132
|
+
this.job.status = 'cancelling';
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get the current status of the batch
|
|
136
|
+
*/
|
|
137
|
+
async getStatus() {
|
|
138
|
+
if (!this.job) {
|
|
139
|
+
throw new Error('Batch has not been submitted');
|
|
140
|
+
}
|
|
141
|
+
const adapter = getBatchAdapter(this.options.provider || 'openai');
|
|
142
|
+
this.job = await adapter.getStatus(this.job.id);
|
|
143
|
+
return this.job;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Wait for the batch to complete and return results
|
|
147
|
+
*/
|
|
148
|
+
async wait(pollInterval = 5000) {
|
|
149
|
+
if (!this.job) {
|
|
150
|
+
throw new Error('Batch has not been submitted');
|
|
151
|
+
}
|
|
152
|
+
const adapter = getBatchAdapter(this.options.provider || 'openai');
|
|
153
|
+
return adapter.waitForCompletion(this.job.id, pollInterval);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// Adapter registry
|
|
157
|
+
const adapters = {
|
|
158
|
+
openai: null,
|
|
159
|
+
anthropic: null,
|
|
160
|
+
google: null,
|
|
161
|
+
bedrock: null,
|
|
162
|
+
cloudflare: null,
|
|
163
|
+
};
|
|
164
|
+
// Flex adapter registry (only OpenAI and Bedrock support flex)
|
|
165
|
+
const flexAdapters = {
|
|
166
|
+
openai: null,
|
|
167
|
+
anthropic: null,
|
|
168
|
+
google: null,
|
|
169
|
+
bedrock: null,
|
|
170
|
+
cloudflare: null,
|
|
171
|
+
};
|
|
172
|
+
/**
|
|
173
|
+
* Register a batch adapter for a provider
|
|
174
|
+
*/
|
|
175
|
+
export function registerBatchAdapter(provider, adapter) {
|
|
176
|
+
adapters[provider] = adapter;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Register a flex adapter for a provider
|
|
180
|
+
*/
|
|
181
|
+
export function registerFlexAdapter(provider, adapter) {
|
|
182
|
+
flexAdapters[provider] = adapter;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Get the batch adapter for a provider
|
|
186
|
+
*/
|
|
187
|
+
export function getBatchAdapter(provider) {
|
|
188
|
+
const adapter = adapters[provider];
|
|
189
|
+
if (!adapter) {
|
|
190
|
+
throw new Error(`No batch adapter registered for provider: ${provider}. ` +
|
|
191
|
+
`Import the adapter: import 'ai-functions/batch/${provider}'`);
|
|
192
|
+
}
|
|
193
|
+
return adapter;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Get the flex adapter for a provider
|
|
197
|
+
*/
|
|
198
|
+
export function getFlexAdapter(provider) {
|
|
199
|
+
const adapter = flexAdapters[provider];
|
|
200
|
+
if (!adapter) {
|
|
201
|
+
throw new Error(`No flex adapter registered for provider: ${provider}. ` +
|
|
202
|
+
`Flex processing is only available for OpenAI and AWS Bedrock.`);
|
|
203
|
+
}
|
|
204
|
+
return adapter;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Check if flex is available for a provider
|
|
208
|
+
*/
|
|
209
|
+
export function hasFlexAdapter(provider) {
|
|
210
|
+
return flexAdapters[provider] !== null;
|
|
211
|
+
}
|
|
212
|
+
// ============================================================================
|
|
213
|
+
// Factory Functions
|
|
214
|
+
// ============================================================================
|
|
215
|
+
/**
|
|
216
|
+
* Create a new batch queue
|
|
217
|
+
*
|
|
218
|
+
* @example
|
|
219
|
+
* ```ts
|
|
220
|
+
* const batch = createBatch({ provider: 'openai' })
|
|
221
|
+
* batch.add('Write a poem about cats')
|
|
222
|
+
* batch.add('Write a poem about dogs')
|
|
223
|
+
* const { job } = await batch.submit()
|
|
224
|
+
* const results = await batch.wait()
|
|
225
|
+
* ```
|
|
226
|
+
*/
|
|
227
|
+
export function createBatch(options) {
|
|
228
|
+
return new BatchQueue(options);
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Execute operations in batch mode
|
|
232
|
+
*
|
|
233
|
+
* @example
|
|
234
|
+
* ```ts
|
|
235
|
+
* const results = await withBatch(async (batch) => {
|
|
236
|
+
* const titles = ['TypeScript', 'React', 'Next.js']
|
|
237
|
+
* return titles.map(title => batch.add(`Write a blog post about ${title}`))
|
|
238
|
+
* })
|
|
239
|
+
* ```
|
|
240
|
+
*/
|
|
241
|
+
export async function withBatch(fn, options) {
|
|
242
|
+
const batch = createBatch(options);
|
|
243
|
+
const items = await fn(batch);
|
|
244
|
+
if (batch.size === 0) {
|
|
245
|
+
return [];
|
|
246
|
+
}
|
|
247
|
+
const { completion } = await batch.submit();
|
|
248
|
+
return completion;
|
|
249
|
+
}
|
|
250
|
+
// ============================================================================
|
|
251
|
+
// Deferred Execution Support
|
|
252
|
+
// ============================================================================
|
|
253
|
+
/** Symbol to mark an AIPromise as batched/deferred */
|
|
254
|
+
export const BATCH_MODE_SYMBOL = Symbol.for('ai-batch-mode');
|
|
255
|
+
/**
|
|
256
|
+
* Check if we're in batch mode
|
|
257
|
+
*/
|
|
258
|
+
export function isBatchMode(options) {
|
|
259
|
+
return !!options?.batch;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Add an operation to the batch queue instead of executing immediately
|
|
263
|
+
*/
|
|
264
|
+
export function deferToBatch(batch, prompt, schema, options) {
|
|
265
|
+
return batch.add(prompt, {
|
|
266
|
+
schema,
|
|
267
|
+
options,
|
|
268
|
+
customId: options?.customId,
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=batch-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-queue.js","sourceRoot":"","sources":["../src/batch-queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Execution Context for AI Functions
|
|
3
|
+
*
|
|
4
|
+
* Provides configuration without polluting function signatures.
|
|
5
|
+
* Settings flow from environment → global context → local context.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* // Set global defaults (from environment or initialization)
|
|
10
|
+
* configure({
|
|
11
|
+
* provider: 'anthropic',
|
|
12
|
+
* model: 'claude-sonnet-4-20250514',
|
|
13
|
+
* batchMode: 'auto', // 'auto' | 'immediate' | 'deferred'
|
|
14
|
+
* })
|
|
15
|
+
*
|
|
16
|
+
* // Or use execution context for specific operations
|
|
17
|
+
* await withContext({ provider: 'openai', model: 'gpt-4o' }, async () => {
|
|
18
|
+
* const titles = await list`10 blog titles`
|
|
19
|
+
* return titles.map(title => write`blog post: ${title}`)
|
|
20
|
+
* })
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @packageDocumentation
|
|
24
|
+
*/
|
|
25
|
+
import type { FunctionOptions } from './template.js';
|
|
26
|
+
import type { BatchProvider } from './batch-queue.js';
|
|
27
|
+
/** Batch execution mode */
|
|
28
|
+
export type BatchMode = 'auto' | 'immediate' | 'flex' | 'deferred';
|
|
29
|
+
/** Execution context configuration */
|
|
30
|
+
export interface ExecutionContext extends FunctionOptions {
|
|
31
|
+
/** Batch provider to use */
|
|
32
|
+
provider?: BatchProvider;
|
|
33
|
+
/** Batch execution mode */
|
|
34
|
+
batchMode?: BatchMode;
|
|
35
|
+
/** Minimum items to use flex processing (for 'auto' mode, default: 5) */
|
|
36
|
+
flexThreshold?: number;
|
|
37
|
+
/** Minimum items to use batch API (for 'auto' mode, default: 500) */
|
|
38
|
+
batchThreshold?: number;
|
|
39
|
+
/** Webhook URL for batch completion notifications */
|
|
40
|
+
webhookUrl?: string;
|
|
41
|
+
/** Custom metadata for batch jobs */
|
|
42
|
+
metadata?: Record<string, unknown>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Configure global defaults for AI functions
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```ts
|
|
49
|
+
* configure({
|
|
50
|
+
* model: 'claude-sonnet-4-20250514',
|
|
51
|
+
* provider: 'anthropic',
|
|
52
|
+
* batchMode: 'auto',
|
|
53
|
+
* batchThreshold: 5,
|
|
54
|
+
* })
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export declare function configure(context: ExecutionContext): void;
|
|
58
|
+
/**
|
|
59
|
+
* Get the current global context
|
|
60
|
+
*/
|
|
61
|
+
export declare function getGlobalContext(): ExecutionContext;
|
|
62
|
+
/**
|
|
63
|
+
* Reset global context to defaults
|
|
64
|
+
*/
|
|
65
|
+
export declare function resetContext(): void;
|
|
66
|
+
/**
|
|
67
|
+
* Get the current execution context
|
|
68
|
+
* Merges: environment defaults → global context → local context
|
|
69
|
+
*/
|
|
70
|
+
export declare function getContext(): ExecutionContext;
|
|
71
|
+
/**
|
|
72
|
+
* Run a function with a specific execution context
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```ts
|
|
76
|
+
* const posts = await withContext({ provider: 'openai', batchMode: 'deferred' }, async () => {
|
|
77
|
+
* const titles = await list`10 blog titles`
|
|
78
|
+
* return titles.map(title => write`blog post: ${title}`)
|
|
79
|
+
* })
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
export declare function withContext<T>(context: ExecutionContext, fn: () => T | Promise<T>): T | Promise<T>;
|
|
83
|
+
/**
|
|
84
|
+
* Get the effective model from context
|
|
85
|
+
*/
|
|
86
|
+
export declare function getModel(): string;
|
|
87
|
+
/**
|
|
88
|
+
* Get the effective provider from context
|
|
89
|
+
*/
|
|
90
|
+
export declare function getProvider(): BatchProvider;
|
|
91
|
+
/**
|
|
92
|
+
* Get the effective batch mode from context
|
|
93
|
+
*/
|
|
94
|
+
export declare function getBatchMode(): BatchMode;
|
|
95
|
+
/**
|
|
96
|
+
* Get the flex threshold from context (minimum items to use flex)
|
|
97
|
+
* Default: 5 items
|
|
98
|
+
*/
|
|
99
|
+
export declare function getFlexThreshold(): number;
|
|
100
|
+
/**
|
|
101
|
+
* Get the batch threshold from context (minimum items to use full batch)
|
|
102
|
+
* Default: 500 items
|
|
103
|
+
*/
|
|
104
|
+
export declare function getBatchThreshold(): number;
|
|
105
|
+
/** Execution tier for processing */
|
|
106
|
+
export type ExecutionTier = 'immediate' | 'flex' | 'batch';
|
|
107
|
+
/**
|
|
108
|
+
* Determine the execution tier for a given number of items
|
|
109
|
+
*
|
|
110
|
+
* Auto mode tiers:
|
|
111
|
+
* - immediate: < flexThreshold (default 5) - concurrent requests, full price
|
|
112
|
+
* - flex: flexThreshold to batchThreshold (5-500) - ~50% discount, minutes
|
|
113
|
+
* - batch: >= batchThreshold (500+) - 50% discount, up to 24hr
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* ```ts
|
|
117
|
+
* getExecutionTier(3) // 'immediate' (< 5)
|
|
118
|
+
* getExecutionTier(50) // 'flex' (5-500)
|
|
119
|
+
* getExecutionTier(1000) // 'batch' (500+)
|
|
120
|
+
* ```
|
|
121
|
+
*/
|
|
122
|
+
export declare function getExecutionTier(itemCount: number): ExecutionTier;
|
|
123
|
+
/**
|
|
124
|
+
* Check if we should use the batch API for a given number of items
|
|
125
|
+
* @deprecated Use getExecutionTier() instead for more granular control
|
|
126
|
+
*/
|
|
127
|
+
export declare function shouldUseBatchAPI(itemCount: number): boolean;
|
|
128
|
+
/**
|
|
129
|
+
* Check if flex processing is available for the current provider
|
|
130
|
+
* Only OpenAI and AWS Bedrock support flex processing currently
|
|
131
|
+
*/
|
|
132
|
+
export declare function isFlexAvailable(): boolean;
|
|
133
|
+
//# sourceMappingURL=context.d.ts.map
|