@vybestack/llxprt-code-core 0.1.23 → 0.2.2-nightly.250908.7b895396
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -17
- package/dist/src/adapters/IStreamAdapter.d.ts +3 -3
- package/dist/src/auth/oauth-errors.d.ts +173 -0
- package/dist/src/auth/oauth-errors.js +461 -0
- package/dist/src/auth/oauth-errors.js.map +1 -0
- package/dist/src/auth/precedence.d.ts +1 -5
- package/dist/src/auth/precedence.js +28 -48
- package/dist/src/auth/precedence.js.map +1 -1
- package/dist/src/auth/token-store.js +2 -2
- package/dist/src/auth/token-store.js.map +1 -1
- package/dist/src/auth/types.d.ts +4 -4
- package/dist/src/code_assist/codeAssist.js +19 -6
- package/dist/src/code_assist/codeAssist.js.map +1 -1
- package/dist/src/code_assist/oauth2.d.ts +7 -0
- package/dist/src/code_assist/oauth2.js +82 -32
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/server.js +15 -4
- package/dist/src/code_assist/server.js.map +1 -1
- package/dist/src/code_assist/setup.js +9 -0
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/config/index.d.ts +7 -0
- package/dist/src/config/index.js +8 -0
- package/dist/src/config/index.js.map +1 -0
- package/dist/src/core/client.d.ts +15 -20
- package/dist/src/core/client.js +98 -124
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/compression-config.d.ts +10 -0
- package/dist/src/core/compression-config.js +17 -0
- package/dist/src/core/compression-config.js.map +1 -0
- package/dist/src/core/coreToolScheduler.js +50 -15
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/geminiChat.d.ts +68 -9
- package/dist/src/core/geminiChat.js +940 -405
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.js +70 -19
- package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
- package/dist/src/core/prompts.js +35 -25
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/turn.d.ts +1 -0
- package/dist/src/core/turn.js +8 -6
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/ide/ide-client.d.ts +1 -1
- package/dist/src/ide/ide-client.js +12 -6
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/index.d.ts +4 -2
- package/dist/src/index.js +5 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/prompt-config/TemplateEngine.js +17 -0
- package/dist/src/prompt-config/TemplateEngine.js.map +1 -1
- package/dist/src/prompt-config/defaults/core-defaults.js +39 -32
- package/dist/src/prompt-config/defaults/core-defaults.js.map +1 -1
- package/dist/src/prompt-config/defaults/core.md +2 -0
- package/dist/src/prompt-config/defaults/provider-defaults.js +34 -27
- package/dist/src/prompt-config/defaults/provider-defaults.js.map +1 -1
- package/dist/src/prompt-config/defaults/providers/gemini/core.md +270 -0
- package/dist/src/prompt-config/defaults/providers/gemini/models/gemini-2.5-flash/core.md +12 -0
- package/dist/src/prompt-config/defaults/providers/gemini/models/gemini-2.5-flash/gemini-2-5-flash/core.md +12 -0
- package/dist/src/prompt-config/types.d.ts +2 -0
- package/dist/src/providers/BaseProvider.d.ts +39 -13
- package/dist/src/providers/BaseProvider.js +102 -28
- package/dist/src/providers/BaseProvider.js.map +1 -1
- package/dist/src/providers/IProvider.d.ts +17 -3
- package/dist/src/providers/LoggingProviderWrapper.d.ts +10 -3
- package/dist/src/providers/LoggingProviderWrapper.js +33 -27
- package/dist/src/providers/LoggingProviderWrapper.js.map +1 -1
- package/dist/src/providers/ProviderContentGenerator.d.ts +2 -2
- package/dist/src/providers/ProviderContentGenerator.js +9 -6
- package/dist/src/providers/ProviderContentGenerator.js.map +1 -1
- package/dist/src/providers/ProviderManager.d.ts +4 -0
- package/dist/src/providers/ProviderManager.js +6 -0
- package/dist/src/providers/ProviderManager.js.map +1 -1
- package/dist/src/providers/anthropic/AnthropicProvider.d.ts +34 -21
- package/dist/src/providers/anthropic/AnthropicProvider.js +505 -492
- package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -1
- package/dist/src/providers/gemini/GeminiProvider.d.ts +23 -9
- package/dist/src/providers/gemini/GeminiProvider.js +344 -515
- package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
- package/dist/src/providers/openai/ConversationCache.d.ts +3 -3
- package/dist/src/providers/openai/IChatGenerateParams.d.ts +9 -4
- package/dist/src/providers/openai/OpenAIProvider.d.ts +46 -96
- package/dist/src/providers/openai/OpenAIProvider.js +580 -1392
- package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
- package/dist/src/providers/openai/buildResponsesRequest.d.ts +3 -3
- package/dist/src/providers/openai/buildResponsesRequest.js +67 -37
- package/dist/src/providers/openai/buildResponsesRequest.js.map +1 -1
- package/dist/src/providers/openai/estimateRemoteTokens.d.ts +2 -2
- package/dist/src/providers/openai/estimateRemoteTokens.js +21 -8
- package/dist/src/providers/openai/estimateRemoteTokens.js.map +1 -1
- package/dist/src/providers/openai/parseResponsesStream.d.ts +6 -2
- package/dist/src/providers/openai/parseResponsesStream.js +99 -391
- package/dist/src/providers/openai/parseResponsesStream.js.map +1 -1
- package/dist/src/providers/openai/syntheticToolResponses.d.ts +5 -5
- package/dist/src/providers/openai/syntheticToolResponses.js +102 -91
- package/dist/src/providers/openai/syntheticToolResponses.js.map +1 -1
- package/dist/src/providers/openai-responses/OpenAIResponsesProvider.d.ts +89 -0
- package/dist/src/providers/openai-responses/OpenAIResponsesProvider.js +451 -0
- package/dist/src/providers/openai-responses/OpenAIResponsesProvider.js.map +1 -0
- package/dist/src/providers/openai-responses/index.d.ts +1 -0
- package/dist/src/providers/openai-responses/index.js +2 -0
- package/dist/src/providers/openai-responses/index.js.map +1 -0
- package/dist/src/providers/tokenizers/OpenAITokenizer.js +3 -3
- package/dist/src/providers/tokenizers/OpenAITokenizer.js.map +1 -1
- package/dist/src/providers/types.d.ts +1 -1
- package/dist/src/services/ClipboardService.d.ts +19 -0
- package/dist/src/services/ClipboardService.js +66 -0
- package/dist/src/services/ClipboardService.js.map +1 -0
- package/dist/src/services/history/ContentConverters.d.ts +43 -0
- package/dist/src/services/history/ContentConverters.js +325 -0
- package/dist/src/services/history/ContentConverters.js.map +1 -0
- package/dist/src/{providers/IMessage.d.ts → services/history/HistoryEvents.d.ts} +16 -22
- package/dist/src/{providers/IMessage.js → services/history/HistoryEvents.js} +1 -1
- package/dist/src/services/history/HistoryEvents.js.map +1 -0
- package/dist/src/services/history/HistoryService.d.ts +220 -0
- package/dist/src/services/history/HistoryService.js +673 -0
- package/dist/src/services/history/HistoryService.js.map +1 -0
- package/dist/src/services/history/IContent.d.ts +183 -0
- package/dist/src/services/history/IContent.js +104 -0
- package/dist/src/services/history/IContent.js.map +1 -0
- package/dist/src/services/index.d.ts +1 -0
- package/dist/src/services/index.js +1 -0
- package/dist/src/services/index.js.map +1 -1
- package/dist/src/settings/SettingsService.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +16 -4
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/tools/IToolFormatter.d.ts +2 -2
- package/dist/src/tools/ToolFormatter.d.ts +42 -4
- package/dist/src/tools/ToolFormatter.js +151 -64
- package/dist/src/tools/ToolFormatter.js.map +1 -1
- package/dist/src/tools/doubleEscapeUtils.d.ts +57 -0
- package/dist/src/tools/doubleEscapeUtils.js +241 -0
- package/dist/src/tools/doubleEscapeUtils.js.map +1 -0
- package/dist/src/tools/read-file.d.ts +6 -1
- package/dist/src/tools/read-file.js +25 -11
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/todo-schemas.d.ts +4 -4
- package/dist/src/tools/tool-registry.d.ts +8 -1
- package/dist/src/tools/tool-registry.js +79 -23
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tools.js +13 -0
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/write-file.d.ts +6 -1
- package/dist/src/tools/write-file.js +48 -26
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/types/modelParams.d.ts +12 -0
- package/dist/src/utils/bfsFileSearch.js +2 -6
- package/dist/src/utils/bfsFileSearch.js.map +1 -1
- package/dist/src/utils/schemaValidator.js +16 -1
- package/dist/src/utils/schemaValidator.js.map +1 -1
- package/package.json +8 -7
- package/dist/src/providers/IMessage.js.map +0 -1
- package/dist/src/providers/adapters/GeminiCompatibleWrapper.d.ts +0 -69
- package/dist/src/providers/adapters/GeminiCompatibleWrapper.js +0 -577
- package/dist/src/providers/adapters/GeminiCompatibleWrapper.js.map +0 -1
@@ -0,0 +1,451 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright 2025 Vybestack LLC
|
3
|
+
*
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
* you may not use this file except in compliance with the License.
|
6
|
+
* You may obtain a copy of the License at
|
7
|
+
*
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
*
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
* See the License for the specific language governing permissions and
|
14
|
+
* limitations under the License.
|
15
|
+
*/
|
16
|
+
/**
|
17
|
+
* OpenAI Responses API Provider
|
18
|
+
* This provider exclusively uses the OpenAI /responses endpoint
|
19
|
+
* for models that support it (o1, o3, etc.)
|
20
|
+
*/
|
21
|
+
import { DebugLogger } from '../../debug/index.js';
|
22
|
+
import { RESPONSES_API_MODELS } from '../openai/RESPONSES_API_MODELS.js';
|
23
|
+
import { ConversationCache } from '../openai/ConversationCache.js';
|
24
|
+
import { parseResponsesStream, parseErrorResponse, } from '../openai/parseResponsesStream.js';
|
25
|
+
import { BaseProvider } from '../BaseProvider.js';
|
26
|
+
import { getSettingsService } from '../../settings/settingsServiceInstance.js';
|
27
|
+
import { getCoreSystemPromptAsync } from '../../core/prompts.js';
|
28
|
+
export class OpenAIResponsesProvider extends BaseProvider {
|
29
|
+
/**
|
30
|
+
* Converts Gemini schema format (with uppercase Type enums) to standard JSON Schema format
|
31
|
+
*/
|
32
|
+
convertGeminiSchemaToStandard(schema) {
|
33
|
+
if (!schema || typeof schema !== 'object') {
|
34
|
+
return schema;
|
35
|
+
}
|
36
|
+
const newSchema = { ...schema };
|
37
|
+
// Handle properties
|
38
|
+
if (newSchema.properties && typeof newSchema.properties === 'object') {
|
39
|
+
const newProperties = {};
|
40
|
+
for (const [key, value] of Object.entries(newSchema.properties)) {
|
41
|
+
newProperties[key] = this.convertGeminiSchemaToStandard(value);
|
42
|
+
}
|
43
|
+
newSchema.properties = newProperties;
|
44
|
+
}
|
45
|
+
// Handle items
|
46
|
+
if (newSchema.items) {
|
47
|
+
if (Array.isArray(newSchema.items)) {
|
48
|
+
newSchema.items = newSchema.items.map((item) => this.convertGeminiSchemaToStandard(item));
|
49
|
+
}
|
50
|
+
else {
|
51
|
+
newSchema.items = this.convertGeminiSchemaToStandard(newSchema.items);
|
52
|
+
}
|
53
|
+
}
|
54
|
+
// Convert type from UPPERCASE enum to lowercase string
|
55
|
+
if (newSchema.type) {
|
56
|
+
newSchema.type = String(newSchema.type).toLowerCase();
|
57
|
+
}
|
58
|
+
// Convert enum values if present
|
59
|
+
if (newSchema.enum && Array.isArray(newSchema.enum)) {
|
60
|
+
newSchema.enum = newSchema.enum.map((v) => String(v));
|
61
|
+
}
|
62
|
+
// Convert minLength from string to number if present
|
63
|
+
if (newSchema.minLength && typeof newSchema.minLength === 'string') {
|
64
|
+
const minLengthNum = parseInt(newSchema.minLength, 10);
|
65
|
+
if (!isNaN(minLengthNum)) {
|
66
|
+
newSchema.minLength = minLengthNum;
|
67
|
+
}
|
68
|
+
else {
|
69
|
+
delete newSchema.minLength;
|
70
|
+
}
|
71
|
+
}
|
72
|
+
// Convert maxLength from string to number if present
|
73
|
+
if (newSchema.maxLength && typeof newSchema.maxLength === 'string') {
|
74
|
+
const maxLengthNum = parseInt(newSchema.maxLength, 10);
|
75
|
+
if (!isNaN(maxLengthNum)) {
|
76
|
+
newSchema.maxLength = maxLengthNum;
|
77
|
+
}
|
78
|
+
else {
|
79
|
+
delete newSchema.maxLength;
|
80
|
+
}
|
81
|
+
}
|
82
|
+
return newSchema;
|
83
|
+
}
|
84
|
+
logger;
|
85
|
+
currentModel = 'o3-mini';
|
86
|
+
conversationCache;
|
87
|
+
modelParams;
|
88
|
+
constructor(apiKey, baseURL, config) {
|
89
|
+
const baseConfig = {
|
90
|
+
name: 'openai-responses',
|
91
|
+
apiKey,
|
92
|
+
baseURL: baseURL || 'https://api.openai.com/v1',
|
93
|
+
envKeyNames: ['OPENAI_API_KEY'],
|
94
|
+
isOAuthEnabled: false,
|
95
|
+
oauthProvider: undefined,
|
96
|
+
oauthManager: undefined,
|
97
|
+
};
|
98
|
+
super(baseConfig, config);
|
99
|
+
this.logger = new DebugLogger('llxprt:providers:openai-responses');
|
100
|
+
this.logger.debug(() => `Constructor - baseURL: ${baseURL || 'https://api.openai.com/v1'}, apiKey: ${apiKey?.substring(0, 10) || 'none'}`);
|
101
|
+
this.conversationCache = new ConversationCache();
|
102
|
+
// Initialize from SettingsService
|
103
|
+
this.initializeFromSettings().catch((error) => {
|
104
|
+
this.logger.debug(() => `Failed to initialize from SettingsService: ${error}`);
|
105
|
+
});
|
106
|
+
// Set default model for responses API
|
107
|
+
if (process.env.LLXPRT_DEFAULT_MODEL &&
|
108
|
+
RESPONSES_API_MODELS.some((m) => process.env.LLXPRT_DEFAULT_MODEL.startsWith(m))) {
|
109
|
+
this.currentModel = process.env.LLXPRT_DEFAULT_MODEL;
|
110
|
+
}
|
111
|
+
}
|
112
|
+
/**
|
113
|
+
* This provider does not support OAuth
|
114
|
+
*/
|
115
|
+
supportsOAuth() {
|
116
|
+
return false;
|
117
|
+
}
|
118
|
+
getToolFormat() {
|
119
|
+
// Always use OpenAI format for responses API
|
120
|
+
return 'openai';
|
121
|
+
}
|
122
|
+
async getModels() {
|
123
|
+
// Try to fetch models dynamically from the API
|
124
|
+
const apiKey = await this.getAuthToken();
|
125
|
+
if (!apiKey) {
|
126
|
+
// If no API key, return hardcoded list from RESPONSES_API_MODELS
|
127
|
+
return RESPONSES_API_MODELS.map((modelId) => ({
|
128
|
+
id: modelId,
|
129
|
+
name: modelId,
|
130
|
+
provider: 'openai-responses',
|
131
|
+
supportedToolFormats: ['openai'],
|
132
|
+
}));
|
133
|
+
}
|
134
|
+
try {
|
135
|
+
// Fetch models from the API
|
136
|
+
const baseURL = this.getBaseURL() || 'https://api.openai.com/v1';
|
137
|
+
const response = await fetch(`${baseURL}/models`, {
|
138
|
+
method: 'GET',
|
139
|
+
headers: {
|
140
|
+
Authorization: `Bearer ${apiKey}`,
|
141
|
+
},
|
142
|
+
});
|
143
|
+
if (response.ok) {
|
144
|
+
const data = (await response.json());
|
145
|
+
const models = [];
|
146
|
+
// Add all models without filtering - let them all through
|
147
|
+
for (const model of data.data) {
|
148
|
+
// Skip non-chat models (embeddings, audio, image, etc.)
|
149
|
+
if (!/embedding|whisper|audio|tts|image|vision|dall[- ]?e|moderation/i.test(model.id)) {
|
150
|
+
models.push({
|
151
|
+
id: model.id,
|
152
|
+
name: model.id,
|
153
|
+
provider: 'openai-responses',
|
154
|
+
supportedToolFormats: ['openai'],
|
155
|
+
});
|
156
|
+
}
|
157
|
+
}
|
158
|
+
return models.length > 0
|
159
|
+
? models
|
160
|
+
: RESPONSES_API_MODELS.map((modelId) => ({
|
161
|
+
id: modelId,
|
162
|
+
name: modelId,
|
163
|
+
provider: 'openai-responses',
|
164
|
+
supportedToolFormats: ['openai'],
|
165
|
+
}));
|
166
|
+
}
|
167
|
+
}
|
168
|
+
catch (error) {
|
169
|
+
this.logger.debug(() => `Error fetching models from OpenAI: ${error}`);
|
170
|
+
}
|
171
|
+
// Fallback to hardcoded list from RESPONSES_API_MODELS
|
172
|
+
return RESPONSES_API_MODELS.map((modelId) => ({
|
173
|
+
id: modelId,
|
174
|
+
name: modelId,
|
175
|
+
provider: 'openai-responses',
|
176
|
+
supportedToolFormats: ['openai'],
|
177
|
+
}));
|
178
|
+
}
|
179
|
+
setModel(modelId) {
|
180
|
+
// Update SettingsService as the source of truth
|
181
|
+
this.setModelInSettings(modelId).catch((error) => {
|
182
|
+
this.logger.debug(() => `Failed to persist model to SettingsService: ${error}`);
|
183
|
+
});
|
184
|
+
// Keep local cache for performance
|
185
|
+
this.currentModel = modelId;
|
186
|
+
}
|
187
|
+
getCurrentModel() {
|
188
|
+
// Try to get from SettingsService first (source of truth)
|
189
|
+
try {
|
190
|
+
const settingsService = getSettingsService();
|
191
|
+
const providerSettings = settingsService.getProviderSettings(this.name);
|
192
|
+
if (providerSettings.model) {
|
193
|
+
return providerSettings.model;
|
194
|
+
}
|
195
|
+
}
|
196
|
+
catch (error) {
|
197
|
+
this.logger.debug(() => `Failed to get model from SettingsService: ${error}`);
|
198
|
+
}
|
199
|
+
// Fall back to cached value or default
|
200
|
+
return this.currentModel || this.getDefaultModel();
|
201
|
+
}
|
202
|
+
getDefaultModel() {
|
203
|
+
// Return the default model for responses API
|
204
|
+
return 'o3-mini';
|
205
|
+
}
|
206
|
+
setApiKey(apiKey) {
|
207
|
+
// Call base provider implementation
|
208
|
+
super.setApiKey?.(apiKey);
|
209
|
+
// Persist to SettingsService if available
|
210
|
+
this.setApiKeyInSettings(apiKey).catch((error) => {
|
211
|
+
this.logger.debug(() => `Failed to persist API key to SettingsService: ${error}`);
|
212
|
+
});
|
213
|
+
}
|
214
|
+
setBaseUrl(baseUrl) {
|
215
|
+
// Call base provider implementation which stores in ephemeral settings
|
216
|
+
super.setBaseUrl?.(baseUrl);
|
217
|
+
// Also persist to SettingsService if available
|
218
|
+
const urlToStore = baseUrl && baseUrl.trim() !== '' ? baseUrl : 'https://api.openai.com/v1';
|
219
|
+
this.setBaseUrlInSettings(urlToStore).catch((error) => {
|
220
|
+
this.logger.debug(() => `Failed to persist base URL to SettingsService: ${error}`);
|
221
|
+
});
|
222
|
+
}
|
223
|
+
setConfig(config) {
|
224
|
+
// Update the providerConfig reference but don't store it locally
|
225
|
+
// The parent class will manage it through the protected property
|
226
|
+
super.setConfig?.(config);
|
227
|
+
}
|
228
|
+
setToolFormatOverride(format) {
|
229
|
+
// Responses API only supports OpenAI format
|
230
|
+
if (format && format !== 'openai') {
|
231
|
+
this.logger.debug(() => `Warning: Responses API only supports OpenAI tool format, ignoring override to ${format}`);
|
232
|
+
}
|
233
|
+
}
|
234
|
+
/**
|
235
|
+
* Get the conversation cache instance
|
236
|
+
*/
|
237
|
+
getConversationCache() {
|
238
|
+
return this.conversationCache;
|
239
|
+
}
|
240
|
+
/**
|
241
|
+
* OpenAI Responses API always requires payment (API key)
|
242
|
+
*/
|
243
|
+
isPaidMode() {
|
244
|
+
return true;
|
245
|
+
}
|
246
|
+
clearState() {
|
247
|
+
// Clear the conversation cache to prevent tool call ID mismatches
|
248
|
+
this.conversationCache.clear();
|
249
|
+
}
|
250
|
+
/**
|
251
|
+
* Get the list of server tools supported by this provider
|
252
|
+
*/
|
253
|
+
getServerTools() {
|
254
|
+
return [];
|
255
|
+
}
|
256
|
+
/**
|
257
|
+
* Invoke a server tool (native provider tool)
|
258
|
+
*/
|
259
|
+
async invokeServerTool(_toolName, _params, _config) {
|
260
|
+
throw new Error('Server tools not supported by OpenAI Responses provider');
|
261
|
+
}
|
262
|
+
/**
|
263
|
+
* Set model parameters to be included in API calls
|
264
|
+
*/
|
265
|
+
setModelParams(params) {
|
266
|
+
if (params === undefined) {
|
267
|
+
this.modelParams = undefined;
|
268
|
+
}
|
269
|
+
else {
|
270
|
+
this.modelParams = { ...this.modelParams, ...params };
|
271
|
+
}
|
272
|
+
// Persist to SettingsService if available
|
273
|
+
this.setModelParamsInSettings(this.modelParams).catch((error) => {
|
274
|
+
this.logger.debug(() => `Failed to persist model params to SettingsService: ${error}`);
|
275
|
+
});
|
276
|
+
}
|
277
|
+
/**
|
278
|
+
* Get current model parameters
|
279
|
+
*/
|
280
|
+
getModelParams() {
|
281
|
+
return this.modelParams;
|
282
|
+
}
|
283
|
+
/**
|
284
|
+
* Initialize provider configuration from SettingsService
|
285
|
+
*/
|
286
|
+
async initializeFromSettings() {
|
287
|
+
try {
|
288
|
+
// Load saved model if available
|
289
|
+
const savedModel = await this.getModelFromSettings();
|
290
|
+
if (savedModel &&
|
291
|
+
RESPONSES_API_MODELS.some((m) => savedModel.startsWith(m))) {
|
292
|
+
this.currentModel = savedModel;
|
293
|
+
}
|
294
|
+
// Load saved base URL if available
|
295
|
+
const savedBaseUrl = await this.getBaseUrlFromSettings();
|
296
|
+
if (savedBaseUrl !== undefined) {
|
297
|
+
this.baseProviderConfig.baseURL =
|
298
|
+
savedBaseUrl || 'https://api.openai.com/v1';
|
299
|
+
}
|
300
|
+
// Load saved model parameters if available
|
301
|
+
const savedParams = await this.getModelParamsFromSettings();
|
302
|
+
if (savedParams) {
|
303
|
+
this.modelParams = savedParams;
|
304
|
+
}
|
305
|
+
this.logger.debug(() => `Initialized from SettingsService - model: ${this.currentModel}, baseURL: ${this.baseProviderConfig.baseURL}, params: ${JSON.stringify(this.modelParams)}`);
|
306
|
+
}
|
307
|
+
catch (error) {
|
308
|
+
this.logger.debug(() => `Failed to initialize OpenAI Responses provider from SettingsService: ${error}`);
|
309
|
+
}
|
310
|
+
}
|
311
|
+
/**
|
312
|
+
* Check if the provider is authenticated using any available method
|
313
|
+
*/
|
314
|
+
async isAuthenticated() {
|
315
|
+
return super.isAuthenticated();
|
316
|
+
}
|
317
|
+
/**
|
318
|
+
* Generate chat completion with IContent interface
|
319
|
+
* Direct implementation for OpenAI Responses API with IContent interface
|
320
|
+
*/
|
321
|
+
async *generateChatCompletion(content, tools, _toolFormat) {
|
322
|
+
// Check if API key is available
|
323
|
+
const apiKey = await this.getAuthToken();
|
324
|
+
if (!apiKey) {
|
325
|
+
throw new Error('OpenAI API key is required to generate completions');
|
326
|
+
}
|
327
|
+
// Get the system prompt
|
328
|
+
const userMemory = this.globalConfig?.getUserMemory
|
329
|
+
? this.globalConfig.getUserMemory()
|
330
|
+
: '';
|
331
|
+
const systemPrompt = await getCoreSystemPromptAsync(userMemory, this.currentModel, undefined);
|
332
|
+
// Build Responses API input array directly from IContent
|
333
|
+
// For the Responses API, we send system, user and assistant messages
|
334
|
+
const input = [];
|
335
|
+
// Add system prompt as the first message if available
|
336
|
+
if (systemPrompt) {
|
337
|
+
input.push({
|
338
|
+
role: 'system',
|
339
|
+
content: systemPrompt,
|
340
|
+
});
|
341
|
+
}
|
342
|
+
for (const c of content) {
|
343
|
+
if (c.speaker === 'human') {
|
344
|
+
const textBlock = c.blocks.find((b) => b.type === 'text');
|
345
|
+
if (textBlock?.text) {
|
346
|
+
input.push({
|
347
|
+
role: 'user',
|
348
|
+
content: textBlock.text,
|
349
|
+
});
|
350
|
+
}
|
351
|
+
}
|
352
|
+
else if (c.speaker === 'ai') {
|
353
|
+
// For AI messages, we only include the text content
|
354
|
+
// Tool calls are part of the history but not sent to the API
|
355
|
+
const textBlocks = c.blocks.filter((b) => b.type === 'text');
|
356
|
+
const toolCallBlocks = c.blocks.filter((b) => b.type === 'tool_call');
|
357
|
+
const contentText = textBlocks.map((b) => b.text).join('');
|
358
|
+
// If there's text content or it's a pure tool call response, include it
|
359
|
+
if (contentText || toolCallBlocks.length > 0) {
|
360
|
+
const assistantMsg = {
|
361
|
+
role: 'assistant',
|
362
|
+
};
|
363
|
+
// Include text content if present
|
364
|
+
if (contentText) {
|
365
|
+
assistantMsg.content = contentText;
|
366
|
+
}
|
367
|
+
else if (toolCallBlocks.length > 0) {
|
368
|
+
// For tool-only responses, add a brief description
|
369
|
+
assistantMsg.content = `[Called ${toolCallBlocks.length} tool${toolCallBlocks.length > 1 ? 's' : ''}: ${toolCallBlocks.map((tc) => tc.name).join(', ')}]`;
|
370
|
+
}
|
371
|
+
input.push(assistantMsg);
|
372
|
+
}
|
373
|
+
}
|
374
|
+
else if (c.speaker === 'tool') {
|
375
|
+
// Tool responses are converted to assistant messages with the result
|
376
|
+
const toolResponseBlock = c.blocks.find((b) => b.type === 'tool_response');
|
377
|
+
if (toolResponseBlock) {
|
378
|
+
// Add tool result as an assistant message
|
379
|
+
const result = typeof toolResponseBlock.result === 'string'
|
380
|
+
? toolResponseBlock.result
|
381
|
+
: JSON.stringify(toolResponseBlock.result);
|
382
|
+
input.push({
|
383
|
+
role: 'assistant',
|
384
|
+
content: `[Tool ${toolResponseBlock.toolName} result]: ${result}`,
|
385
|
+
});
|
386
|
+
}
|
387
|
+
}
|
388
|
+
}
|
389
|
+
// Convert Gemini format tools to Responses API format directly
|
390
|
+
// Based on the ToolFormatter.toResponsesTool format
|
391
|
+
const responsesTools = tools
|
392
|
+
? tools[0].functionDeclarations.map((decl) => {
|
393
|
+
// Support both old 'parameters' and new 'parametersJsonSchema' formats
|
394
|
+
// DeclarativeTool uses parametersJsonSchema, while legacy tools use parameters
|
395
|
+
const toolParameters = 'parametersJsonSchema' in decl
|
396
|
+
? decl
|
397
|
+
.parametersJsonSchema
|
398
|
+
: decl.parameters;
|
399
|
+
// Convert parameters from Gemini format to standard format
|
400
|
+
const convertedParams = toolParameters
|
401
|
+
? this.convertGeminiSchemaToStandard(toolParameters)
|
402
|
+
: { type: 'object', properties: {} };
|
403
|
+
return {
|
404
|
+
type: 'function',
|
405
|
+
name: decl.name,
|
406
|
+
description: decl.description || null,
|
407
|
+
parameters: convertedParams,
|
408
|
+
strict: null,
|
409
|
+
};
|
410
|
+
})
|
411
|
+
: undefined;
|
412
|
+
// Build the request directly for Responses API
|
413
|
+
const request = {
|
414
|
+
model: this.currentModel,
|
415
|
+
input,
|
416
|
+
stream: true,
|
417
|
+
...(this.modelParams || {}),
|
418
|
+
};
|
419
|
+
if (responsesTools && responsesTools.length > 0) {
|
420
|
+
request.tools = responsesTools;
|
421
|
+
}
|
422
|
+
// Make the API call
|
423
|
+
const baseURL = this.getBaseURL() || 'https://api.openai.com/v1';
|
424
|
+
const responsesURL = `${baseURL}/responses`;
|
425
|
+
const requestBody = JSON.stringify(request);
|
426
|
+
const bodyBlob = new Blob([requestBody], {
|
427
|
+
type: 'application/json; charset=utf-8',
|
428
|
+
});
|
429
|
+
const response = await fetch(responsesURL, {
|
430
|
+
method: 'POST',
|
431
|
+
headers: {
|
432
|
+
Authorization: `Bearer ${apiKey}`,
|
433
|
+
'Content-Type': 'application/json; charset=utf-8',
|
434
|
+
},
|
435
|
+
body: bodyBlob,
|
436
|
+
});
|
437
|
+
// Handle errors
|
438
|
+
if (!response.ok) {
|
439
|
+
const errorBody = await response.text();
|
440
|
+
throw parseErrorResponse(response.status, errorBody, this.name);
|
441
|
+
}
|
442
|
+
// Stream the response directly as IContent
|
443
|
+
if (response.body) {
|
444
|
+
for await (const message of parseResponsesStream(response.body)) {
|
445
|
+
// The parseResponsesStream now returns IContent directly
|
446
|
+
yield message;
|
447
|
+
}
|
448
|
+
}
|
449
|
+
}
|
450
|
+
}
|
451
|
+
//# sourceMappingURL=OpenAIResponsesProvider.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"OpenAIResponsesProvider.js","sourceRoot":"","sources":["../../../../src/providers/openai-responses/OpenAIResponsesProvider.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export { OpenAIResponsesProvider } from './OpenAIResponsesProvider.js';
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/providers/openai-responses/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC"}
|
@@ -27,9 +27,9 @@ export class OpenAITokenizer {
|
|
27
27
|
this.encoderCache.set(model, encoder);
|
28
28
|
}
|
29
29
|
catch (_error) {
|
30
|
-
// Fall back to
|
31
|
-
console.warn(`No specific encoding for model ${model}, using
|
32
|
-
encoder = encoding_for_model('gpt-
|
30
|
+
// Fall back to o200k_base encoding for newer models
|
31
|
+
console.warn(`No specific encoding for model ${model}, using o200k_base`);
|
32
|
+
encoder = encoding_for_model('gpt-4o-mini');
|
33
33
|
this.encoderCache.set(model, encoder);
|
34
34
|
}
|
35
35
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"OpenAITokenizer.js","sourceRoot":"","sources":["../../../../src/providers/tokenizers/OpenAITokenizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,kBAAkB,EAAiB,MAAM,gBAAgB,CAAC;AAGnE,MAAM,OAAO,eAAe;IAClB,YAAY,GAAG,IAAI,GAAG,EAG3B,CAAC;IAEJ,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,KAAa;QAC3C,IAAI,CAAC;YACH,sCAAsC;YACtC,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,4CAA4C;gBAC5C,IAAI,CAAC;oBACH,OAAO,GAAG,kBAAkB,CAAC,KAAsB,CAAC,CAAC;oBACrD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACxC,CAAC;gBAAC,OAAO,MAAM,EAAE,CAAC;oBAChB,
|
1
|
+
{"version":3,"file":"OpenAITokenizer.js","sourceRoot":"","sources":["../../../../src/providers/tokenizers/OpenAITokenizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,kBAAkB,EAAiB,MAAM,gBAAgB,CAAC;AAGnE,MAAM,OAAO,eAAe;IAClB,YAAY,GAAG,IAAI,GAAG,EAG3B,CAAC;IAEJ,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,KAAa;QAC3C,IAAI,CAAC;YACH,sCAAsC;YACtC,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,4CAA4C;gBAC5C,IAAI,CAAC;oBACH,OAAO,GAAG,kBAAkB,CAAC,KAAsB,CAAC,CAAC;oBACrD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACxC,CAAC;gBAAC,OAAO,MAAM,EAAE,CAAC;oBAChB,oDAAoD;oBACpD,OAAO,CAAC,IAAI,CACV,kCAAkC,KAAK,oBAAoB,CAC5D,CAAC;oBACF,OAAO,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;oBAC5C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;YAED,eAAe;YACf,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACpC,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;YAC/C,+CAA+C;YAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO;QACL,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;CACF"}
|
@@ -3,7 +3,7 @@
|
|
3
3
|
* Copyright 2025 Google LLC
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
5
5
|
*/
|
6
|
-
export type {
|
6
|
+
export type { IContent as ProviderMessage } from '../services/history/IContent.js';
|
7
7
|
export type { ITool as ProviderTool } from './ITool.js';
|
8
8
|
export type { IProvider as Provider } from './IProvider.js';
|
9
9
|
export type { IProviderManager as ProviderManager } from './IProviderManager.js';
|
@@ -0,0 +1,19 @@
|
|
1
|
+
/**
|
2
|
+
* @license
|
3
|
+
* Copyright 2025 Google LLC
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
5
|
+
*/
|
6
|
+
/**
|
7
|
+
* @plan PLAN-20250822-GEMINIFALLBACK.P06
|
8
|
+
* @requirement REQ-001.1, REQ-001.2, REQ-001.3
|
9
|
+
* @pseudocode lines 29-37
|
10
|
+
*/
|
11
|
+
export declare class ClipboardService {
|
12
|
+
/**
|
13
|
+
* Copy text to clipboard using platform-specific utilities
|
14
|
+
* @plan PLAN-20250822-GEMINIFALLBACK.P06
|
15
|
+
* @requirement REQ-001.1
|
16
|
+
* @pseudocode lines 29-30
|
17
|
+
*/
|
18
|
+
copyToClipboard(text: string): Promise<void>;
|
19
|
+
}
|
@@ -0,0 +1,66 @@
|
|
1
|
+
/**
|
2
|
+
* @license
|
3
|
+
* Copyright 2025 Google LLC
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
5
|
+
*/
|
6
|
+
import { spawn } from 'child_process';
|
7
|
+
/**
|
8
|
+
* @plan PLAN-20250822-GEMINIFALLBACK.P06
|
9
|
+
* @requirement REQ-001.1, REQ-001.2, REQ-001.3
|
10
|
+
* @pseudocode lines 29-37
|
11
|
+
*/
|
12
|
+
export class ClipboardService {
|
13
|
+
/**
|
14
|
+
* Copy text to clipboard using platform-specific utilities
|
15
|
+
* @plan PLAN-20250822-GEMINIFALLBACK.P06
|
16
|
+
* @requirement REQ-001.1
|
17
|
+
* @pseudocode lines 29-30
|
18
|
+
*/
|
19
|
+
async copyToClipboard(text) {
|
20
|
+
const run = (cmd, args) => new Promise((resolveInner, rejectInner) => {
|
21
|
+
const child = spawn(cmd, args);
|
22
|
+
let stderr = '';
|
23
|
+
child.stderr.on('data', (chunk) => (stderr += chunk.toString()));
|
24
|
+
child.on('error', rejectInner);
|
25
|
+
child.on('close', (code) => {
|
26
|
+
if (code === 0)
|
27
|
+
return resolveInner();
|
28
|
+
const errorMsg = stderr.trim();
|
29
|
+
rejectInner(new Error(`'${cmd}' exited with code ${code}${errorMsg ? `: ${errorMsg}` : ''}`));
|
30
|
+
});
|
31
|
+
child.stdin.on('error', rejectInner);
|
32
|
+
child.stdin.write(text);
|
33
|
+
child.stdin.end();
|
34
|
+
});
|
35
|
+
return new Promise((resolve, reject) => {
|
36
|
+
/**
|
37
|
+
* @plan PLAN-20250822-GEMINIFALLBACK.P06
|
38
|
+
* @requirement REQ-001.2
|
39
|
+
* @pseudocode lines 31-36
|
40
|
+
*/
|
41
|
+
switch (process.platform) {
|
42
|
+
case 'win32':
|
43
|
+
// Windows: clip
|
44
|
+
run('clip', []).then(resolve).catch(reject);
|
45
|
+
break;
|
46
|
+
case 'darwin':
|
47
|
+
// macOS: pbcopy
|
48
|
+
run('pbcopy', []).then(resolve).catch(reject);
|
49
|
+
break;
|
50
|
+
case 'linux':
|
51
|
+
// Linux: try xclip first, then wl-copy (Wayland) as fallback
|
52
|
+
run('xclip', ['-selection', 'clipboard'])
|
53
|
+
.then(resolve)
|
54
|
+
.catch(() => {
|
55
|
+
// Try wl-copy as fallback for Wayland
|
56
|
+
run('wl-copy', []).then(resolve).catch(reject);
|
57
|
+
});
|
58
|
+
break;
|
59
|
+
default:
|
60
|
+
reject(new Error(`Unsupported platform: ${process.platform}`));
|
61
|
+
break;
|
62
|
+
}
|
63
|
+
});
|
64
|
+
}
|
65
|
+
}
|
66
|
+
//# sourceMappingURL=ClipboardService.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ClipboardService.js","sourceRoot":"","sources":["../../../src/services/ClipboardService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC;;;;GAIG;AACH,MAAM,OAAO,gBAAgB;IAC3B;;;;;OAKG;IACH,KAAK,CAAC,eAAe,CAAC,IAAY;QAChC,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,IAAc,EAAiB,EAAE,CACzD,IAAI,OAAO,CAAO,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE;YAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC/B,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACjE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAC/B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,IAAI,IAAI,KAAK,CAAC;oBAAE,OAAO,YAAY,EAAE,CAAC;gBACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC/B,WAAW,CACT,IAAI,KAAK,CACP,IAAI,GAAG,sBAAsB,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACtE,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YACrC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxB,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;QAEL,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC;;;;eAIG;YACH,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACzB,KAAK,OAAO;oBACV,gBAAgB;oBAChB,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC5C,MAAM;gBACR,KAAK,QAAQ;oBACX,gBAAgB;oBAChB,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC9C,MAAM;gBACR,KAAK,OAAO;oBACV,6DAA6D;oBAC7D,GAAG,CAAC,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;yBACtC,IAAI,CAAC,OAAO,CAAC;yBACb,KAAK,CAAC,GAAG,EAAE;wBACV,sCAAsC;wBACtC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBACjD,CAAC,CAAC,CAAC;oBACL,MAAM;gBACR;oBACE,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;oBAC/D,MAAM;YACV,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
@@ -0,0 +1,43 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright 2025 Vybestack LLC
|
3
|
+
*
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
* you may not use this file except in compliance with the License.
|
6
|
+
* You may obtain a copy of the License at
|
7
|
+
*
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
*
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
* See the License for the specific language governing permissions and
|
14
|
+
* limitations under the License.
|
15
|
+
*/
|
16
|
+
import { Content } from '@google/genai';
|
17
|
+
import type { IContent } from './IContent.js';
|
18
|
+
/**
|
19
|
+
* Converts between Gemini Content format and IContent format
|
20
|
+
*/
|
21
|
+
export declare class ContentConverters {
|
22
|
+
private static logger;
|
23
|
+
private static normalizeToHistoryId;
|
24
|
+
/**
|
25
|
+
* Convert IContent to Gemini Content format
|
26
|
+
*/
|
27
|
+
static toGeminiContent(iContent: IContent): Content;
|
28
|
+
/**
|
29
|
+
* Convert Gemini Content to IContent format
|
30
|
+
*/
|
31
|
+
static toIContent(content: Content, generateIdCb?: () => string, getNextUnmatchedToolCall?: () => {
|
32
|
+
historyId: string;
|
33
|
+
toolName?: string;
|
34
|
+
}): IContent;
|
35
|
+
/**
|
36
|
+
* Convert array of IContent to array of Gemini Content
|
37
|
+
*/
|
38
|
+
static toGeminiContents(iContents: IContent[]): Content[];
|
39
|
+
/**
|
40
|
+
* Convert array of Gemini Content to array of IContent
|
41
|
+
*/
|
42
|
+
static toIContents(contents: Content[]): IContent[];
|
43
|
+
}
|