genaicode 0.6.0 → 0.7.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.
- package/README.md +1 -3
- package/dist/ai-service/ai-studio.js +7 -1
- package/dist/ai-service/ai-studio.js.map +1 -1
- package/dist/ai-service/anthropic.js +49 -19
- package/dist/ai-service/anthropic.js.map +1 -1
- package/dist/ai-service/chat-gpt.js +28 -11
- package/dist/ai-service/chat-gpt.js.map +1 -1
- package/dist/ai-service/common.d.ts +5 -4
- package/dist/ai-service/common.js +3 -4
- package/dist/ai-service/common.js.map +1 -1
- package/dist/ai-service/common.test.js +1 -1
- package/dist/ai-service/vertex-ai-claude.js +1 -1
- package/dist/ai-service/vertex-ai-claude.js.map +1 -1
- package/dist/ai-service/vertex-ai.js +7 -1
- package/dist/ai-service/vertex-ai.js.map +1 -1
- package/dist/cli/cli-options.js +0 -12
- package/dist/cli/cli-options.js.map +1 -1
- package/dist/cli/cli-params.d.ts +0 -3
- package/dist/cli/cli-params.js +0 -9
- package/dist/cli/cli-params.js.map +1 -1
- package/dist/cli/validate-cli-params.js +1 -7
- package/dist/cli/validate-cli-params.js.map +1 -1
- package/dist/cli/validate-cli-params.test.js +1 -1
- package/dist/cli/validate-cli-params.test.js.map +1 -1
- package/dist/eval/codegen-summary.test.d.ts +1 -0
- package/dist/eval/codegen-summary.test.js +91 -0
- package/dist/eval/codegen-summary.test.js.map +1 -0
- package/dist/eval/current-prompt-plugin.d.ts +3 -0
- package/dist/eval/current-prompt-plugin.js +10 -0
- package/dist/eval/current-prompt-plugin.js.map +1 -0
- package/dist/eval/data/current-prompt.d.ts +73 -0
- package/dist/eval/data/current-prompt.js +104 -0
- package/dist/eval/data/current-prompt.js.map +1 -0
- package/dist/eval/data/prompt-assistant-image.d.ts +49 -0
- package/dist/eval/data/prompt-assistant-image.js +67 -0
- package/dist/eval/data/prompt-assistant-image.js.map +1 -0
- package/dist/eval/data/prompt3.d.ts +34 -0
- package/dist/eval/data/prompt3.js +71 -0
- package/dist/eval/data/prompt3.js.map +1 -0
- package/dist/eval/prompt-debug.test.d.ts +1 -0
- package/dist/eval/prompt-debug.test.js +71 -0
- package/dist/eval/prompt-debug.test.js.map +1 -0
- package/dist/eval/prompt2.d.ts +34 -0
- package/dist/eval/prompt2.js +125 -0
- package/dist/eval/prompt2.js.map +1 -0
- package/dist/files/read-files.d.ts +2 -2
- package/dist/files/read-files.js +13 -7
- package/dist/files/read-files.js.map +1 -1
- package/dist/files/read-files.test.js +12 -6
- package/dist/files/read-files.test.js.map +1 -1
- package/dist/files/source-code-tree.d.ts +12 -0
- package/dist/files/source-code-tree.js +27 -0
- package/dist/files/source-code-tree.js.map +1 -0
- package/dist/main/codegen-types.d.ts +9 -4
- package/dist/main/codegen-utils.d.ts +1 -1
- package/dist/main/codegen-utils.js +1 -3
- package/dist/main/codegen-utils.js.map +1 -1
- package/dist/main/codegen.ai-services.test.d.ts +3 -0
- package/dist/main/codegen.ai-services.test.js +198 -0
- package/dist/main/codegen.ai-services.test.js.map +1 -0
- package/dist/main/codegen.cli-options.test.d.ts +3 -0
- package/dist/main/codegen.cli-options.test.js +171 -0
- package/dist/main/codegen.cli-options.test.js.map +1 -0
- package/dist/main/codegen.image-generation.test.d.ts +3 -0
- package/dist/main/codegen.image-generation.test.js +187 -0
- package/dist/main/codegen.image-generation.test.js.map +1 -0
- package/dist/main/codegen.js +4 -7
- package/dist/main/codegen.js.map +1 -1
- package/dist/main/codegen.test-utils.d.ts +81 -0
- package/dist/main/codegen.test-utils.js +88 -0
- package/dist/main/codegen.test-utils.js.map +1 -0
- package/dist/main/codegen.test.js +47 -28
- package/dist/main/codegen.test.js.map +1 -1
- package/dist/main/common/content-bus-types.d.ts +6 -0
- package/dist/main/common/content-bus.d.ts +2 -2
- package/dist/main/common/content-bus.js +3 -1
- package/dist/main/common/content-bus.js.map +1 -1
- package/dist/main/common/user-actions.d.ts +8 -2
- package/dist/main/common/user-actions.js.map +1 -1
- package/dist/main/interactive/codegen-interactive.js +0 -4
- package/dist/main/interactive/codegen-interactive.js.map +1 -1
- package/dist/main/interactive/codegen-interactive.test.js +0 -6
- package/dist/main/interactive/codegen-interactive.test.js.map +1 -1
- package/dist/main/interactive/common.d.ts +1 -1
- package/dist/main/interactive/common.js +0 -2
- package/dist/main/interactive/common.js.map +1 -1
- package/dist/main/interactive/configure.js +0 -2
- package/dist/main/interactive/configure.js.map +1 -1
- package/dist/main/interactive/help.js +0 -2
- package/dist/main/interactive/help.js.map +1 -1
- package/dist/main/interactive/task-file.js +1 -1
- package/dist/main/interactive/task-file.js.map +1 -1
- package/dist/main/interactive/text-prompt.js +1 -1
- package/dist/main/interactive/text-prompt.js.map +1 -1
- package/dist/main/interactive/user-action-handlers.js +4 -2
- package/dist/main/interactive/user-action-handlers.js.map +1 -1
- package/dist/main/plugin-loader.d.ts +2 -1
- package/dist/main/plugin-loader.js +8 -0
- package/dist/main/plugin-loader.js.map +1 -1
- package/dist/main/ui/backend/api.js +9 -3
- package/dist/main/ui/backend/api.js.map +1 -1
- package/dist/main/ui/backend/service.d.ts +2 -1
- package/dist/main/ui/backend/service.js +6 -3
- package/dist/main/ui/backend/service.js.map +1 -1
- package/dist/main/ui/frontend/assets/{index-Dk_qaEQg.js → index-5e3ykhy6.js} +129 -103
- package/dist/main/ui/frontend/index.html +1 -1
- package/dist/main/ui/user-action-handlers.js +1 -1
- package/dist/main/ui/user-action-handlers.js.map +1 -1
- package/dist/prompt/function-calling.js +8 -3
- package/dist/prompt/function-calling.js.map +1 -1
- package/dist/prompt/function-defs/ask-question.d.ts +5 -0
- package/dist/prompt/function-defs/ask-question.js +140 -60
- package/dist/prompt/function-defs/ask-question.js.map +1 -1
- package/dist/prompt/function-defs/codegen-planning.d.ts +8 -0
- package/dist/prompt/function-defs/codegen-planning.js +50 -0
- package/dist/prompt/function-defs/codegen-planning.js.map +1 -0
- package/dist/prompt/function-defs/codegen-summary.js +2 -2
- package/dist/prompt/function-defs/codegen-summary.js.map +1 -1
- package/dist/prompt/function-defs/get-source-code.js +32 -2
- package/dist/prompt/function-defs/get-source-code.js.map +1 -1
- package/dist/prompt/function-defs/optimize-context.js +35 -12
- package/dist/prompt/function-defs/optimize-context.js.map +1 -1
- package/dist/prompt/limits.js +2 -2
- package/dist/prompt/limits.js.map +1 -1
- package/dist/prompt/limits.test.js +3 -3
- package/dist/prompt/limits.test.js.map +1 -1
- package/dist/prompt/prompt-codegen.js +7 -79
- package/dist/prompt/prompt-codegen.js.map +1 -1
- package/dist/prompt/prompt-codegen.test.js +3 -10
- package/dist/prompt/prompt-codegen.test.js.map +1 -1
- package/dist/prompt/prompt-service-ask-question.test.js +26 -81
- package/dist/prompt/prompt-service-ask-question.test.js.map +1 -1
- package/dist/prompt/prompt-service.ai-services.test.d.ts +1 -0
- package/dist/prompt/prompt-service.ai-services.test.js +149 -0
- package/dist/prompt/prompt-service.ai-services.test.js.map +1 -0
- package/dist/prompt/prompt-service.context-optimization.test.d.ts +1 -0
- package/dist/prompt/prompt-service.context-optimization.test.js +212 -0
- package/dist/prompt/prompt-service.context-optimization.test.js.map +1 -0
- package/dist/prompt/prompt-service.image-handling.test.d.ts +1 -0
- package/dist/prompt/prompt-service.image-handling.test.js +212 -0
- package/dist/prompt/prompt-service.image-handling.test.js.map +1 -0
- package/dist/prompt/prompt-service.js +36 -29
- package/dist/prompt/prompt-service.js.map +1 -1
- package/dist/prompt/prompt-service.test-utils.d.ts +66 -0
- package/dist/prompt/prompt-service.test-utils.js +169 -0
- package/dist/prompt/prompt-service.test-utils.js.map +1 -0
- package/dist/prompt/prompt-service.test.js +96 -20
- package/dist/prompt/prompt-service.test.js.map +1 -1
- package/dist/prompt/prompt-service.validation-recovery.test.d.ts +1 -0
- package/dist/prompt/prompt-service.validation-recovery.test.js +263 -0
- package/dist/prompt/prompt-service.validation-recovery.test.js.map +1 -0
- package/dist/prompt/static-prompts.d.ts +16 -0
- package/dist/prompt/static-prompts.js +22 -0
- package/dist/prompt/static-prompts.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/cancel-code-generation.js +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/cancel-code-generation.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/confirm-code-generation.d.ts +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/confirm-code-generation.js +7 -4
- package/dist/prompt/steps/step-ask-question/handlers/confirm-code-generation.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/context-optimization.js +6 -4
- package/dist/prompt/steps/step-ask-question/handlers/context-optimization.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/default-action.js +1 -2
- package/dist/prompt/steps/step-ask-question/handlers/default-action.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-request-answer-with-image.d.ts +2 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-request-answer-with-image.js +86 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-request-answer-with-image.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-send-message-with-image.d.ts +2 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-send-message-with-image.js +103 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-send-message-with-image.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-send-message.d.ts +2 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-send-message.js +22 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-send-message.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/handler-utils.d.ts +0 -0
- package/dist/prompt/steps/step-ask-question/handlers/handler-utils.js +2 -0
- package/dist/prompt/steps/step-ask-question/handlers/handler-utils.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/remove-files-from-context.d.ts +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/remove-files-from-context.js +58 -13
- package/dist/prompt/steps/step-ask-question/handlers/remove-files-from-context.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/request-files-content.d.ts +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/request-files-content.js +110 -10
- package/dist/prompt/steps/step-ask-question/handlers/request-files-content.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/request-permissions.d.ts +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/request-permissions.js +49 -24
- package/dist/prompt/steps/step-ask-question/handlers/request-permissions.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/start-code-generation.js +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/start-code-generation.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/step-ask-question-reflect.js +1 -0
- package/dist/prompt/steps/step-ask-question/step-ask-question-reflect.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/step-ask-question-types.d.ts +22 -19
- package/dist/prompt/steps/step-ask-question/step-ask-question.d.ts +2 -4
- package/dist/prompt/steps/step-ask-question/step-ask-question.js +18 -29
- package/dist/prompt/steps/step-ask-question/step-ask-question.js.map +1 -1
- package/dist/prompt/steps/step-codegen-planning.d.ts +10 -0
- package/dist/prompt/steps/step-codegen-planning.js +69 -0
- package/dist/prompt/steps/step-codegen-planning.js.map +1 -0
- package/dist/prompt/steps/step-context-optimization.js +110 -80
- package/dist/prompt/steps/step-context-optimization.js.map +1 -1
- package/dist/prompt/steps/step-context-optimization.test.d.ts +2 -0
- package/dist/prompt/steps/step-context-optimization.test.js +456 -0
- package/dist/prompt/steps/step-context-optimization.test.js.map +1 -0
- package/dist/prompt/steps/step-generate-image.d.ts +8 -1
- package/dist/prompt/steps/step-generate-image.js +1 -0
- package/dist/prompt/steps/step-generate-image.js.map +1 -1
- package/dist/prompt/steps/step-summarization.d.ts +0 -1
- package/dist/prompt/steps/step-summarization.js +6 -3
- package/dist/prompt/steps/step-summarization.js.map +1 -1
- package/dist/prompt/steps/step-validate-recover.js +24 -15
- package/dist/prompt/steps/step-validate-recover.js.map +1 -1
- package/dist/prompt/systemprompt.d.ts +2 -2
- package/dist/prompt/systemprompt.js +74 -176
- package/dist/prompt/systemprompt.js.map +1 -1
- package/dist/prompt/systemprompt.test.js +2 -3
- package/dist/prompt/systemprompt.test.js.map +1 -1
- package/dist/vite-genaicode/vite-genaicode-plugin.d.ts +2 -1
- package/dist/vite-genaicode/vite-genaicode-plugin.js +15 -2
- package/dist/vite-genaicode/vite-genaicode-plugin.js.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
|
2
|
+
import { promptService } from './prompt-service.js';
|
|
3
|
+
import * as vertexAi from '../ai-service/vertex-ai.js';
|
|
4
|
+
import * as vertexAiClaude from '../ai-service/vertex-ai-claude.js';
|
|
5
|
+
import * as chatGpt from '../ai-service/chat-gpt.js';
|
|
6
|
+
import * as anthropic from '../ai-service/anthropic.js';
|
|
7
|
+
import * as cliParams from '../cli/cli-params.js';
|
|
8
|
+
import fs from 'fs';
|
|
9
|
+
import * as diff from 'diff';
|
|
10
|
+
import * as dalleService from '../ai-service/dall-e.js';
|
|
11
|
+
import * as vertexAiImagen from '../ai-service/vertex-ai-imagen.js';
|
|
12
|
+
import { getCodeGenPrompt } from './prompt-codegen.js';
|
|
13
|
+
import { mockData, mockResponses, testConfigs } from './prompt-service.test-utils.js';
|
|
14
|
+
// Mock all external dependencies
|
|
15
|
+
vi.mock('../ai-service/vertex-ai-claude.js', () => ({ generateContent: vi.fn() }));
|
|
16
|
+
vi.mock('../ai-service/vertex-ai.js', () => ({ generateContent: vi.fn() }));
|
|
17
|
+
vi.mock('../ai-service/chat-gpt.js', () => ({ generateContent: vi.fn() }));
|
|
18
|
+
vi.mock('../ai-service/anthropic.js', () => ({ generateContent: vi.fn() }));
|
|
19
|
+
vi.mock('../ai-service/dall-e.js', () => ({ generateImage: vi.fn() }));
|
|
20
|
+
vi.mock('../ai-service/vertex-ai-imagen.js', () => ({ generateImage: vi.fn() }));
|
|
21
|
+
vi.mock('fs');
|
|
22
|
+
vi.mock('diff');
|
|
23
|
+
vi.mock('../cli/cli-params.js', () => ({
|
|
24
|
+
disableExplanations: true,
|
|
25
|
+
explicitPrompt: false,
|
|
26
|
+
allowFileCreate: false,
|
|
27
|
+
allowFileDelete: false,
|
|
28
|
+
allowDirectoryCreate: false,
|
|
29
|
+
allowFileMove: false,
|
|
30
|
+
verbosePrompt: false,
|
|
31
|
+
disableContextOptimization: true,
|
|
32
|
+
vision: false,
|
|
33
|
+
imagen: false,
|
|
34
|
+
temperature: 0.7,
|
|
35
|
+
cheap: false,
|
|
36
|
+
askQuestion: false,
|
|
37
|
+
}));
|
|
38
|
+
vi.mock('../files/cache-file.js');
|
|
39
|
+
vi.mock('../files/find-files.js', () => ({
|
|
40
|
+
getSourceFiles: () => [],
|
|
41
|
+
getImageAssetFiles: () => [],
|
|
42
|
+
}));
|
|
43
|
+
vi.mock('../files/read-files.js', () => ({
|
|
44
|
+
getSourceCode: () => ({}),
|
|
45
|
+
getImageAssets: vi.fn(() => ({})),
|
|
46
|
+
}));
|
|
47
|
+
vi.mock('../main/config.js', () => ({
|
|
48
|
+
rootDir: '/mocked/root/dir',
|
|
49
|
+
rcConfig: {
|
|
50
|
+
rootDir: '/mocked/root/dir',
|
|
51
|
+
extensions: ['.js', '.ts', '.tsx', '.jsx'],
|
|
52
|
+
},
|
|
53
|
+
importantContext: {},
|
|
54
|
+
}));
|
|
55
|
+
const GENERATE_CONTENT_FNS = {
|
|
56
|
+
'vertex-ai-claude': vertexAiClaude.generateContent,
|
|
57
|
+
'vertex-ai': vertexAi.generateContent,
|
|
58
|
+
'ai-studio': vertexAi.generateContent,
|
|
59
|
+
anthropic: anthropic.generateContent,
|
|
60
|
+
'chat-gpt': chatGpt.generateContent,
|
|
61
|
+
};
|
|
62
|
+
const GENERATE_IMAGE_FNS = {
|
|
63
|
+
'dall-e': dalleService.generateImage,
|
|
64
|
+
'vertex-ai': vertexAiImagen.generateImage,
|
|
65
|
+
};
|
|
66
|
+
describe('promptService - Validation and Recovery', () => {
|
|
67
|
+
beforeEach(() => {
|
|
68
|
+
vi.resetAllMocks();
|
|
69
|
+
vi.mocked(cliParams).dryRun = false;
|
|
70
|
+
vi.mocked(cliParams).vision = false;
|
|
71
|
+
vi.mocked(cliParams).imagen = undefined;
|
|
72
|
+
vi.mocked(cliParams).disableContextOptimization = true;
|
|
73
|
+
vi.mocked(cliParams).explicitPrompt = 'testx';
|
|
74
|
+
});
|
|
75
|
+
describe('Invalid Response Recovery', () => {
|
|
76
|
+
it('should successfully recover from an invalid function call', async () => {
|
|
77
|
+
vi.mocked(cliParams).aiService = 'vertex-ai';
|
|
78
|
+
const mockInvalidCall = [
|
|
79
|
+
{
|
|
80
|
+
name: 'codegenSummary',
|
|
81
|
+
args: {
|
|
82
|
+
files: [{ filePath: mockData.paths.test, updateToolName: 'updateFile' }],
|
|
83
|
+
contextPaths: [],
|
|
84
|
+
explanation: 'Mock summary',
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
];
|
|
88
|
+
const mockValidCall = [
|
|
89
|
+
{
|
|
90
|
+
name: 'codegenSummary',
|
|
91
|
+
args: {
|
|
92
|
+
fileUpdates: [{ filePath: mockData.paths.test, updateToolName: 'updateFile', prompt: 'Generate file' }],
|
|
93
|
+
contextPaths: [],
|
|
94
|
+
explanation: 'Mock summary',
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
];
|
|
98
|
+
// Setup mocks
|
|
99
|
+
vi.mocked(vertexAi.generateContent)
|
|
100
|
+
// First mock for codegenPlanning
|
|
101
|
+
.mockResolvedValueOnce(mockResponses.mockPlanningResponse(mockData.paths.test))
|
|
102
|
+
// Second mock for invalid codegenSummary
|
|
103
|
+
.mockResolvedValueOnce(mockInvalidCall)
|
|
104
|
+
// Third mock for valid codegenSummary
|
|
105
|
+
.mockResolvedValueOnce(mockValidCall)
|
|
106
|
+
// Fourth mock for the actual update
|
|
107
|
+
.mockResolvedValueOnce(mockResponses.mockUpdateFile(mockData.paths.test, 'console.log("Recovered response");'));
|
|
108
|
+
const result = await promptService(GENERATE_CONTENT_FNS, GENERATE_IMAGE_FNS, getCodeGenPrompt(testConfigs.baseConfig));
|
|
109
|
+
expect(vertexAi.generateContent).toHaveBeenCalledTimes(4);
|
|
110
|
+
expect(result).toEqual(mockResponses.mockUpdateFile(mockData.paths.test, 'console.log("Recovered response");'));
|
|
111
|
+
});
|
|
112
|
+
it('should handle unsuccessful recovery', async () => {
|
|
113
|
+
vi.mocked(cliParams).aiService = 'vertex-ai';
|
|
114
|
+
const mockInvalidCall = [
|
|
115
|
+
{
|
|
116
|
+
name: 'updateFile',
|
|
117
|
+
args: { filePath: mockData.paths.test, invalidArg: 'This should not be here' },
|
|
118
|
+
},
|
|
119
|
+
];
|
|
120
|
+
// Setup mocks
|
|
121
|
+
vi.mocked(vertexAi.generateContent)
|
|
122
|
+
// First mock for codegenPlanning
|
|
123
|
+
.mockResolvedValueOnce(mockResponses.mockPlanningResponse(mockData.paths.test))
|
|
124
|
+
// Second mock for codegenSummary
|
|
125
|
+
.mockResolvedValueOnce([
|
|
126
|
+
{
|
|
127
|
+
name: 'codegenSummary',
|
|
128
|
+
args: {
|
|
129
|
+
fileUpdates: [{ filePath: mockData.paths.test, updateToolName: 'patchFile', prompt: 'Generate file' }],
|
|
130
|
+
contextPaths: [],
|
|
131
|
+
explanation: 'Mock summary',
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
])
|
|
135
|
+
// Third, fourth, and fifth mocks for failed recovery attempts
|
|
136
|
+
.mockResolvedValueOnce(mockInvalidCall)
|
|
137
|
+
.mockResolvedValueOnce(mockInvalidCall)
|
|
138
|
+
.mockResolvedValueOnce(mockInvalidCall);
|
|
139
|
+
await expect(promptService(GENERATE_CONTENT_FNS, GENERATE_IMAGE_FNS, getCodeGenPrompt(testConfigs.baseConfig))).rejects.toThrow('Recovery failed');
|
|
140
|
+
expect(vertexAi.generateContent).toHaveBeenCalledTimes(5);
|
|
141
|
+
});
|
|
142
|
+
it('should not attempt recovery for multiple valid function calls', async () => {
|
|
143
|
+
vi.mocked(cliParams).aiService = 'vertex-ai';
|
|
144
|
+
// Setup mocks
|
|
145
|
+
vi.mocked(vertexAi.generateContent)
|
|
146
|
+
// First mock for codegenPlanning
|
|
147
|
+
.mockResolvedValueOnce(mockResponses.mockPlanningResponse(mockData.paths.test))
|
|
148
|
+
// Second mock for codegenSummary with multiple files
|
|
149
|
+
.mockResolvedValueOnce([
|
|
150
|
+
{
|
|
151
|
+
name: 'codegenSummary',
|
|
152
|
+
args: {
|
|
153
|
+
fileUpdates: [
|
|
154
|
+
{
|
|
155
|
+
filePath: `${mockData.paths.root}/test1.js`,
|
|
156
|
+
updateToolName: 'updateFile',
|
|
157
|
+
prompt: 'Generate file 1',
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
filePath: `${mockData.paths.root}/test2.js`,
|
|
161
|
+
updateToolName: 'updateFile',
|
|
162
|
+
prompt: 'Generate file 2',
|
|
163
|
+
},
|
|
164
|
+
],
|
|
165
|
+
contextPaths: [],
|
|
166
|
+
explanation: 'Mock summary',
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
])
|
|
170
|
+
// Third and fourth mocks for the actual updates
|
|
171
|
+
.mockResolvedValueOnce(mockResponses.mockUpdateFile(`${mockData.paths.root}/test1.js`, 'console.log("File 1");'))
|
|
172
|
+
.mockResolvedValueOnce(mockResponses.mockUpdateFile(`${mockData.paths.root}/test2.js`, 'console.log("File 2");'));
|
|
173
|
+
const result = await promptService(GENERATE_CONTENT_FNS, GENERATE_IMAGE_FNS, getCodeGenPrompt(testConfigs.baseConfig));
|
|
174
|
+
expect(vertexAi.generateContent).toHaveBeenCalledTimes(4);
|
|
175
|
+
expect(result).toEqual([
|
|
176
|
+
...mockResponses.mockUpdateFile(`${mockData.paths.root}/test1.js`, 'console.log("File 1");'),
|
|
177
|
+
...mockResponses.mockUpdateFile(`${mockData.paths.root}/test2.js`, 'console.log("File 2");'),
|
|
178
|
+
]);
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
describe('Patch File Validation', () => {
|
|
182
|
+
it('should handle invalid patchFile call and retry without patchFile function', async () => {
|
|
183
|
+
vi.mocked(cliParams).aiService = 'vertex-ai';
|
|
184
|
+
// Setup mocks
|
|
185
|
+
vi.mocked(vertexAi.generateContent)
|
|
186
|
+
// First mock for codegenPlanning
|
|
187
|
+
.mockResolvedValueOnce(mockResponses.mockPlanningResponse(mockData.paths.test))
|
|
188
|
+
// Second mock for codegenSummary
|
|
189
|
+
.mockResolvedValueOnce([
|
|
190
|
+
{
|
|
191
|
+
name: 'codegenSummary',
|
|
192
|
+
args: {
|
|
193
|
+
fileUpdates: [
|
|
194
|
+
{
|
|
195
|
+
filePath: mockData.paths.test,
|
|
196
|
+
updateToolName: 'patchFile',
|
|
197
|
+
prompt: 'Generate file',
|
|
198
|
+
},
|
|
199
|
+
],
|
|
200
|
+
contextPaths: [],
|
|
201
|
+
explanation: 'Mock summary',
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
])
|
|
205
|
+
// Third mock for invalid patch
|
|
206
|
+
.mockResolvedValueOnce(mockResponses.mockPatchFile(mockData.paths.test, 'invalid patch'))
|
|
207
|
+
// Fourth mock for recovery with updateFile
|
|
208
|
+
.mockResolvedValueOnce(mockResponses.mockUpdateFile(mockData.paths.test, 'console.log("Updated content");'));
|
|
209
|
+
// Mock fs.readFileSync to return some content
|
|
210
|
+
vi.mocked(fs.readFileSync).mockReturnValue(mockData.fileContent);
|
|
211
|
+
// Mock diff.applyPatch to fail for the invalid patch
|
|
212
|
+
vi.mocked(diff.applyPatch).mockReturnValue(false);
|
|
213
|
+
const result = await promptService(GENERATE_CONTENT_FNS, GENERATE_IMAGE_FNS, getCodeGenPrompt(testConfigs.baseConfig));
|
|
214
|
+
expect(vertexAi.generateContent).toHaveBeenCalledTimes(4);
|
|
215
|
+
expect(fs.readFileSync).toHaveBeenCalledWith(mockData.paths.test, 'utf-8');
|
|
216
|
+
expect(diff.applyPatch).toHaveBeenCalledWith(mockData.fileContent, 'invalid patch');
|
|
217
|
+
expect(result).toEqual(mockResponses.mockUpdateFile(mockData.paths.test, 'console.log("Updated content");'));
|
|
218
|
+
});
|
|
219
|
+
it('should handle successful patch application', async () => {
|
|
220
|
+
vi.mocked(cliParams).aiService = 'vertex-ai';
|
|
221
|
+
const validPatch = `Index: test.js
|
|
222
|
+
===================================================================
|
|
223
|
+
--- test.js
|
|
224
|
+
+++ test.js
|
|
225
|
+
@@ -1,1 +1,1 @@
|
|
226
|
+
-Original content
|
|
227
|
+
+New content`;
|
|
228
|
+
// Setup mocks
|
|
229
|
+
vi.mocked(vertexAi.generateContent)
|
|
230
|
+
// First mock for codegenPlanning
|
|
231
|
+
.mockResolvedValueOnce(mockResponses.mockPlanningResponse(mockData.paths.test))
|
|
232
|
+
// Second mock for codegenSummary
|
|
233
|
+
.mockResolvedValueOnce([
|
|
234
|
+
{
|
|
235
|
+
name: 'codegenSummary',
|
|
236
|
+
args: {
|
|
237
|
+
fileUpdates: [
|
|
238
|
+
{
|
|
239
|
+
filePath: mockData.paths.test,
|
|
240
|
+
updateToolName: 'patchFile',
|
|
241
|
+
prompt: 'Generate file',
|
|
242
|
+
},
|
|
243
|
+
],
|
|
244
|
+
contextPaths: [],
|
|
245
|
+
explanation: 'Mock summary',
|
|
246
|
+
},
|
|
247
|
+
},
|
|
248
|
+
])
|
|
249
|
+
// Third mock for valid patch
|
|
250
|
+
.mockResolvedValueOnce(mockResponses.mockPatchFile(mockData.paths.test, validPatch));
|
|
251
|
+
// Mock fs.readFileSync to return some content
|
|
252
|
+
vi.mocked(fs.readFileSync).mockReturnValue(mockData.fileContent);
|
|
253
|
+
// Mock diff.applyPatch to succeed with the valid patch
|
|
254
|
+
vi.mocked(diff.applyPatch).mockReturnValue('New content');
|
|
255
|
+
const result = await promptService(GENERATE_CONTENT_FNS, GENERATE_IMAGE_FNS, getCodeGenPrompt(testConfigs.baseConfig));
|
|
256
|
+
expect(vertexAi.generateContent).toHaveBeenCalledTimes(3);
|
|
257
|
+
expect(fs.readFileSync).toHaveBeenCalledWith(mockData.paths.test, 'utf-8');
|
|
258
|
+
expect(diff.applyPatch).toHaveBeenCalledWith(mockData.fileContent, validPatch);
|
|
259
|
+
expect(result).toEqual(mockResponses.mockPatchFile(mockData.paths.test, validPatch));
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
});
|
|
263
|
+
//# sourceMappingURL=prompt-service.validation-recovery.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-service.validation-recovery.test.js","sourceRoot":"","sources":["../../src/prompt/prompt-service.validation-recovery.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static prompts used in the prompt-service module.
|
|
3
|
+
* These prompts are used in the initial conversation with the AI service.
|
|
4
|
+
*/
|
|
5
|
+
/** Initial greeting from the user */
|
|
6
|
+
export declare const INITIAL_GREETING = "Hello, GenAIcode!";
|
|
7
|
+
/** Assistant's response asking for source code and other assets */
|
|
8
|
+
export declare const REQUEST_SOURCE_CODE = "Hello there! I guess you have a task for me today. Before we start, could you please provide me with: \n - the current source code of your application\n - the image assets (if available)\n - and conversational history (if available)\n \n Thanks";
|
|
9
|
+
/** User's response when providing source code and assets */
|
|
10
|
+
export declare const SOURCE_CODE_RESPONSE = "Sure, here is the application source code, image assets, and the history.";
|
|
11
|
+
/** Assistant's acknowledgment after receiving source code */
|
|
12
|
+
export declare const READY_TO_ASSIST = "Thank you, I'm ready to assist you with your request.";
|
|
13
|
+
/** Assistant's response when generating code */
|
|
14
|
+
export declare const CODEGEN_SUMMARY_PROMPT = "Planning phase completed. Now please create the code generation summary.";
|
|
15
|
+
/** Template for partial prompt when requesting changes for a specific file */
|
|
16
|
+
export declare const getPartialPromptTemplate: (path: string) => string;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static prompts used in the prompt-service module.
|
|
3
|
+
* These prompts are used in the initial conversation with the AI service.
|
|
4
|
+
*/
|
|
5
|
+
/** Initial greeting from the user */
|
|
6
|
+
export const INITIAL_GREETING = 'Hello, GenAIcode!';
|
|
7
|
+
/** Assistant's response asking for source code and other assets */
|
|
8
|
+
export const REQUEST_SOURCE_CODE = `Hello there! I guess you have a task for me today. Before we start, could you please provide me with:
|
|
9
|
+
- the current source code of your application
|
|
10
|
+
- the image assets (if available)
|
|
11
|
+
- and conversational history (if available)
|
|
12
|
+
|
|
13
|
+
Thanks`;
|
|
14
|
+
/** User's response when providing source code and assets */
|
|
15
|
+
export const SOURCE_CODE_RESPONSE = 'Sure, here is the application source code, image assets, and the history.';
|
|
16
|
+
/** Assistant's acknowledgment after receiving source code */
|
|
17
|
+
export const READY_TO_ASSIST = "Thank you, I'm ready to assist you with your request.";
|
|
18
|
+
/** Assistant's response when generating code */
|
|
19
|
+
export const CODEGEN_SUMMARY_PROMPT = 'Planning phase completed. Now please create the code generation summary.';
|
|
20
|
+
/** Template for partial prompt when requesting changes for a specific file */
|
|
21
|
+
export const getPartialPromptTemplate = (path) => `Please now generate update for the \`${path}\` file using appropriate tools according to code generation summary.`;
|
|
22
|
+
//# sourceMappingURL=static-prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-prompts.js","sourceRoot":"","sources":["../../src/prompt/static-prompts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,qCAAqC;AACrC,MAAM,CAAC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAEpD,mEAAmE;AACnE,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;aAKtB,CAAC;AAEd,4DAA4D;AAC5D,MAAM,CAAC,MAAM,oBAAoB,GAAG,2EAA2E,CAAC;AAEhH,6DAA6D;AAC7D,MAAM,CAAC,MAAM,eAAe,GAAG,uDAAuD,CAAC;AAEvF,gDAAgD;AAChD,MAAM,CAAC,MAAM,sBAAsB,GAAG,0EAA0E,CAAC;AAEjH,8EAA8E;AAC9E,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,IAAY,EAAU,EAAE,CAC/D,wCAAwC,IAAI,uEAAuE,CAAC"}
|
|
@@ -7,7 +7,7 @@ export async function handleCancelCodeGeneration({ askQuestionCall }) {
|
|
|
7
7
|
stepResult: StepResult.BREAK,
|
|
8
8
|
items: [
|
|
9
9
|
{
|
|
10
|
-
assistant: { type: 'assistant', text: askQuestionCall.args?.
|
|
10
|
+
assistant: { type: 'assistant', text: askQuestionCall.args?.message ?? '' },
|
|
11
11
|
user: { type: 'user', text: 'Code generation cancelled.' },
|
|
12
12
|
},
|
|
13
13
|
],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cancel-code-generation.js","sourceRoot":"","sources":["../../../../../src/prompt/steps/step-ask-question/handlers/cancel-code-generation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlD,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,EAAE,eAAe,EAAsB;IACtF,gBAAgB,CAAC,yDAAyD,CAAC,CAAC;IAC5E,OAAO;QACL,SAAS,EAAE,IAAI;QACf,UAAU,EAAE,UAAU,CAAC,KAAK;QAC5B,KAAK,EAAE;YACL;gBACE,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,EAAE
|
|
1
|
+
{"version":3,"file":"cancel-code-generation.js","sourceRoot":"","sources":["../../../../../src/prompt/steps/step-ask-question/handlers/cancel-code-generation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlD,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,EAAE,eAAe,EAAsB;IACtF,gBAAgB,CAAC,yDAAyD,CAAC,CAAC;IAC5E,OAAO;QACL,SAAS,EAAE,IAAI;QACf,UAAU,EAAE,UAAU,CAAC,KAAK;QAC5B,KAAK,EAAE;YACL;gBACE,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,EAAE;gBAC3E,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,4BAA4B,EAAE;aAC3D;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { ActionHandlerProps, ActionResult } from '../step-ask-question-types.js';
|
|
2
|
-
export declare function handleConfirmCodeGeneration({ askQuestionCall }: ActionHandlerProps): Promise<ActionResult>;
|
|
2
|
+
export declare function handleConfirmCodeGeneration({ askQuestionCall, options, }: ActionHandlerProps): Promise<ActionResult>;
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { putSystemMessage } from '../../../../main/common/content-bus.js';
|
|
2
2
|
import { askUserForConfirmationWithAnswer } from '../../../../main/common/user-actions.js';
|
|
3
3
|
import { StepResult } from '../../steps-types.js';
|
|
4
|
-
export async function handleConfirmCodeGeneration({ askQuestionCall }) {
|
|
4
|
+
export async function handleConfirmCodeGeneration({ askQuestionCall, options, }) {
|
|
5
5
|
const userConfirmation = await askUserForConfirmationWithAnswer('The assistant is ready to start code generation. Do you want to proceed?', 'Start code generation', 'Continue conversation', true);
|
|
6
|
+
if (userConfirmation.options?.aiService) {
|
|
7
|
+
options.aiService = userConfirmation.options.aiService;
|
|
8
|
+
options.cheap = userConfirmation.options.cheap;
|
|
9
|
+
}
|
|
6
10
|
if (userConfirmation.confirmed) {
|
|
7
11
|
putSystemMessage('Proceeding with code generation.');
|
|
8
12
|
return {
|
|
@@ -10,7 +14,7 @@ export async function handleConfirmCodeGeneration({ askQuestionCall }) {
|
|
|
10
14
|
stepResult: StepResult.CONTINUE,
|
|
11
15
|
items: [
|
|
12
16
|
{
|
|
13
|
-
assistant: { type: 'assistant', text: askQuestionCall.args?.
|
|
17
|
+
assistant: { type: 'assistant', text: askQuestionCall.args?.message ?? '', functionCalls: [] },
|
|
14
18
|
user: { type: 'user', text: userConfirmation.answer || 'Confirmed. Proceed with code generation.' },
|
|
15
19
|
},
|
|
16
20
|
],
|
|
@@ -23,11 +27,10 @@ export async function handleConfirmCodeGeneration({ askQuestionCall }) {
|
|
|
23
27
|
stepResult: StepResult.CONTINUE,
|
|
24
28
|
items: [
|
|
25
29
|
{
|
|
26
|
-
assistant: { type: 'assistant', text: askQuestionCall.args?.
|
|
30
|
+
assistant: { type: 'assistant', text: askQuestionCall.args?.message ?? '' },
|
|
27
31
|
user: {
|
|
28
32
|
type: 'user',
|
|
29
33
|
text: userConfirmation.answer || 'Declined. Please continue the conversation.',
|
|
30
|
-
functionResponses: [{ name: 'askQuestion', call_id: askQuestionCall.id ?? '', content: undefined }],
|
|
31
34
|
},
|
|
32
35
|
},
|
|
33
36
|
],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confirm-code-generation.js","sourceRoot":"","sources":["../../../../../src/prompt/steps/step-ask-question/handlers/confirm-code-generation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,gCAAgC,EAAE,MAAM,yCAAyC,CAAC;AAC3F,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlD,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,
|
|
1
|
+
{"version":3,"file":"confirm-code-generation.js","sourceRoot":"","sources":["../../../../../src/prompt/steps/step-ask-question/handlers/confirm-code-generation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,gCAAgC,EAAE,MAAM,yCAAyC,CAAC;AAC3F,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlD,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,EAChD,eAAe,EACf,OAAO,GACY;IACnB,MAAM,gBAAgB,GAAG,MAAM,gCAAgC,CAC7D,0EAA0E,EAC1E,uBAAuB,EACvB,uBAAuB,EACvB,IAAI,CACL,CAAC;IACF,IAAI,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;QACxC,OAAO,CAAC,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC;QACvD,OAAO,CAAC,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC;IACjD,CAAC;IACD,IAAI,gBAAgB,CAAC,SAAS,EAAE,CAAC;QAC/B,gBAAgB,CAAC,kCAAkC,CAAC,CAAC;QACrD,OAAO;YACL,SAAS,EAAE,IAAI;YACf,UAAU,EAAE,UAAU,CAAC,QAAQ;YAC/B,KAAK,EAAE;gBACL;oBACE,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE;oBAC9F,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,CAAC,MAAM,IAAI,0CAA0C,EAAE;iBACpG;aACF;SACF,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,gBAAgB,CAAC,wCAAwC,CAAC,CAAC;QAC3D,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,UAAU,EAAE,UAAU,CAAC,QAAQ;YAC/B,KAAK,EAAE;gBACL;oBACE,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,EAAE;oBAC3E,IAAI,EAAE;wBACJ,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,gBAAgB,CAAC,MAAM,IAAI,6CAA6C;qBAC/E;iBACF;aACF;SACF,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -5,17 +5,19 @@ import { executeStepContextOptimization } from '../../step-context-optimization.
|
|
|
5
5
|
import { StepResult } from '../../steps-types.js';
|
|
6
6
|
export async function handleContextOptimization({ askQuestionCall, prompt, options, generateContentFn, }) {
|
|
7
7
|
const userConfirmation = await askUserForConfirmation('The assistant suggests optimizing the context to reduce token usage, cost, and latency. Do you want to proceed?', false);
|
|
8
|
+
if (userConfirmation.options?.aiService) {
|
|
9
|
+
options.aiService = userConfirmation.options.aiService;
|
|
10
|
+
options.cheap = userConfirmation.options.cheap;
|
|
11
|
+
}
|
|
8
12
|
const user = {
|
|
9
13
|
type: 'user',
|
|
10
14
|
text: userConfirmation ? 'Context optimization applied.' : 'Context optimization not applied.',
|
|
11
|
-
functionResponses: [{ name: 'askQuestion', call_id: askQuestionCall.id ?? '', content: undefined }],
|
|
12
15
|
};
|
|
13
16
|
const assistant = {
|
|
14
17
|
type: 'assistant',
|
|
15
|
-
text: askQuestionCall.args?.
|
|
16
|
-
functionCalls: [askQuestionCall],
|
|
18
|
+
text: askQuestionCall.args?.message ?? '',
|
|
17
19
|
};
|
|
18
|
-
if (userConfirmation) {
|
|
20
|
+
if (userConfirmation.confirmed) {
|
|
19
21
|
// the request may be caused be an appearance of a new file, so lets refresh
|
|
20
22
|
refreshFiles();
|
|
21
23
|
// Execute context optimization step
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-optimization.js","sourceRoot":"","sources":["../../../../../src/prompt/steps/step-ask-question/handlers/context-optimization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,8BAA8B,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlD,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,EAC9C,eAAe,EACf,MAAM,EACN,OAAO,EACP,iBAAiB,GACE;IACnB,MAAM,gBAAgB,GAAG,MAAM,sBAAsB,CACnD,iHAAiH,EACjH,KAAK,CACN,CAAC;IAEF,
|
|
1
|
+
{"version":3,"file":"context-optimization.js","sourceRoot":"","sources":["../../../../../src/prompt/steps/step-ask-question/handlers/context-optimization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,8BAA8B,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlD,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,EAC9C,eAAe,EACf,MAAM,EACN,OAAO,EACP,iBAAiB,GACE;IACnB,MAAM,gBAAgB,GAAG,MAAM,sBAAsB,CACnD,iHAAiH,EACjH,KAAK,CACN,CAAC;IAEF,IAAI,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;QACxC,OAAO,CAAC,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC;QACvD,OAAO,CAAC,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC;IACjD,CAAC;IAED,MAAM,IAAI,GAAa;QACrB,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,mCAAmC;KAC/F,CAAC;IAEF,MAAM,SAAS,GAAkB;QAC/B,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE;KAC1C,CAAC;IAEF,IAAI,gBAAgB,CAAC,SAAS,EAAE,CAAC;QAC/B,4EAA4E;QAC5E,YAAY,EAAE,CAAC;QAEf,oCAAoC;QACpC,gBAAgB,CAAC,sCAAsC,CAAC,CAAC;QACzD,MAAM,8BAA8B,CAAC,iBAAiB,EAAE,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IACjG,CAAC;IAED,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,UAAU,CAAC,QAAQ;QAC/B,KAAK,EAAE;YACL;gBACE,SAAS;gBACT,IAAI;aACL;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -5,11 +5,10 @@ export async function handleDefaultAction({ askQuestionCall }) {
|
|
|
5
5
|
stepResult: StepResult.CONTINUE,
|
|
6
6
|
items: [
|
|
7
7
|
{
|
|
8
|
-
assistant: { type: 'assistant', text: askQuestionCall.args?.
|
|
8
|
+
assistant: { type: 'assistant', text: askQuestionCall.args?.message ?? '' },
|
|
9
9
|
user: {
|
|
10
10
|
type: 'user',
|
|
11
11
|
text: "I don't want to start the code generation yet, let's talk a bit more.",
|
|
12
|
-
functionResponses: [{ name: 'askQuestion', call_id: askQuestionCall.id ?? '', content: undefined }],
|
|
13
12
|
},
|
|
14
13
|
},
|
|
15
14
|
],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-action.js","sourceRoot":"","sources":["../../../../../src/prompt/steps/step-ask-question/handlers/default-action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,EAAE,eAAe,EAAsB;IAC/E,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,UAAU,CAAC,QAAQ;QAC/B,KAAK,EAAE;YACL;gBACE,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,EAAE
|
|
1
|
+
{"version":3,"file":"default-action.js","sourceRoot":"","sources":["../../../../../src/prompt/steps/step-ask-question/handlers/default-action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,EAAE,eAAe,EAAsB;IAC/E,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,UAAU,CAAC,QAAQ;QAC/B,KAAK,EAAE;YACL;gBACE,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,EAAE;gBAC3E,IAAI,EAAE;oBACJ,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,uEAAuE;iBAC9E;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { askUserForInput } from '../../../../main/common/user-actions.js';
|
|
2
|
+
import { putAssistantMessage, putSystemMessage } from '../../../../main/common/content-bus.js';
|
|
3
|
+
import { StepResult } from '../../steps-types.js';
|
|
4
|
+
import { executeStepGenerateImage } from '../../step-generate-image.js';
|
|
5
|
+
export async function handleRequestAnswerWithImage({ askQuestionCall, options, generateImageFn, }) {
|
|
6
|
+
if (!options.imagen) {
|
|
7
|
+
putSystemMessage('Image generation is not enabled. Please enable it using --imagen parameter.');
|
|
8
|
+
return {
|
|
9
|
+
breakLoop: true,
|
|
10
|
+
stepResult: StepResult.BREAK,
|
|
11
|
+
items: [],
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
// Get the image generation request from the args
|
|
15
|
+
const imageGenerationRequest = askQuestionCall.args?.imageGenerationRequest;
|
|
16
|
+
if (!imageGenerationRequest?.prompt) {
|
|
17
|
+
putSystemMessage('Image generation request with prompt is required for requestAnswerWithImage action.');
|
|
18
|
+
return {
|
|
19
|
+
breakLoop: true,
|
|
20
|
+
stepResult: StepResult.BREAK,
|
|
21
|
+
items: [],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
// Create a temporary file path for the generated image
|
|
25
|
+
const tempImagePath = `/tmp/question-image-${Date.now()}.png`;
|
|
26
|
+
// Generate the image using generateImage function call
|
|
27
|
+
const generateImageCall = {
|
|
28
|
+
name: 'generateImage',
|
|
29
|
+
args: {
|
|
30
|
+
prompt: imageGenerationRequest.prompt,
|
|
31
|
+
filePath: tempImagePath,
|
|
32
|
+
width: 1024,
|
|
33
|
+
height: 1024,
|
|
34
|
+
explanation: 'Generating image to support the question',
|
|
35
|
+
...(imageGenerationRequest.contextImage && { contextImagePath: imageGenerationRequest.contextImage }),
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
// Execute image generation
|
|
39
|
+
const downloadFileCall = await executeStepGenerateImage(generateImageFn, generateImageCall);
|
|
40
|
+
// If image generation failed, the downloadFileCall will be an explanation
|
|
41
|
+
if (!downloadFileCall.args?.downloadUrl) {
|
|
42
|
+
putSystemMessage('Failed to generate image for the question.');
|
|
43
|
+
return {
|
|
44
|
+
breakLoop: true,
|
|
45
|
+
stepResult: StepResult.BREAK,
|
|
46
|
+
items: [],
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const response = await fetch(downloadFileCall.args?.downloadUrl);
|
|
50
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
51
|
+
const buffer = Buffer.from(arrayBuffer);
|
|
52
|
+
putAssistantMessage('Here is the image to support the question:', generateImageCall.args, [], [
|
|
53
|
+
{
|
|
54
|
+
base64url: buffer.toString('base64'),
|
|
55
|
+
mediaType: 'image/png',
|
|
56
|
+
},
|
|
57
|
+
]);
|
|
58
|
+
// Get user's response with the image displayed
|
|
59
|
+
const userText = await askUserForInput('Your answer', askQuestionCall.args?.content ?? '');
|
|
60
|
+
// Return the conversation items with the generated image
|
|
61
|
+
return {
|
|
62
|
+
breakLoop: false,
|
|
63
|
+
stepResult: StepResult.CONTINUE,
|
|
64
|
+
items: [
|
|
65
|
+
{
|
|
66
|
+
assistant: {
|
|
67
|
+
type: 'assistant',
|
|
68
|
+
text: askQuestionCall.args?.content ?? '',
|
|
69
|
+
functionCalls: [askQuestionCall, generateImageCall, downloadFileCall],
|
|
70
|
+
},
|
|
71
|
+
user: {
|
|
72
|
+
type: 'user',
|
|
73
|
+
text: userText,
|
|
74
|
+
functionResponses: [
|
|
75
|
+
{
|
|
76
|
+
name: 'askQuestion',
|
|
77
|
+
call_id: askQuestionCall.id ?? '',
|
|
78
|
+
content: undefined,
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=handle-request-answer-with-image.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handle-request-answer-with-image.js","sourceRoot":"","sources":["../../../../../src/prompt/steps/step-ask-question/handlers/handle-request-answer-with-image.ts"],"names":[],"mappings":"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"}
|