@vybestack/llxprt-code 0.1.12 → 0.1.13-nightly.250727.2261021c
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/index.js +0 -0
- package/dist/package.json +5 -5
- package/dist/src/acp/acp.d.ts +208 -0
- package/dist/src/acp/acp.js +193 -0
- package/dist/src/acp/acp.js.map +1 -0
- package/dist/src/acp/acpPeer.d.ts +8 -0
- package/dist/src/acp/acpPeer.js +537 -0
- package/dist/src/acp/acpPeer.js.map +1 -0
- package/dist/src/config/config.d.ts +2 -0
- package/dist/src/config/config.js +73 -19
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/extension.d.ts +2 -2
- package/dist/src/config/extension.js +21 -16
- package/dist/src/config/extension.js.map +1 -1
- package/dist/src/config/settings.d.ts +7 -0
- package/dist/src/config/settings.js +15 -0
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/gemini.js +33 -34
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +1 -1
- package/dist/src/generated/git-commit.js +1 -1
- package/dist/src/nonInteractiveCli.js +36 -3
- package/dist/src/nonInteractiveCli.js.map +1 -1
- package/dist/src/providers/index.d.ts +1 -7
- package/dist/src/providers/index.js +2 -10
- package/dist/src/providers/index.js.map +1 -1
- package/dist/src/providers/providerConfigUtils.d.ts +1 -2
- package/dist/src/providers/providerConfigUtils.js +1 -1
- package/dist/src/providers/providerConfigUtils.js.map +1 -1
- package/dist/src/providers/providerManagerInstance.d.ts +2 -2
- package/dist/src/providers/providerManagerInstance.js +21 -19
- package/dist/src/providers/providerManagerInstance.js.map +1 -1
- package/dist/src/providers/types.d.ts +1 -9
- package/dist/src/providers/types.js +2 -10
- package/dist/src/providers/types.js.map +1 -1
- package/dist/src/services/CommandService.d.ts +3 -1
- package/dist/src/services/CommandService.js +50 -11
- package/dist/src/services/CommandService.js.map +1 -1
- package/dist/src/ui/App.js +24 -25
- package/dist/src/ui/App.js.map +1 -1
- package/dist/src/ui/commands/aboutCommand.js +21 -0
- package/dist/src/ui/commands/aboutCommand.js.map +1 -1
- package/dist/src/ui/commands/baseurlCommand.d.ts +7 -0
- package/dist/src/ui/commands/baseurlCommand.js +22 -0
- package/dist/src/ui/commands/baseurlCommand.js.map +1 -0
- package/dist/src/ui/commands/bugCommand.d.ts +7 -0
- package/dist/src/ui/commands/bugCommand.js +61 -0
- package/dist/src/ui/commands/bugCommand.js.map +1 -0
- package/dist/src/ui/commands/chatCommand.d.ts +7 -0
- package/dist/src/ui/commands/chatCommand.js +170 -0
- package/dist/src/ui/commands/chatCommand.js.map +1 -0
- package/dist/src/ui/commands/clearCommand.js +12 -2
- package/dist/src/ui/commands/clearCommand.js.map +1 -1
- package/dist/src/ui/commands/compressCommand.d.ts +7 -0
- package/dist/src/ui/commands/compressCommand.js +62 -0
- package/dist/src/ui/commands/compressCommand.js.map +1 -0
- package/dist/src/ui/commands/docsCommand.d.ts +7 -0
- package/dist/src/ui/commands/docsCommand.js +29 -0
- package/dist/src/ui/commands/docsCommand.js.map +1 -0
- package/dist/src/ui/commands/editorCommand.d.ts +7 -0
- package/dist/src/ui/commands/editorCommand.js +14 -0
- package/dist/src/ui/commands/editorCommand.js.map +1 -0
- package/dist/src/ui/commands/extensionsCommand.d.ts +7 -0
- package/dist/src/ui/commands/extensionsCommand.js +29 -0
- package/dist/src/ui/commands/extensionsCommand.js.map +1 -0
- package/dist/src/ui/commands/ideCommand.d.ts +8 -0
- package/dist/src/ui/commands/ideCommand.js +123 -0
- package/dist/src/ui/commands/ideCommand.js.map +1 -0
- package/dist/src/{providers/ProviderAwareContentGenerator.d.ts → ui/commands/keyCommand.d.ts} +2 -1
- package/dist/src/ui/commands/keyCommand.js +29 -0
- package/dist/src/ui/commands/keyCommand.js.map +1 -0
- package/dist/src/ui/commands/keyfileCommand.d.ts +7 -0
- package/dist/src/ui/commands/keyfileCommand.js +104 -0
- package/dist/src/ui/commands/keyfileCommand.js.map +1 -0
- package/dist/src/ui/commands/mcpCommand.d.ts +7 -0
- package/dist/src/ui/commands/mcpCommand.js +204 -0
- package/dist/src/ui/commands/mcpCommand.js.map +1 -0
- package/dist/src/ui/commands/modelCommand.d.ts +7 -0
- package/dist/src/ui/commands/modelCommand.js +60 -0
- package/dist/src/ui/commands/modelCommand.js.map +1 -0
- package/dist/src/ui/commands/providerCommand.d.ts +7 -0
- package/dist/src/ui/commands/providerCommand.js +86 -0
- package/dist/src/ui/commands/providerCommand.js.map +1 -0
- package/dist/src/ui/commands/quitCommand.d.ts +7 -0
- package/dist/src/ui/commands/quitCommand.js +32 -0
- package/dist/src/ui/commands/quitCommand.js.map +1 -0
- package/dist/src/ui/commands/restoreCommand.d.ts +8 -0
- package/dist/src/ui/commands/restoreCommand.js +126 -0
- package/dist/src/ui/commands/restoreCommand.js.map +1 -0
- package/dist/src/ui/commands/statsCommand.d.ts +7 -0
- package/dist/src/ui/commands/statsCommand.js +50 -0
- package/dist/src/ui/commands/statsCommand.js.map +1 -0
- package/dist/src/ui/commands/toolsCommand.d.ts +7 -0
- package/dist/src/ui/commands/toolsCommand.js +54 -0
- package/dist/src/ui/commands/toolsCommand.js.map +1 -0
- package/dist/src/ui/commands/types.d.ts +34 -2
- package/dist/src/ui/components/ContextSummaryDisplay.d.ts +6 -1
- package/dist/src/ui/components/ContextSummaryDisplay.js +46 -19
- package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -1
- package/dist/src/ui/components/Footer.d.ts +0 -1
- package/dist/src/ui/components/Footer.js +3 -21
- package/dist/src/ui/components/Footer.js.map +1 -1
- package/dist/src/ui/components/InputPrompt.js +110 -61
- package/dist/src/ui/components/InputPrompt.js.map +1 -1
- package/dist/src/ui/components/ProviderModelDialog.d.ts +1 -1
- package/dist/src/ui/components/ThemeDialog.js +25 -24
- package/dist/src/ui/components/ThemeDialog.js.map +1 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.js +3 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
- package/dist/src/ui/components/shared/MaxSizedBox.js +69 -2
- package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -1
- package/dist/src/ui/components/shared/RadioButtonSelect.d.ts +3 -1
- package/dist/src/ui/components/shared/RadioButtonSelect.js +60 -10
- package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
- package/dist/src/ui/components/shared/text-buffer.js +1 -1
- package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
- package/dist/src/ui/constants.d.ts +1 -0
- package/dist/src/ui/constants.js +1 -0
- package/dist/src/ui/constants.js.map +1 -1
- package/dist/src/ui/containers/SessionController.js +1 -1
- package/dist/src/ui/containers/SessionController.js.map +1 -1
- package/dist/src/ui/contexts/OpenAIProviderContext.d.ts +1 -2
- package/dist/src/ui/contexts/OpenAIProviderContext.js.map +1 -1
- package/dist/src/ui/hooks/shellCommandProcessor.d.ts +1 -1
- package/dist/src/ui/hooks/shellCommandProcessor.js +35 -11
- package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.d.ts +2 -9
- package/dist/src/ui/hooks/slashCommandProcessor.js +83 -622
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/useAuthCommand.js +16 -2
- package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
- package/dist/src/ui/hooks/useCompletion.d.ts +1 -0
- package/dist/src/ui/hooks/useCompletion.js +21 -2
- package/dist/src/ui/hooks/useCompletion.js.map +1 -1
- package/dist/src/ui/hooks/useFocus.d.ts +6 -0
- package/dist/src/ui/hooks/useFocus.js +41 -0
- package/dist/src/ui/hooks/useFocus.js.map +1 -0
- package/dist/src/ui/hooks/useGeminiStream.js +34 -2
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useOpenAIProviderInfo.d.ts +3 -2
- package/dist/src/ui/hooks/useOpenAIProviderInfo.js +5 -4
- package/dist/src/ui/hooks/useOpenAIProviderInfo.js.map +1 -1
- package/dist/src/ui/hooks/usePrivacySettings.js +5 -5
- package/dist/src/ui/hooks/usePrivacySettings.js.map +1 -1
- package/dist/src/ui/hooks/useProviderDialog.d.ts +5 -2
- package/dist/src/ui/hooks/useProviderDialog.js +55 -3
- package/dist/src/ui/hooks/useProviderDialog.js.map +1 -1
- package/dist/src/ui/hooks/useProviderModelDialog.d.ts +1 -1
- package/dist/src/ui/themes/ansi-light.js +1 -1
- package/dist/src/ui/themes/ansi-light.js.map +1 -1
- package/dist/src/ui/themes/googlecode.js +1 -1
- package/dist/src/ui/themes/googlecode.js.map +1 -1
- package/dist/src/ui/themes/xcode.js +1 -1
- package/dist/src/ui/themes/xcode.js.map +1 -1
- package/dist/src/ui/types.d.ts +10 -0
- package/dist/src/ui/types.js.map +1 -1
- package/dist/src/ui/utils/updateCheck.js +10 -6
- package/dist/src/ui/utils/updateCheck.js.map +1 -1
- package/dist/src/utils/userStartupWarnings.js +1 -16
- package/dist/src/utils/userStartupWarnings.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
- package/dist/src/providers/IMessage.d.ts +0 -38
- package/dist/src/providers/IMessage.js +0 -17
- package/dist/src/providers/IMessage.js.map +0 -1
- package/dist/src/providers/IModel.d.ts +0 -23
- package/dist/src/providers/IModel.js +0 -17
- package/dist/src/providers/IModel.js.map +0 -1
- package/dist/src/providers/IProvider.d.ts +0 -32
- package/dist/src/providers/IProvider.js +0 -17
- package/dist/src/providers/IProvider.js.map +0 -1
- package/dist/src/providers/ITool.d.ts +0 -23
- package/dist/src/providers/ITool.js +0 -17
- package/dist/src/providers/ITool.js.map +0 -1
- package/dist/src/providers/ProviderAwareContentGenerator.js +0 -9
- package/dist/src/providers/ProviderAwareContentGenerator.js.map +0 -1
- package/dist/src/providers/ProviderManager.d.ts +0 -19
- package/dist/src/providers/ProviderManager.js +0 -63
- package/dist/src/providers/ProviderManager.js.map +0 -1
- package/dist/src/providers/ProviderManagerAdapter.d.ts +0 -17
- package/dist/src/providers/ProviderManagerAdapter.js +0 -113
- package/dist/src/providers/ProviderManagerAdapter.js.map +0 -1
- package/dist/src/providers/README-qwen3.md +0 -60
- package/dist/src/providers/adapters/IStreamAdapter.d.ts +0 -18
- package/dist/src/providers/adapters/IStreamAdapter.js +0 -7
- package/dist/src/providers/adapters/IStreamAdapter.js.map +0 -1
- package/dist/src/providers/anthropic/AnthropicProvider.d.ts +0 -46
- package/dist/src/providers/anthropic/AnthropicProvider.js +0 -478
- package/dist/src/providers/anthropic/AnthropicProvider.js.map +0 -1
- package/dist/src/providers/contentGeneratorProvider.d.ts +0 -13
- package/dist/src/providers/contentGeneratorProvider.js +0 -17
- package/dist/src/providers/contentGeneratorProvider.js.map +0 -1
- package/dist/src/providers/gemini/GeminiProvider.d.ts +0 -72
- package/dist/src/providers/gemini/GeminiProvider.js +0 -454
- package/dist/src/providers/gemini/GeminiProvider.js.map +0 -1
- package/dist/src/providers/integration/TEST_INSTRUCTIONS.md +0 -197
- package/dist/src/providers/openai/ConversationCache.d.ts +0 -20
- package/dist/src/providers/openai/ConversationCache.js +0 -109
- package/dist/src/providers/openai/ConversationCache.js.map +0 -1
- package/dist/src/providers/openai/IChatGenerateParams.d.ts +0 -11
- package/dist/src/providers/openai/IChatGenerateParams.js +0 -2
- package/dist/src/providers/openai/IChatGenerateParams.js.map +0 -1
- package/dist/src/providers/openai/OpenAIProvider.d.ts +0 -71
- package/dist/src/providers/openai/OpenAIProvider.js +0 -486
- package/dist/src/providers/openai/OpenAIProvider.js.map +0 -1
- package/dist/src/providers/openai/Qwen3FireworksProvider.d.ts +0 -39
- package/dist/src/providers/openai/Qwen3FireworksProvider.js +0 -209
- package/dist/src/providers/openai/Qwen3FireworksProvider.js.map +0 -1
- package/dist/src/providers/openai/RESPONSES_API_MODELS.d.ts +0 -2
- package/dist/src/providers/openai/RESPONSES_API_MODELS.js +0 -14
- package/dist/src/providers/openai/RESPONSES_API_MODELS.js.map +0 -1
- package/dist/src/providers/openai/buildResponsesRequest.d.ts +0 -67
- package/dist/src/providers/openai/buildResponsesRequest.js +0 -144
- package/dist/src/providers/openai/buildResponsesRequest.js.map +0 -1
- package/dist/src/providers/openai/docs/accessing-provider-info.md +0 -172
- package/dist/src/providers/openai/docs/params-mapping.md +0 -91
- package/dist/src/providers/openai/docs/qwen3-fireworks.md +0 -47
- package/dist/src/providers/openai/docs/responses-api-tool-calls.md +0 -96
- package/dist/src/providers/openai/estimateRemoteTokens.d.ts +0 -26
- package/dist/src/providers/openai/estimateRemoteTokens.js +0 -75
- package/dist/src/providers/openai/estimateRemoteTokens.js.map +0 -1
- package/dist/src/providers/openai/getOpenAIProviderInfo.d.ts +0 -46
- package/dist/src/providers/openai/getOpenAIProviderInfo.js +0 -74
- package/dist/src/providers/openai/getOpenAIProviderInfo.js.map +0 -1
- package/dist/src/providers/openai/parseResponsesStream.d.ts +0 -3
- package/dist/src/providers/openai/parseResponsesStream.js +0 -444
- package/dist/src/providers/openai/parseResponsesStream.js.map +0 -1
- package/dist/src/providers/parsers/TextToolCallParser.d.ts +0 -35
- package/dist/src/providers/parsers/TextToolCallParser.js +0 -248
- package/dist/src/providers/parsers/TextToolCallParser.js.map +0 -1
- package/dist/src/providers/tokenizers/AnthropicTokenizer.d.ts +0 -19
- package/dist/src/providers/tokenizers/AnthropicTokenizer.js +0 -37
- package/dist/src/providers/tokenizers/AnthropicTokenizer.js.map +0 -1
- package/dist/src/providers/tokenizers/ITokenizer.d.ts +0 -18
- package/dist/src/providers/tokenizers/ITokenizer.js +0 -17
- package/dist/src/providers/tokenizers/ITokenizer.js.map +0 -1
- package/dist/src/providers/tokenizers/OpenAITokenizer.d.ts +0 -24
- package/dist/src/providers/tokenizers/OpenAITokenizer.js +0 -56
- package/dist/src/providers/tokenizers/OpenAITokenizer.js.map +0 -1
- package/dist/src/tools/IToolFormatter.d.ts +0 -40
- package/dist/src/tools/IToolFormatter.js +0 -17
- package/dist/src/tools/IToolFormatter.js.map +0 -1
- package/dist/src/tools/ToolFormatter.d.ts +0 -45
- package/dist/src/tools/ToolFormatter.js +0 -216
- package/dist/src/tools/ToolFormatter.js.map +0 -1
- package/dist/vybestack-llxprt-code-0.1.12.tgz +0 -0
@@ -1,454 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* @license
|
3
|
-
* Copyright 2025 Vybestack LLC
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
5
|
-
*/
|
6
|
-
import { AuthType } from '@vybestack/llxprt-code-core';
|
7
|
-
import { ContentGeneratorRole } from '../types.js';
|
8
|
-
export class GeminiProvider {
|
9
|
-
name = 'gemini';
|
10
|
-
isDefault = true;
|
11
|
-
apiKey;
|
12
|
-
authMode = 'none';
|
13
|
-
config;
|
14
|
-
currentModel = 'gemini-2.5-pro';
|
15
|
-
constructor() {
|
16
|
-
// Do not determine auth mode on instantiation.
|
17
|
-
// This will be done lazily when a chat completion is requested.
|
18
|
-
}
|
19
|
-
/**
|
20
|
-
* Determines the best available authentication method based on environment variables
|
21
|
-
* and existing configuration. Follows the hierarchy: Vertex AI → Gemini API key → OAuth
|
22
|
-
*/
|
23
|
-
determineBestAuth() {
|
24
|
-
// Check if user explicitly selected USE_NONE via the content generator config
|
25
|
-
const authType = this.config?.getContentGeneratorConfig()?.authType;
|
26
|
-
if (authType === AuthType.USE_NONE) {
|
27
|
-
this.authMode = 'none';
|
28
|
-
return;
|
29
|
-
}
|
30
|
-
// Check for Vertex AI credentials first
|
31
|
-
if (this.hasVertexAICredentials()) {
|
32
|
-
this.authMode = 'vertex-ai';
|
33
|
-
this.setupVertexAIAuth();
|
34
|
-
}
|
35
|
-
// Check for Gemini API key second
|
36
|
-
else if (this.hasGeminiAPIKey()) {
|
37
|
-
this.authMode = 'gemini-api-key';
|
38
|
-
// API key is already in environment, no additional setup needed
|
39
|
-
}
|
40
|
-
// Fall back to OAuth (will prompt user if needed)
|
41
|
-
else {
|
42
|
-
this.authMode = 'oauth';
|
43
|
-
// OAuth will be handled by the existing auth system
|
44
|
-
}
|
45
|
-
}
|
46
|
-
/**
|
47
|
-
* Checks if Vertex AI credentials are available
|
48
|
-
*/
|
49
|
-
hasVertexAICredentials() {
|
50
|
-
const hasProjectAndLocation = !!process.env.GOOGLE_CLOUD_PROJECT && !!process.env.GOOGLE_CLOUD_LOCATION;
|
51
|
-
const hasGoogleApiKey = !!process.env.GOOGLE_API_KEY;
|
52
|
-
return hasProjectAndLocation || hasGoogleApiKey;
|
53
|
-
}
|
54
|
-
/**
|
55
|
-
* Checks if Gemini API key is available
|
56
|
-
*/
|
57
|
-
hasGeminiAPIKey() {
|
58
|
-
return !!this.apiKey || !!process.env.GEMINI_API_KEY;
|
59
|
-
}
|
60
|
-
/**
|
61
|
-
* Sets up environment variables for Vertex AI authentication
|
62
|
-
*/
|
63
|
-
setupVertexAIAuth() {
|
64
|
-
process.env.GOOGLE_GENAI_USE_VERTEXAI = 'true';
|
65
|
-
// Other Vertex AI env vars are already set, no need to duplicate
|
66
|
-
}
|
67
|
-
/**
|
68
|
-
* Sets the config instance for reading OAuth credentials
|
69
|
-
*/
|
70
|
-
setConfig(config) {
|
71
|
-
this.config = config;
|
72
|
-
// Re-determine auth after config is set
|
73
|
-
this.determineBestAuth();
|
74
|
-
}
|
75
|
-
async getModels() {
|
76
|
-
// For OAuth mode, return fixed list of models
|
77
|
-
if (this.authMode === 'oauth') {
|
78
|
-
return [
|
79
|
-
{
|
80
|
-
id: 'gemini-2.5-pro',
|
81
|
-
name: 'Gemini 2.5 Pro',
|
82
|
-
provider: this.name,
|
83
|
-
supportedToolFormats: [],
|
84
|
-
},
|
85
|
-
{
|
86
|
-
id: 'gemini-2.5-flash',
|
87
|
-
name: 'Gemini 2.5 Flash',
|
88
|
-
provider: this.name,
|
89
|
-
supportedToolFormats: [],
|
90
|
-
},
|
91
|
-
];
|
92
|
-
}
|
93
|
-
// For API key modes (gemini-api-key or vertex-ai), try to fetch real models
|
94
|
-
if (this.authMode === 'gemini-api-key' || this.authMode === 'vertex-ai') {
|
95
|
-
const apiKey = this.apiKey || process.env.GEMINI_API_KEY;
|
96
|
-
if (apiKey) {
|
97
|
-
try {
|
98
|
-
const response = await fetch(`https://generativelanguage.googleapis.com/v1beta/models?key=${apiKey}`, {
|
99
|
-
method: 'GET',
|
100
|
-
headers: {
|
101
|
-
'Content-Type': 'application/json',
|
102
|
-
},
|
103
|
-
});
|
104
|
-
if (response.ok) {
|
105
|
-
const data = (await response.json());
|
106
|
-
if (data.models && data.models.length > 0) {
|
107
|
-
return data.models.map((model) => ({
|
108
|
-
id: model.name.replace('models/', ''), // Remove 'models/' prefix
|
109
|
-
name: model.displayName || model.name,
|
110
|
-
provider: this.name,
|
111
|
-
supportedToolFormats: [],
|
112
|
-
}));
|
113
|
-
}
|
114
|
-
}
|
115
|
-
}
|
116
|
-
catch (_error) {
|
117
|
-
// Fall through to default models
|
118
|
-
}
|
119
|
-
}
|
120
|
-
}
|
121
|
-
// Return default models as fallback
|
122
|
-
return [
|
123
|
-
{
|
124
|
-
id: 'gemini-2.5-pro',
|
125
|
-
name: 'Gemini 2.5 Pro',
|
126
|
-
provider: this.name,
|
127
|
-
supportedToolFormats: [],
|
128
|
-
},
|
129
|
-
{
|
130
|
-
id: 'gemini-2.5-flash',
|
131
|
-
name: 'Gemini 2.5 Flash',
|
132
|
-
provider: this.name,
|
133
|
-
supportedToolFormats: [],
|
134
|
-
},
|
135
|
-
];
|
136
|
-
}
|
137
|
-
async *generateChatCompletion(messages, tools, _toolFormat) {
|
138
|
-
// Lazily determine the best auth method now that it's needed.
|
139
|
-
this.determineBestAuth();
|
140
|
-
// Import the necessary modules dynamically to avoid circular dependencies
|
141
|
-
const { GoogleGenAI } = await import('@google/genai');
|
142
|
-
// Create the appropriate client based on auth mode
|
143
|
-
let genAI;
|
144
|
-
const httpOptions = {
|
145
|
-
headers: {
|
146
|
-
'User-Agent': `GeminiCLI/${process.env.CLI_VERSION || process.version} (${process.platform}; ${process.arch})`,
|
147
|
-
},
|
148
|
-
};
|
149
|
-
switch (this.authMode) {
|
150
|
-
case 'gemini-api-key':
|
151
|
-
if (!this.apiKey && !process.env.GEMINI_API_KEY) {
|
152
|
-
throw new Error('Gemini API key required but not found');
|
153
|
-
}
|
154
|
-
genAI = new GoogleGenAI({
|
155
|
-
apiKey: this.apiKey || process.env.GEMINI_API_KEY,
|
156
|
-
httpOptions,
|
157
|
-
});
|
158
|
-
break;
|
159
|
-
case 'vertex-ai':
|
160
|
-
if (!process.env.GOOGLE_API_KEY) {
|
161
|
-
throw new Error('Google API key required for Vertex AI');
|
162
|
-
}
|
163
|
-
genAI = new GoogleGenAI({
|
164
|
-
apiKey: process.env.GOOGLE_API_KEY,
|
165
|
-
vertexai: true,
|
166
|
-
httpOptions,
|
167
|
-
});
|
168
|
-
break;
|
169
|
-
case 'oauth': {
|
170
|
-
// For OAuth, we need to use the code assist server
|
171
|
-
const { createCodeAssistContentGenerator } = await import('@vybestack/llxprt-code-core');
|
172
|
-
const contentGenerator = await createCodeAssistContentGenerator(httpOptions, AuthType.LOGIN_WITH_GOOGLE, this.config);
|
173
|
-
// Convert messages to Gemini request format
|
174
|
-
const request = {
|
175
|
-
model: this.currentModel,
|
176
|
-
contents: this.convertMessagesToGeminiFormat(messages),
|
177
|
-
config: {
|
178
|
-
tools: tools ? this.convertToolsToGeminiFormat(tools) : undefined,
|
179
|
-
},
|
180
|
-
};
|
181
|
-
// Use the content generator stream
|
182
|
-
const streamResult = await contentGenerator.generateContentStream(request);
|
183
|
-
// Convert the stream to our format
|
184
|
-
for await (const response of streamResult) {
|
185
|
-
// Extract text from the response
|
186
|
-
const text = response.candidates?.[0]?.content?.parts
|
187
|
-
?.filter((part) => 'text' in part)
|
188
|
-
?.map((part) => part.text)
|
189
|
-
?.join('') || '';
|
190
|
-
// Extract function calls from the response
|
191
|
-
const functionCalls = response.candidates?.[0]?.content?.parts
|
192
|
-
?.filter((part) => 'functionCall' in part)
|
193
|
-
?.map((part) => part.functionCall) || [];
|
194
|
-
// Build response message
|
195
|
-
const message = {
|
196
|
-
role: ContentGeneratorRole.ASSISTANT,
|
197
|
-
content: text,
|
198
|
-
};
|
199
|
-
// Add function calls if any
|
200
|
-
if (functionCalls && functionCalls.length > 0) {
|
201
|
-
message.tool_calls = functionCalls.map((call) => ({
|
202
|
-
id: call.id ||
|
203
|
-
`call_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,
|
204
|
-
type: 'function',
|
205
|
-
function: {
|
206
|
-
name: call.name || 'unknown_function',
|
207
|
-
arguments: JSON.stringify(call.args || {}),
|
208
|
-
},
|
209
|
-
}));
|
210
|
-
}
|
211
|
-
// Only yield if there's content or tool calls
|
212
|
-
if (text || (functionCalls && functionCalls.length > 0)) {
|
213
|
-
yield message;
|
214
|
-
}
|
215
|
-
}
|
216
|
-
return;
|
217
|
-
}
|
218
|
-
case 'none':
|
219
|
-
// For 'none' mode, check what credentials are available
|
220
|
-
if (this.hasGeminiAPIKey()) {
|
221
|
-
genAI = new GoogleGenAI({
|
222
|
-
apiKey: this.apiKey || process.env.GEMINI_API_KEY,
|
223
|
-
httpOptions,
|
224
|
-
});
|
225
|
-
}
|
226
|
-
else if (this.hasVertexAICredentials()) {
|
227
|
-
this.setupVertexAIAuth();
|
228
|
-
genAI = new GoogleGenAI({
|
229
|
-
apiKey: process.env.GOOGLE_API_KEY,
|
230
|
-
vertexai: true,
|
231
|
-
httpOptions,
|
232
|
-
});
|
233
|
-
}
|
234
|
-
else {
|
235
|
-
throw new Error('No authentication credentials found. Please use /auth to login with Google OAuth, set GEMINI_API_KEY, or configure Vertex AI credentials.');
|
236
|
-
}
|
237
|
-
break;
|
238
|
-
default:
|
239
|
-
throw new Error(`Unsupported auth mode: ${this.authMode}`);
|
240
|
-
}
|
241
|
-
// Get the models interface (which is a ContentGenerator)
|
242
|
-
const contentGenerator = genAI.models;
|
243
|
-
// Convert IMessage[] to Gemini format
|
244
|
-
const contents = this.convertMessagesToGeminiFormat(messages);
|
245
|
-
// Convert ITool[] to Gemini tool format
|
246
|
-
const geminiTools = tools
|
247
|
-
? this.convertToolsToGeminiFormat(tools)
|
248
|
-
: undefined;
|
249
|
-
// Create the request - ContentGenerator expects model in the request
|
250
|
-
const request = {
|
251
|
-
model: this.currentModel,
|
252
|
-
contents,
|
253
|
-
config: {
|
254
|
-
tools: geminiTools,
|
255
|
-
},
|
256
|
-
};
|
257
|
-
// Generate content stream using the ContentGenerator interface
|
258
|
-
const stream = await contentGenerator.generateContentStream(request);
|
259
|
-
// Stream the response
|
260
|
-
for await (const response of stream) {
|
261
|
-
// Extract text from the response
|
262
|
-
const text = response.candidates?.[0]?.content?.parts
|
263
|
-
?.filter((part) => 'text' in part)
|
264
|
-
?.map((part) => part.text)
|
265
|
-
?.join('') || '';
|
266
|
-
// Extract function calls from the response
|
267
|
-
const functionCalls = response.candidates?.[0]?.content?.parts
|
268
|
-
?.filter((part) => 'functionCall' in part)
|
269
|
-
?.map((part) => part.functionCall) || [];
|
270
|
-
// Build response message
|
271
|
-
const message = {
|
272
|
-
role: ContentGeneratorRole.ASSISTANT,
|
273
|
-
content: text || '',
|
274
|
-
};
|
275
|
-
// Add function calls if any
|
276
|
-
if (functionCalls && functionCalls.length > 0) {
|
277
|
-
message.tool_calls = functionCalls.map((call) => ({
|
278
|
-
id: call.id ||
|
279
|
-
`call_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,
|
280
|
-
type: 'function',
|
281
|
-
function: {
|
282
|
-
name: call.name || 'unknown_function',
|
283
|
-
arguments: JSON.stringify(call.args || {}),
|
284
|
-
},
|
285
|
-
}));
|
286
|
-
}
|
287
|
-
// Only yield if there's content or tool calls
|
288
|
-
if (text || (functionCalls && functionCalls.length > 0)) {
|
289
|
-
yield message;
|
290
|
-
}
|
291
|
-
}
|
292
|
-
}
|
293
|
-
convertMessagesToGeminiFormat(messages) {
|
294
|
-
const contents = [];
|
295
|
-
let currentToolResponses = [];
|
296
|
-
for (let i = 0; i < messages.length; i++) {
|
297
|
-
const msg = messages[i];
|
298
|
-
// Handle tool responses - group consecutive ones together
|
299
|
-
if (msg.role === ContentGeneratorRole.TOOL && msg.tool_call_id) {
|
300
|
-
currentToolResponses.push({
|
301
|
-
functionResponse: {
|
302
|
-
id: msg.tool_call_id,
|
303
|
-
name: msg.tool_name || 'unknown_function',
|
304
|
-
response: {
|
305
|
-
output: msg.content,
|
306
|
-
},
|
307
|
-
},
|
308
|
-
});
|
309
|
-
// Check if next message is also a tool response
|
310
|
-
const isLastMessage = i === messages.length - 1;
|
311
|
-
const nextIsNotTool = isLastMessage || messages[i + 1].role !== ContentGeneratorRole.TOOL;
|
312
|
-
if (nextIsNotTool && currentToolResponses.length > 0) {
|
313
|
-
// Flush accumulated tool responses as a single Content
|
314
|
-
contents.push({
|
315
|
-
role: 'user',
|
316
|
-
parts: currentToolResponses,
|
317
|
-
});
|
318
|
-
currentToolResponses = [];
|
319
|
-
}
|
320
|
-
continue;
|
321
|
-
}
|
322
|
-
// For non-tool messages, convert normally
|
323
|
-
const parts = [];
|
324
|
-
// Check for parts first (for messages with PDF/image parts but no text content)
|
325
|
-
if (msg.parts && msg.parts.length > 0) {
|
326
|
-
parts.push(...msg.parts);
|
327
|
-
}
|
328
|
-
else if (msg.content) {
|
329
|
-
// Handle PartListUnion: string | Part | Part[]
|
330
|
-
// In practice, content can be PartListUnion even though IMessage types it as string
|
331
|
-
const content = msg.content;
|
332
|
-
if (typeof content === 'string') {
|
333
|
-
// Try to parse string in case it's a stringified Part or Part[]
|
334
|
-
if ((content.startsWith('{') && content.endsWith('}')) ||
|
335
|
-
(content.startsWith('[') && content.endsWith(']'))) {
|
336
|
-
try {
|
337
|
-
const parsed = JSON.parse(content);
|
338
|
-
if (Array.isArray(parsed)) {
|
339
|
-
parts.push(...parsed);
|
340
|
-
}
|
341
|
-
else {
|
342
|
-
parts.push(parsed);
|
343
|
-
}
|
344
|
-
}
|
345
|
-
catch (_e) {
|
346
|
-
// Not valid JSON, treat as text
|
347
|
-
parts.push({ text: content });
|
348
|
-
}
|
349
|
-
}
|
350
|
-
else {
|
351
|
-
parts.push({ text: content });
|
352
|
-
}
|
353
|
-
}
|
354
|
-
else if (Array.isArray(content)) {
|
355
|
-
// Content is Part[]
|
356
|
-
parts.push(...content);
|
357
|
-
}
|
358
|
-
else {
|
359
|
-
// Content is a single Part
|
360
|
-
parts.push(content);
|
361
|
-
}
|
362
|
-
}
|
363
|
-
// Handle tool calls
|
364
|
-
if (msg.tool_calls && msg.tool_calls.length > 0) {
|
365
|
-
for (const toolCall of msg.tool_calls) {
|
366
|
-
parts.push({
|
367
|
-
functionCall: {
|
368
|
-
id: toolCall.id,
|
369
|
-
name: toolCall.function.name,
|
370
|
-
args: JSON.parse(toolCall.function.arguments),
|
371
|
-
},
|
372
|
-
});
|
373
|
-
}
|
374
|
-
}
|
375
|
-
// Map roles
|
376
|
-
let role = 'user';
|
377
|
-
if (msg.role === ContentGeneratorRole.ASSISTANT) {
|
378
|
-
role = 'model';
|
379
|
-
}
|
380
|
-
else if (msg.role === ContentGeneratorRole.USER) {
|
381
|
-
role = 'user';
|
382
|
-
}
|
383
|
-
else if (msg.role === 'system') {
|
384
|
-
// Gemini doesn't have system role in contents, handle separately
|
385
|
-
role = 'user';
|
386
|
-
}
|
387
|
-
if (parts.length > 0) {
|
388
|
-
contents.push({
|
389
|
-
role,
|
390
|
-
parts,
|
391
|
-
});
|
392
|
-
}
|
393
|
-
}
|
394
|
-
return contents;
|
395
|
-
}
|
396
|
-
convertToolsToGeminiFormat(tools) {
|
397
|
-
return [
|
398
|
-
{
|
399
|
-
functionDeclarations: tools.map((tool) => ({
|
400
|
-
name: tool.function.name,
|
401
|
-
description: tool.function.description,
|
402
|
-
parameters: tool.function.parameters,
|
403
|
-
})),
|
404
|
-
},
|
405
|
-
];
|
406
|
-
}
|
407
|
-
setApiKey(apiKey) {
|
408
|
-
this.apiKey = apiKey;
|
409
|
-
// Set the API key as an environment variable so it can be used by the core library
|
410
|
-
process.env.GEMINI_API_KEY = apiKey;
|
411
|
-
// Re-determine auth after API key is set
|
412
|
-
this.determineBestAuth();
|
413
|
-
}
|
414
|
-
/**
|
415
|
-
* Gets the current authentication mode
|
416
|
-
*/
|
417
|
-
getAuthMode() {
|
418
|
-
return this.authMode;
|
419
|
-
}
|
420
|
-
/**
|
421
|
-
* Gets the appropriate AuthType for the core library
|
422
|
-
*/
|
423
|
-
getCoreAuthType() {
|
424
|
-
switch (this.authMode) {
|
425
|
-
case 'oauth':
|
426
|
-
return AuthType.LOGIN_WITH_GOOGLE;
|
427
|
-
case 'gemini-api-key':
|
428
|
-
return AuthType.USE_GEMINI;
|
429
|
-
case 'vertex-ai':
|
430
|
-
return AuthType.USE_VERTEX_AI;
|
431
|
-
default:
|
432
|
-
return AuthType.LOGIN_WITH_GOOGLE; // Default to OAuth
|
433
|
-
}
|
434
|
-
}
|
435
|
-
/**
|
436
|
-
* Gets the current model ID
|
437
|
-
*/
|
438
|
-
getCurrentModel() {
|
439
|
-
return this.currentModel;
|
440
|
-
}
|
441
|
-
/**
|
442
|
-
* Sets the current model ID
|
443
|
-
*/
|
444
|
-
setModel(modelId) {
|
445
|
-
this.currentModel = modelId;
|
446
|
-
}
|
447
|
-
/**
|
448
|
-
* Checks if the current auth mode requires payment
|
449
|
-
*/
|
450
|
-
isPaidMode() {
|
451
|
-
return this.authMode === 'gemini-api-key' || this.authMode === 'vertex-ai';
|
452
|
-
}
|
453
|
-
}
|
454
|
-
//# sourceMappingURL=GeminiProvider.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"GeminiProvider.js","sourceRoot":"","sources":["../../../../src/providers/gemini/GeminiProvider.ts"],"names":[],"mappings":"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"}
|
@@ -1,197 +0,0 @@
|
|
1
|
-
# Multi-Provider Integration Test Instructions
|
2
|
-
|
3
|
-
## Prerequisites
|
4
|
-
|
5
|
-
1. Create `~/.openai_key` file with your OpenAI API key:
|
6
|
-
|
7
|
-
```bash
|
8
|
-
echo "sk-your-api-key-here" > ~/.openai_key
|
9
|
-
chmod 600 ~/.openai_key
|
10
|
-
```
|
11
|
-
|
12
|
-
2. Build the project:
|
13
|
-
```bash
|
14
|
-
npm run build
|
15
|
-
```
|
16
|
-
|
17
|
-
## Running Automated Integration Tests
|
18
|
-
|
19
|
-
```bash
|
20
|
-
# Run all multi-provider integration tests
|
21
|
-
npm test -- src/providers/integration/multi-provider.integration.test.ts
|
22
|
-
|
23
|
-
# Run with verbose output
|
24
|
-
npm test -- src/providers/integration/multi-provider.integration.test.ts --reporter=verbose
|
25
|
-
```
|
26
|
-
|
27
|
-
### Expected Test Output
|
28
|
-
|
29
|
-
When successful, you should see output like:
|
30
|
-
|
31
|
-
```
|
32
|
-
✅ Found 48 OpenAI models
|
33
|
-
Sample models: gpt-3.5-turbo, gpt-3.5-turbo-0125, gpt-3.5-turbo-1106...
|
34
|
-
|
35
|
-
✅ GPT-3.5-turbo response: "Hello from OpenAI integration test"
|
36
|
-
|
37
|
-
✅ Streaming test received 7 chunks
|
38
|
-
Response: "1
|
39
|
-
2
|
40
|
-
3
|
41
|
-
4
|
42
|
-
5"
|
43
|
-
|
44
|
-
✅ GPT-4 response: "4"
|
45
|
-
|
46
|
-
✅ Tool call received: get_weather
|
47
|
-
Arguments: {"location":"San Francisco"}
|
48
|
-
|
49
|
-
✅ Content generator response: "Hello! How can I help you today?"
|
50
|
-
|
51
|
-
✅ Correctly caught error for invalid model: The model 'invalid-model-xyz' does not exist
|
52
|
-
```
|
53
|
-
|
54
|
-
## Manual Interactive Testing
|
55
|
-
|
56
|
-
Run the manual test script:
|
57
|
-
|
58
|
-
```bash
|
59
|
-
node packages/cli/test-multi-provider.js
|
60
|
-
```
|
61
|
-
|
62
|
-
### Test Scenarios
|
63
|
-
|
64
|
-
1. **List providers**
|
65
|
-
|
66
|
-
```
|
67
|
-
/provider
|
68
|
-
```
|
69
|
-
|
70
|
-
Expected: Shows `gemini (active)` and `openai`
|
71
|
-
|
72
|
-
2. **Switch to OpenAI**
|
73
|
-
|
74
|
-
```
|
75
|
-
/provider openai
|
76
|
-
```
|
77
|
-
|
78
|
-
Expected: "✅ Switched to openai provider"
|
79
|
-
|
80
|
-
3. **List available models**
|
81
|
-
|
82
|
-
```
|
83
|
-
/models
|
84
|
-
```
|
85
|
-
|
86
|
-
Expected: List of OpenAI models (gpt-3.5-turbo, gpt-4, etc.)
|
87
|
-
|
88
|
-
4. **Send a chat message**
|
89
|
-
|
90
|
-
```
|
91
|
-
/chat Hello, how are you?
|
92
|
-
```
|
93
|
-
|
94
|
-
Expected: Response from OpenAI
|
95
|
-
|
96
|
-
5. **Test streaming**
|
97
|
-
|
98
|
-
```
|
99
|
-
/stream Tell me a short joke
|
100
|
-
```
|
101
|
-
|
102
|
-
Expected: Response streams character by character
|
103
|
-
|
104
|
-
6. **Switch models**
|
105
|
-
|
106
|
-
```
|
107
|
-
/model gpt-4
|
108
|
-
/chat What model are you?
|
109
|
-
```
|
110
|
-
|
111
|
-
Expected: Confirms using GPT-4
|
112
|
-
|
113
|
-
7. **Switch back to Gemini**
|
114
|
-
|
115
|
-
```
|
116
|
-
/provider gemini
|
117
|
-
```
|
118
|
-
|
119
|
-
Expected: "✅ Switched to Gemini (default provider)"
|
120
|
-
|
121
|
-
8. **Error handling**
|
122
|
-
```
|
123
|
-
/provider invalid
|
124
|
-
/model invalid-model
|
125
|
-
```
|
126
|
-
Expected: Appropriate error messages
|
127
|
-
|
128
|
-
## Example Session
|
129
|
-
|
130
|
-
```
|
131
|
-
🚀 Multi-Provider Manual Test Script
|
132
|
-
=====================================
|
133
|
-
|
134
|
-
📦 Registering OpenAI provider...
|
135
|
-
✅ OpenAI provider registered
|
136
|
-
|
137
|
-
Available commands:
|
138
|
-
/provider - List available providers
|
139
|
-
/provider <name> - Switch to provider (e.g., /provider openai)
|
140
|
-
/provider gemini - Switch back to Gemini (default)
|
141
|
-
/model - Show current model
|
142
|
-
/model <name> - Switch model (e.g., /model gpt-4)
|
143
|
-
/models - List available models
|
144
|
-
/chat <message> - Send a chat message
|
145
|
-
/stream <message> - Send a message and show streaming
|
146
|
-
/help - Show this help
|
147
|
-
/exit - Exit the program
|
148
|
-
|
149
|
-
Ready for testing! Type a command:
|
150
|
-
|
151
|
-
> /provider
|
152
|
-
Available providers:
|
153
|
-
gemini (active)
|
154
|
-
openai
|
155
|
-
|
156
|
-
> /provider openai
|
157
|
-
✅ Switched to openai provider
|
158
|
-
|
159
|
-
> /model
|
160
|
-
Current model: gpt-3.5-turbo
|
161
|
-
|
162
|
-
> /chat Hello!
|
163
|
-
Sending message...
|
164
|
-
|
165
|
-
Response:
|
166
|
-
Hello! How can I assist you today?
|
167
|
-
|
168
|
-
> /stream Count to 3
|
169
|
-
Streaming response...
|
170
|
-
|
171
|
-
1... 2... 3!
|
172
|
-
|
173
|
-
> /provider gemini
|
174
|
-
✅ Switched to Gemini (default provider)
|
175
|
-
|
176
|
-
> /exit
|
177
|
-
Goodbye! 👋
|
178
|
-
```
|
179
|
-
|
180
|
-
## Troubleshooting
|
181
|
-
|
182
|
-
1. **"No OpenAI API key found"**
|
183
|
-
- Make sure `~/.openai_key` exists and contains valid API key
|
184
|
-
- Check file permissions: `ls -la ~/.openai_key`
|
185
|
-
|
186
|
-
2. **"Connection error" in tests**
|
187
|
-
- Check internet connection
|
188
|
-
- Verify API key is valid
|
189
|
-
- OpenAI API might be down
|
190
|
-
|
191
|
-
3. **"Model does not exist"**
|
192
|
-
- Some models require specific API access
|
193
|
-
- Try with `gpt-3.5-turbo` which is widely available
|
194
|
-
|
195
|
-
4. **Rate limiting**
|
196
|
-
- If you get rate limit errors, wait a bit between requests
|
197
|
-
- Consider using a different API key for testing
|
@@ -1,20 +0,0 @@
|
|
1
|
-
import { IMessage } from '../IMessage.js';
|
2
|
-
export declare class ConversationCache {
|
3
|
-
private cache;
|
4
|
-
private accessOrder;
|
5
|
-
private readonly maxSize;
|
6
|
-
private readonly ttlMs;
|
7
|
-
constructor(maxSize?: number, ttlHours?: number);
|
8
|
-
private generateKey;
|
9
|
-
private evictIfNeeded;
|
10
|
-
private updateAccessOrder;
|
11
|
-
private isExpired;
|
12
|
-
set(conversationId: string, parentId: string, messages: IMessage[], promptTokensAccum?: number): void;
|
13
|
-
get(conversationId: string, parentId: string): IMessage[] | null;
|
14
|
-
has(conversationId: string, parentId: string): boolean;
|
15
|
-
clear(): void;
|
16
|
-
size(): number;
|
17
|
-
getAccumulatedTokens(conversationId: string, parentId: string): number;
|
18
|
-
updateTokenCount(conversationId: string, parentId: string, additionalTokens: number): void;
|
19
|
-
invalidate(conversationId: string, parentId: string): void;
|
20
|
-
}
|