@sashabogi/foundation 0.1.5 → 0.1.7
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/cli/setup-wizard.d.ts +30 -0
- package/dist/cli/setup-wizard.d.ts.map +1 -0
- package/dist/cli/setup-wizard.js +1645 -0
- package/dist/cli/setup-wizard.js.map +1 -0
- package/dist/cli/test-connection.d.ts +76 -0
- package/dist/cli/test-connection.d.ts.map +1 -0
- package/dist/cli/test-connection.js +697 -0
- package/dist/cli/test-connection.js.map +1 -0
- package/dist/cli.d.ts +3 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +133 -5
- package/dist/cli.js.map +1 -1
- package/dist/providers/anthropic.d.ts +178 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +514 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/base.d.ts +154 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +227 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/deepseek.d.ts +23 -0
- package/dist/providers/deepseek.d.ts.map +1 -0
- package/dist/providers/deepseek.js +31 -0
- package/dist/providers/deepseek.js.map +1 -0
- package/dist/providers/fireworks.d.ts +23 -0
- package/dist/providers/fireworks.d.ts.map +1 -0
- package/dist/providers/fireworks.js +31 -0
- package/dist/providers/fireworks.js.map +1 -0
- package/dist/providers/gemini.d.ts +85 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +414 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/groq.d.ts +23 -0
- package/dist/providers/groq.d.ts.map +1 -0
- package/dist/providers/groq.js +31 -0
- package/dist/providers/groq.js.map +1 -0
- package/dist/providers/index.d.ts +23 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +27 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/kimi-code.d.ts +32 -0
- package/dist/providers/kimi-code.d.ts.map +1 -0
- package/dist/providers/kimi-code.js +46 -0
- package/dist/providers/kimi-code.js.map +1 -0
- package/dist/providers/kimi.d.ts +19 -0
- package/dist/providers/kimi.d.ts.map +1 -0
- package/dist/providers/kimi.js +27 -0
- package/dist/providers/kimi.js.map +1 -0
- package/dist/providers/manager.d.ts +144 -0
- package/dist/providers/manager.d.ts.map +1 -0
- package/dist/providers/manager.js +279 -0
- package/dist/providers/manager.js.map +1 -0
- package/dist/providers/ollama.d.ts +83 -0
- package/dist/providers/ollama.d.ts.map +1 -0
- package/dist/providers/ollama.js +450 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/openai.d.ts +91 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +445 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/openrouter.d.ts +23 -0
- package/dist/providers/openrouter.d.ts.map +1 -0
- package/dist/providers/openrouter.js +31 -0
- package/dist/providers/openrouter.js.map +1 -0
- package/dist/providers/perplexity.d.ts +34 -0
- package/dist/providers/perplexity.d.ts.map +1 -0
- package/dist/providers/perplexity.js +58 -0
- package/dist/providers/perplexity.js.map +1 -0
- package/dist/providers/together.d.ts +23 -0
- package/dist/providers/together.d.ts.map +1 -0
- package/dist/providers/together.js +31 -0
- package/dist/providers/together.js.map +1 -0
- package/dist/providers/types.d.ts +229 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +73 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/providers/zai.d.ts +19 -0
- package/dist/providers/zai.d.ts.map +1 -0
- package/dist/providers/zai.js +27 -0
- package/dist/providers/zai.js.map +1 -0
- package/dist/services/provider.service.d.ts +28 -0
- package/dist/services/provider.service.d.ts.map +1 -1
- package/dist/services/provider.service.js +137 -13
- package/dist/services/provider.service.js.map +1 -1
- package/dist/tools/demerzel/engine.d.ts +67 -0
- package/dist/tools/demerzel/engine.d.ts.map +1 -0
- package/dist/tools/demerzel/engine.js +401 -0
- package/dist/tools/demerzel/engine.js.map +1 -0
- package/dist/tools/demerzel/enhanced-snapshot.d.ts +67 -0
- package/dist/tools/demerzel/enhanced-snapshot.d.ts.map +1 -0
- package/dist/tools/demerzel/enhanced-snapshot.js +481 -0
- package/dist/tools/demerzel/enhanced-snapshot.js.map +1 -0
- package/dist/tools/demerzel/index.d.ts +11 -0
- package/dist/tools/demerzel/index.d.ts.map +1 -1
- package/dist/tools/demerzel/index.js +656 -85
- package/dist/tools/demerzel/index.js.map +1 -1
- package/dist/tools/demerzel/prompts.d.ts +26 -0
- package/dist/tools/demerzel/prompts.d.ts.map +1 -0
- package/dist/tools/demerzel/prompts.js +181 -0
- package/dist/tools/demerzel/prompts.js.map +1 -0
- package/dist/tools/demerzel/semantic-search.d.ts +54 -0
- package/dist/tools/demerzel/semantic-search.d.ts.map +1 -0
- package/dist/tools/demerzel/semantic-search.js +205 -0
- package/dist/tools/demerzel/semantic-search.js.map +1 -0
- package/dist/tools/demerzel/snapshot.d.ts +30 -0
- package/dist/tools/demerzel/snapshot.d.ts.map +1 -0
- package/dist/tools/demerzel/snapshot.js +169 -0
- package/dist/tools/demerzel/snapshot.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Gemini Provider Implementation
|
|
3
|
+
*
|
|
4
|
+
* Provider adapter for the Google Gemini API (Generative Language API).
|
|
5
|
+
* Handles message formatting, streaming, and tool use for Gemini models.
|
|
6
|
+
*
|
|
7
|
+
* Key differences from Anthropic format:
|
|
8
|
+
* - Messages use "contents" array with "parts" instead of "content"
|
|
9
|
+
* - System prompt is a separate "systemInstruction" field
|
|
10
|
+
* - Tool schemas use "parameters" (OpenAI style) in function declarations
|
|
11
|
+
* - Tool calls return "functionCall" parts, results use "functionResponse" parts
|
|
12
|
+
* - Auth via API key query param or Authorization header
|
|
13
|
+
*/
|
|
14
|
+
import { BaseProvider } from './base.js';
|
|
15
|
+
// ============================================================================
|
|
16
|
+
// Gemini Provider Implementation
|
|
17
|
+
// ============================================================================
|
|
18
|
+
/**
|
|
19
|
+
* Google Gemini API provider adapter.
|
|
20
|
+
*
|
|
21
|
+
* Implements the Provider interface for Google's Gemini models.
|
|
22
|
+
* Handles:
|
|
23
|
+
* - Message format translation (our format -> Gemini format)
|
|
24
|
+
* - Streaming SSE event parsing
|
|
25
|
+
* - Tool use / function calling
|
|
26
|
+
* - Authentication via API key
|
|
27
|
+
*/
|
|
28
|
+
export class GeminiProvider extends BaseProvider {
|
|
29
|
+
name = 'google';
|
|
30
|
+
static DEFAULT_BASE_URL = 'https://generativelanguage.googleapis.com/v1beta';
|
|
31
|
+
/** Default max tokens if not specified in request */
|
|
32
|
+
static DEFAULT_MAX_TOKENS = 4096;
|
|
33
|
+
constructor(config) {
|
|
34
|
+
super(config);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Build the full API URL with model and action.
|
|
38
|
+
* Gemini uses URL path for model selection and action.
|
|
39
|
+
*
|
|
40
|
+
* @param model - Model identifier
|
|
41
|
+
* @param action - API action (generateContent, streamGenerateContent)
|
|
42
|
+
* @returns Full API URL
|
|
43
|
+
*/
|
|
44
|
+
buildUrl(model, action) {
|
|
45
|
+
const baseUrl = this.getBaseUrl(GeminiProvider.DEFAULT_BASE_URL);
|
|
46
|
+
const url = `${baseUrl}/models/${model}:${action}`;
|
|
47
|
+
// Gemini supports API key as query parameter
|
|
48
|
+
if (this.config.api_key) {
|
|
49
|
+
return `${url}?key=${this.config.api_key}`;
|
|
50
|
+
}
|
|
51
|
+
return url;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Build headers for Gemini API requests.
|
|
55
|
+
* Uses Bearer token if API key is provided (alternative to query param).
|
|
56
|
+
*/
|
|
57
|
+
buildHeaders() {
|
|
58
|
+
const headers = {
|
|
59
|
+
'Content-Type': 'application/json',
|
|
60
|
+
};
|
|
61
|
+
// Gemini also supports Authorization header (alternative to query param)
|
|
62
|
+
// We use query param by default, but support Bearer if explicitly configured
|
|
63
|
+
if (this.config.headers?.['Authorization']) {
|
|
64
|
+
headers['Authorization'] = this.config.headers['Authorization'];
|
|
65
|
+
}
|
|
66
|
+
// Add any custom headers from config
|
|
67
|
+
if (this.config.headers) {
|
|
68
|
+
Object.assign(headers, this.config.headers);
|
|
69
|
+
}
|
|
70
|
+
return headers;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Execute a completion request and return the full response.
|
|
74
|
+
*/
|
|
75
|
+
async complete(request) {
|
|
76
|
+
const url = this.buildUrl(request.model, 'generateContent');
|
|
77
|
+
const geminiRequest = this.translateRequest(request);
|
|
78
|
+
const response = await this.makeRequest({
|
|
79
|
+
method: 'POST',
|
|
80
|
+
url,
|
|
81
|
+
headers: this.buildHeaders(),
|
|
82
|
+
body: geminiRequest,
|
|
83
|
+
timeoutMs: request.timeout_ms ?? this.defaultTimeoutMs,
|
|
84
|
+
});
|
|
85
|
+
return this.translateResponse(response, request.model);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Execute a streaming completion request.
|
|
89
|
+
*/
|
|
90
|
+
async *completeStream(request) {
|
|
91
|
+
// Gemini uses streamGenerateContent endpoint with alt=sse query param
|
|
92
|
+
let url = this.buildUrl(request.model, 'streamGenerateContent');
|
|
93
|
+
// Add alt=sse for server-sent events format
|
|
94
|
+
url += url.includes('?') ? '&alt=sse' : '?alt=sse';
|
|
95
|
+
const geminiRequest = this.translateRequest(request);
|
|
96
|
+
const response = await this.makeStreamingRequest({
|
|
97
|
+
method: 'POST',
|
|
98
|
+
url,
|
|
99
|
+
headers: this.buildHeaders(),
|
|
100
|
+
body: geminiRequest,
|
|
101
|
+
timeoutMs: request.timeout_ms ?? this.defaultTimeoutMs,
|
|
102
|
+
stream: true,
|
|
103
|
+
});
|
|
104
|
+
if (!response.body) {
|
|
105
|
+
throw new Error('No response body for streaming request');
|
|
106
|
+
}
|
|
107
|
+
// Track state for content block management
|
|
108
|
+
let hasStartedContent = false;
|
|
109
|
+
let currentToolCallIndex = 0;
|
|
110
|
+
const activeToolCalls = new Map();
|
|
111
|
+
const reader = response.body.getReader();
|
|
112
|
+
const decoder = new TextDecoder();
|
|
113
|
+
let buffer = '';
|
|
114
|
+
try {
|
|
115
|
+
while (true) {
|
|
116
|
+
const { done, value } = await reader.read();
|
|
117
|
+
if (done) {
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
buffer += decoder.decode(value, { stream: true });
|
|
121
|
+
// Process complete SSE events
|
|
122
|
+
const lines = buffer.split('\n');
|
|
123
|
+
buffer = lines.pop() || '';
|
|
124
|
+
for (const line of lines) {
|
|
125
|
+
const trimmed = line.trim();
|
|
126
|
+
if (!trimmed || trimmed === 'data: [DONE]') {
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
if (trimmed.startsWith('data: ')) {
|
|
130
|
+
const jsonStr = trimmed.slice(6);
|
|
131
|
+
try {
|
|
132
|
+
const chunk = JSON.parse(jsonStr);
|
|
133
|
+
const chunks = this.translateStreamChunk(chunk, hasStartedContent, currentToolCallIndex, activeToolCalls);
|
|
134
|
+
for (const streamChunk of chunks) {
|
|
135
|
+
// Track state for content block management
|
|
136
|
+
if (streamChunk.type === 'content_block_start' &&
|
|
137
|
+
streamChunk.content_block?.type === 'text') {
|
|
138
|
+
hasStartedContent = true;
|
|
139
|
+
}
|
|
140
|
+
if (streamChunk.type === 'content_block_start' &&
|
|
141
|
+
streamChunk.content_block?.type === 'tool_use') {
|
|
142
|
+
currentToolCallIndex++;
|
|
143
|
+
}
|
|
144
|
+
yield streamChunk;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
// Skip malformed JSON chunks
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
finally {
|
|
155
|
+
reader.releaseLock();
|
|
156
|
+
}
|
|
157
|
+
// Emit message_stop at the end
|
|
158
|
+
yield { type: 'message_stop' };
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Check if the Gemini API is available and credentials are valid.
|
|
162
|
+
*/
|
|
163
|
+
async healthCheck() {
|
|
164
|
+
// List models endpoint to verify API key
|
|
165
|
+
const baseUrl = this.getBaseUrl(GeminiProvider.DEFAULT_BASE_URL);
|
|
166
|
+
let url = `${baseUrl}/models`;
|
|
167
|
+
if (this.config.api_key) {
|
|
168
|
+
url += `?key=${this.config.api_key}`;
|
|
169
|
+
}
|
|
170
|
+
await this.makeRequest({
|
|
171
|
+
method: 'GET',
|
|
172
|
+
url,
|
|
173
|
+
headers: this.buildHeaders(),
|
|
174
|
+
timeoutMs: 10000,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
// ==========================================================================
|
|
178
|
+
// Translation Methods
|
|
179
|
+
// ==========================================================================
|
|
180
|
+
/**
|
|
181
|
+
* Translate Foundation request to Gemini format.
|
|
182
|
+
*/
|
|
183
|
+
translateRequest(request) {
|
|
184
|
+
const geminiRequest = {
|
|
185
|
+
contents: this.translateMessages(request.messages),
|
|
186
|
+
};
|
|
187
|
+
// Add generation config if any options specified
|
|
188
|
+
const generationConfig = {};
|
|
189
|
+
if (request.temperature !== undefined) {
|
|
190
|
+
generationConfig.temperature = request.temperature;
|
|
191
|
+
}
|
|
192
|
+
if (request.max_tokens !== undefined) {
|
|
193
|
+
generationConfig.maxOutputTokens = request.max_tokens;
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
generationConfig.maxOutputTokens = GeminiProvider.DEFAULT_MAX_TOKENS;
|
|
197
|
+
}
|
|
198
|
+
if (Object.keys(generationConfig).length > 0) {
|
|
199
|
+
geminiRequest.generationConfig = generationConfig;
|
|
200
|
+
}
|
|
201
|
+
// Translate tools if present
|
|
202
|
+
if (request.tools && request.tools.length > 0) {
|
|
203
|
+
geminiRequest.tools = [
|
|
204
|
+
{
|
|
205
|
+
functionDeclarations: this.translateTools(request.tools),
|
|
206
|
+
},
|
|
207
|
+
];
|
|
208
|
+
}
|
|
209
|
+
return geminiRequest;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Translate messages from Foundation format to Gemini format.
|
|
213
|
+
*
|
|
214
|
+
* Key translations:
|
|
215
|
+
* - role: "user" -> "user", role: "assistant" -> "model"
|
|
216
|
+
* - Content blocks become parts
|
|
217
|
+
* - tool_use blocks become functionCall parts
|
|
218
|
+
* - tool_result blocks become functionResponse parts
|
|
219
|
+
*/
|
|
220
|
+
translateMessages(messages) {
|
|
221
|
+
const geminiContents = [];
|
|
222
|
+
for (const message of messages) {
|
|
223
|
+
const role = message.role === 'assistant' ? 'model' : 'user';
|
|
224
|
+
const parts = [];
|
|
225
|
+
if (typeof message.content === 'string') {
|
|
226
|
+
// Simple string content
|
|
227
|
+
parts.push({ text: message.content });
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
// Content blocks - translate each type
|
|
231
|
+
for (const block of message.content) {
|
|
232
|
+
switch (block.type) {
|
|
233
|
+
case 'text':
|
|
234
|
+
if (block.text) {
|
|
235
|
+
parts.push({ text: block.text });
|
|
236
|
+
}
|
|
237
|
+
break;
|
|
238
|
+
case 'tool_use':
|
|
239
|
+
if (block.name) {
|
|
240
|
+
parts.push({
|
|
241
|
+
functionCall: {
|
|
242
|
+
name: block.name,
|
|
243
|
+
args: block.input || {},
|
|
244
|
+
},
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
break;
|
|
248
|
+
case 'tool_result':
|
|
249
|
+
if (block.tool_use_id && block.content) {
|
|
250
|
+
// Gemini expects function name, not ID
|
|
251
|
+
// We need to track tool calls to map IDs to names
|
|
252
|
+
// For now, use the ID as name (caller should ensure consistency)
|
|
253
|
+
parts.push({
|
|
254
|
+
functionResponse: {
|
|
255
|
+
name: block.tool_use_id,
|
|
256
|
+
response: {
|
|
257
|
+
content: block.content,
|
|
258
|
+
},
|
|
259
|
+
},
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
break;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
if (parts.length > 0) {
|
|
267
|
+
geminiContents.push({ role, parts });
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return geminiContents;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Translate tools from Foundation format to Gemini function declarations.
|
|
274
|
+
*/
|
|
275
|
+
translateTools(tools) {
|
|
276
|
+
return tools.map((tool) => ({
|
|
277
|
+
name: tool.name,
|
|
278
|
+
description: tool.description,
|
|
279
|
+
parameters: tool.input_schema,
|
|
280
|
+
}));
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Translate Gemini response to Foundation format.
|
|
284
|
+
*/
|
|
285
|
+
translateResponse(response, model) {
|
|
286
|
+
const candidate = response.candidates?.[0];
|
|
287
|
+
if (!candidate) {
|
|
288
|
+
throw new Error('No candidates in Gemini response');
|
|
289
|
+
}
|
|
290
|
+
const content = [];
|
|
291
|
+
let toolCallCounter = 0;
|
|
292
|
+
// Translate parts to content blocks
|
|
293
|
+
for (const part of candidate.content.parts) {
|
|
294
|
+
if (part.text !== undefined) {
|
|
295
|
+
content.push({
|
|
296
|
+
type: 'text',
|
|
297
|
+
text: part.text,
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
if (part.functionCall) {
|
|
301
|
+
// Generate a unique ID for the tool call
|
|
302
|
+
const toolId = `call_${Date.now()}_${toolCallCounter++}`;
|
|
303
|
+
content.push({
|
|
304
|
+
type: 'tool_use',
|
|
305
|
+
id: toolId,
|
|
306
|
+
name: part.functionCall.name,
|
|
307
|
+
input: part.functionCall.args,
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
// Map Gemini finish reason to Foundation stop_reason
|
|
312
|
+
let stopReason = 'end_turn';
|
|
313
|
+
switch (candidate.finishReason) {
|
|
314
|
+
case 'STOP':
|
|
315
|
+
stopReason = 'end_turn';
|
|
316
|
+
break;
|
|
317
|
+
case 'MAX_TOKENS':
|
|
318
|
+
stopReason = 'max_tokens';
|
|
319
|
+
break;
|
|
320
|
+
case 'SAFETY':
|
|
321
|
+
stopReason = 'content_filter';
|
|
322
|
+
break;
|
|
323
|
+
case 'RECITATION':
|
|
324
|
+
stopReason = 'content_filter';
|
|
325
|
+
break;
|
|
326
|
+
default:
|
|
327
|
+
stopReason = 'end_turn';
|
|
328
|
+
}
|
|
329
|
+
// Check if we have tool calls - that changes the stop reason
|
|
330
|
+
if (content.some((block) => block.type === 'tool_use')) {
|
|
331
|
+
stopReason = 'tool_use';
|
|
332
|
+
}
|
|
333
|
+
const result = {
|
|
334
|
+
id: `gemini-${Date.now()}`, // Gemini doesn't provide response ID
|
|
335
|
+
content,
|
|
336
|
+
model,
|
|
337
|
+
stop_reason: stopReason,
|
|
338
|
+
};
|
|
339
|
+
if (response.usageMetadata) {
|
|
340
|
+
result.usage = {
|
|
341
|
+
input_tokens: response.usageMetadata.promptTokenCount,
|
|
342
|
+
output_tokens: response.usageMetadata.candidatesTokenCount,
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
return result;
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Translate Gemini streaming chunk to Foundation StreamChunk format.
|
|
349
|
+
*/
|
|
350
|
+
translateStreamChunk(chunk, hasStartedContent, currentToolCallIndex, activeToolCalls) {
|
|
351
|
+
const chunks = [];
|
|
352
|
+
const candidate = chunk.candidates?.[0];
|
|
353
|
+
if (!candidate?.content?.parts) {
|
|
354
|
+
return chunks;
|
|
355
|
+
}
|
|
356
|
+
for (const part of candidate.content.parts) {
|
|
357
|
+
// Handle text content
|
|
358
|
+
if (part.text !== undefined) {
|
|
359
|
+
// Emit content_block_start if this is the first content
|
|
360
|
+
if (!hasStartedContent) {
|
|
361
|
+
chunks.push({
|
|
362
|
+
type: 'content_block_start',
|
|
363
|
+
index: 0,
|
|
364
|
+
content_block: {
|
|
365
|
+
type: 'text',
|
|
366
|
+
text: '',
|
|
367
|
+
},
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
// Emit content delta
|
|
371
|
+
chunks.push({
|
|
372
|
+
type: 'content_block_delta',
|
|
373
|
+
index: 0,
|
|
374
|
+
delta: {
|
|
375
|
+
type: 'text_delta',
|
|
376
|
+
text: part.text,
|
|
377
|
+
},
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
// Handle function calls
|
|
381
|
+
if (part.functionCall) {
|
|
382
|
+
const toolIndex = currentToolCallIndex;
|
|
383
|
+
const toolId = `call_${Date.now()}_${toolIndex}`;
|
|
384
|
+
// Track this tool call
|
|
385
|
+
activeToolCalls.set(toolIndex, {
|
|
386
|
+
id: toolId,
|
|
387
|
+
name: part.functionCall.name,
|
|
388
|
+
});
|
|
389
|
+
// Emit content_block_start for tool use
|
|
390
|
+
chunks.push({
|
|
391
|
+
type: 'content_block_start',
|
|
392
|
+
index: toolIndex + 1, // Offset by 1 since text is at index 0
|
|
393
|
+
content_block: {
|
|
394
|
+
type: 'tool_use',
|
|
395
|
+
id: toolId,
|
|
396
|
+
name: part.functionCall.name,
|
|
397
|
+
input: part.functionCall.args,
|
|
398
|
+
},
|
|
399
|
+
});
|
|
400
|
+
// Emit the full arguments as a delta (Gemini sends complete args)
|
|
401
|
+
chunks.push({
|
|
402
|
+
type: 'content_block_delta',
|
|
403
|
+
index: toolIndex + 1,
|
|
404
|
+
delta: {
|
|
405
|
+
type: 'input_json_delta',
|
|
406
|
+
text: JSON.stringify(part.functionCall.args),
|
|
407
|
+
},
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
return chunks;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
//# sourceMappingURL=gemini.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Groq Provider Implementation
|
|
3
|
+
*
|
|
4
|
+
* Groq provides ultra-fast LPU inference (up to 18x faster than GPU).
|
|
5
|
+
* It uses an OpenAI-compatible API format.
|
|
6
|
+
* This provider extends OpenAIProvider with the correct name identifier.
|
|
7
|
+
*/
|
|
8
|
+
import { OpenAIProvider } from './openai.js';
|
|
9
|
+
import type { ProviderConfig } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Groq API provider adapter.
|
|
12
|
+
*
|
|
13
|
+
* Uses OpenAI-compatible API format with Groq endpoints.
|
|
14
|
+
* Provides ultra-fast inference using custom LPU hardware.
|
|
15
|
+
*
|
|
16
|
+
* Default base URL: https://api.groq.com/openai/v1
|
|
17
|
+
* Available models: llama-3.3-70b-versatile, llama-3.1-8b-instant, mixtral-8x7b-32768, gemma2-9b-it
|
|
18
|
+
*/
|
|
19
|
+
export declare class GroqProvider extends OpenAIProvider {
|
|
20
|
+
readonly name = "groq";
|
|
21
|
+
constructor(config: ProviderConfig);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=groq.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groq.d.ts","sourceRoot":"","sources":["../../src/providers/groq.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAKjD;;;;;;;;GAQG;AACH,qBAAa,YAAa,SAAQ,cAAc;IAC9C,SAAyB,IAAI,UAAU;gBAE3B,MAAM,EAAE,cAAc;CAQnC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Groq Provider Implementation
|
|
3
|
+
*
|
|
4
|
+
* Groq provides ultra-fast LPU inference (up to 18x faster than GPU).
|
|
5
|
+
* It uses an OpenAI-compatible API format.
|
|
6
|
+
* This provider extends OpenAIProvider with the correct name identifier.
|
|
7
|
+
*/
|
|
8
|
+
import { OpenAIProvider } from './openai.js';
|
|
9
|
+
// Default base URL for Groq API
|
|
10
|
+
const GROQ_BASE_URL = 'https://api.groq.com/openai/v1';
|
|
11
|
+
/**
|
|
12
|
+
* Groq API provider adapter.
|
|
13
|
+
*
|
|
14
|
+
* Uses OpenAI-compatible API format with Groq endpoints.
|
|
15
|
+
* Provides ultra-fast inference using custom LPU hardware.
|
|
16
|
+
*
|
|
17
|
+
* Default base URL: https://api.groq.com/openai/v1
|
|
18
|
+
* Available models: llama-3.3-70b-versatile, llama-3.1-8b-instant, mixtral-8x7b-32768, gemma2-9b-it
|
|
19
|
+
*/
|
|
20
|
+
export class GroqProvider extends OpenAIProvider {
|
|
21
|
+
name = 'groq';
|
|
22
|
+
constructor(config) {
|
|
23
|
+
// Ensure base_url defaults to Groq endpoint if not specified
|
|
24
|
+
const configWithDefaults = {
|
|
25
|
+
...config,
|
|
26
|
+
base_url: config.base_url ?? GROQ_BASE_URL,
|
|
27
|
+
};
|
|
28
|
+
super(configWithDefaults);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=groq.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groq.js","sourceRoot":"","sources":["../../src/providers/groq.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,gCAAgC;AAChC,MAAM,aAAa,GAAG,gCAAgC,CAAC;AAEvD;;;;;;;;GAQG;AACH,MAAM,OAAO,YAAa,SAAQ,cAAc;IACrB,IAAI,GAAG,MAAM,CAAC;IAEvC,YAAY,MAAsB;QAChC,6DAA6D;QAC7D,MAAM,kBAAkB,GAAmB;YACzC,GAAG,MAAM;YACT,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,aAAa;SAC3C,CAAC;QACF,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC5B,CAAC;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider Module Exports
|
|
3
|
+
*
|
|
4
|
+
* This module provides a unified interface for interacting with various LLM providers.
|
|
5
|
+
* Supports 13+ providers including Anthropic, OpenAI, Google, and many OpenAI-compatible APIs.
|
|
6
|
+
*/
|
|
7
|
+
export * from './types.js';
|
|
8
|
+
export { BaseProvider } from './base.js';
|
|
9
|
+
export { AnthropicProvider } from './anthropic.js';
|
|
10
|
+
export { OpenAIProvider } from './openai.js';
|
|
11
|
+
export { GeminiProvider } from './gemini.js';
|
|
12
|
+
export { OllamaProvider } from './ollama.js';
|
|
13
|
+
export { GroqProvider } from './groq.js';
|
|
14
|
+
export { TogetherProvider } from './together.js';
|
|
15
|
+
export { FireworksProvider } from './fireworks.js';
|
|
16
|
+
export { OpenRouterProvider } from './openrouter.js';
|
|
17
|
+
export { PerplexityProvider } from './perplexity.js';
|
|
18
|
+
export { KimiProvider } from './kimi.js';
|
|
19
|
+
export { KimiCodeProvider } from './kimi-code.js';
|
|
20
|
+
export { ZAIProvider } from './zai.js';
|
|
21
|
+
export { DeepSeekProvider } from './deepseek.js';
|
|
22
|
+
export { ProviderManager, createProvider, createProviderManager, type ProviderFactory, } from './manager.js';
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGjD,OAAO,EACL,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,KAAK,eAAe,GACrB,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider Module Exports
|
|
3
|
+
*
|
|
4
|
+
* This module provides a unified interface for interacting with various LLM providers.
|
|
5
|
+
* Supports 13+ providers including Anthropic, OpenAI, Google, and many OpenAI-compatible APIs.
|
|
6
|
+
*/
|
|
7
|
+
// Types
|
|
8
|
+
export * from './types.js';
|
|
9
|
+
// Base class
|
|
10
|
+
export { BaseProvider } from './base.js';
|
|
11
|
+
// Provider implementations
|
|
12
|
+
export { AnthropicProvider } from './anthropic.js';
|
|
13
|
+
export { OpenAIProvider } from './openai.js';
|
|
14
|
+
export { GeminiProvider } from './gemini.js';
|
|
15
|
+
export { OllamaProvider } from './ollama.js';
|
|
16
|
+
export { GroqProvider } from './groq.js';
|
|
17
|
+
export { TogetherProvider } from './together.js';
|
|
18
|
+
export { FireworksProvider } from './fireworks.js';
|
|
19
|
+
export { OpenRouterProvider } from './openrouter.js';
|
|
20
|
+
export { PerplexityProvider } from './perplexity.js';
|
|
21
|
+
export { KimiProvider } from './kimi.js';
|
|
22
|
+
export { KimiCodeProvider } from './kimi-code.js';
|
|
23
|
+
export { ZAIProvider } from './zai.js';
|
|
24
|
+
export { DeepSeekProvider } from './deepseek.js';
|
|
25
|
+
// Manager
|
|
26
|
+
export { ProviderManager, createProvider, createProviderManager, } from './manager.js';
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,aAAa;AACb,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,2BAA2B;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,UAAU;AACV,OAAO,EACL,eAAe,EACf,cAAc,EACd,qBAAqB,GAEtB,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kimi Code Provider Implementation
|
|
3
|
+
*
|
|
4
|
+
* Kimi Code is a separate API endpoint from the regular Moonshot (Kimi) API.
|
|
5
|
+
* It uses the same API key but requires:
|
|
6
|
+
* - Different base URL: https://api.kimi.com/coding/v1
|
|
7
|
+
* - Special User-Agent header: claude-code/1.0
|
|
8
|
+
* - Model: kimi-for-coding
|
|
9
|
+
*
|
|
10
|
+
* The API is OpenAI-compatible, so we extend OpenAIProvider.
|
|
11
|
+
*/
|
|
12
|
+
import { OpenAIProvider } from './openai.js';
|
|
13
|
+
import type { ProviderConfig } from './types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Kimi Code API provider adapter.
|
|
16
|
+
*
|
|
17
|
+
* Uses OpenAI-compatible API format with the Kimi Code endpoint.
|
|
18
|
+
* CRITICAL: Requires User-Agent header set to 'claude-code/1.0' or the API rejects requests.
|
|
19
|
+
*
|
|
20
|
+
* Default base URL: https://api.kimi.com/coding/v1
|
|
21
|
+
* Default model: kimi-for-coding
|
|
22
|
+
*/
|
|
23
|
+
export declare class KimiCodeProvider extends OpenAIProvider {
|
|
24
|
+
readonly name = "kimi-code";
|
|
25
|
+
constructor(config: ProviderConfig);
|
|
26
|
+
/**
|
|
27
|
+
* Build headers for Kimi Code API requests.
|
|
28
|
+
* CRITICAL: Adds the required User-Agent header that Kimi Code API mandates.
|
|
29
|
+
*/
|
|
30
|
+
protected buildHeaders(): Record<string, string>;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=kimi-code.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kimi-code.d.ts","sourceRoot":"","sources":["../../src/providers/kimi-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMjD;;;;;;;;GAQG;AACH,qBAAa,gBAAiB,SAAQ,cAAc;IAClD,SAAyB,IAAI,eAAe;gBAEhC,MAAM,EAAE,cAAc;IASlC;;;OAGG;cACgB,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAQ1D"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kimi Code Provider Implementation
|
|
3
|
+
*
|
|
4
|
+
* Kimi Code is a separate API endpoint from the regular Moonshot (Kimi) API.
|
|
5
|
+
* It uses the same API key but requires:
|
|
6
|
+
* - Different base URL: https://api.kimi.com/coding/v1
|
|
7
|
+
* - Special User-Agent header: claude-code/1.0
|
|
8
|
+
* - Model: kimi-for-coding
|
|
9
|
+
*
|
|
10
|
+
* The API is OpenAI-compatible, so we extend OpenAIProvider.
|
|
11
|
+
*/
|
|
12
|
+
import { OpenAIProvider } from './openai.js';
|
|
13
|
+
// Constants for Kimi Code API
|
|
14
|
+
const KIMI_CODE_BASE_URL = 'https://api.kimi.com/coding/v1';
|
|
15
|
+
const KIMI_CODE_USER_AGENT = 'claude-code/1.0';
|
|
16
|
+
/**
|
|
17
|
+
* Kimi Code API provider adapter.
|
|
18
|
+
*
|
|
19
|
+
* Uses OpenAI-compatible API format with the Kimi Code endpoint.
|
|
20
|
+
* CRITICAL: Requires User-Agent header set to 'claude-code/1.0' or the API rejects requests.
|
|
21
|
+
*
|
|
22
|
+
* Default base URL: https://api.kimi.com/coding/v1
|
|
23
|
+
* Default model: kimi-for-coding
|
|
24
|
+
*/
|
|
25
|
+
export class KimiCodeProvider extends OpenAIProvider {
|
|
26
|
+
name = 'kimi-code';
|
|
27
|
+
constructor(config) {
|
|
28
|
+
// Ensure base_url defaults to Kimi Code endpoint if not specified
|
|
29
|
+
const configWithDefaults = {
|
|
30
|
+
...config,
|
|
31
|
+
base_url: config.base_url ?? KIMI_CODE_BASE_URL,
|
|
32
|
+
};
|
|
33
|
+
super(configWithDefaults);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Build headers for Kimi Code API requests.
|
|
37
|
+
* CRITICAL: Adds the required User-Agent header that Kimi Code API mandates.
|
|
38
|
+
*/
|
|
39
|
+
buildHeaders() {
|
|
40
|
+
const headers = super.buildHeaders();
|
|
41
|
+
// Kimi Code API requires this specific User-Agent header
|
|
42
|
+
headers['User-Agent'] = KIMI_CODE_USER_AGENT;
|
|
43
|
+
return headers;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=kimi-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kimi-code.js","sourceRoot":"","sources":["../../src/providers/kimi-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,8BAA8B;AAC9B,MAAM,kBAAkB,GAAG,gCAAgC,CAAC;AAC5D,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AAE/C;;;;;;;;GAQG;AACH,MAAM,OAAO,gBAAiB,SAAQ,cAAc;IACzB,IAAI,GAAG,WAAW,CAAC;IAE5C,YAAY,MAAsB;QAChC,kEAAkE;QAClE,MAAM,kBAAkB,GAAmB;YACzC,GAAG,MAAM;YACT,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,kBAAkB;SAChD,CAAC;QACF,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACgB,YAAY;QAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;QAErC,yDAAyD;QACzD,OAAO,CAAC,YAAY,CAAC,GAAG,oBAAoB,CAAC;QAE7C,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kimi (Moonshot AI) Provider Implementation
|
|
3
|
+
*
|
|
4
|
+
* Kimi uses an OpenAI-compatible API format.
|
|
5
|
+
* This provider extends OpenAIProvider with the correct name identifier.
|
|
6
|
+
*/
|
|
7
|
+
import { OpenAIProvider } from './openai.js';
|
|
8
|
+
import type { ProviderConfig } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Kimi (Moonshot AI) API provider adapter.
|
|
11
|
+
*
|
|
12
|
+
* Uses OpenAI-compatible API format but with Kimi endpoints.
|
|
13
|
+
* Default base URL: https://api.moonshot.ai/v1
|
|
14
|
+
*/
|
|
15
|
+
export declare class KimiProvider extends OpenAIProvider {
|
|
16
|
+
readonly name = "kimi";
|
|
17
|
+
constructor(config: ProviderConfig);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=kimi.d.ts.map
|