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,19 +1,9 @@
|
|
|
1
1
|
import OpenAI from 'openai';
|
|
2
|
-
import { GenerateContentFunction } from './common-types.js';
|
|
2
|
+
import { GenerateContentArgs, GenerateContentFunction, GenerateContentResult } from './common-types.js';
|
|
3
3
|
import { PromptItem } from './common-types.js';
|
|
4
|
-
import { FunctionCall } from './common-types.js';
|
|
5
|
-
import { FunctionDef } from './common-types.js';
|
|
6
|
-
import { ModelType } from './common-types.js';
|
|
7
4
|
import { AiServiceType } from './service-configurations-types.js';
|
|
8
5
|
/**
|
|
9
|
-
*
|
|
6
|
+
* New function to generate content using the OpenAI chat model with a new signature.
|
|
10
7
|
*/
|
|
11
8
|
export declare const generateContent: GenerateContentFunction;
|
|
12
|
-
export declare function internalGenerateContent(prompt: PromptItem[],
|
|
13
|
-
export declare function internalGenerateToolCalls(prompt: PromptItem[], functionDefs: FunctionDef[], requiredFunctionName: string | null, temperature: number, modelType: ModelType | undefined, model: string, openai: OpenAI, serviceType?: AiServiceType): Promise<OpenAI.Chat.Completions.ChatCompletionMessageToolCall[] | {
|
|
14
|
-
id: string;
|
|
15
|
-
function: {
|
|
16
|
-
name: string;
|
|
17
|
-
arguments: string;
|
|
18
|
-
};
|
|
19
|
-
}[]>;
|
|
9
|
+
export declare function internalGenerateContent(prompt: PromptItem[], config: GenerateContentArgs[1], model: string, openai: OpenAI, serviceType?: AiServiceType): Promise<GenerateContentResult>;
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import OpenAI, { APIError } from 'openai';
|
|
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
|
-
import { getServiceConfig } from './service-configurations.js';
|
|
6
|
+
import { getServiceConfig, getModelSettings } from './service-configurations.js';
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
8
|
+
* New function to generate content using the OpenAI chat model with a new signature.
|
|
9
9
|
*/
|
|
10
|
-
export const generateContent = async function generateContent(
|
|
10
|
+
export const generateContent = async function generateContent(...args) {
|
|
11
|
+
const [prompt, config] = args;
|
|
11
12
|
try {
|
|
12
13
|
const serviceConfig = getServiceConfig('openai');
|
|
13
14
|
assert(serviceConfig?.apiKey, 'OpenAI API key not configured, use OPENAI_API_KEY environment variable.');
|
|
14
15
|
const openai = new OpenAI({ apiKey: serviceConfig?.apiKey, baseURL: serviceConfig?.openaiBaseUrl });
|
|
16
|
+
const modelType = config.modelType ?? ModelType.DEFAULT;
|
|
15
17
|
const model = (() => {
|
|
16
18
|
switch (modelType) {
|
|
17
19
|
case ModelType.CHEAP:
|
|
@@ -22,7 +24,7 @@ export const generateContent = async function generateContent(prompt, functionDe
|
|
|
22
24
|
return serviceConfig.modelOverrides?.default ?? 'gpt-4o';
|
|
23
25
|
}
|
|
24
26
|
})();
|
|
25
|
-
return internalGenerateContent(prompt,
|
|
27
|
+
return internalGenerateContent(prompt, config, model, openai, 'openai');
|
|
26
28
|
}
|
|
27
29
|
catch (error) {
|
|
28
30
|
if (error instanceof Error && error.message.includes('API key not configured')) {
|
|
@@ -31,28 +33,31 @@ export const generateContent = async function generateContent(prompt, functionDe
|
|
|
31
33
|
throw error;
|
|
32
34
|
}
|
|
33
35
|
};
|
|
34
|
-
export async function internalGenerateContent(prompt,
|
|
35
|
-
const
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
export async function internalGenerateToolCalls(prompt, functionDefs, requiredFunctionName, temperature, modelType = ModelType.DEFAULT, model, openai, serviceType = 'openai') {
|
|
36
|
+
export async function internalGenerateContent(prompt, config, model, openai, serviceType = 'openai') {
|
|
37
|
+
const modelType = config.modelType ?? ModelType.DEFAULT;
|
|
38
|
+
const temperature = config.temperature ?? 0.7; // Default temperature
|
|
39
|
+
const functionDefs = config.functionDefs ?? [];
|
|
40
|
+
const requiredFunctionName = config.requiredFunctionName;
|
|
41
|
+
// Get model-specific settings
|
|
42
|
+
const { systemInstruction: modelSystemInstruction, outputTokenLimit } = getModelSettings(serviceType, model);
|
|
43
|
+
const expectedResponseType = config.expectedResponseType ?? {
|
|
44
|
+
text: false,
|
|
45
|
+
functionCall: true,
|
|
46
|
+
media: false,
|
|
47
|
+
};
|
|
48
48
|
const messages = prompt
|
|
49
49
|
.map((item) => {
|
|
50
50
|
if (item.type === 'systemPrompt') {
|
|
51
|
+
let systemPrompt = item.systemPrompt;
|
|
52
|
+
// Add model-specific system instructions if available
|
|
53
|
+
if (modelSystemInstruction?.length) {
|
|
54
|
+
systemPrompt += `\n${modelSystemInstruction.join('\n')}`;
|
|
55
|
+
}
|
|
51
56
|
return {
|
|
52
57
|
role: modelType === ModelType.REASONING && serviceType === 'openai'
|
|
53
58
|
? 'developer'
|
|
54
59
|
: 'system',
|
|
55
|
-
content:
|
|
60
|
+
content: systemPrompt,
|
|
56
61
|
};
|
|
57
62
|
}
|
|
58
63
|
else if (item.type === 'user') {
|
|
@@ -62,7 +67,7 @@ export async function internalGenerateToolCalls(prompt, functionDefs, requiredFu
|
|
|
62
67
|
role: 'tool',
|
|
63
68
|
name: response.name,
|
|
64
69
|
content: response.content ?? '',
|
|
65
|
-
tool_call_id: response.name,
|
|
70
|
+
tool_call_id: response.call_id ?? response.name, // Use call_id if available, fallback to name
|
|
66
71
|
})));
|
|
67
72
|
}
|
|
68
73
|
if ((item.images?.length ?? 0) > 0) {
|
|
@@ -98,31 +103,38 @@ export async function internalGenerateToolCalls(prompt, functionDefs, requiredFu
|
|
|
98
103
|
assert(item.type === 'assistant');
|
|
99
104
|
const message = {
|
|
100
105
|
role: 'assistant',
|
|
101
|
-
content: item.text && !item.images
|
|
106
|
+
content: item.text && !item.images && !item.functionCalls // Only text content if no images or function calls
|
|
102
107
|
? item.text
|
|
103
108
|
: [
|
|
109
|
+
// Otherwise, build content array
|
|
104
110
|
...(item.text ? [{ type: 'text', text: item.text }] : []),
|
|
105
111
|
// Currently broken: https://github.com/openai/openai-node/issues/1030
|
|
106
|
-
...(item.images ?? []).map((image) => ({
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
})),
|
|
112
|
+
// ...(item.images ?? []).map((image) => ({
|
|
113
|
+
// type: 'image_url' as const,
|
|
114
|
+
// image_url: {
|
|
115
|
+
// url: 'data:' + image.mediaType + ';base64,' + image.base64url,
|
|
116
|
+
// },
|
|
117
|
+
// })),
|
|
112
118
|
],
|
|
113
119
|
...(item.functionCalls && item.functionCalls.length > 0
|
|
114
120
|
? {
|
|
121
|
+
// Add tool_calls if functionCalls exist
|
|
115
122
|
tool_calls: item.functionCalls.map((call) => ({
|
|
116
123
|
type: 'function',
|
|
117
124
|
function: { name: call.name, arguments: JSON.stringify(call.args ?? {}) },
|
|
118
|
-
id: call.name,
|
|
125
|
+
id: call.id ?? call.name, // Use id if available, fallback to name
|
|
119
126
|
})),
|
|
120
127
|
}
|
|
121
128
|
: {}),
|
|
122
129
|
};
|
|
130
|
+
// Clean up empty content array
|
|
123
131
|
if (Array.isArray(message.content) && message.content.length === 0) {
|
|
124
132
|
delete message.content;
|
|
125
133
|
}
|
|
134
|
+
// If there's no text and no function calls, ensure content is at least null or handled
|
|
135
|
+
if (!message.content && !message.tool_calls) {
|
|
136
|
+
message.content = null; // Or handle as needed, maybe skip the message?
|
|
137
|
+
}
|
|
126
138
|
return message;
|
|
127
139
|
}
|
|
128
140
|
})
|
|
@@ -131,20 +143,31 @@ export async function internalGenerateToolCalls(prompt, functionDefs, requiredFu
|
|
|
131
143
|
let retryCount = 0;
|
|
132
144
|
const maxRetries = 3;
|
|
133
145
|
let response = undefined;
|
|
146
|
+
// Determine tool choice based on function defs and required function name
|
|
147
|
+
let toolChoice = undefined;
|
|
148
|
+
let tools = undefined;
|
|
149
|
+
if (functionDefs.length > 0) {
|
|
150
|
+
tools = functionDefs.map((funDef) => ({ type: 'function', function: funDef }));
|
|
151
|
+
if (requiredFunctionName && expectedResponseType.functionCall !== false) {
|
|
152
|
+
toolChoice = { type: 'function', function: { name: requiredFunctionName } };
|
|
153
|
+
}
|
|
154
|
+
else if (expectedResponseType.functionCall !== false) {
|
|
155
|
+
// Require tool use unless explicitly text-only is expected
|
|
156
|
+
toolChoice = 'required';
|
|
157
|
+
}
|
|
158
|
+
else if (expectedResponseType.functionCall === false) {
|
|
159
|
+
toolChoice = 'none';
|
|
160
|
+
}
|
|
161
|
+
}
|
|
134
162
|
while (retryCount < maxRetries) {
|
|
135
163
|
try {
|
|
136
164
|
response = await openai.chat.completions.create({
|
|
137
165
|
model: model,
|
|
138
166
|
messages,
|
|
139
|
-
...(
|
|
140
|
-
|
|
141
|
-
tools: functionDefs.map((funDef) => ({ type: 'function', function: funDef })),
|
|
142
|
-
tool_choice: requiredFunctionName
|
|
143
|
-
? { type: 'function', function: { name: requiredFunctionName } }
|
|
144
|
-
: 'required',
|
|
145
|
-
}
|
|
146
|
-
: {}),
|
|
167
|
+
...(tools ? { tools } : {}),
|
|
168
|
+
...(toolChoice ? { tool_choice: toolChoice } : {}),
|
|
147
169
|
...(modelType !== ModelType.REASONING ? { temperature } : {}),
|
|
170
|
+
...(outputTokenLimit && modelType !== ModelType.REASONING ? { max_tokens: outputTokenLimit } : {}),
|
|
148
171
|
}, { signal: abortController?.signal });
|
|
149
172
|
break; // Exit loop if successful
|
|
150
173
|
}
|
|
@@ -158,8 +181,14 @@ export async function internalGenerateToolCalls(prompt, functionDefs, requiredFu
|
|
|
158
181
|
retryCount++;
|
|
159
182
|
}
|
|
160
183
|
else {
|
|
161
|
-
console.error('An error occurred:', error);
|
|
162
|
-
|
|
184
|
+
console.error('An error occurred during OpenAI API call:', error);
|
|
185
|
+
// Throw a more specific error or handle based on error type
|
|
186
|
+
if (error instanceof Error) {
|
|
187
|
+
throw new Error(`API request failed: ${error.message}. Operation aborted.`);
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
throw new Error('API request failed due to an unknown error. Operation aborted.');
|
|
191
|
+
}
|
|
163
192
|
}
|
|
164
193
|
}
|
|
165
194
|
}
|
|
@@ -167,7 +196,7 @@ export async function internalGenerateToolCalls(prompt, functionDefs, requiredFu
|
|
|
167
196
|
console.error(`Failed to complete request after ${maxRetries} attempts due to rate limiting.`);
|
|
168
197
|
throw new Error('Rate limit exceeded. Operation aborted.');
|
|
169
198
|
}
|
|
170
|
-
assert(response);
|
|
199
|
+
assert(response, 'API response is undefined after retries.');
|
|
171
200
|
// Print token usage for openai
|
|
172
201
|
const usage = {
|
|
173
202
|
inputTokens: response.usage.prompt_tokens - (response.usage?.prompt_tokens_details?.cached_tokens ?? 0),
|
|
@@ -176,32 +205,59 @@ export async function internalGenerateToolCalls(prompt, functionDefs, requiredFu
|
|
|
176
205
|
cacheReadTokens: response.usage?.prompt_tokens_details?.cached_tokens,
|
|
177
206
|
};
|
|
178
207
|
printTokenUsageAndCost({
|
|
179
|
-
aiService:
|
|
208
|
+
aiService: serviceType,
|
|
180
209
|
usage,
|
|
181
|
-
inputCostPerToken: 0.000005,
|
|
182
|
-
outputCostPerToken: 0.000015,
|
|
210
|
+
inputCostPerToken: 0.000005, // Example cost for gpt-4o
|
|
211
|
+
outputCostPerToken: 0.000015, // Example cost for gpt-4o
|
|
183
212
|
modelType,
|
|
184
213
|
});
|
|
185
214
|
const responseMessage = response.choices[0].message;
|
|
186
215
|
if (modelType === ModelType.REASONING) {
|
|
216
|
+
// Special handling for reasoning models if their response structure differs
|
|
217
|
+
// Assuming the reasoning result is packed into a specific function call format
|
|
187
218
|
return [
|
|
188
219
|
{
|
|
189
|
-
|
|
190
|
-
|
|
220
|
+
type: 'functionCall',
|
|
221
|
+
functionCall: {
|
|
222
|
+
id: 'reasoning_inference_response',
|
|
191
223
|
name: 'reasoningInferenceResponse',
|
|
192
|
-
|
|
224
|
+
args: {
|
|
225
|
+
// Adapt based on actual reasoning model output structure
|
|
193
226
|
...('reasoning_content' in responseMessage ? { reasoning: responseMessage.reasoning_content } : {}),
|
|
194
227
|
response: responseMessage.content,
|
|
195
|
-
}
|
|
228
|
+
},
|
|
196
229
|
},
|
|
197
230
|
},
|
|
198
231
|
];
|
|
199
232
|
}
|
|
200
|
-
|
|
201
|
-
|
|
233
|
+
const result = [];
|
|
234
|
+
if (responseMessage.tool_calls && expectedResponseType.functionCall) {
|
|
235
|
+
result.push(...responseMessage.tool_calls.map((call) => {
|
|
236
|
+
const name = call.function.name;
|
|
237
|
+
let parsedArgs;
|
|
238
|
+
try {
|
|
239
|
+
parsedArgs = JSON.parse(call.function.arguments);
|
|
240
|
+
}
|
|
241
|
+
catch (e) {
|
|
242
|
+
console.warn(`Failed to parse arguments for function call ${name}: ${call.function.arguments}`);
|
|
243
|
+
parsedArgs = { _raw_args: call.function.arguments }; // Keep raw args if parsing fails
|
|
244
|
+
}
|
|
245
|
+
return {
|
|
246
|
+
type: 'functionCall',
|
|
247
|
+
functionCall: {
|
|
248
|
+
id: call.id,
|
|
249
|
+
name,
|
|
250
|
+
args: parsedArgs,
|
|
251
|
+
},
|
|
252
|
+
};
|
|
253
|
+
}));
|
|
202
254
|
}
|
|
203
|
-
|
|
204
|
-
|
|
255
|
+
if (responseMessage.content && expectedResponseType.text) {
|
|
256
|
+
result.push({
|
|
257
|
+
type: 'text',
|
|
258
|
+
text: responseMessage.content,
|
|
259
|
+
});
|
|
205
260
|
}
|
|
261
|
+
return result;
|
|
206
262
|
}
|
|
207
263
|
//# sourceMappingURL=openai.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/ai-service/openai.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/ai-service/openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ModelSpecificSettings } from '../main/config-types.js';
|
|
1
2
|
/**
|
|
2
3
|
* Full service configuration interface.
|
|
3
4
|
* This interface includes sensitive data and should only be used internally.
|
|
@@ -5,12 +6,16 @@
|
|
|
5
6
|
export type ServiceConfig<T extends AiServiceType = AiServiceType> = {
|
|
6
7
|
/**
|
|
7
8
|
* Model overrides for the service.
|
|
8
|
-
* Allows customizing model names for different modes.
|
|
9
|
+
* Allows customizing model names for different modes and settings per model.
|
|
9
10
|
*/
|
|
10
11
|
modelOverrides?: {
|
|
11
12
|
default?: string;
|
|
12
13
|
cheap?: string;
|
|
13
14
|
reasoning?: string;
|
|
15
|
+
/** Specific settings for individual models within this service */
|
|
16
|
+
modelSpecificSettings?: {
|
|
17
|
+
[modelName: string]: ModelSpecificSettings;
|
|
18
|
+
};
|
|
14
19
|
};
|
|
15
20
|
} & (T extends keyof ServiceConfigRequirements ? ServiceConfigRequirements[T] : {
|
|
16
21
|
apiKey?: string;
|
|
@@ -38,6 +43,12 @@ export type ServiceConfigRequirements = {
|
|
|
38
43
|
googleCloudProjectId?: never;
|
|
39
44
|
googleCloudRegion?: never;
|
|
40
45
|
};
|
|
46
|
+
'local-llm': {
|
|
47
|
+
apiKey?: string | undefined;
|
|
48
|
+
openaiBaseUrl?: string | undefined;
|
|
49
|
+
googleCloudProjectId?: never;
|
|
50
|
+
googleCloudRegion?: never;
|
|
51
|
+
};
|
|
41
52
|
'ai-studio': {
|
|
42
53
|
apiKey: string | undefined;
|
|
43
54
|
googleCloudProjectId?: never;
|
|
@@ -49,7 +60,6 @@ export type ServiceConfigRequirements = {
|
|
|
49
60
|
googleCloudRegion?: never;
|
|
50
61
|
};
|
|
51
62
|
}; /** Example: {@link ../../examples/genaicode_plugins/grok_ai_service.ts} */
|
|
52
|
-
export type PluginAiServiceType = `plugin:${string}`;
|
|
53
|
-
/** Example: {@link ../../examples/genaicode_plugins/nonsense_action_handlers.ts} */
|
|
63
|
+
export type PluginAiServiceType = `plugin:${string}`; /** Example: {@link ../../examples/genaicode_plugins/nonsense_action_handlers.ts} */
|
|
54
64
|
export type PluginActionType = `plugin:${string}`;
|
|
55
|
-
export type AiServiceType = 'vertex-ai' | 'ai-studio' | 'vertex-ai-claude' | 'openai' | 'anthropic' | PluginAiServiceType;
|
|
65
|
+
export type AiServiceType = 'vertex-ai' | 'ai-studio' | 'vertex-ai-claude' | 'openai' | 'local-llm' | 'anthropic' | PluginAiServiceType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-configurations-types.js","sourceRoot":"","sources":["../../src/ai-service/service-configurations-types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"service-configurations-types.js","sourceRoot":"","sources":["../../src/ai-service/service-configurations-types.ts"],"names":[],"mappings":""}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import { AiServiceType } from './service-configurations-types.js';
|
|
2
2
|
import { ServiceConfigurations, SanitizedServiceConfig, SanitizedServiceConfigurations } from '../main/ui/common/api-types.js';
|
|
3
3
|
import { ServiceConfig } from './service-configurations-types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Get settings for a specific model within a service.
|
|
6
|
+
* Returns systemInstruction and outputTokenLimit, falling back to defaults if not specified.
|
|
7
|
+
*/
|
|
8
|
+
export declare function getModelSettings(serviceType: AiServiceType, modelName: string): {
|
|
9
|
+
systemInstruction?: string[];
|
|
10
|
+
outputTokenLimit?: number;
|
|
11
|
+
};
|
|
4
12
|
/**
|
|
5
13
|
* Get all service configurations.
|
|
6
14
|
* This method returns the full configurations including sensitive data.
|
|
@@ -28,4 +36,4 @@ export declare function getSanitizedServiceConfiguration<T extends AiServiceType
|
|
|
28
36
|
/**
|
|
29
37
|
* Update configuration for a specific service
|
|
30
38
|
*/
|
|
31
|
-
export declare function updateServiceConfig<T extends AiServiceType>(serviceType: T, config: ServiceConfig<T
|
|
39
|
+
export declare function updateServiceConfig<T extends AiServiceType>(serviceType: T, config: Partial<ServiceConfig<T>>): void;
|
|
@@ -7,6 +7,7 @@ const configurations = {
|
|
|
7
7
|
default: modelOverrides.aiStudio?.default ?? 'gemini-1.5-pro-002',
|
|
8
8
|
cheap: modelOverrides.aiStudio?.cheap ?? 'gemini-2.0-flash',
|
|
9
9
|
reasoning: modelOverrides.aiStudio?.reasoning ?? 'gemini-2.0-flash-thinking-exp-01-21',
|
|
10
|
+
modelSpecificSettings: modelOverrides.aiStudio?.modelSpecificSettings ?? {},
|
|
10
11
|
},
|
|
11
12
|
},
|
|
12
13
|
anthropic: {
|
|
@@ -15,6 +16,7 @@ const configurations = {
|
|
|
15
16
|
default: modelOverrides.anthropic?.default ?? 'claude-3-7-sonnet-20250219',
|
|
16
17
|
cheap: modelOverrides.anthropic?.cheap ?? 'claude-3-5-haiku-20241022',
|
|
17
18
|
reasoning: modelOverrides.anthropic?.reasoning ?? 'claude-3-7-sonnet-20250219',
|
|
19
|
+
modelSpecificSettings: modelOverrides.anthropic?.modelSpecificSettings ?? {},
|
|
18
20
|
},
|
|
19
21
|
},
|
|
20
22
|
openai: {
|
|
@@ -24,6 +26,17 @@ const configurations = {
|
|
|
24
26
|
default: modelOverrides.openai?.default ?? 'gpt-4o',
|
|
25
27
|
cheap: modelOverrides.openai?.cheap ?? 'gpt-4o-mini',
|
|
26
28
|
reasoning: modelOverrides.openai?.reasoning ?? 'o3-mini',
|
|
29
|
+
modelSpecificSettings: modelOverrides.openai?.modelSpecificSettings ?? {},
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
'local-llm': {
|
|
33
|
+
apiKey: process.env.LOCAL_LLM_API_KEY ?? 'local-llm',
|
|
34
|
+
openaiBaseUrl: process.env.LOCAL_LLM_BASE_URL ?? 'http://localhost:11434/v1/',
|
|
35
|
+
modelOverrides: {
|
|
36
|
+
default: modelOverrides.localLlm?.default ?? 'gemma3:12b',
|
|
37
|
+
cheap: modelOverrides.localLlm?.cheap ?? 'gemma3:12b',
|
|
38
|
+
reasoning: modelOverrides.localLlm?.reasoning ?? 'gemma3:12b',
|
|
39
|
+
modelSpecificSettings: modelOverrides.localLlm?.modelSpecificSettings ?? {},
|
|
27
40
|
},
|
|
28
41
|
},
|
|
29
42
|
'vertex-ai': {
|
|
@@ -32,6 +45,7 @@ const configurations = {
|
|
|
32
45
|
default: modelOverrides.vertexAi?.default ?? 'gemini-1.5-pro-002',
|
|
33
46
|
cheap: modelOverrides.vertexAi?.cheap ?? 'gemini-2.0-flash',
|
|
34
47
|
reasoning: modelOverrides.vertexAi?.reasoning ?? 'gemini-2.0-flash-thinking-exp-01-21',
|
|
48
|
+
modelSpecificSettings: modelOverrides.vertexAi?.modelSpecificSettings ?? {},
|
|
35
49
|
},
|
|
36
50
|
},
|
|
37
51
|
'vertex-ai-claude': {
|
|
@@ -44,9 +58,38 @@ const configurations = {
|
|
|
44
58
|
},
|
|
45
59
|
},
|
|
46
60
|
};
|
|
61
|
+
// Merge plugin configurations
|
|
47
62
|
[...getRegisteredAiServices().entries()].forEach(([serviceType, service]) => {
|
|
48
|
-
configurations[serviceType]
|
|
63
|
+
const existingConfig = configurations[serviceType] ?? {};
|
|
64
|
+
const pluginConfig = service.serviceConfig ?? {};
|
|
65
|
+
configurations[serviceType] = {
|
|
66
|
+
...existingConfig,
|
|
67
|
+
...pluginConfig,
|
|
68
|
+
modelOverrides: {
|
|
69
|
+
// Keep existing model type defaults (cheap, default, reasoning)
|
|
70
|
+
...existingConfig.modelOverrides,
|
|
71
|
+
// Apply plugin model type defaults
|
|
72
|
+
...pluginConfig.modelOverrides,
|
|
73
|
+
// Merge modelSpecificSettings deeply
|
|
74
|
+
modelSpecificSettings: {
|
|
75
|
+
...(existingConfig.modelOverrides?.modelSpecificSettings ?? {}),
|
|
76
|
+
...(pluginConfig.modelOverrides?.modelSpecificSettings ?? {}),
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
};
|
|
49
80
|
});
|
|
81
|
+
/**
|
|
82
|
+
* Get settings for a specific model within a service.
|
|
83
|
+
* Returns systemInstruction and outputTokenLimit, falling back to defaults if not specified.
|
|
84
|
+
*/
|
|
85
|
+
export function getModelSettings(serviceType, modelName) {
|
|
86
|
+
const serviceConfig = configurations[serviceType];
|
|
87
|
+
const modelSpecificSettings = serviceConfig?.modelOverrides?.modelSpecificSettings?.[modelName];
|
|
88
|
+
return {
|
|
89
|
+
systemInstruction: modelSpecificSettings?.systemInstruction,
|
|
90
|
+
outputTokenLimit: modelSpecificSettings?.outputTokenLimit,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
50
93
|
/**
|
|
51
94
|
* Get all service configurations.
|
|
52
95
|
* This method returns the full configurations including sensitive data.
|
|
@@ -63,6 +106,7 @@ export function getServiceConfigurations() {
|
|
|
63
106
|
* @internal
|
|
64
107
|
*/
|
|
65
108
|
export function getServiceConfig(serviceType) {
|
|
109
|
+
// Ensure the returned config conforms to the ServiceConfig type
|
|
66
110
|
return configurations[serviceType];
|
|
67
111
|
}
|
|
68
112
|
/**
|
|
@@ -89,18 +133,56 @@ export function getSanitizedServiceConfiguration(serviceType) {
|
|
|
89
133
|
*/
|
|
90
134
|
export function updateServiceConfig(serviceType, config) {
|
|
91
135
|
const currentConfig = configurations[serviceType] || {};
|
|
92
|
-
//
|
|
136
|
+
// Merge the new partial config with the current config
|
|
93
137
|
const updatedConfig = {
|
|
94
138
|
...currentConfig,
|
|
95
139
|
...config,
|
|
140
|
+
modelOverrides: {
|
|
141
|
+
...(currentConfig.modelOverrides ?? {}),
|
|
142
|
+
...(config.modelOverrides ?? {}),
|
|
143
|
+
// Deep merge modelSpecificSettings
|
|
144
|
+
modelSpecificSettings: {
|
|
145
|
+
...(currentConfig.modelOverrides?.modelSpecificSettings ?? {}),
|
|
146
|
+
...(config.modelOverrides?.modelSpecificSettings ?? {}),
|
|
147
|
+
},
|
|
148
|
+
},
|
|
96
149
|
};
|
|
97
|
-
//
|
|
98
|
-
if (serviceType !== 'vertex-ai' &&
|
|
99
|
-
|
|
150
|
+
// Preserve sensitive fields if not provided in the update
|
|
151
|
+
if (serviceType !== 'vertex-ai' &&
|
|
152
|
+
serviceType !== 'vertex-ai-claude' &&
|
|
153
|
+
!('apiKey' in config) && // Check if apiKey is explicitly in the partial update
|
|
154
|
+
'apiKey' in currentConfig // Check if apiKey exists in the current config
|
|
155
|
+
) {
|
|
156
|
+
updatedConfig.apiKey = currentConfig.apiKey;
|
|
157
|
+
}
|
|
158
|
+
if ((serviceType === 'openai' || serviceType === 'local-llm') && !('openaiBaseUrl' in config)) {
|
|
159
|
+
const currentOpenAiConfig = currentConfig;
|
|
160
|
+
if (currentOpenAiConfig?.openaiBaseUrl) {
|
|
161
|
+
updatedConfig.openaiBaseUrl = currentOpenAiConfig.openaiBaseUrl;
|
|
162
|
+
}
|
|
100
163
|
}
|
|
101
|
-
if (serviceType === '
|
|
102
|
-
|
|
103
|
-
|
|
164
|
+
if (serviceType === 'vertex-ai' && !('googleCloudProjectId' in config)) {
|
|
165
|
+
const currentVertexConfig = currentConfig;
|
|
166
|
+
if (currentVertexConfig?.googleCloudProjectId) {
|
|
167
|
+
updatedConfig.googleCloudProjectId =
|
|
168
|
+
currentVertexConfig.googleCloudProjectId;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
if (serviceType === 'vertex-ai-claude') {
|
|
172
|
+
if (!('googleCloudProjectId' in config)) {
|
|
173
|
+
const currentVertexClaudeConfig = currentConfig;
|
|
174
|
+
if (currentVertexClaudeConfig?.googleCloudProjectId) {
|
|
175
|
+
updatedConfig.googleCloudProjectId =
|
|
176
|
+
currentVertexClaudeConfig.googleCloudProjectId;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
if (!('googleCloudRegion' in config)) {
|
|
180
|
+
const currentVertexClaudeConfig = currentConfig;
|
|
181
|
+
if (currentVertexClaudeConfig?.googleCloudRegion) {
|
|
182
|
+
updatedConfig.googleCloudRegion =
|
|
183
|
+
currentVertexClaudeConfig.googleCloudRegion;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
104
186
|
}
|
|
105
187
|
configurations[serviceType] = updatedConfig;
|
|
106
188
|
}
|
|
@@ -108,18 +190,32 @@ export function updateServiceConfig(serviceType, config) {
|
|
|
108
190
|
* Helper method to sanitize a service configuration by removing sensitive data
|
|
109
191
|
*/
|
|
110
192
|
function sanitizeServiceConfig(serviceType, config) {
|
|
193
|
+
const hasModelSpecificSettings = !!config.modelOverrides?.modelSpecificSettings &&
|
|
194
|
+
Object.keys(config.modelOverrides.modelSpecificSettings).length > 0;
|
|
195
|
+
const sanitizedBase = {
|
|
196
|
+
modelOverrides: {
|
|
197
|
+
default: config.modelOverrides?.default,
|
|
198
|
+
cheap: config.modelOverrides?.cheap,
|
|
199
|
+
reasoning: config.modelOverrides?.reasoning,
|
|
200
|
+
// Indicate if any model-specific settings exist, but don't expose them
|
|
201
|
+
hasModelSpecificSettings,
|
|
202
|
+
},
|
|
203
|
+
};
|
|
111
204
|
if (serviceType === 'vertex-ai' || serviceType === 'vertex-ai-claude') {
|
|
112
205
|
return {
|
|
113
|
-
|
|
206
|
+
...sanitizedBase,
|
|
114
207
|
googleCloudProjectId: config.googleCloudProjectId,
|
|
115
208
|
googleCloudRegion: serviceType === 'vertex-ai-claude' ? config.googleCloudRegion : undefined,
|
|
116
|
-
hasApiKey: false,
|
|
209
|
+
hasApiKey: false, // Vertex services don't use API keys directly in this context
|
|
117
210
|
};
|
|
118
211
|
}
|
|
119
212
|
else {
|
|
213
|
+
const openAiBaseUrl = (serviceType === 'openai' || serviceType === 'local-llm') && 'openaiBaseUrl' in config
|
|
214
|
+
? config.openaiBaseUrl
|
|
215
|
+
: undefined;
|
|
120
216
|
return {
|
|
121
|
-
|
|
122
|
-
|
|
217
|
+
...sanitizedBase,
|
|
218
|
+
openaiBaseUrl: openAiBaseUrl,
|
|
123
219
|
hasApiKey: !!config.apiKey,
|
|
124
220
|
};
|
|
125
221
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-configurations.js","sourceRoot":"","sources":["../../src/ai-service/service-configurations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AASnE,MAAM,cAAc,GAA0B;IAC5C,WAAW,EAAE;QACX,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO;QAC3B,cAAc,EAAE;YACd,OAAO,EAAE,cAAc,CAAC,QAAQ,EAAE,OAAO,IAAI,oBAAoB;YACjE,KAAK,EAAE,cAAc,CAAC,QAAQ,EAAE,KAAK,IAAI,kBAAkB;YAC3D,SAAS,EAAE,cAAc,CAAC,QAAQ,EAAE,SAAS,IAAI,qCAAqC;
|
|
1
|
+
{"version":3,"file":"service-configurations.js","sourceRoot":"","sources":["../../src/ai-service/service-configurations.ts"],"names":[],"mappings":"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"}
|