@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,209 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* @license
|
3
|
-
* Copyright 2025 Vybestack LLC
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
5
|
-
*/
|
6
|
-
import { OpenAIProvider } from './OpenAIProvider.js';
|
7
|
-
import { ContentGeneratorRole } from '../types.js';
|
8
|
-
/**
|
9
|
-
* Qwen3-Fireworks provider that extends OpenAI provider with Qwen3-specific handling
|
10
|
-
* Fireworks AI provides an OpenAI-compatible API for Qwen3-235B model
|
11
|
-
*/
|
12
|
-
export class Qwen3FireworksProvider extends OpenAIProvider {
|
13
|
-
name = 'qwen3-fireworks';
|
14
|
-
partialBuffer = '';
|
15
|
-
streamTimeout = null;
|
16
|
-
lastStreamActivity = 0;
|
17
|
-
constructor(apiKey, settings) {
|
18
|
-
// Initialize with Fireworks API endpoint
|
19
|
-
super(apiKey, 'https://api.fireworks.ai/inference/v1', settings);
|
20
|
-
// Set the default model for Qwen3
|
21
|
-
this.setModel('accounts/fireworks/models/qwen3-235b-a22b');
|
22
|
-
}
|
23
|
-
/**
|
24
|
-
* Override to return Qwen3-specific models
|
25
|
-
*/
|
26
|
-
async getModels() {
|
27
|
-
return [
|
28
|
-
{
|
29
|
-
id: 'accounts/fireworks/models/qwen3-235b-a22b',
|
30
|
-
name: 'Qwen3 235B',
|
31
|
-
provider: this.name,
|
32
|
-
supportedToolFormats: ['openai'], // Fireworks uses OpenAI format
|
33
|
-
},
|
34
|
-
];
|
35
|
-
}
|
36
|
-
/**
|
37
|
-
* Override generateChatCompletion to handle Qwen3-specific content cleaning
|
38
|
-
*/
|
39
|
-
async *generateChatCompletion(messages, tools, toolFormat) {
|
40
|
-
// Debug logging to see what messages Qwen3 receives
|
41
|
-
console.log('[Qwen3FireworksProvider] Received messages:', JSON.stringify(messages, null, 2));
|
42
|
-
console.log('[Qwen3FireworksProvider] Number of messages:', messages.length);
|
43
|
-
// Log tool messages specifically
|
44
|
-
const toolMessages = messages.filter((m) => m.role === 'tool');
|
45
|
-
if (toolMessages.length > 0) {
|
46
|
-
console.log('[Qwen3FireworksProvider] Tool messages found:', toolMessages.length);
|
47
|
-
toolMessages.forEach((msg, idx) => {
|
48
|
-
console.log(`[Qwen3FireworksProvider] Tool message ${idx}:`, {
|
49
|
-
tool_call_id: msg.tool_call_id,
|
50
|
-
tool_name: msg.tool_name,
|
51
|
-
content_length: msg.content?.length || 0,
|
52
|
-
content_preview: msg.content?.substring(0, 100),
|
53
|
-
});
|
54
|
-
});
|
55
|
-
}
|
56
|
-
// Clean messages before sending
|
57
|
-
const cleanedMessages = messages.map((msg) => ({
|
58
|
-
...msg,
|
59
|
-
content: msg.content ? this.cleanQwen3Content(msg.content) : msg.content,
|
60
|
-
}));
|
61
|
-
// Reset buffer for new conversation
|
62
|
-
this.partialBuffer = '';
|
63
|
-
this.lastStreamActivity = Date.now();
|
64
|
-
// Clear any existing timeout
|
65
|
-
if (this.streamTimeout) {
|
66
|
-
clearTimeout(this.streamTimeout);
|
67
|
-
this.streamTimeout = null;
|
68
|
-
}
|
69
|
-
// Use parent's implementation with enhanced cleaning
|
70
|
-
let accumulatedContent = '';
|
71
|
-
let lastYieldedLength = 0;
|
72
|
-
try {
|
73
|
-
for await (const message of super.generateChatCompletion(cleanedMessages, tools, toolFormat)) {
|
74
|
-
// Update activity timestamp
|
75
|
-
this.lastStreamActivity = Date.now();
|
76
|
-
// Handle content messages
|
77
|
-
if (message.content !== undefined) {
|
78
|
-
// Accumulate content
|
79
|
-
accumulatedContent += message.content;
|
80
|
-
// Clean and yield new content
|
81
|
-
const newContent = accumulatedContent.slice(lastYieldedLength);
|
82
|
-
const cleaned = this.cleanQwen3Content(newContent);
|
83
|
-
if (cleaned) {
|
84
|
-
yield {
|
85
|
-
role: ContentGeneratorRole.ASSISTANT,
|
86
|
-
content: cleaned,
|
87
|
-
};
|
88
|
-
lastYieldedLength = accumulatedContent.length;
|
89
|
-
}
|
90
|
-
}
|
91
|
-
else {
|
92
|
-
// Pass through non-content messages (tool calls, etc.)
|
93
|
-
// But check if it's a valid tool call first
|
94
|
-
if (message.tool_calls && Array.isArray(message.tool_calls)) {
|
95
|
-
// Validate each tool call has required fields
|
96
|
-
const validToolCalls = message.tool_calls.filter((tc) => tc && tc.function && tc.function.name && tc.function.arguments);
|
97
|
-
if (validToolCalls.length > 0) {
|
98
|
-
yield {
|
99
|
-
...message,
|
100
|
-
tool_calls: validToolCalls,
|
101
|
-
};
|
102
|
-
}
|
103
|
-
}
|
104
|
-
else {
|
105
|
-
yield message;
|
106
|
-
}
|
107
|
-
}
|
108
|
-
}
|
109
|
-
}
|
110
|
-
catch (error) {
|
111
|
-
// Log the error but don't throw - Qwen3 sometimes cuts off mid-stream
|
112
|
-
console.error('[Qwen3FireworksProvider] Stream error:', error);
|
113
|
-
// If we have accumulated content, try to salvage what we can
|
114
|
-
if (accumulatedContent && lastYieldedLength < accumulatedContent.length) {
|
115
|
-
const remaining = accumulatedContent.slice(lastYieldedLength);
|
116
|
-
const cleaned = this.cleanQwen3Content(remaining);
|
117
|
-
if (cleaned) {
|
118
|
-
yield {
|
119
|
-
role: ContentGeneratorRole.ASSISTANT,
|
120
|
-
content: cleaned,
|
121
|
-
};
|
122
|
-
}
|
123
|
-
}
|
124
|
-
}
|
125
|
-
finally {
|
126
|
-
// Clear timeout
|
127
|
-
if (this.streamTimeout) {
|
128
|
-
clearTimeout(this.streamTimeout);
|
129
|
-
this.streamTimeout = null;
|
130
|
-
}
|
131
|
-
}
|
132
|
-
// Final cleanup
|
133
|
-
if (accumulatedContent && lastYieldedLength < accumulatedContent.length) {
|
134
|
-
const finalContent = accumulatedContent.slice(lastYieldedLength);
|
135
|
-
const finalCleaned = this.cleanQwen3Content(finalContent);
|
136
|
-
if (finalCleaned) {
|
137
|
-
yield {
|
138
|
-
role: ContentGeneratorRole.ASSISTANT,
|
139
|
-
content: finalCleaned,
|
140
|
-
};
|
141
|
-
}
|
142
|
-
}
|
143
|
-
}
|
144
|
-
/**
|
145
|
-
* Enhanced Qwen3 content cleaning
|
146
|
-
*/
|
147
|
-
cleanQwen3Content(content) {
|
148
|
-
let cleaned = content;
|
149
|
-
// Remove Qwen3 control tokens with any role
|
150
|
-
cleaned = cleaned.replace(/<\|im_start\|>\w+\n?/g, '');
|
151
|
-
cleaned = cleaned.replace(/<\|im_end\|>/g, '');
|
152
|
-
// Remove special function tokens
|
153
|
-
cleaned = cleaned.replace(/<\|reserved_special_token_\d+\|>/g, '');
|
154
|
-
// Fix missing spaces between words (common Qwen3 issue)
|
155
|
-
// This regex looks for lowercase letter followed by uppercase letter with no space
|
156
|
-
cleaned = cleaned.replace(/([a-z])([A-Z])/g, '$1 $2');
|
157
|
-
// Fix common concatenation patterns
|
158
|
-
cleaned = cleaned.replace(/(\w)([,.])\s*(\w)/g, '$1$2 $3');
|
159
|
-
// Keep <think> tags visible by default - useful for debugging
|
160
|
-
// cleaned = cleaned.replace(/<think>[\s\S]*?<\/think>/g, '');
|
161
|
-
// Remove incomplete/truncated tool calls
|
162
|
-
// Match tool_call with incomplete JSON or cut off mid-stream
|
163
|
-
cleaned = cleaned.replace(/<tool_call>\s*\{[^}]*$/gm, '');
|
164
|
-
cleaned = cleaned.replace(/<tool_call>[\s\S]*?(?:<\/tool_call>|$)/g, (match) => {
|
165
|
-
// Only keep if it's a complete tool call with closing tag
|
166
|
-
if (match.includes('</tool_call>')) {
|
167
|
-
return match;
|
168
|
-
}
|
169
|
-
return '';
|
170
|
-
});
|
171
|
-
// Fix malformed tool calls
|
172
|
-
cleaned = cleaned.replace(/<tool_call>\s*{/g, '<tool_call>{');
|
173
|
-
cleaned = cleaned.replace(/}\s*<\/tool_call>/g, '}</tool_call>');
|
174
|
-
// Remove duplicate tool call attempts
|
175
|
-
cleaned = cleaned.replace(/(<tool_call>.*?<\/tool_call>)\s*\1/g, '$1');
|
176
|
-
// Remove tool call JSON fragments that appear outside of tags
|
177
|
-
// Pattern: {"name": ... but not within <tool_call> tags
|
178
|
-
cleaned = cleaned.replace(/(?<!<tool_call>)\s*\{"name"\s*:\s*"[^"]*"\s*,?\s*"arguments"\s*:\s*\{[^}]*$/gm, '');
|
179
|
-
// Clean up extra whitespace and newlines
|
180
|
-
cleaned = cleaned.replace(/\s+/g, ' ');
|
181
|
-
cleaned = cleaned.replace(/\n{3,}/g, '\n\n');
|
182
|
-
return cleaned.trim();
|
183
|
-
}
|
184
|
-
/**
|
185
|
-
* Override model setting to ensure we use the correct Qwen3 model
|
186
|
-
*/
|
187
|
-
setModel(modelId) {
|
188
|
-
// Always use the full Qwen3 model path
|
189
|
-
if (!modelId.includes('qwen3')) {
|
190
|
-
super.setModel('accounts/fireworks/models/qwen3-235b-a22b');
|
191
|
-
}
|
192
|
-
else {
|
193
|
-
super.setModel(modelId);
|
194
|
-
}
|
195
|
-
}
|
196
|
-
/**
|
197
|
-
* Check if API key is set (required for Fireworks)
|
198
|
-
*/
|
199
|
-
isConfigured() {
|
200
|
-
try {
|
201
|
-
// The parent class will throw if no API key
|
202
|
-
return true;
|
203
|
-
}
|
204
|
-
catch {
|
205
|
-
return false;
|
206
|
-
}
|
207
|
-
}
|
208
|
-
}
|
209
|
-
//# sourceMappingURL=Qwen3FireworksProvider.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"Qwen3FireworksProvider.js","sourceRoot":"","sources":["../../../../src/providers/openai/Qwen3FireworksProvider.ts"],"names":[],"mappings":"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"}
|
@@ -1,14 +0,0 @@
|
|
1
|
-
export const RESPONSES_API_MODELS = [
|
2
|
-
'gpt-4o',
|
3
|
-
'gpt-4o-mini',
|
4
|
-
'gpt-4o-realtime',
|
5
|
-
'gpt-4-turbo',
|
6
|
-
'gpt-4-turbo-preview',
|
7
|
-
'o3-pro',
|
8
|
-
'o3',
|
9
|
-
'o3-mini',
|
10
|
-
'o1',
|
11
|
-
'o1-mini',
|
12
|
-
'gpt-4.1',
|
13
|
-
];
|
14
|
-
//# sourceMappingURL=RESPONSES_API_MODELS.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"RESPONSES_API_MODELS.js","sourceRoot":"","sources":["../../../../src/providers/openai/RESPONSES_API_MODELS.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,QAAQ;IACR,aAAa;IACb,iBAAiB;IACjB,aAAa;IACb,qBAAqB;IACrB,QAAQ;IACR,IAAI;IACJ,SAAS;IACT,IAAI;IACJ,SAAS;IACT,SAAS;CACD,CAAC"}
|
@@ -1,67 +0,0 @@
|
|
1
|
-
import { IMessage } from '../IMessage.js';
|
2
|
-
import { ITool } from '../ITool.js';
|
3
|
-
import { ResponsesTool } from '../../tools/IToolFormatter.js';
|
4
|
-
export interface ResponsesRequestParams {
|
5
|
-
messages?: IMessage[];
|
6
|
-
prompt?: string;
|
7
|
-
tools?: ITool[] | ResponsesTool[];
|
8
|
-
stream?: boolean;
|
9
|
-
conversationId?: string;
|
10
|
-
parentId?: string;
|
11
|
-
tool_choice?: string | object;
|
12
|
-
stateful?: boolean;
|
13
|
-
model?: string;
|
14
|
-
temperature?: number;
|
15
|
-
max_tokens?: number;
|
16
|
-
top_p?: number;
|
17
|
-
frequency_penalty?: number;
|
18
|
-
presence_penalty?: number;
|
19
|
-
stop?: string | string[];
|
20
|
-
n?: number;
|
21
|
-
logprobs?: boolean;
|
22
|
-
top_logprobs?: number;
|
23
|
-
response_format?: object;
|
24
|
-
seed?: number;
|
25
|
-
logit_bias?: Record<string, number>;
|
26
|
-
user?: string;
|
27
|
-
}
|
28
|
-
type ResponsesMessage = {
|
29
|
-
role: 'assistant' | 'system' | 'developer' | 'user';
|
30
|
-
content: string;
|
31
|
-
usage?: {
|
32
|
-
prompt_tokens?: number;
|
33
|
-
completion_tokens?: number;
|
34
|
-
total_tokens?: number;
|
35
|
-
};
|
36
|
-
} | FunctionCallOutput;
|
37
|
-
type FunctionCallOutput = {
|
38
|
-
type: 'function_call_output';
|
39
|
-
call_id: string;
|
40
|
-
output: string;
|
41
|
-
};
|
42
|
-
export interface ResponsesRequest {
|
43
|
-
model: string;
|
44
|
-
input?: ResponsesMessage[];
|
45
|
-
prompt?: string;
|
46
|
-
tools?: ResponsesTool[];
|
47
|
-
stream?: boolean;
|
48
|
-
previous_response_id?: string;
|
49
|
-
store?: boolean;
|
50
|
-
tool_choice?: string | object;
|
51
|
-
stateful?: boolean;
|
52
|
-
temperature?: number;
|
53
|
-
max_tokens?: number;
|
54
|
-
top_p?: number;
|
55
|
-
frequency_penalty?: number;
|
56
|
-
presence_penalty?: number;
|
57
|
-
stop?: string | string[];
|
58
|
-
n?: number;
|
59
|
-
logprobs?: boolean;
|
60
|
-
top_logprobs?: number;
|
61
|
-
response_format?: object;
|
62
|
-
seed?: number;
|
63
|
-
logit_bias?: Record<string, number>;
|
64
|
-
user?: string;
|
65
|
-
}
|
66
|
-
export declare function buildResponsesRequest(params: ResponsesRequestParams): ResponsesRequest;
|
67
|
-
export {};
|
@@ -1,144 +0,0 @@
|
|
1
|
-
const MAX_TOOLS = 16;
|
2
|
-
const MAX_JSON_SIZE_KB = 32;
|
3
|
-
export function buildResponsesRequest(params) {
|
4
|
-
const { messages, prompt, tools, conversationId, parentId, tool_choice, stateful, model, ...otherParams } = params;
|
5
|
-
// Validate prompt/messages ambiguity
|
6
|
-
if (prompt && messages && messages.length > 0) {
|
7
|
-
throw new Error('Cannot specify both "prompt" and "messages". Use either prompt (for simple queries) or messages (for conversation history).');
|
8
|
-
}
|
9
|
-
// Validate required fields
|
10
|
-
if (!prompt && (!messages || messages.length === 0)) {
|
11
|
-
throw new Error('Either "prompt" or "messages" must be provided.');
|
12
|
-
}
|
13
|
-
if (!model) {
|
14
|
-
throw new Error('Model is required for Responses API.');
|
15
|
-
}
|
16
|
-
// Validate tools limit
|
17
|
-
if (tools && tools.length > MAX_TOOLS) {
|
18
|
-
throw new Error(`Too many tools provided. Maximum allowed is ${MAX_TOOLS}, but ${tools.length} were provided.`);
|
19
|
-
}
|
20
|
-
// Validate JSON size for tools
|
21
|
-
if (tools) {
|
22
|
-
const toolsJson = JSON.stringify(tools);
|
23
|
-
const sizeKb = new TextEncoder().encode(toolsJson).length / 1024;
|
24
|
-
if (sizeKb > MAX_JSON_SIZE_KB) {
|
25
|
-
throw new Error(`Tools JSON size exceeds ${MAX_JSON_SIZE_KB}KB limit. Current size: ${sizeKb.toFixed(2)}KB`);
|
26
|
-
}
|
27
|
-
}
|
28
|
-
// Handle message trimming for stateful mode
|
29
|
-
let processedMessages = messages;
|
30
|
-
if (messages && conversationId) {
|
31
|
-
// For stateful mode, we need to be smarter about trimming to preserve tool call/response pairs
|
32
|
-
if (messages.length > 2) {
|
33
|
-
// Find the last complete interaction (user message -> assistant response/tool calls -> tool responses -> user message)
|
34
|
-
let startIndex = messages.length - 1;
|
35
|
-
// Work backwards to find a complete interaction
|
36
|
-
while (startIndex > 0) {
|
37
|
-
const msg = messages[startIndex];
|
38
|
-
// If we find a tool message, we need to include the assistant message with the tool call
|
39
|
-
if (msg.role === 'tool') {
|
40
|
-
// Find the assistant message that contains this tool call
|
41
|
-
for (let i = startIndex - 1; i >= 0; i--) {
|
42
|
-
const prevMsg = messages[i];
|
43
|
-
if (prevMsg.role === 'assistant' && prevMsg.tool_calls) {
|
44
|
-
// Check if this assistant message contains the tool call for our tool response
|
45
|
-
const hasMatchingCall = prevMsg.tool_calls.some((call) => call.id === msg.tool_call_id);
|
46
|
-
if (hasMatchingCall) {
|
47
|
-
startIndex = i;
|
48
|
-
break;
|
49
|
-
}
|
50
|
-
}
|
51
|
-
}
|
52
|
-
}
|
53
|
-
// If we find a user message after going through tool responses, this is a good starting point
|
54
|
-
if (msg.role === 'user' && startIndex < messages.length - 1) {
|
55
|
-
break;
|
56
|
-
}
|
57
|
-
startIndex--;
|
58
|
-
}
|
59
|
-
// Ensure we don't trim too aggressively
|
60
|
-
startIndex = Math.max(0, Math.min(startIndex, messages.length - 2));
|
61
|
-
processedMessages = messages.slice(startIndex);
|
62
|
-
}
|
63
|
-
}
|
64
|
-
// Transform messages for Responses API format
|
65
|
-
let transformedMessages;
|
66
|
-
const functionCallOutputs = [];
|
67
|
-
if (processedMessages) {
|
68
|
-
// First, extract function call outputs from tool messages
|
69
|
-
processedMessages
|
70
|
-
.filter((msg) => msg !== undefined && msg !== null)
|
71
|
-
.forEach((msg) => {
|
72
|
-
if (msg.role === 'tool' && msg.tool_call_id && msg.content) {
|
73
|
-
functionCallOutputs.push({
|
74
|
-
type: 'function_call_output',
|
75
|
-
call_id: msg.tool_call_id,
|
76
|
-
output: msg.content,
|
77
|
-
});
|
78
|
-
}
|
79
|
-
});
|
80
|
-
// Then, create the regular messages array (excluding tool messages)
|
81
|
-
transformedMessages = processedMessages
|
82
|
-
.filter((msg) => msg !== undefined && msg !== null)
|
83
|
-
.filter((msg) => msg.role !== 'tool') // Exclude tool messages
|
84
|
-
.map((msg) => {
|
85
|
-
// Remove tool_calls field as it's not accepted by Responses API
|
86
|
-
const { tool_calls: _tool_calls, tool_call_id: _tool_call_id, usage, ...cleanMsg } = msg;
|
87
|
-
// Ensure role is valid for Responses API
|
88
|
-
const validRole = cleanMsg.role;
|
89
|
-
return {
|
90
|
-
role: validRole,
|
91
|
-
content: cleanMsg.content,
|
92
|
-
...(usage ? { usage } : {}), // Preserve usage data if present
|
93
|
-
};
|
94
|
-
})
|
95
|
-
.filter((msg) => msg !== null);
|
96
|
-
}
|
97
|
-
// Build the request object with conditional fields
|
98
|
-
const request = {
|
99
|
-
model,
|
100
|
-
...otherParams,
|
101
|
-
...(prompt ? { prompt } : {}),
|
102
|
-
};
|
103
|
-
// Add input array if we have messages or function call outputs
|
104
|
-
if (transformedMessages || functionCallOutputs.length > 0) {
|
105
|
-
const inputItems = [];
|
106
|
-
// Add regular messages
|
107
|
-
if (transformedMessages) {
|
108
|
-
inputItems.push(...transformedMessages);
|
109
|
-
}
|
110
|
-
// Add function call outputs
|
111
|
-
if (functionCallOutputs.length > 0) {
|
112
|
-
inputItems.push(...functionCallOutputs);
|
113
|
-
}
|
114
|
-
request.input = inputItems;
|
115
|
-
}
|
116
|
-
// Map conversation fields
|
117
|
-
if (model) {
|
118
|
-
if (conversationId) {
|
119
|
-
// Note: The API uses previous_response_id, not a conversation_id.
|
120
|
-
// We are mapping our internal parentId to this field.
|
121
|
-
if (parentId) {
|
122
|
-
request.previous_response_id = parentId;
|
123
|
-
request.store = true;
|
124
|
-
}
|
125
|
-
}
|
126
|
-
}
|
127
|
-
// Add tools if provided
|
128
|
-
if (tools && tools.length > 0) {
|
129
|
-
request.tools = tools;
|
130
|
-
if (tool_choice) {
|
131
|
-
request.tool_choice = tool_choice;
|
132
|
-
}
|
133
|
-
}
|
134
|
-
// Add stateful flag if provided
|
135
|
-
if (stateful !== undefined) {
|
136
|
-
request.stateful = stateful;
|
137
|
-
}
|
138
|
-
// Add stream flag if provided
|
139
|
-
if (params.stream !== undefined) {
|
140
|
-
request.stream = params.stream;
|
141
|
-
}
|
142
|
-
return request;
|
143
|
-
}
|
144
|
-
//# sourceMappingURL=buildResponsesRequest.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"buildResponsesRequest.js","sourceRoot":"","sources":["../../../../src/providers/openai/buildResponsesRequest.ts"],"names":[],"mappings":"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"}
|
@@ -1,172 +0,0 @@
|
|
1
|
-
# Accessing OpenAI Provider Information
|
2
|
-
|
3
|
-
This document explains how to access the OpenAI provider instance, conversation cache, and remote token information from within the React components.
|
4
|
-
|
5
|
-
## Overview
|
6
|
-
|
7
|
-
The OpenAI provider information can be accessed through the Config object that's passed to the App component. We've created utilities to make this access type-safe and convenient.
|
8
|
-
|
9
|
-
## Key Components
|
10
|
-
|
11
|
-
### 1. `getOpenAIProviderInfo()` Function
|
12
|
-
|
13
|
-
Located in `src/providers/openai/getOpenAIProviderInfo.ts`, this function extracts OpenAI provider information from the Config object:
|
14
|
-
|
15
|
-
```typescript
|
16
|
-
import { getOpenAIProviderInfo } from '../../providers/openai/getOpenAIProviderInfo.js';
|
17
|
-
|
18
|
-
// In your component
|
19
|
-
const openAIInfo = getOpenAIProviderInfo(config);
|
20
|
-
|
21
|
-
if (openAIInfo.provider) {
|
22
|
-
console.log('OpenAI provider is active');
|
23
|
-
console.log('Current model:', openAIInfo.currentModel);
|
24
|
-
console.log('Using Responses API:', openAIInfo.isResponsesAPI);
|
25
|
-
}
|
26
|
-
```
|
27
|
-
|
28
|
-
### 2. `useOpenAIProviderInfo()` Hook
|
29
|
-
|
30
|
-
Located in `src/ui/hooks/useOpenAIProviderInfo.ts`, this React hook provides reactive access to provider information:
|
31
|
-
|
32
|
-
```typescript
|
33
|
-
import { useOpenAIProviderInfo } from './hooks/useOpenAIProviderInfo.js';
|
34
|
-
|
35
|
-
function MyComponent({ config }) {
|
36
|
-
const openAIInfo = useOpenAIProviderInfo(config);
|
37
|
-
|
38
|
-
// Access conversation cache
|
39
|
-
const cachedMessages = openAIInfo.getCachedConversation(
|
40
|
-
conversationId,
|
41
|
-
parentId,
|
42
|
-
);
|
43
|
-
|
44
|
-
// Check if using Responses API
|
45
|
-
if (openAIInfo.isResponsesAPI) {
|
46
|
-
// Handle Responses API specific logic
|
47
|
-
}
|
48
|
-
}
|
49
|
-
```
|
50
|
-
|
51
|
-
### 3. `OpenAIProviderContext`
|
52
|
-
|
53
|
-
Located in `src/ui/contexts/OpenAIProviderContext.tsx`, this context provides global access to OpenAI provider state including remote token tracking:
|
54
|
-
|
55
|
-
```typescript
|
56
|
-
// Wrap your app
|
57
|
-
<OpenAIProviderContextProvider config={config}>
|
58
|
-
<App {...props} />
|
59
|
-
</OpenAIProviderContextProvider>
|
60
|
-
|
61
|
-
// Use in components
|
62
|
-
import { useOpenAIProviderContext } from '../contexts/OpenAIProviderContext.js';
|
63
|
-
|
64
|
-
function TokenDisplay() {
|
65
|
-
const { remoteTokenStats, isResponsesAPI } = useOpenAIProviderContext();
|
66
|
-
|
67
|
-
if (isResponsesAPI && remoteTokenStats.lastUpdated) {
|
68
|
-
return (
|
69
|
-
<div>
|
70
|
-
Remote Tokens: {remoteTokenStats.totalTokenCount}
|
71
|
-
</div>
|
72
|
-
);
|
73
|
-
}
|
74
|
-
|
75
|
-
return null;
|
76
|
-
}
|
77
|
-
```
|
78
|
-
|
79
|
-
## Integration Example
|
80
|
-
|
81
|
-
Here's how to integrate OpenAI provider information access in the App component:
|
82
|
-
|
83
|
-
```typescript
|
84
|
-
// In App.tsx
|
85
|
-
import { useOpenAIProviderInfo } from './hooks/useOpenAIProviderInfo.js';
|
86
|
-
|
87
|
-
const App = ({ config, settings, startupWarnings = [] }: AppProps) => {
|
88
|
-
// Access OpenAI provider info
|
89
|
-
const openAIInfo = useOpenAIProviderInfo(config);
|
90
|
-
|
91
|
-
// Use in your component logic
|
92
|
-
useEffect(() => {
|
93
|
-
if (openAIInfo.isOpenAIActive && openAIInfo.isResponsesAPI) {
|
94
|
-
console.log(
|
95
|
-
'OpenAI Responses API is active for model:',
|
96
|
-
openAIInfo.currentModel,
|
97
|
-
);
|
98
|
-
}
|
99
|
-
}, [openAIInfo]);
|
100
|
-
|
101
|
-
// Access conversation cache when needed
|
102
|
-
const handleConversationLookup = (
|
103
|
-
conversationId: string,
|
104
|
-
parentId: string,
|
105
|
-
) => {
|
106
|
-
const cached = openAIInfo.getCachedConversation(conversationId, parentId);
|
107
|
-
if (cached) {
|
108
|
-
console.log('Found cached conversation:', cached);
|
109
|
-
}
|
110
|
-
};
|
111
|
-
|
112
|
-
// ... rest of component
|
113
|
-
};
|
114
|
-
```
|
115
|
-
|
116
|
-
## Tracking Remote Tokens
|
117
|
-
|
118
|
-
To track remote tokens from the Responses API, you need to update the token stats when receiving responses:
|
119
|
-
|
120
|
-
```typescript
|
121
|
-
// In your API response handler
|
122
|
-
const handleResponsesAPIResponse = (response: any) => {
|
123
|
-
// Extract token information from response
|
124
|
-
const usage = response.usage;
|
125
|
-
|
126
|
-
if (usage) {
|
127
|
-
// Update remote token stats in context
|
128
|
-
updateRemoteTokenStats({
|
129
|
-
promptTokenCount: usage.prompt_tokens,
|
130
|
-
candidatesTokenCount: usage.completion_tokens,
|
131
|
-
totalTokenCount: usage.total_tokens,
|
132
|
-
});
|
133
|
-
}
|
134
|
-
};
|
135
|
-
```
|
136
|
-
|
137
|
-
## Type Safety
|
138
|
-
|
139
|
-
All interfaces are properly typed:
|
140
|
-
|
141
|
-
```typescript
|
142
|
-
interface OpenAIProviderInfo {
|
143
|
-
provider: OpenAIProvider | null;
|
144
|
-
conversationCache: ConversationCache | null;
|
145
|
-
isResponsesAPI: boolean;
|
146
|
-
currentModel: string | null;
|
147
|
-
remoteTokenInfo: {
|
148
|
-
promptTokenCount?: number;
|
149
|
-
candidatesTokenCount?: number;
|
150
|
-
totalTokenCount?: number;
|
151
|
-
};
|
152
|
-
}
|
153
|
-
```
|
154
|
-
|
155
|
-
## Best Practices
|
156
|
-
|
157
|
-
1. **Check for null values**: Always check if the provider is active before accessing its properties
|
158
|
-
2. **Use the hook in components**: Prefer `useOpenAIProviderInfo` hook over direct function calls for reactive updates
|
159
|
-
3. **Context for global state**: Use `OpenAIProviderContext` when you need to share provider state across multiple components
|
160
|
-
4. **Handle provider switches**: The utilities automatically handle when users switch between providers
|
161
|
-
|
162
|
-
## Accessing Internal Properties
|
163
|
-
|
164
|
-
Since some properties of OpenAIProvider are private, we use type casting to access them:
|
165
|
-
|
166
|
-
```typescript
|
167
|
-
// Access private properties (use with caution)
|
168
|
-
const conversationCache = (openaiProvider as any).conversationCache;
|
169
|
-
const shouldUseResponses = (openaiProvider as any).shouldUseResponses;
|
170
|
-
```
|
171
|
-
|
172
|
-
This approach provides type safety where possible while still allowing access to necessary internal state.
|