genaicode 0.0.37 → 0.1.1

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 (244) hide show
  1. package/bin/genaicode-dev.js +11 -0
  2. package/bin/genaicode.cjs +8 -1
  3. package/dist/ai-service/ai-studio.d.ts +5 -0
  4. package/dist/ai-service/ai-studio.js +135 -0
  5. package/dist/ai-service/ai-studio.js.map +1 -0
  6. package/dist/ai-service/anthropic.d.ts +5 -0
  7. package/dist/ai-service/anthropic.js +133 -0
  8. package/dist/ai-service/anthropic.js.map +1 -0
  9. package/dist/ai-service/chat-gpt.d.ts +5 -0
  10. package/dist/ai-service/chat-gpt.js +131 -0
  11. package/dist/ai-service/chat-gpt.js.map +1 -0
  12. package/dist/ai-service/common.d.ts +57 -0
  13. package/dist/ai-service/common.js +38 -0
  14. package/dist/ai-service/common.js.map +1 -0
  15. package/dist/ai-service/common.test.d.ts +1 -0
  16. package/dist/ai-service/common.test.js +85 -0
  17. package/dist/ai-service/common.test.js.map +1 -0
  18. package/dist/ai-service/dall-e.d.ts +14 -0
  19. package/dist/ai-service/dall-e.js +47 -0
  20. package/dist/ai-service/dall-e.js.map +1 -0
  21. package/dist/ai-service/vertex-ai-claude.d.ts +5 -0
  22. package/dist/ai-service/vertex-ai-claude.js +93 -0
  23. package/dist/ai-service/vertex-ai-claude.js.map +1 -0
  24. package/dist/ai-service/vertex-ai-imagen.d.ts +14 -0
  25. package/dist/ai-service/vertex-ai-imagen.js +74 -0
  26. package/dist/ai-service/vertex-ai-imagen.js.map +1 -0
  27. package/dist/ai-service/vertex-ai.d.ts +7 -0
  28. package/dist/ai-service/vertex-ai.js +147 -0
  29. package/dist/ai-service/vertex-ai.js.map +1 -0
  30. package/dist/cli/cli-options.d.ts +10 -0
  31. package/dist/cli/cli-options.js +124 -0
  32. package/dist/cli/cli-options.js.map +1 -0
  33. package/dist/cli/cli-options.test.d.ts +1 -0
  34. package/dist/cli/cli-options.test.js +34 -0
  35. package/dist/cli/cli-options.test.js.map +1 -0
  36. package/dist/cli/cli-params.d.ts +29 -0
  37. package/dist/cli/cli-params.js +103 -0
  38. package/dist/cli/cli-params.js.map +1 -0
  39. package/dist/cli/cli-params.test.d.ts +1 -0
  40. package/dist/cli/cli-params.test.js +38 -0
  41. package/dist/cli/cli-params.test.js.map +1 -0
  42. package/dist/cli/service-autodetect.d.ts +2 -0
  43. package/dist/cli/service-autodetect.js +17 -0
  44. package/dist/cli/service-autodetect.js.map +1 -0
  45. package/dist/cli/service-autodetect.test.d.ts +1 -0
  46. package/dist/cli/service-autodetect.test.js +38 -0
  47. package/dist/cli/service-autodetect.test.js.map +1 -0
  48. package/dist/cli/validate-cli-params.d.ts +18 -0
  49. package/dist/cli/validate-cli-params.js +128 -0
  50. package/dist/cli/validate-cli-params.js.map +1 -0
  51. package/dist/cli/validate-cli-params.test.d.ts +1 -0
  52. package/dist/cli/validate-cli-params.test.js +106 -0
  53. package/dist/cli/validate-cli-params.test.js.map +1 -0
  54. package/dist/files/file-utils.d.ts +2 -0
  55. package/dist/files/file-utils.js +7 -0
  56. package/dist/files/file-utils.js.map +1 -0
  57. package/dist/files/file-utils.test.d.ts +1 -0
  58. package/dist/files/file-utils.test.js +18 -0
  59. package/dist/files/file-utils.test.js.map +1 -0
  60. package/dist/files/find-files.d.ts +8 -0
  61. package/dist/files/find-files.js +76 -0
  62. package/dist/files/find-files.js.map +1 -0
  63. package/dist/files/read-files.d.ts +13 -0
  64. package/dist/files/read-files.js +61 -0
  65. package/dist/files/read-files.js.map +1 -0
  66. package/dist/files/read-files.test.d.ts +1 -0
  67. package/dist/files/read-files.test.js +89 -0
  68. package/dist/files/read-files.test.js.map +1 -0
  69. package/dist/files/temp-buffer.d.ts +2 -0
  70. package/dist/files/temp-buffer.js +12 -0
  71. package/dist/files/temp-buffer.js.map +1 -0
  72. package/dist/files/update-files.d.ts +5 -0
  73. package/dist/files/update-files.js +197 -0
  74. package/dist/files/update-files.js.map +1 -0
  75. package/dist/images/ensure-alpha.d.ts +1 -0
  76. package/dist/images/ensure-alpha.js +5 -0
  77. package/dist/images/ensure-alpha.js.map +1 -0
  78. package/dist/images/imgly-remove-background.d.ts +2 -0
  79. package/dist/images/imgly-remove-background.js +21 -0
  80. package/dist/images/imgly-remove-background.js.map +1 -0
  81. package/dist/images/resize-image.d.ts +19 -0
  82. package/dist/images/resize-image.js +22 -0
  83. package/dist/images/resize-image.js.map +1 -0
  84. package/dist/images/split-image.d.ts +18 -0
  85. package/dist/images/split-image.js +25 -0
  86. package/dist/images/split-image.js.map +1 -0
  87. package/dist/main/codegen.d.ts +2 -0
  88. package/dist/main/codegen.js +101 -0
  89. package/dist/main/codegen.js.map +1 -0
  90. package/dist/main/codegen.test.d.ts +2 -0
  91. package/dist/main/codegen.test.js +259 -0
  92. package/dist/main/codegen.test.js.map +1 -0
  93. package/dist/main/config-lib.d.ts +8 -0
  94. package/dist/main/config-lib.js +28 -0
  95. package/dist/main/config-lib.js.map +1 -0
  96. package/dist/main/config-lib.test.d.ts +1 -0
  97. package/dist/main/config-lib.test.js +64 -0
  98. package/dist/main/config-lib.test.js.map +1 -0
  99. package/dist/main/config.d.ts +5 -0
  100. package/{src → dist}/main/config.js +16 -22
  101. package/dist/main/config.js.map +1 -0
  102. package/dist/prompt/function-calling-validate.d.ts +3 -0
  103. package/dist/prompt/function-calling-validate.js +27 -0
  104. package/dist/prompt/function-calling-validate.js.map +1 -0
  105. package/dist/prompt/function-calling.d.ts +5 -0
  106. package/{src → dist}/prompt/function-calling.js +25 -24
  107. package/dist/prompt/function-calling.js.map +1 -0
  108. package/dist/prompt/function-defs/ask-question.d.ts +31 -0
  109. package/dist/prompt/function-defs/ask-question.js +32 -0
  110. package/dist/prompt/function-defs/ask-question.js.map +1 -0
  111. package/dist/prompt/function-defs/codegen-summary.d.ts +63 -0
  112. package/dist/prompt/function-defs/codegen-summary.js +80 -0
  113. package/dist/prompt/function-defs/codegen-summary.js.map +1 -0
  114. package/dist/prompt/function-defs/create-directory.d.ts +21 -0
  115. package/dist/prompt/function-defs/create-directory.js +22 -0
  116. package/dist/prompt/function-defs/create-directory.js.map +1 -0
  117. package/dist/prompt/function-defs/create-file.d.ts +25 -0
  118. package/dist/prompt/function-defs/create-file.js +26 -0
  119. package/dist/prompt/function-defs/create-file.js.map +1 -0
  120. package/dist/prompt/function-defs/delete-file.d.ts +21 -0
  121. package/dist/prompt/function-defs/delete-file.js +22 -0
  122. package/dist/prompt/function-defs/delete-file.js.map +1 -0
  123. package/dist/prompt/function-defs/download-file.d.ts +25 -0
  124. package/dist/prompt/function-defs/download-file.js +26 -0
  125. package/dist/prompt/function-defs/download-file.js.map +1 -0
  126. package/dist/prompt/function-defs/explanation.d.ts +17 -0
  127. package/dist/prompt/function-defs/explanation.js +18 -0
  128. package/dist/prompt/function-defs/explanation.js.map +1 -0
  129. package/dist/prompt/function-defs/generate-image.d.ts +48 -0
  130. package/dist/prompt/function-defs/generate-image.js +49 -0
  131. package/dist/prompt/function-defs/generate-image.js.map +1 -0
  132. package/dist/prompt/function-defs/get-image-assets.d.ts +20 -0
  133. package/dist/prompt/function-defs/get-image-assets.js +21 -0
  134. package/dist/prompt/function-defs/get-image-assets.js.map +1 -0
  135. package/dist/prompt/function-defs/get-source-code.d.ts +20 -0
  136. package/dist/prompt/function-defs/get-source-code.js +21 -0
  137. package/dist/prompt/function-defs/get-source-code.js.map +1 -0
  138. package/dist/prompt/function-defs/imgly-remove-background.d.ts +25 -0
  139. package/dist/prompt/function-defs/imgly-remove-background.js +26 -0
  140. package/dist/prompt/function-defs/imgly-remove-background.js.map +1 -0
  141. package/dist/prompt/function-defs/move-file.d.ts +25 -0
  142. package/dist/prompt/function-defs/move-file.js +26 -0
  143. package/dist/prompt/function-defs/move-file.js.map +1 -0
  144. package/dist/prompt/function-defs/patch-file.d.ts +25 -0
  145. package/dist/prompt/function-defs/patch-file.js +39 -0
  146. package/dist/prompt/function-defs/patch-file.js.map +1 -0
  147. package/dist/prompt/function-defs/resize-image.d.ts +36 -0
  148. package/dist/prompt/function-defs/resize-image.js +37 -0
  149. package/dist/prompt/function-defs/resize-image.js.map +1 -0
  150. package/dist/prompt/function-defs/split-image.d.ts +57 -0
  151. package/dist/prompt/function-defs/split-image.js +46 -0
  152. package/dist/prompt/function-defs/split-image.js.map +1 -0
  153. package/dist/prompt/function-defs/update-file.d.ts +25 -0
  154. package/dist/prompt/function-defs/update-file.js +26 -0
  155. package/dist/prompt/function-defs/update-file.js.map +1 -0
  156. package/dist/prompt/limits.d.ts +3 -0
  157. package/dist/prompt/limits.js +19 -0
  158. package/dist/prompt/limits.js.map +1 -0
  159. package/dist/prompt/limits.test.d.ts +1 -0
  160. package/dist/prompt/limits.test.js +35 -0
  161. package/dist/prompt/limits.test.js.map +1 -0
  162. package/dist/prompt/prompt-codegen.d.ts +4 -0
  163. package/dist/prompt/prompt-codegen.js +81 -0
  164. package/dist/prompt/prompt-codegen.js.map +1 -0
  165. package/dist/prompt/prompt-codegen.test.d.ts +1 -0
  166. package/dist/prompt/prompt-codegen.test.js +94 -0
  167. package/dist/prompt/prompt-codegen.test.js.map +1 -0
  168. package/dist/prompt/prompt-consts.d.ts +1 -0
  169. package/{src → dist}/prompt/prompt-consts.js +1 -0
  170. package/dist/prompt/prompt-consts.js.map +1 -0
  171. package/dist/prompt/prompt-service-ask-question.test.d.ts +3 -0
  172. package/dist/prompt/prompt-service-ask-question.test.js +146 -0
  173. package/dist/prompt/prompt-service-ask-question.test.js.map +1 -0
  174. package/dist/prompt/prompt-service.d.ts +13 -0
  175. package/dist/prompt/prompt-service.js +278 -0
  176. package/dist/prompt/prompt-service.js.map +1 -0
  177. package/dist/prompt/prompt-service.test.d.ts +1 -0
  178. package/dist/prompt/prompt-service.test.js +511 -0
  179. package/dist/prompt/prompt-service.test.js.map +1 -0
  180. package/dist/prompt/systemprompt.d.ts +2 -0
  181. package/dist/prompt/systemprompt.js +43 -0
  182. package/dist/prompt/systemprompt.js.map +1 -0
  183. package/dist/prompt/systemprompt.test.d.ts +2 -0
  184. package/dist/prompt/systemprompt.test.js +47 -0
  185. package/dist/prompt/systemprompt.test.js.map +1 -0
  186. package/package.json +13 -4
  187. package/bin/genaicode.js +0 -5
  188. package/src/ai-service/anthropic.js +0 -126
  189. package/src/ai-service/chat-gpt.js +0 -126
  190. package/src/ai-service/common.js +0 -49
  191. package/src/ai-service/common.test.js +0 -107
  192. package/src/ai-service/dall-e.js +0 -50
  193. package/src/ai-service/vertex-ai-claude.js +0 -99
  194. package/src/ai-service/vertex-ai-imagen.js +0 -78
  195. package/src/ai-service/vertex-ai.js +0 -156
  196. package/src/cli/cli-options.js +0 -132
  197. package/src/cli/cli-options.test.js +0 -50
  198. package/src/cli/cli-params.js +0 -114
  199. package/src/cli/cli-params.test.js +0 -43
  200. package/src/cli/service-autodetect.js +0 -11
  201. package/src/cli/service-autodetect.test.js +0 -43
  202. package/src/cli/validate-cli-params.js +0 -137
  203. package/src/cli/validate-cli-params.test.js +0 -134
  204. package/src/files/file-utils.js +0 -7
  205. package/src/files/file-utils.test.js +0 -21
  206. package/src/files/find-files.js +0 -86
  207. package/src/files/read-files.js +0 -65
  208. package/src/files/read-files.test.js +0 -103
  209. package/src/files/temp-buffer.js +0 -13
  210. package/src/files/update-files.js +0 -205
  211. package/src/images/ensure-alpha.js +0 -5
  212. package/src/images/imgly-remove-background.js +0 -23
  213. package/src/images/resize-image.js +0 -23
  214. package/src/images/split-image.js +0 -26
  215. package/src/main/codegen.js +0 -120
  216. package/src/main/codegen.test.js +0 -335
  217. package/src/main/config-lib.js +0 -33
  218. package/src/main/config-lib.test.js +0 -80
  219. package/src/prompt/function-calling-validate.js +0 -25
  220. package/src/prompt/function-defs/ask-question.js +0 -33
  221. package/src/prompt/function-defs/codegen-summary.js +0 -87
  222. package/src/prompt/function-defs/create-directory.js +0 -21
  223. package/src/prompt/function-defs/create-file.js +0 -26
  224. package/src/prompt/function-defs/delete-file.js +0 -21
  225. package/src/prompt/function-defs/download-file.js +0 -25
  226. package/src/prompt/function-defs/explanation.js +0 -17
  227. package/src/prompt/function-defs/generate-image.js +0 -51
  228. package/src/prompt/function-defs/get-image-assets.js +0 -21
  229. package/src/prompt/function-defs/get-source-code.js +0 -21
  230. package/src/prompt/function-defs/imgly-remove-background.js +0 -25
  231. package/src/prompt/function-defs/move-file.js +0 -25
  232. package/src/prompt/function-defs/patch-file.js +0 -39
  233. package/src/prompt/function-defs/resize-image.js +0 -36
  234. package/src/prompt/function-defs/split-image.js +0 -45
  235. package/src/prompt/function-defs/update-file.js +0 -26
  236. package/src/prompt/limits.js +0 -23
  237. package/src/prompt/limits.test.js +0 -40
  238. package/src/prompt/prompt-codegen.js +0 -106
  239. package/src/prompt/prompt-codegen.test.js +0 -116
  240. package/src/prompt/prompt-service-ask-question.test.js +0 -163
  241. package/src/prompt/prompt-service.js +0 -335
  242. package/src/prompt/prompt-service.test.js +0 -602
  243. package/src/prompt/systemprompt.js +0 -39
  244. package/src/prompt/systemprompt.test.js +0 -64
@@ -0,0 +1,85 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import { printTokenUsageAndCost, processFunctionCalls } from './common.js';
3
+ import { functionDefs } from '../prompt/function-calling.js';
4
+ // Mock cli-params.js
5
+ vi.mock('../cli/cli-params.js', () => ({
6
+ chatGpt: true,
7
+ anthropic: false,
8
+ vertexAi: false,
9
+ vertexAiClaude: false,
10
+ temperature: 0.7,
11
+ cheap: false,
12
+ geminiBlockNone: false,
13
+ requireExplanations: false,
14
+ vision: false,
15
+ }));
16
+ describe('printTokenUsageAndCost', () => {
17
+ let consoleLogSpy;
18
+ beforeEach(() => {
19
+ consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
20
+ });
21
+ afterEach(() => {
22
+ consoleLogSpy.mockRestore();
23
+ });
24
+ it('should correctly log token usage and estimated cost', () => {
25
+ const usage = {
26
+ inputTokens: 100,
27
+ outputTokens: 50,
28
+ totalTokens: 150,
29
+ };
30
+ const inputCostPerToken = 0.0001;
31
+ const outputCostPerToken = 0.0002;
32
+ printTokenUsageAndCost(usage, inputCostPerToken, outputCostPerToken);
33
+ expect(consoleLogSpy).toHaveBeenCalledTimes(5);
34
+ expect(consoleLogSpy).toHaveBeenCalledWith('Token Usage:');
35
+ expect(consoleLogSpy).toHaveBeenCalledWith(' - Input tokens: ', 100);
36
+ expect(consoleLogSpy).toHaveBeenCalledWith(' - Output tokens: ', 50);
37
+ expect(consoleLogSpy).toHaveBeenCalledWith(' - Total tokens: ', 150);
38
+ expect(consoleLogSpy).toHaveBeenCalledWith(' - Estimated cost: ', '0.020000', ' USD');
39
+ });
40
+ it('should handle zero tokens correctly', () => {
41
+ const usage = {
42
+ inputTokens: 0,
43
+ outputTokens: 0,
44
+ totalTokens: 0,
45
+ };
46
+ const inputCostPerToken = 0.0001;
47
+ const outputCostPerToken = 0.0002;
48
+ printTokenUsageAndCost(usage, inputCostPerToken, outputCostPerToken);
49
+ expect(consoleLogSpy).toHaveBeenCalledWith(' - Estimated cost: ', '0.000000', ' USD');
50
+ });
51
+ });
52
+ describe('processFunctionCalls', () => {
53
+ it('should process valid function calls correctly', () => {
54
+ const validFunctionCalls = [
55
+ { name: 'explanation', args: { text: 'This is an explanation' } },
56
+ { name: functionDefs[0].name, args: {} },
57
+ ];
58
+ const result = processFunctionCalls(validFunctionCalls);
59
+ expect(result).toEqual(validFunctionCalls);
60
+ });
61
+ it('should throw an error for unknown function names', () => {
62
+ const invalidFunctionCalls = [{ name: 'unknownFunction', args: {} }];
63
+ expect(() => processFunctionCalls(invalidFunctionCalls)).toThrow('Unknown function name: unknownFunction');
64
+ });
65
+ it('should correctly handle explanations', () => {
66
+ const consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
67
+ const functionCallsWithExplanation = [
68
+ { name: 'explanation', args: { text: 'This is an explanation' } },
69
+ { name: functionDefs[0].name, args: {} },
70
+ ];
71
+ processFunctionCalls(functionCallsWithExplanation);
72
+ expect(consoleLogSpy).toHaveBeenCalledWith('Explanations:', ['This is an explanation']);
73
+ consoleLogSpy.mockRestore();
74
+ });
75
+ it('should return all function calls including explanations', () => {
76
+ const functionCalls = [
77
+ { name: 'explanation', args: { text: 'This is an explanation' } },
78
+ { name: functionDefs[0].name, args: {} },
79
+ ];
80
+ const result = processFunctionCalls(functionCalls);
81
+ expect(result).toEqual(functionCalls);
82
+ expect(result.length).toBe(2);
83
+ });
84
+ });
85
+ //# sourceMappingURL=common.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.test.js","sourceRoot":"","sources":["../../src/ai-service/common.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ interface ImageSize {
2
+ width: number;
3
+ height: number;
4
+ }
5
+ /**
6
+ * Generate an image using OpenAI's DALL-E model and save it to a file
7
+ * @param {string} prompt - The description of the image to generate
8
+ * @param {string|undefined} contextImagePath - The image to be used as a context
9
+ * @param {ImageSize} size - The size of the image to generate
10
+ * @param {boolean} cheap - Whether to use a cheaper model
11
+ * @returns {Promise<string>} - The url of the image
12
+ */
13
+ export declare function generateImage(prompt: string, contextImagePath: string | undefined, size: ImageSize, cheap?: boolean): Promise<string>;
14
+ export {};
@@ -0,0 +1,47 @@
1
+ import OpenAI, { toFile } from 'openai';
2
+ import { setTempBuffer } from '../files/temp-buffer.js';
3
+ import { resizeImageBuffer } from '../images/resize-image.js';
4
+ import { ensureAlpha } from '../images/ensure-alpha.js';
5
+ /**
6
+ * Generate an image using OpenAI's DALL-E model and save it to a file
7
+ * @param {string} prompt - The description of the image to generate
8
+ * @param {string|undefined} contextImagePath - The image to be used as a context
9
+ * @param {ImageSize} size - The size of the image to generate
10
+ * @param {boolean} cheap - Whether to use a cheaper model
11
+ * @returns {Promise<string>} - The url of the image
12
+ */
13
+ export async function generateImage(prompt, contextImagePath, size, cheap = false) {
14
+ const openai = new OpenAI();
15
+ try {
16
+ const model = contextImagePath ? 'dall-e-2' : cheap ? 'dall-e-2' : 'dall-e-3';
17
+ console.log(`Using DALL-E model: ${model}`);
18
+ const options = {
19
+ model: model,
20
+ prompt: prompt,
21
+ n: 1,
22
+ size: '1024x1024',
23
+ response_format: 'url',
24
+ };
25
+ const response = contextImagePath
26
+ ? await openai.images.edit({
27
+ ...options,
28
+ image: await toFile(await ensureAlpha(contextImagePath)),
29
+ })
30
+ : await openai.images.generate(options);
31
+ let imageUrl = response.data[0].url;
32
+ if (size.width !== 1024 || size.height !== 1024) {
33
+ console.log('Resizing image to desired size', size);
34
+ const imageResponse = await fetch(imageUrl);
35
+ const arrayBuffer = await imageResponse.arrayBuffer();
36
+ const buffer = Buffer.from(arrayBuffer);
37
+ imageUrl = setTempBuffer(await resizeImageBuffer(buffer, size));
38
+ }
39
+ console.log(`Image generated, url: ${imageUrl}`);
40
+ return imageUrl;
41
+ }
42
+ catch (error) {
43
+ console.error('Error generating image:', error);
44
+ throw error;
45
+ }
46
+ }
47
+ //# sourceMappingURL=dall-e.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dall-e.js","sourceRoot":"","sources":["../../src/ai-service/dall-e.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAOxD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAc,EACd,gBAAoC,EACpC,IAAe,EACf,KAAK,GAAG,KAAK;IAEb,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;IAE5B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,EAAE,CAAC,CAAC;QAE5C,MAAM,OAAO,GAAsC;YACjD,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,MAAM;YACd,CAAC,EAAE,CAAC;YACJ,IAAI,EAAE,WAAW;YACjB,eAAe,EAAE,KAAK;SACvB,CAAC;QAEF,MAAM,QAAQ,GAAG,gBAAgB;YAC/B,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;gBACvB,GAAG,OAAO;gBACV,KAAK,EAAE,MAAM,MAAM,CAAC,MAAM,WAAW,CAAC,gBAAgB,CAAC,CAAC;aACxB,CAAC;YACrC,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE1C,IAAI,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAI,CAAC;QAErC,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,IAAI,CAAC,CAAC;YACpD,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAExC,QAAQ,GAAG,aAAa,CAAC,MAAM,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;QACjD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAChD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { FunctionCall, PromptItem, FunctionDef } from './common.js';
2
+ /**
3
+ * This function generates content using the Anthropic Claude model via Vertex AI.
4
+ */
5
+ export declare function generateContent(prompt: PromptItem[], functionDefs: FunctionDef[], requiredFunctionName: string | null, temperature: number, cheap?: boolean): Promise<FunctionCall[]>;
@@ -0,0 +1,93 @@
1
+ import { AnthropicVertex } from '@anthropic-ai/vertex-sdk';
2
+ import { printTokenUsageAndCost, processFunctionCalls } from './common.js';
3
+ /**
4
+ * This function generates content using the Anthropic Claude model via Vertex AI.
5
+ */
6
+ export async function generateContent(prompt, functionDefs, requiredFunctionName, temperature, cheap = false) {
7
+ const projectId = process.env.GOOGLE_CLOUD_PROJECT;
8
+ const region = process.env.GOOGLE_CLOUD_REGION;
9
+ if (!projectId || !region) {
10
+ throw new Error('GOOGLE_CLOUD_PROJECT and GOOGLE_CLOUD_REGION environment variables must be set');
11
+ }
12
+ const client = new AnthropicVertex({
13
+ projectId,
14
+ region,
15
+ });
16
+ const messages = prompt
17
+ .filter((item) => item.type !== 'systemPrompt')
18
+ .map((item) => {
19
+ if (item.type === 'user') {
20
+ return {
21
+ role: 'user',
22
+ content: [
23
+ ...(item.functionResponses ?? []).map((response) => ({
24
+ type: 'tool_result',
25
+ tool_use_id: response.call_id ?? response.name,
26
+ content: response.content,
27
+ is_error: response.isError === true,
28
+ })),
29
+ ...(item.images ?? []).map((image) => ({
30
+ type: 'image',
31
+ source: {
32
+ type: 'base64',
33
+ media_type: image.mediaType,
34
+ data: image.base64url,
35
+ },
36
+ })),
37
+ { type: 'text', text: item.text },
38
+ ],
39
+ };
40
+ }
41
+ else if (item.type === 'assistant') {
42
+ return {
43
+ role: 'assistant',
44
+ content: [
45
+ ...(item.text ? [{ type: 'text', text: item.text }] : []),
46
+ ...item.functionCalls.map((call) => ({
47
+ type: 'tool_use',
48
+ id: call.id ?? call.name,
49
+ name: call.name,
50
+ input: call.args ?? {},
51
+ })),
52
+ ],
53
+ };
54
+ }
55
+ });
56
+ const model = cheap ? 'claude-3-haiku@20240307' : 'claude-3-5-sonnet@20240620';
57
+ console.log(`Using Vertex AI Claude model: ${model}`);
58
+ const response = await client.messages.create({
59
+ model: model,
60
+ max_tokens: cheap ? 4096 : 8192,
61
+ temperature: temperature,
62
+ system: prompt.find((item) => item.type === 'systemPrompt').systemPrompt,
63
+ messages: messages,
64
+ tools: functionDefs.map((fd) => ({
65
+ name: fd.name,
66
+ description: fd.description,
67
+ input_schema: fd.parameters,
68
+ })),
69
+ tool_choice: requiredFunctionName
70
+ ? { type: 'tool', name: requiredFunctionName }
71
+ : { type: 'any' },
72
+ });
73
+ // Print token usage for Anthropic Vertex AI
74
+ const usage = {
75
+ inputTokens: response.usage.input_tokens,
76
+ outputTokens: response.usage.output_tokens,
77
+ totalTokens: response.usage.input_tokens + response.usage.output_tokens,
78
+ };
79
+ printTokenUsageAndCost(usage, 3 / 1000 / 1000, 15 / 1000 / 1000);
80
+ const responseMessages = response.content.filter((item) => item.type !== 'tool_use');
81
+ if (responseMessages.length > 0) {
82
+ console.log('Response messages', responseMessages);
83
+ }
84
+ const functionCalls = response.content
85
+ .filter((item) => item.type === 'tool_use')
86
+ .map((item) => ({
87
+ id: item.id,
88
+ name: item.name,
89
+ args: item.input,
90
+ }));
91
+ return processFunctionCalls(functionCalls);
92
+ }
93
+ //# sourceMappingURL=vertex-ai-claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vertex-ai-claude.js","sourceRoot":"","sources":["../../src/ai-service/vertex-ai-claude.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ interface ImageSize {
2
+ width: number;
3
+ height: number;
4
+ }
5
+ /**
6
+ * Generate an image using Vertex AI's Imagen model and return the image URL
7
+ * @param {string} prompt - The description of the image to generate
8
+ * @param {string|undefined} contextImagePath - The image to be used as a context
9
+ * @param {ImageSize} size - The size of the image to generate
10
+ * @param {boolean} cheap - Whether to use a cheaper model
11
+ * @returns {Promise<string>} - The url of the generated image
12
+ */
13
+ export declare function generateImage(prompt: string, contextImagePath: string | undefined, size: ImageSize, cheap?: boolean): Promise<string>;
14
+ export {};
@@ -0,0 +1,74 @@
1
+ import fs from 'fs';
2
+ import mime from 'mime-types';
3
+ import { PredictionServiceClient, helpers } from '@google-cloud/aiplatform';
4
+ import { setTempBuffer } from '../files/temp-buffer.js';
5
+ import { resizeImageBuffer } from '../images/resize-image.js';
6
+ /**
7
+ * Generate an image using Vertex AI's Imagen model and return the image URL
8
+ * @param {string} prompt - The description of the image to generate
9
+ * @param {string|undefined} contextImagePath - The image to be used as a context
10
+ * @param {ImageSize} size - The size of the image to generate
11
+ * @param {boolean} cheap - Whether to use a cheaper model
12
+ * @returns {Promise<string>} - The url of the generated image
13
+ */
14
+ export async function generateImage(prompt, contextImagePath, size, cheap = false) {
15
+ // Initialize the PredictionServiceClient
16
+ const client = new PredictionServiceClient({
17
+ apiEndpoint: `${process.env.GOOGLE_CLOUD_REGION}-aiplatform.googleapis.com`,
18
+ });
19
+ // Set the project and location
20
+ const projectId = process.env.GOOGLE_CLOUD_PROJECT;
21
+ const location = process.env.GOOGLE_CLOUD_REGION;
22
+ if (!projectId || !location) {
23
+ throw new Error('GOOGLE_CLOUD_PROJECT and GOOGLE_CLOUD_REGION environment variables must be set');
24
+ }
25
+ // Set the model name based on the cheap parameter
26
+ const modelName = contextImagePath
27
+ ? 'imagegeneration@002'
28
+ : cheap
29
+ ? 'imagen-3.0-fast-generate-001'
30
+ : 'imagen-3.0-generate-001';
31
+ console.log(`Using Vertex AI Imagen model: ${modelName}`);
32
+ try {
33
+ // Prepare the request
34
+ const instance = contextImagePath
35
+ ? helpers.toValue({
36
+ prompt,
37
+ image: {
38
+ bytesBase64Encoded: fs.readFileSync(contextImagePath, 'base64'),
39
+ mediaType: mime.lookup(contextImagePath) ?? 'application/octet-stream',
40
+ },
41
+ })
42
+ : helpers.toValue({ prompt });
43
+ const request = {
44
+ endpoint: `projects/${projectId}/locations/${location}/publishers/google/models/${modelName}`,
45
+ instances: [instance],
46
+ parameters: helpers.toValue({
47
+ sampleCount: 1,
48
+ safetySetting: 'block_most',
49
+ personGeneration: 'allow_adult',
50
+ includeRaiReason: true,
51
+ language: 'auto',
52
+ aspectRatio: '1:1',
53
+ addWatermark: false,
54
+ }),
55
+ };
56
+ // Make the prediction request
57
+ const [response] = (await client.predict(request));
58
+ if (response.predictions && response.predictions.length > 0 && response.predictions[0]) {
59
+ const value = response.predictions[0];
60
+ const prediction = helpers.fromValue(value);
61
+ if (prediction.bytesBase64Encoded) {
62
+ console.log(`Image generated successfully, resizing to desired dimension`, size);
63
+ const buffer = Buffer.from(prediction.bytesBase64Encoded, 'base64');
64
+ return setTempBuffer(await resizeImageBuffer(buffer, size));
65
+ }
66
+ }
67
+ throw new Error('No image generated in the response');
68
+ }
69
+ catch (error) {
70
+ console.error('Error generating image:', error);
71
+ throw error;
72
+ }
73
+ }
74
+ //# sourceMappingURL=vertex-ai-imagen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vertex-ai-imagen.js","sourceRoot":"","sources":["../../src/ai-service/vertex-ai-imagen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { FunctionCall, PromptItem, FunctionDef } from './common.js';
2
+ /**
3
+ * This function generates content using the Gemini Pro model.
4
+ */
5
+ export declare function generateContent(prompt: PromptItem[], functionDefs: FunctionDef[], requiredFunctionName: string | null, temperature: number, cheap?: boolean): Promise<FunctionCall[]>;
6
+ export declare function getGenModel(systemPrompt: string, temperature: number, cheap?: boolean): import("@google-cloud/vertexai").GenerativeModelPreview;
7
+ export declare function verifyVertexMonkeyPatch(): Promise<boolean>;
@@ -0,0 +1,147 @@
1
+ import assert from 'node:assert';
2
+ import { VertexAI, HarmCategory, HarmBlockThreshold, } from '@google-cloud/vertexai';
3
+ import { printTokenUsageAndCost, processFunctionCalls } from './common.js';
4
+ import { geminiBlockNone } from '../cli/cli-params.js';
5
+ /**
6
+ * This function generates content using the Gemini Pro model.
7
+ */
8
+ export async function generateContent(prompt, functionDefs, requiredFunctionName, temperature, cheap = false) {
9
+ const messages = prompt
10
+ .filter((item) => item.type === 'user' || item.type === 'assistant')
11
+ .map((item) => {
12
+ if (item.type === 'user') {
13
+ const content = {
14
+ role: 'user',
15
+ parts: [
16
+ ...(item.functionResponses ?? []).map((response) => ({
17
+ functionResponse: {
18
+ name: response.name,
19
+ response: { name: response.name, content: response.content },
20
+ },
21
+ })),
22
+ ...(item.images ?? []).map((image) => ({
23
+ inlineData: {
24
+ mimeType: image.mediaType,
25
+ data: image.base64url,
26
+ },
27
+ })),
28
+ { text: item.text },
29
+ ],
30
+ };
31
+ return content;
32
+ }
33
+ else {
34
+ assert(item.type === 'assistant');
35
+ const content = {
36
+ role: 'model',
37
+ parts: [
38
+ ...(item.text ? [{ text: item.text }] : []),
39
+ ...item.functionCalls.map((call) => ({
40
+ functionCall: {
41
+ name: call.name,
42
+ args: call.args ?? {},
43
+ },
44
+ })),
45
+ ],
46
+ };
47
+ return content;
48
+ }
49
+ });
50
+ const req = {
51
+ contents: messages,
52
+ tools: [
53
+ {
54
+ functionDeclarations: functionDefs,
55
+ },
56
+ ],
57
+ // @ts-expect-error (known issue)
58
+ toolConfig: {
59
+ functionCallingConfig: {
60
+ mode: cheap ? undefined : 'ANY',
61
+ ...(!cheap && requiredFunctionName ? { allowedFunctionNames: [requiredFunctionName] } : {}),
62
+ },
63
+ },
64
+ };
65
+ const model = await getGenModel(prompt.find((item) => item.type === 'systemPrompt').systemPrompt, temperature, cheap);
66
+ assert(await verifyVertexMonkeyPatch(), 'Vertex AI Tool Config was not monkey patched');
67
+ const result = await model.generateContent(req);
68
+ // Print token usage
69
+ const usageMetadata = result.response.usageMetadata;
70
+ const usage = {
71
+ inputTokens: usageMetadata.promptTokenCount,
72
+ outputTokens: usageMetadata.candidatesTokenCount,
73
+ totalTokens: usageMetadata.totalTokenCount,
74
+ };
75
+ printTokenUsageAndCost(usage, 0.000125 / 1000, 0.000375 / 1000);
76
+ if (result.response.promptFeedback) {
77
+ console.log('Prompt feedback:');
78
+ console.log(JSON.stringify(result.response.promptFeedback, null, 2));
79
+ }
80
+ if (!result.response.candidates?.length) {
81
+ console.log('Response:', result);
82
+ throw new Error('No candidates found');
83
+ }
84
+ const functionCalls = result.response.candidates
85
+ .map((candidate) => candidate.content.parts?.map((part) => part.functionCall))
86
+ .flat()
87
+ .filter((functionCall) => !!functionCall)
88
+ .map((call) => ({ name: call.name, args: call.args }));
89
+ if (functionCalls.length === 0) {
90
+ const textResponse = result.response.candidates
91
+ .map((candidate) => candidate.content.parts?.map((part) => part.text))
92
+ .flat()
93
+ .filter((text) => !!text)
94
+ .join('\n');
95
+ console.log('No function calls, output text response if it exists:', textResponse);
96
+ }
97
+ return processFunctionCalls(functionCalls);
98
+ }
99
+ // A function to get the generative model
100
+ // Modified to accept temperature parameter and cheap flag
101
+ export function getGenModel(systemPrompt, temperature, cheap = false) {
102
+ // Initialize Vertex with your Cloud project and location
103
+ const vertex_ai = new VertexAI({});
104
+ const model = cheap ? 'gemini-1.5-flash-001' : 'gemini-1.5-pro-001';
105
+ console.log(`Using Vertex AI model: ${model}`);
106
+ // Instantiate the models
107
+ return vertex_ai.preview.getGenerativeModel({
108
+ model: model,
109
+ generationConfig: {
110
+ maxOutputTokens: 8192,
111
+ temperature: temperature,
112
+ topP: 0.95,
113
+ },
114
+ safetySettings: [
115
+ {
116
+ category: HarmCategory.HARM_CATEGORY_HATE_SPEECH,
117
+ threshold: geminiBlockNone ? HarmBlockThreshold.BLOCK_NONE : HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
118
+ },
119
+ {
120
+ category: HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
121
+ threshold: geminiBlockNone ? HarmBlockThreshold.BLOCK_NONE : HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
122
+ },
123
+ {
124
+ category: HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
125
+ threshold: geminiBlockNone ? HarmBlockThreshold.BLOCK_NONE : HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
126
+ },
127
+ {
128
+ category: HarmCategory.HARM_CATEGORY_HARASSMENT,
129
+ threshold: geminiBlockNone ? HarmBlockThreshold.BLOCK_NONE : HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
130
+ },
131
+ ],
132
+ systemInstruction: {
133
+ role: 'system',
134
+ parts: [
135
+ {
136
+ text: systemPrompt,
137
+ },
138
+ ],
139
+ },
140
+ });
141
+ }
142
+ export async function verifyVertexMonkeyPatch() {
143
+ return (await import('@google-cloud/vertexai/build/src/functions/generate_content.js')).generateContent
144
+ .toString()
145
+ .includes('// MONKEY PATCH TOOL_CONFIG');
146
+ }
147
+ //# sourceMappingURL=vertex-ai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vertex-ai.js","sourceRoot":"","sources":["../../src/ai-service/vertex-ai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ interface CliOption {
2
+ name: string;
3
+ description: string;
4
+ }
5
+ declare const cliOptions: CliOption[];
6
+ /**
7
+ * Print the help message with all available CLI options
8
+ */
9
+ export declare function printHelpMessage(): void;
10
+ export { cliOptions };