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,289 @@
1
+ /**
2
+ * Cloudflare AI Gateway Batch Adapter
3
+ *
4
+ * Implements batch processing using Cloudflare AI Gateway's batch endpoint.
5
+ * Cloudflare's batch API is newer but integrates well with Workers.
6
+ *
7
+ * Note: Cloudflare's batch API is evolving. This adapter implements
8
+ * the current batch capabilities and can be extended as new features land.
9
+ *
10
+ * @see https://developers.cloudflare.com/ai-gateway/
11
+ *
12
+ * @packageDocumentation
13
+ */
14
+ import { registerBatchAdapter, } from '../batch-queue.js';
15
+ import { schema as convertSchema } from '../schema.js';
16
+ // ============================================================================
17
+ // Cloudflare Client Configuration
18
+ // ============================================================================
19
+ let accountId;
20
+ let gatewayId;
21
+ let apiToken;
22
+ let baseUrl = 'https://api.cloudflare.com/client/v4';
23
+ /**
24
+ * Configure the Cloudflare client
25
+ */
26
+ export function configureCloudflare(options) {
27
+ if (options.accountId)
28
+ accountId = options.accountId;
29
+ if (options.gatewayId)
30
+ gatewayId = options.gatewayId;
31
+ if (options.apiToken)
32
+ apiToken = options.apiToken;
33
+ if (options.baseUrl)
34
+ baseUrl = options.baseUrl;
35
+ }
36
+ function getConfig() {
37
+ const accId = accountId || process.env.CLOUDFLARE_ACCOUNT_ID;
38
+ const gwId = gatewayId || process.env.CLOUDFLARE_AI_GATEWAY_ID || process.env.AI_GATEWAY_ID;
39
+ const token = apiToken || process.env.CLOUDFLARE_API_TOKEN;
40
+ if (!accId) {
41
+ throw new Error('Cloudflare account ID not configured. Set CLOUDFLARE_ACCOUNT_ID or call configureCloudflare()');
42
+ }
43
+ if (!gwId) {
44
+ throw new Error('Cloudflare AI Gateway ID not configured. Set CLOUDFLARE_AI_GATEWAY_ID or call configureCloudflare()');
45
+ }
46
+ if (!token) {
47
+ throw new Error('Cloudflare API token not configured. Set CLOUDFLARE_API_TOKEN or call configureCloudflare()');
48
+ }
49
+ return { accountId: accId, gatewayId: gwId, apiToken: token };
50
+ }
51
+ async function cloudflareRequest(method, path, body) {
52
+ const config = getConfig();
53
+ const url = `${baseUrl}${path}`;
54
+ const response = await fetch(url, {
55
+ method,
56
+ headers: {
57
+ Authorization: `Bearer ${config.apiToken}`,
58
+ 'Content-Type': 'application/json',
59
+ },
60
+ body: body ? JSON.stringify(body) : undefined,
61
+ });
62
+ if (!response.ok) {
63
+ const error = await response.text();
64
+ throw new Error(`Cloudflare API error: ${response.status} ${error}`);
65
+ }
66
+ const data = await response.json();
67
+ if (!data.success) {
68
+ throw new Error(`Cloudflare API error: ${JSON.stringify(data.errors)}`);
69
+ }
70
+ return data.result;
71
+ }
72
+ // ============================================================================
73
+ // In-memory job storage (for polling)
74
+ // ============================================================================
75
+ const pendingJobs = new Map();
76
+ let jobCounter = 0;
77
+ // ============================================================================
78
+ // Cloudflare Batch Adapter
79
+ // ============================================================================
80
+ /**
81
+ * Cloudflare batch adapter
82
+ *
83
+ * Note: Cloudflare's AI Gateway doesn't have a native batch API like OpenAI/Anthropic.
84
+ * This adapter implements batch processing by:
85
+ * 1. Sending requests concurrently through the gateway
86
+ * 2. Utilizing Cloudflare's caching and rate limiting
87
+ * 3. Tracking job state locally (or in D1/KV for production)
88
+ *
89
+ * For true async batch processing, consider using Cloudflare Queues + Workers.
90
+ */
91
+ const cloudflareAdapter = {
92
+ async submit(items, options) {
93
+ const config = getConfig();
94
+ const jobId = `cf_batch_${++jobCounter}_${Date.now()}`;
95
+ const model = options.model || 'mistral/mistral-7b-instruct-v0.1';
96
+ // Store job state
97
+ pendingJobs.set(jobId, {
98
+ items,
99
+ options,
100
+ results: [],
101
+ status: 'pending',
102
+ createdAt: new Date(),
103
+ });
104
+ // Process requests concurrently (Cloudflare handles rate limiting)
105
+ const completion = processCloudflareRequests(jobId, items, config, model, options);
106
+ const job = {
107
+ id: jobId,
108
+ provider: 'cloudflare',
109
+ status: 'pending',
110
+ totalItems: items.length,
111
+ completedItems: 0,
112
+ failedItems: 0,
113
+ createdAt: new Date(),
114
+ webhookUrl: options.webhookUrl,
115
+ };
116
+ return { job, completion };
117
+ },
118
+ async getStatus(batchId) {
119
+ const job = pendingJobs.get(batchId);
120
+ if (!job) {
121
+ throw new Error(`Batch not found: ${batchId}`);
122
+ }
123
+ const completedItems = job.results.filter((r) => r.status === 'completed').length;
124
+ const failedItems = job.results.filter((r) => r.status === 'failed').length;
125
+ return {
126
+ id: batchId,
127
+ provider: 'cloudflare',
128
+ status: job.status,
129
+ totalItems: job.items.length,
130
+ completedItems,
131
+ failedItems,
132
+ createdAt: job.createdAt,
133
+ completedAt: job.completedAt,
134
+ };
135
+ },
136
+ async cancel(batchId) {
137
+ const job = pendingJobs.get(batchId);
138
+ if (job) {
139
+ job.status = 'cancelled';
140
+ }
141
+ },
142
+ async getResults(batchId) {
143
+ const job = pendingJobs.get(batchId);
144
+ if (!job) {
145
+ throw new Error(`Batch not found: ${batchId}`);
146
+ }
147
+ return job.results;
148
+ },
149
+ async waitForCompletion(batchId, pollInterval = 1000) {
150
+ const job = pendingJobs.get(batchId);
151
+ if (!job) {
152
+ throw new Error(`Batch not found: ${batchId}`);
153
+ }
154
+ while (job.status !== 'completed' && job.status !== 'failed' && job.status !== 'cancelled') {
155
+ await new Promise((resolve) => setTimeout(resolve, pollInterval));
156
+ }
157
+ return job.results;
158
+ },
159
+ };
160
+ // ============================================================================
161
+ // Processing
162
+ // ============================================================================
163
+ async function processCloudflareRequests(jobId, items, config, model, options) {
164
+ const job = pendingJobs.get(jobId);
165
+ if (!job) {
166
+ throw new Error(`Job not found: ${jobId}`);
167
+ }
168
+ job.status = 'in_progress';
169
+ // Process all requests concurrently with concurrency limit
170
+ const CONCURRENCY = 10;
171
+ const results = [];
172
+ for (let i = 0; i < items.length; i += CONCURRENCY) {
173
+ const batch = items.slice(i, i + CONCURRENCY);
174
+ const batchResults = await Promise.all(batch.map(async (item) => {
175
+ try {
176
+ const result = await processCloudflareItem(item, config, model);
177
+ return result;
178
+ }
179
+ catch (error) {
180
+ return {
181
+ id: item.id,
182
+ customId: item.id,
183
+ status: 'failed',
184
+ error: error instanceof Error ? error.message : 'Unknown error',
185
+ };
186
+ }
187
+ }));
188
+ results.push(...batchResults);
189
+ job.results = results;
190
+ }
191
+ job.status = results.every((r) => r.status === 'completed') ? 'completed' : 'failed';
192
+ job.completedAt = new Date();
193
+ return results;
194
+ }
195
+ async function processCloudflareItem(item, config, model) {
196
+ // Route through AI Gateway
197
+ const gatewayUrl = `https://gateway.ai.cloudflare.com/v1/${config.accountId}/${config.gatewayId}`;
198
+ // Determine provider from model
199
+ let provider = 'workers-ai';
200
+ let endpoint = '';
201
+ if (model.startsWith('openai/') || model.startsWith('gpt-')) {
202
+ provider = 'openai';
203
+ endpoint = '/chat/completions';
204
+ }
205
+ else if (model.startsWith('anthropic/') || model.startsWith('claude-')) {
206
+ provider = 'anthropic';
207
+ endpoint = '/messages';
208
+ }
209
+ else if (model.startsWith('@cf/') || model.startsWith('workers-ai/')) {
210
+ provider = 'workers-ai';
211
+ endpoint = `/ai/run/${model.replace('workers-ai/', '').replace('@cf/', '')}`;
212
+ }
213
+ else {
214
+ // Default to OpenAI-compatible
215
+ provider = 'openai';
216
+ endpoint = '/chat/completions';
217
+ }
218
+ const url = `${gatewayUrl}/${provider}${endpoint}`;
219
+ const messages = [
220
+ ...(item.options?.system ? [{ role: 'system', content: item.options.system }] : []),
221
+ { role: 'user', content: item.prompt },
222
+ ];
223
+ const body = {
224
+ model: model.replace(`${provider}/`, ''),
225
+ messages,
226
+ max_tokens: item.options?.maxTokens || 4096,
227
+ temperature: item.options?.temperature,
228
+ };
229
+ // Add JSON mode if schema is provided
230
+ if (item.schema) {
231
+ body.response_format = { type: 'json_object' };
232
+ }
233
+ const response = await fetch(url, {
234
+ method: 'POST',
235
+ headers: {
236
+ 'cf-aig-authorization': `Bearer ${config.apiToken}`,
237
+ 'Content-Type': 'application/json',
238
+ },
239
+ body: JSON.stringify(body),
240
+ });
241
+ if (!response.ok) {
242
+ const error = await response.text();
243
+ throw new Error(`Cloudflare Gateway error: ${response.status} ${error}`);
244
+ }
245
+ const data = await response.json();
246
+ // Extract content based on response format
247
+ let content;
248
+ if (data.choices?.[0]?.message?.content) {
249
+ // OpenAI format
250
+ content = data.choices[0].message.content;
251
+ }
252
+ else if (data.content?.[0]?.text) {
253
+ // Anthropic format
254
+ content = data.content[0].text;
255
+ }
256
+ else if (data.response) {
257
+ // Workers AI format
258
+ content = data.response;
259
+ }
260
+ let result = content;
261
+ // Try to parse JSON if schema was provided
262
+ if (item.schema && content) {
263
+ try {
264
+ result = JSON.parse(content);
265
+ }
266
+ catch {
267
+ // Keep as string
268
+ }
269
+ }
270
+ return {
271
+ id: item.id,
272
+ customId: item.id,
273
+ status: 'completed',
274
+ result,
275
+ usage: data.usage
276
+ ? {
277
+ promptTokens: data.usage.prompt_tokens,
278
+ completionTokens: data.usage.completion_tokens,
279
+ totalTokens: data.usage.total_tokens,
280
+ }
281
+ : undefined,
282
+ };
283
+ }
284
+ // ============================================================================
285
+ // Register Adapter
286
+ // ============================================================================
287
+ registerBatchAdapter('cloudflare', cloudflareAdapter);
288
+ export { cloudflareAdapter };
289
+ //# sourceMappingURL=cloudflare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../../src/batch/cloudflare.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Google GenAI (Gemini) Adapter
3
+ *
4
+ * Implements processing using Google's Generative AI API (Gemini models).
5
+ * Google doesn't have a native batch API like OpenAI/Anthropic, so this
6
+ * implements concurrent processing for the flex tier.
7
+ *
8
+ * @see https://ai.google.dev/gemini-api/docs
9
+ *
10
+ * @packageDocumentation
11
+ */
12
+ import { type BatchAdapter, type FlexAdapter } from '../batch-queue.js';
13
+ /**
14
+ * Configure the Google GenAI client
15
+ */
16
+ export declare function configureGoogleGenAI(options: {
17
+ apiKey?: string;
18
+ baseUrl?: string;
19
+ /** Optional: Cloudflare AI Gateway URL for routing requests */
20
+ gatewayUrl?: string;
21
+ /** Optional: Cloudflare AI Gateway token */
22
+ gatewayToken?: string;
23
+ }): void;
24
+ /**
25
+ * Google GenAI batch adapter
26
+ *
27
+ * Note: Google doesn't have a native batch API like OpenAI/Anthropic.
28
+ * This adapter implements batch processing via concurrent requests.
29
+ * For true async batch processing, consider using Google Cloud Batch
30
+ * with Vertex AI.
31
+ */
32
+ declare const googleAdapter: BatchAdapter;
33
+ /**
34
+ * Google GenAI Flex Adapter
35
+ *
36
+ * Implements concurrent processing for medium-sized batches.
37
+ * Uses the Gemini API for fast turnaround.
38
+ */
39
+ declare const googleFlexAdapter: FlexAdapter;
40
+ export { googleAdapter, googleFlexAdapter };
41
+ //# sourceMappingURL=google.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../src/batch/google.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,WAAW,EAOjB,MAAM,mBAAmB,CAAA;AAyC1B;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,GAAG,IAAI,CAKP;AAgDD;;;;;;;GAOG;AACH,QAAA,MAAM,aAAa,EAAE,YA+EpB,CAAA;AAMD;;;;;GAKG;AACH,QAAA,MAAM,iBAAiB,EAAE,WA+BxB,CAAA;AAyOD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,CAAA"}