ai-functions 0.2.18 → 0.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.
Files changed (313) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +112 -21
  3. package/bin/cli.js +5 -0
  4. package/dist/cli/index.d.ts +10 -0
  5. package/dist/cli/index.d.ts.map +1 -0
  6. package/dist/cli/index.js +38 -0
  7. package/dist/cli/index.js.map +1 -0
  8. package/dist/cli/index.test.d.ts +2 -0
  9. package/dist/cli/index.test.d.ts.map +1 -0
  10. package/dist/cli/index.test.js +35 -0
  11. package/dist/cli/index.test.js.map +1 -0
  12. package/dist/constants/models.d.ts +10 -0
  13. package/dist/constants/models.d.ts.map +1 -0
  14. package/dist/constants/models.js +12 -0
  15. package/dist/constants/models.js.map +1 -0
  16. package/dist/converters/index.d.ts +3 -0
  17. package/dist/converters/index.d.ts.map +1 -0
  18. package/dist/converters/index.js +3 -0
  19. package/dist/converters/index.js.map +1 -0
  20. package/dist/converters/model.d.ts +4 -0
  21. package/dist/converters/model.d.ts.map +1 -0
  22. package/dist/converters/model.js +19 -0
  23. package/dist/converters/model.js.map +1 -0
  24. package/dist/converters/schema.d.ts +4 -0
  25. package/dist/converters/schema.d.ts.map +1 -0
  26. package/dist/converters/schema.js +25 -0
  27. package/dist/converters/schema.js.map +1 -0
  28. package/dist/core/responses.d.ts +5 -0
  29. package/dist/core/responses.d.ts.map +1 -0
  30. package/dist/core/responses.js +16 -0
  31. package/dist/core/responses.js.map +1 -0
  32. package/dist/core/responses.test.d.ts +2 -0
  33. package/dist/core/responses.test.d.ts.map +1 -0
  34. package/dist/core/responses.test.js +31 -0
  35. package/dist/core/responses.test.js.map +1 -0
  36. package/dist/errors.d.ts +6 -0
  37. package/dist/errors.d.ts.map +1 -0
  38. package/dist/errors.js +9 -0
  39. package/dist/errors.js.map +1 -0
  40. package/dist/examples/streaming.test.d.ts +2 -0
  41. package/dist/examples/streaming.test.d.ts.map +1 -0
  42. package/dist/examples/streaming.test.js +176 -0
  43. package/dist/examples/streaming.test.js.map +1 -0
  44. package/dist/factory/__tests__/index.test.d.ts +2 -0
  45. package/dist/factory/__tests__/index.test.d.ts.map +1 -0
  46. package/dist/factory/__tests__/index.test.js +430 -0
  47. package/dist/factory/__tests__/index.test.js.map +1 -0
  48. package/dist/factory/__tests__/list.test.d.ts +2 -0
  49. package/dist/factory/__tests__/list.test.d.ts.map +1 -0
  50. package/dist/factory/__tests__/list.test.js +92 -0
  51. package/dist/factory/__tests__/list.test.js.map +1 -0
  52. package/dist/factory/index.d.ts +20 -0
  53. package/dist/factory/index.d.ts.map +1 -0
  54. package/dist/factory/index.js +287 -0
  55. package/dist/factory/index.js.map +1 -0
  56. package/dist/factory/index.test.d.ts +2 -0
  57. package/dist/factory/index.test.d.ts.map +1 -0
  58. package/dist/factory/index.test.js +287 -0
  59. package/dist/factory/index.test.js.map +1 -0
  60. package/dist/factory/list.d.ts +3 -0
  61. package/dist/factory/list.d.ts.map +1 -0
  62. package/dist/factory/list.js +221 -0
  63. package/dist/factory/list.js.map +1 -0
  64. package/dist/factory/list.test.d.ts +2 -0
  65. package/dist/factory/list.test.d.ts.map +1 -0
  66. package/dist/factory/list.test.js +84 -0
  67. package/dist/factory/list.test.js.map +1 -0
  68. package/dist/generate/index.d.ts +5 -0
  69. package/dist/generate/index.d.ts.map +1 -0
  70. package/dist/generate/index.js +17 -0
  71. package/dist/generate/index.js.map +1 -0
  72. package/dist/index.d.ts +5 -0
  73. package/dist/index.d.ts.map +1 -0
  74. package/dist/index.js +53 -0
  75. package/dist/index.js.map +1 -0
  76. package/dist/index.test.d.ts +2 -0
  77. package/dist/index.test.d.ts.map +1 -0
  78. package/dist/index.test.js +59 -0
  79. package/dist/index.test.js.map +1 -0
  80. package/dist/list/await.d.ts +3 -0
  81. package/dist/list/await.d.ts.map +1 -0
  82. package/dist/list/await.js +28 -0
  83. package/dist/list/await.js.map +1 -0
  84. package/dist/list/constants.d.ts +4 -0
  85. package/dist/list/constants.d.ts.map +1 -0
  86. package/dist/list/constants.js +5 -0
  87. package/dist/list/constants.js.map +1 -0
  88. package/dist/list/create-function.d.ts +3 -0
  89. package/dist/list/create-function.d.ts.map +1 -0
  90. package/dist/list/create-function.js +11 -0
  91. package/dist/list/create-function.js.map +1 -0
  92. package/dist/list/index.d.ts +4 -0
  93. package/dist/list/index.d.ts.map +1 -0
  94. package/dist/list/index.js +5 -0
  95. package/dist/list/index.js.map +1 -0
  96. package/dist/list/prompt.d.ts +3 -0
  97. package/dist/list/prompt.d.ts.map +1 -0
  98. package/dist/list/prompt.js +6 -0
  99. package/dist/list/prompt.js.map +1 -0
  100. package/dist/list/schemas.d.ts +4 -0
  101. package/dist/list/schemas.d.ts.map +1 -0
  102. package/dist/list/schemas.js +8 -0
  103. package/dist/list/schemas.js.map +1 -0
  104. package/dist/list/stream.d.ts +3 -0
  105. package/dist/list/stream.d.ts.map +1 -0
  106. package/dist/list/stream.js +33 -0
  107. package/dist/list/stream.js.map +1 -0
  108. package/dist/list/types.d.ts +11 -0
  109. package/dist/list/types.d.ts.map +1 -0
  110. package/dist/list/types.js +2 -0
  111. package/dist/list/types.js.map +1 -0
  112. package/dist/list/validation.d.ts +3 -0
  113. package/dist/list/validation.d.ts.map +1 -0
  114. package/dist/list/validation.js +12 -0
  115. package/dist/list/validation.js.map +1 -0
  116. package/dist/providers/config.d.ts +4 -0
  117. package/dist/providers/config.d.ts.map +1 -0
  118. package/dist/providers/config.js +21 -0
  119. package/dist/providers/config.js.map +1 -0
  120. package/dist/providers/config.test.d.ts +2 -0
  121. package/dist/providers/config.test.d.ts.map +1 -0
  122. package/dist/providers/config.test.js +37 -0
  123. package/dist/providers/config.test.js.map +1 -0
  124. package/dist/proxy/constants.d.ts +4 -0
  125. package/dist/proxy/constants.d.ts.map +1 -0
  126. package/dist/proxy/constants.js +5 -0
  127. package/dist/proxy/constants.js.map +1 -0
  128. package/dist/proxy/create-function.d.ts +4 -0
  129. package/dist/proxy/create-function.d.ts.map +1 -0
  130. package/dist/proxy/create-function.js +24 -0
  131. package/dist/proxy/create-function.js.map +1 -0
  132. package/dist/proxy/create-proxy.d.ts +2 -0
  133. package/dist/proxy/create-proxy.d.ts.map +1 -0
  134. package/dist/proxy/create-proxy.js +11 -0
  135. package/dist/proxy/create-proxy.js.map +1 -0
  136. package/dist/proxy/function-generator.d.ts +9 -0
  137. package/dist/proxy/function-generator.d.ts.map +1 -0
  138. package/dist/proxy/function-generator.js +29 -0
  139. package/dist/proxy/function-generator.js.map +1 -0
  140. package/dist/proxy/index.d.ts +4 -0
  141. package/dist/proxy/index.d.ts.map +1 -0
  142. package/dist/proxy/index.js +4 -0
  143. package/dist/proxy/index.js.map +1 -0
  144. package/dist/proxy/prompt.d.ts +2 -0
  145. package/dist/proxy/prompt.d.ts.map +1 -0
  146. package/dist/proxy/prompt.js +6 -0
  147. package/dist/proxy/prompt.js.map +1 -0
  148. package/dist/proxy/types.d.ts +7 -0
  149. package/dist/proxy/types.d.ts.map +1 -0
  150. package/dist/proxy/types.js +2 -0
  151. package/dist/proxy/types.js.map +1 -0
  152. package/dist/queue/manager.d.ts +5 -0
  153. package/dist/queue/manager.d.ts.map +1 -0
  154. package/dist/queue/manager.js +37 -0
  155. package/dist/queue/manager.js.map +1 -0
  156. package/dist/queue/manager.test.d.ts +2 -0
  157. package/dist/queue/manager.test.d.ts.map +1 -0
  158. package/dist/queue/manager.test.js +52 -0
  159. package/dist/queue/manager.test.js.map +1 -0
  160. package/dist/schema-converter.d.ts +4 -0
  161. package/dist/schema-converter.d.ts.map +1 -0
  162. package/dist/schema-converter.js +30 -0
  163. package/dist/schema-converter.js.map +1 -0
  164. package/dist/stream/index.d.ts +7 -0
  165. package/dist/stream/index.d.ts.map +1 -0
  166. package/dist/stream/index.js +23 -0
  167. package/dist/stream/index.js.map +1 -0
  168. package/dist/streaming/utils.d.ts +4 -0
  169. package/dist/streaming/utils.d.ts.map +1 -0
  170. package/dist/streaming/utils.js +131 -0
  171. package/dist/streaming/utils.js.map +1 -0
  172. package/dist/streaming/utils.test.d.ts +2 -0
  173. package/dist/streaming/utils.test.d.ts.map +1 -0
  174. package/dist/streaming/utils.test.js +84 -0
  175. package/dist/streaming/utils.test.js.map +1 -0
  176. package/dist/templates/result.d.ts +7 -0
  177. package/dist/templates/result.d.ts.map +1 -0
  178. package/dist/templates/result.js +40 -0
  179. package/dist/templates/result.js.map +1 -0
  180. package/dist/templates/result.test.d.ts +2 -0
  181. package/dist/templates/result.test.d.ts.map +1 -0
  182. package/dist/templates/result.test.js +75 -0
  183. package/dist/templates/result.test.js.map +1 -0
  184. package/dist/test/setup.d.ts +2 -0
  185. package/dist/test/setup.d.ts.map +1 -0
  186. package/dist/test/setup.js +21 -0
  187. package/dist/test/setup.js.map +1 -0
  188. package/dist/test-types.d.ts +13 -0
  189. package/dist/test-types.d.ts.map +1 -0
  190. package/dist/test-types.js +55 -0
  191. package/dist/test-types.js.map +1 -0
  192. package/dist/types/index.d.ts +4 -0
  193. package/dist/types/index.d.ts.map +1 -0
  194. package/dist/types/index.js +4 -0
  195. package/dist/types/index.js.map +1 -0
  196. package/dist/types/list.d.ts +10 -0
  197. package/dist/types/list.d.ts.map +1 -0
  198. package/dist/types/list.js +2 -0
  199. package/dist/types/list.js.map +1 -0
  200. package/dist/types/model.d.ts +7 -0
  201. package/dist/types/model.d.ts.map +1 -0
  202. package/dist/types/model.js +2 -0
  203. package/dist/types/model.js.map +1 -0
  204. package/dist/types/options.d.ts +25 -0
  205. package/dist/types/options.d.ts.map +1 -0
  206. package/dist/types/options.js +2 -0
  207. package/dist/types/options.js.map +1 -0
  208. package/dist/types/schema.d.ts +5 -0
  209. package/dist/types/schema.d.ts.map +1 -0
  210. package/dist/types/schema.js +2 -0
  211. package/dist/types/schema.js.map +1 -0
  212. package/dist/types.d.ts +113 -0
  213. package/dist/types.d.ts.map +1 -0
  214. package/dist/types.js +9 -0
  215. package/dist/types.js.map +1 -0
  216. package/dist/utils/__tests__/request-handler.test.d.ts +2 -0
  217. package/dist/utils/__tests__/request-handler.test.d.ts.map +1 -0
  218. package/dist/utils/__tests__/request-handler.test.js +134 -0
  219. package/dist/utils/__tests__/request-handler.test.js.map +1 -0
  220. package/dist/utils/__tests__/schema.test.d.ts +2 -0
  221. package/dist/utils/__tests__/schema.test.d.ts.map +1 -0
  222. package/dist/utils/__tests__/schema.test.js +49 -0
  223. package/dist/utils/__tests__/schema.test.js.map +1 -0
  224. package/dist/utils/__tests__/stream-progress.test.d.ts +2 -0
  225. package/dist/utils/__tests__/stream-progress.test.d.ts.map +1 -0
  226. package/dist/utils/__tests__/stream-progress.test.js +85 -0
  227. package/dist/utils/__tests__/stream-progress.test.js.map +1 -0
  228. package/dist/utils/index.d.ts +2 -0
  229. package/dist/utils/index.d.ts.map +1 -0
  230. package/dist/utils/index.js +2 -0
  231. package/dist/utils/index.js.map +1 -0
  232. package/dist/utils/request-handler.d.ts +17 -0
  233. package/dist/utils/request-handler.d.ts.map +1 -0
  234. package/dist/utils/request-handler.js +105 -0
  235. package/dist/utils/request-handler.js.map +1 -0
  236. package/dist/utils/schema.d.ts +11 -0
  237. package/dist/utils/schema.d.ts.map +1 -0
  238. package/dist/utils/schema.js +51 -0
  239. package/dist/utils/schema.js.map +1 -0
  240. package/dist/utils/stream-progress.d.ts +17 -0
  241. package/dist/utils/stream-progress.d.ts.map +1 -0
  242. package/dist/utils/stream-progress.js +86 -0
  243. package/dist/utils/stream-progress.js.map +1 -0
  244. package/dist/utils/validation.d.ts +3 -0
  245. package/dist/utils/validation.d.ts.map +1 -0
  246. package/dist/utils/validation.js +30 -0
  247. package/dist/utils/validation.js.map +1 -0
  248. package/package.json +56 -40
  249. package/db/cache.ts +0 -6
  250. package/db/mongo.ts +0 -75
  251. package/dist/mjs/db/cache.d.ts +0 -1
  252. package/dist/mjs/db/cache.js +0 -5
  253. package/dist/mjs/db/mongo.d.ts +0 -31
  254. package/dist/mjs/db/mongo.js +0 -48
  255. package/dist/mjs/examples/data.d.ts +0 -1105
  256. package/dist/mjs/examples/data.js +0 -1105
  257. package/dist/mjs/functions/ai.d.ts +0 -20
  258. package/dist/mjs/functions/ai.js +0 -83
  259. package/dist/mjs/functions/ai.test.d.ts +0 -1
  260. package/dist/mjs/functions/ai.test.js +0 -29
  261. package/dist/mjs/functions/gpt.d.ts +0 -4
  262. package/dist/mjs/functions/gpt.js +0 -10
  263. package/dist/mjs/functions/list.d.ts +0 -7
  264. package/dist/mjs/functions/list.js +0 -72
  265. package/dist/mjs/index.d.ts +0 -3
  266. package/dist/mjs/index.js +0 -3
  267. package/dist/mjs/queue/kafka.d.ts +0 -0
  268. package/dist/mjs/queue/kafka.js +0 -1
  269. package/dist/mjs/queue/memory.d.ts +0 -0
  270. package/dist/mjs/queue/memory.js +0 -1
  271. package/dist/mjs/queue/mongo.d.ts +0 -30
  272. package/dist/mjs/queue/mongo.js +0 -42
  273. package/dist/mjs/streams/kafka.d.ts +0 -0
  274. package/dist/mjs/streams/kafka.js +0 -1
  275. package/dist/mjs/streams/memory.d.ts +0 -0
  276. package/dist/mjs/streams/memory.js +0 -1
  277. package/dist/mjs/streams/mongo.d.ts +0 -0
  278. package/dist/mjs/streams/mongo.js +0 -1
  279. package/dist/mjs/streams/types.d.ts +0 -0
  280. package/dist/mjs/streams/types.js +0 -1
  281. package/dist/mjs/types.d.ts +0 -11
  282. package/dist/mjs/types.js +0 -1
  283. package/dist/mjs/utils/completion.d.ts +0 -9
  284. package/dist/mjs/utils/completion.js +0 -20
  285. package/dist/mjs/utils/schema.d.ts +0 -10
  286. package/dist/mjs/utils/schema.js +0 -72
  287. package/dist/mjs/utils/schema.test.d.ts +0 -1
  288. package/dist/mjs/utils/schema.test.js +0 -60
  289. package/dist/mjs/utils/state.d.ts +0 -1
  290. package/dist/mjs/utils/state.js +0 -19
  291. package/examples/data.ts +0 -1105
  292. package/fixup +0 -11
  293. package/functions/ai.test.ts +0 -41
  294. package/functions/ai.ts +0 -115
  295. package/functions/gpt.ts +0 -12
  296. package/functions/list.ts +0 -84
  297. package/index.ts +0 -3
  298. package/queue/kafka.ts +0 -0
  299. package/queue/memory.ts +0 -0
  300. package/queue/mongo.ts +0 -88
  301. package/streams/kafka.ts +0 -0
  302. package/streams/memory.ts +0 -0
  303. package/streams/mongo.ts +0 -0
  304. package/streams/types.ts +0 -0
  305. package/tsconfig-backup.json +0 -105
  306. package/tsconfig-base.json +0 -26
  307. package/tsconfig-cjs.json +0 -8
  308. package/tsconfig.json +0 -8
  309. package/types.ts +0 -12
  310. package/utils/completion.ts +0 -28
  311. package/utils/schema.test.ts +0 -69
  312. package/utils/schema.ts +0 -74
  313. package/utils/state.ts +0 -23
@@ -0,0 +1,287 @@
1
+ import { describe, expect, it, beforeEach } from 'vitest';
2
+ import { createTemplateFunction } from './index';
3
+ import { openai } from '@ai-sdk/openai';
4
+ // import { anthropic } from '@ai-sdk/anthropic' // Commented out as it's just for test demonstration
5
+ describe('Template Function', () => {
6
+ beforeEach(() => {
7
+ process.env.OPENAI_API_KEY = process.env.OPENAI_API_KEY || 'test-key';
8
+ });
9
+ const model = openai('gpt-4o-mini');
10
+ describe('Template Literals', () => {
11
+ it('should support markdown generation', async () => {
12
+ const ai = createTemplateFunction();
13
+ const title = 'AI Functions';
14
+ const result = await ai `write a blog post in markdown starting with "# ${title}"`({ model });
15
+ expect(result).toMatch(/^# AI Functions/);
16
+ expect(result).toContain('# ');
17
+ expect(result).toContain('\n');
18
+ }, 30000);
19
+ // it('should support complex object summarization', async () => {
20
+ // const ai = createTemplateFunction()
21
+ // const itinerary = {
22
+ // dates: ['2024-01-01', '2024-01-02'],
23
+ // location: 'Miami Beach',
24
+ // activities: ['Swimming', 'Surfing']
25
+ // }
26
+ // const result = await ai`Summarize the itinerary: ${JSON.stringify(itinerary)}`({ model })
27
+ // expect(result).toContain('Miami Beach')
28
+ // expect(result).toMatch(/[Ss]wimming/)
29
+ // })
30
+ it('should support multiple interpolated values', async () => {
31
+ const ai = createTemplateFunction();
32
+ const city = 'Paris';
33
+ const days = 3;
34
+ const interests = ['art', 'food'];
35
+ const result = await ai `Create an itinerary for ${days} days in ${city} focusing on ${interests.join(' and ')}`({ model });
36
+ expect(result).toContain('Paris');
37
+ expect(result).toContain('art');
38
+ expect(result).toContain('food');
39
+ }, 30000);
40
+ });
41
+ // describe('Structured Outputs', () => {
42
+ // it('should support getting and using schema functions', async () => {
43
+ // const ai = new Proxy(createTemplateFunction(), {
44
+ // get: (target, prop) => {
45
+ // if (prop === 'categorizeProduct') {
46
+ // return createAIFunction(z.object({
47
+ // productType: z.enum(['App', 'API', 'Marketplace', 'Platform', 'Service', 'Website']),
48
+ // customer: z.string().describe('ideal customer profile'),
49
+ // solution: z.string().describe('describe the offer'),
50
+ // description: z.string().describe('website meta description')
51
+ // }))
52
+ // }
53
+ // return target[prop]
54
+ // }
55
+ // })
56
+ // // Get the function and use it later
57
+ // const categorizeProduct = ai.categorizeProduct
58
+ // const result1 = await categorizeProduct({ domain: 'stripe.com' }, { model })
59
+ // expect(result1).toHaveProperty('productType')
60
+ // expect(result1).toHaveProperty('customer')
61
+ // expect(result1).toHaveProperty('solution')
62
+ // expect(result1).toHaveProperty('description')
63
+ // expect(['App', 'API', 'Marketplace', 'Platform', 'Service', 'Website']).toContain(result1.productType)
64
+ // // Immediate invocation pattern
65
+ // const result2 = await ai.categorizeProduct({
66
+ // productType: 'App | API | Marketplace | Platform | Service | Website',
67
+ // customer: 'ideal customer profile',
68
+ // solution: 'describe the offer',
69
+ // description: 'website meta description',
70
+ // })({ name: 'drively AI' }, { model })
71
+ // expect(result2).toHaveProperty('productType')
72
+ // expect(result2).toHaveProperty('customer')
73
+ // expect(result2).toHaveProperty('solution')
74
+ // expect(result2).toHaveProperty('description')
75
+ // expect(['App', 'API', 'Marketplace', 'Platform', 'Service', 'Website']).toContain(result2.productType)
76
+ // }, 30000)
77
+ // it('should support enum output format', async () => {
78
+ // const ai = new Proxy(createTemplateFunction(), {
79
+ // get: (target, prop) => {
80
+ // if (prop === 'classifyMovie') {
81
+ // return createAIFunction(z.enum(['action', 'comedy', 'drama', 'horror', 'sci-fi']))
82
+ // }
83
+ // return target[prop]
84
+ // }
85
+ // })
86
+ // // Get the function and use it later
87
+ // const classifyMovie = ai.classifyMovie
88
+ // const result1 = await classifyMovie({
89
+ // plot: 'A group of astronauts travel through a wormhole in search of a new habitable planet for humanity.'
90
+ // }, { model })
91
+ // expect(['action', 'comedy', 'drama', 'horror', 'sci-fi']).toContain(result1)
92
+ // // Immediate invocation pattern
93
+ // const result2 = await ai.classifyMovie({
94
+ // genre: ['action', 'comedy', 'drama', 'horror', 'sci-fi']
95
+ // })({
96
+ // plot: 'A detective investigates a series of mysterious disappearances in a small town.'
97
+ // }, { model })
98
+ // expect(['action', 'comedy', 'drama', 'horror', 'sci-fi']).toContain(result2)
99
+ // }, 30000)
100
+ // })
101
+ describe('Configuration', () => {
102
+ it('should support model specification', async () => {
103
+ const ai = createTemplateFunction();
104
+ const result = await ai `Hello`({ model: openai('gpt-4o-mini') });
105
+ expect(result).toBeDefined();
106
+ });
107
+ it('should support system prompts', async () => {
108
+ const ai = createTemplateFunction();
109
+ const result = await ai `List fun activities`({
110
+ model,
111
+ system: 'You are an expert tour guide',
112
+ temperature: 0.2
113
+ });
114
+ expect(result).toBeDefined();
115
+ });
116
+ it('should support concurrency limits', async () => {
117
+ const ai = createTemplateFunction();
118
+ const startTime = Date.now();
119
+ const results = await Promise.all([
120
+ ai `task 1`({ model, concurrency: 2 }),
121
+ ai `task 2`({ model, concurrency: 2 }),
122
+ ai `task 3`({ model, concurrency: 2 })
123
+ ]);
124
+ const endTime = Date.now();
125
+ expect(results).toHaveLength(3);
126
+ // With concurrency of 2, it should take at least 2 batches
127
+ expect(endTime - startTime).toBeGreaterThan(100);
128
+ });
129
+ });
130
+ // describe('Composable Functions & Workflows', () => {
131
+ // it('should support function composition', async () => {
132
+ // const ai = createTemplateFunction()
133
+ // const list = createTemplateFunction()
134
+ // const listBlogPosts = (count: number, topic: string) =>
135
+ // list`${count} blog post titles about ${topic}`({ model })
136
+ // const writeBlogPost = (title: string) =>
137
+ // ai`write a blog post in markdown starting with "# ${title}"`({ model })
138
+ // async function* writeBlog(count: number, topic: string) {
139
+ // for await (const title of await listBlogPosts(count, topic)) {
140
+ // const content = await writeBlogPost(title)
141
+ // yield { title, content }
142
+ // }
143
+ // }
144
+ // const posts = []
145
+ // for await (const post of writeBlog(2, 'future of car sales')) {
146
+ // posts.push(post)
147
+ // }
148
+ // expect(posts).toHaveLength(2)
149
+ // posts.forEach(post => {
150
+ // expect(post).toHaveProperty('title')
151
+ // expect(post).toHaveProperty('content')
152
+ // expect(post.content).toMatch(new RegExp(`^# ${post.title}`))
153
+ // })
154
+ // })
155
+ // it('should support nested template functions', async () => {
156
+ // const ai = createTemplateFunction()
157
+ // const generateName = (type: string) => ai`generate a name for a ${type}`({ model })
158
+ // const generateFunction = (name: string) =>
159
+ // ai`write a function in TypeScript called ${name}`({ model })
160
+ // const name = await generateName('utility function')
161
+ // const result = await generateFunction(name)
162
+ // expect(result).toContain('function')
163
+ // expect(result).toContain(name)
164
+ // expect(result).toContain('export')
165
+ // })
166
+ // })
167
+ // describe('Alternative Providers', () => {
168
+ // it('should support OpenAI provider', async () => {
169
+ // const ai = createTemplateFunction()
170
+ // const result = await ai`Hello`({ model: openai('gpt-4o-mini') })
171
+ // expect(result).toBeDefined()
172
+ // })
173
+ // // This test is commented out as we don't want to actually import anthropic
174
+ // // but it demonstrates how the test would look
175
+ // /*
176
+ // it('should support Anthropic provider', async () => {
177
+ // const ai = createTemplateFunction()
178
+ // const result = await ai`write a function in TypeScript called ${name}`({
179
+ // model: anthropic('claude-3-5-sonnet-20241022')
180
+ // })
181
+ // expect(result).toContain('function')
182
+ // expect(result).toContain('export')
183
+ // })
184
+ // */
185
+ // it('should support custom provider configuration', async () => {
186
+ // const ai = createTemplateFunction()
187
+ // const result = await ai`Hello`({
188
+ // model: openai('gpt-4o-mini', { structuredOutputs: true })
189
+ // })
190
+ // expect(result).toBeDefined()
191
+ // })
192
+ // })
193
+ // describe('Advanced Features', () => {
194
+ // it('should support streaming with onChunk callback', async () => {
195
+ // const ai = createTemplateFunction()
196
+ // const chunks: string[] = []
197
+ // const result = await ai`Write a short story`({
198
+ // model,
199
+ // streaming: {
200
+ // onProgress: (chunk) => chunks.push(chunk)
201
+ // }
202
+ // })
203
+ // expect(result).toBeDefined()
204
+ // expect(chunks.length).toBeGreaterThan(0)
205
+ // expect(chunks.join('')).toBe(result)
206
+ // })
207
+ // it('should support structured outputs with OpenAI', async () => {
208
+ // const schema = z.object({
209
+ // name: z.string(),
210
+ // ingredients: z.array(z.object({
211
+ // name: z.string(),
212
+ // amount: z.string().nullable() // Note: using nullable instead of optional
213
+ // })),
214
+ // steps: z.array(z.string())
215
+ // })
216
+ // const ai = createTemplateFunction()
217
+ // const result = await ai`Generate a recipe`({
218
+ // model: openai('gpt-4o-mini', { structuredOutputs: true }),
219
+ // outputFormat: 'object',
220
+ // schema,
221
+ // schemaName: 'recipe',
222
+ // schemaDescription: 'A cooking recipe with ingredients and steps.'
223
+ // })
224
+ // const parsed = JSON.parse(result)
225
+ // expect(() => schema.parse(parsed)).not.toThrow()
226
+ // })
227
+ // it('should support long text generation', async () => {
228
+ // const ai = createTemplateFunction()
229
+ // const result = await ai`Write a detailed essay about the history of Rome`({
230
+ // model,
231
+ // maxSteps: 3,
232
+ // experimental_continueSteps: true,
233
+ // system: 'Stop when sufficient information was provided.'
234
+ // })
235
+ // expect(result.length).toBeGreaterThan(1000) // Assuming it generates substantial content
236
+ // expect(result).toContain('Rome')
237
+ // })
238
+ // it('should support predicted outputs', async () => {
239
+ // const ai = createTemplateFunction()
240
+ // const existingCode = `interface User {
241
+ // Username: string;
242
+ // Age: number;
243
+ // }`
244
+ // const result = await ai`Replace the Username property with an Email property`({
245
+ // model,
246
+ // experimental_providerMetadata: {
247
+ // openai: {
248
+ // prediction: {
249
+ // type: 'content',
250
+ // content: existingCode
251
+ // }
252
+ // }
253
+ // }
254
+ // })
255
+ // expect(result).toContain('interface User')
256
+ // expect(result).toContain('Email: string')
257
+ // expect(result).not.toContain('Username')
258
+ // })
259
+ // it('should support streaming with tool calls', async () => {
260
+ // const ai = createTemplateFunction()
261
+ // const toolCalls: any[] = []
262
+ // const toolResults: any[] = []
263
+ // await ai`What are some San Francisco tourist attractions?`({
264
+ // model,
265
+ // tools: {
266
+ // cityAttractions: {
267
+ // parameters: z.object({ city: z.string() }),
268
+ // execute: async ({ city }) => ({
269
+ // attractions: ['Alcatraz', 'Golden Gate Bridge', 'Fisherman\'s Wharf']
270
+ // })
271
+ // }
272
+ // },
273
+ // streaming: {
274
+ // onProgress: (chunk) => {
275
+ // if (chunk.type === 'tool-call') toolCalls.push(chunk)
276
+ // if (chunk.type === 'tool-result') toolResults.push(chunk)
277
+ // }
278
+ // }
279
+ // })
280
+ // expect(toolCalls.length).toBeGreaterThan(0)
281
+ // expect(toolResults.length).toBeGreaterThan(0)
282
+ // expect(toolCalls[0].toolName).toBe('cityAttractions')
283
+ // })
284
+ // })
285
+ // })
286
+ });
287
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/factory/index.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { AIFunctionOptions, BaseTemplateFunction } from '../types';
2
+ export declare function createListFunction(defaultOptions?: AIFunctionOptions): BaseTemplateFunction;
3
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/factory/list.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAyB,MAAM,UAAU,CAAA;AAc9F,wBAAgB,kBAAkB,CAAC,cAAc,GAAE,iBAAsB,GAAG,oBAAoB,CAwO/F"}
@@ -0,0 +1,221 @@
1
+ import { streamObject } from 'ai';
2
+ import { openai } from '@ai-sdk/openai';
3
+ import { z } from 'zod';
4
+ import PQueue from 'p-queue';
5
+ function createQueue(options) {
6
+ if (!options.concurrency) {
7
+ return undefined;
8
+ }
9
+ return new PQueue({
10
+ concurrency: options.concurrency,
11
+ autoStart: true,
12
+ carryoverConcurrencyCount: true,
13
+ });
14
+ }
15
+ export function createListFunction(defaultOptions = {}) {
16
+ let currentPrompt;
17
+ let currentQueue;
18
+ let queueOptions;
19
+ const getQueue = (options) => {
20
+ if (!options.concurrency) {
21
+ return undefined;
22
+ }
23
+ // Create a new queue if options have changed
24
+ if (!currentQueue ||
25
+ !queueOptions?.concurrency ||
26
+ queueOptions.concurrency !== options.concurrency) {
27
+ currentQueue = createQueue(options);
28
+ queueOptions = options;
29
+ }
30
+ return currentQueue;
31
+ };
32
+ const executeRequest = async (prompt, options) => {
33
+ const modelParams = {
34
+ temperature: options.temperature,
35
+ maxTokens: options.maxTokens,
36
+ topP: options.topP,
37
+ frequencyPenalty: options.frequencyPenalty,
38
+ presencePenalty: options.presencePenalty,
39
+ stopSequences: options.stop ? Array.isArray(options.stop) ? options.stop : [options.stop] : undefined,
40
+ seed: options.seed
41
+ };
42
+ const performRequest = async () => {
43
+ try {
44
+ const model = options.model || openai(process.env.OPENAI_DEFAULT_MODEL || 'gpt-4o');
45
+ const streamOptions = {
46
+ model,
47
+ output: 'array',
48
+ schema: z.string(),
49
+ prompt: `Generate a list of items based on this prompt: ${prompt}`,
50
+ system: options.system,
51
+ ...modelParams
52
+ };
53
+ const { elementStream } = streamObject(streamOptions);
54
+ const elements = [];
55
+ for await (const item of elementStream) {
56
+ elements.push(item);
57
+ }
58
+ return elements.join('\n');
59
+ }
60
+ catch (error) {
61
+ if (error instanceof Error) {
62
+ throw error;
63
+ }
64
+ throw new Error('Failed to generate list');
65
+ }
66
+ };
67
+ const queue = getQueue(options);
68
+ const result = queue
69
+ ? await queue.add(performRequest)
70
+ : await performRequest();
71
+ return result;
72
+ };
73
+ const executeStreamingRequest = async function* (prompt, options) {
74
+ const modelParams = {
75
+ temperature: options.temperature,
76
+ maxTokens: options.maxTokens,
77
+ topP: options.topP,
78
+ frequencyPenalty: options.frequencyPenalty,
79
+ presencePenalty: options.presencePenalty,
80
+ stopSequences: options.stop ? Array.isArray(options.stop) ? options.stop : [options.stop] : undefined,
81
+ seed: options.seed
82
+ };
83
+ const performRequest = async function* () {
84
+ try {
85
+ const model = options.model || openai(process.env.OPENAI_DEFAULT_MODEL || 'gpt-4o');
86
+ const streamOptions = {
87
+ model,
88
+ output: 'array',
89
+ schema: z.string(),
90
+ prompt: `Generate a list of items based on this prompt: ${prompt}`,
91
+ system: options.system,
92
+ ...modelParams
93
+ };
94
+ const { elementStream } = streamObject(streamOptions);
95
+ for await (const item of elementStream) {
96
+ yield item;
97
+ }
98
+ }
99
+ catch (error) {
100
+ if (error instanceof Error) {
101
+ if (error.name === 'AbortError') {
102
+ throw new Error('Stream was aborted');
103
+ }
104
+ else if (error.name === 'TimeoutError') {
105
+ throw new Error('Stream timed out');
106
+ }
107
+ else {
108
+ throw error;
109
+ }
110
+ }
111
+ throw new Error('Failed to generate list: Unknown error occurred');
112
+ }
113
+ };
114
+ const queue = getQueue(options);
115
+ if (queue) {
116
+ const operation = performRequest();
117
+ // Queue the operation based on its type
118
+ if (operation[Symbol.asyncIterator]) {
119
+ // For AsyncGenerator, queue each value
120
+ for await (const value of operation) {
121
+ yield await queue.add(async () => value);
122
+ }
123
+ }
124
+ else {
125
+ // For Promise, queue the entire operation
126
+ yield await queue.add(async () => {
127
+ const result = await operation;
128
+ return result;
129
+ });
130
+ }
131
+ }
132
+ else {
133
+ yield* performRequest();
134
+ }
135
+ };
136
+ const templateFn = async (prompt, options = defaultOptions) => {
137
+ currentPrompt = prompt;
138
+ const mergedOptions = { ...defaultOptions, ...options };
139
+ try {
140
+ return await executeRequest(prompt, mergedOptions);
141
+ }
142
+ catch (error) {
143
+ if (error instanceof Error) {
144
+ throw error;
145
+ }
146
+ throw new Error('Failed to generate list');
147
+ }
148
+ };
149
+ const asyncIterator = async function* (prompt, options = defaultOptions) {
150
+ currentPrompt = prompt;
151
+ const mergedOptions = { ...defaultOptions, ...options };
152
+ try {
153
+ for await (const item of executeStreamingRequest(prompt, mergedOptions)) {
154
+ yield item;
155
+ }
156
+ }
157
+ catch (error) {
158
+ if (error instanceof Error) {
159
+ throw error;
160
+ }
161
+ throw new Error('Failed to generate list');
162
+ }
163
+ };
164
+ function createTemplateResult(prompt, options) {
165
+ const promise = templateFn(prompt, options);
166
+ const result = Object.assign((opts) => templateFn(prompt, { ...options, ...opts }), {
167
+ [Symbol.asyncIterator]: () => asyncIterator(prompt, options),
168
+ call: (opts) => templateFn(prompt, { ...options, ...opts }),
169
+ then: promise.then.bind(promise),
170
+ catch: promise.catch.bind(promise),
171
+ finally: promise.finally.bind(promise),
172
+ });
173
+ return result;
174
+ }
175
+ function createBaseFunction() {
176
+ function fn(stringsOrOptions, ...values) {
177
+ if (!stringsOrOptions) {
178
+ return createTemplateResult('', defaultOptions);
179
+ }
180
+ if (Array.isArray(stringsOrOptions)) {
181
+ const strings = stringsOrOptions;
182
+ if (strings.length - 1 !== values.length) {
183
+ throw new Error('Template literal slots must match provided values');
184
+ }
185
+ const lastValue = values[values.length - 1];
186
+ const options = typeof lastValue === 'object' && !Array.isArray(lastValue) && lastValue !== null
187
+ ? { ...defaultOptions, ...lastValue }
188
+ : defaultOptions;
189
+ const actualValues = typeof lastValue === 'object' && !Array.isArray(lastValue) && lastValue !== null
190
+ ? values.slice(0, -1)
191
+ : values;
192
+ const prompt = strings.reduce((acc, str, i) => acc + str + (actualValues[i] || ''), '');
193
+ currentPrompt = prompt;
194
+ return createTemplateResult(prompt, options);
195
+ }
196
+ const options = { ...defaultOptions, ...stringsOrOptions };
197
+ return createTemplateResult('', options);
198
+ }
199
+ // Add the asyncIterator to the base function
200
+ Object.defineProperty(fn, Symbol.asyncIterator, {
201
+ value: () => asyncIterator(currentPrompt || '', defaultOptions),
202
+ enumerable: false,
203
+ configurable: true
204
+ });
205
+ // Add the withOptions method
206
+ Object.defineProperty(fn, 'withOptions', {
207
+ value: (opts) => templateFn(currentPrompt || '', { ...defaultOptions, ...opts }),
208
+ enumerable: false,
209
+ configurable: true
210
+ });
211
+ // Add the queue property
212
+ Object.defineProperty(fn, 'queue', {
213
+ get: () => currentQueue,
214
+ enumerable: false,
215
+ configurable: true
216
+ });
217
+ return fn;
218
+ }
219
+ return createBaseFunction();
220
+ }
221
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/factory/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=list.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.test.d.ts","sourceRoot":"","sources":["../../src/factory/list.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,84 @@
1
+ import { describe, expect, it, beforeEach } from 'vitest';
2
+ import { createListFunction } from './list';
3
+ import { openai } from '@ai-sdk/openai';
4
+ describe('List Function', () => {
5
+ beforeEach(() => {
6
+ process.env.OPENAI_API_KEY = process.env.OPENAI_API_KEY || 'test-key';
7
+ });
8
+ const model = openai('gpt-4o-mini');
9
+ describe('Template Literals', () => {
10
+ it('should generate list using template literal', async () => {
11
+ const list = createListFunction();
12
+ const result = await list `fun things to do in Miami`({ model });
13
+ expect(result).toBeDefined();
14
+ const items = result.split('\n');
15
+ expect(items.length).toBeGreaterThan(0);
16
+ items.forEach(item => expect(typeof item).toBe('string'));
17
+ });
18
+ it('should support async iteration', async () => {
19
+ const list = createListFunction();
20
+ const items = [];
21
+ for await (const item of list `fun things to do in Miami`({ model })) {
22
+ items.push(item);
23
+ }
24
+ expect(items.length).toBeGreaterThan(0);
25
+ items.forEach(item => expect(typeof item).toBe('string'));
26
+ });
27
+ it('should support interpolation', async () => {
28
+ const list = createListFunction();
29
+ const city = 'Paris';
30
+ const category = 'museums';
31
+ const result = await list `top ${category} to visit in ${city}`({ model });
32
+ expect(result).toContain('Louvre');
33
+ });
34
+ });
35
+ describe('Configuration', () => {
36
+ it('should support system prompts', async () => {
37
+ const list = createListFunction();
38
+ const result = await list `fun things to do in Miami`({
39
+ model,
40
+ system: 'You are an expert tour guide',
41
+ temperature: 0.2
42
+ });
43
+ expect(result).toBeDefined();
44
+ expect(result.split('\n').length).toBeGreaterThan(0);
45
+ });
46
+ it('should support concurrency for multiple lists', async () => {
47
+ const list = createListFunction();
48
+ const cities = ['Paris', 'London', 'Tokyo'];
49
+ const results = await Promise.all(cities.map(city => list `top attractions in ${city}`({ model, concurrency: 2 })));
50
+ expect(results).toHaveLength(3);
51
+ results.forEach(result => {
52
+ expect(result.split('\n').length).toBeGreaterThan(0);
53
+ });
54
+ });
55
+ });
56
+ describe('Streaming', () => {
57
+ it('should stream list items', async () => {
58
+ const list = createListFunction();
59
+ const items = [];
60
+ const progressItems = [];
61
+ for await (const item of list `fun things to do in Miami`({
62
+ model,
63
+ streaming: {
64
+ onProgress: chunk => progressItems.push(chunk)
65
+ }
66
+ })) {
67
+ items.push(item);
68
+ }
69
+ expect(items.length).toBeGreaterThan(0);
70
+ expect(progressItems.length).toBeGreaterThan(0);
71
+ });
72
+ it('should handle streaming errors gracefully', async () => {
73
+ const list = createListFunction();
74
+ await expect(async () => {
75
+ for await (const item of list `fun things to do in Miami`({
76
+ model: undefined // Force an error
77
+ })) {
78
+ console.log(item);
79
+ }
80
+ }).rejects.toThrow();
81
+ });
82
+ });
83
+ });
84
+ //# sourceMappingURL=list.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.test.js","sourceRoot":"","sources":["../../src/factory/list.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { GenerateObjectOptions, SimpleSchema } from '@/types';
2
+ export declare function generateObject<T extends SimpleSchema>(options: GenerateObjectOptions<T>): Promise<import("ai").GenerateObjectResult<{
3
+ [x: string]: any;
4
+ }>>;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generate/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAElE,wBAAsB,cAAc,CAAC,CAAC,SAAS,YAAY,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC;;IAa7F"}