genaicode 0.9.5 → 0.10.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/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 +82 -32
- 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 +110 -14
- 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/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 +15 -0
- package/dist/main/config.js +1 -0
- 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-BlVGo0E6.js +1902 -0
- package/dist/main/ui/frontend/index.html +2 -2
- 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 +6 -0
- package/dist/prompt/function-calling.js.map +1 -1
- package/dist/prompt/function-defs/ask-question.js +8 -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 +44 -41
- package/dist/prompt/steps/step-ask-question/handlers/handle-code-generation.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-confirm-code-generation.js +11 -11
- package/dist/prompt/steps/step-ask-question/handlers/handle-confirm-code-generation.js.map +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-context-optimization.js +13 -13
- package/dist/prompt/steps/step-ask-question/handlers/handle-context-optimization.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 +88 -88
- 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.d.ts +1 -1
- package/dist/prompt/steps/step-ask-question/handlers/handle-end-conversation.js +15 -17
- 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-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 +71 -75
- 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-types.d.ts +5 -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.js +5 -3
- package/dist/prompt/systemprompt.js.map +1 -1
- package/package.json +9 -9
- package/dist/main/ui/frontend/assets/index-Dizqxzws.js +0 -1814
- 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
- /package/dist/main/ui/frontend/assets/{index-S_ocA1xG.css → index-5QDg_0vR.css} +0 -0
|
@@ -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,15 +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';
|
|
8
|
-
import { reasoningInferenceResponse } from '../prompt/function-defs/reasoning-inference.js';
|
|
7
|
+
import { getServiceConfig, getModelSettings } from './service-configurations.js';
|
|
9
8
|
/**
|
|
10
9
|
* This function generates content using the Anthropic Claude model.
|
|
11
10
|
*/
|
|
12
|
-
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 };
|
|
13
17
|
try {
|
|
14
18
|
const serviceConfig = getServiceConfig('anthropic');
|
|
15
19
|
assert(serviceConfig?.apiKey, 'Anthropic API key not configured, use ANTHROPIC_API_KEY environment variable.');
|
|
@@ -19,15 +23,25 @@ export const generateContent = async function generateContent(prompt, functionDe
|
|
|
19
23
|
'anthropic-beta': 'max-tokens-3-5-sonnet-2024-07-15' + (!options.disableCache ? ',prompt-caching-2024-07-31' : ''),
|
|
20
24
|
},
|
|
21
25
|
});
|
|
22
|
-
|
|
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
|
+
}
|
|
23
42
|
if (modelType === ModelType.REASONING) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
functionDefs = [...functionDefs, reasoningInferenceResponse];
|
|
27
|
-
}
|
|
28
|
-
requiredFunctionName = reasoningInferenceResponse.name;
|
|
29
|
-
systemPrompt +=
|
|
30
|
-
'\nFirst, reason step-by-step. Then, call reasoningInferenceResponse with your reasoning and answer.';
|
|
43
|
+
functionDefs = [];
|
|
44
|
+
requiredFunctionName = null;
|
|
31
45
|
}
|
|
32
46
|
let cacheControlCount = prompt.filter((item) => item.cache).length;
|
|
33
47
|
const messages = prompt
|
|
@@ -97,34 +111,39 @@ export const generateContent = async function generateContent(prompt, functionDe
|
|
|
97
111
|
return message;
|
|
98
112
|
}
|
|
99
113
|
});
|
|
100
|
-
const defaultModel = modelType === ModelType.CHEAP ? 'claude-3-5-haiku-20241022' : 'claude-3-5-sonnet-20241022';
|
|
101
|
-
const modelOverrides = serviceConfig?.modelOverrides;
|
|
102
|
-
let model = modelType === ModelType.CHEAP
|
|
103
|
-
? (modelOverrides?.cheap ?? defaultModel)
|
|
104
|
-
: modelType === ModelType.REASONING
|
|
105
|
-
? (modelOverrides?.reasoning ?? defaultModel)
|
|
106
|
-
: (modelOverrides?.default ?? defaultModel);
|
|
107
114
|
console.log(`Using Anthropic model: ${model}`);
|
|
108
115
|
let retryCount = 0;
|
|
109
116
|
let response;
|
|
117
|
+
// Set max_tokens based on model-specific setting or defaults
|
|
118
|
+
const maxTokens = outputTokenLimit ?? (modelType === ModelType.REASONING ? 8192 * 2 : 8192);
|
|
110
119
|
while (retryCount < 3) {
|
|
111
120
|
try {
|
|
112
121
|
response = await anthropic.messages.create({
|
|
113
122
|
model: model,
|
|
114
|
-
system:
|
|
123
|
+
system: baseSystemPrompt,
|
|
115
124
|
messages: messages,
|
|
116
|
-
tools:
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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,
|
|
132
|
+
tool_choice: requiredFunctionName && modelType !== ModelType.REASONING
|
|
122
133
|
? { type: 'tool', name: requiredFunctionName }
|
|
123
|
-
: functionDefs.length > 0
|
|
134
|
+
: functionDefs.length > 0 &&
|
|
135
|
+
modelType !== ModelType.REASONING &&
|
|
136
|
+
expectedResponseType.functionCall !== false
|
|
124
137
|
? { type: 'any' }
|
|
125
138
|
: undefined,
|
|
126
|
-
max_tokens:
|
|
127
|
-
temperature: temperature,
|
|
139
|
+
max_tokens: maxTokens,
|
|
140
|
+
temperature: modelType !== ModelType.REASONING ? temperature : 1,
|
|
141
|
+
thinking: modelType === ModelType.REASONING
|
|
142
|
+
? {
|
|
143
|
+
type: 'enabled',
|
|
144
|
+
budget_tokens: 8192,
|
|
145
|
+
}
|
|
146
|
+
: undefined,
|
|
128
147
|
}, {
|
|
129
148
|
signal: abortController?.signal,
|
|
130
149
|
});
|
|
@@ -191,8 +210,22 @@ export const generateContent = async function generateContent(prompt, functionDe
|
|
|
191
210
|
modelType,
|
|
192
211
|
});
|
|
193
212
|
const responseMessages = response.content.filter((item) => item.type !== 'tool_use');
|
|
194
|
-
if (
|
|
195
|
-
|
|
213
|
+
if (modelType === ModelType.REASONING) {
|
|
214
|
+
const thinking = responseMessages.find((item) => item.type === 'thinking')?.thinking;
|
|
215
|
+
const responseMessage = responseMessages.find((item) => item.type === 'text')?.text;
|
|
216
|
+
return [
|
|
217
|
+
{
|
|
218
|
+
type: 'functionCall',
|
|
219
|
+
functionCall: {
|
|
220
|
+
id: 'reasoning_inference_response',
|
|
221
|
+
name: 'reasoningInferenceResponse',
|
|
222
|
+
args: {
|
|
223
|
+
...(thinking ? { reasoning: thinking } : {}),
|
|
224
|
+
response: responseMessage,
|
|
225
|
+
},
|
|
226
|
+
},
|
|
227
|
+
},
|
|
228
|
+
];
|
|
196
229
|
}
|
|
197
230
|
const functionCalls = response.content
|
|
198
231
|
.filter((item) => item.type === 'tool_use')
|
|
@@ -201,7 +234,24 @@ export const generateContent = async function generateContent(prompt, functionDe
|
|
|
201
234
|
name: item.name,
|
|
202
235
|
args: item.input,
|
|
203
236
|
}));
|
|
204
|
-
|
|
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
|
+
];
|
|
205
255
|
}
|
|
206
256
|
catch (error) {
|
|
207
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":"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"}
|