genaicode 0.6.1 → 0.8.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 +0 -2
- 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 +1 -4
- package/dist/cli/cli-params.js +1 -10
- 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 +93 -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 +34 -0
- package/dist/eval/data/current-prompt.js +59 -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 +76 -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 +29 -6
- package/dist/files/read-files.js +31 -10
- package/dist/files/read-files.js.map +1 -1
- package/dist/files/read-files.test.js +15 -9
- package/dist/files/read-files.test.js.map +1 -1
- package/dist/files/source-code-tree.d.ts +17 -0
- package/dist/files/source-code-tree.js +70 -0
- package/dist/files/source-code-tree.js.map +1 -0
- package/dist/main/codegen-types.d.ts +8 -5
- 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 +2 -5
- 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/config-lib.js +20 -2
- package/dist/main/config-lib.js.map +1 -1
- package/dist/main/config.js +4 -28
- package/dist/main/config.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 +1 -7
- 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 +7 -1
- package/dist/main/plugin-loader.js +61 -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-QOcNx5ac.js +812 -0
- 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/project-profiles/detection.d.ts +40 -0
- package/dist/project-profiles/detection.js +131 -0
- package/dist/project-profiles/detection.js.map +1 -0
- package/dist/project-profiles/index.d.ts +35 -0
- package/dist/project-profiles/index.js +72 -0
- package/dist/project-profiles/index.js.map +1 -0
- package/dist/project-profiles/profiles/golang.d.ts +65 -0
- package/dist/project-profiles/profiles/golang.js +208 -0
- package/dist/project-profiles/profiles/golang.js.map +1 -0
- package/dist/project-profiles/profiles/java-maven.d.ts +80 -0
- package/dist/project-profiles/profiles/java-maven.js +165 -0
- package/dist/project-profiles/profiles/java-maven.js.map +1 -0
- package/dist/project-profiles/profiles/javascript-npm.d.ts +40 -0
- package/dist/project-profiles/profiles/javascript-npm.js +118 -0
- package/dist/project-profiles/profiles/javascript-npm.js.map +1 -0
- package/dist/project-profiles/profiles/javascript-react.d.ts +46 -0
- package/dist/project-profiles/profiles/javascript-react.js +147 -0
- package/dist/project-profiles/profiles/javascript-react.js.map +1 -0
- package/dist/project-profiles/profiles/python-django.d.ts +58 -0
- package/dist/project-profiles/profiles/python-django.js +200 -0
- package/dist/project-profiles/profiles/python-django.js.map +1 -0
- package/dist/project-profiles/types.d.ts +122 -0
- package/dist/project-profiles/types.js +77 -0
- package/dist/project-profiles/types.js.map +1 -0
- 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/function-defs/set-summaries.js +20 -1
- package/dist/prompt/function-defs/set-summaries.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 +8 -14
- package/dist/prompt/prompt-codegen.test.js.map +1 -1
- package/dist/prompt/prompt-service-ask-question.test.js +27 -80
- 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 +41 -127
- 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 -3
- package/dist/prompt/steps/step-ask-question/handlers/cancel-code-generation.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/code-generation.d.ts +2 -0
- package/dist/prompt/steps/step-ask-question/handlers/code-generation.js +58 -0
- package/dist/prompt/steps/step-ask-question/handlers/code-generation.js.map +1 -0
- 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 +8 -7
- 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 -6
- 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 -4
- 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 +97 -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 +20 -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 +57 -15
- 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 +109 -12
- 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 +48 -26
- 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 +25 -21
- package/dist/prompt/steps/step-ask-question/step-ask-question.d.ts +2 -5
- package/dist/prompt/steps/step-ask-question/step-ask-question.js +36 -33
- 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-codegen-summary.d.ts +7 -0
- package/dist/prompt/steps/step-codegen-summary.js +106 -0
- package/dist/prompt/steps/step-codegen-summary.js.map +1 -0
- package/dist/prompt/steps/step-codegen-summary.test.d.ts +1 -0
- package/dist/prompt/steps/step-codegen-summary.test.js +136 -0
- package/dist/prompt/steps/step-codegen-summary.test.js.map +1 -0
- package/dist/prompt/steps/step-context-optimization.js +243 -126
- 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 +475 -0
- package/dist/prompt/steps/step-context-optimization.test.js.map +1 -0
- package/dist/prompt/steps/step-ensure-context.d.ts +15 -0
- package/dist/prompt/steps/step-ensure-context.js +102 -0
- package/dist/prompt/steps/step-ensure-context.js.map +1 -0
- package/dist/prompt/steps/step-ensure-context.test.d.ts +1 -0
- package/dist/prompt/steps/step-ensure-context.test.js +242 -0
- package/dist/prompt/steps/step-ensure-context.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 +2 -2
- package/dist/prompt/steps/step-summarization.js +45 -9
- 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/steps/steps-types.d.ts +2 -0
- package/dist/prompt/steps/steps-types.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 +4 -5
- package/dist/prompt/systemprompt.test.js.map +1 -1
- package/dist/vite-genaicode/vite-genaicode-plugin.js +0 -2
- package/dist/vite-genaicode/vite-genaicode-plugin.js.map +1 -1
- package/package.json +6 -2
- package/dist/main/ui/frontend/assets/index-Dk_qaEQg.js +0 -782
|
@@ -6,147 +6,138 @@ import { estimateTokenCount } from '../token-estimator.js';
|
|
|
6
6
|
import { getSummary } from './step-summarization.js';
|
|
7
7
|
import { validateAndRecoverSingleResult } from './step-validate-recover.js';
|
|
8
8
|
import { getSourceCodeResponse } from './steps-utils.js';
|
|
9
|
+
import { getSourceCodeTree, parseSourceCodeTree } from '../../files/source-code-tree.js';
|
|
9
10
|
const OPTIMIZATION_PROMPT = `You're correct, we need to optimize the context for code generation. Please perform the following tasks and respond by calling the \`optimizeContext\` function with the appropriate arguments:
|
|
10
11
|
|
|
11
|
-
1. **Relevance and
|
|
12
|
+
1. **Relevance and Dependency Analysis**:
|
|
12
13
|
- Rate the **relevance** of each file to the user's prompt on a scale from **0 to 1**, using the following guidelines:
|
|
13
14
|
- **0.0 – 0.3 (Not Relevant)**: The file has no apparent connection to the user's prompt.
|
|
14
15
|
- **0.3 – 0.7 (Somewhat Relevant)**: The file has minor or indirect relevance to the prompt.
|
|
15
16
|
- **0.7 – 0.9 (Moderately Relevant)**: The file is related and could contribute to addressing the prompt.
|
|
16
17
|
- **0.9 – 1.0 (Highly Relevant)**: The file is directly related and is important for addressing the prompt.
|
|
18
|
+
|
|
17
19
|
- **Evaluation Criteria**:
|
|
18
|
-
- **
|
|
19
|
-
- **
|
|
20
|
-
- **
|
|
21
|
-
|
|
22
|
-
- Consider the cost of adding more tokens; prioritize files where the relevance justifies the token usage.
|
|
20
|
+
- **Direct Relevance**: Does the file directly implement features mentioned in the prompt?
|
|
21
|
+
- **Dependency Chain**: Is the file part of a dependency chain of relevant files?
|
|
22
|
+
- **Keyword Matching**: Does the file contain keywords or topics from the prompt?
|
|
23
|
+
- **Dependency Importance**: Is the file a critical dependency for other relevant files?
|
|
23
24
|
|
|
24
|
-
2. **
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
|
|
25
|
+
2. **Dependency-Aware Optimization**:
|
|
26
|
+
- Consider both direct and indirect dependencies
|
|
27
|
+
- Prioritize files that are:
|
|
28
|
+
- Directly relevant to the prompt
|
|
29
|
+
- Dependencies of highly relevant files
|
|
30
|
+
- Part of important dependency chains
|
|
31
|
+
- Handle dependency chains intelligently:
|
|
32
|
+
- Include critical dependencies even if they seem less relevant
|
|
33
|
+
- Consider the full dependency tree when evaluating relevance
|
|
34
|
+
- Avoid breaking dependency chains of important files
|
|
28
35
|
|
|
29
|
-
3. **
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
- \`"path"\`: The absolute file path.
|
|
35
|
-
- \`"relevance"\`: The calculated relevance score (0 to 1).
|
|
36
|
-
- \`"tokenCount"\`: The token count for the file.
|
|
37
|
-
- \`"totalTokenCount"\`: The estimated total token count for the context.
|
|
36
|
+
3. **Token-Aware Optimization**:
|
|
37
|
+
- Balance relevance against token usage
|
|
38
|
+
- Consider the combined token cost of dependency chains
|
|
39
|
+
- Prioritize files where the relevance justifies the token usage
|
|
40
|
+
- Consider the token cost of including entire dependency chains
|
|
38
41
|
|
|
39
|
-
**
|
|
40
|
-
-
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
-
|
|
44
|
-
-
|
|
45
|
-
- **Provide the response in valid JSON format**.
|
|
46
|
-
- **Do not include any extra text** outside of the function call.
|
|
47
|
-
- **Ensure the JSON is properly formatted** and **does not contain strings representing JSON** (i.e., do not stringify the JSON, do not wrap strings into quotes).
|
|
48
|
-
- **Do not return files which are not relevant to the user prompt. Use relevance rating to judge that**
|
|
49
|
-
|
|
50
|
-
**Example of valid Function Call**:
|
|
42
|
+
4. **Function Call Response**:
|
|
43
|
+
- Call the \`optimizeContext\` function with:
|
|
44
|
+
- \`"userPrompt"\`: The original prompt
|
|
45
|
+
- \`"optimizedContext"\`: Array of objects containing:
|
|
46
|
+
- \`"filePath"\`: Absolute file path
|
|
47
|
+
- \`"relevance"\`: Calculated relevance score (0 to 1)
|
|
51
48
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
"relevance": 0.9,
|
|
62
|
-
"tokenCount": 500
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
"path": "/home/src/utils/math.js",
|
|
66
|
-
"relevance": 0.8,
|
|
67
|
-
"tokenCount": 300
|
|
68
|
-
}
|
|
69
|
-
]
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
\`\`\`
|
|
49
|
+
**Important Guidelines**:
|
|
50
|
+
- **Only include files from \`getSourceCode\` response**
|
|
51
|
+
- **Do not guess or infer additional files**
|
|
52
|
+
- **Evaluate each file individually and as part of dependency chains**
|
|
53
|
+
- **Consider both direct and indirect dependencies**
|
|
54
|
+
- **Ensure proper JSON formatting**
|
|
55
|
+
- **Include full file paths**
|
|
56
|
+
- **Filter out low-relevance files (< 0.5)**
|
|
57
|
+
- **Maintain dependency chain integrity**
|
|
73
58
|
|
|
74
59
|
Now could you please analyze the source code and return me the optimized context?
|
|
75
60
|
`;
|
|
76
|
-
const BATCH_SIZE = 100;
|
|
77
61
|
const MAX_TOTAL_TOKENS = 10000;
|
|
78
62
|
export async function executeStepContextOptimization(generateContentFn, prompt, options) {
|
|
79
63
|
const fullSourceCode = getSourceCode({ forceAll: true }, options);
|
|
64
|
+
const tokensBefore = estimateTokenCount(JSON.stringify(fullSourceCode));
|
|
65
|
+
if (tokensBefore < MAX_TOTAL_TOKENS) {
|
|
66
|
+
putSystemMessage('Context optimization is not needed, because the code base is small.');
|
|
67
|
+
return StepResult.CONTINUE;
|
|
68
|
+
}
|
|
80
69
|
const sourceCodeResponse = getSourceCodeResponse(prompt);
|
|
81
70
|
if (!sourceCodeResponse || !sourceCodeResponse.content) {
|
|
82
71
|
console.warn('Could not find source code response, something is wrong, but lets continue anyway.');
|
|
83
72
|
return StepResult.CONTINUE;
|
|
84
73
|
}
|
|
85
|
-
const sourceCode = JSON.parse(sourceCodeResponse.content);
|
|
86
|
-
const sourceCodeEntries = Object.entries(sourceCode);
|
|
87
|
-
// Lets remove source code from the context, because we will be providing it below, so lets not duplicate (and save some tokens)
|
|
88
|
-
const sourceCodeResponseContent = sourceCodeResponse.content;
|
|
89
|
-
sourceCodeResponse.content = '{}';
|
|
74
|
+
const sourceCode = parseSourceCodeTree(JSON.parse(sourceCodeResponse.content));
|
|
90
75
|
try {
|
|
91
76
|
putSystemMessage('Context optimization is starting');
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
text: OPTIMIZATION_PROMPT,
|
|
111
|
-
functionResponses: [
|
|
112
|
-
{ call_id: 'get_batch_source', name: 'getSourceCode', content: JSON.stringify(batchSourceCode) },
|
|
113
|
-
],
|
|
114
|
-
},
|
|
115
|
-
];
|
|
116
|
-
const request = [
|
|
117
|
-
optimizationPrompt,
|
|
118
|
-
getFunctionDefs(),
|
|
119
|
-
'optimizeContext',
|
|
120
|
-
0.2,
|
|
121
|
-
true,
|
|
122
|
-
options,
|
|
123
|
-
];
|
|
124
|
-
let result = await generateContentFn(...request);
|
|
125
|
-
result = await validateAndRecoverSingleResult(request, result, generateContentFn);
|
|
126
|
-
const batchOptimized = parseOptimizationResult(result);
|
|
127
|
-
if (!batchOptimized) {
|
|
128
|
-
putSystemMessage(`Warning: Context optimization failed to produce useful summaries for batch ${batchIndex + 1}. We need to abort.`);
|
|
129
|
-
return StepResult.BREAK;
|
|
130
|
-
}
|
|
131
|
-
optimizedContext.clear();
|
|
132
|
-
batchOptimized.forEach((path) => optimizedContext.add(path));
|
|
77
|
+
const optimizationPrompt = [
|
|
78
|
+
...prompt,
|
|
79
|
+
{
|
|
80
|
+
type: 'assistant',
|
|
81
|
+
text: 'Thank you for describing the task, I have noticed you have provided a very large context for your question. The amount of source code is very big in particular. Can we do something about it?',
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
type: 'user',
|
|
85
|
+
text: OPTIMIZATION_PROMPT,
|
|
86
|
+
},
|
|
87
|
+
];
|
|
88
|
+
const request = [optimizationPrompt, getFunctionDefs(), 'optimizeContext', 0.2, true, options];
|
|
89
|
+
let result = await generateContentFn(...request);
|
|
90
|
+
result = await validateAndRecoverSingleResult(request, result, generateContentFn);
|
|
91
|
+
const [optimizedContext, irrelevantFiles] = parseOptimizationResult(fullSourceCode, result);
|
|
92
|
+
if (!optimizedContext) {
|
|
93
|
+
putSystemMessage(`Warning: Context optimization failed. We need to abort.`);
|
|
94
|
+
return StepResult.BREAK;
|
|
133
95
|
}
|
|
134
|
-
if (optimizedContext.
|
|
135
|
-
// Restore the original context
|
|
136
|
-
sourceCodeResponse.content = sourceCodeResponseContent;
|
|
96
|
+
if (optimizedContext.length === 0) {
|
|
137
97
|
putSystemMessage('Warning: Context optimization failed to produce useful summaries for all batches. Proceeding with current context.');
|
|
138
98
|
return StepResult.CONTINUE;
|
|
139
99
|
}
|
|
140
|
-
const tokensBefore = estimateTokenCount(JSON.stringify(fullSourceCode));
|
|
141
100
|
putSystemMessage('Context optimization in progress.', Array.from(optimizedContext));
|
|
142
|
-
const optimizedSourceCode = optimizeSourceCode(sourceCode, fullSourceCode, Array.from(optimizedContext));
|
|
101
|
+
const [optimizedSourceCode, contentTokenCount, summaryTokenCount] = optimizeSourceCode(sourceCode, fullSourceCode, Array.from(optimizedContext), irrelevantFiles);
|
|
143
102
|
const tokensAfter = estimateTokenCount(JSON.stringify(optimizedSourceCode));
|
|
144
103
|
const percentageReduced = ((tokensBefore - tokensAfter) / tokensBefore) * 100;
|
|
145
|
-
//
|
|
146
|
-
|
|
104
|
+
// Clear previous getSourceCode responses
|
|
105
|
+
clearPreviousSourceCodeResponses(prompt, irrelevantFiles);
|
|
106
|
+
prompt.push({
|
|
107
|
+
type: 'assistant',
|
|
108
|
+
functionCalls: [
|
|
109
|
+
{
|
|
110
|
+
name: 'requestFilesContent',
|
|
111
|
+
args: {
|
|
112
|
+
filePaths: Object.keys(optimizedSourceCode),
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: 'getSourceCode',
|
|
117
|
+
args: {
|
|
118
|
+
filePaths: Object.keys(optimizedSourceCode),
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
],
|
|
122
|
+
}, {
|
|
123
|
+
type: 'user',
|
|
124
|
+
functionResponses: [
|
|
125
|
+
{
|
|
126
|
+
name: 'requestFilesContent',
|
|
127
|
+
content: JSON.stringify({ filePaths: Object.keys(optimizedSourceCode) }),
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
name: 'getSourceCode',
|
|
131
|
+
content: JSON.stringify(getSourceCodeTree(optimizedSourceCode)),
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
cache: true,
|
|
135
|
+
});
|
|
147
136
|
putSystemMessage('Context optimization completed successfully.', {
|
|
148
137
|
tokensBefore,
|
|
149
138
|
tokensAfter,
|
|
139
|
+
contentTokenCount,
|
|
140
|
+
summaryTokenCount,
|
|
150
141
|
percentageReduced: percentageReduced.toFixed(2) + '%',
|
|
151
142
|
});
|
|
152
143
|
return StepResult.CONTINUE;
|
|
@@ -157,44 +148,170 @@ export async function executeStepContextOptimization(generateContentFn, prompt,
|
|
|
157
148
|
return StepResult.BREAK;
|
|
158
149
|
}
|
|
159
150
|
}
|
|
160
|
-
function parseOptimizationResult(calls) {
|
|
151
|
+
function parseOptimizationResult(fullSourceCode, calls) {
|
|
161
152
|
const optimizeCall = calls.find((call) => call.name === 'optimizeContext');
|
|
162
153
|
if (!optimizeCall || !optimizeCall.args || !optimizeCall.args.optimizedContext) {
|
|
163
|
-
return
|
|
154
|
+
return [[], new Set()];
|
|
164
155
|
}
|
|
165
156
|
let totalTokens = 0;
|
|
166
157
|
const result = [];
|
|
167
|
-
|
|
168
|
-
|
|
158
|
+
const relevantFiles = new Set();
|
|
159
|
+
const irrelevantFiles = new Set();
|
|
160
|
+
// First pass: collect initially relevant files and track irrelevant ones
|
|
161
|
+
for (const item of optimizeCall.args.optimizedContext) {
|
|
162
|
+
if (item.relevance >= 0.5) {
|
|
163
|
+
relevantFiles.add(item.filePath);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
irrelevantFiles.add(item.filePath);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// Add files which are in full source and are not in the optimized context
|
|
170
|
+
for (const filePath in fullSourceCode) {
|
|
171
|
+
if (!relevantFiles.has(filePath) && !irrelevantFiles.has(filePath)) {
|
|
172
|
+
irrelevantFiles.add(filePath);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// Second pass: calculate final relevance including dependency weights
|
|
176
|
+
for (const item of optimizeCall.args.optimizedContext.sort((a, b) => a.relevance > b.relevance ? -1 : 1)) {
|
|
177
|
+
const { filePath, relevance } = item;
|
|
178
|
+
if (relevance < 0.5) {
|
|
169
179
|
break;
|
|
170
180
|
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
181
|
+
// Calculate dependency weight (0-0.3) and add to base relevance
|
|
182
|
+
const depWeight = calculateDependencyWeight(filePath, fullSourceCode, relevantFiles);
|
|
183
|
+
const finalRelevance = Math.min(1, relevance + depWeight);
|
|
184
|
+
const content = (fullSourceCode[filePath] && 'content' in fullSourceCode[filePath]
|
|
185
|
+
? fullSourceCode[filePath]?.content
|
|
186
|
+
: undefined) ?? '';
|
|
187
|
+
// Get all dependencies for token counting
|
|
188
|
+
const allDeps = getAllDependencies(filePath, fullSourceCode);
|
|
189
|
+
const depsContent = Array.from(allDeps)
|
|
190
|
+
.map((dep) => (fullSourceCode[dep] && 'content' in fullSourceCode[dep] ? fullSourceCode[dep]?.content : undefined) ?? '')
|
|
191
|
+
.join('');
|
|
192
|
+
totalTokens += estimateTokenCount(content + depsContent);
|
|
193
|
+
result.push([item.filePath, finalRelevance]);
|
|
194
|
+
// Break if we exceed token limit and the file isn't highly relevant
|
|
195
|
+
if (totalTokens > MAX_TOTAL_TOKENS && finalRelevance < 0.7) {
|
|
174
196
|
break;
|
|
175
197
|
}
|
|
176
198
|
}
|
|
177
|
-
return result;
|
|
199
|
+
return [result, irrelevantFiles];
|
|
178
200
|
}
|
|
179
|
-
function optimizeSourceCode(sourceCode, fullSourceCode, optimizedContext) {
|
|
201
|
+
function optimizeSourceCode(sourceCode, fullSourceCode, optimizedContext, irrelevantFiles) {
|
|
180
202
|
const optimizedSourceCode = {};
|
|
181
|
-
|
|
182
|
-
|
|
203
|
+
let contentTokenCount = 0;
|
|
204
|
+
let summaryTokenCount = 0;
|
|
205
|
+
// Create a set of all required files (including dependencies)
|
|
206
|
+
const requiredFiles = new Set();
|
|
207
|
+
for (const [path] of optimizedContext) {
|
|
208
|
+
requiredFiles.add(path);
|
|
209
|
+
// Add all dependencies
|
|
210
|
+
const deps = getAllDependencies(path, fullSourceCode);
|
|
211
|
+
deps.forEach((dep) => requiredFiles.add(dep));
|
|
212
|
+
}
|
|
213
|
+
for (const [path] of Object.entries(fullSourceCode)) {
|
|
214
|
+
const isRequired = requiredFiles.has(path);
|
|
215
|
+
const isIrrelevant = irrelevantFiles.has(path);
|
|
183
216
|
const summary = getSummary(path);
|
|
184
|
-
|
|
217
|
+
const content = (fullSourceCode[path] && 'content' in fullSourceCode[path] ? fullSourceCode[path]?.content : undefined) ?? null;
|
|
218
|
+
const dependencies = fullSourceCode[path] && 'dependencies' in fullSourceCode[path] ? fullSourceCode[path]?.dependencies : undefined;
|
|
219
|
+
if (isRequired && content && !(sourceCode[path] && 'content' in sourceCode[path])) {
|
|
220
|
+
contentTokenCount += estimateTokenCount(content);
|
|
221
|
+
optimizedSourceCode[path] = {
|
|
222
|
+
content,
|
|
223
|
+
...(dependencies && !isIrrelevant && { dependencies }),
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
else if (summary && !isIrrelevant) {
|
|
227
|
+
summaryTokenCount += estimateTokenCount(summary.summary);
|
|
185
228
|
optimizedSourceCode[path] = {
|
|
186
|
-
content: ('content' in fullSourceCode[path] ? fullSourceCode[path]?.content : undefined) ?? null,
|
|
187
229
|
...summary,
|
|
230
|
+
...(dependencies && { dependencies }),
|
|
188
231
|
};
|
|
189
232
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
233
|
+
}
|
|
234
|
+
return [optimizedSourceCode, contentTokenCount, summaryTokenCount];
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Helper function to clear content from previous getSourceCode responses while preserving the conversation structure
|
|
238
|
+
*/
|
|
239
|
+
function clearPreviousSourceCodeResponses(prompt, irrelevantFiles) {
|
|
240
|
+
for (const item of prompt) {
|
|
241
|
+
if (item.type === 'user' && item.functionResponses) {
|
|
242
|
+
for (const response of item.functionResponses) {
|
|
243
|
+
if (response.name === 'getSourceCode' && response.content) {
|
|
244
|
+
// Zero out the contents but keep the structure
|
|
245
|
+
const sourceCode = parseSourceCodeTree(JSON.parse(response.content));
|
|
246
|
+
for (const path in sourceCode) {
|
|
247
|
+
if ('content' in sourceCode[path]) {
|
|
248
|
+
sourceCode[path].content = null;
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
// Zero out content for irrelevant files
|
|
252
|
+
const file = sourceCode[path];
|
|
253
|
+
file.content = null;
|
|
254
|
+
}
|
|
255
|
+
if (irrelevantFiles.has(path) && sourceCode[path]) {
|
|
256
|
+
// Remove summary and dependencies for irrelevant files
|
|
257
|
+
if ('summary' in sourceCode[path]) {
|
|
258
|
+
delete sourceCode[path].summary;
|
|
259
|
+
}
|
|
260
|
+
delete sourceCode[path].dependencies;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
response.content = JSON.stringify(getSourceCodeTree(sourceCode));
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Calculate dependency chain weight for a file
|
|
271
|
+
* Returns a value between 0 and 0.3 based on dependency importance
|
|
272
|
+
*/
|
|
273
|
+
function calculateDependencyWeight(filePath, sourceCode, relevantFiles, visited = new Set()) {
|
|
274
|
+
if (visited.has(filePath)) {
|
|
275
|
+
return 0; // Prevent circular dependency loops
|
|
276
|
+
}
|
|
277
|
+
visited.add(filePath);
|
|
278
|
+
const fileData = sourceCode[filePath];
|
|
279
|
+
if (!fileData || !('dependencies' in fileData) || !fileData.dependencies) {
|
|
280
|
+
return 0;
|
|
281
|
+
}
|
|
282
|
+
let weight = 0;
|
|
283
|
+
for (const dep of fileData.dependencies) {
|
|
284
|
+
if (dep.type === 'local' && relevantFiles.has(dep.path)) {
|
|
285
|
+
// Direct dependency of a relevant file gets higher weight
|
|
286
|
+
weight = Math.max(weight, 0.2);
|
|
287
|
+
// Recursively check dependencies with diminishing weight
|
|
288
|
+
const depWeight = calculateDependencyWeight(dep.path, sourceCode, relevantFiles, visited) * 0.7;
|
|
289
|
+
weight = Math.max(weight, depWeight);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return weight;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Get all dependencies for a file, including transitive ones
|
|
296
|
+
*/
|
|
297
|
+
function getAllDependencies(filePath, sourceCode, visited = new Set()) {
|
|
298
|
+
if (visited.has(filePath)) {
|
|
299
|
+
return new Set(); // Prevent circular dependency loops
|
|
300
|
+
}
|
|
301
|
+
visited.add(filePath);
|
|
302
|
+
const deps = new Set();
|
|
303
|
+
const fileData = sourceCode[filePath];
|
|
304
|
+
if (!fileData || !('dependencies' in fileData) || !fileData.dependencies) {
|
|
305
|
+
return deps;
|
|
306
|
+
}
|
|
307
|
+
for (const dep of fileData.dependencies) {
|
|
308
|
+
if (dep.type === 'local') {
|
|
309
|
+
deps.add(dep.path);
|
|
310
|
+
// Add transitive dependencies
|
|
311
|
+
const transitiveDeps = getAllDependencies(dep.path, sourceCode, visited);
|
|
312
|
+
transitiveDeps.forEach((d) => deps.add(d));
|
|
196
313
|
}
|
|
197
314
|
}
|
|
198
|
-
return
|
|
315
|
+
return deps;
|
|
199
316
|
}
|
|
200
317
|
//# sourceMappingURL=step-context-optimization.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-context-optimization.js","sourceRoot":"","sources":["../../../src/prompt/steps/step-context-optimization.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,
|
|
1
|
+
{"version":3,"file":"step-context-optimization.js","sourceRoot":"","sources":["../../../src/prompt/steps/step-context-optimization.ts"],"names":[],"mappings":"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"}
|