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.
Files changed (175) hide show
  1. package/dist/ai-service/ai-studio.d.ts +1 -1
  2. package/dist/ai-service/ai-studio.js +114 -31
  3. package/dist/ai-service/ai-studio.js.map +1 -1
  4. package/dist/ai-service/anthropic.js +64 -28
  5. package/dist/ai-service/anthropic.js.map +1 -1
  6. package/dist/ai-service/common-types.d.ts +28 -7
  7. package/dist/ai-service/local-llm.d.ts +6 -0
  8. package/dist/ai-service/local-llm.js +77 -0
  9. package/dist/ai-service/local-llm.js.map +1 -0
  10. package/dist/ai-service/openai.d.ts +3 -13
  11. package/dist/ai-service/openai.js +107 -51
  12. package/dist/ai-service/openai.js.map +1 -1
  13. package/dist/ai-service/service-configurations-types.d.ts +14 -4
  14. package/dist/ai-service/service-configurations-types.js +0 -4
  15. package/dist/ai-service/service-configurations-types.js.map +1 -1
  16. package/dist/ai-service/service-configurations.d.ts +9 -1
  17. package/dist/ai-service/service-configurations.js +108 -12
  18. package/dist/ai-service/service-configurations.js.map +1 -1
  19. package/dist/ai-service/vertex-ai-claude.d.ts +1 -1
  20. package/dist/ai-service/vertex-ai-claude.js +80 -39
  21. package/dist/ai-service/vertex-ai-claude.js.map +1 -1
  22. package/dist/ai-service/vertex-ai.d.ts +1 -1
  23. package/dist/ai-service/vertex-ai.js +261 -155
  24. package/dist/ai-service/vertex-ai.js.map +1 -1
  25. package/dist/cli/cli-options.js +1 -1
  26. package/dist/cli/cli-options.js.map +1 -1
  27. package/dist/cli/validate-cli-params.js +1 -1
  28. package/dist/cli/validate-cli-params.js.map +1 -1
  29. package/dist/help-docs/genaicode-help-document.d.ts +1 -1
  30. package/dist/help-docs/genaicode-help-document.js +1 -0
  31. package/dist/help-docs/genaicode-help-document.js.map +1 -1
  32. package/dist/main/codegen-utils.js +9 -1
  33. package/dist/main/codegen-utils.js.map +1 -1
  34. package/dist/main/codegen.js +2 -0
  35. package/dist/main/codegen.js.map +1 -1
  36. package/dist/main/common/user-actions.d.ts +2 -0
  37. package/dist/main/common/user-actions.js.map +1 -1
  38. package/dist/main/config-schema.js +16 -0
  39. package/dist/main/config-schema.js.map +1 -1
  40. package/dist/main/config-types.d.ts +16 -0
  41. package/dist/main/config.js +9 -1
  42. package/dist/main/config.js.map +1 -1
  43. package/dist/main/interactive/select-ai-service.js +1 -0
  44. package/dist/main/interactive/select-ai-service.js.map +1 -1
  45. package/dist/main/plugin-loader.d.ts +1 -2
  46. package/dist/main/plugin-loader.js.map +1 -1
  47. package/dist/main/ui/backend/endpoints/question-endpoint.js +34 -3
  48. package/dist/main/ui/backend/endpoints/question-endpoint.js.map +1 -1
  49. package/dist/main/ui/backend/service.d.ts +6 -5
  50. package/dist/main/ui/backend/service.js +54 -17
  51. package/dist/main/ui/backend/service.js.map +1 -1
  52. package/dist/main/ui/common/api-types.d.ts +1 -0
  53. package/dist/main/ui/frontend/assets/index-C7n3IQsE.js +1896 -0
  54. package/dist/main/ui/frontend/index.html +1 -1
  55. package/dist/project-profiles/types.d.ts +1 -1
  56. package/dist/project-profiles/types.js +1 -1
  57. package/dist/project-profiles/types.js.map +1 -1
  58. package/dist/prompt/function-calling.js +8 -1
  59. package/dist/prompt/function-calling.js.map +1 -1
  60. package/dist/prompt/function-defs/ask-question.d.ts +1 -0
  61. package/dist/prompt/function-defs/ask-question.js +38 -4
  62. package/dist/prompt/function-defs/ask-question.js.map +1 -1
  63. package/dist/prompt/function-defs/conversation-summary.d.ts +2 -0
  64. package/dist/prompt/function-defs/conversation-summary.js +15 -0
  65. package/dist/prompt/function-defs/conversation-summary.js.map +1 -0
  66. package/dist/prompt/function-defs/explore-external-directories.d.ts +16 -0
  67. package/dist/prompt/function-defs/explore-external-directories.js +48 -0
  68. package/dist/prompt/function-defs/explore-external-directories.js.map +1 -0
  69. package/dist/prompt/function-defs/read-external-files.d.ts +9 -0
  70. package/dist/prompt/function-defs/read-external-files.js +30 -0
  71. package/dist/prompt/function-defs/read-external-files.js.map +1 -0
  72. package/dist/prompt/limits.js +1 -1
  73. package/dist/prompt/steps/step-ask-question/handlers/handle-code-generation.js +23 -18
  74. package/dist/prompt/steps/step-ask-question/handlers/handle-code-generation.js.map +1 -1
  75. package/dist/prompt/steps/step-ask-question/handlers/handle-conversation-graph.js +60 -28
  76. package/dist/prompt/steps/step-ask-question/handlers/handle-conversation-graph.js.map +1 -1
  77. package/dist/prompt/steps/step-ask-question/handlers/handle-create-file.js +76 -73
  78. package/dist/prompt/steps/step-ask-question/handlers/handle-create-file.js.map +1 -1
  79. package/dist/prompt/steps/step-ask-question/handlers/handle-end-conversation.js +1 -1
  80. package/dist/prompt/steps/step-ask-question/handlers/handle-end-conversation.js.map +1 -1
  81. package/dist/prompt/steps/step-ask-question/handlers/handle-explore-external-directories.d.ts +2 -0
  82. package/dist/prompt/steps/step-ask-question/handlers/handle-explore-external-directories.js +277 -0
  83. package/dist/prompt/steps/step-ask-question/handlers/handle-explore-external-directories.js.map +1 -0
  84. package/dist/prompt/steps/step-ask-question/handlers/handle-genaicode-help.js +13 -1
  85. package/dist/prompt/steps/step-ask-question/handlers/handle-genaicode-help.js.map +1 -1
  86. package/dist/prompt/steps/step-ask-question/handlers/handle-generate-image.js +13 -1
  87. package/dist/prompt/steps/step-ask-question/handlers/handle-generate-image.js.map +1 -1
  88. package/dist/prompt/steps/step-ask-question/handlers/handle-lint.d.ts +1 -1
  89. package/dist/prompt/steps/step-ask-question/handlers/handle-lint.js +54 -61
  90. package/dist/prompt/steps/step-ask-question/handlers/handle-lint.js.map +1 -1
  91. package/dist/prompt/steps/step-ask-question/handlers/handle-perform-analysis.js +22 -10
  92. package/dist/prompt/steps/step-ask-question/handlers/handle-perform-analysis.js.map +1 -1
  93. package/dist/prompt/steps/step-ask-question/handlers/handle-pull-app-context.js +13 -1
  94. package/dist/prompt/steps/step-ask-question/handlers/handle-pull-app-context.js.map +1 -1
  95. package/dist/prompt/steps/step-ask-question/handlers/handle-push-app-context.js +13 -1
  96. package/dist/prompt/steps/step-ask-question/handlers/handle-push-app-context.js.map +1 -1
  97. package/dist/prompt/steps/step-ask-question/handlers/handle-read-external-files.d.ts +2 -0
  98. package/dist/prompt/steps/step-ask-question/handlers/handle-read-external-files.js +144 -0
  99. package/dist/prompt/steps/step-ask-question/handlers/handle-read-external-files.js.map +1 -0
  100. package/dist/prompt/steps/step-ask-question/handlers/handle-reasoning-inference.js +27 -6
  101. package/dist/prompt/steps/step-ask-question/handlers/handle-reasoning-inference.js.map +1 -1
  102. package/dist/prompt/steps/step-ask-question/handlers/handle-remove-files-from-context.js +13 -1
  103. package/dist/prompt/steps/step-ask-question/handlers/handle-remove-files-from-context.js.map +1 -1
  104. package/dist/prompt/steps/step-ask-question/handlers/handle-request-files-content.js +14 -5
  105. package/dist/prompt/steps/step-ask-question/handlers/handle-request-files-content.js.map +1 -1
  106. package/dist/prompt/steps/step-ask-question/handlers/handle-request-files-fragments.js +26 -2
  107. package/dist/prompt/steps/step-ask-question/handlers/handle-request-files-fragments.js.map +1 -1
  108. package/dist/prompt/steps/step-ask-question/handlers/handle-request-git-context.d.ts +3 -0
  109. package/dist/prompt/steps/step-ask-question/handlers/handle-request-git-context.js +182 -0
  110. package/dist/prompt/steps/step-ask-question/handlers/handle-request-git-context.js.map +1 -0
  111. package/dist/prompt/steps/step-ask-question/handlers/handle-request-permissions.js +13 -1
  112. package/dist/prompt/steps/step-ask-question/handlers/handle-request-permissions.js.map +1 -1
  113. package/dist/prompt/steps/step-ask-question/handlers/handle-search-code.js +14 -2
  114. package/dist/prompt/steps/step-ask-question/handlers/handle-search-code.js.map +1 -1
  115. package/dist/prompt/steps/step-ask-question/handlers/handle-send-message.js +1 -0
  116. package/dist/prompt/steps/step-ask-question/handlers/handle-send-message.js.map +1 -1
  117. package/dist/prompt/steps/step-ask-question/handlers/handle-update-file.js +59 -60
  118. package/dist/prompt/steps/step-ask-question/handlers/handle-update-file.js.map +1 -1
  119. package/dist/prompt/steps/step-ask-question/step-ask-question-handlers.js +4 -1
  120. package/dist/prompt/steps/step-ask-question/step-ask-question-handlers.js.map +1 -1
  121. package/dist/prompt/steps/step-ask-question/step-ask-question-types.d.ts +11 -1
  122. package/dist/prompt/steps/step-ask-question/step-ask-question.d.ts +2 -0
  123. package/dist/prompt/steps/step-ask-question/step-ask-question.js +14 -7
  124. package/dist/prompt/steps/step-ask-question/step-ask-question.js.map +1 -1
  125. package/dist/prompt/steps/step-codegen-planning.js +14 -5
  126. package/dist/prompt/steps/step-codegen-planning.js.map +1 -1
  127. package/dist/prompt/steps/step-context-compression.js +14 -5
  128. package/dist/prompt/steps/step-context-compression.js.map +1 -1
  129. package/dist/prompt/steps/step-context-optimization.js +10 -5
  130. package/dist/prompt/steps/step-context-optimization.js.map +1 -1
  131. package/dist/prompt/steps/step-generate-codegen-summary.js +14 -5
  132. package/dist/prompt/steps/step-generate-codegen-summary.js.map +1 -1
  133. package/dist/prompt/steps/step-generate-summary.d.ts +6 -0
  134. package/dist/prompt/steps/step-generate-summary.js +36 -16
  135. package/dist/prompt/steps/step-generate-summary.js.map +1 -1
  136. package/dist/prompt/steps/step-history-update.js +14 -5
  137. package/dist/prompt/steps/step-history-update.js.map +1 -1
  138. package/dist/prompt/steps/step-process-file-updates.js +10 -5
  139. package/dist/prompt/steps/step-process-file-updates.js.map +1 -1
  140. package/dist/prompt/steps/step-summarization.js +14 -2
  141. package/dist/prompt/steps/step-summarization.js.map +1 -1
  142. package/dist/prompt/steps/step-validate-recover.d.ts +2 -4
  143. package/dist/prompt/steps/step-validate-recover.js +18 -9
  144. package/dist/prompt/steps/step-validate-recover.js.map +1 -1
  145. package/dist/prompt/steps/step-verify-patch.js +14 -5
  146. package/dist/prompt/steps/step-verify-patch.js.map +1 -1
  147. package/dist/prompt/systemprompt.d.ts +1 -1
  148. package/dist/prompt/systemprompt.js +10 -5
  149. package/dist/prompt/systemprompt.js.map +1 -1
  150. package/package.json +5 -4
  151. package/dist/main/ui/frontend/assets/index-DI1ngpa2.js +0 -1840
  152. package/dist/prompt/steps/step-ask-question/handlers/code-generation.d.ts +0 -4
  153. package/dist/prompt/steps/step-ask-question/handlers/code-generation.js +0 -167
  154. package/dist/prompt/steps/step-ask-question/handlers/code-generation.js.map +0 -1
  155. package/dist/prompt/steps/step-ask-question/handlers/confirm-code-generation.d.ts +0 -2
  156. package/dist/prompt/steps/step-ask-question/handlers/confirm-code-generation.js +0 -34
  157. package/dist/prompt/steps/step-ask-question/handlers/confirm-code-generation.js.map +0 -1
  158. package/dist/prompt/steps/step-ask-question/handlers/context-optimization.d.ts +0 -2
  159. package/dist/prompt/steps/step-ask-question/handlers/context-optimization.js +0 -32
  160. package/dist/prompt/steps/step-ask-question/handlers/context-optimization.js.map +0 -1
  161. package/dist/prompt/steps/step-ask-question/handlers/genaicode-help-document.d.ts +0 -1
  162. package/dist/prompt/steps/step-ask-question/handlers/genaicode-help-document.js +0 -251
  163. package/dist/prompt/steps/step-ask-question/handlers/genaicode-help-document.js.map +0 -1
  164. package/dist/prompt/steps/step-ask-question/handlers/lint.d.ts +0 -6
  165. package/dist/prompt/steps/step-ask-question/handlers/lint.js +0 -103
  166. package/dist/prompt/steps/step-ask-question/handlers/lint.js.map +0 -1
  167. package/dist/prompt/steps/step-ask-question/handlers/remove-files-from-context.d.ts +0 -2
  168. package/dist/prompt/steps/step-ask-question/handlers/remove-files-from-context.js +0 -82
  169. package/dist/prompt/steps/step-ask-question/handlers/remove-files-from-context.js.map +0 -1
  170. package/dist/prompt/steps/step-ask-question/handlers/request-files-content.d.ts +0 -8
  171. package/dist/prompt/steps/step-ask-question/handlers/request-files-content.js +0 -179
  172. package/dist/prompt/steps/step-ask-question/handlers/request-files-content.js.map +0 -1
  173. package/dist/prompt/steps/step-ask-question/handlers/request-permissions.d.ts +0 -2
  174. package/dist/prompt/steps/step-ask-question/handlers/request-permissions.js +0 -69
  175. 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
- * This function generates content using the OpenAI chat model.
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[], functionDefs: FunctionDef[], requiredFunctionName: string | null, temperature: number, modelType: ModelType | undefined, model: string, openai: OpenAI): Promise<FunctionCall[]>;
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, processFunctionCalls } from './common.js';
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
- * This function generates content using the OpenAI chat model.
8
+ * New function to generate content using the OpenAI chat model with a new signature.
9
9
  */
10
- export const generateContent = async function generateContent(prompt, functionDefs, requiredFunctionName, temperature, modelType = ModelType.DEFAULT) {
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, functionDefs, requiredFunctionName, temperature, modelType, model, openai);
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, functionDefs, requiredFunctionName, temperature, modelType = ModelType.DEFAULT, model, openai) {
35
- const toolCalls = await internalGenerateToolCalls(prompt, functionDefs, requiredFunctionName, temperature, modelType, model, openai);
36
- const functionCalls = toolCalls.map((call) => {
37
- const name = call.function.name;
38
- const args = JSON.parse(call.function.arguments);
39
- return {
40
- id: call.id,
41
- name,
42
- args,
43
- };
44
- });
45
- return processFunctionCalls(functionCalls, functionDefs);
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: item.systemPrompt,
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
- type: 'image_url',
108
- image_url: {
109
- url: 'data:' + image.mediaType + ';base64,' + image.base64url,
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
- ...(functionDefs.length > 0
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
- throw new Error('API request failed. Operation aborted.');
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: 'openai',
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
- id: 'reasoning_inference_response',
190
- function: {
220
+ type: 'functionCall',
221
+ functionCall: {
222
+ id: 'reasoning_inference_response',
191
223
  name: 'reasoningInferenceResponse',
192
- arguments: JSON.stringify({
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
- if (responseMessage.tool_calls) {
201
- return responseMessage.tool_calls;
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
- else {
204
- throw new Error('No tool calls found in response');
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":"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"}
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,6 +1,2 @@
1
- /**
2
- * Full service configuration interface.
3
- * This interface includes sensitive data and should only be used internally.
4
- */
5
1
  export {};
6
2
  //# sourceMappingURL=service-configurations-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"service-configurations-types.js","sourceRoot":"","sources":["../../src/ai-service/service-configurations-types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
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>): void;
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] = service.serviceConfig;
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
- // Only handle API key for services that use it
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
- // For services that use API key, preserve the existing one if not provided
98
- if (serviceType !== 'vertex-ai' && serviceType !== 'vertex-ai-claude') {
99
- updatedConfig.apiKey = config.apiKey || currentConfig.apiKey;
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 === 'openai') {
102
- updatedConfig.openaiBaseUrl =
103
- 'openaiBaseUrl' in config ? config.openaiBaseUrl : undefined;
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
- modelOverrides: config.modelOverrides,
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
- openaiBaseUrl: serviceType === 'openai' && 'openaiBaseUrl' in config ? config.openaiBaseUrl : undefined,
122
- modelOverrides: config.modelOverrides,
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;SACvF;KACF;IACD,SAAS,EAAE;QACT,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;QACrC,cAAc,EAAE;YACd,OAAO,EAAE,cAAc,CAAC,SAAS,EAAE,OAAO,IAAI,4BAA4B;YAC1E,KAAK,EAAE,cAAc,CAAC,SAAS,EAAE,KAAK,IAAI,2BAA2B;YACrE,SAAS,EAAE,cAAc,CAAC,SAAS,EAAE,SAAS,IAAI,4BAA4B;SAC/E;KACF;IACD,MAAM,EAAE;QACN,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;QAClC,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;QAC1C,cAAc,EAAE;YACd,OAAO,EAAE,cAAc,CAAC,MAAM,EAAE,OAAO,IAAI,QAAQ;YACnD,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,KAAK,IAAI,aAAa;YACpD,SAAS,EAAE,cAAc,CAAC,MAAM,EAAE,SAAS,IAAI,SAAS;SACzD;KACF;IACD,WAAW,EAAE;QACX,oBAAoB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE;QAC5D,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;SACvF;KACF;IACD,kBAAkB,EAAE;QAClB,oBAAoB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE;QAC5D,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE;QACxD,cAAc,EAAE;YACd,OAAO,EAAE,4BAA4B;YACrC,KAAK,EAAE,yBAAyB;YAChC,SAAS,EAAE,4BAA4B;SACxC;KACF;CACF,CAAC;AAEF,CAAC,GAAG,uBAAuB,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,EAAE;IAC1E,cAAc,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;AACtD,CAAC,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAA0B,WAAc;IACtE,OAAO,cAAc,CAAC,WAAW,CAAqB,CAAC;AACzD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iCAAiC;IAC/C,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,EAAE;QAC3D,OAAO,CAAC,WAAW,EAAE,qBAAqB,CAAC,WAA4B,EAAE,MAAM,CAAC,CAAC,CAAC;IACpF,CAAC,CAAC,CAC+B,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gCAAgC,CAC9C,WAAc;IAEd,MAAM,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAE9B,OAAO,qBAAqB,CAAC,WAAW,EAAE,MAA0B,CAAC,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAA0B,WAAc,EAAE,MAAwB;IACnG,MAAM,aAAa,GAAG,cAAc,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAExD,+CAA+C;IAC/C,MAAM,aAAa,GAAqB;QACtC,GAAG,aAAa;QAChB,GAAG,MAAM;KACV,CAAC;IAEF,2EAA2E;IAC3E,IAAI,WAAW,KAAK,WAAW,IAAI,WAAW,KAAK,kBAAkB,EAAE,CAAC;QACtE,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC;IAC/D,CAAC;IAED,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC5B,aAAqD,CAAC,aAAa;YAClE,eAAe,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,CAAC;IAED,cAAc,CAAC,WAAW,CAAC,GAAG,aAAyC,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAC5B,WAAc,EACd,MAAwB;IAExB,IAAI,WAAW,KAAK,WAAW,IAAI,WAAW,KAAK,kBAAkB,EAAE,CAAC;QACtE,OAAO;YACL,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;YACjD,iBAAiB,EAAE,WAAW,KAAK,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS;YAC5F,SAAS,EAAE,KAAK;SACjB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO;YACL,aAAa,EAAE,WAAW,KAAK,QAAQ,IAAI,eAAe,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;YACvG,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;SAC3B,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"service-configurations.js","sourceRoot":"","sources":["../../src/ai-service/service-configurations.ts"],"names":[],"mappings":"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"}