genaicode 0.2.1 → 0.4.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.
- package/README.md +11 -0
- package/bin/genaicode-dev.js +2 -1
- package/bin/genaicode.cjs +4 -4
- package/dist/ai-service/ai-studio.js +65 -10
- package/dist/ai-service/ai-studio.js.map +1 -1
- package/dist/ai-service/anthropic.js +22 -8
- package/dist/ai-service/anthropic.js.map +1 -1
- package/dist/ai-service/chat-gpt.js +22 -10
- package/dist/ai-service/chat-gpt.js.map +1 -1
- package/dist/ai-service/common.d.ts +20 -7
- package/dist/ai-service/common.js +9 -6
- package/dist/ai-service/common.js.map +1 -1
- package/dist/ai-service/common.test.js +3 -3
- package/dist/ai-service/common.test.js.map +1 -1
- package/dist/ai-service/unescape-function-call.d.ts +7 -0
- package/dist/ai-service/unescape-function-call.js +59 -0
- package/dist/ai-service/unescape-function-call.js.map +1 -0
- package/dist/ai-service/unescape-function-call.test.js +18 -0
- package/dist/ai-service/unescape-function-call.test.js.map +1 -0
- package/dist/ai-service/vertex-ai-claude.js +11 -4
- package/dist/ai-service/vertex-ai-claude.js.map +1 -1
- package/dist/ai-service/vertex-ai.d.ts +1 -1
- package/dist/ai-service/vertex-ai.js +73 -14
- package/dist/ai-service/vertex-ai.js.map +1 -1
- package/dist/cli/cli-options.js +8 -0
- package/dist/cli/cli-options.js.map +1 -1
- package/dist/cli/cli-params.d.ts +6 -0
- package/dist/cli/cli-params.js +25 -4
- package/dist/cli/cli-params.js.map +1 -1
- package/dist/cli/validate-cli-params.js +11 -1
- package/dist/cli/validate-cli-params.js.map +1 -1
- package/dist/files/cache-file.d.ts +3 -0
- package/dist/files/cache-file.js +36 -0
- package/dist/files/cache-file.js.map +1 -0
- package/dist/files/find-files.d.ts +1 -0
- package/dist/files/find-files.js +7 -2
- package/dist/files/find-files.js.map +1 -1
- package/dist/files/read-files.d.ts +6 -3
- package/dist/files/read-files.js +7 -5
- package/dist/files/read-files.js.map +1 -1
- package/dist/files/read-files.test.js +2 -1
- package/dist/files/read-files.test.js.map +1 -1
- package/dist/files/update-files.js +1 -4
- package/dist/files/update-files.js.map +1 -1
- package/dist/main/codegen-types.d.ts +15 -0
- package/dist/main/codegen.d.ts +2 -2
- package/dist/main/codegen.js +91 -52
- package/dist/main/codegen.js.map +1 -1
- package/dist/main/codegen.test.d.ts +1 -0
- package/dist/main/codegen.test.js +24 -8
- package/dist/main/codegen.test.js.map +1 -1
- package/dist/main/common/content-bus-types.d.ts +16 -0
- package/dist/main/common/content-bus-types.js +7 -0
- package/dist/main/common/content-bus-types.js.map +1 -0
- package/dist/main/common/content-bus.d.ts +9 -0
- package/dist/main/common/content-bus.js +25 -0
- package/dist/main/common/content-bus.js.map +1 -0
- package/dist/main/common/cost-collector.d.ts +11 -0
- package/dist/main/common/cost-collector.js +90 -0
- package/dist/main/common/cost-collector.js.map +1 -0
- package/dist/main/common/user-actions.d.ts +7 -0
- package/dist/main/common/user-actions.js +15 -0
- package/dist/main/common/user-actions.js.map +1 -0
- package/dist/main/config-lib.d.ts +19 -0
- package/dist/main/config-lib.js.map +1 -1
- package/dist/main/config.d.ts +2 -1
- package/dist/main/config.js +3 -0
- package/dist/main/config.js.map +1 -1
- package/dist/main/interactive/codegen-interactive.js +8 -2
- package/dist/main/interactive/codegen-interactive.js.map +1 -1
- package/dist/main/interactive/codegen-interactive.test.d.ts +1 -0
- package/dist/main/interactive/codegen-interactive.test.js +2 -0
- package/dist/main/interactive/codegen-interactive.test.js.map +1 -1
- package/dist/main/interactive/codegen-worker.d.ts +1 -1
- package/dist/main/interactive/codegen-worker.js +10 -4
- package/dist/main/interactive/codegen-worker.js.map +1 -1
- package/dist/main/interactive/task-file.js +9 -2
- package/dist/main/interactive/task-file.js.map +1 -1
- package/dist/main/interactive/user-action-handlers.d.ts +1 -0
- package/dist/main/interactive/user-action-handlers.js +13 -0
- package/dist/main/interactive/user-action-handlers.js.map +1 -0
- package/dist/main/interactive/user-interrupt.js +1 -1
- package/dist/main/interactive/user-interrupt.js.map +1 -1
- package/dist/main/ui/backend/api-utils.d.ts +2 -0
- package/dist/main/ui/backend/api-utils.js +18 -0
- package/dist/main/ui/backend/api-utils.js.map +1 -0
- package/dist/main/ui/backend/api.d.ts +2 -0
- package/dist/main/ui/backend/api.js +186 -0
- package/dist/main/ui/backend/api.js.map +1 -0
- package/dist/main/ui/backend/server.d.ts +2 -0
- package/dist/main/ui/backend/server.js +85 -0
- package/dist/main/ui/backend/server.js.map +1 -0
- package/dist/main/ui/backend/service.d.ts +48 -0
- package/dist/main/ui/backend/service.js +161 -0
- package/dist/main/ui/backend/service.js.map +1 -0
- package/dist/main/ui/codegen-ui.d.ts +2 -0
- package/dist/main/ui/codegen-ui.js +13 -0
- package/dist/main/ui/codegen-ui.js.map +1 -0
- package/dist/main/ui/frontend/assets/index-Bj9ZkmiD.js +638 -0
- package/dist/main/ui/frontend/assets/index-S_ocA1xG.css +1 -0
- package/dist/main/ui/frontend/assets/logo-BGHkG1-J.png +0 -0
- package/dist/main/ui/frontend/assets/logo-dark-KAsU1C78.png +0 -0
- package/dist/main/ui/frontend/assets/press-start-2p-cyrillic-400-normal-oElOGqNf.woff2 +0 -0
- package/dist/main/ui/frontend/assets/press-start-2p-cyrillic-ext-400-normal-COIQET2s.woff2 +0 -0
- package/dist/main/ui/frontend/assets/press-start-2p-greek-400-normal-DUIT0YPZ.woff2 +0 -0
- package/dist/main/ui/frontend/assets/press-start-2p-latin-400-normal-BKfmdmKK.woff +0 -0
- package/dist/main/ui/frontend/assets/press-start-2p-latin-400-normal-xj9lRvVs.woff2 +0 -0
- package/dist/main/ui/frontend/assets/press-start-2p-latin-ext-400-normal-B18ub5-k.woff +0 -0
- package/dist/main/ui/frontend/assets/press-start-2p-latin-ext-400-normal-DDIa4im3.woff2 +0 -0
- package/dist/main/ui/frontend/index.html +16 -0
- package/dist/main/ui/user-action-handlers.d.ts +2 -0
- package/dist/main/ui/user-action-handlers.js +9 -0
- package/dist/main/ui/user-action-handlers.js.map +1 -0
- package/dist/prompt/ai-service-fallback.d.ts +3 -0
- package/dist/prompt/ai-service-fallback.js +84 -0
- package/dist/prompt/ai-service-fallback.js.map +1 -0
- package/dist/prompt/function-calling-validate.js +70 -4
- package/dist/prompt/function-calling-validate.js.map +1 -1
- package/dist/prompt/function-calling.js +11 -1
- package/dist/prompt/function-calling.js.map +1 -1
- package/dist/prompt/function-defs/ask-question-reflect.d.ts +20 -0
- package/dist/prompt/function-defs/ask-question-reflect.js +21 -0
- package/dist/prompt/function-defs/ask-question-reflect.js.map +1 -0
- package/dist/prompt/function-defs/ask-question.d.ts +31 -20
- package/dist/prompt/function-defs/ask-question.js +51 -21
- package/dist/prompt/function-defs/ask-question.js.map +1 -1
- package/dist/prompt/function-defs/codegen-summary.d.ts +23 -21
- package/dist/prompt/function-defs/codegen-summary.js +28 -28
- package/dist/prompt/function-defs/codegen-summary.js.map +1 -1
- package/dist/prompt/function-defs/create-file.d.ts +4 -4
- package/dist/prompt/function-defs/create-file.js +4 -4
- package/dist/prompt/function-defs/create-file.js.map +1 -1
- package/dist/prompt/function-defs/delete-file.d.ts +4 -4
- package/dist/prompt/function-defs/delete-file.js +4 -4
- package/dist/prompt/function-defs/delete-file.js.map +1 -1
- package/dist/prompt/function-defs/generate-image.d.ts +4 -4
- package/dist/prompt/function-defs/generate-image.js +4 -4
- package/dist/prompt/function-defs/generate-image.js.map +1 -1
- package/dist/prompt/function-defs/get-source-code.d.ts +1 -1
- package/dist/prompt/function-defs/get-source-code.js +2 -1
- package/dist/prompt/function-defs/get-source-code.js.map +1 -1
- package/dist/prompt/function-defs/move-file.d.ts +4 -4
- package/dist/prompt/function-defs/move-file.js +4 -4
- package/dist/prompt/function-defs/move-file.js.map +1 -1
- package/dist/prompt/function-defs/optimize-context.d.ts +46 -0
- package/dist/prompt/function-defs/optimize-context.js +47 -0
- package/dist/prompt/function-defs/optimize-context.js.map +1 -0
- package/dist/prompt/function-defs/patch-file.d.ts +4 -4
- package/dist/prompt/function-defs/patch-file.js +4 -4
- package/dist/prompt/function-defs/patch-file.js.map +1 -1
- package/dist/prompt/function-defs/read-history.d.ts +13 -0
- package/dist/prompt/function-defs/read-history.js +14 -0
- package/dist/prompt/function-defs/read-history.js.map +1 -0
- package/dist/prompt/function-defs/set-summaries.d.ts +31 -0
- package/dist/prompt/function-defs/set-summaries.js +32 -0
- package/dist/prompt/function-defs/set-summaries.js.map +1 -0
- package/dist/prompt/function-defs/update-file.d.ts +4 -4
- package/dist/prompt/function-defs/update-file.js +4 -4
- package/dist/prompt/function-defs/update-file.js.map +1 -1
- package/dist/prompt/function-defs/update-history.d.ts +21 -0
- package/dist/prompt/function-defs/update-history.js +22 -0
- package/dist/prompt/function-defs/update-history.js.map +1 -0
- package/dist/prompt/limits.d.ts +3 -3
- package/dist/prompt/limits.js +10 -8
- package/dist/prompt/limits.js.map +1 -1
- package/dist/prompt/limits.test.js +6 -6
- package/dist/prompt/limits.test.js.map +1 -1
- package/dist/prompt/prompt-codegen.js +52 -25
- package/dist/prompt/prompt-codegen.js.map +1 -1
- package/dist/prompt/prompt-codegen.test.js +2 -2
- package/dist/prompt/prompt-codegen.test.js.map +1 -1
- package/dist/prompt/prompt-service-ask-question.test.d.ts +1 -0
- package/dist/prompt/prompt-service-ask-question.test.js +86 -13
- package/dist/prompt/prompt-service-ask-question.test.js.map +1 -1
- package/dist/prompt/prompt-service.d.ts +3 -10
- package/dist/prompt/prompt-service.js +66 -23
- package/dist/prompt/prompt-service.js.map +1 -1
- package/dist/prompt/prompt-service.test.d.ts +1 -0
- package/dist/prompt/prompt-service.test.js +73 -48
- package/dist/prompt/prompt-service.test.js.map +1 -1
- package/dist/prompt/steps/step-ask-question-handlers.d.ts +10 -0
- package/dist/prompt/steps/step-ask-question-handlers.js +265 -0
- package/dist/prompt/steps/step-ask-question-handlers.js.map +1 -0
- package/dist/prompt/steps/step-ask-question-reflect.d.ts +4 -0
- package/dist/prompt/steps/step-ask-question-reflect.js +40 -0
- package/dist/prompt/steps/step-ask-question-reflect.js.map +1 -0
- package/dist/prompt/steps/step-ask-question-types.d.ts +60 -0
- package/dist/prompt/steps/step-ask-question-types.js +2 -0
- package/dist/prompt/steps/step-ask-question-types.js.map +1 -0
- package/dist/prompt/steps/step-ask-question.d.ts +3 -3
- package/dist/prompt/steps/step-ask-question.js +69 -69
- package/dist/prompt/steps/step-ask-question.js.map +1 -1
- package/dist/prompt/steps/step-context-optimization.d.ts +4 -0
- package/dist/prompt/steps/step-context-optimization.js +193 -0
- package/dist/prompt/steps/step-context-optimization.js.map +1 -0
- package/dist/prompt/steps/step-history-update.d.ts +5 -0
- package/dist/prompt/steps/step-history-update.js +54 -0
- package/dist/prompt/steps/step-history-update.js.map +1 -0
- package/dist/prompt/steps/step-summarization.d.ts +8 -0
- package/dist/prompt/steps/step-summarization.js +75 -0
- package/dist/prompt/steps/step-summarization.js.map +1 -0
- package/dist/prompt/steps/step-validate-recover.d.ts +2 -13
- package/dist/prompt/steps/step-validate-recover.js +3 -3
- package/dist/prompt/steps/step-validate-recover.js.map +1 -1
- package/dist/prompt/steps/step-verify-patch.d.ts +1 -2
- package/dist/prompt/steps/step-verify-patch.js +3 -10
- package/dist/prompt/steps/step-verify-patch.js.map +1 -1
- package/dist/prompt/steps/steps-types.d.ts +16 -0
- package/dist/prompt/steps/steps-utils.d.ts +7 -0
- package/dist/prompt/steps/steps-utils.js +11 -0
- package/dist/prompt/steps/steps-utils.js.map +1 -0
- package/dist/prompt/systemprompt.d.ts +1 -1
- package/dist/prompt/systemprompt.js +194 -32
- package/dist/prompt/systemprompt.js.map +1 -1
- package/dist/prompt/systemprompt.test.js +5 -8
- package/dist/prompt/systemprompt.test.js.map +1 -1
- package/dist/prompt/token-estimator.d.ts +8 -0
- package/dist/prompt/token-estimator.js +31 -0
- package/dist/prompt/token-estimator.js.map +1 -0
- package/package.json +28 -4
- package/dist/main/codegen-interactive-utils.d.ts +0 -8
- package/dist/main/codegen-interactive-utils.js +0 -148
- package/dist/main/codegen-interactive-utils.js.map +0 -1
- package/dist/main/codegen-interactive.d.ts +0 -2
- package/dist/main/codegen-interactive.js +0 -68
- package/dist/main/codegen-interactive.js.map +0 -1
- package/dist/main/interactive/worker-script.js +0 -24
- package/dist/main/interactive/worker-script.js.map +0 -1
- package/dist/main/interactive/worker.d.ts +0 -2
- package/dist/main/interactive/worker.js +0 -55
- package/dist/main/interactive/worker.js.map +0 -1
- /package/dist/{main/interactive/worker-script.d.ts → ai-service/unescape-function-call.test.d.ts} +0 -0
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
import { StepResult } from './steps-types.js';
|
|
2
|
+
import { askUserForConfirmation, askUserForInput } from '../../main/common/user-actions.js';
|
|
3
|
+
import { putSystemMessage } from '../../main/common/content-bus.js';
|
|
4
|
+
import { getSourceFiles, refreshFiles } from '../../files/find-files.js';
|
|
5
|
+
import { executeStepContextOptimization } from './step-context-optimization.js';
|
|
6
|
+
import { getSourceCodeResponse } from './steps-utils.js';
|
|
7
|
+
import { getSourceCode } from '../../files/read-files.js';
|
|
8
|
+
export async function handleCancelCodeGeneration({ askQuestionCall }) {
|
|
9
|
+
putSystemMessage('Assistant requested to stop code generation. Exiting...');
|
|
10
|
+
return {
|
|
11
|
+
breakLoop: true,
|
|
12
|
+
stepResult: StepResult.BREAK,
|
|
13
|
+
items: [
|
|
14
|
+
{
|
|
15
|
+
assistant: { type: 'assistant', text: askQuestionCall.args?.content ?? '', functionCalls: [] },
|
|
16
|
+
user: { type: 'user', text: 'Code generation cancelled.' },
|
|
17
|
+
},
|
|
18
|
+
],
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export async function handleConfirmCodeGeneration({ askQuestionCall }) {
|
|
22
|
+
const userConfirmation = await askUserForConfirmation('The assistant is ready to start code generation. Do you want to proceed?', true);
|
|
23
|
+
if (userConfirmation) {
|
|
24
|
+
putSystemMessage('Proceeding with code generation.');
|
|
25
|
+
return {
|
|
26
|
+
breakLoop: true,
|
|
27
|
+
stepResult: StepResult.CONTINUE,
|
|
28
|
+
items: [
|
|
29
|
+
{
|
|
30
|
+
assistant: { type: 'assistant', text: askQuestionCall.args?.content ?? '', functionCalls: [] },
|
|
31
|
+
user: { type: 'user', text: 'Confirmed. Proceed with code generation.' },
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
putSystemMessage('Declined. Continuing the conversation.');
|
|
38
|
+
return {
|
|
39
|
+
breakLoop: false,
|
|
40
|
+
stepResult: StepResult.CONTINUE,
|
|
41
|
+
items: [
|
|
42
|
+
{
|
|
43
|
+
assistant: { type: 'assistant', text: askQuestionCall.args?.content ?? '', functionCalls: [askQuestionCall] },
|
|
44
|
+
user: {
|
|
45
|
+
type: 'user',
|
|
46
|
+
text: 'Declined. Please continue the conversation.',
|
|
47
|
+
functionResponses: [{ name: 'askQuestion', call_id: askQuestionCall.id ?? '', content: undefined }],
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
export async function handleStartCodeGeneration({ askQuestionCall }) {
|
|
55
|
+
putSystemMessage('Proceeding with code generation.');
|
|
56
|
+
return {
|
|
57
|
+
breakLoop: true,
|
|
58
|
+
stepResult: StepResult.CONTINUE,
|
|
59
|
+
items: [
|
|
60
|
+
{
|
|
61
|
+
assistant: { type: 'assistant', text: askQuestionCall.args?.content ?? '', functionCalls: [] },
|
|
62
|
+
user: { type: 'user', text: 'Proceeding with code generation.' },
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export async function handleRequestFilesContent({ askQuestionCall, prompt, options, }) {
|
|
68
|
+
const requestedFiles = askQuestionCall.args?.requestFilesContent ?? [];
|
|
69
|
+
// the request may be caused be an appearance of a new file, so lets refresh
|
|
70
|
+
refreshFiles();
|
|
71
|
+
const { legitimateFiles, illegitimateFiles } = categorizeLegitimateFiles(requestedFiles);
|
|
72
|
+
const assistant = {
|
|
73
|
+
type: 'assistant',
|
|
74
|
+
text: askQuestionCall.args?.content ?? '',
|
|
75
|
+
functionCalls: [askQuestionCall],
|
|
76
|
+
};
|
|
77
|
+
const user = {
|
|
78
|
+
type: 'user',
|
|
79
|
+
text: '',
|
|
80
|
+
functionResponses: [{ name: 'askQuestion', call_id: askQuestionCall.id ?? '', content: undefined }],
|
|
81
|
+
};
|
|
82
|
+
if (legitimateFiles.length > 0) {
|
|
83
|
+
addFileContentsToPrompt(prompt, legitimateFiles, options);
|
|
84
|
+
}
|
|
85
|
+
user.text =
|
|
86
|
+
illegitimateFiles.length > 0
|
|
87
|
+
? 'Some files are not legitimate and their content cannot be provided'
|
|
88
|
+
: 'All requested file contents have been provided automatically.';
|
|
89
|
+
return { breakLoop: false, stepResult: StepResult.CONTINUE, items: [{ assistant, user }] };
|
|
90
|
+
}
|
|
91
|
+
export async function handleRequestPermissions({ askQuestionCall, options, }) {
|
|
92
|
+
const userConfirmation = await askUserForConfirmation('The assistant is requesting additional permissions. Do you want to grant them?', false);
|
|
93
|
+
const user = {
|
|
94
|
+
type: 'user',
|
|
95
|
+
text: userConfirmation ? 'Permissions granted.' : 'Permission request denied.',
|
|
96
|
+
functionResponses: [{ name: 'askQuestion', call_id: askQuestionCall.id ?? '', content: undefined }],
|
|
97
|
+
};
|
|
98
|
+
if (userConfirmation) {
|
|
99
|
+
updatePermissions(askQuestionCall, options);
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
breakLoop: false,
|
|
103
|
+
stepResult: StepResult.CONTINUE,
|
|
104
|
+
items: [
|
|
105
|
+
{
|
|
106
|
+
assistant: { type: 'assistant', text: askQuestionCall.args?.content ?? '', functionCalls: [askQuestionCall] },
|
|
107
|
+
user,
|
|
108
|
+
},
|
|
109
|
+
],
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
export async function handleRemoveFilesFromContext({ askQuestionCall, prompt, }) {
|
|
113
|
+
const filesToRemove = askQuestionCall.args?.removeFilesFromContext ?? [];
|
|
114
|
+
let userText = '';
|
|
115
|
+
if (filesToRemove.length > 0) {
|
|
116
|
+
removeFileContentsFromPrompt(prompt, filesToRemove);
|
|
117
|
+
putSystemMessage('Context reduction applied', filesToRemove);
|
|
118
|
+
userText = 'Context reduction applied';
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
userText = 'No specific files were provided for context reduction. The context remains unchanged.';
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
breakLoop: false,
|
|
125
|
+
stepResult: StepResult.CONTINUE,
|
|
126
|
+
items: [
|
|
127
|
+
{
|
|
128
|
+
assistant: { type: 'assistant', text: askQuestionCall.args?.content ?? '', functionCalls: [askQuestionCall] },
|
|
129
|
+
user: {
|
|
130
|
+
type: 'user',
|
|
131
|
+
text: userText,
|
|
132
|
+
functionResponses: [{ name: 'askQuestion', call_id: askQuestionCall.id ?? '', content: undefined }],
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
],
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
export async function handleContextOptimization({ askQuestionCall, prompt, options, generateContentFn, }) {
|
|
139
|
+
const userConfirmation = await askUserForConfirmation('The assistant suggests optimizing the context to reduce token usage, cost, and latency. Do you want to proceed?', false);
|
|
140
|
+
const user = {
|
|
141
|
+
type: 'user',
|
|
142
|
+
text: userConfirmation ? 'Context optimization applied.' : 'Context optimization not applied.',
|
|
143
|
+
functionResponses: [{ name: 'askQuestion', call_id: askQuestionCall.id ?? '', content: undefined }],
|
|
144
|
+
};
|
|
145
|
+
const assistant = {
|
|
146
|
+
type: 'assistant',
|
|
147
|
+
text: askQuestionCall.args?.content ?? '',
|
|
148
|
+
functionCalls: [askQuestionCall],
|
|
149
|
+
};
|
|
150
|
+
if (userConfirmation) {
|
|
151
|
+
// the request may be caused be an appearance of a new file, so lets refresh
|
|
152
|
+
refreshFiles();
|
|
153
|
+
// Execute context optimization step
|
|
154
|
+
putSystemMessage('Executing context optimization step.');
|
|
155
|
+
await executeStepContextOptimization(generateContentFn, [...prompt, assistant, user], options);
|
|
156
|
+
}
|
|
157
|
+
return {
|
|
158
|
+
breakLoop: false,
|
|
159
|
+
stepResult: StepResult.CONTINUE,
|
|
160
|
+
items: [
|
|
161
|
+
{
|
|
162
|
+
assistant,
|
|
163
|
+
user,
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
export async function handleRequestAnswer({ askQuestionCall }) {
|
|
169
|
+
const userText = await askUserForInput('Your answer', askQuestionCall.args?.content ?? '');
|
|
170
|
+
return {
|
|
171
|
+
breakLoop: false,
|
|
172
|
+
stepResult: StepResult.CONTINUE,
|
|
173
|
+
items: [
|
|
174
|
+
{
|
|
175
|
+
assistant: { type: 'assistant', text: askQuestionCall.args?.content ?? '', functionCalls: [askQuestionCall] },
|
|
176
|
+
user: {
|
|
177
|
+
type: 'user',
|
|
178
|
+
text: userText,
|
|
179
|
+
functionResponses: [{ name: 'askQuestion', call_id: askQuestionCall.id ?? '', content: undefined }],
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
],
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
export async function handleDefaultAction({ askQuestionCall }) {
|
|
186
|
+
return {
|
|
187
|
+
breakLoop: false,
|
|
188
|
+
stepResult: StepResult.CONTINUE,
|
|
189
|
+
items: [
|
|
190
|
+
{
|
|
191
|
+
assistant: { type: 'assistant', text: askQuestionCall.args?.content ?? '', functionCalls: [askQuestionCall] },
|
|
192
|
+
user: {
|
|
193
|
+
type: 'user',
|
|
194
|
+
text: "I don't want to start the code generation yet, let's talk a bit more.",
|
|
195
|
+
functionResponses: [{ name: 'askQuestion', call_id: askQuestionCall.id ?? '', content: undefined }],
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
],
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
function categorizeLegitimateFiles(requestedFiles) {
|
|
202
|
+
const legitimateFiles = [];
|
|
203
|
+
const illegitimateFiles = [];
|
|
204
|
+
requestedFiles.forEach((filePath) => {
|
|
205
|
+
if (isFilePathLegitimate(filePath)) {
|
|
206
|
+
legitimateFiles.push(filePath);
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
illegitimateFiles.push(filePath);
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
return { legitimateFiles, illegitimateFiles };
|
|
213
|
+
}
|
|
214
|
+
function addFileContentsToPrompt(prompt, filesToAdd, options) {
|
|
215
|
+
putSystemMessage('Automatically providing content for legitimate files', filesToAdd);
|
|
216
|
+
const response = getSourceCodeResponse(prompt);
|
|
217
|
+
if (!response || !response.content) {
|
|
218
|
+
throw new Error('Could not find source code response');
|
|
219
|
+
}
|
|
220
|
+
const sourceCode = getSourceCode({ filterPaths: filesToAdd, forceAll: true }, options);
|
|
221
|
+
const contentObj = JSON.parse(response.content);
|
|
222
|
+
filesToAdd.forEach((file) => {
|
|
223
|
+
contentObj[file] = sourceCode[file];
|
|
224
|
+
});
|
|
225
|
+
response.content = JSON.stringify(contentObj);
|
|
226
|
+
}
|
|
227
|
+
function updatePermissions(askQuestionCall, options) {
|
|
228
|
+
if (askQuestionCall.args &&
|
|
229
|
+
typeof askQuestionCall.args === 'object' &&
|
|
230
|
+
'requestPermissions' in askQuestionCall.args) {
|
|
231
|
+
const permissions = askQuestionCall.args.requestPermissions;
|
|
232
|
+
if (permissions && typeof permissions === 'object') {
|
|
233
|
+
if ('enableImagen' in permissions && permissions.enableImagen) {
|
|
234
|
+
options.imagen = options.aiService === 'chat-gpt' ? 'dall-e' : 'vertex-ai';
|
|
235
|
+
}
|
|
236
|
+
if ('enableVision' in permissions && permissions.enableVision)
|
|
237
|
+
options.vision = true;
|
|
238
|
+
if ('allowDirectoryCreate' in permissions && permissions.allowDirectoryCreate)
|
|
239
|
+
options.allowDirectoryCreate = true;
|
|
240
|
+
if ('allowFileCreate' in permissions && permissions.allowFileCreate)
|
|
241
|
+
options.allowFileCreate = true;
|
|
242
|
+
if ('allowFileDelete' in permissions && permissions.allowFileDelete)
|
|
243
|
+
options.allowFileDelete = true;
|
|
244
|
+
if ('allowFileMove' in permissions && permissions.allowFileMove)
|
|
245
|
+
options.allowFileMove = true;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
function removeFileContentsFromPrompt(prompt, filesToRemove) {
|
|
250
|
+
const response = getSourceCodeResponse(prompt);
|
|
251
|
+
if (!response || !response.content) {
|
|
252
|
+
throw new Error('Could not find source code response');
|
|
253
|
+
}
|
|
254
|
+
const contentObj = JSON.parse(response.content);
|
|
255
|
+
filesToRemove.forEach((file) => {
|
|
256
|
+
if (contentObj[file]) {
|
|
257
|
+
delete contentObj[file].content;
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
response.content = JSON.stringify(contentObj);
|
|
261
|
+
}
|
|
262
|
+
function isFilePathLegitimate(filePath) {
|
|
263
|
+
return getSourceFiles().includes(filePath);
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=step-ask-question-handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-ask-question-handlers.js","sourceRoot":"","sources":["../../../src/prompt/steps/step-ask-question-handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { FunctionDef, GenerateContentFunction, PromptItem } from '../../ai-service/common.js';
|
|
2
|
+
import { CodegenOptions } from '../../main/codegen-types.js';
|
|
3
|
+
import { AskQuestionCall, EscalationDecision, SelfReflectionContext } from './step-ask-question-types.js';
|
|
4
|
+
export declare function performSelfReflection(askQuestionCall: AskQuestionCall, context: SelfReflectionContext, prompt: PromptItem[], functionDefs: FunctionDef[], options: CodegenOptions, generateContentFn: GenerateContentFunction): Promise<EscalationDecision>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export async function performSelfReflection(askQuestionCall, context, prompt, functionDefs, options, generateContentFn) {
|
|
2
|
+
if (!options.selfReflectionEnabled) {
|
|
3
|
+
return {
|
|
4
|
+
shouldEscalate: false,
|
|
5
|
+
reason: 'Self-reflection is disabled by user configuration.',
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
const currentTime = Date.now();
|
|
9
|
+
const shouldEscalate = await runSelfReflect(askQuestionCall, prompt, functionDefs, options, generateContentFn);
|
|
10
|
+
if (shouldEscalate) {
|
|
11
|
+
context.escalationCount++;
|
|
12
|
+
context.lastEscalationTime = currentTime;
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
shouldEscalate,
|
|
16
|
+
reason: shouldEscalate
|
|
17
|
+
? 'Response must be escalated to non cheap model'
|
|
18
|
+
: 'Response should not be escalated to non cheap model',
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
async function runSelfReflect(askQuestionCall, prompt, functionDefs, options, generateContentFn) {
|
|
22
|
+
const result = await generateContentFn([
|
|
23
|
+
...prompt,
|
|
24
|
+
{ type: 'assistant', text: askQuestionCall.args?.content ?? '', functionCalls: [askQuestionCall] },
|
|
25
|
+
{
|
|
26
|
+
type: 'user',
|
|
27
|
+
text: `Please reflect on your last response provided in \`askQuestion\` function call in the context of our conversation by considering these questions:
|
|
28
|
+
|
|
29
|
+
- Did you fully understand and address the user's request?
|
|
30
|
+
- Was your response clear, accurate, and helpful?
|
|
31
|
+
- Are you confident that no further clarification or escalation is needed?
|
|
32
|
+
|
|
33
|
+
If your response meets these criteria, continue the conversation as usual. If you believe that escalating to a more advanced model would significantly improve assistance, please indicate that using the \`shouldEscalate\` parameter.`,
|
|
34
|
+
functionResponses: [{ name: 'askQuestion', call_id: askQuestionCall.id ?? '', content: undefined }],
|
|
35
|
+
},
|
|
36
|
+
], functionDefs, 'askQuestionReflect', 0.2, true, options);
|
|
37
|
+
const shouldEscalate = result.find((call) => call.name === 'askQuestionReflect')?.args?.shouldEscalate;
|
|
38
|
+
return shouldEscalate > 50;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=step-ask-question-reflect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-ask-question-reflect.js","sourceRoot":"","sources":["../../../src/prompt/steps/step-ask-question-reflect.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,eAAgC,EAChC,OAA8B,EAC9B,MAAoB,EACpB,YAA2B,EAC3B,OAAuB,EACvB,iBAA0C;IAE1C,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;QACnC,OAAO;YACL,cAAc,EAAE,KAAK;YACrB,MAAM,EAAE,oDAAoD;SAC7D,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE/B,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAE/G,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,CAAC,eAAe,EAAE,CAAC;QAC1B,OAAO,CAAC,kBAAkB,GAAG,WAAW,CAAC;IAC3C,CAAC;IAED,OAAO;QACL,cAAc;QACd,MAAM,EAAE,cAAc;YACpB,CAAC,CAAC,+CAA+C;YACjD,CAAC,CAAC,qDAAqD;KAC1D,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,eAAgC,EAChC,MAAoB,EACpB,YAA2B,EAC3B,OAAuB,EACvB,iBAA0C;IAE1C,MAAM,MAAM,GAAG,MAAM,iBAAiB,CACpC;QACE,GAAG,MAAM;QAET,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,EAAE,aAAa,EAAE,CAAC,eAAe,CAAC,EAAE;QAClG;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE;;;;;;wOAM0N;YAChO,iBAAiB,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;SACpG;KACF,EACD,YAAY,EACZ,oBAAoB,EACpB,GAAG,EACH,IAAI,EACJ,OAAO,CACR,CAAC;IACF,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,oBAAoB,CAAC,EAAE,IAAI,EAAE,cAAwB,CAAC;IACjH,OAAO,cAAc,GAAG,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { FunctionCall, GenerateContentFunction, PromptItem } from '../../ai-service/common.js';
|
|
2
|
+
import { CodegenOptions } from '../../main/codegen-types.js';
|
|
3
|
+
import { StepResult } from './steps-types.js';
|
|
4
|
+
export type ActionType = 'requestAnswer' | 'requestPermissions' | 'requestFilesContent' | 'removeFilesFromContext' | 'confirmCodeGeneration' | 'startCodeGeneration' | 'cancelCodeGeneration' | 'contextOptimization';
|
|
5
|
+
export type AskQuestionArgs = {
|
|
6
|
+
actionType: ActionType;
|
|
7
|
+
content: string;
|
|
8
|
+
requestFilesContent?: string[];
|
|
9
|
+
requestPermissions?: Record<'allowDirectoryCreate' | 'allowFileCreate' | 'allowFileDelete' | 'allowFileMove' | 'enableVision' | 'enableImagen', boolean>;
|
|
10
|
+
removeFilesFromContext?: string[];
|
|
11
|
+
};
|
|
12
|
+
export type AskQuestionCall = FunctionCall<AskQuestionArgs>;
|
|
13
|
+
export interface AssistantItem {
|
|
14
|
+
type: 'assistant';
|
|
15
|
+
text: string;
|
|
16
|
+
functionCalls: FunctionCall[];
|
|
17
|
+
}
|
|
18
|
+
export interface UserItem {
|
|
19
|
+
type: 'user';
|
|
20
|
+
text: string;
|
|
21
|
+
functionResponses?: Array<{
|
|
22
|
+
name: string;
|
|
23
|
+
call_id: string;
|
|
24
|
+
content: string | undefined;
|
|
25
|
+
}>;
|
|
26
|
+
}
|
|
27
|
+
export interface ActionResult {
|
|
28
|
+
breakLoop: boolean;
|
|
29
|
+
stepResult: StepResult;
|
|
30
|
+
items: Array<{
|
|
31
|
+
assistant: AssistantItem;
|
|
32
|
+
user: UserItem;
|
|
33
|
+
}>;
|
|
34
|
+
}
|
|
35
|
+
export type ActionHandlerProps = {
|
|
36
|
+
askQuestionCall: AskQuestionCall;
|
|
37
|
+
prompt: PromptItem[];
|
|
38
|
+
options: CodegenOptions;
|
|
39
|
+
generateContentFn: GenerateContentFunction;
|
|
40
|
+
messages: {
|
|
41
|
+
contextSourceCode: (paths: string[], pathsOnly: boolean) => string;
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
export type ActionHandler = (props: ActionHandlerProps) => Promise<ActionResult>;
|
|
45
|
+
export interface Messages {
|
|
46
|
+
contextSourceCode: (paths: string[], pathsOnly: boolean) => string;
|
|
47
|
+
}
|
|
48
|
+
export interface EscalationDecision {
|
|
49
|
+
shouldEscalate: boolean;
|
|
50
|
+
reason: string;
|
|
51
|
+
}
|
|
52
|
+
export interface SelfReflectionContext {
|
|
53
|
+
escalationCount: number;
|
|
54
|
+
lastEscalationTime: number;
|
|
55
|
+
}
|
|
56
|
+
export type SelfReflectionFunction = (response: AskQuestionCall, context: SelfReflectionContext) => Promise<EscalationDecision>;
|
|
57
|
+
export interface SelfReflectionResult {
|
|
58
|
+
decision: EscalationDecision;
|
|
59
|
+
updatedContext: SelfReflectionContext;
|
|
60
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-ask-question-types.js","sourceRoot":"","sources":["../../../src/prompt/steps/step-ask-question-types.ts"],"names":[],"mappings":""}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FunctionDef, GenerateContentFunction, PromptItem } from '../../ai-service/common.js';
|
|
2
2
|
import { StepResult } from './steps-types.js';
|
|
3
3
|
import { CodegenOptions } from '../../main/codegen-types.js';
|
|
4
|
-
export declare function executeStepAskQuestion(generateContentFn:
|
|
5
|
-
contextSourceCode: (paths: string[]) => string;
|
|
4
|
+
export declare function executeStepAskQuestion(generateContentFn: GenerateContentFunction, prompt: PromptItem[], functionDefs: FunctionDef[], temperature: number, messages: {
|
|
5
|
+
contextSourceCode: (paths: string[], pathsOnly: boolean) => string;
|
|
6
6
|
}, options: CodegenOptions): Promise<StepResult>;
|
|
@@ -1,80 +1,80 @@
|
|
|
1
|
-
import { input, confirm } from '@inquirer/prompts';
|
|
2
1
|
import { StepResult } from './steps-types.js';
|
|
3
|
-
|
|
2
|
+
import { putAssistantMessage, putSystemMessage, putUserMessage } from '../../main/common/content-bus.js';
|
|
3
|
+
import { abortController } from '../../main/interactive/codegen-worker.js';
|
|
4
|
+
import { validateAndRecoverSingleResult } from './step-validate-recover.js';
|
|
5
|
+
import { handleCancelCodeGeneration, handleConfirmCodeGeneration, handleStartCodeGeneration, handleRequestFilesContent, handleRequestPermissions, handleRemoveFilesFromContext, handleRequestAnswer, handleDefaultAction, handleContextOptimization, } from './step-ask-question-handlers.js';
|
|
6
|
+
import { performSelfReflection } from './step-ask-question-reflect.js';
|
|
7
|
+
export async function executeStepAskQuestion(generateContentFn, prompt, functionDefs, temperature, messages, options) {
|
|
4
8
|
console.log('Allowing the assistant to ask a question...');
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
return StepResult.BREAK;
|
|
14
|
-
}
|
|
15
|
-
else if (!askQuestionCall.args?.shouldPrompt) {
|
|
16
|
-
console.log('Proceeding with code generation.');
|
|
9
|
+
const selfReflectionContext = {
|
|
10
|
+
escalationCount: 0,
|
|
11
|
+
lastEscalationTime: 0,
|
|
12
|
+
};
|
|
13
|
+
while (!abortController?.signal.aborted) {
|
|
14
|
+
try {
|
|
15
|
+
const askQuestionCall = await getAskQuestionCall(generateContentFn, prompt, functionDefs, temperature, options, selfReflectionContext);
|
|
16
|
+
if (!askQuestionCall) {
|
|
17
17
|
break;
|
|
18
18
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
message: 'The assistant is requesting additional permissions. Do you want to grant them?',
|
|
32
|
-
default: false,
|
|
33
|
-
}))
|
|
34
|
-
? 'Permissions granted.'
|
|
35
|
-
: 'Permission request denied.'
|
|
36
|
-
: await input({ message: 'Your answer' })
|
|
37
|
-
: "Let's proceed with code generation.";
|
|
38
|
-
if (permissionsRequested && askQuestionCall.args?.requestPermissions && userAnswer === 'Permissions granted.') {
|
|
39
|
-
if (askQuestionCall.args?.requestPermissions.enableImagen) {
|
|
40
|
-
options.imagen = options.aiService === 'chat-gpt' ? 'dall-e' : 'vertex-ai';
|
|
41
|
-
}
|
|
42
|
-
if (askQuestionCall.args?.requestPermissions.enableVision) {
|
|
43
|
-
options.vision = true;
|
|
44
|
-
}
|
|
45
|
-
if (askQuestionCall.args?.requestPermissions.allowDirectoryCreate) {
|
|
46
|
-
options.allowDirectoryCreate = true;
|
|
47
|
-
}
|
|
48
|
-
if (askQuestionCall.args?.requestPermissions.allowFileCreate) {
|
|
49
|
-
options.allowFileCreate = true;
|
|
50
|
-
}
|
|
51
|
-
if (askQuestionCall.args?.requestPermissions.allowFileDelete) {
|
|
52
|
-
options.allowFileDelete = true;
|
|
53
|
-
}
|
|
54
|
-
if (askQuestionCall.args?.requestPermissions.allowFileMove) {
|
|
55
|
-
options.allowFileMove = true;
|
|
19
|
+
console.log('Assistant asks:', askQuestionCall.args);
|
|
20
|
+
if (askQuestionCall.args?.content) {
|
|
21
|
+
putAssistantMessage(askQuestionCall.args.content, askQuestionCall.args);
|
|
22
|
+
}
|
|
23
|
+
const actionType = askQuestionCall.args?.actionType;
|
|
24
|
+
if (actionType) {
|
|
25
|
+
const actionHandler = getActionHandler(actionType);
|
|
26
|
+
const result = await actionHandler({ askQuestionCall, prompt, options, messages, generateContentFn });
|
|
27
|
+
// This is important to display the content to the user interface (ui or interactive cli)
|
|
28
|
+
putUserMessage(result.items.slice(-1)[0].user.text);
|
|
29
|
+
if (result.breakLoop) {
|
|
30
|
+
return result.stepResult;
|
|
56
31
|
}
|
|
32
|
+
prompt.push(...result.items.map(({ assistant, user }) => [assistant, user]).flat());
|
|
33
|
+
console.log('The question was answered');
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
console.error('Invalid action type received');
|
|
37
|
+
break;
|
|
57
38
|
}
|
|
58
|
-
prompt.push({ type: 'assistant', functionCalls: [askQuestionCall] }, {
|
|
59
|
-
type: 'user',
|
|
60
|
-
text: userAnswer,
|
|
61
|
-
functionResponses: [
|
|
62
|
-
{
|
|
63
|
-
name: 'askQuestion',
|
|
64
|
-
call_id: askQuestionCall.id,
|
|
65
|
-
content: fileContentRequested && userAnswer === 'Providing requested files content.'
|
|
66
|
-
? messages.contextSourceCode(askQuestionCall.args.requestFilesContent)
|
|
67
|
-
: undefined,
|
|
68
|
-
},
|
|
69
|
-
],
|
|
70
|
-
});
|
|
71
|
-
console.log('The question was answered', userAnswer);
|
|
72
39
|
}
|
|
73
|
-
|
|
74
|
-
console.
|
|
75
|
-
|
|
40
|
+
catch (error) {
|
|
41
|
+
console.error('Error in executeStepAskQuestion:', error);
|
|
42
|
+
putSystemMessage(`An error occurred: ${error instanceof Error ? error.message : String(error)}`);
|
|
43
|
+
return StepResult.BREAK;
|
|
76
44
|
}
|
|
77
45
|
}
|
|
78
|
-
|
|
46
|
+
putSystemMessage('Assistant did not ask a question. This unexpected, we need to abort.');
|
|
47
|
+
return StepResult.BREAK;
|
|
48
|
+
}
|
|
49
|
+
async function getAskQuestionCall(generateContentFn, prompt, functionDefs, temperature, options, selfReflectionContext) {
|
|
50
|
+
const askQuestionRequest = [prompt, functionDefs, 'askQuestion', temperature, true, options];
|
|
51
|
+
let askQuestionResult = await generateContentFn(...askQuestionRequest);
|
|
52
|
+
askQuestionResult = await validateAndRecoverSingleResult(askQuestionRequest, askQuestionResult, generateContentFn);
|
|
53
|
+
const cheapModelResponse = askQuestionResult.find((call) => call.name === 'askQuestion');
|
|
54
|
+
if (cheapModelResponse) {
|
|
55
|
+
const escalationDecision = await performSelfReflection(cheapModelResponse, selfReflectionContext, prompt, functionDefs, options, generateContentFn);
|
|
56
|
+
if (escalationDecision.shouldEscalate) {
|
|
57
|
+
console.log('Self-reflection suggests escalating to non-cheap model.');
|
|
58
|
+
// Re-run with non-cheap model
|
|
59
|
+
const nonCheapRequest = [prompt, functionDefs, 'askQuestion', temperature, false, options];
|
|
60
|
+
let nonCheapResult = await generateContentFn(...nonCheapRequest);
|
|
61
|
+
nonCheapResult = await validateAndRecoverSingleResult(nonCheapRequest, nonCheapResult, generateContentFn);
|
|
62
|
+
return nonCheapResult.find((call) => call.name === 'askQuestion');
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return cheapModelResponse;
|
|
66
|
+
}
|
|
67
|
+
function getActionHandler(actionType) {
|
|
68
|
+
const handlers = {
|
|
69
|
+
cancelCodeGeneration: handleCancelCodeGeneration,
|
|
70
|
+
confirmCodeGeneration: handleConfirmCodeGeneration,
|
|
71
|
+
startCodeGeneration: handleStartCodeGeneration,
|
|
72
|
+
requestFilesContent: handleRequestFilesContent,
|
|
73
|
+
requestPermissions: handleRequestPermissions,
|
|
74
|
+
removeFilesFromContext: handleRemoveFilesFromContext,
|
|
75
|
+
requestAnswer: handleRequestAnswer,
|
|
76
|
+
contextOptimization: handleContextOptimization,
|
|
77
|
+
};
|
|
78
|
+
return handlers[actionType] || handleDefaultAction;
|
|
79
79
|
}
|
|
80
80
|
//# sourceMappingURL=step-ask-question.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-ask-question.js","sourceRoot":"","sources":["../../../src/prompt/steps/step-ask-question.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"step-ask-question.js","sourceRoot":"","sources":["../../../src/prompt/steps/step-ask-question.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { GenerateContentFunction, PromptItem } from '../../ai-service/common.js';
|
|
2
|
+
import { CodegenOptions } from '../../main/codegen-types.js';
|
|
3
|
+
import { StepResult } from './steps-types.js';
|
|
4
|
+
export declare function executeStepContextOptimization(generateContentFn: GenerateContentFunction, prompt: PromptItem[], options: CodegenOptions): Promise<StepResult>;
|