ai-functions 2.1.1 → 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 -4
- package/CHANGELOG.md +68 -1
- package/README.md +397 -157
- package/dist/ai-promise.d.ts +50 -3
- package/dist/ai-promise.d.ts.map +1 -1
- package/dist/ai-promise.js +410 -51
- 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 +54 -837
- 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 +272 -0
- package/dist/budget.d.ts.map +1 -0
- package/dist/budget.js +513 -0
- package/dist/budget.js.map +1 -0
- package/dist/cache.d.ts +295 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +433 -0
- package/dist/cache.js.map +1 -0
- package/dist/context.d.ts +42 -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 +10 -1
- 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 -22
- package/dist/generate.js.map +1 -1
- package/dist/index.d.ts +35 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +89 -42
- 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 +368 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +646 -0
- package/dist/retry.js.map +1 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +2 -10
- 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 +453 -0
- package/dist/tool-orchestration.d.ts.map +1 -0
- package/dist/tool-orchestration.js +763 -0
- package/dist/tool-orchestration.js.map +1 -0
- 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 +10 -6
- package/src/ai-promise.ts +528 -99
- package/src/ai-schemas.ts +122 -0
- package/src/ai.ts +69 -1153
- 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 +740 -0
- package/src/cache.ts +681 -0
- package/src/context.ts +122 -76
- package/src/digital-objects-registry.ts +750 -0
- package/src/errors.ts +37 -0
- package/src/eval/runner.ts +63 -38
- 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 -33
- package/src/index.ts +325 -49
- 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 +902 -0
- package/src/schema.ts +8 -17
- package/src/telemetry.ts +403 -0
- package/src/template.ts +8 -4
- package/src/tool-orchestration.ts +1173 -0
- 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/backward-compat.test.ts +147 -0
- package/test/batch-autosubmit-errors.test.ts +610 -0
- package/test/batch-blog-posts.test.ts +87 -129
- package/test/budget-tracking.test.ts +800 -0
- package/test/cache.test.ts +712 -0
- package/test/context-isolation.test.ts +687 -0
- 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/evals/deterministic.eval.test.ts +376 -0
- package/test/generate-core.test.ts +140 -229
- package/test/implicit-batch.test.ts +22 -65
- package/test/json-parse-error-handling.test.ts +463 -0
- package/test/retry-policy-integration.test.ts +117 -0
- package/test/retry.test.ts +1016 -0
- package/test/schema.test.ts +55 -19
- package/test/streaming.test.ts +316 -0
- package/test/template.test.ts +1164 -0
- package/test/tool-orchestration.test.ts +1040 -0
- package/test/wrap-for-v3.test.ts +612 -0
- package/vitest.config.js +6 -0
- package/vitest.config.ts +20 -0
- 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/context.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Execution Context for AI Functions
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* Settings flow from environment
|
|
4
|
+
* Standalone context module with batch processing and budget tracking features.
|
|
5
|
+
* Settings flow from environment -> global context -> local context.
|
|
6
6
|
*
|
|
7
7
|
* @example
|
|
8
8
|
* ```ts
|
|
@@ -23,24 +23,60 @@
|
|
|
23
23
|
* @packageDocumentation
|
|
24
24
|
*/
|
|
25
25
|
|
|
26
|
-
import type { FunctionOptions } from './template.js'
|
|
27
26
|
import type { BatchProvider } from './batch-queue.js'
|
|
27
|
+
import type { RequestContext as IRequestContext, ModelPricing } from './budget.js'
|
|
28
28
|
|
|
29
29
|
// ============================================================================
|
|
30
|
-
// Types
|
|
30
|
+
// Core Types (from template.ts equivalent)
|
|
31
|
+
// ============================================================================
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Common options for all AI functions
|
|
35
|
+
*/
|
|
36
|
+
export interface FunctionOptions {
|
|
37
|
+
/** Model to use (e.g., 'claude-opus-4-5', 'gpt-5-1', 'gemini-3-pro') */
|
|
38
|
+
model?: string
|
|
39
|
+
/** Thinking level: 'none', 'low', 'medium', 'high', or token budget number */
|
|
40
|
+
thinking?: 'none' | 'low' | 'medium' | 'high' | number
|
|
41
|
+
/** Temperature (0-2) */
|
|
42
|
+
temperature?: number
|
|
43
|
+
/** Maximum tokens to generate */
|
|
44
|
+
maxTokens?: number
|
|
45
|
+
/** System prompt */
|
|
46
|
+
system?: string
|
|
47
|
+
/** Processing mode */
|
|
48
|
+
mode?: 'default' | 'background'
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// ============================================================================
|
|
52
|
+
// Extended Types for Batch Processing
|
|
31
53
|
// ============================================================================
|
|
32
54
|
|
|
33
55
|
/** Batch execution mode */
|
|
34
56
|
export type BatchMode =
|
|
35
|
-
| 'auto'
|
|
36
|
-
| 'immediate'
|
|
37
|
-
| 'flex'
|
|
38
|
-
| 'deferred'
|
|
57
|
+
| 'auto' // Smart selection: immediate < flexThreshold, flex < batchThreshold, batch above
|
|
58
|
+
| 'immediate' // Execute immediately (concurrent requests, full price)
|
|
59
|
+
| 'flex' // Use flex processing (faster than batch, ~50% discount, minutes)
|
|
60
|
+
| 'deferred' // Always use provider batch API (50% discount, up to 24hr)
|
|
61
|
+
|
|
62
|
+
/** Budget configuration for context */
|
|
63
|
+
export interface ContextBudgetConfig {
|
|
64
|
+
/** Maximum total tokens allowed */
|
|
65
|
+
maxTokens?: number
|
|
66
|
+
/** Maximum cost in USD */
|
|
67
|
+
maxCost?: number
|
|
68
|
+
/** Alert thresholds as fractions (e.g., [0.5, 0.8, 1.0]) */
|
|
69
|
+
alertThresholds?: number[]
|
|
70
|
+
/** Custom pricing for models not in default pricing table */
|
|
71
|
+
customPricing?: Record<string, ModelPricing>
|
|
72
|
+
}
|
|
39
73
|
|
|
40
|
-
/**
|
|
74
|
+
/**
|
|
75
|
+
* Execution context with batch processing and budget features.
|
|
76
|
+
*/
|
|
41
77
|
export interface ExecutionContext extends FunctionOptions {
|
|
42
|
-
/**
|
|
43
|
-
provider?: BatchProvider
|
|
78
|
+
/** Provider to use (for model resolution) */
|
|
79
|
+
provider?: BatchProvider | string
|
|
44
80
|
/** Batch execution mode */
|
|
45
81
|
batchMode?: BatchMode
|
|
46
82
|
/** Minimum items to use flex processing (for 'auto' mode, default: 5) */
|
|
@@ -51,6 +87,10 @@ export interface ExecutionContext extends FunctionOptions {
|
|
|
51
87
|
webhookUrl?: string
|
|
52
88
|
/** Custom metadata for batch jobs */
|
|
53
89
|
metadata?: Record<string, unknown>
|
|
90
|
+
/** Budget configuration for tracking and limits */
|
|
91
|
+
budget?: ContextBudgetConfig
|
|
92
|
+
/** Request context for tracing */
|
|
93
|
+
requestContext?: IRequestContext
|
|
54
94
|
}
|
|
55
95
|
|
|
56
96
|
// ============================================================================
|
|
@@ -103,18 +143,6 @@ let asyncLocalStorage: {
|
|
|
103
143
|
// Lazy initialization of AsyncLocalStorage
|
|
104
144
|
let asyncLocalStorageInitialized = false
|
|
105
145
|
|
|
106
|
-
async function initAsyncLocalStorage(): Promise<void> {
|
|
107
|
-
if (asyncLocalStorageInitialized) return
|
|
108
|
-
asyncLocalStorageInitialized = true
|
|
109
|
-
|
|
110
|
-
try {
|
|
111
|
-
const { AsyncLocalStorage } = await import('async_hooks')
|
|
112
|
-
asyncLocalStorage = new AsyncLocalStorage<ExecutionContext>()
|
|
113
|
-
} catch {
|
|
114
|
-
// Not in Node.js environment, use global context only
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
146
|
// Initialize synchronously if possible (for Node.js environments)
|
|
119
147
|
if (typeof process !== 'undefined' && process.versions?.node) {
|
|
120
148
|
import('async_hooks')
|
|
@@ -127,16 +155,80 @@ if (typeof process !== 'undefined' && process.versions?.node) {
|
|
|
127
155
|
})
|
|
128
156
|
}
|
|
129
157
|
|
|
158
|
+
// ============================================================================
|
|
159
|
+
// Environment Defaults
|
|
160
|
+
// ============================================================================
|
|
161
|
+
|
|
162
|
+
function getEnvContext(): ExecutionContext {
|
|
163
|
+
if (typeof process === 'undefined') return {}
|
|
164
|
+
|
|
165
|
+
const context: ExecutionContext = {}
|
|
166
|
+
|
|
167
|
+
// Model defaults
|
|
168
|
+
if (process.env['AI_MODEL']) {
|
|
169
|
+
context.model = process.env['AI_MODEL']
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Provider defaults
|
|
173
|
+
if (process.env['AI_PROVIDER']) {
|
|
174
|
+
context.provider = process.env['AI_PROVIDER']
|
|
175
|
+
} else if (process.env['ANTHROPIC_API_KEY'] && !process.env['OPENAI_API_KEY']) {
|
|
176
|
+
context.provider = 'anthropic'
|
|
177
|
+
} else if (process.env['OPENAI_API_KEY']) {
|
|
178
|
+
context.provider = 'openai'
|
|
179
|
+
} else if (process.env['CLOUDFLARE_API_TOKEN']) {
|
|
180
|
+
context.provider = 'cloudflare'
|
|
181
|
+
} else if (process.env['AWS_ACCESS_KEY_ID']) {
|
|
182
|
+
context.provider = 'bedrock'
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
return context
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
function getEnvBatchContext(): Partial<ExecutionContext> {
|
|
189
|
+
if (typeof process === 'undefined') return {}
|
|
190
|
+
|
|
191
|
+
const context: Partial<ExecutionContext> = {}
|
|
192
|
+
|
|
193
|
+
// Batch mode
|
|
194
|
+
if (process.env['AI_BATCH_MODE']) {
|
|
195
|
+
context.batchMode = process.env['AI_BATCH_MODE'] as BatchMode
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// Flex threshold (when to start using flex processing)
|
|
199
|
+
if (process.env['AI_FLEX_THRESHOLD']) {
|
|
200
|
+
context.flexThreshold = parseInt(process.env['AI_FLEX_THRESHOLD'], 10)
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// Batch threshold (when to switch from flex to full batch)
|
|
204
|
+
if (process.env['AI_BATCH_THRESHOLD']) {
|
|
205
|
+
context.batchThreshold = parseInt(process.env['AI_BATCH_THRESHOLD'], 10)
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// Webhook URL
|
|
209
|
+
if (process.env['AI_BATCH_WEBHOOK_URL']) {
|
|
210
|
+
context.webhookUrl = process.env['AI_BATCH_WEBHOOK_URL']
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
return context
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// ============================================================================
|
|
217
|
+
// Context Functions
|
|
218
|
+
// ============================================================================
|
|
219
|
+
|
|
130
220
|
/**
|
|
131
221
|
* Get the current execution context
|
|
132
|
-
* Merges: environment defaults
|
|
222
|
+
* Merges: environment defaults -> global context -> local context
|
|
133
223
|
*/
|
|
134
224
|
export function getContext(): ExecutionContext {
|
|
135
225
|
const envContext = getEnvContext()
|
|
226
|
+
const envBatchContext = getEnvBatchContext()
|
|
136
227
|
const localContext = asyncLocalStorage?.getStore()
|
|
137
228
|
|
|
138
229
|
return {
|
|
139
230
|
...envContext,
|
|
231
|
+
...envBatchContext,
|
|
140
232
|
...globalContext,
|
|
141
233
|
...localContext,
|
|
142
234
|
}
|
|
@@ -173,56 +265,6 @@ export function withContext<T>(
|
|
|
173
265
|
}
|
|
174
266
|
}
|
|
175
267
|
|
|
176
|
-
// ============================================================================
|
|
177
|
-
// Environment Defaults
|
|
178
|
-
// ============================================================================
|
|
179
|
-
|
|
180
|
-
function getEnvContext(): ExecutionContext {
|
|
181
|
-
if (typeof process === 'undefined') return {}
|
|
182
|
-
|
|
183
|
-
const context: ExecutionContext = {}
|
|
184
|
-
|
|
185
|
-
// Model defaults
|
|
186
|
-
if (process.env.AI_MODEL) {
|
|
187
|
-
context.model = process.env.AI_MODEL
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
// Provider defaults
|
|
191
|
-
if (process.env.AI_PROVIDER) {
|
|
192
|
-
context.provider = process.env.AI_PROVIDER as BatchProvider
|
|
193
|
-
} else if (process.env.ANTHROPIC_API_KEY && !process.env.OPENAI_API_KEY) {
|
|
194
|
-
context.provider = 'anthropic'
|
|
195
|
-
} else if (process.env.OPENAI_API_KEY) {
|
|
196
|
-
context.provider = 'openai'
|
|
197
|
-
} else if (process.env.CLOUDFLARE_API_TOKEN) {
|
|
198
|
-
context.provider = 'cloudflare'
|
|
199
|
-
} else if (process.env.AWS_ACCESS_KEY_ID) {
|
|
200
|
-
context.provider = 'bedrock'
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
// Batch mode
|
|
204
|
-
if (process.env.AI_BATCH_MODE) {
|
|
205
|
-
context.batchMode = process.env.AI_BATCH_MODE as BatchMode
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
// Flex threshold (when to start using flex processing)
|
|
209
|
-
if (process.env.AI_FLEX_THRESHOLD) {
|
|
210
|
-
context.flexThreshold = parseInt(process.env.AI_FLEX_THRESHOLD, 10)
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
// Batch threshold (when to switch from flex to full batch)
|
|
214
|
-
if (process.env.AI_BATCH_THRESHOLD) {
|
|
215
|
-
context.batchThreshold = parseInt(process.env.AI_BATCH_THRESHOLD, 10)
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
// Webhook URL
|
|
219
|
-
if (process.env.AI_BATCH_WEBHOOK_URL) {
|
|
220
|
-
context.webhookUrl = process.env.AI_BATCH_WEBHOOK_URL
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
return context
|
|
224
|
-
}
|
|
225
|
-
|
|
226
268
|
// ============================================================================
|
|
227
269
|
// Context Helpers
|
|
228
270
|
// ============================================================================
|
|
@@ -236,13 +278,17 @@ export function getModel(): string {
|
|
|
236
278
|
}
|
|
237
279
|
|
|
238
280
|
/**
|
|
239
|
-
* Get the effective provider from context
|
|
281
|
+
* Get the effective provider from context (typed as BatchProvider)
|
|
240
282
|
*/
|
|
241
283
|
export function getProvider(): BatchProvider {
|
|
242
284
|
const ctx = getContext()
|
|
243
|
-
return ctx.provider || 'openai'
|
|
285
|
+
return (ctx.provider || 'openai') as BatchProvider
|
|
244
286
|
}
|
|
245
287
|
|
|
288
|
+
// ============================================================================
|
|
289
|
+
// Batch-Specific Context Helpers
|
|
290
|
+
// ============================================================================
|
|
291
|
+
|
|
246
292
|
/**
|
|
247
293
|
* Get the effective batch mode from context
|
|
248
294
|
*/
|