ai-functions 0.2.19 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/.turbo/turbo-build.log +5 -0
  2. package/.turbo/turbo-test.log +105 -0
  3. package/README.md +232 -37
  4. package/TODO.md +138 -0
  5. package/dist/ai-promise.d.ts +219 -0
  6. package/dist/ai-promise.d.ts.map +1 -0
  7. package/dist/ai-promise.js +610 -0
  8. package/dist/ai-promise.js.map +1 -0
  9. package/dist/ai.d.ts +285 -0
  10. package/dist/ai.d.ts.map +1 -0
  11. package/dist/ai.js +842 -0
  12. package/dist/ai.js.map +1 -0
  13. package/dist/batch/anthropic.d.ts +23 -0
  14. package/dist/batch/anthropic.d.ts.map +1 -0
  15. package/dist/batch/anthropic.js +257 -0
  16. package/dist/batch/anthropic.js.map +1 -0
  17. package/dist/batch/bedrock.d.ts +64 -0
  18. package/dist/batch/bedrock.d.ts.map +1 -0
  19. package/dist/batch/bedrock.js +586 -0
  20. package/dist/batch/bedrock.js.map +1 -0
  21. package/dist/batch/cloudflare.d.ts +37 -0
  22. package/dist/batch/cloudflare.d.ts.map +1 -0
  23. package/dist/batch/cloudflare.js +289 -0
  24. package/dist/batch/cloudflare.js.map +1 -0
  25. package/dist/batch/google.d.ts +41 -0
  26. package/dist/batch/google.d.ts.map +1 -0
  27. package/dist/batch/google.js +360 -0
  28. package/dist/batch/google.js.map +1 -0
  29. package/dist/batch/index.d.ts +31 -0
  30. package/dist/batch/index.d.ts.map +1 -0
  31. package/dist/batch/index.js +31 -0
  32. package/dist/batch/index.js.map +1 -0
  33. package/dist/batch/memory.d.ts +44 -0
  34. package/dist/batch/memory.d.ts.map +1 -0
  35. package/dist/batch/memory.js +188 -0
  36. package/dist/batch/memory.js.map +1 -0
  37. package/dist/batch/openai.d.ts +37 -0
  38. package/dist/batch/openai.d.ts.map +1 -0
  39. package/dist/batch/openai.js +403 -0
  40. package/dist/batch/openai.js.map +1 -0
  41. package/dist/batch-map.d.ts +125 -0
  42. package/dist/batch-map.d.ts.map +1 -0
  43. package/dist/batch-map.js +406 -0
  44. package/dist/batch-map.js.map +1 -0
  45. package/dist/batch-queue.d.ts +273 -0
  46. package/dist/batch-queue.d.ts.map +1 -0
  47. package/dist/batch-queue.js +271 -0
  48. package/dist/batch-queue.js.map +1 -0
  49. package/dist/context.d.ts +133 -0
  50. package/dist/context.d.ts.map +1 -0
  51. package/dist/context.js +267 -0
  52. package/dist/context.js.map +1 -0
  53. package/dist/embeddings.d.ts +123 -0
  54. package/dist/embeddings.d.ts.map +1 -0
  55. package/dist/embeddings.js +170 -0
  56. package/dist/embeddings.js.map +1 -0
  57. package/dist/eval/index.d.ts +8 -0
  58. package/dist/eval/index.d.ts.map +1 -0
  59. package/dist/eval/index.js +8 -0
  60. package/dist/eval/index.js.map +1 -0
  61. package/dist/eval/models.d.ts +66 -0
  62. package/dist/eval/models.d.ts.map +1 -0
  63. package/dist/eval/models.js +120 -0
  64. package/dist/eval/models.js.map +1 -0
  65. package/dist/eval/runner.d.ts +64 -0
  66. package/dist/eval/runner.d.ts.map +1 -0
  67. package/dist/eval/runner.js +148 -0
  68. package/dist/eval/runner.js.map +1 -0
  69. package/dist/generate.d.ts +168 -0
  70. package/dist/generate.d.ts.map +1 -0
  71. package/dist/generate.js +174 -0
  72. package/dist/generate.js.map +1 -0
  73. package/dist/index.d.ts +30 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +54 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/primitives.d.ts +292 -0
  78. package/dist/primitives.d.ts.map +1 -0
  79. package/dist/primitives.js +471 -0
  80. package/dist/primitives.js.map +1 -0
  81. package/dist/providers/cloudflare.d.ts +9 -0
  82. package/dist/providers/cloudflare.d.ts.map +1 -0
  83. package/dist/providers/cloudflare.js +9 -0
  84. package/dist/providers/cloudflare.js.map +1 -0
  85. package/dist/providers/index.d.ts +9 -0
  86. package/dist/providers/index.d.ts.map +1 -0
  87. package/dist/providers/index.js +9 -0
  88. package/dist/providers/index.js.map +1 -0
  89. package/dist/schema.d.ts +54 -0
  90. package/dist/schema.d.ts.map +1 -0
  91. package/dist/schema.js +109 -0
  92. package/dist/schema.js.map +1 -0
  93. package/dist/template.d.ts +73 -0
  94. package/dist/template.d.ts.map +1 -0
  95. package/dist/template.js +129 -0
  96. package/dist/template.js.map +1 -0
  97. package/dist/types.d.ts +481 -0
  98. package/dist/types.d.ts.map +1 -0
  99. package/dist/types.js +5 -0
  100. package/dist/types.js.map +1 -0
  101. package/evalite.config.ts +19 -0
  102. package/evals/README.md +212 -0
  103. package/evals/classification.eval.ts +108 -0
  104. package/evals/marketing.eval.ts +370 -0
  105. package/evals/math.eval.ts +94 -0
  106. package/evals/run-evals.ts +166 -0
  107. package/evals/structured-output.eval.ts +143 -0
  108. package/evals/writing.eval.ts +117 -0
  109. package/examples/batch-blog-posts.ts +160 -0
  110. package/package.json +59 -43
  111. package/src/ai-promise.ts +784 -0
  112. package/src/ai.ts +1183 -0
  113. package/src/batch/anthropic.ts +375 -0
  114. package/src/batch/bedrock.ts +801 -0
  115. package/src/batch/cloudflare.ts +421 -0
  116. package/src/batch/google.ts +491 -0
  117. package/src/batch/index.ts +31 -0
  118. package/src/batch/memory.ts +253 -0
  119. package/src/batch/openai.ts +557 -0
  120. package/src/batch-map.ts +534 -0
  121. package/src/batch-queue.ts +493 -0
  122. package/src/context.ts +332 -0
  123. package/src/embeddings.ts +244 -0
  124. package/src/eval/index.ts +8 -0
  125. package/src/eval/models.ts +158 -0
  126. package/src/eval/runner.ts +217 -0
  127. package/src/generate.ts +245 -0
  128. package/src/index.ts +154 -0
  129. package/src/primitives.ts +612 -0
  130. package/src/providers/cloudflare.ts +15 -0
  131. package/src/providers/index.ts +14 -0
  132. package/src/schema.ts +147 -0
  133. package/src/template.ts +209 -0
  134. package/src/types.ts +540 -0
  135. package/test/README.md +105 -0
  136. package/test/ai-proxy.test.ts +192 -0
  137. package/test/async-iterators.test.ts +327 -0
  138. package/test/batch-background.test.ts +482 -0
  139. package/test/batch-blog-posts.test.ts +387 -0
  140. package/test/blog-generation.test.ts +510 -0
  141. package/test/browse-read.test.ts +611 -0
  142. package/test/core-functions.test.ts +694 -0
  143. package/test/decide.test.ts +393 -0
  144. package/test/define.test.ts +274 -0
  145. package/test/e2e-bedrock-manual.ts +163 -0
  146. package/test/e2e-bedrock.test.ts +191 -0
  147. package/test/e2e-flex-gateway.ts +157 -0
  148. package/test/e2e-flex-manual.ts +183 -0
  149. package/test/e2e-flex.test.ts +209 -0
  150. package/test/e2e-google-manual.ts +178 -0
  151. package/test/e2e-google.test.ts +216 -0
  152. package/test/embeddings.test.ts +284 -0
  153. package/test/evals/define-function.eval.test.ts +379 -0
  154. package/test/evals/primitives.eval.test.ts +384 -0
  155. package/test/function-types.test.ts +492 -0
  156. package/test/generate-core.test.ts +319 -0
  157. package/test/generate.test.ts +163 -0
  158. package/test/implicit-batch.test.ts +422 -0
  159. package/test/schema.test.ts +109 -0
  160. package/test/tagged-templates.test.ts +302 -0
  161. package/tsconfig.json +8 -6
  162. package/vitest.config.ts +42 -0
  163. package/LICENSE +0 -21
  164. package/db/cache.ts +0 -6
  165. package/db/mongo.ts +0 -75
  166. package/dist/mjs/db/cache.d.ts +0 -1
  167. package/dist/mjs/db/cache.js +0 -5
  168. package/dist/mjs/db/mongo.d.ts +0 -31
  169. package/dist/mjs/db/mongo.js +0 -48
  170. package/dist/mjs/examples/data.d.ts +0 -1105
  171. package/dist/mjs/examples/data.js +0 -1105
  172. package/dist/mjs/functions/ai.d.ts +0 -20
  173. package/dist/mjs/functions/ai.js +0 -83
  174. package/dist/mjs/functions/ai.test.d.ts +0 -1
  175. package/dist/mjs/functions/ai.test.js +0 -29
  176. package/dist/mjs/functions/gpt.d.ts +0 -4
  177. package/dist/mjs/functions/gpt.js +0 -10
  178. package/dist/mjs/functions/list.d.ts +0 -7
  179. package/dist/mjs/functions/list.js +0 -72
  180. package/dist/mjs/index.d.ts +0 -3
  181. package/dist/mjs/index.js +0 -3
  182. package/dist/mjs/queue/kafka.d.ts +0 -0
  183. package/dist/mjs/queue/kafka.js +0 -1
  184. package/dist/mjs/queue/memory.d.ts +0 -0
  185. package/dist/mjs/queue/memory.js +0 -1
  186. package/dist/mjs/queue/mongo.d.ts +0 -30
  187. package/dist/mjs/queue/mongo.js +0 -42
  188. package/dist/mjs/streams/kafka.d.ts +0 -0
  189. package/dist/mjs/streams/kafka.js +0 -1
  190. package/dist/mjs/streams/memory.d.ts +0 -0
  191. package/dist/mjs/streams/memory.js +0 -1
  192. package/dist/mjs/streams/mongo.d.ts +0 -0
  193. package/dist/mjs/streams/mongo.js +0 -1
  194. package/dist/mjs/streams/types.d.ts +0 -0
  195. package/dist/mjs/streams/types.js +0 -1
  196. package/dist/mjs/types.d.ts +0 -11
  197. package/dist/mjs/types.js +0 -1
  198. package/dist/mjs/utils/completion.d.ts +0 -9
  199. package/dist/mjs/utils/completion.js +0 -20
  200. package/dist/mjs/utils/schema.d.ts +0 -10
  201. package/dist/mjs/utils/schema.js +0 -72
  202. package/dist/mjs/utils/schema.test.d.ts +0 -1
  203. package/dist/mjs/utils/schema.test.js +0 -60
  204. package/dist/mjs/utils/state.d.ts +0 -1
  205. package/dist/mjs/utils/state.js +0 -19
  206. package/examples/data.ts +0 -1105
  207. package/fixup +0 -11
  208. package/functions/ai.test.ts +0 -41
  209. package/functions/ai.ts +0 -115
  210. package/functions/gpt.ts +0 -12
  211. package/functions/list.ts +0 -84
  212. package/index.ts +0 -3
  213. package/queue/kafka.ts +0 -0
  214. package/queue/memory.ts +0 -0
  215. package/queue/mongo.ts +0 -88
  216. package/streams/kafka.ts +0 -0
  217. package/streams/memory.ts +0 -0
  218. package/streams/mongo.ts +0 -0
  219. package/streams/types.ts +0 -0
  220. package/tsconfig-backup.json +0 -105
  221. package/tsconfig-base.json +0 -26
  222. package/tsconfig-cjs.json +0 -8
  223. package/types.ts +0 -12
  224. package/utils/completion.ts +0 -28
  225. package/utils/schema.test.ts +0 -69
  226. package/utils/schema.ts +0 -74
  227. package/utils/state.ts +0 -23
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Batch Map - Automatic batch detection for .map() operations
3
+ *
4
+ * When you call .map() on a list result, the individual operations
5
+ * are captured and automatically batched when resolved.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * // This automatically batches the write operations
10
+ * const titles = await list`10 blog post titles`
11
+ * const posts = titles.map(title => write`blog post: # ${title}`)
12
+ *
13
+ * // When awaited, posts are generated via batch API
14
+ * console.log(await posts) // 10 blog posts
15
+ * ```
16
+ *
17
+ * @packageDocumentation
18
+ */
19
+ import type { SimpleSchema } from './schema.js';
20
+ /** Symbol to identify BatchMapPromise instances */
21
+ export declare const BATCH_MAP_SYMBOL: unique symbol;
22
+ /** A captured operation from the map callback */
23
+ export interface CapturedOperation {
24
+ /** Unique ID for this operation */
25
+ id: string;
26
+ /** The prompt template */
27
+ prompt: string;
28
+ /** The item value that will be substituted */
29
+ itemPlaceholder: string;
30
+ /** Schema for structured output */
31
+ schema?: SimpleSchema;
32
+ /** Generation type */
33
+ type: 'text' | 'object' | 'boolean' | 'list';
34
+ /** System prompt */
35
+ system?: string;
36
+ }
37
+ /** Options for batch map */
38
+ export interface BatchMapOptions {
39
+ /** Force immediate execution (no batching) */
40
+ immediate?: boolean;
41
+ /** Force batch API (even for small batches) */
42
+ deferred?: boolean;
43
+ }
44
+ /**
45
+ * A promise that represents a batch of mapped operations.
46
+ * Resolves by either:
47
+ * - Executing via batch API (for large batches or when deferred)
48
+ * - Executing concurrently (for small batches or when immediate)
49
+ */
50
+ export declare class BatchMapPromise<T> implements PromiseLike<T[]> {
51
+ readonly [BATCH_MAP_SYMBOL] = true;
52
+ /** The source list items */
53
+ private _items;
54
+ /** The captured operations (one per item) */
55
+ private _operations;
56
+ /** Options for batch execution */
57
+ private _options;
58
+ /** Cached resolver promise */
59
+ private _resolver;
60
+ constructor(items: unknown[], operations: CapturedOperation[][], options?: BatchMapOptions);
61
+ /**
62
+ * Get the number of items in the batch
63
+ */
64
+ get size(): number;
65
+ /**
66
+ * Resolve the batch
67
+ */
68
+ resolve(): Promise<T[]>;
69
+ /**
70
+ * Execute via flex processing (faster than batch, ~50% discount)
71
+ * Available for OpenAI and AWS Bedrock
72
+ */
73
+ private _resolveViaFlex;
74
+ /**
75
+ * Execute via provider batch API (deferred, 50% discount)
76
+ */
77
+ private _resolveViaBatchAPI;
78
+ /**
79
+ * Execute immediately (concurrent requests)
80
+ */
81
+ private _resolveImmediately;
82
+ /**
83
+ * Execute a single operation
84
+ */
85
+ private _executeOperation;
86
+ /**
87
+ * Reconstruct results from batch response
88
+ */
89
+ private _reconstructResults;
90
+ /**
91
+ * Promise interface - then()
92
+ */
93
+ then<TResult1 = T[], TResult2 = never>(onfulfilled?: ((value: T[]) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null): Promise<TResult1 | TResult2>;
94
+ /**
95
+ * Promise interface - catch()
96
+ */
97
+ catch<TResult = never>(onrejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | null): Promise<T[] | TResult>;
98
+ /**
99
+ * Promise interface - finally()
100
+ */
101
+ finally(onfinally?: (() => void) | null): Promise<T[]>;
102
+ }
103
+ /**
104
+ * Check if we're in recording mode
105
+ */
106
+ export declare function isInRecordingMode(): boolean;
107
+ /**
108
+ * Get the current item placeholder for template substitution
109
+ */
110
+ export declare function getCurrentItemPlaceholder(): string | null;
111
+ /**
112
+ * Capture an operation during recording
113
+ */
114
+ export declare function captureOperation(prompt: string, type: CapturedOperation['type'], schema?: SimpleSchema, system?: string): void;
115
+ /**
116
+ * Create a batch map from an array and a callback
117
+ *
118
+ * This is called internally by AIPromise.map()
119
+ */
120
+ export declare function createBatchMap<T, U>(items: T[], callback: (item: T, index: number) => U, options?: BatchMapOptions): BatchMapPromise<U>;
121
+ /**
122
+ * Check if a value is a BatchMapPromise
123
+ */
124
+ export declare function isBatchMapPromise(value: unknown): value is BatchMapPromise<unknown>;
125
+ //# sourceMappingURL=batch-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-map.d.ts","sourceRoot":"","sources":["../src/batch-map.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,406 @@
1
+ /**
2
+ * Batch Map - Automatic batch detection for .map() operations
3
+ *
4
+ * When you call .map() on a list result, the individual operations
5
+ * are captured and automatically batched when resolved.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * // This automatically batches the write operations
10
+ * const titles = await list`10 blog post titles`
11
+ * const posts = titles.map(title => write`blog post: # ${title}`)
12
+ *
13
+ * // When awaited, posts are generated via batch API
14
+ * console.log(await posts) // 10 blog posts
15
+ * ```
16
+ *
17
+ * @packageDocumentation
18
+ */
19
+ // Note: We avoid importing AIPromise here to prevent circular dependencies
20
+ // The AI promise module imports from this file for recording mode
21
+ import { getContext, getExecutionTier, getProvider, getModel, isFlexAvailable, } from './context.js';
22
+ import { createBatch, getBatchAdapter } from './batch-queue.js';
23
+ import { generateObject, generateText } from './generate.js';
24
+ // ============================================================================
25
+ // Types
26
+ // ============================================================================
27
+ /** Symbol to identify BatchMapPromise instances */
28
+ export const BATCH_MAP_SYMBOL = Symbol.for('ai-batch-map');
29
+ // ============================================================================
30
+ // BatchMapPromise
31
+ // ============================================================================
32
+ /**
33
+ * A promise that represents a batch of mapped operations.
34
+ * Resolves by either:
35
+ * - Executing via batch API (for large batches or when deferred)
36
+ * - Executing concurrently (for small batches or when immediate)
37
+ */
38
+ export class BatchMapPromise {
39
+ [BATCH_MAP_SYMBOL] = true;
40
+ /** The source list items */
41
+ _items;
42
+ /** The captured operations (one per item) */
43
+ _operations;
44
+ /** Options for batch execution */
45
+ _options;
46
+ /** Cached resolver promise */
47
+ _resolver = null;
48
+ constructor(items, operations, options = {}) {
49
+ this._items = items;
50
+ this._operations = operations;
51
+ this._options = options;
52
+ }
53
+ /**
54
+ * Get the number of items in the batch
55
+ */
56
+ get size() {
57
+ return this._items.length;
58
+ }
59
+ /**
60
+ * Resolve the batch
61
+ */
62
+ async resolve() {
63
+ const totalOperations = this._operations.reduce((sum, ops) => sum + ops.length, 0);
64
+ // Determine execution tier
65
+ let tier;
66
+ if (this._options.deferred) {
67
+ tier = 'batch';
68
+ }
69
+ else if (this._options.immediate) {
70
+ tier = 'immediate';
71
+ }
72
+ else {
73
+ tier = getExecutionTier(totalOperations);
74
+ }
75
+ // Execute based on tier
76
+ switch (tier) {
77
+ case 'immediate':
78
+ return this._resolveImmediately();
79
+ case 'flex':
80
+ // Use flex processing if available, otherwise fall back to immediate
81
+ if (isFlexAvailable()) {
82
+ return this._resolveViaFlex();
83
+ }
84
+ console.warn(`Flex processing not available for ${getProvider()}, using immediate execution`);
85
+ return this._resolveImmediately();
86
+ case 'batch':
87
+ return this._resolveViaBatchAPI();
88
+ default:
89
+ return this._resolveImmediately();
90
+ }
91
+ }
92
+ /**
93
+ * Execute via flex processing (faster than batch, ~50% discount)
94
+ * Available for OpenAI and AWS Bedrock
95
+ */
96
+ async _resolveViaFlex() {
97
+ const provider = getProvider();
98
+ const model = getModel();
99
+ // Try to get the flex adapter
100
+ try {
101
+ const { getFlexAdapter } = await import('./batch-queue.js');
102
+ const adapter = getFlexAdapter(provider);
103
+ // Build batch items
104
+ const batchItems = [];
105
+ const itemOperationMap = new Map();
106
+ for (let itemIndex = 0; itemIndex < this._items.length; itemIndex++) {
107
+ const item = this._items[itemIndex];
108
+ const operations = this._operations[itemIndex] || [];
109
+ for (let opIndex = 0; opIndex < operations.length; opIndex++) {
110
+ const op = operations[opIndex];
111
+ if (!op)
112
+ continue;
113
+ const id = `item_${itemIndex}_op_${opIndex}`;
114
+ const prompt = op.prompt.replace(op.itemPlaceholder, String(item));
115
+ batchItems.push({
116
+ id,
117
+ prompt,
118
+ schema: op.schema,
119
+ options: { system: op.system, model },
120
+ status: 'pending',
121
+ });
122
+ itemOperationMap.set(id, { itemIndex, opIndex });
123
+ }
124
+ }
125
+ // Submit via flex adapter
126
+ const results = await adapter.submitFlex(batchItems, { model });
127
+ return this._reconstructResults(results, itemOperationMap);
128
+ }
129
+ catch {
130
+ // Flex adapter not available, fall back to batch or immediate
131
+ console.warn(`Flex adapter not available, falling back to batch API`);
132
+ return this._resolveViaBatchAPI();
133
+ }
134
+ }
135
+ /**
136
+ * Execute via provider batch API (deferred, 50% discount)
137
+ */
138
+ async _resolveViaBatchAPI() {
139
+ const ctx = getContext();
140
+ const provider = getProvider();
141
+ const model = getModel();
142
+ // Try to get the batch adapter
143
+ let adapter;
144
+ try {
145
+ adapter = getBatchAdapter(provider);
146
+ }
147
+ catch {
148
+ // Adapter not registered, fall back to immediate execution
149
+ console.warn(`Batch adapter for ${provider} not available, falling back to immediate execution`);
150
+ return this._resolveImmediately();
151
+ }
152
+ // Flatten all operations into a single batch
153
+ const batchItems = [];
154
+ const itemOperationMap = new Map();
155
+ for (let itemIndex = 0; itemIndex < this._items.length; itemIndex++) {
156
+ const item = this._items[itemIndex];
157
+ const operations = this._operations[itemIndex] || [];
158
+ for (let opIndex = 0; opIndex < operations.length; opIndex++) {
159
+ const op = operations[opIndex];
160
+ if (!op)
161
+ continue;
162
+ const id = `item_${itemIndex}_op_${opIndex}`;
163
+ // Substitute the actual item value into the prompt
164
+ const prompt = op.prompt.replace(op.itemPlaceholder, String(item));
165
+ batchItems.push({
166
+ id,
167
+ prompt,
168
+ schema: op.schema,
169
+ options: { system: op.system, model },
170
+ status: 'pending',
171
+ });
172
+ itemOperationMap.set(id, { itemIndex, opIndex });
173
+ }
174
+ }
175
+ // Submit batch
176
+ const batch = createBatch({
177
+ provider,
178
+ model,
179
+ webhookUrl: ctx.webhookUrl,
180
+ metadata: ctx.metadata,
181
+ });
182
+ for (const item of batchItems) {
183
+ batch.add(item.prompt, {
184
+ schema: item.schema,
185
+ options: item.options,
186
+ customId: item.id,
187
+ });
188
+ }
189
+ const { completion } = await batch.submit();
190
+ const results = await completion;
191
+ // Reconstruct the results array
192
+ return this._reconstructResults(results, itemOperationMap);
193
+ }
194
+ /**
195
+ * Execute immediately (concurrent requests)
196
+ */
197
+ async _resolveImmediately() {
198
+ const model = getModel();
199
+ const results = [];
200
+ // Process each item
201
+ for (let itemIndex = 0; itemIndex < this._items.length; itemIndex++) {
202
+ const item = this._items[itemIndex];
203
+ const operations = this._operations[itemIndex] || [];
204
+ // If there's only one operation per item, resolve it directly
205
+ if (operations.length === 1) {
206
+ const op = operations[0];
207
+ if (op) {
208
+ const prompt = op.prompt.replace(op.itemPlaceholder, String(item));
209
+ const result = await this._executeOperation(op, prompt, model);
210
+ results.push(result);
211
+ }
212
+ }
213
+ else if (operations.length > 0) {
214
+ // Multiple operations per item - resolve as object
215
+ const opResults = {};
216
+ await Promise.all(operations.map(async (op, opIndex) => {
217
+ if (!op)
218
+ return;
219
+ const prompt = op.prompt.replace(op.itemPlaceholder, String(item));
220
+ opResults[`op_${opIndex}`] = await this._executeOperation(op, prompt, model);
221
+ }));
222
+ results.push(opResults);
223
+ }
224
+ }
225
+ return results;
226
+ }
227
+ /**
228
+ * Execute a single operation
229
+ */
230
+ async _executeOperation(op, prompt, model) {
231
+ switch (op.type) {
232
+ case 'text':
233
+ const textResult = await generateText({ model, prompt, system: op.system });
234
+ return textResult.text;
235
+ case 'boolean':
236
+ const boolResult = await generateObject({
237
+ model,
238
+ schema: { answer: 'true | false' },
239
+ prompt,
240
+ system: op.system || 'Answer with true or false.',
241
+ });
242
+ return boolResult.object.answer === 'true';
243
+ case 'list':
244
+ const listResult = await generateObject({
245
+ model,
246
+ schema: { items: ['List items'] },
247
+ prompt,
248
+ system: op.system,
249
+ });
250
+ return listResult.object.items;
251
+ case 'object':
252
+ default:
253
+ const objResult = await generateObject({
254
+ model,
255
+ schema: op.schema || { result: 'The result' },
256
+ prompt,
257
+ system: op.system,
258
+ });
259
+ return objResult.object;
260
+ }
261
+ }
262
+ /**
263
+ * Reconstruct results from batch response
264
+ */
265
+ _reconstructResults(batchResults, itemOperationMap) {
266
+ const results = new Array(this._items.length);
267
+ // Initialize results array
268
+ for (let i = 0; i < this._items.length; i++) {
269
+ const operations = this._operations[i] || [];
270
+ if (operations.length === 1) {
271
+ results[i] = undefined;
272
+ }
273
+ else {
274
+ results[i] = {};
275
+ }
276
+ }
277
+ // Fill in results
278
+ for (const batchResult of batchResults) {
279
+ const mapping = itemOperationMap.get(batchResult.id);
280
+ if (!mapping)
281
+ continue;
282
+ const { itemIndex, opIndex } = mapping;
283
+ const operations = this._operations[itemIndex] || [];
284
+ if (operations.length === 1) {
285
+ results[itemIndex] = batchResult.result;
286
+ }
287
+ else {
288
+ results[itemIndex][`op_${opIndex}`] = batchResult.result;
289
+ }
290
+ }
291
+ return results;
292
+ }
293
+ /**
294
+ * Promise interface - then()
295
+ */
296
+ then(onfulfilled, onrejected) {
297
+ if (!this._resolver) {
298
+ this._resolver = this.resolve();
299
+ }
300
+ return this._resolver.then(onfulfilled, onrejected);
301
+ }
302
+ /**
303
+ * Promise interface - catch()
304
+ */
305
+ catch(onrejected) {
306
+ return this.then(null, onrejected);
307
+ }
308
+ /**
309
+ * Promise interface - finally()
310
+ */
311
+ finally(onfinally) {
312
+ return this.then((value) => {
313
+ onfinally?.();
314
+ return value;
315
+ }, (reason) => {
316
+ onfinally?.();
317
+ throw reason;
318
+ });
319
+ }
320
+ }
321
+ // ============================================================================
322
+ // Recording Context
323
+ // ============================================================================
324
+ /** Current item value being recorded */
325
+ let currentRecordingItem = null;
326
+ /** Current item placeholder string */
327
+ let currentItemPlaceholder = '';
328
+ /** Captured operations during recording */
329
+ let capturedOperations = [];
330
+ /** Recording mode flag */
331
+ let isRecording = false;
332
+ /** Operation counter for unique IDs */
333
+ let operationCounter = 0;
334
+ /**
335
+ * Check if we're in recording mode
336
+ */
337
+ export function isInRecordingMode() {
338
+ return isRecording;
339
+ }
340
+ /**
341
+ * Get the current item placeholder for template substitution
342
+ */
343
+ export function getCurrentItemPlaceholder() {
344
+ return isRecording ? currentItemPlaceholder : null;
345
+ }
346
+ /**
347
+ * Capture an operation during recording
348
+ */
349
+ export function captureOperation(prompt, type, schema, system) {
350
+ if (!isRecording)
351
+ return;
352
+ capturedOperations.push({
353
+ id: `op_${++operationCounter}`,
354
+ prompt,
355
+ itemPlaceholder: currentItemPlaceholder,
356
+ schema,
357
+ type,
358
+ system,
359
+ });
360
+ }
361
+ // ============================================================================
362
+ // Batch Map Factory
363
+ // ============================================================================
364
+ /**
365
+ * Create a batch map from an array and a callback
366
+ *
367
+ * This is called internally by AIPromise.map()
368
+ */
369
+ export function createBatchMap(items, callback, options = {}) {
370
+ const allOperations = [];
371
+ for (let i = 0; i < items.length; i++) {
372
+ const item = items[i];
373
+ // Enter recording mode
374
+ isRecording = true;
375
+ currentRecordingItem = item;
376
+ currentItemPlaceholder = `__BATCH_ITEM_${i}__`;
377
+ capturedOperations = [];
378
+ try {
379
+ // Execute the callback to capture operations
380
+ callback(item, i);
381
+ // Operations should have been captured via captureOperation()
382
+ allOperations.push([...capturedOperations]);
383
+ }
384
+ finally {
385
+ // Exit recording mode
386
+ isRecording = false;
387
+ currentRecordingItem = null;
388
+ currentItemPlaceholder = '';
389
+ capturedOperations = [];
390
+ }
391
+ }
392
+ return new BatchMapPromise(items, allOperations, options);
393
+ }
394
+ // ============================================================================
395
+ // Helpers
396
+ // ============================================================================
397
+ /**
398
+ * Check if a value is a BatchMapPromise
399
+ */
400
+ export function isBatchMapPromise(value) {
401
+ return (value !== null &&
402
+ typeof value === 'object' &&
403
+ BATCH_MAP_SYMBOL in value &&
404
+ value[BATCH_MAP_SYMBOL] === true);
405
+ }
406
+ //# sourceMappingURL=batch-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-map.js","sourceRoot":"","sources":["../src/batch-map.ts"],"names":[],"mappings":"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"}