genaicode 0.9.6 → 0.10.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/dist/ai-service/ai-studio.d.ts +1 -1
- package/dist/ai-service/ai-studio.js +114 -31
- package/dist/ai-service/ai-studio.js.map +1 -1
- package/dist/ai-service/anthropic.js +64 -28
- package/dist/ai-service/anthropic.js.map +1 -1
- package/dist/ai-service/common-types.d.ts +28 -7
- package/dist/ai-service/local-llm.d.ts +6 -0
- package/dist/ai-service/local-llm.js +77 -0
- package/dist/ai-service/local-llm.js.map +1 -0
- package/dist/ai-service/openai.d.ts +3 -13
- package/dist/ai-service/openai.js +107 -51
- package/dist/ai-service/openai.js.map +1 -1
- package/dist/ai-service/service-configurations-types.d.ts +14 -4
- package/dist/ai-service/service-configurations-types.js +0 -4
- package/dist/ai-service/service-configurations-types.js.map +1 -1
- package/dist/ai-service/service-configurations.d.ts +9 -1
- package/dist/ai-service/service-configurations.js +108 -12
- package/dist/ai-service/service-configurations.js.map +1 -1
- package/dist/ai-service/vertex-ai-claude.d.ts +1 -1
- package/dist/ai-service/vertex-ai-claude.js +80 -39
- 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 +261 -155
- package/dist/ai-service/vertex-ai.js.map +1 -1
- package/dist/cli/cli-options.js +1 -1
- package/dist/cli/cli-options.js.map +1 -1
- package/dist/cli/validate-cli-params.js +1 -1
- package/dist/cli/validate-cli-params.js.map +1 -1
- package/dist/help-docs/genaicode-help-document.d.ts +1 -1
- package/dist/help-docs/genaicode-help-document.js +1 -0
- package/dist/help-docs/genaicode-help-document.js.map +1 -1
- package/dist/main/codegen-utils.js +9 -1
- package/dist/main/codegen-utils.js.map +1 -1
- package/dist/main/codegen.js +2 -0
- package/dist/main/codegen.js.map +1 -1
- package/dist/main/common/user-actions.d.ts +2 -0
- package/dist/main/common/user-actions.js.map +1 -1
- package/dist/main/config-schema.js +16 -0
- package/dist/main/config-schema.js.map +1 -1
- package/dist/main/config-types.d.ts +16 -0
- package/dist/main/config.js +9 -1
- package/dist/main/config.js.map +1 -1
- package/dist/main/interactive/select-ai-service.js +1 -0
- package/dist/main/interactive/select-ai-service.js.map +1 -1
- package/dist/main/plugin-loader.d.ts +1 -2
- package/dist/main/plugin-loader.js.map +1 -1
- package/dist/main/ui/backend/endpoints/question-endpoint.js +34 -3
- package/dist/main/ui/backend/endpoints/question-endpoint.js.map +1 -1
- package/dist/main/ui/backend/service.d.ts +6 -5
- package/dist/main/ui/backend/service.js +54 -17
- package/dist/main/ui/backend/service.js.map +1 -1
- package/dist/main/ui/common/api-types.d.ts +1 -0
- package/dist/main/ui/frontend/assets/index-C7n3IQsE.js +1896 -0
- package/dist/main/ui/frontend/index.html +1 -1
- package/dist/project-profiles/types.d.ts +1 -1
- package/dist/project-profiles/types.js +1 -1
- package/dist/project-profiles/types.js.map +1 -1
- package/dist/prompt/function-calling.js +8 -1
- package/dist/prompt/function-calling.js.map +1 -1
- package/dist/prompt/function-defs/ask-question.d.ts +1 -0
- package/dist/prompt/function-defs/ask-question.js +38 -4
- package/dist/prompt/function-defs/ask-question.js.map +1 -1
- package/dist/prompt/function-defs/conversation-summary.d.ts +2 -0
- package/dist/prompt/function-defs/conversation-summary.js +15 -0
- package/dist/prompt/function-defs/conversation-summary.js.map +1 -0
- package/dist/prompt/function-defs/explore-external-directories.d.ts +16 -0
- package/dist/prompt/function-defs/explore-external-directories.js +48 -0
- package/dist/prompt/function-defs/explore-external-directories.js.map +1 -0
- package/dist/prompt/function-defs/read-external-files.d.ts +9 -0
- package/dist/prompt/function-defs/read-external-files.js +30 -0
- package/dist/prompt/function-defs/read-external-files.js.map +1 -0
- package/dist/prompt/limits.js +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-code-generation.js +23 -18
- package/dist/prompt/steps/step-ask-question/handlers/handle-code-generation.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-conversation-graph.js +60 -28
- package/dist/prompt/steps/step-ask-question/handlers/handle-conversation-graph.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-create-file.js +76 -73
- package/dist/prompt/steps/step-ask-question/handlers/handle-create-file.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-end-conversation.js +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-end-conversation.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-explore-external-directories.d.ts +2 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-explore-external-directories.js +277 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-explore-external-directories.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-genaicode-help.js +13 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-genaicode-help.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-generate-image.js +13 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-generate-image.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-lint.d.ts +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-lint.js +54 -61
- package/dist/prompt/steps/step-ask-question/handlers/handle-lint.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-perform-analysis.js +22 -10
- package/dist/prompt/steps/step-ask-question/handlers/handle-perform-analysis.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-pull-app-context.js +13 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-pull-app-context.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-push-app-context.js +13 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-push-app-context.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-read-external-files.d.ts +2 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-read-external-files.js +144 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-read-external-files.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-reasoning-inference.js +27 -6
- package/dist/prompt/steps/step-ask-question/handlers/handle-reasoning-inference.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-remove-files-from-context.js +13 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-remove-files-from-context.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-request-files-content.js +14 -5
- package/dist/prompt/steps/step-ask-question/handlers/handle-request-files-content.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-request-files-fragments.js +26 -2
- package/dist/prompt/steps/step-ask-question/handlers/handle-request-files-fragments.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-request-git-context.d.ts +3 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-request-git-context.js +182 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-request-git-context.js.map +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-request-permissions.js +13 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-request-permissions.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-search-code.js +14 -2
- package/dist/prompt/steps/step-ask-question/handlers/handle-search-code.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-send-message.js +1 -0
- package/dist/prompt/steps/step-ask-question/handlers/handle-send-message.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-update-file.js +59 -60
- package/dist/prompt/steps/step-ask-question/handlers/handle-update-file.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/step-ask-question-handlers.js +4 -1
- package/dist/prompt/steps/step-ask-question/step-ask-question-handlers.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/step-ask-question-types.d.ts +11 -1
- package/dist/prompt/steps/step-ask-question/step-ask-question.d.ts +2 -0
- package/dist/prompt/steps/step-ask-question/step-ask-question.js +14 -7
- package/dist/prompt/steps/step-ask-question/step-ask-question.js.map +1 -1
- package/dist/prompt/steps/step-codegen-planning.js +14 -5
- package/dist/prompt/steps/step-codegen-planning.js.map +1 -1
- package/dist/prompt/steps/step-context-compression.js +14 -5
- package/dist/prompt/steps/step-context-compression.js.map +1 -1
- package/dist/prompt/steps/step-context-optimization.js +10 -5
- package/dist/prompt/steps/step-context-optimization.js.map +1 -1
- package/dist/prompt/steps/step-generate-codegen-summary.js +14 -5
- package/dist/prompt/steps/step-generate-codegen-summary.js.map +1 -1
- package/dist/prompt/steps/step-generate-summary.d.ts +6 -0
- package/dist/prompt/steps/step-generate-summary.js +36 -16
- package/dist/prompt/steps/step-generate-summary.js.map +1 -1
- package/dist/prompt/steps/step-history-update.js +14 -5
- package/dist/prompt/steps/step-history-update.js.map +1 -1
- package/dist/prompt/steps/step-process-file-updates.js +10 -5
- package/dist/prompt/steps/step-process-file-updates.js.map +1 -1
- package/dist/prompt/steps/step-summarization.js +14 -2
- package/dist/prompt/steps/step-summarization.js.map +1 -1
- package/dist/prompt/steps/step-validate-recover.d.ts +2 -4
- package/dist/prompt/steps/step-validate-recover.js +18 -9
- package/dist/prompt/steps/step-validate-recover.js.map +1 -1
- package/dist/prompt/steps/step-verify-patch.js +14 -5
- package/dist/prompt/steps/step-verify-patch.js.map +1 -1
- package/dist/prompt/systemprompt.d.ts +1 -1
- package/dist/prompt/systemprompt.js +10 -5
- package/dist/prompt/systemprompt.js.map +1 -1
- package/package.json +5 -4
- package/dist/main/ui/frontend/assets/index-DI1ngpa2.js +0 -1840
- package/dist/prompt/steps/step-ask-question/handlers/code-generation.d.ts +0 -4
- package/dist/prompt/steps/step-ask-question/handlers/code-generation.js +0 -167
- package/dist/prompt/steps/step-ask-question/handlers/code-generation.js.map +0 -1
- package/dist/prompt/steps/step-ask-question/handlers/confirm-code-generation.d.ts +0 -2
- package/dist/prompt/steps/step-ask-question/handlers/confirm-code-generation.js +0 -34
- package/dist/prompt/steps/step-ask-question/handlers/confirm-code-generation.js.map +0 -1
- package/dist/prompt/steps/step-ask-question/handlers/context-optimization.d.ts +0 -2
- package/dist/prompt/steps/step-ask-question/handlers/context-optimization.js +0 -32
- package/dist/prompt/steps/step-ask-question/handlers/context-optimization.js.map +0 -1
- package/dist/prompt/steps/step-ask-question/handlers/genaicode-help-document.d.ts +0 -1
- package/dist/prompt/steps/step-ask-question/handlers/genaicode-help-document.js +0 -251
- package/dist/prompt/steps/step-ask-question/handlers/genaicode-help-document.js.map +0 -1
- package/dist/prompt/steps/step-ask-question/handlers/lint.d.ts +0 -6
- package/dist/prompt/steps/step-ask-question/handlers/lint.js +0 -103
- package/dist/prompt/steps/step-ask-question/handlers/lint.js.map +0 -1
- package/dist/prompt/steps/step-ask-question/handlers/remove-files-from-context.d.ts +0 -2
- package/dist/prompt/steps/step-ask-question/handlers/remove-files-from-context.js +0 -82
- package/dist/prompt/steps/step-ask-question/handlers/remove-files-from-context.js.map +0 -1
- package/dist/prompt/steps/step-ask-question/handlers/request-files-content.d.ts +0 -8
- package/dist/prompt/steps/step-ask-question/handlers/request-files-content.js +0 -179
- package/dist/prompt/steps/step-ask-question/handlers/request-files-content.js.map +0 -1
- package/dist/prompt/steps/step-ask-question/handlers/request-permissions.d.ts +0 -2
- package/dist/prompt/steps/step-ask-question/handlers/request-permissions.js +0 -69
- package/dist/prompt/steps/step-ask-question/handlers/request-permissions.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { GenerateContentFunction } from './common-types.js';
|
|
2
2
|
/**
|
|
3
|
-
* This function generates content using the
|
|
3
|
+
* This function generates content using the Google AI Studio models with the new interface.
|
|
4
4
|
*/
|
|
5
5
|
export declare const generateContent: GenerateContentFunction;
|
|
@@ -1,15 +1,24 @@
|
|
|
1
1
|
import { FunctionCallingMode, GoogleGenerativeAI, HarmBlockThreshold, HarmCategory, } from '@google/generative-ai';
|
|
2
2
|
import assert from 'node:assert';
|
|
3
|
-
import { printTokenUsageAndCost
|
|
3
|
+
import { printTokenUsageAndCost } from './common.js';
|
|
4
4
|
import { ModelType } from './common-types.js';
|
|
5
5
|
import { abortController } from '../main/common/abort-controller.js';
|
|
6
6
|
import { unescapeFunctionCall } from './unescape-function-call.js';
|
|
7
7
|
import { enableVertexUnescape } from '../cli/cli-params.js';
|
|
8
|
-
import { getServiceConfig } from './service-configurations.js';
|
|
8
|
+
import { getServiceConfig, getModelSettings } from './service-configurations.js';
|
|
9
9
|
/**
|
|
10
|
-
* This function generates content using the
|
|
10
|
+
* This function generates content using the Google AI Studio models with the new interface.
|
|
11
11
|
*/
|
|
12
|
-
export const generateContent = async function generateContent(prompt,
|
|
12
|
+
export const generateContent = async function generateContent(prompt, config, options = {}) {
|
|
13
|
+
const modelType = config.modelType ?? ModelType.DEFAULT;
|
|
14
|
+
const temperature = config.temperature ?? 0.7;
|
|
15
|
+
const functionDefs = config.functionDefs ?? [];
|
|
16
|
+
const requiredFunctionName = config.requiredFunctionName ?? null;
|
|
17
|
+
const expectedResponseType = config.expectedResponseType ?? {
|
|
18
|
+
text: false,
|
|
19
|
+
functionCall: true,
|
|
20
|
+
media: false,
|
|
21
|
+
};
|
|
13
22
|
const messages = prompt
|
|
14
23
|
.filter((item) => item.type === 'user' || item.type === 'assistant')
|
|
15
24
|
.map((item) => {
|
|
@@ -66,6 +75,8 @@ export const generateContent = async function generateContent(prompt, functionDe
|
|
|
66
75
|
functionDeclarations: functionDefs,
|
|
67
76
|
},
|
|
68
77
|
];
|
|
78
|
+
}
|
|
79
|
+
if (expectedResponseType.functionCall !== false) {
|
|
69
80
|
req.toolConfig = {
|
|
70
81
|
functionCallingConfig: {
|
|
71
82
|
mode: FunctionCallingMode.ANY,
|
|
@@ -73,8 +84,18 @@ export const generateContent = async function generateContent(prompt, functionDe
|
|
|
73
84
|
},
|
|
74
85
|
};
|
|
75
86
|
}
|
|
87
|
+
else if (expectedResponseType.functionCall === false) {
|
|
88
|
+
req.toolConfig = {
|
|
89
|
+
functionCallingConfig: {
|
|
90
|
+
mode: FunctionCallingMode.NONE,
|
|
91
|
+
allowedFunctionNames: [],
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
}
|
|
76
95
|
const model = getModel(modelType, temperature, prompt.find((item) => item.type === 'systemPrompt')?.systemPrompt, options.geminiBlockNone);
|
|
77
|
-
const result = await model.generateContent(req, {
|
|
96
|
+
const result = await model.generateContent(req, {
|
|
97
|
+
signal: abortController?.signal,
|
|
98
|
+
});
|
|
78
99
|
// Print token usage
|
|
79
100
|
const usageMetadata = result.response.usageMetadata;
|
|
80
101
|
const usage = {
|
|
@@ -101,19 +122,51 @@ export const generateContent = async function generateContent(prompt, functionDe
|
|
|
101
122
|
.map((candidate) => candidate.content?.parts?.map((part) => part.functionCall))
|
|
102
123
|
.flat()
|
|
103
124
|
.filter((functionCall) => !!functionCall)
|
|
104
|
-
.map((call) => ({
|
|
125
|
+
.map((call) => ({
|
|
126
|
+
name: call.name,
|
|
127
|
+
args: call.args,
|
|
128
|
+
}))
|
|
105
129
|
.map(!enableVertexUnescape ? (call) => call : unescapeFunctionCall);
|
|
130
|
+
// Prepare the result parts array
|
|
131
|
+
const resultParts = [];
|
|
132
|
+
// Add function calls to result parts if they exist
|
|
133
|
+
if (functionCalls.length > 0) {
|
|
134
|
+
functionCalls.forEach((call) => {
|
|
135
|
+
resultParts.push({
|
|
136
|
+
type: 'functionCall',
|
|
137
|
+
functionCall: call,
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
// Handle reasoning model special case
|
|
106
142
|
if (modelType === ModelType.REASONING) {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
143
|
+
// Add the reasoning text if available
|
|
144
|
+
if (result.response.candidates[0].content?.parts.length === 2) {
|
|
145
|
+
resultParts.push({
|
|
146
|
+
type: 'text',
|
|
147
|
+
text: result.response.candidates[0].content?.parts.slice(-2)[0].text ?? '',
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
// Add the response text
|
|
151
|
+
resultParts.push({
|
|
152
|
+
type: 'text',
|
|
153
|
+
text: result.response.candidates[0].content?.parts.slice(-1)[0].text ?? '',
|
|
154
|
+
});
|
|
155
|
+
// Add the special function call for reasoning inference response
|
|
156
|
+
resultParts.push({
|
|
157
|
+
type: 'functionCall',
|
|
158
|
+
functionCall: {
|
|
159
|
+
name: 'reasoningInferenceResponse',
|
|
160
|
+
args: {
|
|
161
|
+
reasoning: result.response.candidates[0].content?.parts.length === 2
|
|
162
|
+
? result.response.candidates[0].content?.parts.slice(-2)[0].text
|
|
163
|
+
: undefined,
|
|
164
|
+
response: result.response.candidates[0].content?.parts.slice(-1)[0].text,
|
|
165
|
+
},
|
|
114
166
|
},
|
|
115
167
|
});
|
|
116
168
|
}
|
|
169
|
+
// Handle text response if no function calls were returned
|
|
117
170
|
if (functionCalls.length === 0) {
|
|
118
171
|
const textResponse = result.response.candidates
|
|
119
172
|
.map((candidate) => candidate.content?.parts?.map((part) => part.text))
|
|
@@ -122,21 +175,42 @@ export const generateContent = async function generateContent(prompt, functionDe
|
|
|
122
175
|
result.response.candidates.map((candidate) =>
|
|
123
176
|
// @ts-expect-error: FinishReason type does not have this error
|
|
124
177
|
candidate.finishReason === 'MALFORMED_FUNCTION_CALL' ? candidate.finishMessage : '')[0];
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
178
|
+
if (textResponse) {
|
|
179
|
+
resultParts.push({
|
|
180
|
+
type: 'text',
|
|
181
|
+
text: textResponse,
|
|
182
|
+
});
|
|
183
|
+
// Try to recover function call from text if required function name is provided
|
|
184
|
+
const functionDef = functionDefs.find((def) => def.name === requiredFunctionName);
|
|
185
|
+
if (functionDef) {
|
|
186
|
+
try {
|
|
187
|
+
const recoveredCall = await recoverFunctionCall(textResponse, [], functionDef);
|
|
188
|
+
if (recoveredCall) {
|
|
189
|
+
console.log('Recovered function call.');
|
|
190
|
+
// The recovered call will be added to the functionCalls array by the recoverFunctionCall function
|
|
191
|
+
// We need to add it to resultParts as well
|
|
192
|
+
resultParts.push({
|
|
193
|
+
type: 'functionCall',
|
|
194
|
+
functionCall: {
|
|
195
|
+
name: functionDef.name,
|
|
196
|
+
args: recoveredCall,
|
|
197
|
+
},
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
console.log('Failed to recover function call:', error);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
132
205
|
}
|
|
133
206
|
}
|
|
134
|
-
return
|
|
207
|
+
return resultParts;
|
|
135
208
|
};
|
|
136
209
|
function getModel(modelType, temperature, systemPrompt, geminiBlockNone) {
|
|
137
210
|
const serviceConfig = getServiceConfig('ai-studio');
|
|
138
211
|
assert(serviceConfig.apiKey, 'API key not configured, use API_KEY environment variable');
|
|
139
212
|
const genAI = new GoogleGenerativeAI(serviceConfig.apiKey);
|
|
213
|
+
// Determine the model name based on model type
|
|
140
214
|
const model = (() => {
|
|
141
215
|
switch (modelType) {
|
|
142
216
|
case ModelType.CHEAP:
|
|
@@ -148,13 +222,21 @@ function getModel(modelType, temperature, systemPrompt, geminiBlockNone) {
|
|
|
148
222
|
}
|
|
149
223
|
})();
|
|
150
224
|
console.log(`Using AI Studio model: ${model}`);
|
|
225
|
+
// Get model-specific settings
|
|
226
|
+
const { systemInstruction: modelSystemInstruction, outputTokenLimit } = getModelSettings('ai-studio', model);
|
|
227
|
+
// Combine base system prompt with model-specific instructions if available
|
|
228
|
+
let effectiveSystemPrompt = systemPrompt || '';
|
|
229
|
+
if (modelSystemInstruction?.length) {
|
|
230
|
+
effectiveSystemPrompt += `\n${modelSystemInstruction.join('\n')}`;
|
|
231
|
+
}
|
|
232
|
+
const generationConfig = {
|
|
233
|
+
maxOutputTokens: outputTokenLimit,
|
|
234
|
+
temperature,
|
|
235
|
+
topP: 0.95,
|
|
236
|
+
};
|
|
151
237
|
return genAI.getGenerativeModel({
|
|
152
238
|
model,
|
|
153
|
-
generationConfig
|
|
154
|
-
maxOutputTokens: 8192,
|
|
155
|
-
temperature,
|
|
156
|
-
topP: 0.95,
|
|
157
|
-
},
|
|
239
|
+
generationConfig,
|
|
158
240
|
safetySettings: [
|
|
159
241
|
{
|
|
160
242
|
category: HarmCategory.HARM_CATEGORY_HATE_SPEECH,
|
|
@@ -173,13 +255,13 @@ function getModel(modelType, temperature, systemPrompt, geminiBlockNone) {
|
|
|
173
255
|
threshold: geminiBlockNone ? HarmBlockThreshold.BLOCK_NONE : HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
|
|
174
256
|
},
|
|
175
257
|
],
|
|
176
|
-
...(
|
|
258
|
+
...(effectiveSystemPrompt
|
|
177
259
|
? {
|
|
178
260
|
systemInstruction: {
|
|
179
261
|
role: 'system',
|
|
180
262
|
parts: [
|
|
181
263
|
{
|
|
182
|
-
text:
|
|
264
|
+
text: effectiveSystemPrompt,
|
|
183
265
|
},
|
|
184
266
|
],
|
|
185
267
|
},
|
|
@@ -212,10 +294,11 @@ async function recoverFunctionCall(textResponse, functionCalls, functionDef) {
|
|
|
212
294
|
});
|
|
213
295
|
try {
|
|
214
296
|
const parsed = JSON.parse(result.response.text());
|
|
215
|
-
|
|
297
|
+
const functionCall = enableVertexUnescape
|
|
216
298
|
? unescapeFunctionCall({ name: functionDef.name, args: parsed })
|
|
217
|
-
: { name: functionDef.name, args: parsed }
|
|
218
|
-
|
|
299
|
+
: { name: functionDef.name, args: parsed };
|
|
300
|
+
functionCalls.push(functionCall);
|
|
301
|
+
return parsed;
|
|
219
302
|
}
|
|
220
303
|
catch {
|
|
221
304
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-studio.js","sourceRoot":"","sources":["../../src/ai-service/ai-studio.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,mBAAmB,EAGnB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,GAEb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,
|
|
1
|
+
{"version":3,"file":"ai-studio.js","sourceRoot":"","sources":["../../src/ai-service/ai-studio.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import assert from 'node:assert';
|
|
2
2
|
import Anthropic from '@anthropic-ai/sdk';
|
|
3
|
-
import { printTokenUsageAndCost
|
|
3
|
+
import { printTokenUsageAndCost } from './common.js';
|
|
4
4
|
import { ModelType } from './common-types.js';
|
|
5
5
|
import { abortController } from '../main/common/abort-controller.js';
|
|
6
6
|
import { putSystemMessage } from '../main/common/content-bus.js';
|
|
7
|
-
import { getServiceConfig } from './service-configurations.js';
|
|
7
|
+
import { getServiceConfig, getModelSettings } from './service-configurations.js';
|
|
8
8
|
/**
|
|
9
9
|
* This function generates content using the Anthropic Claude model.
|
|
10
10
|
*/
|
|
11
|
-
export const generateContent = async function generateContent(prompt,
|
|
11
|
+
export const generateContent = async function generateContent(prompt, config, options = {}) {
|
|
12
|
+
const modelType = config.modelType ?? ModelType.DEFAULT;
|
|
13
|
+
const temperature = config.temperature ?? 0.7;
|
|
14
|
+
let functionDefs = config.functionDefs ?? [];
|
|
15
|
+
let requiredFunctionName = config.requiredFunctionName ?? null;
|
|
16
|
+
const expectedResponseType = config.expectedResponseType ?? { text: false, functionCall: true, media: false };
|
|
12
17
|
try {
|
|
13
18
|
const serviceConfig = getServiceConfig('anthropic');
|
|
14
19
|
assert(serviceConfig?.apiKey, 'Anthropic API key not configured, use ANTHROPIC_API_KEY environment variable.');
|
|
@@ -18,7 +23,22 @@ export const generateContent = async function generateContent(prompt, functionDe
|
|
|
18
23
|
'anthropic-beta': 'max-tokens-3-5-sonnet-2024-07-15' + (!options.disableCache ? ',prompt-caching-2024-07-31' : ''),
|
|
19
24
|
},
|
|
20
25
|
});
|
|
21
|
-
|
|
26
|
+
// Get base system prompt
|
|
27
|
+
let baseSystemPrompt = prompt.find((item) => item.type === 'systemPrompt')?.systemPrompt || '';
|
|
28
|
+
// Determine which model to use
|
|
29
|
+
const defaultModel = modelType === ModelType.CHEAP ? 'claude-3-5-haiku-20241022' : 'claude-3-7-sonnet-20250219';
|
|
30
|
+
const modelOverrides = serviceConfig?.modelOverrides;
|
|
31
|
+
let model = modelType === ModelType.CHEAP
|
|
32
|
+
? (modelOverrides?.cheap ?? defaultModel)
|
|
33
|
+
: modelType === ModelType.REASONING
|
|
34
|
+
? (modelOverrides?.reasoning ?? defaultModel)
|
|
35
|
+
: (modelOverrides?.default ?? defaultModel);
|
|
36
|
+
// Get model-specific settings
|
|
37
|
+
const { systemInstruction: modelSystemInstruction, outputTokenLimit } = getModelSettings('anthropic', model);
|
|
38
|
+
// Combine base system prompt with model-specific instructions if available
|
|
39
|
+
if (modelSystemInstruction?.length) {
|
|
40
|
+
baseSystemPrompt += `\n${modelSystemInstruction.join('\n')}`;
|
|
41
|
+
}
|
|
22
42
|
if (modelType === ModelType.REASONING) {
|
|
23
43
|
functionDefs = [];
|
|
24
44
|
requiredFunctionName = null;
|
|
@@ -91,33 +111,32 @@ export const generateContent = async function generateContent(prompt, functionDe
|
|
|
91
111
|
return message;
|
|
92
112
|
}
|
|
93
113
|
});
|
|
94
|
-
const defaultModel = modelType === ModelType.CHEAP ? 'claude-3-5-haiku-20241022' : 'claude-3-7-sonnet-20250219';
|
|
95
|
-
const modelOverrides = serviceConfig?.modelOverrides;
|
|
96
|
-
let model = modelType === ModelType.CHEAP
|
|
97
|
-
? (modelOverrides?.cheap ?? defaultModel)
|
|
98
|
-
: modelType === ModelType.REASONING
|
|
99
|
-
? (modelOverrides?.reasoning ?? defaultModel)
|
|
100
|
-
: (modelOverrides?.default ?? defaultModel);
|
|
101
114
|
console.log(`Using Anthropic model: ${model}`);
|
|
102
115
|
let retryCount = 0;
|
|
103
116
|
let response;
|
|
117
|
+
// Set max_tokens based on model-specific setting or defaults
|
|
118
|
+
const maxTokens = outputTokenLimit ?? (modelType === ModelType.REASONING ? 8192 * 2 : 8192);
|
|
104
119
|
while (retryCount < 3) {
|
|
105
120
|
try {
|
|
106
121
|
response = await anthropic.messages.create({
|
|
107
122
|
model: model,
|
|
108
|
-
system:
|
|
123
|
+
system: baseSystemPrompt,
|
|
109
124
|
messages: messages,
|
|
110
|
-
tools:
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
125
|
+
tools: expectedResponseType.functionCall !== false
|
|
126
|
+
? functionDefs.map((fd) => ({
|
|
127
|
+
name: fd.name,
|
|
128
|
+
description: fd.description,
|
|
129
|
+
input_schema: fd.parameters,
|
|
130
|
+
}))
|
|
131
|
+
: undefined,
|
|
115
132
|
tool_choice: requiredFunctionName && modelType !== ModelType.REASONING
|
|
116
133
|
? { type: 'tool', name: requiredFunctionName }
|
|
117
|
-
: functionDefs.length > 0 &&
|
|
134
|
+
: functionDefs.length > 0 &&
|
|
135
|
+
modelType !== ModelType.REASONING &&
|
|
136
|
+
expectedResponseType.functionCall !== false
|
|
118
137
|
? { type: 'any' }
|
|
119
138
|
: undefined,
|
|
120
|
-
max_tokens:
|
|
139
|
+
max_tokens: maxTokens,
|
|
121
140
|
temperature: modelType !== ModelType.REASONING ? temperature : 1,
|
|
122
141
|
thinking: modelType === ModelType.REASONING
|
|
123
142
|
? {
|
|
@@ -196,18 +215,18 @@ export const generateContent = async function generateContent(prompt, functionDe
|
|
|
196
215
|
const responseMessage = responseMessages.find((item) => item.type === 'text')?.text;
|
|
197
216
|
return [
|
|
198
217
|
{
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
218
|
+
type: 'functionCall',
|
|
219
|
+
functionCall: {
|
|
220
|
+
id: 'reasoning_inference_response',
|
|
221
|
+
name: 'reasoningInferenceResponse',
|
|
222
|
+
args: {
|
|
223
|
+
...(thinking ? { reasoning: thinking } : {}),
|
|
224
|
+
response: responseMessage,
|
|
225
|
+
},
|
|
204
226
|
},
|
|
205
227
|
},
|
|
206
228
|
];
|
|
207
229
|
}
|
|
208
|
-
if (responseMessages.length > 0) {
|
|
209
|
-
console.log('Response messages', responseMessages);
|
|
210
|
-
}
|
|
211
230
|
const functionCalls = response.content
|
|
212
231
|
.filter((item) => item.type === 'tool_use')
|
|
213
232
|
.map((item) => ({
|
|
@@ -215,7 +234,24 @@ export const generateContent = async function generateContent(prompt, functionDe
|
|
|
215
234
|
name: item.name,
|
|
216
235
|
args: item.input,
|
|
217
236
|
}));
|
|
218
|
-
|
|
237
|
+
if (!expectedResponseType.functionCall) {
|
|
238
|
+
functionCalls.length = 0;
|
|
239
|
+
}
|
|
240
|
+
if (!expectedResponseType.text) {
|
|
241
|
+
responseMessages.length = 0;
|
|
242
|
+
}
|
|
243
|
+
return [
|
|
244
|
+
...functionCalls.map((fc) => ({
|
|
245
|
+
type: 'functionCall',
|
|
246
|
+
functionCall: fc,
|
|
247
|
+
})),
|
|
248
|
+
...responseMessages
|
|
249
|
+
.filter((item) => item.type === 'text')
|
|
250
|
+
.map((item) => ({
|
|
251
|
+
type: 'text',
|
|
252
|
+
text: item.text,
|
|
253
|
+
})),
|
|
254
|
+
];
|
|
219
255
|
}
|
|
220
256
|
catch (error) {
|
|
221
257
|
if (error instanceof Error && error.message.includes('API key not configured')) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/ai-service/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/ai-service/anthropic.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,21 +47,42 @@ export interface PromptItem {
|
|
|
47
47
|
functionCalls?: FunctionCall[];
|
|
48
48
|
cache?: boolean;
|
|
49
49
|
} /** Hook function type for generateContent hooks */
|
|
50
|
-
export type
|
|
50
|
+
export type GenerateContentResultPart = {
|
|
51
|
+
type: 'text';
|
|
52
|
+
text: string;
|
|
53
|
+
} | {
|
|
54
|
+
type: 'functionCall';
|
|
55
|
+
functionCall: FunctionCall;
|
|
56
|
+
} | {
|
|
57
|
+
type: 'media';
|
|
58
|
+
media: {
|
|
59
|
+
mediaType: PromptImageMediaType;
|
|
60
|
+
base64url: string;
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
export type GenerateContentResult = GenerateContentResultPart[];
|
|
64
|
+
export type GenerateContentHook = (args: GenerateContentArgs, result: GenerateContentResult) => Promise<void>;
|
|
51
65
|
export type GenerateContentArgs = [
|
|
52
66
|
prompt: PromptItem[],
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
67
|
+
config: {
|
|
68
|
+
modelType?: ModelType;
|
|
69
|
+
temperature?: number;
|
|
70
|
+
functionDefs?: FunctionDef[];
|
|
71
|
+
requiredFunctionName?: string | null;
|
|
72
|
+
expectedResponseType?: {
|
|
73
|
+
text: boolean;
|
|
74
|
+
functionCall: boolean;
|
|
75
|
+
media: boolean;
|
|
76
|
+
};
|
|
77
|
+
},
|
|
78
|
+
options: {
|
|
58
79
|
geminiBlockNone?: boolean;
|
|
59
80
|
disableCache?: boolean;
|
|
60
81
|
aiService?: string;
|
|
61
82
|
askQuestion?: boolean;
|
|
62
83
|
}
|
|
63
84
|
];
|
|
64
|
-
export type GenerateContentFunction = (...args: GenerateContentArgs) => Promise<
|
|
85
|
+
export type GenerateContentFunction = (...args: GenerateContentArgs) => Promise<GenerateContentResult>;
|
|
65
86
|
export type GenerateImageFunction = (prompt: string, contextImagePath: string | undefined, size: {
|
|
66
87
|
width: number;
|
|
67
88
|
height: number;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { GenerateContentFunction } from './common-types.js';
|
|
2
|
+
/**
|
|
3
|
+
* This function generates content using the local llm service.
|
|
4
|
+
* Local llm provides an OpenAI-compatible API, so we can reuse the OpenAI implementation.
|
|
5
|
+
*/
|
|
6
|
+
export declare const generateContent: GenerateContentFunction;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import OpenAI from 'openai';
|
|
2
|
+
import assert from 'node:assert';
|
|
3
|
+
import { ModelType } from './common-types.js';
|
|
4
|
+
import { getServiceConfig } from './service-configurations.js';
|
|
5
|
+
import { internalGenerateContent } from './openai.js'; // Import the exported function
|
|
6
|
+
/**
|
|
7
|
+
* This function generates content using the local llm service.
|
|
8
|
+
* Local llm provides an OpenAI-compatible API, so we can reuse the OpenAI implementation.
|
|
9
|
+
*/
|
|
10
|
+
export const generateContent = async function generateContent(...args) {
|
|
11
|
+
const [prompt, { modelType, temperature, functionDefs, requiredFunctionName }] = args;
|
|
12
|
+
try {
|
|
13
|
+
const serviceConfig = getServiceConfig('local-llm');
|
|
14
|
+
const apiKey = serviceConfig?.apiKey || 'local-llm'; // Use configured or default key
|
|
15
|
+
const baseURL = serviceConfig?.openaiBaseUrl || 'http://localhost:11434/v1/'; // Use configured or default URL
|
|
16
|
+
assert(baseURL, 'Local llm base URL not configured, use LOCAL_LLM_BASE_URL environment variable.');
|
|
17
|
+
// Create OpenAI client instance configured for the local LLM service
|
|
18
|
+
const openai = new OpenAI({
|
|
19
|
+
apiKey,
|
|
20
|
+
baseURL,
|
|
21
|
+
});
|
|
22
|
+
// Determine the model name based on ModelType and service configuration
|
|
23
|
+
const model = (() => {
|
|
24
|
+
switch (modelType) {
|
|
25
|
+
case ModelType.CHEAP:
|
|
26
|
+
return serviceConfig.modelOverrides?.cheap ?? 'gemma3:12b';
|
|
27
|
+
case ModelType.REASONING:
|
|
28
|
+
// Local LLM doesn't have a standard reasoning model, fallback to default
|
|
29
|
+
console.warn('Reasoning model type requested for local-llm, falling back to default model.');
|
|
30
|
+
return serviceConfig.modelOverrides?.default ?? 'gemma3:12b';
|
|
31
|
+
default:
|
|
32
|
+
return serviceConfig.modelOverrides?.default ?? 'gemma3:12b';
|
|
33
|
+
}
|
|
34
|
+
})();
|
|
35
|
+
console.log(`Using local model: ${model}`);
|
|
36
|
+
// Map arguments from GenerateContentArgs to GenerateContentArgsNew
|
|
37
|
+
const config = {
|
|
38
|
+
modelType,
|
|
39
|
+
temperature,
|
|
40
|
+
functionDefs,
|
|
41
|
+
requiredFunctionName,
|
|
42
|
+
expectedResponseType: { functionCall: true, text: false, media: false }, // Old interface expects only function calls
|
|
43
|
+
};
|
|
44
|
+
// Add a nudge for required function name if necessary (specific to local-llm behavior)
|
|
45
|
+
const adjustedPrompt = [...prompt];
|
|
46
|
+
if (requiredFunctionName) {
|
|
47
|
+
adjustedPrompt.push({
|
|
48
|
+
type: 'user',
|
|
49
|
+
text: `Call the \`${requiredFunctionName}\` function`,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
// Call the imported internalGenerateContent function with 'local-llm' as serviceType
|
|
53
|
+
const result = await internalGenerateContent(adjustedPrompt.map((item) => ({ ...item, text: item.text ?? ' ' })), // Ensure text isn't undefined
|
|
54
|
+
config, model, openai, 'local-llm');
|
|
55
|
+
// Adapt the GenerateContentResult back to FunctionCall[] for backward compatibility
|
|
56
|
+
const functionCalls = result
|
|
57
|
+
.filter((part) => part.type === 'functionCall')
|
|
58
|
+
.map((part) => part.functionCall);
|
|
59
|
+
return functionCalls.map((call) => ({
|
|
60
|
+
type: 'functionCall',
|
|
61
|
+
functionCall: call,
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
if (error instanceof Error && error.message.includes('base URL not configured')) {
|
|
66
|
+
throw new Error('Local base URL not configured. Please set up the service configuration.');
|
|
67
|
+
}
|
|
68
|
+
// Add specific error handling for local LLM connection issues
|
|
69
|
+
if (error instanceof Error && (error.message.includes('ECONNREFUSED') || error.message.includes('fetch failed'))) {
|
|
70
|
+
const serviceConfig = getServiceConfig('local-llm');
|
|
71
|
+
const baseURL = serviceConfig?.openaiBaseUrl || 'http://localhost:11434/v1/';
|
|
72
|
+
throw new Error(`Failed to connect to local LLM at ${baseURL}. Please ensure the service is running and accessible.`);
|
|
73
|
+
}
|
|
74
|
+
throw error;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=local-llm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-llm.js","sourceRoot":"","sources":["../../src/ai-service/local-llm.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,MAAM,MAAM,aAAa,CAAC;AAGjC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC,CAAC,+BAA+B;AAEtF;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAA4B,KAAK,UAAU,eAAe,CACpF,GAAG,IAAyB;IAE5B,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC,GAAG,IAAI,CAAC;IAEtF,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAEpD,MAAM,MAAM,GAAG,aAAa,EAAE,MAAM,IAAI,WAAW,CAAC,CAAC,gCAAgC;QACrF,MAAM,OAAO,GAAG,aAAa,EAAE,aAAa,IAAI,4BAA4B,CAAC,CAAC,gCAAgC;QAE9G,MAAM,CAAC,OAAO,EAAE,iFAAiF,CAAC,CAAC;QAEnG,qEAAqE;QACrE,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;YACxB,MAAM;YACN,OAAO;SACR,CAAC,CAAC;QAEH,wEAAwE;QACxE,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE;YAClB,QAAQ,SAAS,EAAE,CAAC;gBAClB,KAAK,SAAS,CAAC,KAAK;oBAClB,OAAO,aAAa,CAAC,cAAc,EAAE,KAAK,IAAI,YAAY,CAAC;gBAC7D,KAAK,SAAS,CAAC,SAAS;oBACtB,yEAAyE;oBACzE,OAAO,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;oBAC7F,OAAO,aAAa,CAAC,cAAc,EAAE,OAAO,IAAI,YAAY,CAAC;gBAC/D;oBACE,OAAO,aAAa,CAAC,cAAc,EAAE,OAAO,IAAI,YAAY,CAAC;YACjE,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QAEL,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,EAAE,CAAC,CAAC;QAE3C,mEAAmE;QACnE,MAAM,MAAM,GAA2B;YACrC,SAAS;YACT,WAAW;YACX,YAAY;YACZ,oBAAoB;YACpB,oBAAoB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,4CAA4C;SACtH,CAAC;QAEF,uFAAuF;QACvF,MAAM,cAAc,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QACnC,IAAI,oBAAoB,EAAE,CAAC;YACzB,cAAc,CAAC,IAAI,CAAC;gBAClB,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,cAAc,oBAAoB,aAAa;aACtD,CAAC,CAAC;QACL,CAAC;QAED,qFAAqF;QACrF,MAAM,MAAM,GAA0B,MAAM,uBAAuB,CACjE,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,EAAE,8BAA8B;QACnG,MAAM,EACN,KAAK,EACL,MAAM,EACN,WAAW,CACZ,CAAC;QAEF,oFAAoF;QACpF,MAAM,aAAa,GAAmB,MAAM;aACzC,MAAM,CAAC,CAAC,IAAI,EAAgE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC;aAC5G,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEpC,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAClC,IAAI,EAAE,cAAc;YACpB,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC,CAAC;IACN,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;YAChF,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;QAC7F,CAAC;QACD,8DAA8D;QAC9D,IAAI,KAAK,YAAY,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;YACjH,MAAM,aAAa,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;YACpD,MAAM,OAAO,GAAG,aAAa,EAAE,aAAa,IAAI,4BAA4B,CAAC;YAC7E,MAAM,IAAI,KAAK,CACb,qCAAqC,OAAO,wDAAwD,CACrG,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC"}
|