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.
Files changed (400) hide show
  1. package/.turbo/turbo-build.log +5 -0
  2. package/.turbo/turbo-test.log +105 -0
  3. package/README.md +190 -86
  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 +29 -4
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +53 -52
  76. package/dist/index.js.map +1 -1
  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 +474 -106
  98. package/dist/types.d.ts.map +1 -1
  99. package/dist/types.js +4 -8
  100. package/dist/types.js.map +1 -1
  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 +57 -57
  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 +10 -0
  162. package/vitest.config.ts +42 -0
  163. package/LICENSE +0 -21
  164. package/bin/cli.js +0 -5
  165. package/dist/cli/index.d.ts +0 -10
  166. package/dist/cli/index.d.ts.map +0 -1
  167. package/dist/cli/index.js +0 -38
  168. package/dist/cli/index.js.map +0 -1
  169. package/dist/cli/index.test.d.ts +0 -2
  170. package/dist/cli/index.test.d.ts.map +0 -1
  171. package/dist/cli/index.test.js +0 -35
  172. package/dist/cli/index.test.js.map +0 -1
  173. package/dist/constants/models.d.ts +0 -10
  174. package/dist/constants/models.d.ts.map +0 -1
  175. package/dist/constants/models.js +0 -12
  176. package/dist/constants/models.js.map +0 -1
  177. package/dist/converters/index.d.ts +0 -3
  178. package/dist/converters/index.d.ts.map +0 -1
  179. package/dist/converters/index.js +0 -3
  180. package/dist/converters/index.js.map +0 -1
  181. package/dist/converters/model.d.ts +0 -4
  182. package/dist/converters/model.d.ts.map +0 -1
  183. package/dist/converters/model.js +0 -19
  184. package/dist/converters/model.js.map +0 -1
  185. package/dist/converters/schema.d.ts +0 -4
  186. package/dist/converters/schema.d.ts.map +0 -1
  187. package/dist/converters/schema.js +0 -25
  188. package/dist/converters/schema.js.map +0 -1
  189. package/dist/core/responses.d.ts +0 -5
  190. package/dist/core/responses.d.ts.map +0 -1
  191. package/dist/core/responses.js +0 -16
  192. package/dist/core/responses.js.map +0 -1
  193. package/dist/core/responses.test.d.ts +0 -2
  194. package/dist/core/responses.test.d.ts.map +0 -1
  195. package/dist/core/responses.test.js +0 -31
  196. package/dist/core/responses.test.js.map +0 -1
  197. package/dist/errors.d.ts +0 -6
  198. package/dist/errors.d.ts.map +0 -1
  199. package/dist/errors.js +0 -9
  200. package/dist/errors.js.map +0 -1
  201. package/dist/examples/streaming.test.d.ts +0 -2
  202. package/dist/examples/streaming.test.d.ts.map +0 -1
  203. package/dist/examples/streaming.test.js +0 -176
  204. package/dist/examples/streaming.test.js.map +0 -1
  205. package/dist/factory/__tests__/index.test.d.ts +0 -2
  206. package/dist/factory/__tests__/index.test.d.ts.map +0 -1
  207. package/dist/factory/__tests__/index.test.js +0 -430
  208. package/dist/factory/__tests__/index.test.js.map +0 -1
  209. package/dist/factory/__tests__/list.test.d.ts +0 -2
  210. package/dist/factory/__tests__/list.test.d.ts.map +0 -1
  211. package/dist/factory/__tests__/list.test.js +0 -92
  212. package/dist/factory/__tests__/list.test.js.map +0 -1
  213. package/dist/factory/index.d.ts +0 -20
  214. package/dist/factory/index.d.ts.map +0 -1
  215. package/dist/factory/index.js +0 -287
  216. package/dist/factory/index.js.map +0 -1
  217. package/dist/factory/index.test.d.ts +0 -2
  218. package/dist/factory/index.test.d.ts.map +0 -1
  219. package/dist/factory/index.test.js +0 -287
  220. package/dist/factory/index.test.js.map +0 -1
  221. package/dist/factory/list.d.ts +0 -3
  222. package/dist/factory/list.d.ts.map +0 -1
  223. package/dist/factory/list.js +0 -221
  224. package/dist/factory/list.js.map +0 -1
  225. package/dist/factory/list.test.d.ts +0 -2
  226. package/dist/factory/list.test.d.ts.map +0 -1
  227. package/dist/factory/list.test.js +0 -84
  228. package/dist/factory/list.test.js.map +0 -1
  229. package/dist/generate/index.d.ts +0 -5
  230. package/dist/generate/index.d.ts.map +0 -1
  231. package/dist/generate/index.js +0 -17
  232. package/dist/generate/index.js.map +0 -1
  233. package/dist/index.test.d.ts +0 -2
  234. package/dist/index.test.d.ts.map +0 -1
  235. package/dist/index.test.js +0 -59
  236. package/dist/index.test.js.map +0 -1
  237. package/dist/list/await.d.ts +0 -3
  238. package/dist/list/await.d.ts.map +0 -1
  239. package/dist/list/await.js +0 -28
  240. package/dist/list/await.js.map +0 -1
  241. package/dist/list/constants.d.ts +0 -4
  242. package/dist/list/constants.d.ts.map +0 -1
  243. package/dist/list/constants.js +0 -5
  244. package/dist/list/constants.js.map +0 -1
  245. package/dist/list/create-function.d.ts +0 -3
  246. package/dist/list/create-function.d.ts.map +0 -1
  247. package/dist/list/create-function.js +0 -11
  248. package/dist/list/create-function.js.map +0 -1
  249. package/dist/list/index.d.ts +0 -4
  250. package/dist/list/index.d.ts.map +0 -1
  251. package/dist/list/index.js +0 -5
  252. package/dist/list/index.js.map +0 -1
  253. package/dist/list/prompt.d.ts +0 -3
  254. package/dist/list/prompt.d.ts.map +0 -1
  255. package/dist/list/prompt.js +0 -6
  256. package/dist/list/prompt.js.map +0 -1
  257. package/dist/list/schemas.d.ts +0 -4
  258. package/dist/list/schemas.d.ts.map +0 -1
  259. package/dist/list/schemas.js +0 -8
  260. package/dist/list/schemas.js.map +0 -1
  261. package/dist/list/stream.d.ts +0 -3
  262. package/dist/list/stream.d.ts.map +0 -1
  263. package/dist/list/stream.js +0 -33
  264. package/dist/list/stream.js.map +0 -1
  265. package/dist/list/types.d.ts +0 -11
  266. package/dist/list/types.d.ts.map +0 -1
  267. package/dist/list/types.js +0 -2
  268. package/dist/list/types.js.map +0 -1
  269. package/dist/list/validation.d.ts +0 -3
  270. package/dist/list/validation.d.ts.map +0 -1
  271. package/dist/list/validation.js +0 -12
  272. package/dist/list/validation.js.map +0 -1
  273. package/dist/providers/config.d.ts +0 -4
  274. package/dist/providers/config.d.ts.map +0 -1
  275. package/dist/providers/config.js +0 -21
  276. package/dist/providers/config.js.map +0 -1
  277. package/dist/providers/config.test.d.ts +0 -2
  278. package/dist/providers/config.test.d.ts.map +0 -1
  279. package/dist/providers/config.test.js +0 -37
  280. package/dist/providers/config.test.js.map +0 -1
  281. package/dist/proxy/constants.d.ts +0 -4
  282. package/dist/proxy/constants.d.ts.map +0 -1
  283. package/dist/proxy/constants.js +0 -5
  284. package/dist/proxy/constants.js.map +0 -1
  285. package/dist/proxy/create-function.d.ts +0 -4
  286. package/dist/proxy/create-function.d.ts.map +0 -1
  287. package/dist/proxy/create-function.js +0 -24
  288. package/dist/proxy/create-function.js.map +0 -1
  289. package/dist/proxy/create-proxy.d.ts +0 -2
  290. package/dist/proxy/create-proxy.d.ts.map +0 -1
  291. package/dist/proxy/create-proxy.js +0 -11
  292. package/dist/proxy/create-proxy.js.map +0 -1
  293. package/dist/proxy/function-generator.d.ts +0 -9
  294. package/dist/proxy/function-generator.d.ts.map +0 -1
  295. package/dist/proxy/function-generator.js +0 -29
  296. package/dist/proxy/function-generator.js.map +0 -1
  297. package/dist/proxy/index.d.ts +0 -4
  298. package/dist/proxy/index.d.ts.map +0 -1
  299. package/dist/proxy/index.js +0 -4
  300. package/dist/proxy/index.js.map +0 -1
  301. package/dist/proxy/prompt.d.ts +0 -2
  302. package/dist/proxy/prompt.d.ts.map +0 -1
  303. package/dist/proxy/prompt.js +0 -6
  304. package/dist/proxy/prompt.js.map +0 -1
  305. package/dist/proxy/types.d.ts +0 -7
  306. package/dist/proxy/types.d.ts.map +0 -1
  307. package/dist/proxy/types.js +0 -2
  308. package/dist/proxy/types.js.map +0 -1
  309. package/dist/queue/manager.d.ts +0 -5
  310. package/dist/queue/manager.d.ts.map +0 -1
  311. package/dist/queue/manager.js +0 -37
  312. package/dist/queue/manager.js.map +0 -1
  313. package/dist/queue/manager.test.d.ts +0 -2
  314. package/dist/queue/manager.test.d.ts.map +0 -1
  315. package/dist/queue/manager.test.js +0 -52
  316. package/dist/queue/manager.test.js.map +0 -1
  317. package/dist/schema-converter.d.ts +0 -4
  318. package/dist/schema-converter.d.ts.map +0 -1
  319. package/dist/schema-converter.js +0 -30
  320. package/dist/schema-converter.js.map +0 -1
  321. package/dist/stream/index.d.ts +0 -7
  322. package/dist/stream/index.d.ts.map +0 -1
  323. package/dist/stream/index.js +0 -23
  324. package/dist/stream/index.js.map +0 -1
  325. package/dist/streaming/utils.d.ts +0 -4
  326. package/dist/streaming/utils.d.ts.map +0 -1
  327. package/dist/streaming/utils.js +0 -131
  328. package/dist/streaming/utils.js.map +0 -1
  329. package/dist/streaming/utils.test.d.ts +0 -2
  330. package/dist/streaming/utils.test.d.ts.map +0 -1
  331. package/dist/streaming/utils.test.js +0 -84
  332. package/dist/streaming/utils.test.js.map +0 -1
  333. package/dist/templates/result.d.ts +0 -7
  334. package/dist/templates/result.d.ts.map +0 -1
  335. package/dist/templates/result.js +0 -40
  336. package/dist/templates/result.js.map +0 -1
  337. package/dist/templates/result.test.d.ts +0 -2
  338. package/dist/templates/result.test.d.ts.map +0 -1
  339. package/dist/templates/result.test.js +0 -75
  340. package/dist/templates/result.test.js.map +0 -1
  341. package/dist/test/setup.d.ts +0 -2
  342. package/dist/test/setup.d.ts.map +0 -1
  343. package/dist/test/setup.js +0 -21
  344. package/dist/test/setup.js.map +0 -1
  345. package/dist/test-types.d.ts +0 -13
  346. package/dist/test-types.d.ts.map +0 -1
  347. package/dist/test-types.js +0 -55
  348. package/dist/test-types.js.map +0 -1
  349. package/dist/types/index.d.ts +0 -4
  350. package/dist/types/index.d.ts.map +0 -1
  351. package/dist/types/index.js +0 -4
  352. package/dist/types/index.js.map +0 -1
  353. package/dist/types/list.d.ts +0 -10
  354. package/dist/types/list.d.ts.map +0 -1
  355. package/dist/types/list.js +0 -2
  356. package/dist/types/list.js.map +0 -1
  357. package/dist/types/model.d.ts +0 -7
  358. package/dist/types/model.d.ts.map +0 -1
  359. package/dist/types/model.js +0 -2
  360. package/dist/types/model.js.map +0 -1
  361. package/dist/types/options.d.ts +0 -25
  362. package/dist/types/options.d.ts.map +0 -1
  363. package/dist/types/options.js +0 -2
  364. package/dist/types/options.js.map +0 -1
  365. package/dist/types/schema.d.ts +0 -5
  366. package/dist/types/schema.d.ts.map +0 -1
  367. package/dist/types/schema.js +0 -2
  368. package/dist/types/schema.js.map +0 -1
  369. package/dist/utils/__tests__/request-handler.test.d.ts +0 -2
  370. package/dist/utils/__tests__/request-handler.test.d.ts.map +0 -1
  371. package/dist/utils/__tests__/request-handler.test.js +0 -134
  372. package/dist/utils/__tests__/request-handler.test.js.map +0 -1
  373. package/dist/utils/__tests__/schema.test.d.ts +0 -2
  374. package/dist/utils/__tests__/schema.test.d.ts.map +0 -1
  375. package/dist/utils/__tests__/schema.test.js +0 -49
  376. package/dist/utils/__tests__/schema.test.js.map +0 -1
  377. package/dist/utils/__tests__/stream-progress.test.d.ts +0 -2
  378. package/dist/utils/__tests__/stream-progress.test.d.ts.map +0 -1
  379. package/dist/utils/__tests__/stream-progress.test.js +0 -85
  380. package/dist/utils/__tests__/stream-progress.test.js.map +0 -1
  381. package/dist/utils/index.d.ts +0 -2
  382. package/dist/utils/index.d.ts.map +0 -1
  383. package/dist/utils/index.js +0 -2
  384. package/dist/utils/index.js.map +0 -1
  385. package/dist/utils/request-handler.d.ts +0 -17
  386. package/dist/utils/request-handler.d.ts.map +0 -1
  387. package/dist/utils/request-handler.js +0 -105
  388. package/dist/utils/request-handler.js.map +0 -1
  389. package/dist/utils/schema.d.ts +0 -11
  390. package/dist/utils/schema.d.ts.map +0 -1
  391. package/dist/utils/schema.js +0 -51
  392. package/dist/utils/schema.js.map +0 -1
  393. package/dist/utils/stream-progress.d.ts +0 -17
  394. package/dist/utils/stream-progress.d.ts.map +0 -1
  395. package/dist/utils/stream-progress.js +0 -86
  396. package/dist/utils/stream-progress.js.map +0 -1
  397. package/dist/utils/validation.d.ts +0 -3
  398. package/dist/utils/validation.d.ts.map +0 -1
  399. package/dist/utils/validation.js +0 -30
  400. package/dist/utils/validation.js.map +0 -1
package/dist/schema.js ADDED
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Simplified schema syntax for AI generation
3
+ *
4
+ * Converts human-readable schema definitions to Zod schemas:
5
+ * - 'description' → z.string().describe('description')
6
+ * - 'description (number)' → z.number().describe('description')
7
+ * - 'description (boolean)' → z.boolean().describe('description')
8
+ * - 'description (integer)' → z.number().int().describe('description')
9
+ * - 'description (date)' → z.string().datetime().describe('description')
10
+ * - 'opt1 | opt2 | opt3' → z.enum(['opt1', 'opt2', 'opt3'])
11
+ * - ['description'] → z.array(z.string()).describe('description')
12
+ * - { nested } → z.object() recursively
13
+ *
14
+ * @packageDocumentation
15
+ */
16
+ import { z } from 'zod';
17
+ /**
18
+ * Check if value is a Zod schema
19
+ */
20
+ function isZodSchema(value) {
21
+ return value !== null &&
22
+ typeof value === 'object' &&
23
+ '_def' in value &&
24
+ 'parse' in value;
25
+ }
26
+ /**
27
+ * Convert a simplified schema to a Zod schema
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * import { schema } from 'ai-functions'
32
+ * import { z } from 'zod'
33
+ *
34
+ * // These are equivalent:
35
+ * const simple = schema({
36
+ * name: 'What is the recipe name?',
37
+ * ingredients: ['List all ingredients'],
38
+ * steps: ['List all cooking steps'],
39
+ * })
40
+ *
41
+ * const zod = z.object({
42
+ * name: z.string().describe('What is the recipe name?'),
43
+ * ingredients: z.array(z.string()).describe('List all ingredients'),
44
+ * steps: z.array(z.string()).describe('List all cooking steps'),
45
+ * })
46
+ * ```
47
+ */
48
+ export function schema(input) {
49
+ return convertToZod(input);
50
+ }
51
+ function convertToZod(input) {
52
+ // Already a Zod schema - pass through
53
+ if (isZodSchema(input)) {
54
+ return input;
55
+ }
56
+ // String handling
57
+ if (typeof input === 'string') {
58
+ // Enum syntax: 'option1 | option2 | option3'
59
+ if (input.includes(' | ')) {
60
+ const options = input.split(' | ').map(s => s.trim());
61
+ return z.enum(options);
62
+ }
63
+ // Type hint syntax: 'description (type)'
64
+ const typeMatch = input.match(/^(.+?)\s*\((number|boolean|integer|date)\)$/i);
65
+ if (typeMatch) {
66
+ const [, description, type] = typeMatch;
67
+ const desc = description.trim();
68
+ switch (type.toLowerCase()) {
69
+ case 'number':
70
+ return z.number().describe(desc);
71
+ case 'integer':
72
+ return z.number().int().describe(desc);
73
+ case 'boolean':
74
+ return z.boolean().describe(desc);
75
+ case 'date':
76
+ return z.string().datetime().describe(desc);
77
+ default:
78
+ return z.string().describe(desc);
79
+ }
80
+ }
81
+ // Regular string description → z.string().describe()
82
+ return z.string().describe(input);
83
+ }
84
+ // Array with single element → z.array().describe()
85
+ if (Array.isArray(input) && input.length === 1) {
86
+ const [desc] = input;
87
+ // [string] → z.array(z.string()).describe(string)
88
+ if (typeof desc === 'string') {
89
+ return z.array(z.string()).describe(desc);
90
+ }
91
+ // [number] → z.array(z.number()) - number as type indicator
92
+ if (typeof desc === 'number') {
93
+ return z.array(z.number());
94
+ }
95
+ // [SimpleSchema] → z.array(converted)
96
+ return z.array(convertToZod(desc));
97
+ }
98
+ // Object → z.object() with recursive conversion
99
+ if (typeof input === 'object' && input !== null) {
100
+ const shape = {};
101
+ for (const [key, value] of Object.entries(input)) {
102
+ shape[key] = convertToZod(value);
103
+ }
104
+ return z.object(shape);
105
+ }
106
+ // Fallback - shouldn't reach here
107
+ return z.unknown();
108
+ }
109
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Tagged template literal utilities
3
+ *
4
+ * Provides support for tagged template syntax across all AI functions:
5
+ * - fn`prompt ${variable}` - template literal syntax
6
+ * - Objects/arrays auto-convert to YAML
7
+ * - Options chaining: fn`prompt`({ model: '...' })
8
+ *
9
+ * @packageDocumentation
10
+ */
11
+ /**
12
+ * Common options for all AI functions
13
+ */
14
+ export interface FunctionOptions {
15
+ /** Model to use (e.g., 'claude-opus-4-5', 'gpt-5-1', 'gemini-3-pro') */
16
+ model?: string;
17
+ /** Thinking level: 'none', 'low', 'medium', 'high', or token budget number */
18
+ thinking?: 'none' | 'low' | 'medium' | 'high' | number;
19
+ /** Temperature (0-2) */
20
+ temperature?: number;
21
+ /** Maximum tokens to generate */
22
+ maxTokens?: number;
23
+ /** System prompt */
24
+ system?: string;
25
+ /** Processing mode */
26
+ mode?: 'default' | 'background';
27
+ }
28
+ /**
29
+ * Parse a tagged template literal into a prompt string
30
+ * Objects and arrays are converted to YAML for readability
31
+ */
32
+ export declare function parseTemplate(strings: TemplateStringsArray, ...values: unknown[]): string;
33
+ /**
34
+ * Result type that is both a Promise and can be called with options
35
+ */
36
+ export type ChainablePromise<T> = Promise<T> & {
37
+ (options?: FunctionOptions): Promise<T>;
38
+ };
39
+ /**
40
+ * Create a chainable promise that supports both await and options chaining
41
+ */
42
+ export declare function createChainablePromise<T>(executor: (options?: FunctionOptions) => Promise<T>, defaultOptions?: FunctionOptions): ChainablePromise<T>;
43
+ /**
44
+ * Template function signature
45
+ */
46
+ export type TemplateFunction<T> = {
47
+ (strings: TemplateStringsArray, ...values: unknown[]): ChainablePromise<T>;
48
+ (prompt: string, options?: FunctionOptions): Promise<T>;
49
+ };
50
+ /**
51
+ * Create a function that supports both tagged templates and regular calls
52
+ */
53
+ export declare function createTemplateFunction<T>(handler: (prompt: string, options?: FunctionOptions) => Promise<T>): TemplateFunction<T>;
54
+ /**
55
+ * Create a function with batch support
56
+ */
57
+ export interface BatchableFunction<T, TInput = string> extends TemplateFunction<T> {
58
+ batch: (inputs: TInput[]) => Promise<T[]>;
59
+ }
60
+ /**
61
+ * Add batch capability to a template function
62
+ */
63
+ export declare function withBatch<T, TInput = string>(fn: TemplateFunction<T>, batchHandler: (inputs: TInput[]) => Promise<T[]>): BatchableFunction<T, TInput>;
64
+ /**
65
+ * Create an async iterable from a streaming generator
66
+ */
67
+ export declare function createAsyncIterable<T>(items: T[] | (() => AsyncGenerator<T>)): AsyncIterable<T>;
68
+ /**
69
+ * Create a result that is both a Promise (resolves to array) and AsyncIterable (streams items)
70
+ */
71
+ export type StreamableList<T> = Promise<T[]> & AsyncIterable<T>;
72
+ export declare function createStreamableList<T>(getItems: () => Promise<T[]>, streamItems?: () => AsyncGenerator<T>): StreamableList<T>;
73
+ //# sourceMappingURL=template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAA;IACtD,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,oBAAoB;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,sBAAsB;IACtB,IAAI,CAAC,EAAE,SAAS,GAAG,YAAY,CAAA;CAChC;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAgBzF;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG;IAC7C,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CACxC,CAAA;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,EACnD,cAAc,CAAC,EAAE,eAAe,GAC/B,gBAAgB,CAAC,CAAC,CAAC,CAerB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI;IAChC,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;IAC1E,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CACxD,CAAA;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,GACjE,gBAAgB,CAAC,CAAC,CAAC,CAgBrB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;IAChF,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;CAC1C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAC1C,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC,EACvB,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,GAC/C,iBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,CAI9B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,cAAc,CAAC,CAAC,CAAC,CAAC,GACrC,aAAa,CAAC,CAAC,CAAC,CAalB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;AAE/D,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,EAC5B,WAAW,CAAC,EAAE,MAAM,cAAc,CAAC,CAAC,CAAC,GACpC,cAAc,CAAC,CAAC,CAAC,CA+CnB"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Tagged template literal utilities
3
+ *
4
+ * Provides support for tagged template syntax across all AI functions:
5
+ * - fn`prompt ${variable}` - template literal syntax
6
+ * - Objects/arrays auto-convert to YAML
7
+ * - Options chaining: fn`prompt`({ model: '...' })
8
+ *
9
+ * @packageDocumentation
10
+ */
11
+ import { stringify } from 'yaml';
12
+ /**
13
+ * Parse a tagged template literal into a prompt string
14
+ * Objects and arrays are converted to YAML for readability
15
+ */
16
+ export function parseTemplate(strings, ...values) {
17
+ return strings.reduce((result, str, i) => {
18
+ const value = values[i];
19
+ if (value === undefined) {
20
+ return result + str;
21
+ }
22
+ // Convert objects/arrays to YAML
23
+ if (typeof value === 'object' && value !== null) {
24
+ const yaml = stringify(value).trim();
25
+ return result + str + '\n' + yaml;
26
+ }
27
+ // Primitives use toString()
28
+ return result + str + String(value);
29
+ }, '');
30
+ }
31
+ /**
32
+ * Create a chainable promise that supports both await and options chaining
33
+ */
34
+ export function createChainablePromise(executor, defaultOptions) {
35
+ // Create the base promise
36
+ const basePromise = executor(defaultOptions);
37
+ // Create a function that accepts options
38
+ const chainable = ((options) => {
39
+ return executor({ ...defaultOptions, ...options });
40
+ });
41
+ // Make it thenable
42
+ chainable.then = basePromise.then.bind(basePromise);
43
+ chainable.catch = basePromise.catch.bind(basePromise);
44
+ chainable.finally = basePromise.finally.bind(basePromise);
45
+ return chainable;
46
+ }
47
+ /**
48
+ * Create a function that supports both tagged templates and regular calls
49
+ */
50
+ export function createTemplateFunction(handler) {
51
+ function templateFn(promptOrStrings, ...args) {
52
+ // Tagged template literal
53
+ if (Array.isArray(promptOrStrings) && 'raw' in promptOrStrings) {
54
+ const prompt = parseTemplate(promptOrStrings, ...args);
55
+ return createChainablePromise((options) => handler(prompt, options));
56
+ }
57
+ // Regular function call
58
+ return handler(promptOrStrings, args[0]);
59
+ }
60
+ return templateFn;
61
+ }
62
+ /**
63
+ * Add batch capability to a template function
64
+ */
65
+ export function withBatch(fn, batchHandler) {
66
+ const batchable = fn;
67
+ batchable.batch = batchHandler;
68
+ return batchable;
69
+ }
70
+ /**
71
+ * Create an async iterable from a streaming generator
72
+ */
73
+ export function createAsyncIterable(items) {
74
+ if (Array.isArray(items)) {
75
+ return {
76
+ async *[Symbol.asyncIterator]() {
77
+ for (const item of items) {
78
+ yield item;
79
+ }
80
+ },
81
+ };
82
+ }
83
+ return {
84
+ [Symbol.asyncIterator]: items,
85
+ };
86
+ }
87
+ export function createStreamableList(getItems, streamItems) {
88
+ const promise = getItems();
89
+ const asyncIterator = streamItems
90
+ ? streamItems
91
+ : async function* () {
92
+ const items = await promise;
93
+ for (const item of items) {
94
+ yield item;
95
+ }
96
+ };
97
+ // Create a proper Promise-like object with async iterator
98
+ const result = Object.create(null);
99
+ // Add Promise methods
100
+ Object.defineProperty(result, 'then', {
101
+ value: promise.then.bind(promise),
102
+ writable: false,
103
+ enumerable: false,
104
+ });
105
+ Object.defineProperty(result, 'catch', {
106
+ value: promise.catch.bind(promise),
107
+ writable: false,
108
+ enumerable: false,
109
+ });
110
+ Object.defineProperty(result, 'finally', {
111
+ value: promise.finally.bind(promise),
112
+ writable: false,
113
+ enumerable: false,
114
+ });
115
+ // Add async iterator
116
+ Object.defineProperty(result, Symbol.asyncIterator, {
117
+ value: asyncIterator,
118
+ writable: false,
119
+ enumerable: false,
120
+ });
121
+ // Add Symbol.toStringTag for Promise compatibility
122
+ Object.defineProperty(result, Symbol.toStringTag, {
123
+ value: 'Promise',
124
+ writable: false,
125
+ enumerable: false,
126
+ });
127
+ return result;
128
+ }
129
+ //# sourceMappingURL=template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"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"}