ai-functions 0.2.19 → 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,176 @@
1
+ import { describe, expect, it, beforeEach } from 'vitest';
2
+ import { openai } from '@ai-sdk/openai';
3
+ import { streamObject, streamText } from 'ai';
4
+ import { z } from 'zod';
5
+ describe('AI SDK Examples', () => {
6
+ beforeEach(() => {
7
+ if (!process.env.OPENAI_API_KEY) {
8
+ throw new Error('OPENAI_API_KEY environment variable is required');
9
+ }
10
+ });
11
+ const model = openai('gpt-4o-mini');
12
+ describe('Streaming Text', () => {
13
+ it('should stream text using streamText', async () => {
14
+ const chunks = [];
15
+ const { textStream } = streamText({
16
+ model,
17
+ prompt: 'Write a short story about a robot learning to paint',
18
+ onChunk: ({ chunk }) => {
19
+ if (chunk.type === 'text-delta' && chunk.text) {
20
+ chunks.push(chunk.text);
21
+ }
22
+ }
23
+ });
24
+ let fullText = '';
25
+ for await (const text of textStream) {
26
+ fullText += text;
27
+ }
28
+ expect(chunks.length).toBeGreaterThan(0);
29
+ expect(fullText).toBeDefined();
30
+ expect(fullText.length).toBeGreaterThan(0);
31
+ }, 30000);
32
+ });
33
+ describe('Streaming Objects', () => {
34
+ it('should stream array elements using streamObject', async () => {
35
+ const { elementStream } = streamObject({
36
+ model,
37
+ output: 'array',
38
+ schema: z.object({
39
+ name: z.string(),
40
+ type: z.string().describe('Type of fruit'),
41
+ color: z.string(),
42
+ taste: z.string().describe('Description of taste')
43
+ }),
44
+ prompt: 'Generate descriptions of 3 different fruits'
45
+ });
46
+ const fruits = [];
47
+ for await (const fruit of elementStream) {
48
+ fruits.push(fruit);
49
+ }
50
+ expect(fruits.length).toBe(3);
51
+ fruits.forEach(fruit => {
52
+ expect(fruit).toHaveProperty('name');
53
+ expect(fruit).toHaveProperty('type');
54
+ expect(fruit).toHaveProperty('color');
55
+ expect(fruit).toHaveProperty('taste');
56
+ });
57
+ }, 30000);
58
+ it('should stream partial objects using streamObject', async () => {
59
+ const { partialObjectStream } = streamObject({
60
+ model,
61
+ schema: z.object({
62
+ recipe: z.object({
63
+ name: z.string(),
64
+ ingredients: z.array(z.object({
65
+ name: z.string(),
66
+ amount: z.string()
67
+ })),
68
+ steps: z.array(z.string())
69
+ })
70
+ }),
71
+ prompt: 'Generate a recipe for chocolate chip cookies'
72
+ });
73
+ const updates = [];
74
+ for await (const partial of partialObjectStream) {
75
+ updates.push(partial);
76
+ }
77
+ expect(updates.length).toBeGreaterThan(0);
78
+ const finalUpdate = updates[updates.length - 1];
79
+ expect(finalUpdate.recipe).toBeDefined();
80
+ expect(finalUpdate.recipe.name).toBeDefined();
81
+ expect(Array.isArray(finalUpdate.recipe.ingredients)).toBe(true);
82
+ expect(Array.isArray(finalUpdate.recipe.steps)).toBe(true);
83
+ }, 30000);
84
+ it('should handle streaming errors gracefully', async () => {
85
+ let error;
86
+ try {
87
+ const { elementStream } = streamObject({
88
+ model: undefined, // Force an error
89
+ output: 'array',
90
+ schema: z.string(),
91
+ prompt: 'Generate a list of items'
92
+ });
93
+ for await (const item of elementStream) {
94
+ console.log(item);
95
+ }
96
+ }
97
+ catch (e) {
98
+ error = e;
99
+ }
100
+ expect(error).toBeDefined();
101
+ expect(error?.message).toBeDefined();
102
+ }, 30000);
103
+ });
104
+ describe('Advanced Features', () => {
105
+ it('should support streaming with tool calls', async () => {
106
+ const toolCalls = [];
107
+ const toolResults = [];
108
+ const { fullStream } = streamText({
109
+ model,
110
+ tools: {
111
+ cityAttractions: {
112
+ parameters: z.object({ city: z.string() }),
113
+ execute: async ({ city }) => ({
114
+ attractions: ['attraction1', 'attraction2', 'attraction3']
115
+ })
116
+ }
117
+ },
118
+ prompt: 'What are some San Francisco tourist attractions?'
119
+ });
120
+ for await (const part of fullStream) {
121
+ switch (part.type) {
122
+ case 'tool-call':
123
+ toolCalls.push(part);
124
+ break;
125
+ case 'tool-result':
126
+ toolResults.push(part);
127
+ break;
128
+ }
129
+ }
130
+ expect(toolCalls.length).toBeGreaterThan(0);
131
+ expect(toolResults.length).toBeGreaterThan(0);
132
+ expect(toolCalls[0].toolName).toBe('cityAttractions');
133
+ }, 30000);
134
+ it('should support predicted outputs', async () => {
135
+ const existingCode = `
136
+ interface User {
137
+ Username: string;
138
+ Password: string;
139
+ }
140
+ `;
141
+ const { textStream } = streamText({
142
+ model,
143
+ messages: [
144
+ {
145
+ role: 'user',
146
+ content: 'Replace the Username property with an Email property.'
147
+ },
148
+ {
149
+ role: 'user',
150
+ content: existingCode
151
+ }
152
+ ],
153
+ experimental_providerMetadata: {
154
+ openai: {
155
+ prediction: {
156
+ type: 'content',
157
+ content: existingCode
158
+ }
159
+ }
160
+ },
161
+ seed: 12345
162
+ });
163
+ let text = '';
164
+ for await (const chunk of textStream) {
165
+ text += chunk;
166
+ }
167
+ // Extract just the interface code
168
+ const interfaceMatch = text.match(/interface User {[^}]*}/s);
169
+ const interfaceCode = interfaceMatch ? interfaceMatch[0] : '';
170
+ expect(interfaceCode).toContain('interface User');
171
+ expect(interfaceCode).toContain('Email: string');
172
+ expect(interfaceCode).not.toContain('Username');
173
+ }, 30000);
174
+ });
175
+ });
176
+ //# sourceMappingURL=streaming.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.test.js","sourceRoot":"","sources":["../../src/examples/streaming.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../../src/factory/__tests__/index.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,430 @@
1
+ import { describe, expect, it, beforeEach } from 'vitest';
2
+ import { z } from 'zod';
3
+ import { createTemplateFunction, createAIFunction } from '../index';
4
+ import { createListFunction } from '../list';
5
+ import { openai } from '@ai-sdk/openai';
6
+ import { ai, list } from '../../index';
7
+ describe('createAIFunction', () => {
8
+ beforeEach(() => {
9
+ process.env.OPENAI_API_KEY = process.env.OPENAI_API_KEY || 'test-key';
10
+ // Ensure AI gateway is configured for cached responses
11
+ process.env.AI_GATEWAY = process.env.AI_GATEWAY || 'https://api.openai.com/v1';
12
+ });
13
+ it('should return schema when called without args', async () => {
14
+ const schema = z.object({
15
+ productType: z.enum(['App', 'API', 'Marketplace']),
16
+ description: z.string().describe('website meta description'),
17
+ });
18
+ const fn = createAIFunction(schema);
19
+ const result = await fn();
20
+ expect(result).toHaveProperty('schema');
21
+ expect(result.schema).toBeInstanceOf(z.ZodObject);
22
+ });
23
+ it('should generate content when called with args', async () => {
24
+ const schema = z.object({
25
+ productType: z.enum(['App', 'API', 'Marketplace']),
26
+ description: z.string().describe('website meta description'),
27
+ });
28
+ const fn = createAIFunction(schema);
29
+ const result = await fn({
30
+ productType: 'App',
31
+ description: 'A modern web application for task management'
32
+ }, {
33
+ model: openai('gpt-4o-mini')
34
+ });
35
+ expect(result).toHaveProperty('productType');
36
+ expect(result).toHaveProperty('description');
37
+ expect(typeof result.description).toBe('string');
38
+ });
39
+ });
40
+ describe('createTemplateFunction', () => {
41
+ beforeEach(() => {
42
+ process.env.OPENAI_API_KEY = process.env.OPENAI_API_KEY || 'test-key';
43
+ });
44
+ describe('output format handling', () => {
45
+ it('should support JSON output format with schema', async () => {
46
+ const schema = z.object({
47
+ name: z.string(),
48
+ age: z.number(),
49
+ });
50
+ const fn = createTemplateFunction({
51
+ outputFormat: 'json',
52
+ schema,
53
+ model: openai('gpt-4o-mini')
54
+ });
55
+ const result = await fn `Generate a person's info`;
56
+ const parsed = schema.parse(JSON.parse(result));
57
+ expect(parsed).toBeDefined();
58
+ expect(typeof parsed.name).toBe('string');
59
+ expect(typeof parsed.age).toBe('number');
60
+ });
61
+ });
62
+ it('should use custom baseURL when AI_GATEWAY is set', async () => {
63
+ process.env.AI_GATEWAY = 'https://api.openai.com/v1';
64
+ process.env.OPENAI_API_KEY = process.env.OPENAI_API_KEY || 'test-key';
65
+ const fn = createTemplateFunction({
66
+ model: openai('gpt-4o-mini')
67
+ });
68
+ const result = await fn `Write a haiku about coding`;
69
+ expect(typeof result).toBe('string');
70
+ expect(result.length).toBeGreaterThan(0);
71
+ });
72
+ it('should use default OpenAI when AI_GATEWAY is not set', async () => {
73
+ delete process.env.AI_GATEWAY;
74
+ process.env.OPENAI_API_KEY = process.env.OPENAI_API_KEY || 'test-key';
75
+ const fn = createTemplateFunction({
76
+ model: openai('gpt-4o-mini')
77
+ });
78
+ const result = await fn `Write a haiku about coding`;
79
+ expect(typeof result).toBe('string');
80
+ expect(result.length).toBeGreaterThan(0);
81
+ });
82
+ describe('error handling', () => {
83
+ beforeEach(() => {
84
+ process.env.OPENAI_API_KEY = process.env.OPENAI_API_KEY || 'test-key';
85
+ });
86
+ it('should handle template strings correctly', async () => {
87
+ const fn = createTemplateFunction({
88
+ model: openai('gpt-4o-mini')
89
+ });
90
+ const result = await fn `List three programming languages`;
91
+ expect(typeof result).toBe('string');
92
+ expect(result.length).toBeGreaterThan(0);
93
+ });
94
+ it('should throw on mismatched template values', () => {
95
+ const fn = createTemplateFunction();
96
+ const templateStrings = Object.assign(['test ', ' ', ' ', ''], {
97
+ raw: ['test ', ' ', ' ', ''],
98
+ });
99
+ expect(() => fn(templateStrings, 1, 2)).toThrow('Template literal slots must match provided values');
100
+ });
101
+ });
102
+ it('should generate text', async () => {
103
+ const fn = createTemplateFunction();
104
+ const result = await fn `Hello, how are you?`;
105
+ expect(result).toBeDefined();
106
+ expect(typeof result).toBe('string');
107
+ });
108
+ it('should support streaming', async () => {
109
+ const fn = createTemplateFunction();
110
+ const chunks = [];
111
+ for await (const chunk of fn `Hello, how are you?`) {
112
+ chunks.push(chunk);
113
+ }
114
+ expect(chunks.length).toBeGreaterThan(0);
115
+ });
116
+ it('should support JSON output with schema', async () => {
117
+ const fn = createTemplateFunction();
118
+ const result = await fn.withOptions({
119
+ outputFormat: 'json',
120
+ schema: {
121
+ name: 'string',
122
+ age: 'number'
123
+ },
124
+ prompt: 'Generate a person with a name and age'
125
+ });
126
+ expect(result).toBeDefined();
127
+ const parsed = JSON.parse(result);
128
+ expect(parsed).toHaveProperty('name');
129
+ expect(parsed).toHaveProperty('age');
130
+ expect(typeof parsed.name).toBe('string');
131
+ expect(typeof parsed.age).toBe('number');
132
+ });
133
+ it('should support JSON output without schema', async () => {
134
+ const fn = createTemplateFunction();
135
+ const result = await fn.withOptions({
136
+ outputFormat: 'json',
137
+ prompt: 'Generate a random object'
138
+ });
139
+ expect(result).toBeDefined();
140
+ expect(() => JSON.parse(result)).not.toThrow();
141
+ });
142
+ it('should support model parameters', async () => {
143
+ const fn = createTemplateFunction();
144
+ const result = await fn.withOptions({
145
+ temperature: 0.7,
146
+ maxTokens: 100,
147
+ topP: 0.9,
148
+ frequencyPenalty: 0.5,
149
+ presencePenalty: 0.5,
150
+ stop: ['END'],
151
+ seed: 42
152
+ });
153
+ expect(result).toBeDefined();
154
+ expect(typeof result).toBe('string');
155
+ });
156
+ it('should support array of stop sequences', async () => {
157
+ const fn = createTemplateFunction();
158
+ const result = await fn.withOptions({
159
+ stop: ['END', 'STOP']
160
+ });
161
+ expect(result).toBeDefined();
162
+ expect(typeof result).toBe('string');
163
+ });
164
+ it('should support deterministic output with seed', async () => {
165
+ const fn = createTemplateFunction();
166
+ const prompt = 'Generate a random number between 1 and 10';
167
+ const result1 = await fn `${prompt}`({ seed: 42 });
168
+ const result2 = await fn `${prompt}`({ seed: 42 });
169
+ expect(result1).toBe(result2);
170
+ });
171
+ it('should support system parameter', async () => {
172
+ const fn = createTemplateFunction();
173
+ const result = await fn.withOptions({
174
+ system: 'You are a helpful assistant that speaks in a formal tone.',
175
+ prompt: 'Tell me about AI'
176
+ });
177
+ expect(result).toBeDefined();
178
+ expect(typeof result).toBe('string');
179
+ });
180
+ it('should support system parameter in JSON output', async () => {
181
+ const fn = createTemplateFunction();
182
+ const result = await fn.withOptions({
183
+ outputFormat: 'json',
184
+ schema: {
185
+ title: 'string',
186
+ content: 'string'
187
+ },
188
+ system: 'You are a helpful assistant that speaks in a formal tone.',
189
+ prompt: 'Write an article about AI'
190
+ });
191
+ expect(result).toBeDefined();
192
+ const parsed = JSON.parse(result);
193
+ expect(parsed).toHaveProperty('title');
194
+ expect(parsed).toHaveProperty('content');
195
+ expect(typeof parsed.title).toBe('string');
196
+ expect(typeof parsed.content).toBe('string');
197
+ });
198
+ it('should support system parameter in list function', async () => {
199
+ const list = createListFunction();
200
+ const result = await list `List 3 programming languages`({
201
+ system: 'You are a helpful assistant that provides concise, one-word answers.'
202
+ });
203
+ expect(result).toBeDefined();
204
+ const items = result.split('\n');
205
+ expect(items.length).toBe(3);
206
+ items.forEach((item) => expect(item.split(' ').length).toBe(1));
207
+ });
208
+ describe('concurrency handling', () => {
209
+ it('should respect concurrency limits', async () => {
210
+ const fn = createTemplateFunction({
211
+ concurrency: 2
212
+ });
213
+ const startTime = Date.now();
214
+ const tasks = Array(5).fill(null).map((_, i) => fn `task ${i}`);
215
+ const results = await Promise.all(tasks);
216
+ const endTime = Date.now();
217
+ // With concurrency of 2 and 5 tasks, it should take at least 2 intervals
218
+ expect(endTime - startTime).toBeGreaterThan(1900);
219
+ expect(results).toHaveLength(5);
220
+ results.forEach(result => {
221
+ expect(typeof result).toBe('string');
222
+ expect(result.length).toBeGreaterThan(0);
223
+ });
224
+ });
225
+ it('should handle concurrent streaming requests', async () => {
226
+ const fn = createTemplateFunction({
227
+ concurrency: 2
228
+ });
229
+ const streams = Array(3).fill(null).map((_, i) => fn `generate a short story about item ${i}`);
230
+ const results = await Promise.all(streams.map(async (stream) => {
231
+ const chunks = [];
232
+ for await (const chunk of stream) {
233
+ chunks.push(chunk);
234
+ }
235
+ return chunks;
236
+ }));
237
+ expect(results).toHaveLength(3);
238
+ results.forEach(chunks => {
239
+ expect(chunks.length).toBeGreaterThan(0);
240
+ expect(chunks.every(chunk => typeof chunk === 'string')).toBe(true);
241
+ });
242
+ });
243
+ it('should queue requests when concurrency limit is reached', async () => {
244
+ const fn = createTemplateFunction({
245
+ concurrency: 1
246
+ });
247
+ const executionOrder = [];
248
+ const tasks = Array(4).fill(null).map((_, i) => fn `task ${i}`.then(() => {
249
+ executionOrder.push(i);
250
+ return i;
251
+ }));
252
+ const results = await Promise.all(tasks);
253
+ // With concurrency of 1, tasks should complete in order
254
+ expect(executionOrder).toEqual([0, 1, 2, 3]);
255
+ expect(results).toEqual([0, 1, 2, 3]);
256
+ });
257
+ it('should handle errors in concurrent requests', async () => {
258
+ const fn = createTemplateFunction({
259
+ concurrency: 2,
260
+ outputFormat: 'json'
261
+ });
262
+ const tasks = Array(3).fill(null).map((_, i) => fn `${i === 1 ? '{invalid json}' : 'task ' + i}`.catch((err) => {
263
+ if (i === 1) {
264
+ return JSON.stringify({ error: `error-${i}`, message: err.message });
265
+ }
266
+ return JSON.stringify({ result: `task-${i}` });
267
+ }));
268
+ const results = await Promise.all(tasks);
269
+ expect(results).toHaveLength(3);
270
+ const result0 = JSON.parse(results[0]);
271
+ expect(result0.result).toBe('task-0');
272
+ const errorResult = JSON.parse(results[1]);
273
+ expect(errorResult.error).toBe('error-1');
274
+ expect(errorResult.message).toBeDefined();
275
+ const result2 = JSON.parse(results[2]);
276
+ expect(result2.result).toBe('task-2');
277
+ });
278
+ });
279
+ describe('composable functions', () => {
280
+ beforeEach(() => {
281
+ process.env.OPENAI_API_KEY = process.env.OPENAI_API_KEY || 'test-key';
282
+ });
283
+ it('should support composing list and ai functions', async () => {
284
+ const { ai, list } = await import('../..');
285
+ const listBlogPosts = (count, topic) => list `${count} blog post titles about ${topic}`({
286
+ model: openai('gpt-4o')
287
+ });
288
+ const writeBlogPost = (title) => ai `write a blog post in markdown starting with '# ${title}'`({
289
+ model: openai('gpt-4o')
290
+ });
291
+ const titles = await listBlogPosts(2, 'AI testing');
292
+ expect(Array.isArray(titles)).toBe(true);
293
+ expect(titles.length).toBe(2);
294
+ const content = await writeBlogPost(titles[0]);
295
+ expect(typeof content).toBe('string');
296
+ expect(content.startsWith('# ')).toBe(true);
297
+ });
298
+ it('should support composition with async generators', async () => {
299
+ const { ai, list } = await import('../..');
300
+ const listBlogPosts = (count, topic) => list `${count} blog post titles about ${topic}`({
301
+ model: openai('gpt-4o')
302
+ });
303
+ const writeBlogPost = (title) => ai `write a blog post in markdown starting with '# ${title}'`({
304
+ model: openai('gpt-4o')
305
+ });
306
+ async function* writeBlog(count, topic) {
307
+ const titles = await listBlogPosts(count, topic);
308
+ for (const title of titles) {
309
+ const content = await writeBlogPost(title);
310
+ yield { title, content };
311
+ }
312
+ }
313
+ const posts = [];
314
+ for await (const post of writeBlog(2, 'software testing')) {
315
+ posts.push(post);
316
+ }
317
+ expect(posts.length).toBe(2);
318
+ posts.forEach(post => {
319
+ expect(post).toHaveProperty('title');
320
+ expect(post).toHaveProperty('content');
321
+ expect(typeof post.title).toBe('string');
322
+ expect(typeof post.content).toBe('string');
323
+ expect(post.content.startsWith('# ')).toBe(true);
324
+ });
325
+ });
326
+ it('should support concurrent composable functions', async () => {
327
+ const { ai, list } = await import('../..');
328
+ // Define composable functions exactly as shown in README
329
+ const listBlogPosts = (count, topic) => list `${count} blog post titles about ${topic}`;
330
+ const writeBlogPost = (title) => ai `write a blog post in markdown starting with '# ${title}'`;
331
+ // Test composition with async iteration
332
+ async function* writeBlog(count, topic) {
333
+ // Get titles
334
+ const titles = await listBlogPosts(count, topic);
335
+ // Generate posts one at a time using streaming
336
+ for (const title of titles) {
337
+ let content = '';
338
+ for await (const chunk of writeBlogPost(title)) {
339
+ content += chunk;
340
+ }
341
+ yield { title, content };
342
+ }
343
+ }
344
+ const posts = [];
345
+ for await (const post of writeBlog(3, 'future of car sales')) {
346
+ posts.push(post);
347
+ }
348
+ expect(posts.length).toBe(3);
349
+ posts.forEach(post => {
350
+ expect(post).toHaveProperty('title');
351
+ expect(post).toHaveProperty('content');
352
+ expect(typeof post.title).toBe('string');
353
+ expect(typeof post.content).toBe('string');
354
+ expect(post.content.startsWith('# ')).toBe(true);
355
+ });
356
+ });
357
+ });
358
+ describe('composable functions', () => {
359
+ it('should support composable function patterns from README', async () => {
360
+ const count = 2;
361
+ const topic = 'AI development';
362
+ const listBlogPosts = (count, topic) => {
363
+ const result = list `${count} blog post titles about ${topic}`({
364
+ model: openai(process.env.OPENAI_DEFAULT_MODEL || 'gpt-4o')
365
+ });
366
+ return {
367
+ async *[Symbol.asyncIterator]() {
368
+ const text = await result;
369
+ for (const line of text.split('\n')) {
370
+ if (line.trim())
371
+ yield line.trim();
372
+ }
373
+ }
374
+ };
375
+ };
376
+ const writeBlogPost = (title) => ai `write a blog post in markdown starting with '# ${title}'`({
377
+ model: openai(process.env.OPENAI_DEFAULT_MODEL || 'gpt-4o')
378
+ });
379
+ const titles = [];
380
+ for await (const title of listBlogPosts(count, topic)) {
381
+ titles.push(title);
382
+ }
383
+ expect(titles).toBeDefined();
384
+ expect(titles).toHaveLength(count);
385
+ const firstTitle = titles[0];
386
+ const content = await writeBlogPost(firstTitle);
387
+ expect(content).toBeDefined();
388
+ expect(typeof content).toBe('string');
389
+ expect(content.startsWith('# ')).toBe(true);
390
+ });
391
+ it('should support async iteration with composable functions', async () => {
392
+ const count = 2;
393
+ const topic = 'AI development';
394
+ const listBlogPosts = (count, topic) => {
395
+ const result = list `${count} blog post titles about ${topic}`({
396
+ model: openai(process.env.OPENAI_DEFAULT_MODEL || 'gpt-4o')
397
+ });
398
+ return {
399
+ async *[Symbol.asyncIterator]() {
400
+ const text = await result;
401
+ for (const line of text.split('\n')) {
402
+ if (line.trim())
403
+ yield line.trim();
404
+ }
405
+ }
406
+ };
407
+ };
408
+ const writeBlogPost = (title) => ai `write a blog post in markdown starting with '# ${title}'`({
409
+ model: openai(process.env.OPENAI_DEFAULT_MODEL || 'gpt-4o')
410
+ });
411
+ async function* writeBlog(count, topic) {
412
+ for await (const title of listBlogPosts(count, topic)) {
413
+ const content = await writeBlogPost(title);
414
+ yield { title, content };
415
+ }
416
+ }
417
+ const posts = [];
418
+ for await (const post of writeBlog(count, topic)) {
419
+ posts.push(post);
420
+ expect(post).toHaveProperty('title');
421
+ expect(post).toHaveProperty('content');
422
+ expect(typeof post.title).toBe('string');
423
+ expect(typeof post.content).toBe('string');
424
+ expect(post.content.startsWith('# ')).toBe(true);
425
+ }
426
+ expect(posts).toHaveLength(count);
427
+ });
428
+ });
429
+ });
430
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/factory/__tests__/index.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=list.test.d.ts.map